C++ 从ASIO驱动程序通过MM_WIM_数据获取音频数据

C++ 从ASIO驱动程序通过MM_WIM_数据获取音频数据,c++,asio,C++,Asio,我有一个Cc++程序,它使用usb声卡记录一些数据。它在Windows XP下工作得非常好。现在我必须把它移到Windows7。 Win7无法从该卡获取任何数据,因此我安装了ASIO驱动程序来解决此问题。所以我试着用Cooledit Pro获取一些数据,结果成功了。但是在我的程序中,输入数据被破坏了。 我正在使用FLOWING函数获取一些数据: void __fastcall AudioIn :: onMessage(TMessage & message) { if(me

我有一个Cc++程序,它使用usb声卡记录一些数据。它在Windows XP下工作得非常好。现在我必须把它移到Windows7。 Win7无法从该卡获取任何数据,因此我安装了ASIO驱动程序来解决此问题。所以我试着用Cooledit Pro获取一些数据,结果成功了。但是在我的程序中,输入数据被破坏了。 我正在使用FLOWING函数获取一些数据:

    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);
3) 制备微波雷达

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

5) 已启动线程,其中我的函数获取数据“AudioIn::onMessage”

代码不完整,不包含可能出现错误的片段。有很多代码。。。如果你能具体说明我遗漏了哪些片段,我将不胜感激
    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");
    }
  }
    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;