- Нет JAVA звука, когда я использую Linux?
- Звук Java не работает под Linux
- 3 ответа 3
- Java и звук: Jago Go client
- Re: Java и звук: Jago Go client
- Re: Java и звук: Jago Go client
- Re: Java и звук: Jago Go client
- Re: Java и звук: Jago Go client
- Re: Java и звук: Jago Go client
- Звук Java не работает под Linux
- Java: звук
Нет JAVA звука, когда я использую Linux?
Я использую API-интерфейс JAVA, и я пытаюсь получить некоторые элементы управления (по крайней мере, объем) на микшере и линиях, но, похоже, нет никакого контроля. Вот часть кода, который я использую:
И вот результат, созданный в консоли:
Java Sound Audio Engine: org.classpath.icedtea.pulseaudio.PulseAudioMixer@1404d1 Элементы управления, поддерживаемые Mixer:
TargetLine доступен для этого микшера:
=> интерфейс TargetDataLine поддерживает 42 аудиоформата и буферы от 0 до 1000000 байт
Элементы управления, поддерживаемые целевой линией:
Другой звук Звук Двигатель: com.sun.media.sound.DirectAudioDevice@13b8dae
Элементы управления, поддерживаемые Mixer:
TargetLine доступен для этого микшера:
=> интерфейс SourceDataLine, поддерживающий 512 аудиоформатов, и буферы не менее 32 байт
Элементы управления, поддерживаемые целевой линией:
=> интерфейс Clip поддерживает 512 аудиоформатов и буферов не менее 32 байт
Элементы управления, поддерживаемые целевой линией:
Другой звук Звук Двигатель: com.sun.media.sound.DirectAudioDevice@1cad7c3 Элементы управления, поддерживаемые Mixer:
TargetLine доступен для этого микшера:
=> интерфейс SourceDataLine, поддерживающий 24 аудиоформата, и буферы не менее 32 байт
Элементы управления, поддерживаемые целевой линией:
=> интерфейс Clip поддерживает 24 аудиоформата и буферы не менее 32 байт
Элементы управления, поддерживаемые целевой линией:
Другое Звуковое Звуковое Движение: com.sun.media.sound.DirectAudioDevice@1a9cf86
Элементы управления, поддерживаемые Mixer:
TargetLine доступен для этого микшера:
=> интерфейс SourceDataLine, поддерживающий 24 аудиоформата, и буферы не менее 32 байт
Элементы управления, поддерживаемые целевой линией:
=> интерфейс Clip поддерживает 24 аудиоформата и буферы не менее 32 байт
Элементы управления, поддерживаемые целевой линией:
Другой звук Звук Двигатель: com.sun.media.sound.PortMixer@17fd320 Элементы управления, поддерживаемые Mixer:
TargetLine доступен для этого микшера:
=> Порт источника Mic Boost
Элементы управления, поддерживаемые целевой линией:
=> Захват исходного порта
Элементы управления, поддерживаемые целевой линией:
=> Цифровой порт источника
Примечание. Я не на ОС Windows, а на ОС Xubuntu (Linux). Вот почему у меня нет Java Sound Audio Engine, но PulseAudioMixer.
То, что Андрей сказал в комментарии о поддержке различных линий, являющихся пятнистыми, — это то, что я также нашел правдой. И, кроме того, регулятор громкости, когда он присутствует, часто меньше идеального. Он может только изменять громкость при каждой загрузке буфера аудиоданных, поэтому быстрые изменения, как правило, вызывают большие перепады уровней между буферами, что, в свою очередь, вызывает клики или эффект застежки-молнии.
Я рекомендую писать собственные элементы управления. Существует хороший пример, который вы можете использовать в качестве начальной структуры в учебниках Java, раздел » Использование файлов и форматирование конверторов». Вот пример кода на короткий путь вниз под заголовком «Чтение звуковых файлов». Обратите внимание на комментарий:
В этот момент вы должны преобразовать байты в данные PCM, а затем умножить значения на коэффициент громкости (обычно с плавающей точкой в диапазоне от 0 до 1), а затем преобразовать обратно в байты для воспроизведения. Написав свой собственный, вы можете уменьшить размер буфера или придумать другие схемы для распространения изменения объема, чтобы он не был слишком резким. Кроме того, может быть выполнена функция, так что изменение от 0 до 1 будет более точно отображать воспринимаемый объем. Для всех этих шагов вы можете ознакомиться с предыдущими сообщениями в StackOverflow.
Я только что вспомнил последнюю часть раздела «Учебники Java» в разделе «Элементы управления». Там они упоминают вариант написания собственного. К сожалению, они не дают много примеров для этого.
Источник
Звук Java не работает под Linux
Я только что установил Fedora 12 и после загрузки и запуска Java Sound Demo я получаю исключения. Если я запускаю только обычную Java-программу, которая воспроизводит .wav файл, она работает беззвучно и без исключений.
Каждое другое приложение, кажется, воспроизводит звук. Я также взял несколько советов из этой ветки на форумах Ubuntu, которые, казалось, почти работали. (Установка aoss избавила от первоначальных исключений в звуковой демонстрации, но я все еще ничего не слышу, когда играю.)
Я разочарован отдельными обручами, которые мне нужно пройти, чтобы получить звук из моих динамиков при запуске приложений Java на платформах Linux!
Может кто-нибудь помочь мне понять, что не так?
3 ответа 3
Я нашел свой ответ. Из списка вещей, которые вы должны узнать в детском саду:
Если у вас в коробке есть вторая звуковая карта, например, та, которая изначально не работала с Linux и заставила вас начать использовать встроенную поддержку на материнской плате, то вы, вероятно, не поймете, что поддержка звука Java идет на звук карта, которую вы не используете. Это означает, что, несмотря на то, что все мои другие аудиозаписи шли на карту, которую я активировал с помощью микшера в системном трее, Java решила направить свое аудио на другую карту.
Так что на самом деле звук действительно играл счастливо. Я просто не слышал его, потому что он воспроизводился на карте Sound Blaster XFi, и мой динамик был подключен к аудиопорту материнской платы. Я извиняюсь, если выгляжу самодовольным, но я расстроен и не получаю большого удовольствия, особенно после того, как вижу, что за серьезную проблему может быть отказано, оставляя ответ на эту серьезную проблему скрытым для других, сталкивающихся с такими же проблемами.
Я не хлопаю Linux, Fedora или Java. Я просто пытаюсь понять, почему то, что должно быть простым, вызвало такое сложное исследование. Я понял это почти случайно, так как статья рассказала мне, что поддержка аудио Java может фактически выбрать другой драйвер для маршрутизации аудио.
Источник
Java и звук: Jago Go client
Пользуюсь Jago и под виндой, и в Линуксе, все замечательно — написано на Java, запускаю под Линуксом просто командой java -jar jago.jar, но под Линуксом звук не работает. Кто-нибудь может дать умный совет?
Re: Java и звук: Jago Go client
Если быть более точным, то ИНОГДА звук есть, но редко, а обычно его нет, и есть сообщение
javax.sound.sampled.LineUnavailableException: Audio Device Unavailable
понять когда это работает, а когда нет совершенно не могу.
Re: Java и звук: Jago Go client
GNOME/KDE? Тогда java -jar jago.jar
Что конкретно использовать — esddsp или artsdsp определяется средой (GNOME/KDE, соответственно).
Re: Java и звук: Jago Go client
Надо же, и действительно помогло. Спасибо! Теперь вот буду сражаться в го по сети со звуком!:)
Re: Java и звук: Jago Go client
> Надо же, и действительно помогло.
А все потому, что кто-то читает FAQ. Иногда даже вслух и с выражением! 🙂
Re: Java и звук: Jago Go client
честь ему и хвала! а другие в это время преподают, толкают науки и в свободное время играют в го по сети. а когда возникают трудности — спрашивают совета у специалистов. я же не посылаю своих студентов читать книги и рыться в интернете вместо посещения своих лекций? давайте все займемся тем, к чему у нас способности.
Источник
Звук Java не работает под Linux
Я только что установил Fedora 12, и после загрузки и запуска Java Sound Demo я получаю исключения. Если я запустил обычную Java-программу, .wav файл запускается тихо, без звука и без исключений.
Кажется, что все остальные приложения воспроизводят звук. Я также воспользовался некоторыми советами из этой ветки на форумах Ubuntu, которые, похоже, почти сработали. (Установка aoss позволила избавиться от начальных исключений в звуковой демонстрации, но я все еще ничего не слышу, когда играю.)
Меня расстраивают отдельные обручи, через которые мне приходится извлекать звук из динамиков при запуске приложений Java на платформах Linux!
Может кто-нибудь помочь мне разобраться, что случилось?
Я нашел свой ответ. Из списка вещей, которые вам следует выучить в детском саду:
Если у вас в коробке есть вторая звуковая карта, например та, которая изначально не работала с Linux и заставила вас начать использовать встроенную поддержку на материнской плате, то вы, вероятно, не поймете, что поддержка звука Java идет на звук. карта, которую вы не используете. Это означает, что несмотря на то, что все остальные аудиофайлы передавались на карту, которую я активировал с помощью микшера на панели задач, Java решила направить свой звук на другую карту.
Так что все время звук воспроизводился успешно. Я просто не мог его слышать, потому что он воспроизводился на карте Sound Blaster XFi, а мой динамик был подключен к аудиопорту материнской платы. Прошу прощения, если я выгляжу самодовольным, но я разочарован и не получаю особого удовольствия, особенно после того, как увидел, что серьезная проблема может быть отклонена, оставляя ответ на эту серьезную проблему скрытым от других, сталкивающихся с такими же проблемами.
Я не критикую Linux, Fedora или Java. Я просто пытаюсь понять, почему то, что должно быть простым, вызвало такие сложные исследования. Я понял это почти случайно, так как статья подсказала мне, что поддержка звука Java может фактически выбрать другой драйвер для маршрутизации звука.
- Вопрос и ответ, которые трудно передать другим пользователям, а также важная информация для ответа, не приведенная в вопросе
- Я не слежу. Важнейшей информацией было то, что в моем приставке было установлено 2 звуковые карты. Linux и все установленные приложения правильно маршрутизировались на звуковую карту материнской платы, к которой были подключены динамики, в то время как Java по умолчанию использовала маршрутизацию звука на вторичную звуковую карту Sound Blaster, к которой ничего не было подключено. Подключение моих динамиков к карте звукового бластера устранило проблему. Я помню, что был способ перенаправить звук Java на другую карту, но это было так давно, что я не могу вспомнить.
Как ни странно, исправлением для меня было добавление файла конфигурации
/.alsoftrc с содержанием:
Приложение java в моей ситуации (Minecraft на Xubuntu 14.04 LTS) отказалось использовать реально работавший аудиовыход (цифровой звук hdmi) и вместо этого по умолчанию выбрал то, чего не существовало, аналоговый звук.
Просто поместите это здесь для следующего человека, который задается вопросом, почему Java не звучит правильно.
У меня та же проблема. Когда вы используете другую программу, которая использует звук, до того, как вы запустите свою программу Java, которая использует звук, ваш звук Java не будет работать. Похоже, что звук java не использует микшер Alsa, но пытается использовать оборудование после микшера Alsa. Тогда только перезагрузка решит проблему.
У меня была такая же проблема с Raspberry Pi 3 B с Oracle JAVA 8. Я добавил новую звуковую карту. Затем, в соответствии со следующей процедурой, звуковая карта по умолчанию была изменена:
Изменить defaults.ctl.card 0 и defaults.pcm.card 0 к defaults.ctl.card 1 defaults.pcm.card 1 затем сохраните файл alsa.conf.
В Raspbian Buster (не уверен, что это связано с Buster) я запустил свой код тестера Java, но проблема все еще остается в курсе
Наконец, с помощью описанной ниже процедуры я отключил встроенную звуковую карту по умолчанию в состоянии загрузки.
Прокомментируйте dtparam=audio=on . Я имею ввиду, изменить dtparam=audio=on к #dtparam=audio=on .
Рекомендации:
- Файл конфигурации alsa-base отсутствует
- alexa-avs-sample-app
Источник
Java: звук
Начал эксперименты с проигрыванием звука в Java. Как оказалось, всё очень даже непросто. Есть несколько относительно простых методов проиграть звук и несколько посложнее. Все перечислять не буду, может как-то в другой раз.
Без особых ухищрений Java умеет запускать WAV, AU и AIFF файлы. Даже MIDI потянет, если сильно захотеть. А вот MP3 ни в какую.
Сейчас-то уже есть JavaFX, которая наконец-то запускает музыку без особого изврата и Java Media Framework (JMF) — решение от Oracle. Но с JavaFX всё не так просто, оставлю эту технологию на будущее, а JMF реально громоздкая библиотека — даже испытывать не буду.
Пройдёмся по другим способам.
Несмотря на то, что используется класс Applet, данный пример отлично запускается и в нормальных Java приложениях. Удивительно, но этот пример у меня проигрывает и MP3 файлы тоже. Недостатки:
— минимум возможностей управления. Доступны только методы play(), loop(), stop().
— говорят, паршиво работает звук в Linux (не проверял)
— остановка при проигрывании мелодии (проверял только на mp3) происходит далеко не сразу.
2. javax.sound
На страничке: http://www.oracle.com/technetwork/ja. ex-139508.html
есть отличная демонстрация возможностей Java в области звука. Не поленитесь скачать и запустить. Я вначале очень залип на этом примере, так как тут и громкость можно менять, работать с каналами MIDI, и прочее-прочее, но вытащить отсюда более-менее рабочий код, который потом можно было бы добавить в свою программу очень трудно. Однако, допилить код для полной совместимости с Java SE 7 у меня вышло.
Ещё читать:
http://web.eecs.umich.edu/
3. Ещё один вариант.
Это решение мне очень нравится — его можно смело монтировать в свой код для запуска «стандартных» звуков. Я немного модифицировал код, чтобы каждый раз не дёргать музыкальный файл с диска.
С MP3 пример не дружит:
javax.sound.sampled.LineUnavailableException: line with format MPEG1L3 44100.0 Hz, unknown bits per sample, stereo, unknown frame size, 38.28125 frames/second, not supported.
4. JavaZoom JLayer, BasicPlayer
http://www.javazoom.net/jlgui/developerguide.html
Для «стандартных» типов эти библиотеки пользуются встроенными средствами, а дополнительно предоставляют возможность проиграть OGG Vorbis, MP3, SPEEX, FLAC и Monkey’s Audio.
В этом листинге был представлен «родной» пример от разработчиков BasicPlayer. Продемонстрированы возможности настойки звука: громкость, итд. Мне очень нравится.
Увы, библиотека читает не все форматы MP3, некоторые придётся перекодировать (есть программное решение). Но музыку с постоянным битрейтом он подхватывает как нужно.
Именно этот вариант я беру на вооружение для работы с фоновой музыкой формата MP3.
Для компиляции и запуска этого кода потребуется прописать CLASSPATH. Воспользуемся ключами:
javac -classpath «.\;.\basicplayer3.0.jar» MP3.java
java -classpath «.\;.\basicplayer3.0.jar» MP3
Естественно, у вас пути могут быть другими, всё зависит от расположения архива basicplayer3.0.jar.
Если что-то настроено неправильно, может вывалиться следующая ошибка: error: package javazoom.jlgui.basicplayer does not exist
Данную библиотеку можно откомпилировать и вручную. Она не совсем рассчитана для Java SE 7, поэтому придётся доработать код (см. ниже).
Для перекомпиляции понадобятся библиотеки (их список ниже), в случае их отсутствия выскочат ошибки:
BasicPlayer.java:48: error: package org.apache.commons.logging does not exist
и
BasicPlayer.java:51: error: package org.tritonus.share.sampled does not exist
Однако, есть ещё один подводный камень:
javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
Решается просто. Создаём папку META-INF, в ней файл MANIFEST.MF:
Там же создаём папку «services» с двумя файлами:
javax.sound.sampled.spi.AudioFileReader
javax.sound.sampled.spi.FormatConversionProvider
Их содержимое:
# for the javalayer mp3 decoder
javazoom.spi.mpeg.sampled.file.MpegAudioFileReader
и
# for the javalayer mp3 decoder
javazoom.spi.mpeg.sampled.convert.MpegFormatConversionProvider
соответственно.
Теперь проигрыватель будет знать что делать с mp3 файлами.
В случае ошибки BasicPlayer.java:47: error: package javazoom.spi does not exist
Убедитесь, что все библиотеки распакованы как надо. Полный список файлов (для запуска конкретно MP3 музыки), в которых находятся исходники:
tritonus-share-0.3.7-2-sources.jar.zip
basicplayer3.0.zip
jlayer1.0.1.zip
commons-logging-1.2-src.zip
mp3spi1.9.5.zip
Чтобы запустить другие форматы — просто скачайте соответствующие SPI.
Повторно одну ошибочную ситуаци повторить не смог, но если будут трудности в компиляции своих программ, указывайте пути CLASSPATH в виде ключа:
javac -classpath «C:\Java;C:\Java\mp3spi1.9.4.jar;C:\Java\jl1.0.jar;C:\Java\tritonus_share.jar» MP3.java
java -classpath «C:\Java;C:\Java\mp3spi1.9.4.jar;C:\Java\jl1.0.jar;C:\Java\tritonus_share.jar» MP3
И последнее. При перекомпиляции BasicPlayer получил много предупреждений:
BasicPlayer.java:130: warning: [unchecked] unchecked call to add(E) as a member of the raw type Collection
m_listeners.add(bpl);
^
where E is a type-variable:
E extends Object declared in interface Collection
BasicPlayer.java:284: warning: [unchecked] unchecked call to put(K,V) as a member of the raw type Map
if (m_audioFileFormat.getByteLength() > 0) properties.put(«audio.length.bytes», new Integer(m_audioFileFormat.getByteLength()));
^
where K,V are type-variables:
K extends Object declared in interface Map
V extends Object declared in interface Map
итд.
Предупреждения возникли из-за того, что не указана типизация коллекций. Обобщения (Generic) — отличная штука, чтобы избежать ошибок при выполнении программы. Проверка выполняется ещё при компиляции — это очень сильная сторона Java.
Решение (для первых двух ошибок:
private Collection m_listeners = null;
меняем на
private Collection m_listeners = null;
Map properties = null;
меняем на
Map properties = null;
else properties = new HashMap();
меняем на
else properties = new HashMap ();
Если захочется компилировать пакет org.apache.commons.logging.impl.LogFactory.Impl.java, можно нарвалься на неопределённость с классами.
protected Class logMethodSignature[] = < LogFactory.class >;
Решается так:
protected Class logMethodSignature[] = < LogFactory.class >;
Эта статья получилась немного спутанной, нет времени всё причёсывать как надо.
Всем приятной игры
Источник