当前位置: 首页 > 编程语言 > C#

使用SoundPlayer播放多个声音分享

时间:2023-04-10 13:33:59 C#

使用SoundPlayer播放多个声音我正在制作一个采样器程序,其中从1到9的每个键都会发出不同的声音。一切正常,但是当我同时按下两个(或更多)声音时,第二个“杀死”第一个声音。我正在使用SoundPlayer播放.WAV文件中的声音。我怎么解决这个问题?您需要使用DirectX(DirectSound)或一些类似的API,旨在允许同时播放多个声音。在C#或VB.Net中有一种同时播放多个声音的简单方法。您必须调用mciSendString()API函数来播放每个.wav文件。除非你在循环,否则你甚至不需要做多线程。下面是使用mciSendString()创建的MusicPlayer类的完整工作示例。//声音api函数[DllImport("winmm.dll")]staticexternInt32mciSendString(stringcommand,StringBuilderbuffer,intbufferSize,IntPtrhwndCallback);上面函数中,key是第一个参数command。只要您使用单独的命令名称调用这两个函数,它们就会单独/同时播放。这是我在我的一个C#程序中所做的:privatevoidPlayWorker(){StringBuildersb=newStringBuilder();mciSendString("打开""+文件名+""别名"+this.TrackName,sb,0,IntPtr.Zero);mciSendString("播放"+this.TrackName,sb,0,IntPtr.Zero);IsBeingPlayed=true;编辑:添加了一个工作示例的链接。您可以这样做:SoundPlayer支持WAVStream。您可以将此流作为参数提供给SoundPlayer构造函数。这样您就不必使用某种复杂的DirectSound库,并且仍然可以混合(一次多个声音)。我猜你的KeyPress事件(或你正在使用的任何东西)你正在创建一个新的SoundPlayer实例,它的构造函数接受WAV文件的路径,然后调用它的Play方法。从理论上讲,这不应该导致您遇到的“单声道”效果,因为自Windows98以来Windows已经能够同时播放多个WAV文件。我认为您听到的(基于我自己使用此类)secondstart不是第一个声音的截止,但实际上是从磁盘加载WAV文件时整个播放暂停引起的故障。不要在每次按键时加载一个新的SoundPlayer实例,而是尝试创建一个类范围的SoundPlayer对象数组,并在窗体的Load事件中从磁盘预加载它们。然后在按下某个键时调用每个SoundPlayer的Play方法。这可能会解决您的问题,但我认为您偶尔仍会遇到此问题。使用System.Windows.MediaFunctionvoidPlay(stringaudioPath){MediaPlayermyPlayer=newMediaPlayer();myPlayer.Open(newSystem.Uri(audioPath));我的播放器.播放();}Play(Application.StartupPath+"\Track1.wav");播放(Application.StartupPath+"\Track2.wav");这段代码可以同时播放两个音频文件,调用第二个音频track2.wav不会干扰track1.wav的播放。以上就是C#学习教程:使用SoundPlayer播放多种声音分享所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处: