LINUX.ORG.RU

Хочется странного. Останавливать все звуки если появляется звук из определённого источника

 ,


0

1

В общем когда что-то читаю на английском, то прибегаю к goldendict и forvo в нём, что бы узнать перевод или произношение слова. Но хотелось бы слушать музыку и только на время произношения слова, что бы остальные утихали. Можно ли так?

★★★★

Пульс умеет приглушать всё во время разговора в скайпе. Возможно, стоит копать в эту сторону. В любом случае, без него это вряд ли вообще реализуемо.

Axon ★★★★★
()

Я запускаю mplayer через скрипт, который ставит на паузу mpd, с помощью mpc, и восстанавливает по окончанию.

anonymous
()

Беглый осмотр http://www.freedesktop.org/wiki/Software/PulseAudio выявил, что можно вручную управлять звуком во всех приложениях одной кнопкой. Для этого надо работающий pulseaudio, терминал и pavucontrol. Ненужный звук можно ставить на паузу или заглушать (mute).
В двух словах: надо создать виртуальную звуковую карту, в которой будем глушить звук. Для этого создадим звуковую карту, которая гонит звук в null, а затем создадим ещё карту, объединяющую null и железную звуковую. Правда придётся все приложения, в которых надо убрать звук, в pavucontrol переключить на эту карту, потому что если сразу (без костылей) глушить основную (index 0), то звука не будет везде.

А эту виртуальную карту надо будет создавать каждый раз при запуске pulseaudio. Но в этом ничего страшного, потому что если карта не будет создана, то приложения будут выводить звук через устройство по умолчанию, а если (или когда) карта будет создана, то они автоматически перейдут на неё. Возможно придётся эти приложения перезапустить для этого перехода.
Или надо все звуковые потоки искать и заглушать ненужные, в пульсе есть всё для этого, но я не понял как

запускаем терминал

pactl load-module module-null-sink
запускаем второй терминал, чтобы узнать name синков (name железа неизменны, поэтому это потребуется один раз) В мане написано, что можно использовать и индексы, но здесь будут name
pacmd
list-sinks
будет что-то вроде
pacmd
Welcome to PulseAudio! Use "help" for usage information.
>>> list-sinks
4 sink(s) available.
  * index: 0
        name: <alsa_output.pci-0000_00_1b.0.analog-surround-51>
        driver: <module-alsa-card.c>
        flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY DYNAMIC_LATENCY
        state: RUNNING
        suspend cause: 
        priority: 9959
Вот у меня
name: <alsa_output.pci-0000_00_1b.0.analog-surround-51>
В первом терминале
pacmd load-module module-combine slaves=alsa_output.pci-0000_00_1b.0.analog-surround-51,null
Во втором терминале опять смотрим list-sinks, чтобы узнать имя виртуальной звуковой карты. У меня оно было неизменно, но я экспериментов с созданием 100500 виртуальных устройств не проводил
У меня
index: 3
        name: <combined>
        driver: <module-combine-sink.c>
        flags: DECIBEL_VOLUME LATENCY 
        state: SUSPENDED

        {тыры-пыры}

module: 23
        properties:
                device.class = "filter"
                combine.slaves = "alsa_output.pci-0000_00_1b.0.analog-surround-51,null"
                device.description = "Simultaneous output to Встроенное аудио Аналоговый объёмный 5.1, Пустой выход"
                device.icon_name = "audio-card"
Закрываем этот терминал, открываем pavucontrol, выставляем звуковую карту «simultaneous output to <ваша-звуковая>,Пустой выход» приложениям, которые надо глушить. Теперь в оставшемся терминале
если надо приостановить звуки
pacmd suspend-sink combined 1
#приостановить
pacmd suspend-sink combined 0
#возобновить

если надо заглушить звуки
pacmd set-sink-mute combined 1
#заглушить
pacmd set-sink-mute combined 0
# размутить
Вообщем всё сводится к команде pacmd suspend-sink combined 1|0 или pacmd set-sink-mute combined 1|0. Засовываем всё в скрипты вроде
инициализация
#!/bin/bash
pactl load-module module-null-sink > /dev/null
pacmd load-module module-combine slaves=alsa_output.pci-0000_00_1b.0.analog-surround-51,null > /dev/null
exit
#Естественно, подставить свою карту
Использование
#!/bin/bash
pacmd suspend-sink combined 0 > /dev/null
#pacmd set-sink-mute combined 0 > /dev/null
exit
#!/bin/bash
pacmd suspend-sink combined 1 > /dev/null
#pacmd set-sink-mute combined 1 > /dev/null
exit
Осталось скрипты прикрутить к кнопкам и пользоваться. Как сделать так, чтобы звук сам глушился при прослушивании слова, не знаю(IMG:style_emoticons/default/пичалька.gif)

ss_ash ★★★
()
Ответ на: комментарий от ss_ash

Спасибо большое, я после выходных попробую, а то меня не будет.

HunOL ★★★★
() автор топика
Ответ на: комментарий от ss_ash

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

HunOL ★★★★
() автор топика

Боюсь, что утихать будет только после произнесения слова. Вряд ли успеет отреагировать быстрее. И ещё случайные шумы будут влиять. Меня бы это раздражало. Советую попробовать щёлкать мышой на «mute» в любимом микшере.

auto12884835
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.