我需要在我的应用程序中重复播放单个声音,例如,使用 XAudio2 的枪声。
这是我为此目的编写的代码的一部分:
public sealed class X2SoundPlayer : IDisposable
{
private readonly WaveStream _stream;
private readonly AudioBuffer _buffer;
private readonly SourceVoice _voice;
public X2SoundPlayer(XAudio2 device, string pcmFile)
{
var fileStream = File.OpenRead(pcmFile);
_stream = new WaveStream(fileStream);
fileStream.Close();
_buffer = new AudioBuffer
{
AudioData = _stream,
AudioBytes = (int) _stream.Length,
Flags = BufferFlags.EndOfStream
};
_voice = new SourceVoice(device, _stream.Format);
}
public void Play()
{
_voice.SubmitSourceBuffer(_buffer);
_voice.Start();
}
public void Dispose()
{
_stream.Close();
_stream.Dispose();
_buffer.Dispose();
_voice.Dispose();
}
}
上面的代码实际上是基于 SlimDX 示例。
它现在所做的是,当我反复调用 Play() 时,声音播放如下:
声音->声音->声音
所以它只是填充缓冲区并播放它。
但是,我需要能够在当前播放的同时播放相同的声音,因此有效地这两个或更多应该同时混合和播放。
这里有什么我错过的,或者我目前的解决方案不可能(也许 SubmixVoices 可以帮助)?
我试图在文档中找到相关的东西,但我没有成功,而且我可以参考的在线示例并不多。
谢谢。