本帖最后由 梁工 于 2023-11-29 14:58 编辑
51开源-仿USB声卡I2S接口播放PCM格式立体声音乐@STC32F12K54 ===USB-CDC实时传输音频流,下一步真正的 UAC1.0
仿USB声卡WAVE播放程序使用说明 1、简介 建议用户直接下载"Objects"里的"audio-play.hex"测试. 下载时选择主频45.1584MHZ。 本播放器程序使用STC32F12K54运行,MCU内部ROSC工作于45.1584MHz。 本例程无需按键,类似于USB声卡,用STC-ISP里的“播放Wave”界面直接打PCM文件播放。 STC32F12K54的I2S接口连接I2S-DAC芯片即可播放,本例使用STC核心板“追风剑”连接 CS4334或CS4344来播放声音,由上位机CDC串口连续发送音频流。
本播放程序仅支持PCM格式的WAV文件播放,由STC-ISP的“播放WAVE”界面通过CDC串口下传数据流: 支持16位无压缩(CD音轨)WINDOWS PCM格式,单声道或双声道音频。 常用采样率为8KHz、16KHz、22.05KHz、44.1KHz(最高)。 由于I2S的MCLK由主频分频得到,所以对于一些采样率会出现较大误差,不建议使用 2、输出I2S-DAC电路 CS4334、CS4344是开关电容模拟滤波器输出,所以要接一个R/C滤波,下图参数截止频率为19.39KHz, 对应采样率为44.1KHz。如果要别的截止频率,请按比例改变C5、C6的值。 3、使用“追风剑”核心板验证
本例使用STC核心板“追风剑”连接CS4334或CS4344来播放声音,洞洞板验证电路如下: I2S链接: P5.4---I2S-MCLK P2.2---I2S-LRCK(WS) P2.3---I2S-SDI P2.5---I2S-SCLK
指示灯信号: P2.0--> 播放指示灯,播放时输出低电平点亮LED,停止时输出高电平,LED灭。 P2.1--> 通信指示灯,USB-CDC每收到一包64字节数据就取反一次,示波器观察。 P4.5--> I2S中断函数使用时间指示,高电平时间为处理时间 (左声道处理3us,右声道处理2us),中断频率为采样率的2倍。
4、下载程序 下载程序和CDC通信均使用板上TYPE-C接口实现。打开STC-ISP V6.92G或更高版本。 打开程序文件,即打开"Objects"里的"audio-play.hex"文件。 用USB TYPE-C延长线将“追风剑”核心板与PC连接,持续按下P3.2按键,短按OFF键释放, 1秒后释放P3.2按键,STC ISP就能自动识别到设备:
点击下载按钮,将程序下载到MCU中。
5、播放设置 此时STC ISP已能自动识别播放程序的CDC通信口, 下图的“扫描”里显示的就是CDC串口。
点击“STC调试接口”,选择“播放Wave(P)”,见下图: 点击“打开Wave”,选择要播放的Wave文件。 Wave文件信息里会显示文件的重要信息: 文件格式,只支持:1-PCM这种类型。 通道数:1表示单声道,2表示立体声。 采样率:每秒的采样数。 采样位数:就是一个采样点的位数,用户不用关心。 数据大小:即声音的字节数。 设置数据发送模式里的“每个数据包的大小(字节)”为1024。 勾选“第一包数据发送WAVE文件信息” 选择“连续自动发送”。 “数据包之间的延时(ms)”根据播放的文件类型和采样率设置,或者均设置为0。 PCM 采样率 包间延时时间 数据率 44.1KHz 0ms 176.4KB/S 22.05KHz 1ms或2ms 128KB/S 16KHz 4ms或5ms 64KB/S 8KHz 4ms或5ms 32KB/S
点击“发送Wave数据”,发出的第一个包为14字节的文件信息,大端模式,字节安排如下: Byte0、Byte1:WAV类型,0x0001-->PCM,0x0006-->A Law,0x0011-->IMA ADPCM。 Byte2:声道数,1(单声道)或2(立体声)。 Byte3:采样位数,用户不用理会。 Byte4~Byte7:采样率,Hz。 Byte8~Byte11:数据长度(字节数)。 Byte12~Byte13:BLOCK长度(ADPCM使用)。 后面发送的都是音频数据包,即可播放声音。
I2S-DMA版本:
|