2011-09-27 54 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