C# SharpDX:循环播放多个wav文件

C# SharpDX:循环播放多个wav文件,c#,audio,windows-phone-8,sharpdx,C#,Audio,Windows Phone 8,Sharpdx,我目前正在使用SharpDX SourceVoice在WP8应用程序中播放wav文件,它可以很好地播放单个文件 但是,如果不在SourceVoice上注册事件并排队等待下一个文件,我无法找到在循环中一个接一个地播放多个文件的方法。这似乎引入了一点口吃,并不是非常无缝,所以我希望有某种方法可以将两个文件排队一次,然后循环使用它们 关于同时播放两个文件(如下面的:)有一些问题,但我想在循环中一个接一个地播放它们 我必须播放单个文件的代码如下所示: xaudio = new XAudio2(); ma

我目前正在使用SharpDX SourceVoice在WP8应用程序中播放wav文件,它可以很好地播放单个文件

但是,如果不在SourceVoice上注册事件并排队等待下一个文件,我无法找到在循环中一个接一个地播放多个文件的方法。这似乎引入了一点口吃,并不是非常无缝,所以我希望有某种方法可以将两个文件排队一次,然后循环使用它们

关于同时播放两个文件(如下面的:)有一些问题,但我想在循环中一个接一个地播放它们

我必须播放单个文件的代码如下所示:

xaudio = new XAudio2();
masteringVoice = new MasteringVoice(xaudio);

var nativefilestream = new NativeFileStream(String.Format(@"{0}", soundfile),NativeFileMode.Open,NativeFileAccess.Read,NativeFileShare.Read);
var soundstream = new SoundStream(nativefilestream);
var waveFormat = soundstream.Format;
var buffer = new AudioBuffer
{
    Stream = soundstream.ToDataStream(),        
    AudioBytes = (int)soundstream.Length,
    Flags = BufferFlags.EndOfStream
};

sourceVoice = new SourceVoice(xaudio, waveFormat, true);
sourceVoice.SubmitSourceBuffer(buffer, soundstream.DecodedPacketsInfo);
sourceVoice.Start();
如果我想循环一段音频,我将AudioBuffer上的循环计数设置为无限,如下所示:

LoopCount = AudioBuffer.LoopInfinite,

我确实尝试过使用不同的音频缓冲区调用SubmitSourceBuffer方法两次,两次都将LoopCount设置为LoopInfinite,但只播放第一次。

我无法按我想要的方式运行此方法,即将两个音频缓冲区排队并让它们重复。结果是,如果您将两个音频缓冲区排队,并在每个缓冲区上设置Loop=x,第一个将循环x次,第二个将循环x次。同样,一个缓冲区在播放后似乎会从队列中删除,因此,您是否可以将两个缓冲区循环在一起是值得怀疑的

我还尝试通过将两个单独的音频缓冲区的单个字节复制到MemoryStream中,从两个单独的音频缓冲区创建一个“合并”的音频缓冲区,但结果流无效,无法播放(可能是因为每个单独的流中都有某种头或EOF标记)

最后,我决定使用一个连续的ThreadPoolTimer,每x毫秒向SourceVoice提交一次AudioBuffer,这达到了预期的效果

ThreadPoolTimer timer = ThreadPoolTimer.CreatePeriodicTimer(
(timer) =>
{
    sourceVoice.SubmitSourceBuffer(buffer, soundstream.DecodedPacketsInfo);
    sourceVoice.Start();

}, TimeSpan.FromMilliseconds(1500));
我仍然不确定是否应该这样做,如果有人知道相反的情况,我会乐意接受他们的答案