一直也想試用 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) { 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 ; 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" ; } } private void setBtnState (bool open, bool play, bool pause) { this .btnOpen.Enabled = open; this .btnPlay.Enabled = play; this .btnPause.Enabled = pause; } } }