2

我正在为 DirectX XAudio2 api 使用 SharpDX 包装器。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

4

1 回答 1

2

想通了,认为我不应该乘以1000,以下工作

var offset = (int)Math.Floor(buffer.WaveFormat.SampleRate * barDuration / 128) * 128 * bar;
于 2013-05-20T12:18:07.847 回答