用winform制作一个播放ogg音频文件的播放器

1.准备工作

(1)安装库

        我们安装的库为NAudio.Vorbis可以实现Ojj文件的播放

(2)创建WinForms项目

        

        创建窗体应用项目

        

        其中form1.cs就是我们的窗口设计界面,通过它能访问后台代码。

2.设计播放器界面

(1)添加按钮

        

        通过左侧的工具箱添加我们需要的按钮,途中右侧为button按钮,通过点击能够实现其功能,

        中间大白框为listbox,是一个存放我们选中的歌曲文件的列表,白框下面为MediaPlayer件,

        能够拖动音频的进度以及调节音量大小

        下面是最后设计好的样子:

       

(2)对按钮和控件进行后台实现

        1.下面是播放ojj文件按钮的后台实现

 private void button4_Click(object sender, EventArgs e)
 {
     string oggfilepath="";//初始化一个字符串用于存放文件路径

     OpenFileDialog dlg = new OpenFileDialog();
     dlg.Filter = "播放音频|*.ogg";
     //使用OpenFileDialog类创建了一个文件对话框,并设置了其过滤器,以便用户只能选择.ogg格式的文件。

     if(dlg.ShowDialog() == DialogResult.OK)
     {
         oggfilepath=dlg.FileName;    
     }
     //显示文件对话框。如果用户点击了“打开”按钮(即选择了文件),则oggfilepath将被设置为所选文件的路径。

     //using语句确保在读取完成后释放资源。
     using (var vorbisFileReader = new VorbisWaveReader(oggfilepath))
     {
         // 创建一个WaveOutEvent实例来播放音频  
         using (var outputDevice = new WaveOutEvent())
         {
             // 初始化WaveOutEvent实例  
             outputDevice.Init(vorbisFileReader);

             // 开始播放  
             outputDevice.Play();

             // 等待播放完成,这里你可以添加其他逻辑,比如监听播放完成事件等  
             while (outputDevice.PlaybackState == PlaybackState.Playing)
             {
                 System.Threading.Thread.Sleep(1000);
             }
         }
     }

        2.下面是对下一曲按钮的后台实现

private void button3_Click(object sender, EventArgs e)  
{  
    // 定义一个变量nextmusic,用于存储下一个要播放的音乐的索引  
    int nextmusic = listBox1.SelectedIndex + 1;  
  
    // 检查localmusiclists列表(可能是一个存储音乐文件路径的列表)是否包含至少一个元素  
    if (localmusiclists.Count > 0)  
    {  
        // 检查计算得到的nextmusic索引是否超出了localmusiclists的索引范围  
        if (nextmusic >= localmusiclists.Count)  
        {  
            // 如果超出了范围,则将nextmusic设置为0,表示要播放列表中的第一首音乐  
            nextmusic = 0;  
        }  
  
        // 使用axWindowsMediaPlayer1控件来播放指定路径的音乐  
        // 这里将localmusiclists列表中索引为nextmusic的音乐路径设置为axWindowsMediaPlayer1的URL属性  
        axWindowsMediaPlayer1.URL = localmusiclists[nextmusic];  
  
        // 调用musicplay方法(该方法在代码段中没有给出,但可能是用于处理播放逻辑或更新UI的自定义方法)  
        // 并将当前播放的音乐路径作为参数传递  
        musicplay(axWindowsMediaPlayer1.URL);  
  
        // 更新label1的文本内容,显示当前播放音乐的文件名(不带扩展名)  
        // 使用Path.GetFileNameWithoutExtension方法从音乐路径中提取文件名(不带扩展名)  
        label1.Text = Path.GetFileNameWithoutExtension(localmusiclists[nextmusic]);  
  
        // 更新listBox1的SelectedIndex属性,以反映当前正在播放的音乐在列表中的位置  
        listBox1.SelectedIndex = nextmusic;  
    }  
}

        3.以下是停止播放按钮的实现

private void button2_Click(object sender, EventArgs e)
{
    axWindowsMediaPlayer1.Ctlcontrols.stop();
}

        4.以下是添加文件按钮的实现

private void button1_Click(object sender, EventArgs e)
{
    OpenFileDialog OpenFileDialog1 = new OpenFileDialog();
    OpenFileDialog1.Filter = "选择音频|*.mp3;*";
    OpenFileDialog1.Multiselect = true; 
    if(OpenFileDialog1.ShowDialog() == DialogResult.OK)
    {
        listBox1.Items.Clear();
        if(files != null)
        {
            Array.Clear(files, 0, files.Length);
        }
        files = OpenFileDialog1.FileNames;
        string[] array= files;
        foreach(string item in array)
        {
            listBox1.Items.Add(item);
            localmusiclists.Add(item);
        }
        
    }
}

3.进行应用测试

(1)播放MP3文件

添加MP3文件并播放

(2)播放ogg文件

添加ogg文件并播放

总结:能够实现播放音乐文件的功能,并且暂停,下一曲功能也能够实现

4.此次项目的总结与经验

        本项目成功实现了一个基于WinForms的Ogg音频文件播放器。在项目中,我们使用了Windows Media Player控件或NAudio库来支持Ogg格式的音频播放,并设计了直观的用户界面,包括播放、暂停、停止等基本控制功能。用户可以通过列表框选择歌曲,并通过进度条查看歌曲的播放进度。经过多次测试,播放器表现出良好的稳定性和用户友好性。通过这个项目,我们不仅掌握了WinForms应用程序的开发流程和技巧,还提高了团队协作和问题解决能力。这些宝贵的经验将为我们今后的开发工作提供有力的支持。

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你想要我讲解如何使用 C# WinForm 和 NAudio 制作一个音频播放器,并且能够调节音频进度,对吧? 首先,你需要在你的 WinForm 窗口中添加一个 `MediaPlayer` 控件和一个 `TrackBar` 控件。然后在你的代码中引用 NAudio 库。 接下来,你需要使用 NAudio 中的 `WaveOut` 类来播放音频文件。你可以使用 `WaveFileReader` 类来读取音频文件,并将其传递给 `WaveOut` 对象进行播放。同时,你需要创建一个计时器来定期更新音频进度条的位置。 以下是示例代码: ```csharp using NAudio.Wave; private WaveOut waveOut; private WaveFileReader audioFile; private Timer timer; private void PlayAudio(string filePath) { audioFile = new WaveFileReader(filePath); waveOut = new WaveOut(); waveOut.Init(audioFile); waveOut.Play(); // 设置计时器 timer = new Timer(); timer.Interval = 100; // 100ms 更新一次 timer.Tick += new EventHandler(timer_Tick); timer.Start(); } private void timer_Tick(object sender, EventArgs e) { if (audioFile != null && waveOut != null) { // 更新进度条位置 trackBar.Value = (int)(audioFile.Position / (double)audioFile.Length * trackBar.Maximum); } } private void trackBar_Scroll(object sender, EventArgs e) { // 跳转到指定位置 if (audioFile != null && waveOut != null) { audioFile.Position = (long)(audioFile.Length * trackBar.Value / (double)trackBar.Maximum); } } private void StopAudio() { if (waveOut != null) { waveOut.Stop(); waveOut.Dispose(); waveOut = null; } if (audioFile != null) { audioFile.Dispose(); audioFile = null; } if (timer != null) { timer.Stop(); timer.Dispose(); timer = null; } } ``` 在上面的代码中,`PlayAudio` 方法接受音频文件的路径作为参数,并使用 `WaveFileReader` 类读取文件。然后,它创建一个 `WaveOut` 对象并使用 `Init` 方法初始化它,最后调用 `Play` 方法开始播放音频。 计时器的 `Tick` 事件处理程序定期更新进度条的位置。它使用 `audioFile.Position` 属性获取当前播放位置,并将其转换为百分比形式,以便更新进度条。 `TrackBar` 控件的 `Scroll` 事件处理程序允许用户手动调整音频进度。它使用 `audioFile.Position` 属性设置音频文件的位置。 最后,`StopAudio` 方法停止播放并释放所有资源。 希望这个示例能帮助你创建一个能够调节音频进度的播放器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值