Java 从“中”的资源wav文件获取输入数据;生的;文件夹
我一直在尝试使用Java 从“中”的资源wav文件获取输入数据;生的;文件夹,java,android,input,io,Java,Android,Input,Io,我一直在尝试使用InputStream从原始文件夹中的wav文件的字节中读取缓冲区 我想我不明白的是如何给出文件的正确位置。 R资源中的wav文件是一个int,因此我不能只执行以下操作: InputStream is = new FileInputStream(R.raw.music); 因为FileInputStream未确认int 基本上,我的代码是我发现的东西的修改版本: public void read(short[] musicin) { try { // C
InputStream
从原始文件夹中的wav
文件的字节中读取缓冲区
我想我不明白的是如何给出文件的正确位置。
R资源中的wav
文件是一个int,因此我不能只执行以下操作:
InputStream is = new FileInputStream(R.raw.music);
因为FileInputStream
未确认int
基本上,我的代码是我发现的东西的修改版本:
public void read(short[] musicin) {
try {
// Create a DataInputStream to read the audio data back from the saved file.
InputStream is = new FileInputStream("R.raw.music");
BufferedInputStream bis = new BufferedInputStream(is);
DataInputStream dis = new DataInputStream(bis);
int buffsize=512;
// Read the file into the music array.
int i = 0;
while (i<buffsize&&dis.available() > 0) {
musicin[i] = dis.readByte();
i++;
}
// Close the input streams.
dis.close();
} catch (Throwable t) {
Log.e("AudioTrack","Playback Failed");
}
}
公共无效读取(短[]音乐){
试一试{
//创建DataInputStream以从保存的文件读回音频数据。
InputStream is=新文件InputStream(“R.raw.music”);
BufferedInputStream bis=新的BufferedInputStream(is);
DataInputStream dis=新的DataInputStream(bis);
int buffsize=512;
//将文件读入音乐阵列。
int i=0;
而(i 0){
muscin[i]=dis.readByte();
i++;
}
//关闭输入流。
dis.close();
}捕获(可丢弃的t){
Log.e(“音轨”,“播放失败”);
}
}
那么我怎样才能从原始文件夹中读取呢?在活动类中
Context c;
c=this;
new yourClass(c);
在你们班
public yourclass(Context context)
{
InputStream in = context.getResources().openRawResource(R.raw.yourfilename);
}
那么,InputStream实现从一开始就引人注目,将其更改为:
InputStream is = this.getResources().openRawResource(R.raw.music);
我所做的是:
1-在线程启动之前将其添加到活动中:
final Context con;
con=this;
2-在线程中调用类
new Wav_File_Reader();
。
.
2-将我的类修改为静态:
public static void read(short[] musicin, Context ctx ) {
try {
// InputStream is = getBaseContext().getResources().openRawResource(R.raw.music);
InputStream is = ctx.getResources().openRawResource(R.raw.music);
BufferedInputStream bis = new BufferedInputStream(is);
DataInputStream dis = new DataInputStream(bis);
int buffsize=512;
// Read the file into the music array.
int i = 0;
short in[]=new short[200000];
//while (dis.available() > 0) {
//while (i<buffsize&&dis.available() > 0) {
while (i<200000&&dis.available() > 0) {
//musicin[i] = dis.readByte();
//in[i]=dis.readByte();
in[i]=dis.readShort();
i++;
}
// Close the input streams.
dis.close();
} catch (Throwable t)
{
Log.e("AudioTrack","Playback Failed");
}
}
publicstaticvoidread(short[]musicin,Context-ctx){
试一试{
//InputStream is=getBaseContext().getResources().openRawResource(R.raw.music);
InputStream is=ctx.getResources().openRawResource(R.raw.music);
BufferedInputStream bis=新的BufferedInputStream(is);
DataInputStream dis=新的DataInputStream(bis);
int buffsize=512;
//将文件读入音乐阵列。
int i=0;
空头[]=新空头[200000];
//而(dis.available()>0){
//而(i 0){
而(i 0){
//muscin[i]=dis.readByte();
//in[i]=dis.readByte();
in[i]=dis.readShort();
i++;
}
//关闭输入流。
dis.close();
}捕获(可丢弃的t)
{
Log.e(“音轨”,“播放失败”);
}
}
我可以直接从R.raw文件夹中读取
Thabks获得快速且有用的帮助!!!。请浏览此链接。请在将代码粘贴为问题之前格式化代码。谢谢我尝试过,但现在我有一个错误…“类型Wav\u文件\u读取器的方法getResources()未定义”在本例中,
此
用于上下文
类型,因此请尝试将其更改为:InputStream is=getBaseContext().getResources().openRawResource(R.raw.music);
如果在某个活动中调用它-classgetBaseContext()也未定义。那么,您需要从Activity传递上下文。如果您已经这样做了,并且我能够使这件事正常工作,非常感谢您的帮助。我尝试了它,但现在出现了一个错误…”类型Wav_File_Reader的方法getResources()未定义–GetResources是上下文的一个方法。因此您需要使用上下文。您是在活动类中调用此方法还是在活动外部调用此方法?我正在从活动调用一个类,活动使用一个线程,然后将活动上下文传递给该类。谢谢,但因为我在线程内部调用函数,所以我无法使用“this”
public static void read(short[] musicin, Context ctx ) {
try {
// InputStream is = getBaseContext().getResources().openRawResource(R.raw.music);
InputStream is = ctx.getResources().openRawResource(R.raw.music);
BufferedInputStream bis = new BufferedInputStream(is);
DataInputStream dis = new DataInputStream(bis);
int buffsize=512;
// Read the file into the music array.
int i = 0;
short in[]=new short[200000];
//while (dis.available() > 0) {
//while (i<buffsize&&dis.available() > 0) {
while (i<200000&&dis.available() > 0) {
//musicin[i] = dis.readByte();
//in[i]=dis.readByte();
in[i]=dis.readShort();
i++;
}
// Close the input streams.
dis.close();
} catch (Throwable t)
{
Log.e("AudioTrack","Playback Failed");
}
}