2012-10-23 53 views
2

我一直在尝试使用InputStream从位于原始文件夹中的wav文件的字节中读取缓冲区。从“原始”文件夹中的资源wav文件获取输入数据

我想我不明白的是如何给文件的正确位置。 的wav文件在R资源是一个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

http://developer.android.com/guide/topics/resources/accessing-resources.html。通过这个链接。 – Raghunandan

+0

在将其粘贴为问题之前,请先格式化您的代码。谢谢 –

回答

0

在您的活动类

Context c; 
c=this; 
new yourClass(c); 

在你的类

public yourclass(Context context) 
{ 

InputStream in = context.getResources().openRawResource(R.raw.yourfilename); 
} 
+0

我试过了,但现在我有一个错误...“方法getResources()未定义类型Wav_File_Reader” - – user1768360

+0

getResouces是Context的方法。所以你需要使用上下文。你是在一个活动课还是在外面调用这个方法? – Raghunandan

+0

我正在从活动调用一个类,并且活动使用线程 – user1768360

0

好,InputStream的实施罢工,从开始的眼睛,它改成这样:

InputStream is = this.getResources().openRawResource(R.raw.music); 
+0

我试过了,但现在我有一个错误...“的方法getResources()是未定义的类型Wav_File_Reader” – user1768360

+0

好,在这种情况下'this'是为'Context'类型,所以尝试将其更改为: 'InputStream is = getBaseContext()。getResources()。openRawResource(R.raw.music);'如果您在某个Activity-class – user1049280

+0

内部调用它,getBaseContext()也是未定义的。 – user1768360

1

好,什么我做的是:

在线程

new Wav_File_Reader(); 

final Context con; 
    con=this; 

2-调用类:

1在活动添加此线程开始之前。 。 。

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为快速和有用的帮助!

相关问题