nagrywanie dzwięku WinApi + WAVERR_BADFORMAT

0

Próbuję napisać program do nagrywania dźwięku kiedy wywołuje funkcję WaveInOpen() zwraca mi błąd WAVERR_BADFORMAT. Niewiem dlaczego??

        m_wfmt = new Wave.WAVEFORMATEX();
        m_wfmt.wFormatTag = Wave.WAVEHDR.WAVE_FORMAT_PCM;
        m_wfmt.wBitsPerSample = 8;
        m_wfmt.nChannels = 1;
        m_wfmt.nSamplesPerSec = 8000;
        m_wfmt.nAvgBytesPerSec = (uint)(m_wfmt.nSamplesPerSec * m_wfmt.nChannels * (m_wfmt.wBitsPerSample / 8));
        m_wfmt.nBlockAlign = (ushort)(m_wfmt.wBitsPerSample * m_wfmt.nChannels / 8);

        Wave.MMSYSERR result = waveInOpen(ref m_hwi, curDevice, m_wfmt, m_Delegate, 0, Wave.WAVEHDR.CALLBACK_FUNCTION);
0

Może karta po prostu nie obsługuje takiego formatu?

PS. WAVEFORMATEX::cbSize ustaw na 0.

0

Karta obsługuje ten format. Problem tkwi w innym miejscu. Zgodnie z sugestią poprawiłem kod, ale błąd występuje dalej. Już brakuje mi pomysłów.</url>

0

A curDevice jest na pewno właściwe???

0

Do zmienenj curDrevice przypisałem wartość -1. Jest to domyśne urządzenie audio.

0

To dziwne :| A otwiera np. przy 44.1kHz/16bit/stereo???

0

Oki jakoś sobie poradziłem. Wielkie dzięki za pomoc. Ale teraz mam inny problem

System.ArgumentException was unhandled
Message="Typ 'Wave.WAVEHDR' nie może zostać zorganizowany jako struktura niezarządzana; nie można obliczyć akceptowalnego rozmiaru ani przesunięcia."

w tym miejscu:
result = waveInPrepareHeader(m_hwi, m_whdr[bufIndex], (uint)Marshal.SizeOf(m_whdr[bufIndex]));

1 użytkowników online, w tym zalogowanych: 0, gości: 1