(翻译)在Win Forms程序中嵌入和播放声音资源

作者:salysle

原文地址:http://www.codeproject.com/KB/audio-video/PlayWavFiles.aspx

内容摘要

这篇文章演示了如何把wav声音资源文件嵌入到应用程序中,并通过System.Media类库来播放。

介绍

这篇文章演示了一种方法,如何把wav声音资源文件嵌入到应用程序中,并通过System.Media类库来播放。

借助于System.Media类库,这个例子中我们不需要引用winmm.dll来播放声音资源,并且代码更易于实现。
声音文件被直接嵌入到程序中,这使我们在部署程序时不需要添加额外的声音文件到安装包中。此外,这种方法也排除了文件不存在或被删除的可能,
clip_image002

它会导致程序需要资源时找不到需要使用的声音文件。
图 1 示例应用程序窗体

开始

在下载的源代码中,包含只有一个以PlayWavFiles命名的项目的解决方案。这个项目如图2所示,该项目包含默认的Win Forms的引用,资源直接嵌入到了应用程序资源中,不需要在安装时再分发资源。

clip_image004
图 2 解决方案浏览器

这个例子是用C#语言编写,用Visual Studio 2005集成开发环境编译,您可以打用IDE打开来检查代码。

添加声音文件资源

为了添加资源文件到解决方案中,在解决方案浏览器中打开Resources.resx文件。打开后,您可以看到一个下拉选择框,如图3,它是用来选择添加到项目中的资源的类型。选择Audio资源,然后点击Add Resource.

clip_image006

图 3 添加声音文件资源

当您点击Add Resource按钮后,弹出一个文件浏览对话框,您可以找到声音文件,然后加入到应用程序资源中。

clip_image007
图 4 浏览声音资源

当声音文件添加到应用程序资源文件件中后,依次选择每一个声音资源,然后设置它们的Persistence(持久性)属性为Embedded in .resx(嵌入到resx文件中)

clip_image009

图 5 设置添加的声音文件的Persistence属性

到现在为止,声音文件已经被添加到项目中,并且设置好了属性,您可以在项目中使用声音资源了。

代码 :主窗口

本例子应用程序只包含一个窗体(frmMain)文件,它包含了所有播放嵌入声音文件的必要的代码。除了导入(import)一些必要的类库外,您还需要添加System.Media的引用。

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Media;

namespace PlayWavFiles

{

public partial class frmMain : Form

{

public frmMain()

{

InitializeComponent();

}

所有的必要的代码包含在三个按钮的点击事件中;退出按钮用来退出应用程序:

private void btnExit_Click(object sender, EventArgs e)

{

Application.Exit();

}

这个按钮的点击事件有用来播放嵌入的wav文件,它只播放一次。

private void btnDemo1_Click(object sender, EventArgs e)

{

try

{

SoundPlayer sndplayr = new

SoundPlayer(PlayWavFiles.Properties.Resources.BuzzingBee);

sndplayr.Play();

}

catch (Exception ex)

{

MessageBox.Show(ex.Message + ": " + ex.StackTrace.ToString(),

"Error");

}

}

在按钮的点击事件代码中,创建SoundPlayer类的实例,设置它的构造函数参数为需要播放的应用程序资源。当资源被加载到SoundPlayer的实例中后,调用Play方法播放声音。

这个按钮的点击事件演示了如何循环播放嵌入的声音文件:

private void btnDemo2_Click(object sender, EventArgs e)

{

try

{

SoundPlayer sndplayr = new

SoundPlayer(PlayWavFiles.Properties.Resources.LoopyMusic);

if (btnDemo2.Text == "Demo WAV 2")

{

sndplayr.PlayLooping();

btnDemo2.Text = "STOP";

}

else

{

sndplayr.Stop();

btnDemo2.Text = "Demo WAV 2";

}

}

catch (Exception ex)

{

MessageBox.Show(ex.Message + ": " + ex.StackTrace.ToString(),

"Error");

}

}

这个例子的代码与上一个例子相似,不同的是,它调用的是PlayLooping方法而不是Play方法。当调用这个方法,被加载的wav文件将会循环播放,直到您调用它播放另一个wav文件或是调用Stop方法。为了支持这个特性,当开始循环播放时,按钮的文字应该改为STOP,当用户点击STOP文字的按钮时,Stop方法被调用,并且按钮的文字恢复为初始的文字,随后的点击会播放声音文件,然后是停止,按钮的行为表现为交替更新这两个选项。

总结

这个范例提供了如何在应用程序资源文件中嵌入声音资源,以及如何检索声音文件并且使用System.Media类库来播放。相似的功能也可以通过使用winmm.dll来获取,当然,这种方法只需要更少的代码,并且从部署的角度来讲,它更安全。

转载于:https://www.cnblogs.com/JamesLi2015/archive/2010/02/22/1670884.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值