Menggunakan bash, bagaimana saya bisa membuat bip speaker pc?
Sesuatu seperti echo 'beepsound' > /dev/pcspkritu akan menyenangkan.
Menggunakan bash, bagaimana saya bisa membuat bip speaker pc?
Sesuatu seperti echo 'beepsound' > /dev/pcspkritu akan menyenangkan.
Jawaban:
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:
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.
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.
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.
beepperintah ini adalah: johnath.com/beep Di Ubuntu / Debian, Anda dapat menginstalnya dengan apt-get install beep.
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;)
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).
modprobe snd-pcspbeep sekarang berfungsi!
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.
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
sudo modprobe pcspkrcukup untuk mengaktifkan bip di bawah VT, baik melalui printf "\a"atau beeputilitas.
Ubuntu 16.04.1 LTS
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 .
timeout ${2} speaker-test --frequency ${1} --test sine
speaker-test -t sine -f 1000 -l 1 & sleep .2 && kill -9 $! melakukan hal yang sama. Bagaimanapun, metode @ user569825 lebih baik.
tput bel
karena terminfo mendefinisikan belsebagai
Variable Cap- TCap Description
String name Code
bell bel bl audible signal
(bell) (P)
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.
thenblok dalam watchuntuk memberi tahu saya setelah kondisi tertentu dipenuhi. Bahkan memungkinkan saya tetap memakai headphone saya. Ini sangat berguna bagi saya.
sudo -u USER play...
playgunakan pulseaudio, sebagai pengguna. Saya kira itu tergantung pada konfigurasi sistem.
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
echo -e "\007"bekerja di bash, bukan print "\007di perl?
printf '\007'daripada echo.
" Bip hanya berfungsi jika PC Anda memiliki" speaker ". Banyak laptop / perangkat kecil modern tidak memilikinya." - tredegar .
Coba putar suara sebagai gantinya:
$ play xxxxx.wav
Bekerja untuk saya, ketika semuanya gagal.
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.)
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.
Di terminal, tekan Ctrl+ GlaluEnter