Qt и звуки

Меня всегда радовало разнообразие возможностей по работе со звуком в Линуксе.

Сегодня, например, несколько часов подряд взрывал себе мозг на тему QSound в Qt. Дело в том, что под Виндой, чтобы воспроизвести звуковой эффект без извращений, нужно просто вызвать статический метод QSound::play("имя файла"). В Линуксе тоже так можно, но чтобы звук действительно прозвучал - надо ставить NAS. Узнав об этой необходимости, принялся ставить оный, параллельно размышляя, как лучше заставить пользователей проделать то же самое. Мозги начали нагреваться.

Когда с nasd возникли какие-то проблемы, быстренько переключился на поиск альтернатив. Уже задумался о компиляции версии под Линукс с Phonon. Остановил тот факт, что фононовский учебный проект из состава Qt SDK не собрался out of the box. Попробовал учебный проект QAudioOutput оттуда же - не работает.

Уже начал было впадать в уныние, но в конце-концов осенило:

#ifdef Q_WS_X11
  QProcess::startDetached("play mysound.wav");
#else
  QSound::play("mysound.wav");
#endif

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

GiNeR
Аватар пользователя GiNeR

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

GiNeR
Аватар пользователя GiNeR

Кстати, посмотри qtconfig, возможно там есть что-то по звуку.

graker
Аватар пользователя graker

Это не мне, это QSound так работает

Цитата:
X11: The Network Audio System is used if available, otherwise all operations work silently. NAS supports WAVE and AU files.

GiNeR_guest (гость)
Аватар пользователя GiNeR_guest

graker пишет:
Это не мне, это QSound так работает
Цитата:
X11: The Network Audio System is used if available, otherwise all operations work silently. NAS supports WAVE and AU files.

Всё равно не понимаю. Ни одно QT и KDE приложения никогда у меня как зависимость не тянуло NAS, но звук всегда и везде был. Неужели больше никто не использует QSound?
PS: запарился логиниться по openid. Во-первых всё равно логин периодически не запоминается, во-вторых я пишу всё время из разных мест и в-третьих - сама форма логина по OpenID крайне неудобна.

С телефона (гость)
Аватар пользователя С телефона

Phonon используют или нативные ремайндеры из оконных менеджеров. Собственно, ничто не мешает тоже юзать play или типа того.

Про openID есть мысль модуль написать чтобы его в homepage добавить. Но пока руки не доходят.

Виталий (гость)
Аватар пользователя Виталий

Использовал QAudioInput и QAudioOutput для считывания потока данных с микрофона и для воспроизведения звука пришедшего по сети. Все нормально работает, методику работы взял с какого то примера, правда пришлось поизвращаться с размерами буферов что бы получать нужные порции данных, а так без особых проблем.
Для воспроизведения звуковых файлов использовал Phonon, сначала пробовал QSound, но у него очень ограничена функциональность, а Phonon дал возможностей даже больше чем я ожидал, например проигрывание через плэйлист.

graker
Аватар пользователя graker

Ну, для моей задачки Фонон все равно слишком тяжелый :)

Виталий (гость)
Аватар пользователя Виталий

Тяжелый в чем?
Библиотека для релиза весит 278 Кб

Инициализация:

Phonon::MediaObject *mediaObject;
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->setCurrentSource(Phonon::MediaSource(file));
mediaObject->play();

graker
Аватар пользователя graker

Дык, мне все его возможности-то были не нужны, надо было так - проиграть несколько wav-ок и все. QSound::play() для винды и внешний play для луникса - что может быть проще? :)

P.S. Слегка отредактировал ваш комментарий - для красоты.

Отправить комментарий

CAPTCHA
Пройдите, пожалуйста, проверку. Она нужна, чтобы отличать людей от спам-роботов. А если не хотите проходить эту проверку регулярно — зарегистрируйтесь.
Image CAPTCHA
Введите цифры, изображенные на картинке (без пробелов).