zoukankan      html  css  js  c++  java
  • (翻译)在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/p/1670884.html
Copyright © 2011-2022 走看看