Java воспроизводит аудио на Windows, но не на Ubuntu - PullRequest
1 голос
/ 30 апреля 2020

Я написал для забавы программу Java для воспроизведения некоторых мелодий в формате .wav.

Во время разработки звук воспроизводился нормально на моей машине Windows, но, тем не менее, при попытке выполнить то же самое код на Ubuntu аудио не проигрывается. Нет ошибок, зарегистрированных в консоли, я нажимаю кнопку «Воспроизвести», и ничего не происходит.

Вот код, который я использовал, также содержит некоторый код регистрации:

try {
    System.out.println("All mixers:");
    for (Mixer.Info m : AudioSystem.getMixerInfo()) {
        System.out.println(m.getName());
    }

    System.out.println("Default mixer: " + AudioSystem.getMixer(null).getMixerInfo());

    AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File("bsc.wav"));
    Clip clip = AudioSystem.getClip();
    clip.open(audioInputStream);
    clip.start();
} catch (UnsupportedAudioFileException ex) {
    ex.printStackTrace();
} catch (IOException ex) {
    ex.printStackTrace();
} catch (LineUnavailableException ex) {
    ex.printStackTrace();
}

Это выводит:

All mixers:
Port HDMI [hw:0]
Port PCH [hw:1]
Port Snowball [hw:2]
HDMI [plughw:0,3]
HDMI [plughw:0,7]
HDMI [plughw:0,8]
PCH [plughw:1,0]
PCH [plughw:1,1]
PCH [plughw:1,2]
Snowball [plughw:2,0]
Default mixer: HDMI [plughw:0,3], version 5.3.0-51-generic

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

Оглядываясь вокруг, слышал что-то о необходимости установки JMF, но не мог найти, действительно ли это решение.

Запуск Ubuntu 19.10 и Java 11.0.7 OpenJDK.

Edit1; нашел эту страницу в StackOverflow о Java Sound. Пробовал запускать пример кода, но тоже безрезультатно ...

1 Ответ

2 голосов
/ 30 апреля 2020

Вот пара вещей, которые нужно исследовать и (возможно) исключить.

  • Является ли ваша кнопка JavaFX? Если да, проверили ли вы, что JavaFX работает?
  • Вы проверили адрес создаваемого объекта File?
  • Попробуйте использовать URL в качестве AudioSystem.getAudioInputStream аргумент, установив его с помощью class.getResource (URL) .
  • Используйте ais , чтобы получить объект Dataline.Info как часть процесса.

Код для использования Dataline.Info следующий:

AudioInputStream ais = AudioSystem.getAudioInputStream(url);
DataLine.Info info = new DataLine.Info(Clip.class, ais.getFormat());
Clip clip = (Clip) AudioSystem.getLine(info);
clip.open(ais);

Вы можете проверить Clip в отладчике перед его воспроизведением. Проверьте свойство .audioData, чтобы убедиться, что данные были загружены в память. Вы также можете проверить формат аудио здесь.

Я только что прошел через ригамароле, пытаясь получить файл jar, созданный в Windows, для запуска в Ubuntu 18.04. Оказалось, что это связано с JavaFX. Как только я это исправил, программа запустилась (включая звук). Я всегда использую URL при работе с аудио активами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...