当前位置: 代码网 > it编程>编程语言>Asp.net > 编写一个C#程序,实现音乐文件的播放功能

编写一个C#程序,实现音乐文件的播放功能

2024年08月02日 Asp.net 我要评论
/选择音乐文件在完成这次作业的过程中,我深入了解了音频文件的播放和异常处理的相关知识,同时也对C#的Windows Forms应用程序开发有了更实际的操作体验。音频文件播放我首先学习了如何使用Windows Media Player控件来播放MP3文件。这一过程中,我掌握了如何在Windows Forms应用程序中添加控件、设置控件属性以及调用控件的方法来播放音频。

一、作业要求

要求1:

1. 程序应能够读取mp3文件,并播放其中的音频。

2. 程序应能够处理可能出现的异常,如文件不存在、文件读取错误等。

3. 程序应具有良好的用户界面,方便用户进行操作。

4. 程序应具有良好的兼容性,能在不同版本的c#中正常运行。

提示:此功能可以使用windowsmediaplayer控件

要求2:

1. 程序应能够播放ogg文件。

2. 程序应能够处理可能出现的异常,如文件不存在、文件读取错误等。

3. 程序应具有良好的用户界面,方便用户进行操作。

4. 程序应具有良好的兼容性,能在不同版本的c#中正常运行。

提示:此功能可以使用nuget程序包中的naudi.vorbis控件

二、具体实现

1、架构选择

考虑到要求中的“对用户界面友好”和“跨版本兼容性”,我们选择visual studio 2022中的windows forms(.netframework)作为项目。

2、界面设计

根据题目要求选择需要的控如下:

ps:为了美化一点界面我还插入了图片

结果如下:

3、代码实现

3.1 类成员变量定义

//选择音乐文件
string[] files;
list<string > localmusiclist=new list<string> { };
private vorbiswavereader currentvorbisreader;

3.2 “选择歌曲”按钮

private void button1_click(object sender, eventargs e)
{
    openfiledialog1.filter = "选择音频|*.mp3;*.flac;*.wav";//先过滤,选择我要的文件
    openfiledialog1.multiselect = true;//多选属性,打开文件对话框,可以同时选择多个我要的文件

    if(openfiledialog1.showdialog() == dialogresult.ok)//对话框'ok'='选择确定'
    {
        localmusiclist.clear();
        listbox1.items.clear();//清控件,把文件放进播放器,但是要先清空,以免上次的结果影响这次

        if (files != null)
        {
            array.clear(files,0, files.length);//清文件,把上一次的结果清空
        }

        files= openfiledialog1.filenames;//所有符合要求的文件的文件名
        string[] array = files;//这些文件名分别作为字符串作为array数组的每一元素
        foreach(string file in array )
        {
            listbox1.items.add(file);//列表项,返回int值的下标
            localmusiclist.add(file);//歌单,是string 的列表形式
        }
    }
}

3.3 listbox1显示播放音乐列表

//显示播放音乐的列表
private void listbox1_selectedindexchanged(object sender, eventargs e)//listbox1的事件响应
{
    if(localmusiclist.count>0)//判断歌单有没有各歌
    {
        //把索引号放过来
        axwindowsmediaplayer1.url = localmusiclist[listbox1.selectedindex];//[]内需要一个int类型的索引
       // axwindowsmediaplayer1.ctlcontrols.play()这里为了可以处理多种类型的文件二写成一个处理函数
        yytmusicplayer(axwindowsmediaplayer1.url);
        label1.text =path.getfilenamewithoutextension(localmusiclist[listbox1.selectedindex]);//把正在播放的歌曲名字放出来,传入大参数是被选中的歌
    }
}

3.4 控制音量大小

//控制划尺大小和音量有关
private void trackbar1_scroll(object sender, eventargs e)
{
    //设置值
    axwindowsmediaplayer1.settings.volume=trackbar1.value;//value是当前的值

}

3.5 “停止播放”按钮

//停止播放
private void button2_click(object sender, eventargs e)
{
    axwindowsmediaplayer1.ctlcontrols.stop();
}

3.6 “循环播放”按钮

//循环播放
private void button3_click(object sender, eventargs e)
{
    if(localmusiclist.count>0)
    {
        int index = listbox1.selectedindex + 1;
        if(index>=localmusiclist.count)//大于等于,不然说范围错误
        {
            index = 0;
        }
        axwindowsmediaplayer1.url = localmusiclist[index];

        yytmusicplayer(axwindowsmediaplayer1.url);
        label1.text = path.getfilenamewithoutextension(localmusiclist[index]);

        listbox1.selectedindex = index;
    }
}

3.7 单独处理播放ogg文件,“播放ogg”按钮

 //播放ogg音乐文件
 private void button4_click(object sender, eventargs e)
 {
     openfiledialog openfiledialog = new openfiledialog();
     openfiledialog.filter = "打开音频|*.ogg";
     string oggfilepath = "";
     if (openfiledialog.showdialog() == dialogresult.ok)
     {
         oggfilepath = openfiledialog.filename;

     }
     // string oggfilepath = @"c:\path\to\your\file.ogg"; // 替换为您的ogg文件路径  
     using (var vorbisreader = new vorbiswavereader(oggfilepath))
     {
         using (var outputdevice = new waveoutevent())
         {
             outputdevice.init(vorbisreader);
             outputdevice.play();
             while (outputdevice.playbackstate == playbackstate.playing)
             {
                 system.threading.thread.sleep(1000);
             }
         }
         // 等待播放完成,或可以根据需要添加其他逻辑  

         using (var vorbisstream = new vorbiswavereader(oggfilepath))
         {
             using (var outputdevice = new waveoutevent())
             {
                 outputdevice.init(vorbisstream);
                 outputdevice.play();

                 //console.writeline("press any key to stop playback...");
                 //console.readkey();

                 //outputdevice.stop();
                 while (outputdevice.playbackstate == playbackstate.playing)
                 {
                     system.threading.thread.sleep(1000);
                 }
             }

         }

     }

 }

四、完整代码

代码仓库:windows程序设计作业: 放作业

五、总结

在完成这次作业的过程中,我深入了解了音频文件的播放和异常处理的相关知识,同时也对c#的windows forms应用程序开发有了更实际的操作体验。

以下是我具体的掌握方面:

  1. 音频文件播放
    • 我首先学习了如何使用windows media player控件来播放mp3文件。这一过程中,我掌握了如何在windows forms应用程序中添加控件、设置控件属性以及调用控件的方法来播放音频。
    • 为了满足播放ogg文件的需求,我学习了如何通过nuget程序包管理器安装并使用第三方库(如naudi.vorbis),锻炼了我处理外部依赖的能力。
  2. 异常处理
    • 在处理音频文件播放的过程中,我意识到了异常处理的重要性,需要考虑并处理文件不存在、文件读取错误等异常情况。
  3. 用户界面设计
    • 在设计用户界面时,我注重了用户体验和操作的便捷性。通过合理布局控件、设置控件样式和添加必要的交互功能,我创建了一个直观易用的音频播放界面。
    • 这一过程锻炼了我对windows forms控件的使用能力,也让我更加熟悉了界面设计的原则和技巧。
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com