| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- #include "user.h"
- #include "wave_data.h"
- #define ONCE_READ_LEN (32 * 1024)
- extern const uint16_t wavData[WAVE_DATA_SIZE];
- static Audio_StreamStruct prvStream;
- //下面模拟从文件读取
- static uint8_t *pBuf;
- static uint32_t TotalLen = WAVE_DATA_SIZE * 2;
- static uint32_t ReadLen;
- static int32_t Audio_TestCB(void *pData, void *pParam)
- {
- if (pParam == INVALID_HANDLE_VALUE)
- {
- DBG("finish!");
- //在这里通知某个线程所有数据都传输完成,可以停止了,如果是DAC,需要用DAC_Stop来等待彻底停止,或者延迟一小段时间,再用DAC_Stop
- }
- if (ReadLen >= TotalLen)
- {
- return 0;
- }
- //在这里通知某个线程需要获取更多数据
- if ((TotalLen - ReadLen) > ONCE_READ_LEN)
- {
- Audio_WriteRaw(&prvStream, pBuf + ReadLen, ONCE_READ_LEN, 0);
- ReadLen += ONCE_READ_LEN;
- }
- else
- {
- Audio_WriteRaw(&prvStream, pBuf + ReadLen, (TotalLen - ReadLen), 0);
- ReadLen = TotalLen;
- }
- return 0;
- }
- void Audio_Test(void)
- {
- prvStream.BitDepth = 16;
- prvStream.BusType = AUSTREAM_BUS_DAC;
- prvStream.BusID = 0;
- prvStream.Format = AUSTREAM_FORMAT_PCM;
- prvStream.CB = Audio_TestCB;
- prvStream.ChannelCount = 1;
- prvStream.SampleRate = SAMPLE_RATE;
- prvStream.IsDataSigned = 1;
- DBG("%d", Audio_StartRaw(&prvStream));
- ReadLen = 0;
- pBuf = wavData;
- //内存充足的情况下,可以连续写入2次,第一块发送完成后,会立刻发送第二块, 同时回调让用户输入更多数据
- Audio_WriteRaw(&prvStream, pBuf, ONCE_READ_LEN, 0);
- Audio_WriteRaw(&prvStream, pBuf + ONCE_READ_LEN, ONCE_READ_LEN, 0);
- ReadLen += 2 * ONCE_READ_LEN;
- }
|