【ESP32视频分享1】淘宝最牛 esp32开发板使用分享 开箱教程(helloworld)
【ESP32视频分享2】Window 平台使用 Eclipse开发ESP32程序
【ESP32视频分享3】Ubuntu使用 Eclipse开发ESP32程序
【ESP32视频分享4】使用whyengineer开源的webserver演示程序
【ESP32视频分享5】esp32驱动lan8720,使用官方example/ethernet ,可以dhcpc获取ip,可以ping
【ESP32视频分享6】esp32驱动PCM5102A声卡播放音乐
【ESP32视频分享7】esp32驱动OLED液晶屏
【ESP32视频分享8】esp-idfexamplesstorage 演示
【ESP32视频分享9】一步一步实现一个web服务器(webserver)
【ESP32视频分享10】一步一步实现一个esp32蓝牙喇叭
【ESP32视频分享11】ESP驱动全彩OLED(SSD1331)
【ESP32视频分享12】一步一步使用 helix 建立一个Windows mp3 播放器
今天有个朋友发了一个帖子,https://whycan.cn/t_345.html
关于mp3解码的问题,
正好这段时间会用到就研究了一下。
把心得体会写出来。
首先,我们去helix官网 https://www.helixcommunity.org/projects/datatype/mp3dec 下载源码,
结果你会发现卧槽,说好的cvs代码仓库也不存在了,
只好去国内网站下载的stm32 helix 项目源码,
从中把二手的helix代码扣出来,比如下面这个就是了.
接着我们一步一步把 helix mp3解码的代码移植到MSVC@Windows平台.
我们先确保解码后的PCM文件能用 cooledit 或 audacity 打开
PCM确认无误后,
然后在把PCM输出到Windows的声卡。
本站播放:
Bilibili播放地址:
https://www.bilibili.com/video/av16211208/
离线
谢谢楼主分享,我居然看完了
离线
本来想着把helix移植到 MSVC@Windows之后再整合到ESP32平台,
结果链接失败,
发现有几个底层的计算函数
MULSHIFT32
FASTABS
MADD64
SHL64
SAR64
需要用esp32汇编实现,
因为对汇编基本没什么了解,
所以根本就编不下去,
今天在群里面有位叫 大约在秋季(QQ网名) 的大神分享了一个esp32的helix移植,
他说直接用C实现的,
然后我借用了他的代码,
在MSVC上面一跑,
果然可以解码mp3音乐。
本站视频分享:
Bilibili视频分享:
https://www.bilibili.com/video/av16211207/
源码下载:
https://whycan.cn/files/members/3/helix_msvc2013_debugdump.7z
离线
decoder->bytes_left_before_decoding = decoder->bytes_left;
90 int err = MP3Decode(decoder->decoder, &decoder->read_ptr, (int *)&decoder->bytes_left, decoder->out, 0);
91 if (err != ERR_MP3_NONE) {
92 switch (err) {
93 case ERR_MP3_INDATA_UNDERFLOW:
94 printf("ERR_MP3_INDATA_UNDERFLOW\n");
95 decoder->bytes_left = 0;
96 if(mp3_get_data(decoder) != 0) {
97 //没有数据可读
98 goto error;
99 }
100 break;
101 case ERR_MP3_MAINDATA_UNDERFLOW:
102 /* do nothing - next call to decode will provide more mainData */
103 printf("ERR_MP3_MAINDATA_UNDERFLOW, continue to find sys words\n");
104 break;
105 default:
106 printf("unknown error: %d, left: %d\n", err, decoder->bytes_left);
107 // skip this frame
108 if (decoder->bytes_left > 0) {
109 decoder->bytes_left --;
110 decoder->read_ptr ++;
111 } else {
112 printf("fatal error\n");
113 goto error;
114 }
115 break;
116 }
117 } else {
网友发的 容错代码, 仅供参考.
离线
离线
楼主的代码不错,测试了一下,双声道处理可以,但单声道不行。
修改方法:
在main.c函数中:去掉Convert_Mono((output));这一句,即可
最近编辑记录 wxyk_zzh (2020-12-11 12:56:16)
离线