Почему этот метод не работает? - PullRequest
2 голосов
/ 10 мая 2011
public AudioInputStream append(AudioInputStream main, AudioInputStream s) throws UnsupportedAudioFileException, IOException {
    AudioSystem.write(new AudioInputStream(
             new SequenceInputStream(main, s),     
             main.getFormat(), 
             main.getFrameLength() + s.getFrameLength()), AudioFileFormat.Type.WAVE, new File("/home/nikkka/Desktop/alphabet/result_for_watch.wav"));
    return AudioSystem.getAudioInputStream(new File("/home/nikkka/Desktop/alphabet/result_for_watch.wav"));
}

Он должен добавлять аудиофайлы, но всегда возвращает последний файл, а не оба! ... В чем проблема? : S

1 Ответ

1 голос
/ 10 мая 2011

Единственный способ, которым я могу видеть это, только возвращая второй (ие) AudioInputStream, - это если в первом из них возникли проблемы с чтением. Я бы посоветовал сломать ваш метод. Здесь я немного расширил метод, чтобы добавить несколько операторов логирования и сделать его более подробным. Я не менял ничего функционального.

public AudioInputStream append(AudioInputStream main, AudioInputStream s)
            throws UnsupportedAudioFileException, IOException {

        SequenceInputStream sis = new SequenceInputStream(main, s);

        long length = main.getFrameLength() + s.getFrameLength();
        logger.debug(main.getFrameLength() + "+" + s.getFrameLength() + 
                    "=" + length);

        AudioFormat fmt = main.getFormat();

        File file = new File("c:/MyNew.wav"); //changed for testing

        AudioInputStream ais = new AudioInputStream(sis, fmt, length);
        int size = AudioSystem.write( ais, AudioFileFormat.Type.WAVE, file);
        logger.debug("Wrote :" + size);

        return AudioSystem.getAudioInputStream(file);
    }

Кроме того, гарантирует, что вы перехватываете и регистрируете свои ошибки в случае, если что-то выбрасывается . В моем тестовом случае все работало нормально. Проверьте добавленный оператор журнала, который показывает размер файла до и после, также они гарантируют, что записано> = к этому значению.

Создание более многословного метода поможет найти проблему. Благодаря этому более многословно, как это, вы также сможете легче перейти к отладчику. Как только вы найдете источник проблемы, вы можете вернуться к более компактному способу, если хотите.

...