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");
    }
    }