Bilgisayarımın hoparlör bip sesini nasıl yaparım?


Yanıtlar:


124

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 :

  1. 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.

  2. 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.

  3. Üçü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.


9
beepKomutun ana sayfası şöyledir: johnath.com/beep Ubuntu / Debian üzerine, bunu yükleyebilirsiniz apt-get install beep.
Riccardo Murri

14
Linux'ta, bip sesi çıkarmaya yönelik dördüncü bir badass yöntemi vardır: 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;)
BatchyX

8
@isomorphismes: 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ı).
BatchyX 24:13

3
Bip genellikle debian için kutu çalışır ama bunun için ubuntu üzerinde çalışmak için modül yüklemek gerekiyordu
mchid

4
Orkide dediği gibi, modül ekledikten sonra:, modprobe snd-pcspbip şimdi çalışıyor!
lepe

72

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.

GÜNCELLEME

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

5
Makineye bir X terminali kullanıyorsanız veya ssh'd kullanıyorsanız, bu sadece terminalin yanıp sönmesine neden olabilir, çünkü birçok xterm / vt100 tipi program BEL karakterleri için bunu yapacak şekilde yapılandırılmıştır.
Warren Young,

2
Bu mantıklı ama benim için Ubuntu 12.04'te işe yaramadı.
izomorfizmalar

2
@ izomorfizmaları: X11 terminalleri için değil, konsollar içindir. X altındaki bip sesleri için şunu deneyebilirsiniz: askubuntu.com/a/587311/11015
MestreLion

1
@isomorphismes: Ben de Ubuntu 12.04 kullanılarak ve beni için yaşıyorum sudo modprobe pcspkrya aracılığıyla, VT altında bip etkinleştirmek için yeterliydi printf "\a"veya beepyarar.
MestreLion

3
Yöntemlerin hiçbiri benim için işe yaramaz. Ubuntu 16.04.1 LTS
ar2015

67

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 .


1
Tek astar olarak işleviniz (ve Ctrl-C uyumlu):timeout ${2} speaker-test --frequency ${1} --test sine
user569825

1
Pid'i kurtarmaya hiç gerek yok, sadece speaker-test -t sine -f 1000 -l 1 & sleep .2 && kill -9 $! aynı şeyi yapıyor. Neyse, @ user569825 yöntemi daha iyidir.
erm3nda

27
tput bel

çünkü terminfo'ya tanımlar belolarak

           Variable                       Cap-               TCap                  Description
            String                        name               Code

   bell                                   bel                bl                audible signal
                                                                               (bell) (P)

17

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.


2
+1 Oyunun bu özelliğe sahip olduğunu bilmiyordum. Belirli bir koşul gerçekleştiğinde bana haber vermek için bunu bir thenblokta kullanarak sona erdi watch. Kulaklığımı açık tutmama bile izin veriyor. Bu benim için çok faydalı oldu.
andyortlieb

Bir bash sh oyunundan muhtemelen gerekeceksudo -u USER play...
intika

Sistemimde, playkullanıcı olarak pulseaudio kullanıyor. Sanırım sistem konfigürasyonuna bağlı.
Alexander,

13

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

Sorularımın agnostik kalmasını seviyorum , perl echo -e "\007"yerine bash'ta çalışacak print "\007mıyım?
Stefan

1
@Stefan - Bip oldukça 'evrenseldir'. Bununla birlikte, 'echo -e "\ a"' veya 'echo -e "\ 07"' kullanarak karmaşık agnostik kalabilir. Şerefe!
wormintrude

2
Bunun printf '\007'yerine kullanmak daha taşınabilir olurdu echo.
Dennis Williamson,


2

Deneyin

echo -n Ctrl+ V Ctrl+G

Dezavantajı, bunun yalnızca çıkış cihazı bir terminal olduğunda işe yaramasıdır, bu nedenle örneğin bir cron işi içinde çalışmayabilir. (Ancak, kök iseniz /dev/consolederhal bip sesi için yönlendirme mümkün olabilir .)


1

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.


-1

Bir terminalde, Ctrl+ Gve ardındanEnter


1
Terminalimde (gnome-terminal), Enter olmadan çalışır. Tıpkı bir PC hoparlörünün testi olarak, bu bana çok yakışmış. Yine de senaryolarda tamamen işe yaramaz.
Palec,

Şaşırtıcı düşüşler. Bu bazı PC'lerde çalışır, yine de hepsinde çalışmayabilir.
Zzzach ...

Rxvt, urxvt, xterm, lxterm veya lxterminal üzerinde çalışmaz, eğer görsel bir zili varsa terminalim en azından yanıp sönmemeli mi?
Willem

Bu xterm üzerinde çalışır
Chris
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.