开发者社区> 问答> 正文

MP3编程 解码播放:报错

这个xing库 是好像是MP3解码用的。
我将一个MP3文件打开后,每次读取1024*3字节到一个数组(在概就是一帧帧的读吧),然后进行解码,放到一个输出缓冲区中,用于播放(播放我是用了另一个叫BASS的库来实现的),这个过程我是用一个线程回调函数来完成的,但是一个4M多的MP3文件好像有1万多帧,所以在播放的时候,CPU占用很高,接近来100%。这样子显然不行,谁有什么好方法,或者例子发给我参考学习下 邮箱:7 3 5 8 3 8 9 5 6@ q q . c o m

展开
收起
kun坤 2020-06-06 23:55:41 540 0
1 条回答
写回答
取消 提交回答
  • 引用来自“chentian08”的答案

    引用来自“中山野鬼”的答案

    引用来自“Jack.arain”的答案

    MP3一般是1152个采样为一帧来编码的,知道采样率,声道,很容易计算出1秒多少帧。一般音频播放缓冲搞个1秒左右就够了。
    单纯解码mp3也可以试试
      mpg123。。。
    貌似楼主这些概念还没有。哈。我到现在还不清楚,为什么他是做解码,而从数据流中取了 1024 * 24bits。

    刚接接触这方面的知识,确实不太了解,你有这方面的学习资料或例子什么的,能不能发点给我或者加我QQ:735838956@qq.com。其实我的目的就是,想做个拥有MP3播放器功能的东西,然后又跟网络有点关系,想实现的功能主要有:本地MP3文件的播放,这个有很多方法,但是具体怎么实现,我真的想知道,我就是想在发送数据的时候,同时把它播放出来,结果就出现了上面提到的问题了;

    发送MP3文件,这个应该就是先读取一个大小,再发送;

    接收MP3数据,然后播放,这个应该就是接受到数据后,解码播放;

    我 00年搞AC3 DSP算法优化时,碰过音频,后来就没碰了。你要看资料,先看标准吧。标准理解清楚还是必要的。如果标准中很多俗语或名词搞不清楚,那你还需要补充知识。
    ######回调函数用用还是应该的。应该是回调机制没处理好。需要有定时器。指定时间间隔,处理,填BUF。另一种可能,源码有BUG,如果源码没问题,不会占用那么高的CPU。音频解码占用的计算资源很少的。
    ######

    引用来自“中山野鬼”的答案

    回调函数用用还是应该的。应该是回调机制没处理好。需要有定时器。指定时间间隔,处理,填BUF。另一种可能,源码有BUG,如果源码没问题,不会占用那么高的CPU。音频解码占用的计算资源很少的。
    如果是你,你会怎么做,因为这些音频数据还要通过网络发出,除了一帧帧地读,我想不出其它办法,刚接触音频开发,请指点。
    ######

    引用来自“chentian08”的答案

    引用来自“中山野鬼”的答案

    回调函数用用还是应该的。应该是回调机制没处理好。需要有定时器。指定时间间隔,处理,填BUF。另一种可能,源码有BUG,如果源码没问题,不会占用那么高的CPU。音频解码占用的计算资源很少的。
    如果是你,你会怎么做,因为这些音频数据还要通过网络发出,除了一帧帧地读,我想不出其它办法,刚接触音频开发,请指点。

    应该是网络接入吧。如果是网络发送自然是编码后数据,不会是PCM数据。不过从你的描述很奇怪。只有PCM数据才需要 24bits,1024作为一个block,已备频域处理。

    如果是我做,至少开1s的解码BUF。无非是采样率最多X4个bytes。你觉得大吗?哈。

    ######

    引用来自“中山野鬼”的答案

    引用来自“chentian08”的答案

    引用来自“中山野鬼”的答案

    回调函数用用还是应该的。应该是回调机制没处理好。需要有定时器。指定时间间隔,处理,填BUF。另一种可能,源码有BUG,如果源码没问题,不会占用那么高的CPU。音频解码占用的计算资源很少的。
    如果是你,你会怎么做,因为这些音频数据还要通过网络发出,除了一帧帧地读,我想不出其它办法,刚接触音频开发,请指点。

    应该是网络接入吧。如果是网络发送自然是编码后数据,不会是PCM数据。不过从你的描述很奇怪。只有PCM数据才需要 24bits,1024作为一个block,已备频域处理。

    如果是我做,至少开1s的解码BUF。无非是采样率最多X4个bytes。你觉得大吗?哈。

    什么叫1s的解码BUF。1s是什么意思?
    ######

    引用来自“chentian08”的答案

    引用来自“中山野鬼”的答案

    引用来自“chentian08”的答案

    引用来自“中山野鬼”的答案

    回调函数用用还是应该的。应该是回调机制没处理好。需要有定时器。指定时间间隔,处理,填BUF。另一种可能,源码有BUG,如果源码没问题,不会占用那么高的CPU。音频解码占用的计算资源很少的。
    如果是你,你会怎么做,因为这些音频数据还要通过网络发出,除了一帧帧地读,我想不出其它办法,刚接触音频开发,请指点。

    应该是网络接入吧。如果是网络发送自然是编码后数据,不会是PCM数据。不过从你的描述很奇怪。只有PCM数据才需要 24bits,1024作为一个block,已备频域处理。

    如果是我做,至少开1s的解码BUF。无非是采样率最多X4个bytes。你觉得大吗?哈。

    什么叫1s的解码BUF。1s是什么意思?
    1s==1秒钟。后面我已经给出公式了。采样率 X 4 bytes。当然这是一个通道的容量。
    ###### MP3一般是1152个采样为一帧来编码的,知道采样率,声道,很容易计算出1秒多少帧。一般音频播放缓冲搞个1秒左右就够了。
    单纯解码mp3也可以试试
      mpg123。。。######

           99%是代码或者做法有bug. 这种任务量感觉非常的少. 应该被秒杀才对.  现在的CPU很霸气的.
    给逻辑的每一步加时间输出,  定位耗时点.

    ######

    引用来自“Jack.arain”的答案

    MP3一般是1152个采样为一帧来编码的,知道采样率,声道,很容易计算出1秒多少帧。一般音频播放缓冲搞个1秒左右就够了。
    单纯解码mp3也可以试试
      mpg123。。。
    貌似楼主这些概念还没有。哈。我到现在还不清楚,为什么他是做解码,而从数据流中取了 1024 * 24bits。
    ######

    引用来自“中山野鬼”的答案

    引用来自“Jack.arain”的答案

    MP3一般是1152个采样为一帧来编码的,知道采样率,声道,很容易计算出1秒多少帧。一般音频播放缓冲搞个1秒左右就够了。
    单纯解码mp3也可以试试
      mpg123。。。
    貌似楼主这些概念还没有。哈。我到现在还不清楚,为什么他是做解码,而从数据流中取了 1024 * 24bits。

    刚接接触这方面的知识,确实不太了解,你有这方面的学习资料或例子什么的,能不能发点给我或者加我QQ:735838956@qq.com。其实我的目的就是,想做个拥有MP3播放器功能的东西,然后又跟网络有点关系,想实现的功能主要有:本地MP3文件的播放,这个有很多方法,但是具体怎么实现,我真的想知道,我就是想在发送数据的时候,同时把它播放出来,结果就出现了上面提到的问题了;

    发送MP3文件,这个应该就是先读取一个大小,再发送;

    接收MP3数据,然后播放,这个应该就是接受到数据后,解码播放;

    2020-06-06 23:55:47
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载