如何使用XAudio2以毫秒为单位寻找位置

时间:2013-05-20 11:57:59

标签: c# windows-runtime directx sharpdx xaudio2

我正在使用SharpDX包装器来安装DirectX XAudio2 api。 http://sharpdx.org/

我需要能够搜索加载到SourceVoice中的WAV文件到轨道中的给定位置。我正在努力弄清楚我应该将PlayBegin设置为什么,以便跳过一定量的毫秒或轨道的比例。

public void onMetronome(int bar)
{
   if (voice != null) voice.DestroyVoice();
   voice = new SourceVoice(Player.XAudio, buffer.WaveFormat, true);
   buffer.PlayBegin = (int)(bar * buffer.Stream.Length / 4);
   voice.SubmitSourceBuffer(buffer, buffer.DecodedPacketsInfo);
   voice.Start();
}

任何人都可以告诉我,我应该设置什么样的游戏开始?

我可以从文档中看到这个值是样本编号,它可能需要是128的倍数,但我认为我仍然做错了。

http://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.ixaudio2sourcevoice.ixaudio2sourcevoice.submitsourcebuffer(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.xaudio2.xaudio2_buffer(v=vs.85).aspx

1 个答案:

答案 0 :(得分:2)

想出来,想想我已经乘以1000而不应该,以下作品

var offset = (int)Math.Floor(buffer.WaveFormat.SampleRate * barDuration / 128) * 128 * bar;