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 (); }
int32 ad_start_rec (ad_rec_t *r) { if (r->recording) return -1; audioStartRecord (); r->recording = 1; return 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(); }
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 }