BASS.NET 體驗


一直也想試用 Un4seen 的 Bass 寫一個簡單的播放器,可惜只是一直也沒有時間,到了今天決定一試他的功能,不過由於還是初之接觸,而且網上的資料也沒有太多關於 .net 的方向,所以在摸了大約一小時左右,終於完成了這個可播放音樂的東西..

基本上就主要是用 C# 寫的,再加上 Bass.net.dll 和 Bass.dll 就可以完成這個超級簡單的 MP3 播放器,當然,這個 Lib 本來就可以支援多種格式,別的應該也可以順利播放.不過我就沒測試了.大約代碼如下

2009-08-19 補充:
bass.dll (2.4.2.3)
Bass.Net.dll (2.4.3.1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.IO;
using Un4seen.Bass;

namespace SeekSimpleMusicPlayer {
public partial class Form1 : Form {

private string _fileName = String.Empty;
private int _stream = 0;

public Form1() {
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e) {
//BassNet.Registration("email", "address"); // 可以到網上找找註冊碼

if (!Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_LATENCY, this.Handle, null)) {
MessageBox.Show(this, "Bass init error!");
}
}

private void Form1_Closing(object sender, CancelEventArgs e) {
Bass.BASS_Stop(); // 停止
Bass.BASS_Free(); // 釋放
}

private void btnOpen_Click(object sender, EventArgs e) {
OpenFileDialog f = new OpenFileDialog();
f.Filter = "All File (*.*)|*.*|MP3 File (*.mp3)|*.mp3";
f.FilterIndex = 2; // 預設為打開 *.Mp3
f.RestoreDirectory = true;
if (f.ShowDialog() == DialogResult.OK) {
if (File.Exists(f.FileName)) {
lbFilename.Text = Path.GetFileName(f.FileName); // 讀取檔案名
this._fileName = f.FileName;
this.setBtnState(true, true, true);
} else {
this._fileName = String.Empty;
}
}
}

private void btnPlay_Click(object sender, EventArgs e) {
if (Bass.BASS_ChannelIsActive(this._stream) == BASSActive.BASS_ACTIVE_PLAYING) {
Bass.BASS_ChannelStop(this._stream);
this.setBtnState(true, true, true);
this.btnPlay.Text = "Play";
} else {
Bass.BASS_StreamFree(this._stream);
if (this._fileName != String.Empty) {
// 建立檔案的串流
this._stream = Bass.BASS_StreamCreateFile(this._fileName, 0, 0, BASSFlag.BASS_SAMPLE_FLOAT);

// 檢查是否成功建立 && 是否成功播放
if (this._stream != 0 && Bass.BASS_ChannelPlay(this._stream, false)) {
this.setBtnState(false, true, true);
this.btnPlay.Text = "Stop";
}
}
}
}

private void btnPause_Click(object sender, EventArgs e) {
if (Bass.BASS_ChannelIsActive(this._stream) == BASSActive.BASS_ACTIVE_PAUSED) {
// 如果為暫停中則再次播放並轉換文字
Bass.BASS_ChannelPlay(this._stream, false);
this.btnPause.Text = "Pause";
} else {
// 如果在播放中則暫時串流並轉換文字
Bass.BASS_ChannelPause(this._stream);
this.btnPause.Text = "Continue";
}
}

/* * * * *
Function
* * * * */
private void setBtnState(bool open, bool play, bool pause) {
this.btnOpen.Enabled = open;
this.btnPlay.Enabled = play;
this.btnPause.Enabled = pause;
}
}
}