我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() 调用中继续增加?关于为什么它总是为我返回零的任何想法?