2012-06-07 13 views
0

나는 작은 버퍼 (각각 80ms)를 작성하기 위해 waveOutWrite을 사용하고 있습니다. 여기waveOutGetPosition은 항상 0을 반환합니다.

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은 항상 0입니다. 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; 
    } 
관련 문제