⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testplay.c

📁 uccos2的的源码文件
💻 C
字号:
#include "S3C2410.h"
#include "AudioDrv.h"
//#include "2410lib.h"
#include "DmaAdmin.h"
#include "WindowsXP_Wav.h"		//长度为243552个字节


#include "test.h"

U32 downloadAddress;
U32 downloadFileSize;
WAVEHDR hdr[20];
WAVEFORMATEX fmt;
HWAVEOUT hwo = 0;
HWAVEIN hwi = 1;


#define	BUF_SIZE	(16*1024)


//static U16 fsTable[] = {8000,11025,16000,22050,32000,44100,48000,0};
void RecordTest(void)
{
	int size, i, j, err;

#if 0
	fmt.nSamplesPerSec = 48000;		//采样频率为48KHz
	fmt.wBitsPerSample = 16;

	fmt.wFormatTag		= WAVE_FORMAT_PCM;
	fmt.nChannels		= 2;
	fmt.nBlockAlign     = fmt.wBitsPerSample*fmt.nChannels/8;
	fmt.nAvgBytesPerSec	= fmt.nSamplesPerSec*fmt.nBlockAlign;
#else
    fmt.wFormatTag      = WAVE_FORMAT_PCM;
    fmt.nChannels       = *(U16 *)(downloadAddress+0x16);
    fmt.nSamplesPerSec  = *(U32 *)(downloadAddress+0x18);
    fmt.nAvgBytesPerSec = *(U32 *)(downloadAddress+0x1c);
    fmt.nBlockAlign     = *(U16 *)(downloadAddress+0x20);
    fmt.wBitsPerSample  = *(U16 *)(downloadAddress+0x22);
#endif

    downloadAddress = (unsigned long)WindowsXP_Wav;
	downloadFileSize = size = 243552 ;
	i = 0;

	while(size>0)
	{
		hdr[i].lpData = (LPSTR)(downloadAddress+0x2c+i*BUF_SIZE);
		hdr[i].dwBufferLength = (size>BUF_SIZE)?BUF_SIZE:size;
		size -= BUF_SIZE;
		i++;
	}

	*(U16 *)(downloadAddress+0x14) = fmt.wFormatTag;
	*(U16 *)(downloadAddress+0x16) = fmt.nChannels;
	*(U32 *)(downloadAddress+0x18) = fmt.nSamplesPerSec;
	*(U32 *)(downloadAddress+0x1c) = fmt.nAvgBytesPerSec;
	*(U16 *)(downloadAddress+0x20) = fmt.nBlockAlign;
	*(U16 *)(downloadAddress+0x22) = fmt.wBitsPerSample;
	*(U32 *)(downloadAddress+0x28) = downloadFileSize;

	err = waveInOpen(&hwi,
				0,
				&fmt,
				0,
				0,
				0);

	for(j=0;j<i;j++)
		if(waveInAddBuffer(hwi, &hdr[j], 0))
		{
			//puts("Add buffer error!");
		}
	waveInStart(hwi);
   // waveInClose(hwi);
}



void PlayMusicTest(void)
{
	int size, i, j, err;
	U8 pause = 0;
	U8 mute = 0;

    downloadAddress = (unsigned long)WindowsXP_Wav;
	downloadFileSize = 243552 ;

	size = *(U32 *)(downloadAddress+0x28);
	i = 0;

	while(size>0)
	{
		hdr[i].lpData = (LPSTR)(downloadAddress+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 *)(downloadAddress+0x16);
	fmt.nSamplesPerSec	= *(U32 *)(downloadAddress+0x18);
	fmt.nAvgBytesPerSec	= *(U32 *)(downloadAddress+0x1c);
	fmt.nBlockAlign		= *(U16 *)(downloadAddress+0x20);
	fmt.wBitsPerSample	= *(U16 *)(downloadAddress+0x22);
	hwo = 0;
	err = waveOutOpen(&hwo,
				0,
				&fmt,
				0,
				0,
				0);
    for(j=0;j<i;j++)
    {
        waveOutWrite(0, &hdr[j], 0);
    }
}


int recording = 0;
int playing = 0;
int pause = 0;
int mute = 0;
unsigned int lastvolume = 0;

void ShowAudio(void)
{
    int j = 0;

    buf[0] = 0;
    if( playing == 1 )
    {
    	j += sprintf((char*)buf+j,"采样率=%d,通道数=%d,%d位/样本,大小=%d 音量=%d",
    			fmt.nSamplesPerSec, fmt.nChannels, fmt.wBitsPerSample,
    			*(U32 *)(downloadAddress+0x28),lastvolume);
        if( pause & 1)
            j += sprintf((char*)buf+j," 暂停播放");
        if( mute & 1)
            j += sprintf((char*)buf+j," 静音");
    }

    if( recording == 1)
    {
        j += sprintf((char*)buf+j," 正在录音...");
    }

    StatusMessage((const char *)buf);
}


int PlayAuditoControl(int v)
{
    switch(v)
    {
        case 1: // play
            if( playing == 0 )
            {
                playing = 1;
                PlayMusicTest();
            }
            break;
        case 2:  // close
            waveOutClose(hwo);
            playing = 0;
            break;
        case 3: // volume +
        case 4: // volume -
    		if((v==3)&&(lastvolume<=64535))
    			lastvolume += 1000;
    		else if((v==4)&&(lastvolume>=1000))
    			lastvolume -= 1000;
            waveOutSetVolume(hwo, lastvolume);
            break;
       case 5: // pause
           pause ^= 1;
           if(pause&1)
               waveOutPause(hwo);
           else
               waveOutRestart(hwo);
           break;
      case 6: // mute
          mute ^= 1;
          if(mute&1)
              waveOutSetVolume(hwo, 0);
          else
              waveOutSetVolume(hwo, lastvolume);
           break;
     case 0xff:
        return MENU_EXIT;
    }
    if( lastvolume == 0 )
        waveOutGetVolume(hwo,&lastvolume);

    ShowAudio();
    SetMenuReShow(0);
    return MENU_RETAIN;
}

int RecordAuditoControl(int v)
{
    switch(v)
    {
        case 1:
            if( recording == 0 )
            {
                RecordTest();
                recording = 1;
            }
            break;
        case 2:
            waveInClose(hwi);
            recording = 0;
            break;
    }

    ShowAudio();
    SetMenuReShow(0);
    return MENU_RETAIN;
}



int test_Audito_idle(int v)
{
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -