最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于C#實(shí)現(xiàn)音樂(lè)文件的播放功能

 更新時(shí)間:2024年05月06日 09:25:43   作者:2301_76253689  
本文介紹了如何使用C#編寫一個(gè)簡(jiǎn)單的程序來(lái)實(shí)現(xiàn)音樂(lè)文件的播放功能,程序能夠讀取MP3文件和ogg文件,并通過(guò)合適的控件進(jìn)行播放,同時(shí),程序具備處理異常、良好的用戶界面和兼容性的特點(diǎn),感興趣的朋友可以自己動(dòng)手嘗試一下

引言

在現(xiàn)代軟件開發(fā)中,音樂(lè)播放功能是一個(gè)常見(jiàn)的需求。本文將介紹如何使用C#編寫一個(gè)簡(jiǎn)單的程序來(lái)實(shí)現(xiàn)音樂(lè)文件的播放功能。我們將使用WindowsMediaPlayer控件來(lái)處理MP3文件,使用Naudi.Vorbis控件來(lái)處理ogg文件。同時(shí),我們將確保程序具備處理異常、良好的用戶界面和兼容性的特點(diǎn),以確保程序能夠在不同版本的C#中正常運(yùn)行。

開發(fā)環(huán)境

  • Visual Studio 2022
  • .NET Framework 4.8

實(shí)現(xiàn)步驟

步驟1:創(chuàng)建新的C#項(xiàng)目

首先,打開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:編寫代碼

以下是一個(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)擊打開按鈕選擇MP3或ogg文件進(jìn)行測(cè)試,驗(yàn)證程序是否能夠正常播放音樂(lè)文件。

代碼優(yōu)點(diǎn):

  1. 多格式支持: 通過(guò)使用NAudio和NAudio.Vorbis庫(kù),程序可以播放多種格式的音頻文件,包括常見(jiàn)的MP3、wav、FLAC以及OGG格式。這增加了程序的靈活性,使用戶可以播放各種不同格式的音樂(lè)。

  2. 良好的用戶界面: 程序提供了一個(gè)簡(jiǎn)單直觀的用戶界面,包括一個(gè)文件選擇按鈕、一個(gè)音樂(lè)列表框、播放控制按鈕(播放、停止、下一曲)、音量調(diào)節(jié)器和一個(gè)用于顯示當(dāng)前播放曲目的標(biāo)簽。這樣的界面使用戶能夠方便地選擇、播放和控制音樂(lè)。

  3. 異常處理: 程序?qū)赡艹霈F(xiàn)的異常進(jìn)行了處理,比如文件不存在、文件讀取錯(cuò)誤等。在播放OGG文件時(shí),使用了try-catch語(yǔ)句來(lái)捕獲可能拋出的異常,并通過(guò)控制臺(tái)輸出相應(yīng)的信息。這有助于提高程序的穩(wěn)定性和可靠性。

  4. 代碼結(jié)構(gòu)清晰: 代碼采用了適當(dāng)?shù)姆椒ê褪录幚沓绦騺?lái)實(shí)現(xiàn)不同的功能,如文件選擇、播放、停止、切換音樂(lè)等。這使得代碼易于閱讀、理解和維護(hù)。

  5. 兼容性: 由于代碼使用了標(biāo)準(zhǔn)的C#語(yǔ)法和庫(kù),并且沒(méi)有使用任何特定于某個(gè)版本的功能,因此具有良好的兼容性,能夠在不同版本的C#中正常運(yùn)行。

代碼關(guān)鍵詞解釋:

  1. usingusing 關(guān)鍵字用于引入命名空間,使得其中的類和方法可以在當(dāng)前代碼文件中直接使用。例如:using NAudio.Wave; 和 using NAudio.Vorbis; 引入了 NAudio.Wave 和 NAudio.Vorbis 命名空間。

  2. partial classpartial 關(guān)鍵字用于指示該類的定義是分布在多個(gè)文件中的。在這種情況下,Form1 類的定義分布在多個(gè)代碼文件中。這通常用于將一個(gè)類的定義拆分成多個(gè)文件,以便更好地組織和管理代碼。

  3. string[]string[] 表示字符串?dāng)?shù)組,用于存儲(chǔ)多個(gè)字符串值。在這段代碼中,files 變量和 localmusiclist 變量都是字符串?dāng)?shù)組。

  4. List<T>List<T> 是 C# 中的泛型集合類型,用于存儲(chǔ)一組相同類型的元素。在這段代碼中,localmusiclist 變量是一個(gè) List<string> 類型的列表,用于存儲(chǔ)音樂(lè)文件的路徑。

  5. Path.GetExtension()Path.GetExtension() 是一個(gè)靜態(tài)方法,用于獲取文件路徑中的文件擴(kuò)展名。在這段代碼中,它用于獲取音樂(lè)文件的擴(kuò)展名,以判斷文件類型。

  6. openFileDialogopenFileDialog 是一個(gè) Windows 窗體控件,用于在應(yīng)用程序中選擇文件。它可以打開一個(gè)對(duì)話框,讓用戶選擇一個(gè)或多個(gè)文件,并返回選定文件的路徑。

  7. button_Click 事件button_Click 是一個(gè)事件處理程序,用于響應(yīng)按鈕的單擊事件。在這段代碼中,button1_Click、button2_Click、button3_Click 和 button4_Click 方法都是按鈕單擊事件的處理程序。

  8. ListBox.SelectedIndexChanged 事件ListBox.SelectedIndexChanged 是一個(gè)事件,當(dāng)列表框中選中項(xiàng)發(fā)生變化時(shí)觸發(fā)。在這段代碼中,listBox1_SelectedIndexChanged 方法是列表框選中項(xiàng)變化事件的處理程序。

  9. trackBar_Scroll 事件trackBar_Scroll 是一個(gè)事件,當(dāng)滑動(dòng)條的值發(fā)生變化時(shí)觸發(fā)。在這段代碼中,trackBar1_Scroll 方法是滑動(dòng)條值變化事件的處理程序。

  10. axWindowsMediaPlayeraxWindowsMediaPlayer 是一個(gè) Windows 窗體控件,用于播放視頻和音頻文件。它提供了一組控制方法和屬性,用于控制媒體文件的播放、暫停、停止等操作。

  11. WaveOutEvent 和 VorbisWaveReaderWaveOutEvent 和 VorbisWaveReader 是 NAudio 庫(kù)中的類,用于播放音頻文件。WaveOutEvent 用于播放 wav 格式的音頻文件,而 VorbisWaveReader 則用于播放 OGG 格式的音頻文件。

  12. try-catchtry-catch 是異常處理的一種機(jī)制,用于捕獲可能發(fā)生異常的代碼塊,并在發(fā)生異常時(shí)執(zhí)行相應(yīng)的異常處理邏輯。在這段代碼中,try-catch 用于捕獲可能發(fā)生的文件讀取錯(cuò)誤異常,并在發(fā)生異常時(shí)輸出錯(cuò)誤信息。

結(jié)論

通過(guò)本文的介紹,我們學(xué)習(xí)了如何使用C#編寫一個(gè)簡(jiǎn)單的程序來(lái)實(shí)現(xiàn)音樂(lè)文件的播放功能。我們使用了WindowsMediaPlayer控件和Naudi.Vorbis控件來(lái)處理不同格式的音樂(lè)文件,并確保程序具備處理異常、良好的用戶界面和兼容性的特點(diǎn),以確保程序能夠在不同版本的C#中正常運(yùn)行。希望本文能夠?qū)#開發(fā)者有所幫助,謝謝閱讀!

到此這篇關(guān)于基于C#實(shí)現(xiàn)音樂(lè)文件的播放功能的文章就介紹到這了,更多相關(guān)C#音樂(lè)播放功能內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

  • C#保存與讀取DataTable信息到XML格式的方法

    C#保存與讀取DataTable信息到XML格式的方法

    這篇文章主要介紹了C#保存與讀取DataTable信息到XML格式的方法,實(shí)例分析了C#讀取DataTable信息到XML格式及讀取XML格式數(shù)據(jù)到DataTable的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • C# 創(chuàng)建MDB數(shù)據(jù)庫(kù)、并存放表格數(shù)據(jù)的案例

    C# 創(chuàng)建MDB數(shù)據(jù)庫(kù)、并存放表格數(shù)據(jù)的案例

    這篇文章主要介紹了C# 創(chuàng)建MDB數(shù)據(jù)庫(kù)、并存放表格數(shù)據(jù)的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • C#獲取微信小程序的云數(shù)據(jù)庫(kù)中數(shù)據(jù)的示例代碼

    C#獲取微信小程序的云數(shù)據(jù)庫(kù)中數(shù)據(jù)的示例代碼

    本文主要介紹了C#獲取微信小程序的云數(shù)據(jù)庫(kù)中數(shù)據(jù)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 詳解C#編程中.NET的弱事件模式

    詳解C#編程中.NET的弱事件模式

    這篇文章主要介紹了C#編程中.NET的弱事件模式,深入討論了C#中相關(guān)的垃圾回收機(jī)制,需要的朋友可以參考下
    2015-07-07
  • C#開發(fā)Winform程序調(diào)用存儲(chǔ)過(guò)程

    C#開發(fā)Winform程序調(diào)用存儲(chǔ)過(guò)程

    這篇文章介紹了C#開發(fā)Winform程序調(diào)用存儲(chǔ)過(guò)程的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C#中DataTable排序、檢索、合并等操作實(shí)例

    C#中DataTable排序、檢索、合并等操作實(shí)例

    這篇文章主要介紹了C#中DataTable排序、檢索、合并等操作實(shí)例,其中詳細(xì)介紹了DataTable.Select的一些注意問(wèn)題和使用技巧等,需要的朋友可以參考下
    2014-04-04
  • C#實(shí)現(xiàn)對(duì)Json字符串處理實(shí)例

    C#實(shí)現(xiàn)對(duì)Json字符串處理實(shí)例

    這篇文章主要介紹了C#實(shí)現(xiàn)對(duì)Json字符串處理,通過(guò)一個(gè)json實(shí)例分析了C#進(jìn)行JSON操作的方法,需要的朋友可以參考下
    2014-09-09
  • C#中將字符串轉(zhuǎn)換為整型的三種解決方法總結(jié)

    C#中將字符串轉(zhuǎn)換為整型的三種解決方法總結(jié)

    本篇文章是對(duì)C#中將字符串轉(zhuǎn)換為整型的三種解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • 基于WPF封裝一個(gè)可擴(kuò)展的Window

    基于WPF封裝一個(gè)可擴(kuò)展的Window

    WPF中Window相信大家都很熟悉,有時(shí)我們有一些自定義需求默認(rèn)Window是無(wú)法滿足的,所以本文就來(lái)和大家聊聊WPF如何封裝一個(gè)可擴(kuò)展的Window吧
    2024-04-04
  • 最新評(píng)論

    南部县| 焉耆| 固始县| 岐山县| 抚顺市| 河津市| 宿松县| 昂仁县| 彩票| 柳州市| 鸡西市| 息烽县| 天镇县| 盐边县| 铜山县| 深泽县| 通州市| 临城县| 沧州市| 临漳县| 蒲江县| 永州市| 府谷县| 安吉县| 东兴市| 泌阳县| 山东省| 舒城县| 铅山县| 绍兴县| 当涂县| 綦江县| 米易县| 虹口区| 武山县| 合川市| 吴忠市| 南平市| 炉霍县| 铁力市| 平湖市|