梁工 发表于 2023-11-25 15:50:31

51开源-仿USB声卡I2S接口播放PCM格式立体声音乐@STC32F12K54 USB-CDC实时传输音频流

本帖最后由 梁工 于 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-MCLKP2.2---I2S-LRCK(WS)P2.3---I2S-SDIP2.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版本:

神农鼎 发表于 2023-11-25 16:01:00

就剩下 UAC 的描述符搞定 就是 UAC 了










梁工 发表于 2023-11-25 16:07:34

神农鼎 发表于 2023-11-25 16:01
就剩下 UAC 的描述符搞定 就是 UAC 了是的,UAC 指日可待。

社区闲人 发表于 2023-11-25 17:05:39

期待论坛提供WAV格式的音源供选择。

选择与判断 发表于 2023-11-26 17:00:26

实力不允许,跟不上节奏,只能做做科普这样子。。。

UAC1.0 和 UAC2.0的不同

UAC1.0和UAC2.0是USB音频类协议的两个版本,它们的主要不同点如下:

1. 采样精度:UAC1.0支持16位和24位的采样精度,而UAC2.0还支持32位的采样精度。

2. 带宽:UAC2.0支持更高的带宽(最高可达384kHz),可以处理更高质量的音频数据。

3. 控制接口:UAC2.0引入了新的控制接口,支持更多的控制命令和功能。

4. 描述符:UAC2.0引入了新的描述符,支持多个采样频率和多个采样分辨率。

5. 时钟同步:UAC2.0引入了时钟同步机制,可以更好地保证音频数据的同步和稳定性。

总的来说,UAC2.0相对于UAC1.0在音频数据的处理能力、带宽和控制功能等方面有了显著的提升,
适用于更高质量的音频应用场景。但是,UAC2.0也需要更高的硬件和软件支持

神农鼎 发表于 2023-11-27 10:10:59

大家多尝试下 DMA支持的 I2S

有你才恋家 发表于 2023-11-27 10:26:53

打卡学习{:4_166:}

STC89C51 发表于 2023-11-28 16:58:48

输出I2S-DAC电路

jackfangxq 发表于 2023-12-6 09:13:42

打卡学习

lzl1okOK 发表于 2023-12-7 02:20:56

本帖最后由 lzl1okOK 于 2023-12-7 02:22 编辑

我单片机用的8G1K08A,用PWM输出,通过低通滤波器滤波可以输出声音,就是串口频率不是快就是慢,用内部XDATA做缓存串口速度又跟不上,一卡一卡的伤脑筋!{:cry:}
页: [1] 2
查看完整版本: 51开源-仿USB声卡I2S接口播放PCM格式立体声音乐@STC32F12K54 USB-CDC实时传输音频流