|
|||||||||||||
le 02-01-2012 07:42 AM
Bonjour à tous,
Voilà mon problême : Je cherches à faire une acquisition en continue d'un signal sonore (musique) et enregistré les données dans un fichier raw pour pouvoir le traiter par la suite. En gros, exactement ce qui est fait par le panneau de test dans MAX.
Mon problême est le suivant : J'ai mis en place la chaine d'acquisition, je récupère les données, mais dans le fichier raw quand je le joue, j'ai le niveau au maximum (0dB) et très bruité.
Je programme en C/C++.
Voiçi le code que j'utilise :
#define DAQmxErrChk(functionCall) if( DAQmxFailed(error=(functionCall)) ) goto Error; else
int32 CVICALLBACK EveryNSamplesCallback(TaskHandle taskHandle, int32 everyNsamplesEventType, uInt32 nSamples, void *callbackData);
void Cleanup (void);
static TaskHandle taskHandle=0;
static long data[5000];
static long dataFinal[5000*5*44100];
static int32 totalRead=0;
FILE* fp = NULL;
int main(void)
{
int32 error=0;
char errBuff[2048]={'\0'};
fp=fopen("C:\\TestRecordMic.raw","wb+");
/*********************************************/
// DAQmx Configure Code
/*********************************************/
DAQmxErrChk (DAQmxCreateTask("",&taskHandle));
DAQmxErrChk (DAQmxCreateAIMicrophoneChan(taskHandle,"cDAQ1Mod1 /ai0","TestMicroContinuous",DAQmx_Val_PseudoDiff,D AQmx_Val_Pascals,50.0,100.0,DAQmx_Val_Internal,0.0 04,NULL))
//DAQmxErrChk
DAQmxErrChk(DAQmxCfgSampClkTiming(taskHandle,"",44 100.0,DAQmx_Val_Rising,DAQmx_Val_ContSamps,2000));
DAQmxErrChk(DAQmxRegisterEveryNSamplesEvent(taskHa ndle,DAQmx_Val_Acquired_Into_Buffer,2000,0,EveryNS amplesCallback,NULL));
/*********************************************/
// DAQmx Start Code
/*********************************************/
DAQmxErrChk (DAQmxStartTask(taskHandle));
printf("Acquiring samples continuously. Press Enter key to interrupt\n");
while(totalRead<22000);
DAQmxErrChk (DAQmxStopTask(taskHandle));
fclose(fp);
printf("\nAcquired %d total samples.\n",totalRead);
Error:
if( DAQmxFailed(error) )
{
DAQmxGetExtendedErrorInfo(errBuff,2048);
Cleanup ();
printf("DAQmx Error: %s\n",errBuff);
}
printf("End of program, press Enter key to quit\n");
getchar();
return 0;
}
int32 CVICALLBACK EveryNSamplesCallback(TaskHandle taskHandle, int32 everyNsamplesEventType, uInt32 nSamples, void *callbackData)
{
int32 error=0;
int32 read;
char errBuff[2048]={'\0'};
int i=0;
/*********************************************/
// DAQmx Read Code
/*********************************************/
DAQmxErrChk (DAQmxReadBinaryI32(taskHandle,5000,10.0,DAQmx_Val _GroupByScanNumber,data,5000,&read,NULL));
if( read>0 )
{
fwrite(data,sizeof(int32),read,fp);
printf("Acquired %d samples. Total %d\r",read,totalRead+=read);
fflush(stdout);
}
Error:
if( DAQmxFailed(error) )
{
DAQmxGetExtendedErrorInfo(errBuff,2048);
Cleanup ();
printf("DAQmx Error: %s\n",errBuff);
}
return 0;
}
void Cleanup (void)
{
if( taskHandle!=0 )
{
/*********************************************/
// DAQmx Stop Code
/*********************************************/
DAQmxStopTask(taskHandle);
DAQmxClearTask(taskHandle);
taskHandle = 0;
}
}
Merci pour votre aide,
Stéphane
le 04-13-2012 06:05 AM
Bonjour SDParrot,
Si toutefois votre problème est toujours existant, pouvez-vous reformuler votre question?
J'ai du mal à saisir le sens/but de votre post.
Cordialement,
Rémi D.
National Instruments France
Mon Profil | Confidentialité |
Conditions d'utilisation |
Contacter NI
© 2011 National Instruments Corporation. All rights reserved. | Envoyer cette page
|
||

Envoyer cette page