从“raw”文件夹中的资源wav文件获取输入数据

时间:2012-10-23 13:02:57

标签: java android input io

我一直在尝试使用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");
    }
}

那么如何从原始文件夹中读取?

3 个答案:

答案 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);