2011-09-27 47 views
0

我使用從這裏下載的Wave工具:http://www.labbookpages.co.uk/audio/javaWavFiles.html的Android資源diectory名字符串WavFile使用

要開始讀我的資源WAV文件/ raw目錄我已經做了在子類中的下列哪些擴展了我的主要活動。

WavFile wavFile = WavFile.openWavFile(new File(context.getResources().openRawResource(R.raw.xsp11_10db).toString())); 

凡上下文定義爲:

Context context; 

第一行返回一個空指針異常,因此它似乎類WaveFile(wavfile)的種類返回null。這讓質疑我定義文件字符串的方式:我知道這是爲了獲得資源wavfile「xsp11_10db」一個粗暴的方式

new File(context.getResources().openRawResource(R.raw.xsp11_10db).toString()); 

,但我不知道任何其他的方法來訪問文件。我嘗試過使用URI,但沒有找到目錄。

有誰知道從資源中讀取wave文件的更好方法,或者是什麼導致我的空指針異常。

任何幫助將不勝感激,謝謝你的先進。

回答

1

它看起來像你使用的Wav API不支持InputStream,只接受文件作爲輸入。這是可以理解的,因爲它們很可能使用RandomAccessFile來實現。

你可能認爲.openRawResource(...).toString()會給你文件名,但這是不正確的。它只會撥打.toString()InputStreamopenRawResource(...)返回。這不是你想要的。

解決方法是使用openRawResource()打開InputStream,然後將數據複製到SD卡上的新文件。然後將該文件用於您正在使用的Wav API。

+0

謝謝,我正在實施你的建議。但是,即使當我使用 'code'InputStream stream = new DataInputStream((context.getResources()。openRawResource(R.raw.xsp11_10db))); 看起來'code'context.getResources()。openRawResource(R.raw.xsp11_10db) 仍然返回null。當我擴展我的主要活動時,定義上下文的正確方法是什麼。或許上下文沒有鏈接到正確的上下文。 – digiphd