Bagaimana cara membuat bip speaker pc saya

172

Menggunakan bash, bagaimana saya bisa membuat bip speaker pc?

Sesuatu seperti echo 'beepsound' > /dev/pcspkritu akan menyenangkan.

Stefan
sumber
1
superuser.com/questions/47564/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

124

Saya biasanya menggunakan utilitas kecil yang beepdiinstal pada banyak sistem. Perintah ini akan mencoba berbagai pendekatan untuk membuat suara sistem.

Ada 3 cara membuat suara dari halaman beepmanual:

  1. Metode tradisional untuk menghasilkan beep dalam skrip shell adalah dengan menulis ASCII BEL( \007) karakter ke output standar, dengan menggunakan perintah shell seperti

    echo -ne '\007'
    

    Ini hanya berfungsi jika output standar shell panggilan saat ini diarahkan ke perangkat terminal; jika tidak, bunyi bip tidak akan menghasilkan suara dan bahkan dapat menyebabkan kerusakan yang tidak diinginkan pada file apa pun yang diarahkan ke output.

  2. Ada cara lain untuk menimbulkan bunyi bip. Metode yang sedikit lebih andal adalah membuka /dev/ttydan mengirim karakter BEL Anda ke sana. Ini kuat terhadap pengalihan I / O, tetapi masih gagal dalam kasus di mana skrip shell yang ingin menghasilkan bunyi bip tidak memiliki terminal pengendali, misalnya karena dijalankan dari manajer window X.

  3. Pendekatan ketiga adalah menyambungkan ke tampilan X Anda dan mengirimkannya sebuah perintah bel. Ini tidak tergantung pada perangkat terminal Unix, tetapi (tentu saja) memerlukan tampilan X.

beep hanya akan mencoba 3 metode ini.

echox
sumber
9
Beranda untuk beepperintah ini adalah: johnath.com/beep Di Ubuntu / Debian, Anda dapat menginstalnya dengan apt-get install beep.
Riccardo Murri
14
Di linux, ada metode badass keempat untuk beep: bongkar pcspkrmodul, muat snd-pcsp, dan Anda sekarang memiliki kartu suara alsa yang menggunakan trik jadul untuk benar-benar memberi makan suara digital ke speaker internal Anda. Ini memberikan hasil buruk dengan speaker internal piezoelektrik, tetapi pada speaker internal klasik, kualitasnya cukup baik untuk apa itu. Dengan cara ini, Anda bisa menjadi jauh lebih kreatif untuk suara bip Anda;)
BatchyX
8
@ isomorfisma: pcspkrdan snd-pcspmerupakan modul, bukan paket. gunakan modprobe/ modprobe -r/ lsmoduntuk memanipulasi mereka. Untuk informasi Anda, mereka ada dalam linux-image-somethingpaket, yang diharapkan sudah diinstal (atau Anda tidak memiliki kernel linux).
BatchyX
3
bip biasanya bekerja di luar kotak untuk debian tapi saya perlu memuat modul untuk bekerja di ubuntu
mchid
4
Seperti kata mchid, setelah menambahkan modul:, modprobe snd-pcspbeep sekarang berfungsi!
lepe
73

Cukup gema \aatau \07bekerja untuk saya.

$ echo -e "\a"

Ini mungkin akan membutuhkan pcspkrmodul kernel untuk dimuat. Saya hanya menguji ini di RHEL, jadi YMMV.

MEMPERBARUI

Seperti yang ditunjukkan Warren dalam komentar, ini mungkin tidak berfungsi ketika login jarak jauh melalui SSH. Solusi cepat adalah mengarahkan ulang output ke perangkat TTY mana saja (idealnya yang tidak digunakan). Misalnya:

$ echo -en "\a" > /dev/tty5
Shawn Chin
sumber
5
Jika Anda menggunakan terminal X atau ssh'd ke dalam mesin, ini hanya dapat menyebabkan terminal berkedip, karena banyak program tipe xterm / vt100 dikonfigurasikan untuk melakukannya untuk karakter BEL.
Warren Young
2
Ini masuk akal tetapi tidak berhasil untuk saya di Ubuntu 12.04.
isomorfisma
2
@ isomorfisma: itu untuk konsol, bukan terminal X11. Untuk bunyi bip di bawah X, Anda dapat mencoba ini: askubuntu.com/a/587311/11015
MestreLion
1
@ isomorphismes: Saya juga menggunakan Ubuntu 12.04, dan bagi saya sudo modprobe pcspkrcukup untuk mengaktifkan bip di bawah VT, baik melalui printf "\a"atau beeputilitas.
MestreLion
3
Tidak ada metode yang bekerja untuk saya. Ubuntu 16.04.1 LTS
ar2015
67

CATATAN: Solusi ini mengeluarkan bunyi bip dari speaker , bukan motherboard .

ALSA dilengkapi dengan tes speaker, generator nada tes speaker command-line, yang dapat digunakan untuk menghasilkan bunyi bip:

$ speaker-test -t sine -f 1000 -l 1

Lihat utas forum lengkung linux ini .

Namun, durasi bip akan berubah-ubah, tetapi dapat dikontrol sebagai berikut:

$ ( speaker-test -t sine -f 1000 )& pid=$! ; sleep 0.1s ; kill -9 $pid

Kita dapat mengambil satu langkah lebih jauh dan mengeluarkan bunyi bip dengan fungsi ini:

_alarm() {
  ( \speaker-test --frequency $1 --test sine )&
  pid=$!
  \sleep 0.${2}s
  \kill -9 $pid
}

yang disebut dengan argumen frekuensi dan durasi:

$ _alarm 400 200

Dengan pemikiran ini, dimungkinkan untuk membuat musik sederhana dengan speaker-test. Lihat skrip shell ini .

Ryne Everett
sumber
1
Fungsi Anda sebagai satu-liner (dan kompatibel Ctrl-C):timeout ${2} speaker-test --frequency ${1} --test sine
user569825
1
Tidak ada kebutuhan nyata untuk menyelamatkan pid, hanya speaker-test -t sine -f 1000 -l 1 & sleep .2 && kill -9 $! melakukan hal yang sama. Bagaimanapun, metode @ user569825 lebih baik.
erm3nda
28
tput bel

karena terminfo mendefinisikan belsebagai

           Variable                       Cap-               TCap                  Description
            String                        name               Code

   bell                                   bel                bl                audible signal
                                                                               (bell) (P)
Winston Smith
sumber
17

Untuk menggunakan kartu suara jika soxdiinstal dan speaker PC jika tidak:

$ play -q -n synth 0.1 sin 880 || echo -e "\a"

sox tersedia untuk sebagian besar distro.

Alexander
sumber
2
+1 Saya tidak tahu bahwa permainan memiliki fitur ini. Saya akhirnya menggunakan ini di thenblok dalam watchuntuk memberi tahu saya setelah kondisi tertentu dipenuhi. Bahkan memungkinkan saya tetap memakai headphone saya. Ini sangat berguna bagi saya.
andyortlieb
Dari permainan bash sh mungkin perlusudo -u USER play...
intika
Di sistem saya, playgunakan pulseaudio, sebagai pengguna. Saya kira itu tergantung pada konfigurasi sistem.
Alexander
13

Beberapa distro memiliki utilitas baris perintah untuk mencapai hal ini. Mungkin Anda bisa memberi tahu kami apa distro yang Anda gunakan, atau cari (mis. emerge -s beepDi gentoo).

Melampaui utilitas "tersedia", Anda juga bisa membuat skrip Perl yang mengeluarkan bunyi bip, yang perlu Anda lakukan adalah memasukkan:

<SomeCodeBefore>
print "\007";
<SomeCodeAfter>  

Jika Anda akhirnya mendapatkan 'bip', cobalah yang berikut ini:

#! /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
wormintrude
sumber
Saya suka pertanyaan saya untuk tetap distro-agnostik, apakah akan echo -e "\007"bekerja di bash, bukan print "\007di perl?
Stefan
1
@Stefan - Bip cukup banyak 'universal'. Anda bisa, bagaimanapun, tetap distro agnostik dengan menggunakan 'echo -e "\ a"' atau 'echo -e "\ 07"'. Tepuk tangan!
wormintrude
2
Akan lebih portabel untuk digunakan printf '\007'daripada echo.
Dennis Williamson
2

Mencoba

gema -n Ctrl+ V Ctrl+G

Kelemahannya adalah ini hanya akan berfungsi ketika perangkat output adalah terminal, jadi mungkin tidak berfungsi di dalam cron job, misalnya. (Tetapi jika Anda root, Anda mungkin dapat mengarahkan ulang /dev/consoleuntuk berbunyi bip segera.)

kepala kode
sumber
1

Di Linux, alat-alat seperti beepdapat menggunakan ioctl pada perangkat konsol untuk memancarkan suara yang diberikan. Untuk lebih spesifik, beepakan menggunakan KIOCSOUNDioctl, tetapi ada juga KDMKTONEioctl yang dapat digunakan untuk menghasilkan suara.

Seperti yang saya pahami, yang pertama memulai suara yang berlangsung sampai dibatalkan secara eksplisit, sedangkan yang kedua akan membuat bunyi bip dari durasi yang ditentukan sebelumnya. Lihat halaman manual console_ioctl(4) untuk detailnya.

Jadi jika Anda tidak puas dengan apa yang beepdilakukan, Anda dapat menulis beberapa baris kode untuk mengakses ioctls ini secara langsung. Dengan asumsi Anda memiliki akses penuh ke /dev/console, yang mungkin memerlukan hak akses root.

MvG
sumber
-1

Di terminal, tekan Ctrl+ GlaluEnter

Hitesh Chechani
sumber
1
Di terminal saya (gnome-terminal), ia berfungsi tanpa Enter. Sama seperti tes speaker PC, ini terlihat baik bagi saya. Ini benar-benar tidak berguna dalam skrip.
Palec
Downvotes mengejutkan. Ini bekerja pada beberapa PC, mungkin tidak bekerja pada semua.
Zzzach ...
Itu tidak berfungsi pada rxvt, urxvt, xterm, lxterm atau lxterminal, bukankah seharusnya terminal saya setidaknya flash jika memiliki lonceng visual?
Willem
Itu bekerja pada xterm
Chris