Qt и звуки
Меня всегда радовало разнообразие возможностей по работе со звуком в Линуксе.
Сегодня, например, несколько часов подряд взрывал себе мозг на тему QSound в Qt. Дело в том, что под Виндой, чтобы воспроизвести звуковой эффект без извращений, нужно просто вызвать статический метод QSound::play("имя файла"). В Линуксе тоже так можно, но чтобы звук действительно прозвучал - надо ставить NAS. Узнав об этой необходимости, принялся ставить оный, параллельно размышляя, как лучше заставить пользователей проделать то же самое. Мозги начали нагреваться.
Когда с nasd возникли какие-то проблемы, быстренько переключился на поиск альтернатив. Уже задумался о компиляции версии под Линукс с Phonon. Остановил тот факт, что фононовский учебный проект из состава Qt SDK не собрался out of the box. Попробовал учебный проект QAudioOutput оттуда же - не работает.
Уже начал было впадать в уныние, но в конце-концов осенило:
Вроде бы, ерундовая задача, а - чуть стол головой не разбил. Так жить нельзя.
Кстати, посмотри qtconfig, возможно там есть что-то по звуку.
Это не мне, это QSound так работает
Всё равно не понимаю. Ни одно QT и KDE приложения никогда у меня как зависимость не тянуло NAS, но звук всегда и везде был. Неужели больше никто не использует QSound?
PS: запарился логиниться по openid. Во-первых всё равно логин периодически не запоминается, во-вторых я пишу всё время из разных мест и в-третьих - сама форма логина по OpenID крайне неудобна.
Phonon используют или нативные ремайндеры из оконных менеджеров. Собственно, ничто не мешает тоже юзать play или типа того.
Про openID есть мысль модуль написать чтобы его в homepage добавить. Но пока руки не доходят.
Использовал QAudioInput и QAudioOutput для считывания потока данных с микрофона и для воспроизведения звука пришедшего по сети. Все нормально работает, методику работы взял с какого то примера, правда пришлось поизвращаться с размерами буферов что бы получать нужные порции данных, а так без особых проблем.
Для воспроизведения звуковых файлов использовал Phonon, сначала пробовал QSound, но у него очень ограничена функциональность, а Phonon дал возможностей даже больше чем я ожидал, например проигрывание через плэйлист.
Ну, для моей задачки Фонон все равно слишком тяжелый :)
Тяжелый в чем?
Библиотека для релиза весит 278 Кб
Инициализация:
Phonon::AudioOutput *audioOutput;
Phonon::MediaObject *metaInformationResolver;
audioOutput = new Phonon::AudioOutput(Phonon::MusicCategory, this);
mediaObject = new Phonon::MediaObject(this);
metaInformationResolver = new Phonon::MediaObject(this);
Phonon::createPath(mediaObject, audioOutput);
connect(metaInformationResolver,SIGNAL(stateChanged(Phonon::State,Phonon::State)),this,SLOT(stateChanged(Phonon::State,Phonon::State)));
connect(mediaObject,SIGNAL(stateChanged(Phonon::State,Phonon::State)),this,SLOT(stateChanged(Phonon::State,Phonon::State)));
Само проигрывание звука:
mediaObject->play();
Дык, мне все его возможности-то были не нужны, надо было так - проиграть несколько wav-ок и все. QSound::play() для винды и внешний play для луникса - что может быть проще? :)
P.S. Слегка отредактировал ваш комментарий - для красоты.












Не понял я зачем тебе NAS. Это всего навсего одна из звуковых подсистем. Кроме NAS есть alsa, pulse, много других.