none
播放音频的方案 RRS feed

  • 问题

  • 如题,我正在使用C#(WPF项目)开发一个应用,其中有 背景音乐 和 按键音效。

    背景音乐可以通过 System.Windows.Media.MediaPlayer 类实现

    但是关于 Effect 音效我就比较头疼。

    一方面是音效的资源有点多 (170个wav文件),而我希望音效要实时播放不能出现I/O读取的延迟。

    还有一个需求就是,连续点击同一个按钮的时候,如果之前的音效没播放完,之后的音效要求与之前的音效叠加,而不是把之前的音效停止。

    所以好像MediaPlayer类就有点力不从心了。

    尝试着使用DirectSound但好像发现不支持C#2012,使用XNA的SoundEffect总是报告“对象的当前状态使该操作无效”


    • 已编辑 PM_NUAA 2013年5月25日 9:35
    2013年5月25日 9:34

答案

  • hello,

    每次创建一个新的Mediaplay类的确会损耗资源,你应该将常用的区域变数变成全域变数,播放器会用到HD里的资料,也就是会有I/O损耗

    连续播放你可使用Queue来处理


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/

    2013年5月29日 9:08

全部回复

  • 混合多路音频的话,去看看http://naudio.codeplex.com/


    Visual C++ MVP

    2013年5月25日 21:43
    版主
  • 我的需求好像不太一样,我要实现的效果是类似

    Button_Click()

    {

    Mediaplayer effect = new Mediaplayer(new Uri("effect.wav", UriKind.Realatve));

    effect.play();

    }

    这样每次点击按钮会创建一个新的Mediaplayer来播放。

    但是这样做会导致过多的硬盘读取,可能使音效的“实时性”受到影响,而且每次创建一个Mediaplayer对系统资源的浪费也不可忽视

    2013年5月26日 15:26
  • hello,

    每次创建一个新的Mediaplay类的确会损耗资源,你应该将常用的区域变数变成全域变数,播放器会用到HD里的资料,也就是会有I/O损耗

    连续播放你可使用Queue来处理


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/

    2013年5月29日 9:08