【问题标题】:Android Java: decoding a mp3 file and passing data into a short[] array for analysisAndroid Java:解码 mp3 文件并将数据传递到 short[] 数组中进行分析
【发布时间】:2014-08-22 23:42:20
【问题描述】:

我正在做一个项目,我将直接从 mp3 文件中解码数据,并将获得的 pcm 数据存储到 sdcard 中的临时文件夹 temp.pcm 中以供以后分析。我在解码数据时遇到问题......

        //a short array to store raw pcm data
        short[] buffer = new short[bufferSize];

        ByteArrayOutputStream outStream = new ByteArrayOutputStream(1024);
        File filep = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/onenineoone.mp3");

        InputStream inputStream = new BufferedInputStream(new FileInputStream(filep), 8 * 1024);
        short[] pcm=null;

        try
        {
            Bitstream bitstream = new Bitstream(inputStream);
            boolean done = false;

            while (!done)
            {

                javazoom.jl.decoder.Header frameHeader = bitstream.readFrame();
                javazoom.jl.decoder.Decoder decoder = new javazoom.jl.decoder.Decoder;

                SampleBuffer output = (SampleBuffer) decoder.decodeFrame(frameHeader, bitstream);
                ****Log.i("decoder", "error in the samplebuffer??");****
                if (output.getSampleFrequency() != 44100 || output.getChannelCount() != 1) throw new DecoderException("Stereo or non-44100 sampling rate .mp3 not supported", null);
                    pcm = output.getBuffer();

                for (short s:pcm) {
                   outStream.write(s);
                 }
                buffer=pcm;
            }    
            done = true;
            bitstream.closeFrame();

        }   catch (BitstreamException e) {
            throw new IOException("Bitstream error: " + e);
        }   catch (DecoderException e) {
               Log.w("error is:", "Decoder error", e);
        }

**已解决
我将私有 javazoom.jl.decoder.Decoder 解码器声明为全局键,但似乎它不会进入 SampleBuffer 的错误是我必须将其声明为 javazoom.jl.decoder.Decoder decoder = new javazoom.jl .decoder.Decoder.

【问题讨论】:

    标签: android audio mp3 decoder jlayer


    【解决方案1】:

    在 File filep 上打开两次 InputStream 没有意义(对我来说)。在打开第二个流之前,您甚至没有关闭第一个流。请先修改该代码。

    【讨论】:

    • 好的,所以我删除了 InputStream 是;和周围的 try/catch 块。 SampleBuffer 代码的行仍未执行..
    • 您没有告诉您从哪里获得基本代码。请提供一些示例链接。这个网站上有几篇关于几乎相同问题的帖子。你知道他们打开输入流的方式不同吗:stackoverflow.com/questions/13959599/…
    • 我已经阅读了几乎所有相关的问题,似乎这是我的一个错误。我已经编辑了代码。抱歉:X,感谢您抽出宝贵时间!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多