Re: Звуковые данные IAudioCaptureClient (WASAPI)
От: ArtyomR0Bot  
Дата: 19.08.13 17:06
Оценка:
Всё, я разобрался. На самом деле там данные типа float. Например, если размер пакета возвращает 441, и там 2 канала, значит там будет 882 семпла, левый и правый чередуются. Такой код выдаёт правдоподобный результат для синусоиды в одном канале:

    do
    {
        Sleep(10);
        
        hr = pCaptureClient->GetNextPacketSize(&packetLength);
        
        if (packetLength != 0)
        {
            hr = pCaptureClient->GetBuffer(&pData,
                                           &numFramesAvailable,
                                           &flags, NULL, NULL);
            
            if (!(flags & AUDCLNT_BUFFERFLAGS_SILENT))
            {
                printf("Packet size: %d\n", packetLength);
                
                if (pwfx->nChannels == 2 && pwfx->wBitsPerSample == 32)
                {
                    for (i = 0; i < numFramesAvailable * 2; i+=2)
                    {
                        CopyMemory(&f[0], &((float*)pData)[i], sizeof(float));
                        CopyMemory(&f[1], &((float*)pData)[i+1], sizeof(float));
                        //printf("%8d %7.4f %7.4f\n", i, f[0], f[1]);
                    }
                }
            }
            
            hr = pCaptureClient->ReleaseBuffer(numFramesAvailable);
        }
    }
    while (1);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.