Bash kullanarak, bilgisayar hoparlörünü nasıl bip sesi çıkarabilirim?
Gibi bir şey iyi echo 'beepsound' > /dev/pcspkr
olurdu.
Bash kullanarak, bilgisayar hoparlörünü nasıl bip sesi çıkarabilirim?
Gibi bir şey iyi echo 'beepsound' > /dev/pcspkr
olurdu.
Yanıtlar:
Genelde beep
birçok sistemde kurulu olan küçük programı kullanıyorum . Bu komut, bir sistem sesi oluşturmak için farklı yaklaşımlar deneyecektir.
beep
Manpage'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/tty
BEL 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.
beep
Komutun ana sayfası şöyledir: johnath.com/beep Ubuntu / Debian üzerine, bunu yükleyebilirsiniz apt-get install beep
.
pcspkr
modülü boşaltın , yükleyin snd-pcsp
ve ş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;)
pcspkr
ve snd-pcsp
modüller, değil paketlerdir. Kullanım modprobe
/ modprobe -r
/ lsmod
onları 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-pcsp
bip şimdi çalışıyor!
Sadece yankı \a
ya da \07
benim 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 pcspkr
ya aracılığıyla, VT altında bip etkinleştirmek için yeterliydi printf "\a"
veya beep
yarar.
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 bel
olarak
Variable Cap- TCap Description
String name Code
bell bel bl audible signal
(bell) (P)
sox
Takı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.
then
blokta kullanarak sona erdi watch
. Kulaklığımı açık tutmama bile izin veriyor. Bu benim için çok faydalı oldu.
sudo -u USER play...
play
kullanı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 beep
gentoo'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 "\007
mı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, beep
belirli bir sesi çıkarmak için konsol aygıtında bir ioctl kullanabilir. Daha spesifik olmak gerekirse, ioctl'yi beep
kullanır KIOCSOUND
, ancak KDMKTONE
ses ü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, beep
bu ioctls'lere doğrudan erişmek için birkaç satır kod yazabilirsiniz. /dev/console
Kök ayrıcalıkları gerektirebilecek tam erişiminiz olduğunu varsayalım.
Bir terminalde, Ctrl+ Gve ardındanEnter