Używając bash, jak mogę wydać sygnał dźwiękowy z komputera?
Coś jak echo 'beepsound' > /dev/pcspkrbyłoby miło.
Używając bash, jak mogę wydać sygnał dźwiękowy z komputera?
Coś jak echo 'beepsound' > /dev/pcspkrbyłoby miło.
Odpowiedzi:
Zwykle używam małego narzędzia beepzainstalowanego 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 beeppodrę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 jak
echo -ne '\007'
Dział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/ttyi 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.
beeppolecenia to: johnath.com/beep W systemie Ubuntu / Debian można go zainstalować za pomocą apt-get install beep.
pcspkrmoduł, załaduj snd-pcspi 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;)
pcspkri snd-pcspsą modułami, a nie pakietami. użyj modprobe/ modprobe -r/, lsmodaby nimi manipulować. Dla twojej informacji, są one w linux-image-somethingpakiecie, który, mam nadzieję, jest już zainstalowany (inaczej nie miałbyś jądra Linuksa).
modprobe snd-pcspsygnał dźwiękowy teraz działa!
Po prostu echo \alub \07działa dla mnie.
$ echo -e "\a"
Prawdopodobnie będzie to wymagało pcspkrzaładowania modułu jądra. Testowałem to tylko na RHEL, więc YMMV.
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:
$ echo -en "\a" > /dev/tty5
sudo modprobe pcspkrwystarczyło, aby włączyć sygnały dźwiękowe w VT, za pośrednictwem printf "\a"lub beepnarzę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:
$ speaker-test -t sine -f 1000 -l 1
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:
$ ( speaker-test -t sine -f 1000 )& pid=$! ; sleep 0.1s ; kill -9 $pid
Za pomocą tej funkcji możemy pójść o krok dalej i wygenerować sygnał dźwiękowy:
_alarm() {
( \speaker-test --frequency $1 --test sine )&
pid=$!
\sleep 0.${2}s
\kill -9 $pid
}
który jest wywoływany z argumentami częstotliwości i czasu trwania:
$ _alarm 400 200
Mając to na uwadze, można tworzyć proste utwory muzyczne speaker-test. Zobacz ten skrypt powłoki .
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.
tput bel
ponieważ terminfo definiuje beljako
Variable Cap- TCap Description
String name Code
bell bel bl audible signal
(bell) (P)
Aby użyć karty dźwiękowej, jeśli soxjest zainstalowana, i głośnika PC, jeśli nie:
$ play -q -n synth 0.1 sin 880 || echo -e "\a"
sox jest dostępny dla większości dystrybucji.
thenbloku wewnątrz, watchaby 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...
playuż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 beepW 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:
<SomeCodeBefore>
print "\007";
<SomeCodeAfter>
Jeśli w końcu usłyszysz „dźwięk”, wypróbuj następujące czynności:
#! /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"działałoby w bashu zamiast print "\007w perlu?
printf '\007'zamiast echo.
„ 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:
$ play xxxxx.wav
Pracował dla mnie, kiedy wszystko inne zawiodło.
W systemie Linux narzędzia takie jak beepmogą używać ioctl na konsoli do emitowania danego dźwięku. Mówiąc dokładniej, beepużyje KIOCSOUNDioctl, ale jest też KDMKTONEioctl, 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.
W terminalu naciśnij Ctrl+, Ga następnieEnter