基于C#實(shí)現(xiàn)音樂(lè)文件的播放功能
引言
在現(xiàn)代軟件開(kāi)發(fā)中,音樂(lè)播放功能是一個(gè)常見(jiàn)的需求。本文將介紹如何使用C#編寫(xiě)一個(gè)簡(jiǎn)單的程序來(lái)實(shí)現(xiàn)音樂(lè)文件的播放功能。我們將使用WindowsMediaPlayer控件來(lái)處理MP3文件,使用Naudi.Vorbis控件來(lái)處理ogg文件。同時(shí),我們將確保程序具備處理異常、良好的用戶界面和兼容性的特點(diǎn),以確保程序能夠在不同版本的C#中正常運(yùn)行。
開(kāi)發(fā)環(huán)境
- Visual Studio 2022
- .NET Framework 4.8
實(shí)現(xiàn)步驟
步驟1:創(chuàng)建新的C#項(xiàng)目
首先,打開(kāi)Visual Studio并創(chuàng)建一個(gè)新的C#控制臺(tái)應(yīng)用程序項(xiàng)目。
步驟2:添加WindowsMediaPlayer控件
在Visual Studio的工具箱中,找到Windows Media Player控件,并將其拖放到窗體中。
步驟3:添加Naudi.Vorbis控件
使用NuGet包管理器,搜索并安裝Naudi.Vorbis控件。然后,在代碼中引入相應(yīng)的命名空間。
步驟4:編寫(xiě)代碼
以下是一個(gè)簡(jiǎn)單的示例代碼,演示了如何實(shí)現(xiàn)音樂(lè)文件的播放功能:
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();//將新文件導(dǎo)入,將原文件清空 if (files != null) { Array.Clear(files, 0, files.Length); } files = openFileDialog1.FileNames;//因?yàn)閒ilenames必須為數(shù)組 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:測(cè)試
編譯并運(yùn)行程序,點(diǎn)擊打開(kāi)按鈕選擇MP3或ogg文件進(jìn)行測(cè)試,驗(yàn)證程序是否能夠正常播放音樂(lè)文件。
代碼優(yōu)點(diǎn):
多格式支持: 通過(guò)使用NAudio和NAudio.Vorbis庫(kù),程序可以播放多種格式的音頻文件,包括常見(jiàn)的MP3、wav、FLAC以及OGG格式。這增加了程序的靈活性,使用戶可以播放各種不同格式的音樂(lè)。
良好的用戶界面: 程序提供了一個(gè)簡(jiǎn)單直觀的用戶界面,包括一個(gè)文件選擇按鈕、一個(gè)音樂(lè)列表框、播放控制按鈕(播放、停止、下一曲)、音量調(diào)節(jié)器和一個(gè)用于顯示當(dāng)前播放曲目的標(biāo)簽。這樣的界面使用戶能夠方便地選擇、播放和控制音樂(lè)。
異常處理: 程序?qū)赡艹霈F(xiàn)的異常進(jìn)行了處理,比如文件不存在、文件讀取錯(cuò)誤等。在播放OGG文件時(shí),使用了try-catch語(yǔ)句來(lái)捕獲可能拋出的異常,并通過(guò)控制臺(tái)輸出相應(yīng)的信息。這有助于提高程序的穩(wěn)定性和可靠性。
代碼結(jié)構(gòu)清晰: 代碼采用了適當(dāng)?shù)姆椒ê褪录幚沓绦騺?lái)實(shí)現(xiàn)不同的功能,如文件選擇、播放、停止、切換音樂(lè)等。這使得代碼易于閱讀、理解和維護(hù)。
兼容性: 由于代碼使用了標(biāo)準(zhǔn)的C#語(yǔ)法和庫(kù),并且沒(méi)有使用任何特定于某個(gè)版本的功能,因此具有良好的兼容性,能夠在不同版本的C#中正常運(yùn)行。
代碼關(guān)鍵詞解釋:
using:
using
關(guān)鍵字用于引入命名空間,使得其中的類和方法可以在當(dāng)前代碼文件中直接使用。例如:using NAudio.Wave;
和using NAudio.Vorbis;
引入了NAudio.Wave
和NAudio.Vorbis
命名空間。partial class:
partial
關(guān)鍵字用于指示該類的定義是分布在多個(gè)文件中的。在這種情況下,Form1
類的定義分布在多個(gè)代碼文件中。這通常用于將一個(gè)類的定義拆分成多個(gè)文件,以便更好地組織和管理代碼。string[]:
string[]
表示字符串?dāng)?shù)組,用于存儲(chǔ)多個(gè)字符串值。在這段代碼中,files
變量和localmusiclist
變量都是字符串?dāng)?shù)組。List<T>:
List<T>
是 C# 中的泛型集合類型,用于存儲(chǔ)一組相同類型的元素。在這段代碼中,localmusiclist
變量是一個(gè)List<string>
類型的列表,用于存儲(chǔ)音樂(lè)文件的路徑。Path.GetExtension():
Path.GetExtension()
是一個(gè)靜態(tài)方法,用于獲取文件路徑中的文件擴(kuò)展名。在這段代碼中,它用于獲取音樂(lè)文件的擴(kuò)展名,以判斷文件類型。openFileDialog:
openFileDialog
是一個(gè) Windows 窗體控件,用于在應(yīng)用程序中選擇文件。它可以打開(kāi)一個(gè)對(duì)話框,讓用戶選擇一個(gè)或多個(gè)文件,并返回選定文件的路徑。button_Click 事件:
button_Click
是一個(gè)事件處理程序,用于響應(yīng)按鈕的單擊事件。在這段代碼中,button1_Click
、button2_Click
、button3_Click
和button4_Click
方法都是按鈕單擊事件的處理程序。ListBox.SelectedIndexChanged 事件:
ListBox.SelectedIndexChanged
是一個(gè)事件,當(dāng)列表框中選中項(xiàng)發(fā)生變化時(shí)觸發(fā)。在這段代碼中,listBox1_SelectedIndexChanged
方法是列表框選中項(xiàng)變化事件的處理程序。trackBar_Scroll 事件:
trackBar_Scroll
是一個(gè)事件,當(dāng)滑動(dòng)條的值發(fā)生變化時(shí)觸發(fā)。在這段代碼中,trackBar1_Scroll
方法是滑動(dòng)條值變化事件的處理程序。axWindowsMediaPlayer:
axWindowsMediaPlayer
是一個(gè) Windows 窗體控件,用于播放視頻和音頻文件。它提供了一組控制方法和屬性,用于控制媒體文件的播放、暫停、停止等操作。WaveOutEvent 和 VorbisWaveReader:
WaveOutEvent
和VorbisWaveReader
是 NAudio 庫(kù)中的類,用于播放音頻文件。WaveOutEvent
用于播放 wav 格式的音頻文件,而VorbisWaveReader
則用于播放 OGG 格式的音頻文件。try-catch:
try-catch
是異常處理的一種機(jī)制,用于捕獲可能發(fā)生異常的代碼塊,并在發(fā)生異常時(shí)執(zhí)行相應(yīng)的異常處理邏輯。在這段代碼中,try-catch
用于捕獲可能發(fā)生的文件讀取錯(cuò)誤異常,并在發(fā)生異常時(shí)輸出錯(cuò)誤信息。
結(jié)論
通過(guò)本文的介紹,我們學(xué)習(xí)了如何使用C#編寫(xiě)一個(gè)簡(jiǎn)單的程序來(lái)實(shí)現(xiàn)音樂(lè)文件的播放功能。我們使用了WindowsMediaPlayer控件和Naudi.Vorbis控件來(lái)處理不同格式的音樂(lè)文件,并確保程序具備處理異常、良好的用戶界面和兼容性的特點(diǎn),以確保程序能夠在不同版本的C#中正常運(yùn)行。希望本文能夠?qū)#開(kāi)發(fā)者有所幫助,謝謝閱讀!
到此這篇關(guān)于基于C#實(shí)現(xiàn)音樂(lè)文件的播放功能的文章就介紹到這了,更多相關(guān)C#音樂(lè)播放功能內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實(shí)現(xiàn)功能強(qiáng)大的中國(guó)農(nóng)歷日歷操作類
這篇文章主要介紹了C#實(shí)現(xiàn)功能強(qiáng)大的中國(guó)農(nóng)歷日歷操作類,實(shí)例分析了C#操作時(shí)間及字符串的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-03-03C# wpf簡(jiǎn)單顏色板的實(shí)現(xiàn)
wpf本身沒(méi)有提供顏色板之類的控件,有些業(yè)務(wù)使用場(chǎng)景需要使用顏色板之類的控件,本文就簡(jiǎn)單實(shí)現(xiàn),感興趣的可以了解一下2021-10-10C#?WPF后臺(tái)動(dòng)態(tài)添加控件實(shí)戰(zhàn)教程
最近嘗試用wpf在后臺(tái)動(dòng)態(tài)添加控件,所以下面這篇文章主要給大家介紹了關(guān)于C#?WPF后臺(tái)動(dòng)態(tài)添加控件的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05