【发布时间】:2014-07-02 12:18:25
【问题描述】:
我目前正在使用 SharpDX SourceVoice 在 WP8 应用程序中播放 wav 文件,它可以很好地播放单个文件。
但是,如果不注册 SourceVoice 上的事件并将下一个文件排队,我无法找到一种方法来循环播放多个文件。这似乎会引入一些口吃并且不是很无缝,所以我希望有某种方法可以将两个文件排队一次并循环遍历它们。
关于同时播放两个文件有几个问题(比如这个:Best way to play two audio files simultaneously in Windows Phone 8),但我想一个接一个地循环播放。
我必须播放单个文件的代码如下:
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,
我确实尝试使用不同的 AudioBuffers 调用 SubmitSourceBuffer 方法两次,两者都将 LoopCount 设置为 LoopInfinite,但只播放了第一个。
【问题讨论】:
标签: c# audio windows-phone-8 sharpdx