Получение аудиоданных с помощью MM_WIM_DATA из драйвера ASIO

У меня была программа на Cc ++, использующая звуковую карту USB для записи некоторых данных. Он отлично работает под Windows XP. Теперь я должен переместить его в Windows7.
Win7 не получает никаких данных с этой карты, поэтому я установил драйвер ASIO для решения этой проблемы. Поэтому я попытался получить некоторые данные с помощью Cooledit Pro, и это работает. Но в моей программе входные данные повреждены.
Я использую функцию fllowing, чтобы получить некоторые данные:

    void __fastcall AudioIn :: onMessage(TMessage & message) {
if(message.Msg == MM_WIM_DATA && ! Terminated) {
if(callback)
callback(((WAVEHDR *)message.LParam) -> lpData,
((WAVEHDR *)message.LParam) -> dwBytesRecorded / 2);}

к несчастью ((WAVEHDR *)message.LParam) -> lpData состоять что-то вроде ЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЃ, Где моя ошибка?

Добавление дополнительного кода:
1) нашел мое USB-устройство

    for(int i = 0; deviceId == -1 && i < devNum; i ++)
if(AudioDev :: getDevCaps(i).UpperCase().Pos(L"USB"))
deviceId = i;
zvvi -> initDevice(deviceId);

2) Инициируйте это устройство

    initDevice(int deviceId) {
if(wiState != wisClosed) closeDevice();
wiDevice = deviceId;
thread = new AudioIn(true);
thread -> FreeOnTerminate = true;
thread -> setCallback(callback);
thread -> Start();}

3) Подготовить WAVEHDR

    void __fastcall AudioIn :: prepareHeaders(int bCount, int bSize) {
if(prepared)
return;
prepared = true;

wiBuffCount = bCount;
wiBuffSize = bSize;

wavehdr = new WAVEHDR[wiBuffCount];
buff = new char *[wiBuffCount];
for(int i = 0; i < wiBuffCount; i ++)
buff[i] = new char[wiBuffSize];

for(int i = 0; i < wiBuffCount; i ++) {
wavehdr[i].lpData = (char *)buff[i];
wavehdr[i].dwBufferLength = wiBuffSize * sizeof(* buff[i]);
wavehdr[i].dwLoops = 0;
wavehdr[i].dwFlags = 0;
check(waveInPrepareHeader(wiHandle, & wavehdr[i], sizeof(wavehdr[i])), L"wiPrepareHeader");
}
}

4) Также у меня есть функция, которая настраивает устройство

    openDevice() {
if(wiState != wisClosed)
return;

const samplerate = 44100;
tWAVEFORMATEX format;
format.wFormatTag = WAVE_FORMAT_PCM;
format.nChannels = 1;
format.nSamplesPerSec = samplerate;
format.wBitsPerSample = 8;
format.nBlockAlign = (format.nChannels * format.wBitsPerSample) / 8;
format.nAvgBytesPerSec = (format.wBitsPerSample / 8) * samplerate;
format.cbSize = 0;

5) Запущен поток, где моя функция получает данные «AudioIn :: onMessage»

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector