用C#和NAudio库开发一个简单的音乐播放器

本文中,我们将介绍如何使用C#编程语言以及NAudio库来开发一个简单的音乐播放器应用程序。我们将通过代码演示如何实现文件选择、音乐播放、音量调节等基本功能,并对每个功能进行解释和讨论。

介绍

音乐播放器是一种常见的应用程序,它允许用户播放各种音频文件,如MP3、FLAC、WAV等。我们将使用C#编程语言和NAudio库来构建一个简单的音乐播放器。NAudio是一个流行的开源音频库,提供了丰富的功能和易于使用的API,适用于音频处理和播放任务。

功能列表

我们的音乐播放器将具有以下功能:

  1. 文件选择:用户可以通过文件选择对话框选择要播放的音频文件。
  2. 播放音乐:支持MP3、FLAC、WAV格式的音频文件通过Windows Media Player进行播放,支持OGG格式的音频文件通过NAudio库进行播放。
  3. 音量调节:用户可以通过滑动滑块来调节音乐的音量。
  4. 播放下一首:用户可以通过点击按钮切换到列表中的下一个音乐文件。
  5. 打开OGG文件:用户可以选择并播放OGG格式的音乐文件。

实现

我们将通过以下步骤来实现我们的音乐播放器:

  1. 创建一个Windows窗体应用程序。
  2. 导入NAudio库。
  3. 设计界面:添加文件选择按钮、音乐列表框、音量调节滑块、控制按钮等控件。
  4. 编写代码:实现文件选择、音乐播放、音量调节、播放下一首、打开OGG文件等功能的代码逻辑。
  5. 运行程序:测试并调试应用程序,确保各功能正常运行

 代码实现

using NAudio;
using NAudio.Wave;
using NAudio.Vorbis;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 音乐
{
    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);

            // 如果是 OGG 文件,则使用 NAudio 播放
            if (extension == ".ogg")
            {
                // 将文件路径添加到列表框和列表
                listBox1.Items.Add(filename); 
                localMusicList.Add(filename);
                
                // 在后台线程中播放音乐
                Task.Run(() =>
                {
                    using (var vorbis = new VorbisWaveReader(filename))
                    {
                        using (var outputDevice = new WaveOutEvent())
                        {
                            outputDevice.Init(vorbis);
                            outputDevice.Play();

                            // 等待播放结束
                            while (outputDevice.PlaybackState == PlaybackState.Playing)
                            {
                                System.Threading.Thread.Sleep(100);
                            }
                        }
                    }
                });
            }
            // 如果不是 OGG 文件,则使用 Windows Media Player 播放
            else
            {
                axWindowsMediaPlayer1.URL = filename;
                axWindowsMediaPlayer1.Ctlcontrols.play();
            }
        }

        // 选择音频文件按钮点击事件处理方法
        private void Button1_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "选择音频|*.mp3;*.flac;*.wav";
            openFileDialog1.Multiselect = true;

            // 如果用户点击了“确定”按钮
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                // 清空列表框和列表
                localMusicList.Clear();
                listBox1.Items.Clear();

                // 获取用户选择的文件路径
                files = openFileDialog1.FileNames;

                // 将文件路径添加到列表框和列表
                foreach (string file in files)
                {
                    listBox1.Items.Add(file);
                    localMusicList.Add(file);
                }
            }
        }

        // 列表框选中项改变事件处理方法
        private void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int selectedIndex = listBox1.SelectedIndex;
            if (selectedIndex >= 0)
            {
                string selectedFile = localMusicList[selectedIndex];
                MusicPlay(selectedFile);
                label1.Text = Path.GetFileNameWithoutExtension(selectedFile);
            }
        }

        // 音量调节滑块滑动事件处理方法
        private void TrackBar1_Scroll(object sender, EventArgs e)
        {
            axWindowsMediaPlayer1.settings.volume = trackBar1.Value;
        }

        // 播放下一首音乐按钮点击事件处理方法
        private void Button3_Click(object sender, EventArgs e)
        {
            int index = listBox1.SelectedIndex + 1;
            if (index >= localMusicList.Count)
            {
                index = 0;
            }
            string nextFile = localMusicList[index];
            MusicPlay(nextFile);
            label1.Text = Path.GetFileNameWithoutExtension(nextFile);
            listBox1.SelectedIndex = index;
        }

        // 打开 OGG 音频文件按钮点击事件处理方法
        private void Button4_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "打开音频|*.ogg";

            // 如果用户点击了“确定”按钮
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                // 获取用户选择的文件路径
                string oggFilePath = openFileDialog.FileName;
                
                // 将文件路径添加到列表框和列表,并播放音乐
                listBox1.Items.Add(oggFilePath); 
                localMusicList.Add(oggFilePath);
                MusicPlay(oggFilePath);
            }
        }
    }
}

结论

通过本文,我们学习了如何使用C#编程语言和NAudio库来开发一个简单的音乐播放器应用程序。我们实现了文件选择、音乐播放、音量调节等基本功能,并对每个功能进行了解释和演示。这个项目可以作为一个起点,你可以进一步扩展它,添加更多功能和改进用户体验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值