您尚未登录。

楼主 #1 2017-10-12 22:22:43

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

【ESP32视频分享12】一步一步使用 helix 建立一个Windows mp3 播放器

【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代码扣出来,比如下面这个就是了.

MP3Player-with-ucos-120206.7z

接着我们一步一步把 helix mp3解码的代码移植到MSVC@Windows平台.

我们先确保解码后的PCM文件能用 cooledit 或 audacity 打开

PCM确认无误后,
然后在把PCM输出到Windows的声卡。

speex-1.2.0.tar.gz


本站播放:

Bilibili播放地址:
https://www.bilibili.com/video/av16211208/





离线

#2 2017-10-13 21:01:49

沉鱼
管理员
注册时间: 2017-09-06
已发帖子: 161
积分: 161

Re: 【ESP32视频分享12】一步一步使用 helix 建立一个Windows mp3 播放器

谢谢楼主分享,我居然看完了

离线

楼主 #3 2017-10-25 21:21:35

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

Re: 【ESP32视频分享12】一步一步使用 helix 建立一个Windows mp3 播放器

本来想着把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





离线

楼主 #4 2017-10-25 21:41:58

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

Re: 【ESP32视频分享12】一步一步使用 helix 建立一个Windows mp3 播放器

有空再给播放器弄个界面,不能让他一直在黑窗口裸奔





离线

#5 2017-10-26 16:34:16

沉鱼
管理员
注册时间: 2017-09-06
已发帖子: 161
积分: 161

Re: 【ESP32视频分享12】一步一步使用 helix 建立一个Windows mp3 播放器

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 {

网友发的 容错代码, 仅供参考.

离线

楼主 #6 2017-10-26 16:43:04

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

Re: 【ESP32视频分享12】一步一步使用 helix 建立一个Windows mp3 播放器





离线

#7 2020-12-11 12:49:09

wxyk_zzh
会员
注册时间: 2020-12-11
已发帖子: 10
积分: 10

Re: 【ESP32视频分享12】一步一步使用 helix 建立一个Windows mp3 播放器

楼主的代码不错,测试了一下,双声道处理可以,但单声道不行。
修改方法:
在main.c函数中:去掉Convert_Mono((output));这一句,即可

最近编辑记录 wxyk_zzh (2020-12-11 12:56:16)

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn