Як зробити звуковий сигнал для мого комп'ютера


171

Використовуючи bash, як я можу зробити звуковий сигнал ПК-динаміка?

Щось подібне echo 'beepsound' > /dev/pcspkrбуло б добре.



Відповіді:


124

Зазвичай я використовую маленьку утиліту, beepвстановлену в багатьох системах. Ця команда спробує різні підходи для створення системного звуку.

Існує 3 способи створення звуку на сторінці сторінки beep:

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

    echo -ne '\007'
    

    Це працює лише в тому випадку, якщо стандартний вихід оболонки виклику в даний час спрямований на якийсь термінальний пристрій; якщо ні, то звуковий сигнал не видаватиме звуку і навіть може спричинити небажане пошкодження у будь-якому файлі, на який спрямований вихід.

  2. Є й інші способи викликати звуковий сигнал. Трохи надійніший спосіб - відкрити /dev/ttyта відправити туди свій символ БЕЛ. Це надійно проти перенаправлення вводу / виводу, але все-таки виходить з ладу у випадку, коли сценарій оболонки, який бажає генерувати звуковий сигнал, не має керуючого терміналу, наприклад, тому що він запускається від менеджера вікон X.

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

beep просто спробую ці 3 методи.


9
Домашня сторінка beepкоманди: johnath.com/beep У Ubuntu / Debian ви можете встановити її apt-get install beep.
Ріккардо Муррі

14
У Linux є четвертий метод поганого звукового сигналу: вивантажте pcspkrмодуль, завантажте snd-pcspі тепер у вас є звукова карта alsa, яка використовує старі шкільні трюки, щоб фактично подавати цифровий звук на ваш внутрішній динамік. Це дає шалені результати з п'єзоелектричними внутрішніми колонками, але на класичних внутрішніх динаміках якість є досить хорошою, якою вона є. Таким чином, ви можете отримати набагато креативніші для звукових сигналів;)
BatchyX

8
@isomorphismes: pcspkrі snd-pcspє модулями, а не пакетами. використовувати modprobe/ modprobe -r/ lsmodманіпулювати ними. Для вашої інформації вони знаходяться в linux-image-somethingпакеті, який, сподіваємось, уже встановлений (інакше у вас не було б ядра Linux).
BatchyX

3
звуковий сигнал зазвичай працює в поле для debian, але мені потрібно було завантажити модуль, щоб це працювало на ubuntu
mchid

4
Як сказав mchid, після додавання модуля: modprobe snd-pcspзвуковий сигнал зараз працює!
lepe

72

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

$ echo -e "\a"

Можливо, для цього буде потрібно завантажувати pcspkrмодуль ядра. Я тестував це лише на RHEL, тому YMMV.

ОНОВЛЕННЯ

Як зазначив Уоррен у коментарях, це може не спрацювати при віддаленому вході в систему через SSH. Швидким вирішенням буде перенаправлення виводу на будь-який з пристроїв TTY (в ідеалі той, який не використовується). Наприклад:

$ echo -en "\a" > /dev/tty5

5
Якщо ви використовуєте X-термінал або ssh'd в машині, це може просто спричинити спалах терміналу, оскільки багато програм типу xterm / vt100 налаштовані так, щоб це робити для символів BEL.
Warren Young

2
Це має сенс, але це не спрацювало для мене на Ubuntu 12.04.
ізоморфізми

2
@isomorphismes: це для консолей, а не для терміналів X11. Для звукових сигналів під X ви можете спробувати це: askubuntu.com/a/587311/11015
MestreLion

1
@isomorphismes: Я також використовую Ubuntu 12.04, і для мене sudo modprobe pcspkrбуло достатньо, щоб включити звукові сигнали під VT, або через printf "\a"або beepутиліту.
MestreLion

3
Жоден із методів не працює для мене. Ubuntu 16.04.1 LTS
ar2015

67

ПРИМІТКА. Це рішення видає звукові сигнали з динаміків , а не материнської плати .

ALSA поставляється з тестовим динаміком, генератором тестового тонального сигналу динаміків командного рядка, який може використовуватися для створення звукового сигналу:

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

Дивіться цю тему форуму арки 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. Дивіться цей скрипт оболонки .


1
Ваша функція як timeout ${2} speaker-test --frequency ${1} --test sine
однолінійний

1
Немає реальної потреби зберігати pid, це speaker-test -t sine -f 1000 -l 1 & sleep .2 && kill -9 $! робиться те саме. У будь-якому випадку метод @ user569825 приємніший.
erm3nda


17

Для використання звукової карти, якщо soxвона встановлена, і динаміка ПК, якщо немає:

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

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


2
+1 Я не знав, що ця гра має цю особливість. Я в кінцевому підсумку використовував це в thenблоці всередині, watchщоб повідомити мене, коли певна умова виконана. Навіть дозволяє мені тримати навушники. Це мені було дуже корисно.
andyortlieb

З баш-ш гра, напевно, знадобитьсяsudo -u USER play...
інтика

У моїй системі playвикористовується pulseaudio, як користувач. Я думаю, це залежить від конфігурації системи.
Олександр

13

Деякі дистрибутиви мають утиліти командного рядка для досягнення цього. Можливо, ви могли б сказати нам, на якому дистрибутиві ви знаходитесь, або шукайте (наприклад, 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

Мені подобається, що мої запитання залишаються дистрибутивними, чи echo -e "\007"працювали б у bash, а не print "\007в perl?
Стефан

1
@Stefan - звуковий сигнал майже "універсальний". Однак ви можете залишатися дистрибутивними, використовуючи 'echo -e' \ a "'або' echo -e '\ 07"'. Ура!
wormintrude

2
Це було б більш портативно використовувати printf '\007'замість echo.
Денніс Вільямсон

3

" Звуковий сигнал працює лише в тому випадку, якщо на вашому ПК є" динамік ". Багато сучасних ноутбуків / невеликих пристроїв не мають його." - тридегар .

Спробуйте відтворити звук замість цього:

$ play xxxxx.wav

Працювали для мене, коли все інше не вдалося.

Список літератури


2

Спробуйте

відлуння -n Ctrl+ V Ctrl+G

Мінус полягає в тому, що це буде працювати лише тоді, коли пристрій виводу є терміналом, тому він може не працювати, наприклад, у роботі cron. (Але якщо ви користуєтеся коренем, ви можете перенаправитись на /dev/consoleнегайний звуковий сигнал.)


1

У Linux такі інструменти beepможуть використовувати ioctl на консольному пристрої, щоб видавати заданий звук. Якщо бути більш конкретним, beepбуде використовуватися KIOCSOUNDйоктл, але є і KDMKTONEйоктл, який можна використовувати для отримання звуку.

Наскільки я розумію, перший запускає звук, який триває, поки явно не скасується, а другий створить звуковий сигнал заздалегідь визначеної тривалості. Дивіться в console_ioctl(4) людина сторінки для деталей.

Отже, якщо ви незадоволені тим, що beepробить, ви можете написати кілька рядків коду, щоб отримати доступ до цих йоктлів безпосередньо. Якщо припустити, що ви маєте повний доступ до цього /dev/console, що може вимагати кореневих привілеїв.


-1

У терміналі натисніть Ctrl+, Gа потімEnter


1
У моєму терміналі (gnome-terminal) він працює без Enter. Так само, як тест на колонку для ПК, це мені добре виглядає. Однак це вкрай марно в сценаріях.
Palec

Дивовижні низовини. Це працює на деяких комп'ютерах, але може працювати не на всіх.
Zzzach ...

Він не працює на rxvt, urxvt, xterm, lxterm або lxterminal, чи не повинен мій термінал принаймні спалахнути, якщо він має візуальний дзвінок?
Віллем

Це працює на xterm
Кріс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.