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 に答える