void main (int argc, char *argv[])
{
    unsigned short buf[16000];
    int audio_fd, i, j, k;

    audio_fd = audioOpen (16000);
    audioStartRecord ();

    for (i = 0; i < 5; i++) {
        /* simulate compute for a while */
        for (j = 0; j < 200000; j++);

	/* read whatever accumulated data is available, upto 16k max */
	k = read (audio_fd, buf, 16000*sizeof(short));

	/* print some of the new data */
	printf (" %5d", k);
	for (j = 0; j < 20; j++)
	    printf (" %04x", buf[j]);
	printf ("\n");
	fflush (stdout);
    }

    /* simulate compute for a while and stop recording */
    for (j = 0; j < 1000000; j++);
    audioStopRecord ();

    /* read whatever accumulated data is available, upto 16k max */
    k = read (audio_fd, buf, 16000*sizeof(short));
    printf (" %5d\n", k);

    audioClose ();
}
Exemple #2
0
int32 ad_start_rec (ad_rec_t *r)
{
    if (r->recording)
	return -1;
    
    audioStartRecord ();
    r->recording = 1;

    return 0;
}
Exemple #3
0
void record_to_file(INT choose,INT ch)
{
	INT		hFile;
	INT		nWriteBytes, nTotalBytes = 0;
	INT		nTime0;
	INT8	bAsciiFileName[20] = "c:\\record.pcm";
	INT8	bUnicodeFileName[40];
	INT		ntick0;

	_uPcmQHead = _uPcmQTail = 0;
	fsAsciiToUnicode(bAsciiFileName, bUnicodeFileName, TRUE);
	hFile = fsOpenFile(bUnicodeFileName,NULL, O_CREATE);

	if (hFile < 0)
	{
		printf("Can't open playback file%d!\n",hFile);
		return;
	}
	printf("Start record...\n");

#if defined( TEST_I2S ) || defined (TEST_UDA1345TS)
	if (choose%11025==0){
		/* 16.934Mhz */
		outpw(REG_APLLCON, 0x642D);
		outpw(REG_CLKDIV0, (inpw(REG_CLKDIV0) & 0xFF0FFFFF) | 0x300000);
	}
	else{
		/* 12.288Mhz */
		outpw(REG_APLLCON, 0x6529);
		outpw(REG_CLKDIV0, (inpw(REG_CLKDIV0) & 0xFF0FFFFF) | 0x300000);
	}
#endif

#if defined (TEST_WM8978)
#if 0
	if (choose==32000)//8.192Mhz
	{
		outpw(REG_APLLCON, 0x6529);
		outpw(REG_CLKDIV0, (inpw(REG_CLKDIV0) & 0xFF0FFFFF) | 0x500000);
	}
	else if (choose%8000==0 || choose%12000==0){//12.288Mhz
		outpw(REG_APLLCON, 0x6529);
		outpw(REG_CLKDIV0, (inpw(REG_CLKDIV0) & 0xFF0FFFFF) | 0x300000);
	}
	else if (choose%11025==0){//11.289Mhz
		outpw(REG_APLLCON, 0x652f);
		outpw(REG_CLKDIV0, (inpw(REG_CLKDIV0) & 0xFF0FFFFF) | 0x400000);
	}
#else

	if (choose%8000==0 || choose%12000==0){//24.576Mhz
		outpw(REG_APLLCON, 0x6529);
		outpw(REG_CLKDIV0, (inpw(REG_CLKDIV0) & 0xFF0FFFFF) | 0x100000);
	}
	else if (choose%11025==0){//22.579Mhz
		outpw(REG_APLLCON, 0x642d);
		outpw(REG_CLKDIV0, (inpw(REG_CLKDIV0) & 0xFF0FFFFF) | 0x200000);
	}
#endif
#endif
	audioRecConfigMono(1);
	audioStartRecord(record_callback, choose, ch);
	
	//audioSetRecordVolume(31,31);
	nTime0 = ntick0 = sysGetTicks(TIMER1);
	
	while (1)
	{
		if (sysGetTicks(TIMER1) - nTime0 >= 100)
		{
			nTime0 = sysGetTicks(TIMER1);
			printf("H=%d, T=%d\n", _uPcmQHead/1024, _uPcmQTail/1024);

			
		}
		
		if ((_uPcmQHead > _uPcmQTail) ||
			((_uPcmQHead < _uPcmQTail) && (_uPcmQTail - _uPcmQHead > 64*1024)))
		{

			fsWriteFile(hFile, &_pucPcmQueue[_uPcmQHead], 64*1024, &nWriteBytes);
			
			if (nWriteBytes > 0)
				_uPcmQHead = (_uPcmQHead + nWriteBytes) % PCM_QUEUE_LEN;
			else
				break;
				
			

			if (sysGetTicks(TIMER1) - ntick0  >= 1000)
				break;
		}
	}
	fsCloseFile(hFile);
	audioStopRecord();
}
Exemple #4
0
void  audio_loopback_demo(INT choose,INT ch,INT format)
{
	INT		nTime0,nTime1,nVol=20;

	_uPcmQHead = _uPcmQTail = 0;


#if defined( TEST_I2S ) || defined(TEST_UDA1345TS)
	if (choose%11025==0){
		/* 16.934Mhz */
		outpw(REG_APLLCON, 0x642D);
		outpw(REG_CLKDIV0, (inpw(REG_CLKDIV0) & 0xFF0FFFFF) | 0x300000);
	}
	else{
		/* 12.288Mhz */
		outpw(REG_APLLCON, 0x6529);
		outpw(REG_CLKDIV0, (inpw(REG_CLKDIV0) & 0xFF0FFFFF) | 0x300000);
	}
#endif

#if defined (TEST_WM8978)
#if 0
	if (choose==32000)//8.192Mhz
	{
		outpw(REG_APLLCON, 0x6529);
		outpw(REG_CLKDIV0, (inpw(REG_CLKDIV0) & 0xFF0FFFFF) | 0x500000);
	}
	else if (choose%8000==0 || choose%12000==0){//12.288Mhz
		outpw(REG_APLLCON, 0x6529);
		outpw(REG_CLKDIV0, (inpw(REG_CLKDIV0) & 0xFF0FFFFF) | 0x300000);
	}
	else if (choose%11025==0){//11.289Mhz
		outpw(REG_APLLCON, 0x652f);
		outpw(REG_CLKDIV0, (inpw(REG_CLKDIV0) & 0xFF0FFFFF) | 0x400000);
	}
#else

	if (choose%8000==0 || choose%12000==0){//24.576Mhz
		outpw(REG_APLLCON, 0x6529);
		outpw(REG_CLKDIV0, (inpw(REG_CLKDIV0) & 0xFF0FFFFF) | 0x100000);
	}
	else if (choose%11025==0){//22.579Mhz
		outpw(REG_APLLCON, 0x642d);
		outpw(REG_CLKDIV0, (inpw(REG_CLKDIV0) & 0xFF0FFFFF) | 0x200000);
	}
#endif
#endif

#if 1
while(1){
	_uPcmQTail = _uPcmQHead = 0;
	printf("Start record...\n");
	audioStartRecord(record_callback, choose, ch);
	audioSetRecordVolume(nVol,nVol);



	nTime1 = nTime0 = sysGetTicks(TIMER1);

	while (_uPcmQTail <  PCM_QUEUE_LEN - 4096)
	{
		if (inpb(REG_COM_LSR) & 0x01)			/* check key press */
		{
			CHAR  cmd = inpb(REG_COM_RX);
			if (cmd=='1')
			{
				if (--nVol<=0)
					nVol=0;
				audioSetRecordVolume(nVol,nVol);
				printf("vol=%d\n",nVol);
			}else if (cmd=='2')
			{
				if (++nVol>=31)
					nVol=31;
				audioSetRecordVolume(nVol,nVol);
				printf("vol=%d\n",nVol);
			}
		}	
		if (sysGetTicks(TIMER1) - nTime0 >= 100)
		{
			nTime0 = sysGetTicks(TIMER1);
			printf("H=%d, T=%d\n", _uPcmQHead/1024, _uPcmQTail/1024);
		}
	}
	

	audioStopRecord();




	printf("Start play...\n");
	audioStartPlay(play_callback, choose, ch);
	audioSetPlayVolume(30,30);

	nTime1 = nTime0 = sysGetTicks(TIMER1);
	
	while (_uPcmQHead < PCM_QUEUE_LEN - 4096 )
	{
		if (sysGetTicks(TIMER1) - nTime0 >= 100)
		{
			nTime0 = sysGetTicks(TIMER1);
			printf("H=%d, T=%d\n", _uPcmQHead/1024, _uPcmQTail/1024);
		}
	}
	audioStopPlay();
	_uPcmQTail = _uPcmQHead = 0;
}	
#endif
#if 1
	audioStartRecord(record_callback, choose, ch);
	audioSetRecordVolume(31,31);
	
	
	
	while (_uPcmQTail- _uPcmQHead <= 1024);
	
	audioStartPlay(play_callback, choose, ch);
	audioSetPlayVolume(20,20);
	

	//while(audioWriteData(50,0x1)!=0);
	//while(audioWriteData(51,0x1)!=0);


	
	
	while(1){
		if (sysGetTicks(TIMER1) - nTime0 >= 100)
		{
			nTime0 = sysGetTicks(TIMER1);
			printf("H=%d, T=%d\n", _uPcmQHead/1024, _uPcmQTail/1024);
		}
	}
#endif

}