私はwaveOutWrite
いくつかの小さなバッファ (それぞれ 80 ミリ秒) を書き込むために使用しています。再生中に、この関数を呼び出して再生位置を取得しています。
uint GetWaveOutPosInMS()
{
WinMM.MMTIME mmtime = new WinMM.MMTIME();
mmtime.wType = 1;
WinMM.MMRESULT ret = WinMM.waveOutGetPosition(WaveOut, ref mmtime, (uint)Marshal.SizeOf(typeof(WinMM.MMTIME)));
return (mmtime.val);
}
相対的なエクストラも次のとおりです。
[DllImport("winmm.dll")]
public static extern MMRESULT waveOutGetPosition(IntPtr hwo, ref MMTIME info, uint cbi);
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct MMTIME
{
public uint wType;
public uint val;
}
waveOutGetPosition は 0 (エラーなし) を返しますが、mmtime.val は常にゼロです。MSDNは、「再生位置」が何に関連しているかについて明確ではありません.waveOutOpenとwaveOutResetでリセットされるだけですが、複数のwaveOutWrite()呼び出しで常に増加し続けますか? なぜそれが常にゼロを返すのかについてのアイデアはありますか?