2012-06-07 5 views
0

Я использую waveOutWrite для записи нескольких небольших буферов (по 80 мс каждый). Как они играют, я звоню эту функцию, чтобы получить позицию воспроизведения:waveOutGetPosition всегда возвращает ноль

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); 
    } 

Ниже приведены относительные дополнения, а также:

waveOutGetPosition возвращает 0 (нет ошибки), но mmtime .val всегда равно нулю. MSDN не совсем понятна, с чем «позиция воспроизведения» относительно того, что она сбрасывается на waveOutOpen и waveOutReset .. но всегда ли она продолжает увеличиваться через несколько вызовов waveOutWrite()? Любые идеи относительно того, почему это всегда будет для меня нулевым?

ответ

0

У меня была неверная структура MMTIME. Странно, что функция не сообщила об ошибке, но, основываясь на других материалах, которые я прочитал, эта функция зависит от OEM-производителей, поэтому можно увидеть различные странные результаты. Также появляется запрос о том, что MS не так хорошо тестируется, как запрашивать SAMPLES, поэтому я просто попрошу образцы вместо этого и сам вычислить MS.

[StructLayout(LayoutKind.Sequential, Pack = 1)] 
    public struct MMTIME 
    { 
     public uint wType; 
     public uint val; 

     // Padding because val is actually a union 
     public uint pad; 
    } 
Смежные вопросы