Java linux no sound

How can I make my Java application with audio play nice in Linux?

I have a Java application whose UI relies heavily on audio. On Windows and OS X, everything works fine; on Linux, however, the application requires exclusive access to the sound device, a LineUnavailableException is thrown and no sound is heard. I’m using Kubuntu 9.10. This means that no other application can play audio while the program is running, and can’t even be holding an audio device when the program starts. This is naturally unacceptable. Here is the code I’m using to play audio:

AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file); Clip clip = AudioSystem.getClip(); clip.open(audioInputStream); clip.start(); this.wait((clip.getMicrosecondLength() / 1000) + 100); clip.stop(); 

5 Answers 5

I fear that audio in Linux is a lost cause itself. But in this case, it really is a known Java Bug. You should try to figure out what sound architecture you are using. I think the default for Ubuntu is PulseAudio/ALSA. I’m not not sure about Kubuntu though.

There is a known workaround (I never tried it myself though).

It’s also possible that some other applications you’re running is exclusively using the soundcard, so make sure to test with different applications (i.e. applications that play nicely with others).

I was able to play audio sound on GNU/Linux (Ubuntu 10.10) using the OpenJDK with some tweaks. I believe the the LineUnavailableException was a bug in PulseAudio and was fixed in 10.10.

I needed to specify the Format (something not needed on Windows).

AudioInputStream audioIn = AudioSystem.getAudioInputStream(in); // needed for working on GNU/Linux (openjdk) < AudioFormat format = audioIn.getFormat(); DataLine.Info info = new DataLine.Info(Clip.class, format); Clip clip = (Clip)AudioSystem.getLine(info); // >// on windows, < //Clip clip = AudioSystem.getClip(); // >

Be aware that the call to Clip.getMicrosecondLength() returns milliseconds.

Источник

x64 Java и звук

пример, логи, скрины? У тебя вроде >100 комментов на ЛОР-е, должен знать, что инфу с таких как ты выковыривать не надо.

Логи чего? Чем поможет скрин?

Апплеты выдает ошибку «the audio device is unaccessible now»

Нагуглил, что он ищет /dev/sdn и его как то надо перенаправить на pulse.

Читайте также:  Beginner linux command lines

Еще нужны 32х битные либы, тоже стоят.

Пробовал: http://b9m.blogspot.ru/2011/04/java-sun-java-160-ubuntu-1010.html и еще пару подобных вещей — не работает. Может просто, кто то имел опыт разруливания данной проблемы.

sudo update-alternatives --config java

У меня openjdk, мне надо было поковырять /etc/java-7-openjdk/sound.properties

sh4r4t4n ★ ( 24.10.13 20:09:03 MSK )
Последнее исправление: sh4r4t4n 24.10.13 20:11:56 MSK (всего исправлений: 1)

Есть только одна альтернатива в группе ссылок java: /usr/lib/jvm/java-8-oracle/jre/bin/java Настраивать нечего.

На предмет чего вы ковыряли конфиг?

 # OpenJDK on Ubuntu is configured to use PulseAudio by default #javax.sound.sampled.Clip=org.classpath.icedtea.pulseaudio.PulseAudioMixerProvider #javax.sound.sampled.Port=org.classpath.icedtea.pulseaudio.PulseAudioMixerProvider #javax.sound.sampled.SourceDataLine=org.classpath.icedtea.pulseaudio.PulseAudioMixerProvider #javax.sound.sampled.TargetDataLine=org.classpath.icedtea.pulseaudio.PulseAudioMixerProvider # PulseAudio not running? Please give feedback on LP: #407299. javax.sound.sampled.Clip=com.sun.media.sound.DirectAudioDeviceProvider javax.sound.sampled.Port=com.sun.media.sound.PortMixerProvider javax.sound.sampled.SourceDataLine=com.sun.media.sound.DirectAudioDeviceProvider javax.sound.sampled.TargetDataLine=com.sun.media.sound.DirectAudioDeviceProvider

Источник

Звук Java не работает под Linux

Я только что установил Fedora 12 и после загрузки и запуска Java Sound Demo я получаю исключения. Если я запускаю только обычную Java-программу, которая воспроизводит .wav файл, она работает беззвучно и без исключений.

Каждое другое приложение, кажется, воспроизводит звук. Я также взял несколько советов из этой ветки на форумах Ubuntu, которые, казалось, почти работали. (Установка aoss избавила от первоначальных исключений в звуковой демонстрации, но я все еще ничего не слышу, когда играю.)

Я разочарован отдельными обручами, которые мне нужно пройти, чтобы получить звук из моих динамиков при запуске приложений Java на платформах Linux!

Может кто-нибудь помочь мне понять, что не так?

3 ответа 3

Я нашел свой ответ. Из списка вещей, которые вы должны узнать в детском саду:

Если у вас в коробке есть вторая звуковая карта, например, та, которая изначально не работала с Linux и заставила вас начать использовать встроенную поддержку на материнской плате, то вы, вероятно, не поймете, что поддержка звука Java идет на звук карта, которую вы не используете. Это означает, что, несмотря на то, что все мои другие аудиозаписи шли на карту, которую я активировал с помощью микшера в системном трее, Java решила направить свое аудио на другую карту.

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

Читайте также:  Rockstar social club linux

Я не хлопаю Linux, Fedora или Java. Я просто пытаюсь понять, почему то, что должно быть простым, вызвало такое сложное исследование. Я понял это почти случайно, так как статья рассказала мне, что поддержка аудио Java может фактически выбрать другой драйвер для маршрутизации аудио.

Источник

No JAVA sound control when I’m using Linux?

I’m using the JAVA sound API and I’m trying to get some controls (at least the volume) on the mixers and lines but, it seems there are no control. Here is a part of the code I’m using :

 for (Mixer.Info mixerInfo : AudioSystem.getMixerInfo()) < //System.out.println("MixerInfo : "+mixerInfo.getName()); if (mixerInfo.getName().compareTo("PulseAudio Mixer")==0) < System.out.println("Java Sound Audio Engine : "+AudioSystem.getMixer(mixerInfo)); mixer=AudioSystem.getMixer(mixerInfo); System.out.println("\t Controls supported by Mixer:"); for(Control c : mixer.getControls()) < System.out.println("\t =>" + c); > System.out.println("\t TargetLine availabe for this mixer : "); for (Line.Info i : mixer.getTargetLineInfo()) < System.out.println("\t =>"+i); System.out.println("\t\t Controls supported by Target Line :"); try < for (Control c : AudioSystem.getLine(i).getControls()) < System.out.println("\t\t =>"+c); > > catch (LineUnavailableException e) < // TODO Auto-generated catch block e.printStackTrace(); >> System.out.println("--------------------------"); //break; > else < //System.out.println("Other Mixer : "+AudioSystem.getMixer(mixerInfo)); System.out.println("Other Sound Audio Engine : "+AudioSystem.getMixer(mixerInfo)); mixer2=AudioSystem.getMixer(mixerInfo); System.out.println("\t Controls supported by Mixer:"); for(Control c : mixer2.getControls()) < System.out.println("\t =>" + c); > System.out.println("\t TargetLine availabe for this mixer :"); for (Line.Info i : mixer2.getSourceLineInfo()) < System.out.println("\t =>"+i); System.out.println("\t\t Controls supported by Target Line :"); try < for (Control c : AudioSystem.getLine(i).getControls()) < System.out.println("\t\t =>"+c); > > catch (LineUnavailableException e) < // TODO Auto-generated catch block e.printStackTrace(); >> System.out.println("--------------------------"); > > 

And here is the result produced in the console : Java Sound Audio Engine : org.classpath.icedtea.pulseaudio.PulseAudioMixer@1404d1 Controls supported by Mixer: TargetLine availabe for this mixer : => interface TargetDataLine supporting 42 audio formats, and buffers of 0 to 1000000 bytes Controls supported by Target Line : Other Sound Audio Engine : com.sun.media.sound.DirectAudioDevice@13b8dae Controls supported by Mixer: TargetLine availabe for this mixer : => interface SourceDataLine supporting 512 audio formats, and buffers of at least 32 bytes Controls supported by Target Line : => interface Clip supporting 512 audio formats, and buffers of at least 32 bytes Controls supported by Target Line : Other Sound Audio Engine : com.sun.media.sound.DirectAudioDevice@1cad7c3 Controls supported by Mixer: TargetLine availabe for this mixer : => interface SourceDataLine supporting 24 audio formats, and buffers of at least 32 bytes Controls supported by Target Line : => interface Clip supporting 24 audio formats, and buffers of at least 32 bytes Controls supported by Target Line : Other Sound Audio Engine : com.sun.media.sound.DirectAudioDevice@1a9cf86 Controls supported by Mixer: TargetLine availabe for this mixer : => interface SourceDataLine supporting 24 audio formats, and buffers of at least 32 bytes Controls supported by Target Line : => interface Clip supporting 24 audio formats, and buffers of at least 32 bytes Controls supported by Target Line : Other Sound Audio Engine : com.sun.media.sound.PortMixer@17fd320 Controls supported by Mixer: TargetLine availabe for this mixer : => Mic Boost source port Controls supported by Target Line : => Capture source port Controls supported by Target Line : => Digital source port What can be the problem ? Note : I’m not on a Windows OS but on a Xubuntu (linux) OS. That’s why I don’t have a Java Sound Audio Engine but a PulseAudioMixer.

Читайте также:  Установка ноды на linux

Источник

Ubuntu 19.10 Eoan won’t play sound from my Java programs

Do find it amusing that the ‘run anywhere’ Java suffers from this problem, but I digress.

Did try a few things, listing available mixers and attempting to use those, but to no avail. It wasn’t easy to search for an error with no errors thrown.

So, I then tried JavaFX, as I’d heard it had audio playing facilities. This lead to a slightly better outcome, an error was thrown; Hooray! But the error wasn’t very descriptive; Rats!

Media testMp3 = new Media(new File("chime2.wav").toURI().toString()); MediaPlayer mediaPlayer = new MediaPlayer(testMp3); mediaPlayer.setAutoPlay(true); 
Caused by: MediaException: UNKNOWN : com.sun.media.jfxmedia.MediaException: Could not create player! : com.sun.media.jfxmedia.MediaException: Could not create player! at javafx.media/javafx.scene.media.MediaException.exceptionToMediaException(MediaException.java:146) at javafx.media/javafx.scene.media.MediaPlayer.init(MediaPlayer.java:518) at javafx.media/javafx.scene.media.MediaPlayer.(MediaPlayer.java:421) at sample.Controller.sayHelloWorld(Controller.java:20) . 59 more Caused by: com.sun.media.jfxmedia.MediaException: Could not create player! at javafx.media/com.sun.media.jfxmediaimpl.NativeMediaManager.getPlayer(NativeMediaManager.java:295) at javafx.media/com.sun.media.jfxmedia.MediaManager.getPlayer(MediaManager.java:118) at javafx.media/javafx.scene.media.MediaPlayer.init(MediaPlayer.java:474) . 61 more 

Again, searched online but could only find threads from 2015 or so about how this is fixed in Java 9 (I’m running Java 11), and about installing libavcodec53, which I couldn’t find much info on.

Things I’ve tried:

  • Changing Java (and JavaFX version) from 14 to 11 LTS
  • apt-get install ffmpeg
  • apt-get install ubuntu-restricted-extras
  • Installing VLC, and re-exporting the WAV file using VLC

Is there something else I need to install to get Java playing my audio?

Источник

Оцените статью
Adblock
detector