sox+ffmpeg+mad+flac

一切为了听歌


上次用了libmad 搞了mp3的解码+alsa的音乐播放,但是不可能只是支持一种格式。所以改改改改


需要支持 mp3,flac,m4a,wav,wmv…..格式

而且在这里我们还有resample channels 等一些关于音频的其他参数的需求,最终我们选用了sox ,sox提供了带其他解码库的编译选项,比方说ffmpeg的库,libavxxxx,libflac,lame,twolame等具体可以在官方的说明里面找到,但是感觉最重要的还是ffmpeg。

交叉编译肯定就大家自己动手了。
接下来说一下编译的时候碰到的问题。

  1. 编译的时候无法生成动态库。
    无法生成so文件。编译过程中

     checking if libtool supports shared libraries... no

    这里我蒙蔽了好一会儿。后来查到是arch=arm的问题,把arch=arm-none-linux就好了

  2. sox带libavxxxx编译的时候,出现找不到函数

    checking for av_open_input_file in -lavformat... no

    首先你要确定你的库路径是对的。

    readelf -a libavformat | grep av_open_input_file

    看看到底有没有。
    我用的sox 14.4.1 2013年发布的,但是av_open_input_file这个函数在后面的某一年的ffmpeg里面被废弃了,所以,如果你的ffmpeg版本太新也是没有这个函数,肯定是编译不过去的。后来我选用了比较早的ffmpeg的版本,这个问题就解决掉了。

  3. wma和ape的支持

    如果你直接使用

    sox xxxx.wma -t alsa

    来播放的wma文件的话,即使在有ffmpeg库的情况下也是不能播放的(这仅仅是我自己测试到的情况,后面版本如果有修改的话,当我没说)。在这种情况下要

    sox -t ffmpeg xxxx.wma -t alsa

    直接指定输入文件使用ffmpeg处理,在编程中在open_read的时候,有个一type的参数,正常情况下为null,在此处直接设置为ffmpeg就可以播放了。

  4. 个别破音
    在播放某一些音乐的时候,会有一些破音的情况,硬件上这个问题应该是大头,但是我们也可以通过缩小输出的幅度来防止这种情况的发生可以在播放的时候加入 vol的effect 然后加入一个参数比方0.5 0.3,这样音量就会x0.5 x0.3,从而达到减小输出音量的效果。

  5. sox的rate效果
    在使用sox的rate效果的时候,比方把96k转化为48k或者其他频率的音频播放时,会出现卡顿的情况,这种情况下,可以试着把rate的转换效果降低,默认是高质量的,可以通过为rate添加参数的方法,降低效果,减少单次转换的运算量,使得播放顺畅。

这是我在做音频的一些碰到的一些问题,希望能帮助到别人,如果有错,劳烦告知,谢谢。
有一些我还是没有解决问题,如果哪位大神会,也请帮助我一下
我使用的是imx6ul,但是对他的arsc表示无奈,不会用,本来想要通过这个模块直接硬件转rate,但是我发现imx6ul没有44100的倍数的时钟。手册上写的支持44.1,48等一系列的都可以支持,但是我不会用。

14.4.1中存在内存泄漏的问题。本来准备使用14.4.2,但是发现14.4.2不支持ffmpeg了,心累,bug怎么办。。。 最新一个版本更新隔了一年,sox是准备凉凉了吗

发现新的情况 好像跟格式有关系 wma和m4a,内存涨的特别快,但是wav mp3之类的就没有明显的增长,这两个格式的支持是在ffmpeg中支持的,但是ffmpeg的库有点老

下次还有这种应用的话,还是尝试换种方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值