我需要向语音识别引擎提供大量音频数据。现在,我的程序使用以下代码从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。
你会怎么做?感谢您提供任何建设性的帮助。
答案 0 :(得分:3)
第二个链接适用于.NET开发人员,但从很多关于有用c函数的信息开始,例如waveInOpen()
,所以你可以从这里开始。
修改:另一个MSDN链接:Recording Waveform Audio