Windows Forms程序中嵌入并播放Wave音频文件

简介:

    前言

    本文介绍了将Wave音频文件嵌入程序并使用System.Media命名空间中的类进行播放的一种方法,受益于System.Media类库,本文中的示例无须引用”winmm.dll”来播放音频文件,所以这个方法实现起来只需要更少的代码。

    示例中使用的音频文件作为资源嵌入到了程序中,这样在安装程序时就不再需要将外部的Wave文件一起打包了,同时这种方法也排除了在安装程序后音频文件被移除或替换的潜在可能。

    开始

    示例程序是下面这样一个简单的窗体: 
    

    解决方案资源管理器的示意图则是这样的: 
    
    
    解决方案中只有一个项目:EmbeddingWavFiles。WavFiles文件夹中的两个wave文件是嵌入到资源文件的音频文件,它们不会随主程序一起打包,一旦嵌入资源文件,程序就可以不依赖它们了。

    将音频文件添加到资源文件的方法

    要将音频文件添加到解决方案,先在解决方案资源管理器中打开Resources.resx文件,这时你会看到一个下拉列表:
    
    
    这里选择Audio(音频)类型,然后点击它右边的”Add Resource”,这时会打开一个文件浏览器,在这里选择要添加的资源(此处只能选择wav类型的文件)。

    将音频文件添加到资源文件后,选择其中的每一项,按F4打开该项的属性窗口,将Persistence属性设置为” Embedded in .resx”:
    
    
    此时编译程序,会看到” Resources.resx”文件较之开始体积大了不少。

    至此,文件已经添加完毕,并得到了正确的设置,现在就可以在项目内使用它们了。

    播放Wave文件的代码:

    1、添加命名空间:System.Media; 

    2、添加播放文件的代码:
    播放文件一次:

     try
    {
        SoundPlayer player 
=   new
            SoundPlayer(EmbeddingWavFiles.Properties.Resources.sound);
        player.Play();
    }
    
catch  (Exception ex)
    {
        MessageBox.Show(ex.Message 
+   " "   +  ex.StackTrace,  " Error " );
    }

    这里使用添加的资源来建立一个SoundPlayer类的实例,然后调用它的Play方法播放文件一次。

    循环播放:
     try
    {
        SoundPlayer player 
=   new
            SoundPlayer(EmbeddingWavFiles.Properties.Resources.sound2);

        
if  (btnLoopPlay.Text  ==  ( " 播放 " ))
        {
            player.PlayLooping();
            btnLoopPlay.Text 
=   " 停止 " ;
        }
        
else
        {
            player.Stop();
            btnLoopPlay.Text 
=   " 播放 " ;
        }
    }
    
catch  (Exception ex)
    {
        MessageBox.Show(ex.Message 
+   " "   +  ex.StackTrace,  " Error " );
    }
   
    这里调用PlayLooping方法循环播放文件,可以调用Stop方法停止播放。

    示例中在建立SoundPlayer的实例时,构造函数的参数类型是System.IO.UnmanagedMemoryStream,除此之外,重载的构造函数还接受字符串,该字符串表示要加载的wave文件的位置。

    总结

    这个示例演示了如何将音频文件嵌入到应用程序的资源文件并播放它们,这要用到System.Media类库。类似的功能也可通过引用”winmm.dll”来实现,但本文的方法需要的代码更少,从部署的角度来说也更为安全。 

                                                                                                       By Anders 

    参考原文: http://www.c-sharpcorner.com/UploadFile/scottlysle/embedwavs01072007051701AM/embedwavs.aspx  
    

    示例下载:PlayWaveFiles.rar


本文转自一个程序员的自省博客园博客,原文链接:http://www.cnblogs.com/anderslly/archive/2007/01/23/embeddingwavfilesinwinform.html,如需转载请自行联系原作者。

目录
相关文章
|
1月前
|
存储 UED Windows
Windows服务器上大量文件迁移方案
Windows服务器上大量文件迁移方案
60 1
|
1月前
|
安全 C# 开发者
Windows Forms 应用开发:一分钟浅谈
本文将带领您从零开始,逐步掌握使用 C# 进行 Windows Forms 开发的技巧,包括创建首个应用、处理常见问题及优化方法。首先介绍如何搭建环境并编写基础代码,接着深入探讨控件使用与布局管理,解决控件重叠和响应式布局难题。最后讲解事件处理与多线程技术,确保长时间任务不阻塞界面,并安全更新 UI 状态,助您开发流畅的应用程序。
117 64
|
14天前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
61 9
|
16天前
|
存储 开发框架 .NET
Windows IIS中asp的global.asa全局配置文件使用说明
Windows IIS中asp的global.asa全局配置文件使用说明
27 1
|
18天前
|
Java Windows
如何在windows上运行jar包/JAR文件 如何在cmd上运行 jar包 保姆级教程 超详细
本文提供了一个详细的教程,解释了如何在Windows操作系统的命令提示符(cmd)中运行JAR文件。
151 1
|
1月前
|
Windows Python
python获取windows机子上运行的程序名称
python获取windows机子上运行的程序名称
|
16天前
|
安全 API C#
C# 如何让程序后台进程不被Windows任务管理器强制结束
C# 如何让程序后台进程不被Windows任务管理器强制结束
34 0
|
18天前
|
程序员 Windows
程序员必备文件搜索工具 Everything 带安装包!!! 比windows自带的文件搜索快几百倍!!! 超级好用的文件搜索工具,仅几兆,不占内存,打开即用
文章推荐了程序员必备的文件搜索工具Everything,并提供了安装包下载链接,强调其比Windows自带搜索快且占用内存少。
27 0
|
28天前
|
安全 网络安全 API
基于WMI更新Windows系统信息采集程序sysInfo的一些收获
基于WMI更新Windows系统信息采集程序sysInfo的一些收获
|
1月前
|
Windows
7-3|windows删除目录下的所有文件的命令
7-3|windows删除目录下的所有文件的命令