我想比较两个音频文件,为此我使用库乐谱。但是我得到了一个错误"WaveHeader:只支持bitsPerSample 8或16“
代码:
String root = getExternalFilesDir(null).toString();
Log.i(TAG, root);
String bell1 = "bell1.wav";
String bell2 = "DOORBELL-3_SPLITTED.wav";
String fullPath1 = root + File.separator + bell1;
String fullPath2 = root + File.separator + bell2;
Log.i(TAG, "Full Path 1: " + fullPath1);
Log.i(TAG, "Full Path 2: " + fullPath2);
File f = new File(fullPath2);
Log.i(TAG, "" + f.canRead());
Wave b1 = new Wave(fullPath1);
Wave b2 = new Wave(fullPath2);我就会跟着错误走。
StackTrace:
11-25 00:17:08.597: I/MainActivity(26472): /storage/sdcard0/Android/data/com.musicg.demo.android/files
11-25 00:17:08.597: I/MainActivity(26472): Full Path 1: /storage/sdcard0/Android/data/com.musicg.demo.android/files/bell1.wav
11-25 00:17:08.597: I/MainActivity(26472): Full Path 2: /storage/sdcard0/Android/data/com.musicg.demo.android/files/DOORBELL-3_SPLITTED.wav
11-25 00:17:08.597: I/MainActivity(26472): true
11-25 00:17:08.602: W/System.err(26472): WaveHeader: only supports bitsPerSample 8 or 16
11-25 00:17:08.602: W/System.err(26472): Invalid Wave Header
11-25 00:17:08.602: I/MainActivity(26472): Length : 0.25
11-25 00:17:08.602: I/MainActivity(26472): Size : 48001
11-25 00:17:08.602: I/MainActivity(26472): Length : NaN
11-25 00:17:08.602: D/AndroidRuntime(26472): Shutting down VM
11-25 00:17:08.602: W/dalvikvm(26472): threadid=1: thread exiting with uncaught exception (group=0x41e542a0)
11-25 00:17:08.612: E/AndroidRuntime(26472): FATAL EXCEPTION: main
11-25 00:17:08.612: E/AndroidRuntime(26472): java.lang.NullPointerException
11-25 00:17:08.612: E/AndroidRuntime(26472): at com.musicg.wave.Wave.size(Wave.java:255)
11-25 00:17:08.612: E/AndroidRuntime(26472): at com.musicg.demo.android.MainActivity$ClickEvent.onClick(MainActivity.java:139)
11-25 00:17:08.612: E/AndroidRuntime(26472): at android.view.View.performClick(View.java:4261)
11-25 00:17:08.612: E/AndroidRuntime(26472): at android.view.View$PerformClick.run(View.java:17356)
11-25 00:17:08.612: E/AndroidRuntime(26472): at android.os.Handler.handleCallback(Handler.java:615)
11-25 00:17:08.612: E/AndroidRuntime(26472): at android.os.Handler.dispatchMessage(Handler.java:92)
11-25 00:17:08.612: E/AndroidRuntime(26472): at android.os.Looper.loop(Looper.java:137)
11-25 00:17:08.612: E/AndroidRuntime(26472): at android.app.ActivityThread.main(ActivityThread.java:4921)
11-25 00:17:08.612: E/AndroidRuntime(26472): at java.lang.reflect.Method.invokeNative(Native Method)
11-25 00:17:08.612: E/AndroidRuntime(26472): at java.lang.reflect.Method.invoke(Method.java:511)
11-25 00:17:08.612: E/AndroidRuntime(26472): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
11-25 00:17:08.612: E/AndroidRuntime(26472): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
11-25 00:17:08.612: E/AndroidRuntime(26472): at dalvik.system.NativeStart.main(Native Method)发布于 2022-11-20 09:49:50
musicg库的作者创建的代码要求您了解抛出的异常中的消息通知您的内容:
"WaveHeader:只支持bitsPerSample 8或16"
如果您不想更改ready中功能的实现,那么与WAV版本相比,转换WAV文件就足够了,WAV版本的采样数为8或16位。
您可以使用它这个在线转换器:https://www.3cx.com/docs/converting-wav-file/
第二种方法依赖于修改库代码--您应该添加额外的函数,它将检查正在添加的wav文件的当前采样。如果值为8或16位,则启动进程,如果不是,则调用替换该值的新方法。为此,您可以使用以下包:
https://github.com/JorenSix/TarsosDSP/blob/master/src/core/be/tarsos/dsp/writer/WaveHeader.java
特别是查看WaveHeader类。
该类表示波形格式音频文件的头,该文件通常有.wav后缀。包含以下整数值字段:
格式-通常是PCM,ALAW或ULAW。
numChannels -1为单声道,2为立体声。
sampleRate -通常为8000、11025、16000、22050或44100赫兹。
bitsPerSample -通常用于PCM 16,ALAW 8或ULAW 8。
numBytes -此标头后的音频数据的大小(以字节为单位)。
https://stackoverflow.com/questions/20179888
复制相似问题