it-swarm-eu.dev

Jak se ozve pípnutí reproduktoru počítače

Jak mohu pomocí bash, jak reproduktory PC pípnout?

Něco jako echo 'beepsound' > /dev/pcspkr by bylo hezké.

185
Stefan

Obvykle používám malý nástroj beep nainstalovaný na mnoha systémech. Tento příkaz vyzkouší různé přístupy k vytvoření systémového zvuku.

Existují 3 způsoby, jak vytvořit zvuk ze stránky beep:

  1. Tradiční způsob výroby pípnutí ve skriptu Shell je napsat ASCII BEL (\007) znak na standardní výstup pomocí příkazu Shell, jako je

    echo -ne '\007'
    

    Toto funguje pouze tehdy, je-li standardní výstup volajícího Shell aktuálně směrován na nějaké terminálové zařízení; pokud ne, pípnutí nevydá žádný zvuk a může dokonce způsobit nežádoucí poškození v jakémkoli souboru, na který je výstup směrován.

  2. Existují i ​​jiné způsoby, jak způsobit zvukový signál. O něco spolehlivější metoda je otevřít /dev/tty a pošlete tam svou postavu BEL. Toto je odolné proti přesměrování I/O, ale stále selže v případě, že skript Shell, který chce generovat pípnutí, nemá ovládací terminál, například proto, že je spuštěn ze Správce oken X.

  3. Třetím přístupem je připojení k vašemu X displeji a odeslání zvonkového příkazu. To nezávisí na koncovém zařízení Unix, ale (samozřejmě) vyžaduje zobrazení X.

beep tyto 3 metody jednoduše vyzkouší.

133
echox

Jednoduše ozvěna \a nebo \07 pracuje pro mě.

$ echo -e "\a"

To bude pravděpodobně vyžadovat načtení modulu jádra pcspkr. Testoval jsem to pouze na RHEL, takže YMMV.

AKTUALIZACE

Jak Warren zdůraznil v komentářích, nemusí to fungovat, když se přihlásíte vzdáleně přes SSH. Rychlé řešení by bylo přesměrovat výstup na jakékoli zařízení TTY (ideálně na to, které není používáno). Např.:

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

POZNÁMKA: Toto řešení vydává zvuky z reproduktorů , nikoli ze základní desky .

ALSA přichází s reproduktor-test , generátor testovacího tónu reproduktoru příkazového řádku, který lze použít ke generování pípnutí:

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

Viz toto vlákno fóra Arch Linux .

Trvání pípnutí však bude libovolné, ale lze jej ovládat následujícím způsobem:

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

Můžeme to udělat ještě o krok dále a vydat tón s touto funkcí:

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

který se nazývá argumenty frekvence a trvání:

$ _alarm 400 200

S ohledem na to je možné vytvořit jednoduchou hudbu pomocí speaker-test. Viz tento skript Shell .

76
Ryne Everett
tput bel

protože terminfo definuje bel jako

           Variable                       Cap-               TCap                  Description
            String                        name               Code

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

Pro použití zvukové karty, pokud je nainstalován sox, a reproduktor PC, pokud není:

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

sox je k dispozici pro většinu distros.

19
Alexander

Některé distros mají nástroje příkazového řádku k dosažení tohoto cíle. Možná byste nám mohli sdělit, na čem jste, nebo hledat (např. emerge -s beep in gentoo).

Kromě „dostupných“ utilit můžete také vytvořit skript Perl, který vydává zvukový signál, vše, co musíte udělat, je:

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

Pokud se vám nakonec ozve pípnutí, vyzkoušejte následující:

#! /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

" Pípnutí funguje pouze v případě, že počítač má" reproduktor ". Mnoho moderních notebooků/malých zařízení jeden nemá." - tredegar .

Zkuste místo toho přehrát zvuk:

$ play xxxxx.wav

Pracoval pro mě, když všechno ostatní selhalo.

Reference

4
Elliptical view

Snaž se

echo -n Ctrl+VCtrl+G

Nevýhodou je, že to bude fungovat, pouze pokud je výstupní zařízení terminál, takže nemusí fungovat například v úloze cron. (Ale pokud jste root, možná budete moci přesměrovat na /dev/console pro okamžité pípnutí.)

2
codehead

V systému Linux mohou nástroje jako beep použít ioctl na konzolovém zařízení k vydávání daného zvuku. Přesněji řečeno, beep použije KIOCSOUND ioctl, ale existuje také KDMKTONE ioctl, který lze použít ke generování zvuku.

Jak to chápu, první spustí zvuk, který trvá, dokud není výslovně zrušen, zatímco druhý vytvoří tón předem určené doby trvání. Viz console_ioctl (4) man page pro podrobnosti.

Pokud tedy nejste spokojeni s tím, co beep dělá, můžete napsat několik řádků kódu pro přímý přístup k těmto ioctlům. Za předpokladu, že máte plný přístup k /dev/console, což by mohlo vyžadovat oprávnění root.

2
MvG

V terminálu stiskněte Ctrl+G a pak Enter

0
Hitesh Chechani