📄 test_iis.c
字号:
#include "def.h"
#include "2410addr.h"
#include "AudioDrv.h"
//#include "2410lib.h"
#include "DmaAdmin.h"
#include "utils.h"
#include "board.h"
#include "WindowsXP_Wav.h" //长度为243552个字节
#define BUF_SIZE (16*1024)
extern U32 download_addr;
extern U32 download_len;
static U8 REC_OK ;
static U16 fsTable[] = {8000,11025,16000,22050,32000,44100,48000,0};
void PlayMusicTest(void)
{
int size, i, j, err;
WAVEFORMATEX fmt;
WAVEHDR hdr[2048];
HWAVEOUT hwo;
U8 pause = 0;
U8 mute = 0;
U32 volume;
unsigned char *buf;
if( REC_OK == 0 )
{
download_addr = DFT_DOWNLOAD_ADDR;
buf = (unsigned char *)download_addr;
for( i = 0; i < 243552; i++ ) buf[i] = WindowsXP_Wav[i] ;
download_len = 243552 ;
}
size = *(U32 *)(download_addr+0x28);
i = 0;
while(size>0)
{
hdr[i].lpData = (LPSTR)(download_addr+0x2c+i*BUF_SIZE);
hdr[i].dwBufferLength = (size>BUF_SIZE)?BUF_SIZE:size;
size -= BUF_SIZE;
i++;
}
fmt.wFormatTag = WAVE_FORMAT_PCM;
fmt.nChannels = *(U16 *)(download_addr+0x16);
fmt.nSamplesPerSec = *(U32 *)(download_addr+0x18);
fmt.nAvgBytesPerSec = *(U32 *)(download_addr+0x1c);
fmt.nBlockAlign = *(U16 *)(download_addr+0x20);
fmt.wBitsPerSample = *(U16 *)(download_addr+0x22);
printf("Sample Rate = %d, Channels = %d, %dBitsPerSample, size = %d\n",
fmt.nSamplesPerSec, fmt.nChannels, fmt.wBitsPerSample, *(U32 *)(download_addr+0x28));
hwo = 0;
err = waveOutOpen(&hwo,
0,
&fmt,
0,
0,
0);
printf("\nerr = %x\n", err);
for(j=0;j<i;j++)
waveOutWrite(0, &hdr[j], 0);
puts("Now playing the file\n");
puts("Press Esc to exit, '+' to inc volume, '-' to dec volume, 'y' to mute, Enter to 'pause'\n");
waveOutGetVolume(0, &volume);
while(1)
{
U8 key = getch();
if(key==ESC_KEY)
break;
if(key==ENTER_KEY)
{
pause ^= 1;
if(pause&1)
waveOutPause(0);
else
waveOutRestart(0);
}
if(key=='y'||key=='Y')
{
mute ^= 1;
if(mute&1)
waveOutSetVolume(0, 0);
else
waveOutSetVolume(0, volume);
}
if((key=='+')&&(volume<=64535))
{
volume += 1000;
waveOutSetVolume(0, volume);
}
if((key=='-')&&(volume>=1000))
{
volume -= 1000;
waveOutSetVolume(0, volume);
}
}
waveOutClose(0);
}
static void RecordTest(void)
{
int size, i, j, err;
WAVEFORMATEX fmt;
WAVEHDR hdr[2048];
HWAVEIN hwi = 1;
fmt.nSamplesPerSec = fsTable[3];
fmt.wBitsPerSample = 16;
fmt.wFormatTag = WAVE_FORMAT_PCM;
fmt.nChannels = 2;
fmt.nBlockAlign = fmt.wBitsPerSample*fmt.nChannels/8;
fmt.nAvgBytesPerSec = fmt.nSamplesPerSec*fmt.nBlockAlign;
download_addr = 0x30800000;//_NONCACHE_STARTADDRESS;
download_len = size = 2*1024*1024;
for( i = 0; i < download_len; i+=4 ) *(U32 *)(download_addr+i) = 0 ;
i = 0;
while(size>0)
{
hdr[i].lpData = (LPSTR)(download_addr+0x2c+i*BUF_SIZE);
hdr[i].dwBufferLength = (size>BUF_SIZE)?BUF_SIZE:size;
size -= BUF_SIZE;
i++;
}
*(U16 *)(download_addr+0x14) = fmt.wFormatTag;
*(U16 *)(download_addr+0x16) = fmt.nChannels;
*(U32 *)(download_addr+0x18) = fmt.nSamplesPerSec;
*(U32 *)(download_addr+0x1c) = fmt.nAvgBytesPerSec;
*(U16 *)(download_addr+0x20) = fmt.nBlockAlign;
*(U16 *)(download_addr+0x22) = fmt.wBitsPerSample;
*(U32 *)(download_addr+0x28) = download_len;
err = waveInOpen(&hwi,
0,
&fmt,
0,
0,
0);
printf("\nerr = %x\n", err);
for(j=0;j<i;j++)
if(waveInAddBuffer(hwi, &hdr[j], 0))
puts("Add buffer error!");
printf("Added %d buffer for record\n", i);
puts("Press any to Record\n");
getch();
puts("Now begin recording, Press Esc to exit\n");
waveInStart(hwi);
while(1)
{
U8 key;
key = getkey();
if(key==ESC_KEY)
break;
}
waveInClose(hwi);
REC_OK = 0xff ;
PlayMusicTest() ;
REC_OK = 0 ;
}
void RecordChannelOnOff(void)
{
static int ChannelOn = 0;
int err;
WAVEFORMATEX fmt;
WAVEHDR hdr;
HWAVEIN hwi = 1;
fmt.nSamplesPerSec = 22050;
fmt.wBitsPerSample = 16;
fmt.wFormatTag = WAVE_FORMAT_PCM;
fmt.nChannels = 2;
fmt.nBlockAlign = fmt.wBitsPerSample*fmt.nChannels/8;
fmt.nAvgBytesPerSec = fmt.nSamplesPerSec*fmt.nBlockAlign;
hdr.lpData = (LPSTR)0x30800000;//_NONCACHE_STARTADDRESS;
hdr.dwBufferLength = BUF_SIZE;
if(!ChannelOn) {
err = waveInOpen(&hwi,
0,
&fmt,
0,
0,
0);
printf("\nerr = %x\n", err);
if(!err) {
waveInAddBuffer(hwi, &hdr, 0);
waveInStart(hwi);
puts("Record channel on\n");
ChannelOn = 1;
}
} else {
waveInClose(hwi);
puts("Record channel off\n");
ChannelOn = 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -