воспроизвести необработанный байт PCM из файла wav

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

        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, я обнаружил, что они не выводят тот же звук. Может ли кто-нибудь помочь мне с этим вопросом? Заранее спасибо!


person Junfei Wang    schedule 14.04.2013    source источник


Ответы (1)


Вы должны искать фактические аудиоданные в файле, чтобы получить образец аудио, см. http://en.wikipedia.org/wiki/WAV или https://ccrma.stanford.edu/courses/422/projects/WaveFormat/.

Одна секунда 16-битного моно при 8 кГц будет 8000 * 2 * 1 байт = 16000 байт.

person Musa    schedule 14.04.2013