UnsupportedAudioFileException для стерео, но не для двухканального звука

Я работаю над базовой обработкой звука на Java, используя AudioInputStream. Моя программа может правильно загружать 16-битный целочисленный звук PCM, закодированный двумя дорожками, но не стерео. При представлении файла, который (согласно ffprobe)

Input #0, wav, from XXX:
  Duration: 00:00:02.80, bitrate: 1411 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s

Все в порядке. Однако при предъявлении

  Duration: 01:19:15.58, bitrate: 1536 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s16, 1536 kb/s

(это файл, который я действительно хочу отредактировать), он терпит неудачу с

Exception in thread "main" javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file
    at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)

Кодирование такое же, и маловероятно, что разница в частоте дискретизации вызовет проблему. Похоже, что это исключение вызвано стереофоническим и 2-канальным каналом, но стерео должно быть двухканальным, не так ли?

Я могу воспроизвести эту проблему с помощью

AudioSystem.getAudioInputStream(new File("file under test"));
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете построить соответствующий AudioFormat вручную и проверить его с помощью isFormatSupported (аудиоформат)

Поддержка 44100 является стандартной в Java, но 48000 более случайна и зависит от ОС компьютера, на котором выполняется код. См. 6.3 Аудио форматы

Audacity хорошо работает как инструмент для преобразования аудиоресурсов, если вы не хотите возиться со сложностями кодирования.

Другие вопросы по теме