基于C#實現音樂文件的播放功能
引言
在現代軟件開發(fā)中,音樂播放功能是一個常見的需求。本文將介紹如何使用C#編寫一個簡單的程序來實現音樂文件的播放功能。我們將使用WindowsMediaPlayer控件來處理MP3文件,使用Naudi.Vorbis控件來處理ogg文件。同時,我們將確保程序具備處理異常、良好的用戶界面和兼容性的特點,以確保程序能夠在不同版本的C#中正常運行。
開發(fā)環(huán)境
- Visual Studio 2022
- .NET Framework 4.8
實現步驟
步驟1:創(chuàng)建新的C#項目
首先,打開Visual Studio并創(chuàng)建一個新的C#控制臺應用程序項目。
步驟2:添加WindowsMediaPlayer控件
在Visual Studio的工具箱中,找到Windows Media Player控件,并將其拖放到窗體中。
步驟3:添加Naudi.Vorbis控件
使用NuGet包管理器,搜索并安裝Naudi.Vorbis控件。然后,在代碼中引入相應的命名空間。
步驟4:編寫代碼
以下是一個簡單的示例代碼,演示了如何實現音樂文件的播放功能:
using NAudio.Wave;
using NAudio.Vorbis;
namespace WindowsFormsApp3
{
public partial class Form1 : Form
{
string[] files;
List<string> localmusiclist = new List<string>{};
public Form1()
{
InitializeComponent();
}
private void musicplay(string filename)
{
string extension = Path.GetExtension(filename);//fanhuiwenjiandekuozhanhouzhuiming
if (extension == ".ogg") { Console.WriteLine("這是ogg文件"); }
else
{
Console.WriteLine("這不是ogg文件");
axWindowsMediaPlayer1.Ctlcontrols.play();
}
}
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "選擇音頻|*mp3;*.wav;*.flac";
openFileDialog1.Multiselect = true;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
listBox1.Items.Clear();//將新文件導入,將原文件清空
if (files != null)
{
Array.Clear(files, 0, files.Length);
}
files = openFileDialog1.FileNames;//因為filenames必須為數組
string[] array = files;
foreach (string x in array)
{
listBox1.Items.Add(x);
localmusiclist.Add(x);
}
}
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (localmusiclist.Count > 0)
{
axWindowsMediaPlayer1.URL = localmusiclist[listBox1.SelectedIndex];
musicplay(axWindowsMediaPlayer1.URL);
label1.Text = Path.GetFileNameWithoutExtension(localmusiclist[listBox1.SelectedIndex]);
}
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
axWindowsMediaPlayer1.settings.volume = trackBar1.Value;
label2.Text=trackBar1.Value+"%";
}
private void button2_Click(object sender, EventArgs e)
{
axWindowsMediaPlayer1.Ctlcontrols.stop();
}
private void button3_Click(object sender, EventArgs e)
{
int nextIndex= listBox1.SelectedIndex;
if (localmusiclist.Count > 0)
{
if (listBox1.SelectedIndex + 1 > localmusiclist.Count)
{
nextIndex = 0;
}
axWindowsMediaPlayer1.URL = localmusiclist[nextIndex];
musicplay(axWindowsMediaPlayer1.URL);
label1.Text = Path.GetFileNameWithoutExtension(localmusiclist[nextIndex]);
listBox1.SelectedIndex = nextIndex;
}
}
private void button4_Click(object sender, EventArgs e)
{
string oggFilePath="";
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "播放音頻|*.ogg";
if(openFileDialog.ShowDialog() == DialogResult.OK)
{
oggFilePath =openFileDialog.FileName;
}
using (var vorbis = new VorbisWaveReader(oggFilePath))
{
using (var waveOut = new WaveOutEvent())
{
waveOut.Init(vorbis);
waveOut.Play();
while(waveOut.PlaybackState == PlaybackState.Playing)
{
System.Threading.Thread.Sleep(1000);
}
}
}
}
}
}步驟5:測試
編譯并運行程序,點擊打開按鈕選擇MP3或ogg文件進行測試,驗證程序是否能夠正常播放音樂文件。

代碼優(yōu)點:
多格式支持: 通過使用NAudio和NAudio.Vorbis庫,程序可以播放多種格式的音頻文件,包括常見的MP3、wav、FLAC以及OGG格式。這增加了程序的靈活性,使用戶可以播放各種不同格式的音樂。
良好的用戶界面: 程序提供了一個簡單直觀的用戶界面,包括一個文件選擇按鈕、一個音樂列表框、播放控制按鈕(播放、停止、下一曲)、音量調節(jié)器和一個用于顯示當前播放曲目的標簽。這樣的界面使用戶能夠方便地選擇、播放和控制音樂。
異常處理: 程序對可能出現的異常進行了處理,比如文件不存在、文件讀取錯誤等。在播放OGG文件時,使用了try-catch語句來捕獲可能拋出的異常,并通過控制臺輸出相應的信息。這有助于提高程序的穩(wěn)定性和可靠性。
代碼結構清晰: 代碼采用了適當的方法和事件處理程序來實現不同的功能,如文件選擇、播放、停止、切換音樂等。這使得代碼易于閱讀、理解和維護。
兼容性: 由于代碼使用了標準的C#語法和庫,并且沒有使用任何特定于某個版本的功能,因此具有良好的兼容性,能夠在不同版本的C#中正常運行。
代碼關鍵詞解釋:
using:
using關鍵字用于引入命名空間,使得其中的類和方法可以在當前代碼文件中直接使用。例如:using NAudio.Wave;和using NAudio.Vorbis;引入了NAudio.Wave和NAudio.Vorbis命名空間。partial class:
partial關鍵字用于指示該類的定義是分布在多個文件中的。在這種情況下,Form1類的定義分布在多個代碼文件中。這通常用于將一個類的定義拆分成多個文件,以便更好地組織和管理代碼。string[]:
string[]表示字符串數組,用于存儲多個字符串值。在這段代碼中,files變量和localmusiclist變量都是字符串數組。List<T>:
List<T>是 C# 中的泛型集合類型,用于存儲一組相同類型的元素。在這段代碼中,localmusiclist變量是一個List<string>類型的列表,用于存儲音樂文件的路徑。Path.GetExtension():
Path.GetExtension()是一個靜態(tài)方法,用于獲取文件路徑中的文件擴展名。在這段代碼中,它用于獲取音樂文件的擴展名,以判斷文件類型。openFileDialog:
openFileDialog是一個 Windows 窗體控件,用于在應用程序中選擇文件。它可以打開一個對話框,讓用戶選擇一個或多個文件,并返回選定文件的路徑。button_Click 事件:
button_Click是一個事件處理程序,用于響應按鈕的單擊事件。在這段代碼中,button1_Click、button2_Click、button3_Click和button4_Click方法都是按鈕單擊事件的處理程序。ListBox.SelectedIndexChanged 事件:
ListBox.SelectedIndexChanged是一個事件,當列表框中選中項發(fā)生變化時觸發(fā)。在這段代碼中,listBox1_SelectedIndexChanged方法是列表框選中項變化事件的處理程序。trackBar_Scroll 事件:
trackBar_Scroll是一個事件,當滑動條的值發(fā)生變化時觸發(fā)。在這段代碼中,trackBar1_Scroll方法是滑動條值變化事件的處理程序。axWindowsMediaPlayer:
axWindowsMediaPlayer是一個 Windows 窗體控件,用于播放視頻和音頻文件。它提供了一組控制方法和屬性,用于控制媒體文件的播放、暫停、停止等操作。WaveOutEvent 和 VorbisWaveReader:
WaveOutEvent和VorbisWaveReader是 NAudio 庫中的類,用于播放音頻文件。WaveOutEvent用于播放 wav 格式的音頻文件,而VorbisWaveReader則用于播放 OGG 格式的音頻文件。try-catch:
try-catch是異常處理的一種機制,用于捕獲可能發(fā)生異常的代碼塊,并在發(fā)生異常時執(zhí)行相應的異常處理邏輯。在這段代碼中,try-catch用于捕獲可能發(fā)生的文件讀取錯誤異常,并在發(fā)生異常時輸出錯誤信息。
結論
通過本文的介紹,我們學習了如何使用C#編寫一個簡單的程序來實現音樂文件的播放功能。我們使用了WindowsMediaPlayer控件和Naudi.Vorbis控件來處理不同格式的音樂文件,并確保程序具備處理異常、良好的用戶界面和兼容性的特點,以確保程序能夠在不同版本的C#中正常運行。希望本文能夠對C#開發(fā)者有所幫助,謝謝閱讀!
到此這篇關于基于C#實現音樂文件的播放功能的文章就介紹到這了,更多相關C#音樂播放功能內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

