Мне нужно многократно воспроизводить один звук в моем приложении, например, выстрел, используя 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 (), звучит как:
sound -> sound -> sound
Таким образом, он просто заполняет буфер и воспроизводит его.
Но мне нужно иметь возможность воспроизводить тот же звук , пока текущийиграя, так эффективно эти два или более должны смешиваться и играть одновременно.
Есть ли здесь что-то, что я пропустил, или это невозможно с моим текущим решением (возможно, SubmixVoices могли бы помочь)?
Я пытаюсь найти что-то связанное в документах, но я не добился успеха, и в Интернете не так много примеров, на которые я мог бы сослаться.
Спасибо.