Używając bash, jak mogę wydać sygnał dźwiękowy z komputera?
Coś jak echo 'beepsound' > /dev/pcspkr
byłoby miło.
command-line
Stefan
źródło
źródło
Odpowiedzi:
Zwykle używam małego narzędzia
beep
zainstalowanego na wielu systemach. To polecenie spróbuje zastosować różne podejścia do stworzenia dźwięku systemowego.Istnieją 3 sposoby tworzenia dźwięku ze strony
beep
podręcznika:Tradycyjna metoda generowania sygnału dźwiękowego w skrypcie powłoki polega na zapisaniu znaku
ASCII BEL
(\007
) na standardowym wyjściu za pomocą polecenia powłoki, takiego jakDziała to tylko wtedy, gdy standardowe wyjście powłoki wywołującej jest obecnie kierowane do jakiegoś urządzenia końcowego; jeśli nie, sygnał dźwiękowy nie wyda dźwięku, a nawet może spowodować niepożądane uszkodzenie w jakimkolwiek pliku, do którego skierowane jest wyjście.
Istnieją inne sposoby wywołania sygnału dźwiękowego. Nieco bardziej niezawodną metodą jest otwarcie
/dev/tty
i wysłanie tam postaci BEL. Jest to odporne na przekierowanie We / Wy, ale nadal zawiedzie w przypadku, gdy skrypt powłoki, który chce wygenerować sygnał dźwiękowy, nie ma kontrolnego terminala, na przykład ponieważ jest uruchamiany z menedżera okien X.Trzecie podejście polega na połączeniu się z wyświetlaczem X i wysłaniu komendy dzwonka. Nie zależy to od terminalowego urządzenia Unix, ale (oczywiście) wymaga wyświetlacza X.
beep
wypróbuje te 3 metody.źródło
beep
polecenia to: johnath.com/beep W systemie Ubuntu / Debian można go zainstalować za pomocąapt-get install beep
.pcspkr
moduł, załadujsnd-pcsp
i masz teraz kartę dźwiękową Alsa, która używa sztuczek oldschoolowych do faktycznego przesyłania cyfrowego dźwięku do wewnętrznego głośnika. Daje to kiepskie rezultaty z wewnętrznymi głośnikami piezoelektrycznymi, ale w klasycznych głośnikach wewnętrznych jakość jest całkiem dobra jak na to, co to jest. W ten sposób możesz uzyskać znacznie więcej kreatywności w zakresie dźwięków;)pcspkr
isnd-pcsp
są modułami, a nie pakietami. użyjmodprobe
/modprobe -r
/,lsmod
aby nimi manipulować. Dla twojej informacji, są one wlinux-image-something
pakiecie, który, mam nadzieję, jest już zainstalowany (inaczej nie miałbyś jądra Linuksa).modprobe snd-pcsp
sygnał dźwiękowy teraz działa!Po prostu echo
\a
lub\07
działa dla mnie.Prawdopodobnie będzie to wymagało
pcspkr
załadowania modułu jądra. Testowałem to tylko na RHEL, więc YMMV.AKTUALIZACJA
Jak zauważył Warren w komentarzach, może to nie działać po zalogowaniu zdalnym przez SSH. Szybkim obejściem byłoby przekierowanie wyjścia na dowolne urządzenie TTY (najlepiej takie, które nie jest używane). Na przykład:
źródło
sudo modprobe pcspkr
wystarczyło, aby włączyć sygnały dźwiękowe w VT, za pośrednictwemprintf "\a"
lubbeep
narzędzia.Ubuntu 16.04.1 LTS
UWAGA: To rozwiązanie emituje sygnały dźwiękowe z głośników , a nie z płyty głównej .
ALSA jest wyposażony w test głośników, generator dźwięków testowych z wiersza poleceń, którego można użyć do wygenerowania sygnału dźwiękowego:
Zobacz ten wątek na forum arch linux .
Jednak czas trwania sygnału dźwiękowego będzie dowolny, ale można go kontrolować w następujący sposób:
Za pomocą tej funkcji możemy pójść o krok dalej i wygenerować sygnał dźwiękowy:
który jest wywoływany z argumentami częstotliwości i czasu trwania:
Mając to na uwadze, można tworzyć proste utwory muzyczne
speaker-test
. Zobacz ten skrypt powłoki .źródło
timeout ${2} speaker-test --frequency ${1} --test sine
speaker-test -t sine -f 1000 -l 1 & sleep .2 && kill -9 $!
robi to samo. W każdym razie metoda @ user569825 jest lepsza.ponieważ terminfo definiuje
bel
jakoźródło
Aby użyć karty dźwiękowej, jeśli
sox
jest zainstalowana, i głośnika PC, jeśli nie:sox
jest dostępny dla większości dystrybucji.źródło
then
bloku wewnątrz,watch
aby powiadomić mnie, gdy spełniony zostanie określony warunek. Nawet pozwala mi pozostawić włączone słuchawki. To było dla mnie bardzo przydatne.sudo -u USER play...
play
używa pulseaudio jako użytkownika. Myślę, że to zależy od konfiguracji systemu.Niektóre dystrybucje mają do tego celu narzędzia wiersza poleceń. Może mógłbyś nam powiedzieć, na jakiej dystrybucji jesteś, lub wyszukać (np.
emerge -s beep
W Gentoo).Wychodząc poza „dostępne” narzędzia, możesz również utworzyć skrypt Perla, który emituje sygnał dźwiękowy, wszystko co musisz zrobić, to:
Jeśli w końcu usłyszysz „dźwięk”, wypróbuj następujące czynności:
źródło
echo -e "\007"
działałoby w bashu zamiastprint "\007
w perlu?printf '\007'
zamiastecho
.„ Sygnał dźwiękowy działa tylko wtedy, gdy komputer ma„ głośnik ”. Wiele współczesnych laptopów / małych urządzeń go nie ma.” - tredegar .
Zamiast tego spróbuj odtworzyć dźwięk:
Pracował dla mnie, kiedy wszystko inne zawiodło.
Bibliografia
źródło
Próbować
Minusem jest to, że zadziała to tylko wtedy, gdy urządzeniem wyjściowym jest terminal, więc może nie działać na przykład w zadaniu cron. (Ale jeśli jesteś rootem, możesz przekierować
/dev/console
na natychmiastowy sygnał dźwiękowy).źródło
W systemie Linux narzędzia takie jak
beep
mogą używać ioctl na konsoli do emitowania danego dźwięku. Mówiąc dokładniej,beep
użyjeKIOCSOUND
ioctl, ale jest teżKDMKTONE
ioctl, którego można użyć do generowania dźwięku.Jak rozumiem, ten pierwszy uruchamia dźwięk, który trwa, dopóki nie zostanie wyraźnie anulowany, a drugi wygeneruje sygnał dźwiękowy o określonym czasie trwania. Szczegółowe informacje można znaleźć na stronie podręcznika
console_ioctl
(4) .Więc jeśli nie jesteś zadowolony z tego
beep
, co robi, możesz napisać kilka wierszy kodu, aby uzyskać bezpośredni dostęp do tych plików ioctls. Zakładając, że masz pełny dostęp do/dev/console
, co może wymagać uprawnień roota.źródło
W terminalu naciśnij Ctrl+, Ga następnieEnter
źródło