Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Простой beep (звук) под Linux
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Мультимедиа
512es
Народ, подскажите пожалуйста, как на Qt под линукс надёжнее всего и быстрее играть звуки?

Требования очень простые. Чтобы проигрывался писк (beep). Можно из динамика, можно из колонок, всё равно. Главное чтобы работало это на винде и линуксе без бубна.

QApplication::beep() работает хорошо на винде, а на линуксе не знаю чего ему не хватает.
QSound так и не завёлся. Да и желания ставить NAS что то нет..
Phonon - работает. Но это стрельба из пушки по воробьям.. Не айс как то..

Ось Gentoo.
Вот даже не знаю, ковырять снова beep() или QSound...
kwisp
Цитата(512es @ 14.9.2010, 14:36) *
Ось Gentoo.

:) не могу не посодействовать.
давай разбираться
512es
Цитата(kwisp @ 14.9.2010, 13:51) *
:) не могу не посодействовать.
давай разбираться


Давай =)

Прежде всего, пытаюсь вкомпилить модуль pcspkr в ядро. Но в конфиге его в упор не вижу..
Ядро 2.6.35


Тыкс.. В menuconfig его почему то не нашёл вообще. Пришлось вручную включить CONFIG_PCSPKR_PLATFORM=y, тогда и CONFIG_INPUT_PCSPKR=m появился.
Сразу конечно хочется настроить так чтобы ни из каких других приложений не пикал..
kwisp
Цитата(512es @ 14.9.2010, 14:58) *
Ядро 2.6.35

ну ты передовик. у меня 32

grep -i beep /usr/src/linux/.config
# CONFIG_SND_HDA_INPUT_BEEP is not set

:(
maint
я в федоре плюнул и вывожу звук через SDL_sound в линухе. В винде стандартным QSound. Просто сделал условную компиляцию в зависимости от системы своей функции play_sound.
kwisp
512es,
вообще конечно на линуксе. вопросов со звуком много..
если к примеру на звучке нет аппаратного миксера. как разруливается если твое приложенеи не единственное которое использует звук в процессе работы.... ?
512es
Цитата(kwisp @ 14.9.2010, 15:06) *
grep -i beep /usr/src/linux/.config
# CONFIG_SND_HDA_INPUT_BEEP is not set

:(


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

Цитата(maint @ 14.9.2010, 15:12) *
я в федоре плюнул и вывожу звук через SDL_sound в линухе. В винде стандартным QSound. Просто сделал условную компиляцию в зависимости от системы своей функции play_sound.

о! а это интересно. можно примерчик коротенький?))
kwisp
Цитата(512es @ 14.9.2010, 15:17) *
у меня такой строчки вообще нет в конфиге...

какие исходники ядра используешь?
kuzulis
А напрямую писать в линухе в регистры таймера (как в досе) не пробовали? Для биипа - мож как вариант?.
512es
Цитата(kwisp @ 14.9.2010, 15:19) *
какие исходники ядра используешь?


gentoo-sources-2.6.35-r5 размаскированное

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

системный бип я вкомпилил в ядро, через пол часа ребутнусь, проверю. вот только всё равно не айс как то что теперь все приложения будут пытаться пищать. надо как то хитро всё отключить ))
kwisp
а с этим что?
512es
Цитата(kwisp @ 14.9.2010, 15:48) *
а с этим что?

вспомнил что на моём компе давным давно вырван системный динамик )))
так что перехожу тестировать на ноут с интеловской звуковушкой:

вкомпилил в ядро CONFIG_SND_HDA_INPUT_BEEP
но никаких бипов не слышно..
kwisp
512es,
миксера аудио какой?
когда бипаешь другие приложения использующие звук запущены.
предлагаю тебе установить обычный линуксовый beep и им проверять когда он запищит тогда запищит и твоя прога.
emerge -av beep
512es
Цитата(kwisp @ 14.9.2010, 17:29) *
512es,
миксера аудио какой?
когда бипаешь другие приложения использующие звук запущены.
предлагаю тебе установить обычный линуксовый beep и им проверять когда он запищит тогда запищит и твоя прога.
emerge -av beep


юзаю alsamixer, там есть ползунок Speaker, всё на максимуме. что то мне подсказывает что ещё должен быть ещё и Beep. а нету..

давно поставил программу beep и проверяю им, даже пробовал через echo -e '\a', а так же через QApplication:beep()

потом собрал даже CONFIG_PCSPKR_PLATFORM=y, и CONFIG_INPUT_PCSPKR=m. всё равно та же история.
ничего больше использующего звук не включаю.

кстати, в модуле CONFIG_SND_HDA_INPUT_BEEP пробовал ставить моде в 1 (включён постоянно) и в 2 (управляется миксером). результата 0

а вообще CONFIG_SND_HDA_INPUT_BEEP должен работать без CONFIG_PCSPKR_PLATFORM=y и CONFIG_INPUT_PCSPKR??

вот такие вот дела..
kwisp
давай права смотреть на утилиту beep
ls -l /usr/bin/beep что даёт?
512es
Цитата(kwisp @ 14.9.2010, 18:02) *
давай права смотреть на утилиту beep
ls -l /usr/bin/beep что даёт?

с правами всё впорядке.

именно модуль интела не хочет пищать.
много гуглил по этому вопросу.
http://www.google.ru/search?sourceid=chrom...hda+beep+module

вообщем, надоело )) теперь буду ковырять в сторону QSound или SDL_sound
512es
Итак,
я кажется нашёл отличное решение этой проблемы!

Очень простое и эффективное решение будет играть звуки просто внешней командой в линуксе. Благо маленьких и шустрых консольных команд там предостаточно)) Ибо unix-way))

QProcess::startDetached("aplay -q blip2.wav");

Звук играется даже лучше чем через Phonon! Быстрее, нет нагрузки на процессор и при быстром многократном проигрывании легко накладывается друг на друга а так же на музыку, которая в тот момент играет на компе, без какого либо шума, тормозов или глюков! ))

Можно пойти и дальше, вкомпилировав в программу код плеера. Тут есть не плохой кусок кода, вырванный из линуксовой программы aplay, уже адаптированный для qt:
http://lists.trolltech.com/qt-interest/200...ead00147-0.html

Но мне лично это пока не надо. Т.к. всё равно будет зависимость от alsalib. А команда aplay почти стандартная, входит в состав пакета alsa-utils, в котором кстати и сам alsamixer.

А для винды и далее буду использовать QApplication::beep(). Там оно работает хорошо.
512es
Спасибо всем за ответы и поддержку))
Поделюсь полученным плеером. Мне не жалко))

void MainWindow::clicker()
{
#ifdef Q_OS_WIN32
    QApplication::beep();
#else
    QProcess player;
    QFile snd(":/sound/blip2.wav");
    if (!snd.open(QIODevice::ReadOnly)) return;
    player.start("aplay -q");
    if (player.write(snd.readAll()) == -1) return;
    player.closeWriteChannel();
    snd.close();
    if (!player.waitForFinished(5000)) player.kill();
#endif
}


Звук играется прямо из ресурсов.
Если за 5 секунд плеер не завершился мы его убиваем.
На винде используем стандартный бип.

Работает быстро, надёжно и универсально!) Задача решена!
molchanoviv
А если у пользователя нет ALSA? Вдруг OSS стоит, или еще что?
512es
Цитата(molchanoviv @ 15.9.2010, 8:51) *
А если у пользователя нет ALSA? Вдруг OSS стоит, или еще что?

Ну alsa это вроде как стандарт начиная с ядра 2.6. И кроме того, в большинстве дистрибутивов именно alsa стоит по дефолту. OSS устарел.
Существует ещё конечно много звуковых серверов, и если надо их поддерживать, можно легко заменить команду aplay -q на любую другую похожую. Например, можно в настройках программы позволить выбирать команду для проигрывания звуков.

Но по любому alsa чаще встречается в системах чем рабочий и включёный системный динамик =)
grio
Цитата(512es @ 15.9.2010, 1:54) *
Работает быстро, надёжно и универсально!) Задача решена!


Спасибо за альтернативное решение.
Сам я пользуюсь Фононом. Прекрасно работает и в Линуксе и под Виндой.

#include <phonon/MediaObject>
..

YoMain::YoMain(QWidget *parent)
{
..
    audioOutput = new Phonon::AudioOutput(Phonon::NotificationCategory);
}

void YoMain::MetronomeTick()
{
..
    metronomeSound->setCurrentSource (Phonon::MediaSource ("./click.wav"));
    metronomeSound->play ();
..
}


Рабочий пример здесь
Mimokrokodil
Ребята, вы точно извращенцы.

Linux: echo -e "\007" >/dev/tty10
Windows: echo "^G" (нажать Ctrl-G)

Если вам нужен простой бип, то зачем вам эти ваши Кютеки?

--
И вот на таких вот, зиждется наше отечественное ИТ
Алексей1153
Mimokrokodil, ответ: кроссплатформа. См. сообщение ТС
Iron Bug
Цитата(Mimokrokodil @ 19.10.2012, 11:41) *
Если вам нужен простой бип, то зачем вам эти ваши Кютеки?

угу. а теперь продемонстрируйте нам, недалёким, чудеса этого "echo" в неконсольной софтине, например. вызов из кода на С++. ждём-с демонстрации лёгкости и простоты! :D
Litkevich Yuriy
да он что-то вообще мимо темы.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.