【发布时间】:2012-03-13 05:40:42
【问题描述】:
private double [] readFile (InputStream _input) throws IOException {
DataInputStream audioInput = new DataInputStream (new BufferedInputStream (_input));
int musicLength = (int)(audioInput.available()/2.0);
double [] music = new double [musicLength];
int i = 0;
while (i < audioInput.available() && i < musicLength) {
music[i] = (double)audioInput.readShort();
i++;
}
audioInput.close();
return music;
}
此代码是我正在进行的一个更大项目的一部分,该项目涉及比较两个音频信号的 DSP 技术。这段代码应该返回一个包含音频文件中原始数据的双 [](InputStream _input 是一个参数,表示调用 getResources().openRawResource(R.raw.audio_file) 的结果,并且不为空)。但是,当我运行代码时,我得到一个空指针异常。堆栈跟踪的相关部分如下:
03-12 22:24:57.818: W/System.err(8931): java.lang.NullPointerException
03-12 22:24:57.818: W/System.err(8931): at android.content.res.AssetManager.getAssetRemainingLength(Native Method)
03-12 22:24:57.818: W/System.err(8931): at android.content.res.AssetManager.access$300(AssetManager.java:36)
03-12 22:24:57.818: W/System.err(8931): at android.content.res.AssetManager$AssetInputStream.available(AssetManager.java:552)
03-12 22:24:57.818: W/System.err(8931): at com.ashwin.iSleep.AudioRecorder.readFile(AudioRecorder.java:88)
根据堆栈跟踪,确切的错误在于调用audioInput.available()。据我所知,问题在于本机方法AssetManager.getAssetRemainingLength()。任何帮助表示赞赏!
【问题讨论】:
-
PL.检查你从哪里调用这个函数。如果你得到空指针,不要调用这个函数......
标签: android audio nullpointerexception signal-processing inputstream