Аудио Java не воспроизводит WAV-файл в LinuxJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Аудио Java не воспроизводит WAV-файл в Linux

Сообщение Anonymous »

У меня возникли проблемы с использованием звука Java в Linux. Это OpenJDK 8 в Ubuntu 14.04. Следующий пример не работает с файлом .wav по этой ссылке:

Код: Выделить всё

import java.net.URL;
import javax.sound.sampled.*;

public class PlaySound {

public void play() throws Exception
{
// List all mixers and default mixer
System.out.println("All mixers:");
for (Mixer.Info m : AudioSystem.getMixerInfo())
{
System.out.println("    " + m);
}

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

URL url = getClass().getResource("drop.wav");
Clip clip;

AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(url);
clip = AudioSystem.getClip();
System.out.println("Clip format: " + clip.getFormat());
clip.open(audioInputStream);

clip.start();
do { Thread.sleep(100); } while (clip.isRunning());
}

public static void main(String [] args) throws Exception {
(new PlaySound()).play();
}
}
Вот результат:

Код: Выделить всё

All mixers:
PulseAudio Mixer, version 0.02
default [default], version 4.4.0-31-generic
Intel [plughw:0,0], version 4.4.0-31-generic
Intel [plughw:0,2], version 4.4.0-31-generic
NVidia [plughw:1,3], version 4.4.0-31-generic
NVidia [plughw:1,7], version 4.4.0-31-generic
NVidia [plughw:1,8], version 4.4.0-31-generic
NVidia [plughw:1,9], version 4.4.0-31-generic
Port Intel [hw:0], version 4.4.0-31-generic
Port NVidia [hw:1], version 4.4.0-31-generic
Default mixer: default [default], version 4.4.0-31-generic
Clip format: PCM_SIGNED unknown sample rate, 16 bit, stereo, 4 bytes/frame, big-endian
Exception in thread "main" java.lang.IllegalArgumentException: Invalid format
at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.createStream(PulseAudioDataLine.java:142)
at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:99)
at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:283)
at org.classpath.icedtea.pulseaudio.PulseAudioClip.open(PulseAudioClip.java:402)
at org.classpath.icedtea.pulseaudio.PulseAudioClip.open(PulseAudioClip.java:453)
at PlaySound.play(PlaySound.java:22)
at PlaySound.main(PlaySound.java:29)
Видимо проблема в том, что выбран микшер PulseAudio, и он по какой-то причине не может воспроизвести файл .wav.

Если я заменю вызов AudioSystem.getClip() на AudioSystem.getClip(null), который выбирает микшер по умолчанию, то это сработает.

Как убедиться, что совместимый микшер выбран?



Обновление: Следуя предложению @Dave, нужно просмотреть доступные микшеров, пока не найду тот, который имеет «совместимый» формат, я вижу следующее:

Целевой формат (из AudioInputStream.getFormat()):< /p>

Код: Выделить всё

PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian
Я перебираю все микшеры, исходные строки для каждого микшера и поддерживаемые форматы для каждой исходной строки и получаю следующее совпадение:

Код: Выделить всё

Mixer: PulseAudio Mixer, version 0.02
Source line: interface SourceDataLine supporting 42 audio formats, and buffers of 0 to 1000000 bytes
Format matches: PCM_SIGNED unknown sample rate, 16 bit, stereo, 4 bytes/frame, little-endian
Я да получаю совпадение (с помощью format.matches()), но все равно получаю исключение «Неверный формат». Возможно, потому, что в совпадающем формате указано «Неизвестная частота дискретизации», а затем, когда я пытаюсь открыть клип, он обнаруживает, что на самом деле он не поддерживает 44100 Гц?

Подробнее здесь: https://stackoverflow.com/questions/461 ... e-in-linux
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»