从C中的麦克风获取原始数据块

时间:2011-02-15 11:19:00

标签: c windows audio audio-recording

我需要向语音识别引擎提供大量音频数据。现在,我的程序使用以下代码从8k速率的ulaw编码的原始文件中读取和缓冲数据块:

unsigned char buf[MAX_AUDIO_BUF_LEN];    
FILE *fp;
int len;
AudioSamples epSamplesStruct;

/* Read in Audio File */
fopen_s(&fp, FILE_NAME, "rb");
if (fp == NULL) {
    printf("AUDIO THREAD=> ERROR. Cannot open prompt file %s\n", FILE_NAME);
    return 1;
}

/* loop while there are still buffers to be picked up from file */
while((len = fread(buf, 1, MAX_AUDIO_BUF_LEN, fp)) > 0) {
    epSamplesStruct.samples = (void *) buf;
    epSamplesStruct.len     = len;
    epSamplesStruct.type    = L"audio/basic";
    num_samples_read += len;
    // Processing the audio...
}

epSampleStruct是传递给识别引擎的结构。

我想转换此代码,以便从麦克风而不是文件中读取。我不能很好地适应音频数据的类型:它应该保持ulaw编码并且速率为8k。

你会怎么做?感谢您提供任何建设性的帮助。

1 个答案:

答案 0 :(得分:3)

您可能需要查看波形音频接口:herehere

第二个链接适用于.NET开发人员,但从很多关于有用c函数的信息开始,例如waveInOpen(),所以你可以从这里开始。

修改:另一个MSDN链接:Recording Waveform Audio