新手问题 关于 mpg123 获取音频文件比特率的问题

IChou · 2014年05月01日 · 最后由 xworm 回复于 2015年03月03日 · 2268 次阅读

啊啦 作为小白 实在扛不住了 还是决定到论坛上来咨询一下了

涉及gem:audite , mpg123 , portaudio

事件描述: 我最近在练习 ruby ,决定把虾米猜电台写个 ruby 版。我想把 下载进度 和 播放进度 以进度条的形式展现出来,所以我至少需要获取 mp3 的时长,问题就出在这里:

1.虾米的 mp3 文件既有 CBR 又有 VBR

2.audite 这个gem 计算时间采用的是 Duration = Samples / Samples_per_Frame * time_per_frame 这个公式对于 没有在第一桢后面用 header 记录信息的 CBR 来说,在文件没下载完整之前取到的 Samples 是错误的,于是也就没有办法获得时长

3.当然如果能对 CBR 编码的 mp3 取到 比特率(Bitrate),根据 http header 里面提供的文件大小也是能算出音频时长的,但是各种找资料,还是不知道 mpg123 该如何取得 比特率

由于对音频文件的知识十分有限(都是现学的 ~~o(>_<)o ~~) ,所以也不知道上边的理解对不对 主要是实在找不到思路了 所以拿出来给大家看看,看还能不能再抢救一下,没有要做伸手党的意思哈~

PS: 不知道有人发现没,通过 gem 安装的 audite 好像是有点小问题的,不过 github 上边的源码是 ok 的,也不知是不是我打开的方式不对 ~

等回复的时间,我还是去研究下虾米的手机版吧,看看它是怎么处理的,阿门

共收到 3 条回复

已解决 犯2了 太依赖插件了 根本不需要的说。。。

你如何解决的,请分享下

#2楼 @leotao841024 CBR 的 比特率 固定,取单位时长的文件大小对比完整文件大小来推算的完整时长。从结果来看,基本上是正确的,虽然我觉得它有可能会有 ±1s 的误差(取整的时候)

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册