UDA1341.c
上传用户:jankzhpno
上传日期:2022-08-03
资源大小:4763k
文件大小:5k
源码类别:

Windows CE

开发平台:

Visual C++

  1. #include "def.h"
  2. #include "2440addr.h"
  3. #include "2440lib.h"
  4. #include "AudioDrv.h"
  5. #include "WindowsXP_Wav.h" //长度为243552个字节
  6. #define BUF_SIZE (16*1024)
  7. extern U32 downloadAddress;
  8. extern U32 downloadFileSize;
  9. //extern U8 USB_OR_UART_Download_OK ;
  10. //static U16 fsTable[] = {8000,11025,16000,22050,32000,44100,48000,0};
  11. void PlayMusicTest(void)
  12. {
  13. int size, i, j, err;
  14. WAVEFORMATEX fmt;
  15. WAVEHDR hdr[2048];
  16. HWAVEOUT hwo;
  17. U8 pause = 0;
  18. U8 mute = 0;
  19. U32 volume;
  20. unsigned char *buf;
  21. downloadAddress = _NONCACHE_STARTADDRESS;
  22. buf = (unsigned char *)downloadAddress ;
  23. for( i = 0; i < 243552; i++ )  buf[i] = WindowsXP_Wav[i] ;
  24. downloadFileSize = 243552 ;
  25. size = *(U32 *)(downloadAddress+0x28);
  26. i = 0;
  27. while(size>0)
  28. {
  29. hdr[i].lpData = (LPSTR)(downloadAddress+0x2c+i*BUF_SIZE);
  30. hdr[i].dwBufferLength = (size>BUF_SIZE)?BUF_SIZE:size;
  31. size -= BUF_SIZE;
  32. i++;
  33. }
  34. fmt.wFormatTag = WAVE_FORMAT_PCM;
  35. fmt.nChannels = *(U16 *)(downloadAddress+0x16);
  36. fmt.nSamplesPerSec = *(U32 *)(downloadAddress+0x18);
  37. fmt.nAvgBytesPerSec = *(U32 *)(downloadAddress+0x1c);
  38. fmt.nBlockAlign = *(U16 *)(downloadAddress+0x20);
  39. fmt.wBitsPerSample = *(U16 *)(downloadAddress+0x22);
  40. Uart_Printf("nSample Rate = %d, Channels = %d, %dBitsPerSample, size = %dn",
  41. fmt.nSamplesPerSec, fmt.nChannels, fmt.wBitsPerSample, *(U32 *)(downloadAddress+0x28));
  42. hwo = 0;
  43. err = waveOutOpen(&hwo,
  44. 0,
  45. &fmt,
  46. 0,
  47. 0,
  48. 0);
  49. Uart_Printf("nerr = %xn", err);
  50. for(j=0;j<i;j++)
  51. waveOutWrite(0, &hdr[j], 0);
  52. Uart_Printf("Now playing the filen");
  53. Uart_Printf("Press 'ESC' to quit, '+' to inc volume, '-' to dec volume, 'm' to mute, 'p' to pausen");
  54. waveOutGetVolume(0, &volume);
  55. while(1)
  56. {
  57. U8 key = Uart_Getch();
  58. if( key == ESC_KEY )
  59. break;
  60. if(key=='p')
  61. {
  62. pause ^= 1;
  63. if(pause&1)
  64. waveOutPause(0);
  65. else
  66. waveOutRestart(0);
  67. }
  68. if(key=='m')
  69. {
  70. mute ^= 1;
  71. if(mute&1)
  72. waveOutSetVolume(0, 0);
  73. else
  74. waveOutSetVolume(0, volume);
  75. }
  76. if((key=='+')&&(volume<=64535))
  77. {
  78. volume += 1000;
  79. waveOutSetVolume(0, volume);
  80. }
  81. if((key=='-')&&(volume>=1000))
  82. {
  83. volume -= 1000;
  84. waveOutSetVolume(0, volume);
  85. }
  86. }
  87. waveOutClose(0);
  88. }
  89. void RecordTest(void)
  90. {
  91. int size, i, j, err;
  92. WAVEFORMATEX fmt;
  93. WAVEHDR hdr[2048];
  94. HWAVEIN hwi = 1;
  95. /*Uart_Printf("Please select Sample Rate:n");
  96. for(i=0; fsTable[i]; i++)
  97. Uart_Printf("%d. %dHzn", i, fsTable[i]);
  98. while(1)
  99. {
  100. U8 key = Uart_Getch();
  101. if((key-'0')>=0&&(key-'0'<=i-1))
  102. {
  103. fmt.nSamplesPerSec = fsTable[key-'0'];
  104. break;
  105. }
  106. }*/
  107. Uart_Printf( "nThe Frequency of record is 48KHzn" );
  108. fmt.nSamplesPerSec = 48000; //采样频率为48KHz
  109. fmt.wBitsPerSample = 16;
  110. fmt.wFormatTag = WAVE_FORMAT_PCM;
  111. fmt.nChannels = 2;
  112. fmt.nBlockAlign     = fmt.wBitsPerSample*fmt.nChannels/8;
  113. fmt.nAvgBytesPerSec = fmt.nSamplesPerSec*fmt.nBlockAlign;
  114. downloadAddress  = 0x30800000;//_NONCACHE_STARTADDRESS;
  115. downloadFileSize = size = 16*1024*1024;
  116. i = 0;
  117. while(size>0)
  118. {
  119. hdr[i].lpData = (LPSTR)(downloadAddress+0x2c+i*BUF_SIZE);
  120. hdr[i].dwBufferLength = (size>BUF_SIZE)?BUF_SIZE:size;
  121. size -= BUF_SIZE;
  122. i++;
  123. }
  124. *(U16 *)(downloadAddress+0x14) = fmt.wFormatTag;
  125. *(U16 *)(downloadAddress+0x16) = fmt.nChannels;
  126. *(U32 *)(downloadAddress+0x18) = fmt.nSamplesPerSec;
  127. *(U32 *)(downloadAddress+0x1c) = fmt.nAvgBytesPerSec;
  128. *(U16 *)(downloadAddress+0x20) = fmt.nBlockAlign;
  129. *(U16 *)(downloadAddress+0x22) = fmt.wBitsPerSample;
  130. *(U32 *)(downloadAddress+0x28) = downloadFileSize;
  131. err = waveInOpen(&hwi,
  132. 0,
  133. &fmt,
  134. 0,
  135. 0,
  136. 0);
  137. Uart_Printf("nerr = %xn", err);
  138. for(j=0;j<i;j++)
  139. if(waveInAddBuffer(hwi, &hdr[j], 0))
  140. Uart_Printf("Add buffer error!");
  141. Uart_Printf("Added %d buffer for recordn", i);
  142. Uart_Printf("Press any to Recordn");
  143. Uart_Getch();
  144. Uart_Printf("Now begin recording, Press 'ESC' to quitn");
  145. waveInStart(hwi);
  146. while(1)
  147. {
  148. U8 key;
  149. key = Uart_GetKey();
  150. if( key == ESC_KEY )
  151. break;
  152. // Uart_Printf("%x,%x,%x,%x,%x,%x,%xn", rDISRC2, rDISRCC2, rDIDST2, rDIDSTC2, rDCON2, rDSTAT2, rDMASKTRIG2);
  153. // Uart_Printf("%x,%x,%x,%xn", rIISCON, rIISMOD, rIISPSR, rIISFCON);
  154. }
  155. waveInClose(hwi);
  156. }
  157. void RecordChannelOnOff(void)
  158. {
  159. static int ChannelOn = 0;
  160. int err;
  161. WAVEFORMATEX fmt;
  162. WAVEHDR hdr;
  163. HWAVEIN hwi = 1;
  164. fmt.nSamplesPerSec  = 22050;
  165. fmt.wBitsPerSample  = 16;
  166. fmt.wFormatTag = WAVE_FORMAT_PCM;
  167. fmt.nChannels = 2;
  168. fmt.nBlockAlign     = fmt.wBitsPerSample*fmt.nChannels/8;
  169. fmt.nAvgBytesPerSec = fmt.nSamplesPerSec*fmt.nBlockAlign;
  170. hdr.lpData = (LPSTR)0x30800000;//_NONCACHE_STARTADDRESS;
  171. hdr.dwBufferLength = BUF_SIZE;
  172. if(!ChannelOn) {
  173. err = waveInOpen(&hwi,
  174. 0,
  175. &fmt,
  176. 0,
  177. 0,
  178. 0);
  179. Uart_Printf("nerr = %xn", err);
  180. if(!err) {
  181. waveInAddBuffer(hwi, &hdr, 0);
  182. waveInStart(hwi);
  183. Uart_Printf("Record channel onn");
  184. ChannelOn = 1;
  185. }
  186. } else {
  187. waveInClose(hwi);
  188. Uart_Printf("Record channel offn");
  189. ChannelOn = 0;
  190. }
  191. }