Menggunakan bash, bagaimana saya bisa membuat bip speaker pc?
Sesuatu seperti echo 'beepsound' > /dev/pcspkr
itu akan menyenangkan.
Menggunakan bash, bagaimana saya bisa membuat bip speaker pc?
Sesuatu seperti echo 'beepsound' > /dev/pcspkr
itu akan menyenangkan.
Jawaban:
Saya biasanya menggunakan utilitas kecil yang beep
diinstal pada banyak sistem. Perintah ini akan mencoba berbagai pendekatan untuk membuat suara sistem.
Ada 3 cara membuat suara dari halaman beep
manual:
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/tty
dan 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.
beep
perintah ini adalah: johnath.com/beep Di Ubuntu / Debian, Anda dapat menginstalnya dengan apt-get install beep
.
pcspkr
modul, 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;)
pcspkr
dan snd-pcsp
merupakan modul, bukan paket. gunakan modprobe
/ modprobe -r
/ lsmod
untuk memanipulasi mereka. Untuk informasi Anda, mereka ada dalam linux-image-something
paket, yang diharapkan sudah diinstal (atau Anda tidak memiliki kernel linux).
modprobe snd-pcsp
beep sekarang berfungsi!
Cukup gema \a
atau \07
bekerja untuk saya.
$ echo -e "\a"
Ini mungkin akan membutuhkan pcspkr
modul 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 pcspkr
cukup untuk mengaktifkan bip di bawah VT, baik melalui printf "\a"
atau beep
utilitas.
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 bel
sebagai
Variable Cap- TCap Description
String name Code
bell bel bl audible signal
(bell) (P)
Untuk menggunakan kartu suara jika sox
diinstal dan speaker PC jika tidak:
$ play -q -n synth 0.1 sin 880 || echo -e "\a"
sox
tersedia untuk sebagian besar distro.
then
blok dalam watch
untuk memberi tahu saya setelah kondisi tertentu dipenuhi. Bahkan memungkinkan saya tetap memakai headphone saya. Ini sangat berguna bagi saya.
sudo -u USER play...
play
gunakan 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 beep
Di 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 "\007
di 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/console
untuk berbunyi bip segera.)
Di Linux, alat-alat seperti beep
dapat menggunakan ioctl pada perangkat konsol untuk memancarkan suara yang diberikan. Untuk lebih spesifik, beep
akan menggunakan KIOCSOUND
ioctl, tetapi ada juga KDMKTONE
ioctl 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 beep
dilakukan, 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