-1

我想获取一个音频文件的比特率、采样率、通道数

我使用代码

@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 显示一个错误

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);将返回空引用mf.getInteger(并使您的应用程序崩溃NPE。为避免崩溃,您可以在打印异常的堆栈跟踪后返回。例如

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