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 для сравнения двух аудиосигналов. Предполагается, что этот код возвращает значение double [], содержащее необработанные данные в аудиофайле (InputStream _input - это параметр, который представляет результат вызова getResources().openRawResource(R.raw.audio_file)
и НЕ является нулевым). Однако когда я запускаю код, я получаю исключение Null Pointer. Соответствующая часть трассировки стека выглядит следующим образом:
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()
. Любая помощь приветствуется!