用C语言从麦克风获取原始数据块

用C语言从麦克风获取原始数据块,c,windows,audio,audio-recording,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 THR

我需要将音频数据块提供给语音识别引擎。目前,我的程序使用以下代码从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速率


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

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

第二个链接是针对.NET开发人员的,但是从许多关于有用的c函数的信息开始,例如
waveInOpen()
,因此您可以从这里开始


编辑:另一个MSDN链接:

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

第二个链接是针对.NET开发人员的,但是从许多关于有用的c函数的信息开始,例如
waveInOpen()
,因此您可以从这里开始


编辑:另一个MSDN链接:

捕获音频数据在很大程度上取决于操作系统。您使用的是Windows还是Linux?-编辑:fopen_s(),所以我想是Windows。@BlueCookie我确实使用Windows。捕获音频数据在很大程度上取决于操作系统。您使用的是Windows还是Linux?-编辑:fopen_s(),所以我想是Windows。@BlueCookie我确实使用Windows。