Я пытаюсь создать 10-секундные фрагменты из аудиофайлов и в процессе преобразовать их в WAV. Я использую библиотеки javazoom vorbisspi и mp3spi. Он работает с файлами mp3 и WAV, но не с файлами .ogg.
Я попытался перечислить доступные целевые форматы для кодировки, которую я хочу (подписанный PCM), и, как ни странно, для файлов mp3 список доступных форматов пуст (хотя он работает), а список для файлов ogg отображает кодировку PCM, которую я хочу (хотя это не не работает). Однако воспроизведение файлов .ogg работает. Вот мой код:
AudioInputStream in = null;
AudioInputStream din = null;
AudioFileFormat fileFormat = null;
AudioFormat format = null;
fileFormat = AudioSystem.getAudioFileFormat(input);
in = AudioSystem.getAudioInputStream(input);
format = in.getFormat();
float frameRate = 44100;
int channels = format.getChannels();
AudioFormat targetFormat = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED,
frameRate,
16,
channels,
channels*2,
frameRate,
false
);
AudioFormat[] available = AudioSystem.getTargetFormats(
AudioFormat.Encoding.PCM_SIGNED, format);
System.out.println("------------------------------------");
System.out.println("Available for: " + format.toString());
for (AudioFormat e : available) {
System.out.println(e.toString());
}
if (AudioSystem.isConversionSupported(targetFormat, format)) {
din = AudioSystem.getAudioInputStream(targetFormat, in);
long frames = this.thumbNailLength * (long)frameRate;
AudioInputStream shortenedStream = new AudioInputStream(
din, targetFormat, frames);
AudioSystem.write(shortenedStream,
new AudioFileFormat.Type("WAVE", "wav"), outputFile);
}
else {
throw new IllegalArgumentException(
"Conversion to WAV from this format is not supported by the System.");
}
Вывод для файла .ogg:
[java] Available for: VORBISENC 44100.0 Hz, unknown bits per sample, stereo, unknown frame size, unknown frame rate,
[java] PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian
[java] PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, big-endian
Почему это работает не так, как ожидалось? У меня даже нет исключения, файл .wav создается, но не может воспроизводиться ни одним плеером.