Bash kullanarak, bilgisayar hoparlörünü nasıl bip sesi çıkarabilirim?
Gibi bir şey iyi echo 'beepsound' > /dev/pcspkrolurdu.
Bash kullanarak, bilgisayar hoparlörünü nasıl bip sesi çıkarabilirim?
Gibi bir şey iyi echo 'beepsound' > /dev/pcspkrolurdu.
Yanıtlar:
Genelde beepbirçok sistemde kurulu olan küçük programı kullanıyorum . Bu komut, bir sistem sesi oluşturmak için farklı yaklaşımlar deneyecektir.
beepManpage'den ses oluşturmanın 3 yolu vardır :
Bir kabuk komut dosyasında bir bip sesi üretmenin geleneksel yöntemi, aşağıdaki gibi bir kabuk komutu vasıtasıyla standart çıktıya bir ASCII BEL( \007) karakteri yazmaktır .
echo -ne '\007'
Bu sadece çağıran kabuğun standart çıktısı şu anda bir tür terminal cihazına yönlendiriliyorsa çalışır; değilse, bip sesi duyulmaz ve çıktının yönlendirildiği dosyada istenmeyen bozulmalara neden olabilir.
Bip sesi çıkarmanın başka yolları da var. /dev/ttyBEL karakterinizi oraya açmak ve göndermek biraz daha güvenilir bir yöntemdir . Bu, G / Ç yönlendirmesine karşı sağlamdır, ancak bir bip sesi oluşturmak isteyen kabuk betiğinin denetleyici bir terminali olmadığı durumlarda, örneğin bir X pencere yöneticisinden çalıştırıldığı için hala başarısız olur.
Üçüncü bir yaklaşım, X ekranınıza bağlanmak ve ona bir zil komutu göndermektir. Bu, bir Unix terminal cihazına bağlı değildir, ancak (elbette) bir X ekranı gerektirir.
beep sadece bu 3 yöntemi deneyeceğim.
beepKomutun ana sayfası şöyledir: johnath.com/beep Ubuntu / Debian üzerine, bunu yükleyebilirsiniz apt-get install beep.
pcspkrmodülü boşaltın , yükleyin snd-pcspve şimdi dijital sesi gerçekten dahili hoparlörünüze beslemek için eski okul numaralarını kullanan bir alsa ses kartı var. Piezoelektrik iç hoparlörler ile berbat sonuçlar verir, ancak klasik iç hoparlörler için, kalitesi ne olduğu için oldukça iyidir. Bu şekilde, bip sesleriniz için çok daha yaratıcı olabilirsiniz;)
pcspkrve snd-pcspmodüller, değil paketlerdir. Kullanım modprobe/ modprobe -r/ lsmodonları işlemek için. Bilginize linux-image-something, umarım zaten kurulmuş olan pakettedirler (ya da başka bir linux çekirdeğiniz olmazdı).
modprobe snd-pcspbip şimdi çalışıyor!
Sadece yankı \aya da \07benim için çalışıyor.
$ echo -e "\a"
Bu muhtemelen pcspkrçekirdek modülün yüklenmesini gerektirecektir . Bunu sadece RHEL’de test ettim, yani YMMV.
Warren'ın yorumlarda belirttiği gibi, SSH ile uzaktan giriş yapıldığında bu çalışmayabilir. Çabuk geçici bir çözüm, çıktıyı TTY cihazlarından herhangi birine (ideal olarak kullanılmayan) yönlendirmek olacaktır. Örneğin:
$ echo -en "\a" > /dev/tty5
sudo modprobe pcspkrya aracılığıyla, VT altında bip etkinleştirmek için yeterliydi printf "\a"veya beepyarar.
Ubuntu 16.04.1 LTS
NOT: Bu çözüm anakarttan değil hoparlörlerden bip sesi çıkarır .
ALSA ile birlikte gelen hoparlör testi bip sesi çıkaracak şekilde kullanılabilir, bir komut satırı hoparlör test sesi jeneratör,:
$ speaker-test -t sine -f 1000 -l 1
Bkz bu kemer linux forum başlığını .
Ancak, bip süresi keyfi olacaktır, ancak aşağıdaki gibi kontrol edilebilir:
$ ( speaker-test -t sine -f 1000 )& pid=$! ; sleep 0.1s ; kill -9 $pid
Bir adım daha ileri alabilir ve bu işlevle bir bip sesi çıkarabiliriz:
_alarm() {
( \speaker-test --frequency $1 --test sine )&
pid=$!
\sleep 0.${2}s
\kill -9 $pid
}
hangi sıklık ve süre argümanları ile denir:
$ _alarm 400 200
Bunu akılda tutarak, basit müzik yaratmak mümkün speaker-test. Bu kabuk betiğine bakın .
timeout ${2} speaker-test --frequency ${1} --test sine
speaker-test -t sine -f 1000 -l 1 & sleep .2 && kill -9 $! aynı şeyi yapıyor. Neyse, @ user569825 yöntemi daha iyidir.
tput bel
çünkü terminfo'ya tanımlar belolarak
Variable Cap- TCap Description
String name Code
bell bel bl audible signal
(bell) (P)
soxTakılıysa ses kartını ve takılı değilse PC hoparlörünü kullanmak için:
$ play -q -n synth 0.1 sin 880 || echo -e "\a"
sox çoğu dağıtım için kullanılabilir.
thenblokta kullanarak sona erdi watch. Kulaklığımı açık tutmama bile izin veriyor. Bu benim için çok faydalı oldu.
sudo -u USER play...
playkullanıcı olarak pulseaudio kullanıyor. Sanırım sistem konfigürasyonuna bağlı.
Bazı dağıtımlar bunu başarmak için komut satırı araçlarına sahiptir. Belki bize ne tür bir rahatsızlık yaşadığınızı söyleyebilir ya da arayabilirsiniz (örneğin emerge -s beepgentoo'da).
"Available" öğelerinin ötesine geçerek, bip sesini yayan bir Perl betiği de yapabilirsiniz, tek yapmanız gereken şunları içerir:
<SomeCodeBefore>
print "\007";
<SomeCodeAfter>
Eğer bip sesi almaya başlarsanız, aşağıdakileri deneyin:
#! /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"yerine bash'ta çalışacak print "\007mıyım?
printf '\007'yerine kullanmak daha taşınabilir olurdu echo.
" Bip sadece PC'nizde" hoparlör "varsa çalışır. Modern dizüstü bilgisayarların / küçük cihazların çoğunda bir tane yoktur." - tredegar .
Bunun yerine bir ses çalmayı deneyin:
$ play xxxxx.wav
Her şey başarısız olduğunda benim için çalıştı.
Linux'ta, gibi araçlar, beepbelirli bir sesi çıkarmak için konsol aygıtında bir ioctl kullanabilir. Daha spesifik olmak gerekirse, ioctl'yi beepkullanır KIOCSOUND, ancak KDMKTONEses üretmek için kullanılabilecek bir ioctl de vardır .
Anladığım kadarıyla, birincisi açıkça iptal edilinceye kadar süren bir ses çıkarırken, ikincisi önceden belirlenmiş bir süre bip sesi çıkaracak. Detaylar için console_ioctl(4) kılavuz sayfasına bakınız.
Yani, ne yaptığınızdan memnun değilseniz, beepbu ioctls'lere doğrudan erişmek için birkaç satır kod yazabilirsiniz. /dev/consoleKök ayrıcalıkları gerektirebilecek tam erişiminiz olduğunu varsayalım.
Bir terminalde, Ctrl+ Gve ardındanEnter