2011-02-15 2 views
0

J'ai besoin de donner des morceaux de données audio à un moteur de reconnaissance vocale. Pour l'instant, mon programme lit et des tampons des blocs de données à partir d'un fichier brut codé ulaw-débit 8k, en utilisant ce code:Récupérer des blocs de données brutes d'un microphone en C

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 est la structure passée au moteur de reconnaissance.

Je voudrais transformer ce code afin qu'il soit lu à partir d'un microphone au lieu d'un fichier. Je ne peux pas adapter autant le type de données audio: il devrait rester codé ulaw et avec un taux de 8k.

Comment voulez-vous faire cela? Merci pour toute aide constructive.

+2

Capturer des données audio peut fortement dépendre du système d'exploitation. Êtes-vous sur Windows ou Linux? - EDIT: fopen_s(), donc Windows je suppose. – BlueCookie

+0

@BlueCookie J'utilise Windows en effet. – Dunaril

Répondre

3

Vous voudrez peut-être jeter un oeil à l'interface audio Waveform: here et here.

Le deuxième lien concerne les développeurs .NET, mais commence par de nombreuses informations sur les fonctions c utiles, telles que waveInOpen(), vous pouvez donc commencer ici.

Edit: un autre lien MSDN: Recording Waveform Audio

Questions connexes