2013-04-14 1 views
1

У меня есть wav-файл, который был закодирован с 16-битным PCM, я хочу преобразовать его в короткий массив PCM и воспроизвести необработанный массив с классом audiotrack. Это то, что я сделал:играть в исходный байт PCM из wav-файла

 String fileName = "test.wav"; 
     File f = new File(baseDir + File.separator + fileName); 
     InputStream is = null; 
     try { 
      is = new FileInputStream  (f); 
     } catch (FileNotFoundException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
      BufferedInputStream  bis = new BufferedInputStream (is, 8000); 
      DataInputStream   dis = new DataInputStream  (bis);  // Create a DataInputStream to read the audio data from the saved file 
      short[] music = new short[(int) f.length()]; 
      int i = 0;               // Read the file into the "music" array 
      try { 
       while (dis.available() > 0) 
       { 
        music[i] = dis.readShort();          // This assignment does not reverse the order 
        i++; 
       } 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      Log.i("123",""+Arrays.toString(music)); 

      try { 
       dis.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      }   

      at=new AudioTrack(AudioManager.STREAM_MUSIC, 8000, AudioFormat.CHANNEL_OUT_MONO, 
        AudioFormat.ENCODING_PCM_16BIT, 8000 /* 1 second buffer */, 
        AudioTrack.MODE_STREAM); 
      at.write(music, 0, (int)f.length()); 
      at.play(); 

Массив может быть воспроизведен, но проблема в том, что когда я сравниваю его с воспроизведением оригинального файла WAV, я обнаружил, что они не выдают один и тот же звук. Может ли кто-нибудь помочь мне в этом вопросе? Заранее спасибо!

ответ