Столпы 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.

    Причем, переключение производится «на лету», и в идеале не нужна не только перезагрузка, но и перезапуск приложений! Конечно, пока что все может ьыть не так гладко, то есть изменение сейчас вступает в силу после перезапуска приложений воспроизведения звука (в случае с системными уведомлениями — перезапуск KDE4), но это только пока.
    А чтобы не было особых сомнений в том, что это действительно универсальное и кроссплатформенное решение — вот скриншот с моей Windows XP:

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

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


    Очень многое! Как воспроизвести звуковой файл, поддерживаемый вашей звуковой подсистемой? Всего 4 строки кода — и готово!
    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 (путь), в который далее можно вводить спецэффекты, которые будут влиять на звуковой сигнал.

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

    Как вы видите, работать со звуком становится так же легко и непринужденно, как и написание любого другого кода в Qt и с использованием kdelibs.
    Я затронул только краешек того, что становится доступным разработчику, более серъезное погружение вас ждет при прочтении API документации на сайте проекта KDE, а также соответствующие разделы справки Qt, доступные также через программу Qt Assistant.
    Для пользователей же остается только радость использования всех этих благ человечества, легко изменяя настройки вывода звука при малейшей необходимости.
    На этом, пожалуй, пост завершаю. Если кому-то показалось мало, или возникли вопросы — пишите комментарии, пишите в личку, пишите на мыло — мой_ник<на>mail.ru. Буду рад услышать отзывы и пожелания.

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

    Пост на WeLinux.ru.
    Поделиться публикацией

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 34

      +1
      Отлично.

      Интересные статьи, сам использую KDE.
        0
        Молодец)
          0
          спецэффекты, которые будут влиять на звуковой сигнал.
          Поправте теги, пожалуйста:
          phonon.kde.org/dms/1/7_audioexample.png
            0
            Блин! Хабрапарсер!
            У вас после слов
            «которые будут влиять на звуковой сигнал.» идёт тег img, который вместо показа картинки показывается сам, наглец!
            Вот.
              0
              Спасибо, поправил-таки :)
          • НЛО прилетело и опубликовало эту надпись здесь
              0
              Предидущий пост делал мой друг, когда у меня еще не было приглашения на Хабр. Так что по сути это моя дебютная статья :)
              • НЛО прилетело и опубликовало эту надпись здесь
                0
                Перенёс
                0
                хорошая статья
                я тож юзаю КДЕ
                  –5
                  а я считаю, что сейчас гном все же несколько впереди
                    +5
                    а вы не считайте, а нам покажите.
                    –6
                    Ненавижу вас! И так дохуя кодить под .net, так ещё и аппетит это изучить просыпается!
                      0
                      «Конечно, пока что все может ьыть не так гладко»

                      мелкая ошибочка ;)
                      спасибо за статью!
                        +1
                        А я когда прочитал сразу настроение поднялось =)) Попробуйте это слово прочтитать =)
                        –2
                        alsa, pulseaudio, arts, jack, теперь ещё phonon
                        а под гномом EsounD
                        Как то маловато наплодили! Даёшь больше велосипедов, хороших и разных! =)
                          –1
                          Про Gstreaner забыл. И всё это лежит на разных уровнях абстракции, но в то же время местами пересекается по функционалу. Вот так и живем.
                            +2
                            Ошибаетесь товарищи. Phonon стоит над GStreamer, jack, arts, pulseaudio, alsa и ESounD.
                              0
                              и над OSS?
                                +1
                                И над OSS.
                                0
                                Товарищ, я по-моему внятно написал, что эти вещи местами пересекаются, а не точно дублируют друг друга. Phonon пересекается с частью функционала как Pulseaudio, так и GStreamer.
                              0
                              Ну намешали. esound и arts уже умерли, кстати.
                                0
                                ну, у меня EsounD сейчас до сих пор перечислен в списке оборудования в настройщике Phonon. И железо не старое — Eee PC 900. аРтс может и заброшенный проект, но это не значит что для него не может быть места в Phonon'е
                                0
                                alsa, pulseaudio, arts, jack — для одной платформы, а фонон — для любой. Просто три разных бэкэнда использует на разных ОС. И кстати говоря, всё что делается в проекте КДЕ4 и соответствует стилю Qt4 — это всё прекрасное ПО как для пользователя, так и для разработчика.
                                0
                                А потом пользователь начинает перебирать все устройства пока в нужном не появится музыка :)
                                  0
                                  Кстати да =) Есть такое — когда вроде звуковуха одна, а вариантов перечислено около четырех. Неудобно однако :P
                                  +1
                                  Очень интересно. С удовольствием жду продолжения — хоть и KDE не использую(лишь заглядываю изредка), но сам тулкит QT и технологии вокруг KDE считаю достаточно интересными и полезными.

                                  P.S. а также было бы очень интересно почитать про Вашу роль в проекте KDE — как попали, что для этого сделали, чем занимаетесь, как координируетесь ну и т.д. и т.п. Так что если будет время, подобный пост лишним и скучным, думаю, не будет.
                                    0
                                    Там нечего особо рассказывать, я давненько ничего не делал. Но в общем-то могу рассказать. Как-нить в личном блоге размещу, я думаю.
                                      0
                                      Обязательно расскажите!
                                      0
                                      Хехе, а вот я вспоминаю новости про обиды со стороны разработчиков HAL и GStreamer на КДЕшников, типа «У нас ведь это уже есть. зачем вы тоже самое делаете».
                                      +1
                                      Причем, переключение производится «на лету», и в идеале не нужна не только перезагрузка, но и перезапуск приложений! Конечно, пока что все может ьыть не так гладко, то есть изменение сейчас вступает в силу после перезапуска приложений воспроизведения звука (в случае с системными уведомлениями — перезапуск KDE4), но это только пока.


                                      Не знаю как у других, а у меня все работает замечательно. То есть играет у меня скажем амарок во внешний USB саунд бластер. Выдираю его и через секунду аудиопоток перенаправляется во встроенную звуковуху ноута, соответственно музыка играет из него. Обратите внимание, без остановки воспроизведения. Ну и наоборот соответственно: воткнув внешний саунд (имеющий больший приоритет в настройках) поток перенаправляется обратно.

                                      ЗЫ: Вот читаю я комментарии выше (а-ля «наплодили блин велосипедов») и вижу что народ банально не удосужился вникнуть в суть статьи и не понимают основной сути этого дела.

                                      Еще раз: alsa, oss, gstreamer, jack… это бакенды (с точки зрения приложений), а phonon это средний уровень. В отличие от phonon-а все предыдущие системы не дают в принципе абстракции. Они ориентированы на конкретные цели.
                                        0
                                        Хм… либо у меня с настройками иногда проблемы… либо просто нет возможности выдернуть встроенную звуковушку, отчего и не знаю о такой гладкости переключения =)
                                        Рад что все настолько хорошо :D
                                          0
                                          это все хорошо для разработчиков, но цена ещё одного уровеня абстракции — ещё большая ресурсозависимость
                                          ps
                                          не подумайте, ничего такого, я не призываю писать на асме
                                            0
                                            Нет никакой абстракции. Все делается средствами ALSA. Phonon просто управляет устройством по умолчанию, а маршрутизация потоков и так уже делается.

                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                        Самое читаемое