NDK支持在android中的缓冲区中解码mp3到wav

时间:2014-07-12 17:10:05

标签: java android android-ndk mp3 decoding

我正在创建一个应用程序,我需要解码一个mp3,执行一些过滤,然后使用AudioTrack播放它。现在我正在使用Jlayer。我的代码看起来像这样:

private void writeintoBuffer(){

    Decoder decoder= new Decoder();
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    while(playing){
        try {
            os.reset();
            Header frameHeader = bitStream.readFrame();
            if (frameHeader == null) {
                playing=false;
            }

        //Jlayer stuff
            SampleBuffer output = (SampleBuffer) decoder.decodeFrame(frameHeader, bitStream);
            bitStream.closeFrame();
            short[] pcm =output.getBuffer(); 
            for (short s : pcm) {
                os.write(s & 0xff);
                os.write((s >> 8 ) & 0xff);
            }
            byte[] Buffer=os.toByteArray();
            if(Filter){
                //apply filter
                Buffer=Tools.Filter(Buffer);
            }
            AudioInputBuffer.write(Buffer, 0, Buffer.length);//writing into buffer  
        } 
        catch (Exception E){
            E.printStackTrace();
        }
    }*

AudioInputBuffer是AudioTrack变量.Bitstream先前已初始化

不幸的是,JLayer非常慢,这真的导致我的应用程序现在滞后。我希望得到NDK的帮助,根据this article,它比Pure Java快20倍左右。我查看了NDK的音频项目样本,我必须承认,我的C不是很好。难道我无法用NDK做什么,Jlayer为我做了什么:我传递了一些mp3文件,它为我解码并将它交还给我准备运行我的进程然后提交到缓冲区?代码将更受赞赏!

0 个答案:

没有答案