膜拜_大佬们 2021-07-05 19:24 采纳率: 0%
浏览 11

stm32f446 usb声卡左右声道分离失真是怎么回事

stm32f446做的usb声卡 采用USB_OTG_HS模式,usb传进来的数据48k采样率的数据进行左右声道分开通过dma搬运到sai两个子音频单声道输出
直接将usb传进来的数据发送是没有失真,音频是个正玄波数据来的,进行左右声道分离后失真,波形有些缺失重叠的,然后我修改了接收usb数据回调的函数的数据包数为40个包就没有失真,原来是80个包的,试了很多个数,就40不失真



/* Number of sub-packets in the audio transfer buffer. You can modify this value but always make sure
  that it is an even number and higher than 3 音频传输缓冲区中的子包数。您可以修改此值,但始终确保它是偶数并且大于3*/
#define AUDIO_OUT_PACKET_NUM                         40U         //40 最佳其他都有问题
/* Total size of the audio transfer buffer *///音频传输缓冲区的总大小
#define AUDIO_TOTAL_BUF_SIZE                          ((uint16_t)(AUDIO_OUT_PACKET * AUDIO_OUT_PACKET_NUM))//音频输出大小*音频输出数据包数


下面是usb的数据回调函数 1.数据buf 2.大小字节数3.采样率

void Audio_Player_Play(uint8_t* pBuffer, uint32_t Size, uint32_t samplerate)//
{
    uint16_t i = 0;
        uint16_t a=0;  //data a b 的地址索引
     SPI_Samplerate(samplerate,0);//发送采样率
    
    if(Size > 0xFFFF) Size = 0xFFFF; 
    for(i = 0 ; i < Size ; i+=8)     //  左右通道分离。源数据是32位的,数据存放buf是8位的 
    {        
              audio_data_a[a+0]=pBuffer[i+0];        
        audio_data_a[a+1]=pBuffer[i+1];
        audio_data_a[a+2]=pBuffer[i+2];
        audio_data_a[a+3]=pBuffer[i+3];
    
        
        
        audio_data_b[a+0]=pBuffer[i+4];
        audio_data_b[a+1]=pBuffer[i+5];
        audio_data_b[a+2]=pBuffer[i+6];
        audio_data_b[a+3]=pBuffer[i+7];
    

            a+=4;
        
    }
  
   


     HAL_SAI_Transmit_DMA(&hsai_BlockA1, audio_data_a,Size/8);
     HAL_SAI_Transmit_DMA(&hsai_BlockB1, audio_data_b,Size/8);//dma发送到sai输出,4组为一个声道,再分开左右声道,所以传输数量/8

    
}


  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-10-25 19:51
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥20 我需要"hill48屈服模型 等向强化 非线性硬化"的abaqus本构子程序(umat或者vumat)对应的理论推导过程。
  • ¥15 基于ucc28019的pfc电路中芯片一直不工作
  • ¥15 yolov8在3588板子端c++推理报错
  • ¥50 unitywebrequest分段下载导致报错,如何解决?
  • ¥15 错误使用 gretna_GUI_PreprocessInterface>RunBtn_Callback
  • ¥15 WPF如何用Chart绘画出Y轴的左边数据
  • ¥15 pycharm无法查看内置代码
  • ¥15 跑hls xfopencv的例程standalone_hls_axi_example出的错误,csim没问题,c synthesis出的错误
  • ¥15 sqlserver update语句逐行生效
  • ¥20 Windows10系统命令行调用