it-swarm-ru.tech

Как мне сделать звуковой сигнал моего компьютера?

Используя bash, как я могу заставить компьютерный динамик подавать звуковой сигнал?

Что-то вроде echo 'beepsound' > /dev/pcspkr было бы здорово.

185
Stefan

Я обычно использую маленькую утилиту beep, установленную на многих системах. Эта команда попробует разные подходы для создания системного звука.

Существует 3 способа создания звука из справочной страницы beep:

  1. Традиционный метод создания звукового сигнала в сценарии Shell - это написать ASCII BEL (\007) символ в стандартный вывод с помощью команды Shell, такой как

    echo -ne '\007'
    

    Это работает только в том случае, если стандартный вывод вызывающей оболочки в данный момент направлен на какое-либо терминальное устройство; в противном случае звуковой сигнал не будет издавать звук и может даже вызвать нежелательное искажение в любом файле, на который направлен вывод.

  2. Есть и другие способы вызвать звуковой сигнал. Немного более надежный способ - открыть /dev/tty и ​​отправьте туда своего персонажа BEL. Это устойчиво к перенаправлению ввода/вывода, но все равно не работает в случае, когда скрипт Shell, желающий генерировать звуковой сигнал, не имеет управляющего терминала, например, потому что он запускается из диспетчера окон X.

  3. Третий подход - подключиться к вашему дисплею X и отправить ему команду звонка. Это не зависит от оконечного устройства Unix, но требует (конечно) X-дисплея.

beep просто попробует эти 3 метода.

133
echox

Просто повторяю \a или \07 работает для меня.

$ echo -e "\a"

Это, вероятно, потребует загрузки модуля ядра pcspkr. Я проверял это только на RHEL, так что YMMV.

Обновление

Как отметил Уоррен в комментариях, это может не сработать при удаленном входе через SSH. Быстрый обходной путь - перенаправить вывод на любое из устройств TTY (в идеале, то, которое не используется). Например.:

$ echo -en "\a" > /dev/tty5
78
Shawn Chin

ПРИМЕЧАНИЕ. Это решение издает сигналы из колонок, а не из материнской платы.

ALSA поставляется с speaker-test , генератором тестового тонального сигнала динамика командной строки, который можно использовать для генерации звукового сигнала:

$ speaker-test -t sine -f 1000 -l 1

Смотрите эта ветка форума Arch Linux .

Однако длительность звукового сигнала будет произвольной, но ее можно контролировать следующим образом:

$ ( speaker-test -t sine -f 1000 )& pid=$! ; sleep 0.1s ; kill -9 $pid

Мы можем сделать еще один шаг вперед и выдать звуковой сигнал с помощью этой функции:

_alarm() {
  ( \speaker-test --frequency $1 --test sine )&
  pid=$!
  \sleep 0.${2}s
  \kill -9 $pid
}

который вызывается с аргументами частоты и длительности:

$ _alarm 400 200

Имея это в виду, можно создавать простую музыку с speaker-test. Смотрите этот скрипт Shell .

76
Ryne Everett
tput bel

потому что terminfo определяет bel как

           Variable                       Cap-               TCap                  Description
            String                        name               Code

   bell                                   bel                bl                audible signal
                                                                               (bell) (P)
32
Winston Smith

Для использования звуковой карты, если sox установлена, и динамика ПК, если нет:

$ play -q -n synth 0.1 sin 880 || echo -e "\a"

sox доступно для большинства дистрибутивов.

19
Alexander

Некоторые дистрибутивы имеют утилиты командной строки для достижения этой цели. Может быть, вы могли бы рассказать нам, в каком дистрибутиве вы находитесь, или выполнить поиск (например, emerge -s beep в gentoo).

Выходя за рамки "доступных" утилит, вы также можете создать Perl-скрипт, который издает звуковой сигнал, все что вам нужно сделать, это включить:

<SomeCodeBefore>
print "\007";
<SomeCodeAfter>  

Если в итоге вы услышите "гудок", попробуйте следующее:

#! /bin/sh 

beep -f 500 -l 700 
beep -f 480 -l 400 
beep -f 470 -l 250 
beep -f 530 -l 300 -D 100 
beep -f 500 -l 300 -D 100 
beep -f 500 -l 300 
beep -f 400 -l 600 
beep -f 300 -l 500 
beep -f 350 -l 700 
beep -f 250 -l 600
13
wormintrude

" Звуковой сигнал работает только в том случае, если на вашем ПК есть" динамик ". Многие современные ноутбуки/небольшие устройства не имеют его". - tredegar .

Попробуйте воспроизвести звук вместо этого:

$ play xxxxx.wav

Работал для меня, когда все остальное не удалось.

Ссылки

4
Elliptical view

Пытаться

эхо-н Ctrl+VCtrl+G

Недостатком является то, что это будет работать только тогда, когда устройство вывода является терминалом, поэтому оно может не работать, например, внутри задания cron. (Но если вы являетесь пользователем root, вы можете перенаправить на /dev/console для немедленного звукового сигнала.)

2
codehead

В Linux такие инструменты, как beep , могут использовать ioctl на консольном устройстве для воспроизведения определенного звука. Точнее говоря, beep будет использовать KIOCSOUND ioctl, но есть также KDMKTONE ioctl, который можно использовать для генерации звука.

Насколько я понимаю, первый запускает звук, который длится до тех пор, пока не будет явно отменен, в то время как второй создаст звуковой сигнал заданной длительности. Смотрите console_ioctl (4) man страница для деталей.

Поэтому, если вы недовольны тем, что делает beep, вы можете написать несколько строк кода для прямого доступа к этим ioctl. Предполагая, что у вас есть полный доступ к /dev/console, что вполне может потребовать привилегий root.

2
MvG

В терминале нажмите Ctrl+G а потом Enter

0
Hitesh Chechani