test_audio.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include "user.h"
  2. #include "wave_data.h"
  3. #define ONCE_READ_LEN (32 * 1024)
  4. extern const uint16_t wavData[WAVE_DATA_SIZE];
  5. static Audio_StreamStruct prvStream;
  6. //下面模拟从文件读取
  7. static uint8_t *pBuf;
  8. static uint32_t TotalLen = WAVE_DATA_SIZE * 2;
  9. static uint32_t ReadLen;
  10. static int32_t Audio_TestCB(void *pData, void *pParam)
  11. {
  12. if (pParam == INVALID_HANDLE_VALUE)
  13. {
  14. DBG("finish!");
  15. //在这里通知某个线程所有数据都传输完成,可以停止了,如果是DAC,需要用DAC_Stop来等待彻底停止,或者延迟一小段时间,再用DAC_Stop
  16. }
  17. if (ReadLen >= TotalLen)
  18. {
  19. return 0;
  20. }
  21. //在这里通知某个线程需要获取更多数据
  22. if ((TotalLen - ReadLen) > ONCE_READ_LEN)
  23. {
  24. Audio_WriteRaw(&prvStream, pBuf + ReadLen, ONCE_READ_LEN);
  25. ReadLen += ONCE_READ_LEN;
  26. }
  27. else
  28. {
  29. Audio_WriteRaw(&prvStream, pBuf + ReadLen, (TotalLen - ReadLen));
  30. ReadLen = TotalLen;
  31. }
  32. return 0;
  33. }
  34. void Audio_Test(void)
  35. {
  36. prvStream.BitDepth = 16;
  37. prvStream.BusType = AUSTREAM_BUS_DAC;
  38. prvStream.BusID = 0;
  39. prvStream.Format = AUSTREAM_FORMAT_PCM;
  40. prvStream.CB = Audio_TestCB;
  41. prvStream.ChannelCount = 1;
  42. prvStream.SampleRate = SAMPLE_RATE;
  43. prvStream.IsDataSigned = 1;
  44. DBG("%d", Audio_StartRaw(&prvStream));
  45. ReadLen = 0;
  46. pBuf = wavData;
  47. //内存充足的情况下,可以连续写入2次,第一块发送完成后,会立刻发送第二块, 同时回调让用户输入更多数据
  48. Audio_WriteRaw(&prvStream, pBuf, ONCE_READ_LEN);
  49. Audio_WriteRaw(&prvStream, pBuf + ONCE_READ_LEN, ONCE_READ_LEN);
  50. ReadLen += 2 * ONCE_READ_LEN;
  51. }