NI Home
Cart Achats | Aide
Hello Events Academic NI Developer Zone Support Solutions Products & Services Contact NI MyNI
You are here: 
NI Home > NI Developer Zone > NI Discussion Forums


Répondre
Member
SDParrot
Envois : 12
0 Compliments

NI9234 : Acquisition de son

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,DAQmx_Val_Pascals,50.0,100.0,DAQmx_Val_Internal,0.004,NULL))

//DAQmxErrChk 
DAQmxErrChk(DAQmxCfgSampClkTiming(taskHandle,"",44100.0,DAQmx_Val_Rising,DAQmx_Val_ContSamps,2000));

DAQmxErrChk(DAQmxRegisterEveryNSamplesEvent(taskHandle,DAQmx_Val_Acquired_Into_Buffer,2000,0,EveryNSamplesCallback,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

 

Active Participant
Remi.D
Envois : 434
0 Compliments

Re : NI9234 : Acquisition de son

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

>> Les rencontres techniques de NI - Mesures et acquisition de données : de la théorie à la mise en ...

En consultant ce site, vous en acceptez les Conditions d'utilisation. Veuillez les lire attentivement avant d'accéder à une quelconque partie du site. Veuillez suivre ce lien pour en savoir plus sur la politique sur les droits d'auteur de ni.com.
Mon Profil | Confidentialité | Conditions d'utilisation | Contacter NI © 2011 National Instruments Corporation. All rights reserved.    |    Envoyer cette page Envoyer cette page