Kraplax 16.03.2009 19:12

KDEСтолпы KDE4. Phonon.

Столпы KDE4. Phonon.

Второй столп, на котором держится KDE4, не менее грандиозен и величественнен. Phonon - это мультимедиа API. Так же как и его побратим Solid, Phonon абстрагируется от конкретного звукового движка, будь то Xine, PulseAudio, GStreamer, DirectShow или QuickTime. Phonon, кстати, не является частью KDE, хотя KDE4 очень активно использует его. Знаменитый фрэймворк для создания кроссплатформенных приложений Qt (читается как <кьют>, а не <кути>!) начиная с версии 4.4 имеет встроенную поддержку Phonon.

Зачем придумывать велосипед?



С незапамятных времен KDE2.0 использовал aRts в качестве медиа фрэймворка и обеспечивая мультимедиа API. Однако времена идут и все меняется, и, к счастью или сожалению, aRts не выдержал эту гонку и более не разрабатывается. То, что на его место придут другие было лишь вопросом времени, а времени оставалось все меньше - ведь разрабатывался такой большой проект, и все близился момент его первого релиза. И какой же из всех существующих вариантов выбрать? Чтобы был современный, чтобы поддерживал необходимые функции и чтобы не произошло того же, что было с aRts?

Ответ прост - не подстраиваться под один движок, а быть готовыми работать если не со всеми, то со многими.

Что Phonon даст простым пользователям?



Phonon опять же избавит вас от головной боли о том, как и через что воспроизводить звук. Для наглядности представим себе такой расклад:

Необходимо чтобы системные уведомления озвучивались в ваши двухсотваттные колонки (привет соседям :D), чтобы скайп бубнил в вашу беспроводную BlueTooth гарнитуру, а родители слушали Queen в соседней комнате на отдельной стереосистеме. При наличии необходимого количества девайсов вывода звука, Phonon в связке с уже рассмотренным Solid'ом позволит настроить все буквально в несколько щелчков мышью.

Для наглядности приведу скриншот, конечно, не относящийся к примеру что я описал, но все же помогающий вам увидеть типичный интерфейс настройки Phonon в KDE4.

Интерфейс настройки Phonon в KDE4 с множеством доступных устройств

Причем, переключение производится "на лету", и в идеале не нужна не только перезагрузка, но и перезапуск приложений! Конечно, пока что все может ьыть не так гладко, то есть изменение сейчас вступает в силу после перезапуска приложений воспроизведения звука (в случае с системными уведомлениями - перезапуск KDE4), но это только пока.

А чтобы не было особых сомнений в том, что это действительно универсальное и кроссплатформенное решение - вот скриншот с моей Windows XP:

Настройка Phonon в Windows через интерфейс KDE4

Как видите, в данном случае Phonon использует DirectShow9 движок. На Mac OS X на его месте был бы QuickTime. В этом еще один плюс - Phonon использует уже установленные в системе движки и адаптируется к ним.

Что Phonon даст разработчикам?



Очень многое! Как воспроизвести звуковой файл, поддерживаемый вашей звуковой подсистемой? Всего 4 строки кода - и готово!

1
2
3
4
5
6
7
8
9
 
media = new MediaObject(this);

connect(media, SIGNAL(finished()), SLOT(slotFinished()));

media->setCurrentSource("/home/username/music/filename.ogg");

media->play();




Вообще, Phonon предоставляет не только базовые функции воспроизведения, но также предоставляет интерфейс для создания спецэффектов. Для работы с Phonon вам, как разработчику, необходимо будет знать только API фронтэнда. Основными объектами Phonon являются MediaObject и AudioOutput. Данные, добытые через MediaObject должны передаваться в звуковой вывод. Для этого используется функция Phonon::createPath, которая возвращает объект Path (путь), в который далее можно вводить спецэффекты, которые будут влиять на звуковой сигнал.

Взаимосвязь основных элементов в реаизации проигрывания звука через Phonon

Если кроме звука используется еще и видео, то соответственно в схему добавляется дополнительное ответвление. В итоге получаем что-то вроде вот этого:



Как вы видите, работать со звуком становится так же легко и непринужденно, как и написание любого другого кода в Qt и с использованием kdelibs.

Я затронул только краешек того, что становится доступным разработчику, более серъезное погружение вас ждет при прочтении API документации на сайте проекта KDE, а также соответствующие разделы справки Qt, доступные также через программу Qt Assistant.

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

На этом, пожалуй, пост завершаю. Если кому-то показалось мало, или возникли вопросы - пишите комментарии, пишите в личку, пишите на мыло - мой_ник<на>mail.ru. Буду рад услышать отзывы и пожелания.



Информация взята с официального сайта проекта Phonon, из офицальной справки Qt. Как всегда помог собственный опыт общения с Phonon'ом - на KDE-apps можно найти приложение trayplayer. Оно не мое, но в нем довольно легко разобраться. Я же прикрутил к нему повтор, опцию листания назад, а также чисто из любопытства перевел этот проект на CMake, разделил классы по разным файлам и начал реализовывать базовый плейлист.


Тэги: KDE4 Phonon
+ 12 -
Похожие Поделиться

xcr 16.03.2009 19:25 #
Да, phonon вполне неплохая штука, работает гладко.
Но меня просто убил невероятный баг в нем: в стандартной поставке (по крайней мере, в Генту) он весь звук выводит в Master (через alsa), при этом даже не видит PCM. Из-за этого, собственно говоря, все приложения, не использующие phonon, не всегда могут вывести звук. Монополия KDE )
Баг лечится.
Kraplax 17.03.2009 15:24 #
Было бы неплохо, если бы ты обьяснил как он лечится - мало ли как придется =)
xcr 17.03.2009 17:13 #
Все дело в том, что нужно оформить PCM должным образом. Говорят, все дело в отсутствии hint в asound.conf. Я нагуглил такое решение:
(/etc/asound.conf)

pcm.softvolPhonon {
type softvol
slave.pcm "default:CARD=0"
control {
name "Phonon"
card 0
}
min_dB -51.0
max_dB 0.0
resolution 100
hint {
show on
description "My Soundcard with extra Volume Control"
}
}

Большая часть из того, что тут есть - лишнее, но зато все (кроме mute) работает )
(подробности здесь)
Username 16.03.2009 22:00 #
как на хабре увидел, понял, что увижу здесь. Молодца
Kraplax 16.03.2009 22:16 #
Спасиб =)
Жаль только что на хабре сначала видишь, а потом только сюда. Но тож нормально :)
Username 16.03.2009 22:31 #
это радомно. Я сразу как включу огнелис, сразу несколько вкладок тыкаю загружатся, на какую мышкой попаду случайно, ту и просматриваю первой
Kraplax 16.03.2009 22:42 #
Ужас какие неприятные беседы ведутся на хабре. За это его и недолюбливаю. Тут народ как-то поскромнее.
sqrrl 17.03.2009 10:15 #
Очень интересные статьи, буду ждать продолжения цикла.
Спасибо,Kraplax.
Murz 17.03.2009 17:03 #
Спасибо, очень интересно было узнать что в KDE4 всё так клёво!
Только вот пока сыровато всё в дистрибах, в Ubuntu 8.10 после периодических обновлений kde то пропадёт звук полностью то вместо 5.1 начинает в 2 колонки играть, то работает тока в kde4-приложениях а остальные молчат, то наоборот. Пробовал и kde 4.0 и 4.1 и 4.2. Когда начинаю ручками ковырять - ещё хуже становится ;)
Хотелось бы добиться следующего функционала:
- По-умолчанию все играют в колонки 5.1.
- Переключить звук от 1 приложения (например skype) в наушники и обратно.
- Переключить всё сразу в наушники, желательно хоткеем или кнопкой на панели plasma.
- Регулировать общую громкость, громкость басов у 5.1, громкость ушей (желательно бегунками на панеле плазмы).
- Переключать весь звук на stereo-bluetooth гарнитуру чтобы (пока добился чтобы играл туда VLC player, но звук приходит с задержкой в несколько секунд плюс отваливается периодически, поэтому киношку не посмотришь).

Пробовал pulseaudio, bluez, kde как из дистриба ubuntu так и ставил из сторонних репозиториев, качал-компилил исходники, но того что надо пока не добился.

Особо раздражает отсутствие регулятора выбранных громкостей бегунками на панели plasma (в kde3.5 это было). Самому бы написать да опыту нехватает, а учиться некогда - на работе завал ;(

Надеюсь в 9.04 это всё допилят и я таки-осуществлю свою мечту!
Kraplax 18.03.2009 20:53 #
Хм... ну давайте посмотрим что можно придумать. Сразу говорю, у меня никогда не было большого количества звуковых устройств и я всегда пользовался встроенной звуковушкой.
- Для звука 5.1 необходимо настроить alsa. Запустите от рута alsaconf (из пакета alsa-utils) и подождите пока настроится. Затем попробуйте работоспособность до входа в KDE (например, пока на экране KDM переключитесь на консоль и запустите консольный плеер). Если звука 5.1 нет - я незнаю как помочь. А если он есть, но пропадает в KDE - может быть вы испоьзуете PulseAudio? Как оказалось он в общем-то ненужен. Лишняя прослойка. Причем что обидно - ставится по дефолту в Kubuntu. В арче я настроил без него - установил alsa, libao, зависимости их и в общем-то этого оказалось достаточно.
- Чтобы переключать звук "от одного приложения" (типа скайпа) необходимо понять, к какому типу оно относится. Если это коммуникации - то и настраиваем приоритеты оборудования в разделе коммуникаций слева в диалоге настройки Phonon. Просто выставите свои наушники (или выход используемый этими наушниками) в более высокий приоритет, чем, скажем, обычные колонки. Но только в этой секции. Должно получиться.
- Переключение потоков с помощью хоткеев вряд ли можно организовать. Во всяком случае пока. Или может быть я просто незнаю о таких способах?
- Для регулировки общей громкости - KMix. Для регулировки басов - эквалайзер, его нет и не должно быть в Phonon'е. Ну, то есть в интерфейсе настройки Phonon'а. Используйте эквалайзер ваших плееров и программ для общения.
Вообще есть плазмоид на питоне, кажется, который позволяет изменять громкости разных приложений с помощью появляющихся в нем соответствующих бегунков. Его легко найти на kde-look.org в разделе плазмоидов.
- Переключение звука на гарнитуру склоее всего прерывается и задерживается потому, что используются лишние "прослойки" (у меня VLC потянул за собой JACK, что мне вообще никак не нужно), или у вас не очень хороший BlueTooth канал (помехи, преграды). Возможно, также, что звуковой поток слишком "толстый" для пропускной способности вашего Bluetooth соединения.

А вот разобраться и написать свой плазмоид стоит попробовать - это весело, и в общем-то, поможет вам отвлечься от работы и позволит отдохнуть по принципу смены деятельности.
zarkone 16.10.2009 11:44 #
сижу с ноутбука в виндоус, пока на линукс-компьютере установка идет. Читаю статью, затем Ваш комментарий, и походу чтения захотелось настроить)) не глядя нажимаю Пуск->панель управления->звук, первые пару секунд даже поискал глазами =)
Kraplax 16.10.2009 17:03 #
Так же бывает иногда :P Сам пользуюсь виндой и линуксом параллельно, поэтому бывают иногда замешательства и разочарования (Почему эта система не может так, как это делается тут!?)
Username 16.10.2009 17:09 #
кстати жестоко бесит ipconfig в виндоус, ага