我一直在尝试使用wav
从原始文件夹中的InputStream
文件的字节读取缓冲区。
我认为我不明白的是如何给出文件的正确位置。
R资源中的wav
文件是一个int,所以我不能这样做:
InputStream is = new FileInputStream(R.raw.music);
因为int
未确认FileInputStream
。
基本上我的代码是我找到的东西的修改版本:
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");
}
}
那么如何从原始文件夹中读取?
答案 0 :(得分:1)
在您的活动课程中
Context c;
c=this;
new yourClass(c);
在你的班级
public yourclass(Context context)
{
InputStream in = context.getResources().openRawResource(R.raw.yourfilename);
}
答案 1 :(得分:1)
1-在线程开始之前在活动中添加它:
final Context con;
con=this;
2-在线程中调用类
new Wav_File_Reader();
。 。
Wav_File_Reader.read(musicin,con);
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");
}
}
我可以直接从R.raw文件夹中读取。
Thabks快速而有用的帮助!!!
答案 2 :(得分:0)
好吧,InputStream实现从一开始就瞄准了眼睛,将其改为:
InputStream is = this.getResources().openRawResource(R.raw.music);