-1

1つの音声ファイルのbitRate、sampleRate、channelCountを取得したい

私はコードを使用します

@SuppressLint("NewApi")
    public void  GetSampleRate(String path)
    {
        MediaExtractor mex = new MediaExtractor();
        try {
            mex.setDataSource(new File(path).getAbsolutePath());// the adresss location of the sound on sdcard.
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        MediaFormat mf = mex.getTrackFormat(0);

          bitRate = mf.getInteger(MediaFormat.KEY_BIT_RATE);
          sampleRate = mf.getInteger(MediaFormat.KEY_SAMPLE_RATE);
          channelCount = mf.getInteger(MediaFormat.KEY_CHANNEL_COUNT);

    }

しかし、コンパイラがこの行に来ると

mex.setDataSource(new File(path).getAbsolutePath());

logcat は 1 つのエラーを表示します

10-13 12:57:52.772: E/WVMExtractor(9554): Failed to open libwvm.so: dlopen failed: library "libwvm.so" not found

そして、bitRate、sampleRate、channelCountを取得しようとすると、このエラーが発生します。

java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
4

1 に答える 1

1

libwvm.so を開くことができませんでした: dlopen に失敗しました: ライブラリ "libwvm.so" が見つかりません

コードを実行しているデバイスにそのライブラリがないことを意味します。の独自のバージョンをコンパイルして取り込むことができますlibwvm.so。例外がスローされるmex.getTrackFormat(0);と、null 参照が返され、mf.getInteger(アプリが でクラッシュしNPEます。クラッシュを回避するには、例外のスタックトレースを出力した後に戻ることができます。例えば

    catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return;
    }
于 2015-10-13T07:45:26.937 に答える