Единственный способ, которым я могу видеть это, только возвращая второй (ие) 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);
}
Кроме того, гарантирует, что вы перехватываете и регистрируете свои ошибки в случае, если что-то выбрасывается . В моем тестовом случае все работало нормально. Проверьте добавленный оператор журнала, который показывает размер файла до и после, также они гарантируют, что записано> = к этому значению.
Создание более многословного метода поможет найти проблему. Благодаря этому более многословно, как это, вы также сможете легче перейти к отладчику. Как только вы найдете источник проблемы, вы можете вернуться к более компактному способу, если хотите.