|
生成sin数据的代码
- //生成sin数据
- void SineGenerator(float outFreq,float samplingFreq)
- {
- //输出数据索引
- uint16_t i;
- float tmp;
- //采样率除输出频率得到总样本数量
- uint16_t sampleLength = (uint16_t)(samplingFreq / outFreq);
- //分步角度
- float stepDegrees = 360.00 / (float)sampleLength ;
- //分步弧度
- stepDegrees = PI / 180.00 * stepDegrees;
- //游标移到起始处
- sinWaveLength = 0;
- //得到对应正弦数据
- for(i=0;i<sampleLength;i++)
- {
- //得到当前弧度
- tmp = stepDegrees* i;
- //得到对应的sin数据
- tmp = sin(tmp);
- //+0.5四舍五入
- sinWave[sinWaveLength++] = (int16_t)((tmp + 1)/2 * 65535 - 32768 + 0.5);
- }
- }
复制代码
在BSP_AUDIO_OUT_TransferComplete_CallBack和BSP_AUDIO_OUT_HalfTransfer_CallBack中断函数里循环填充正弦数据到输出缓冲区
- void BSP_AUDIO_OUT_TransferComplete_CallBack(void)
- {
- uint16_t i;
- //将sinWave数据填充到DAC输出缓冲audio_out_buffer中
- //播放完audio_out_buffer时填充后半部分
- for(i=AUDIO_OUT_BUF_LEN/2;i<AUDIO_OUT_BUF_LEN;i+=2)
- {
- audio_out_buffer[i] = sinWave[sinWaveIndex];
- audio_out_buffer[i+1] = sinWave[sinWaveIndex++];
- //如果数据超出sinWave范围则从0开始循环填充
- if(sinWaveIndex >= sinWaveLength) sinWaveIndex = 0;
- }
- __NOP();
- }
- /**
- * [url=home.php?mod=space&uid=159083]@brief[/url] Manages the DMA Half Transfer complete event.
- * @retval None
- */
- void BSP_AUDIO_OUT_HalfTransfer_CallBack(void)
- {
- uint16_t i;
- //将sinWave数据填充到DAC输出缓冲audio_out_buffer中
- //播放到audio_out_buffer一半的时候填充前半部分
- for(i=0;i<AUDIO_OUT_BUF_LEN/2;i+=2)
- {
- audio_out_buffer[i] = sinWave[sinWaveIndex];
- audio_out_buffer[i+1] = sinWave[sinWaveIndex++];
- //如果数据超出sinWave范围则从0开始循环填充
- if(sinWaveIndex >= sinWaveLength) sinWaveIndex = 0;
- }
- __NOP();
- }
复制代码
在主函数执行SineGenerator生成指定频率的正弦数据
将第一批数据填充到audio_out_buffer,左右声道使用相同数据
执行BSP_AUDIO_OUT_Play函数播放声音
- //生成300Hz正弦波数据
- SineGenerator(300,AUDIO_SAMPLING_FREQUENCY);
-
- //将sinWave数据填充到DAC输出缓冲audio_out_buffer中
- for(i=0;i<AUDIO_OUT_BUF_LEN;i+=2)
- {
- audio_out_buffer[i] = sinWave[sinWaveIndex];
- audio_out_buffer[i+1] = sinWave[sinWaveIndex++];
- //如果数据超出sinWave范围则从0开始循环填充
- if(sinWaveIndex >= sinWaveLength) sinWaveIndex = 0;
- }
- //音频输出
- BSP_AUDIO_OUT_Play(PCM1774_X_0_handle,(uint16_t*)audio_out_buffer, AUDIO_OUT_BUF_LEN);
复制代码
main.c代码使用STSW-STLKT01_V1.3.1例程修改
main.c
(9.26 KB, 下载次数: 6)
|
|