Sử dụng bash, làm thế nào tôi có thể làm cho loa pc phát ra tiếng bíp?
Một cái gì đó như echo 'beepsound' > /dev/pcspkr
sẽ tốt đẹp.
Sử dụng bash, làm thế nào tôi có thể làm cho loa pc phát ra tiếng bíp?
Một cái gì đó như echo 'beepsound' > /dev/pcspkr
sẽ tốt đẹp.
Câu trả lời:
Tôi thường sử dụng các tiện ích nhỏ beep
được cài đặt trên nhiều hệ thống. Lệnh này sẽ thử các cách tiếp cận khác nhau để tạo ra âm thanh hệ thống.
Có 3 cách tạo âm thanh từ beep
trang chủ:
Phương thức truyền thống để tạo ra tiếng bíp trong tập lệnh shell là viết một ký tự ASCII BEL
( \007
) vào đầu ra tiêu chuẩn, bằng một lệnh shell như
echo -ne '\007'
Điều này chỉ hoạt động nếu đầu ra tiêu chuẩn của vỏ gọi hiện đang được chuyển đến một thiết bị đầu cuối nào đó; nếu không, tiếng bíp sẽ không tạo ra âm thanh và thậm chí có thể gây ra tham nhũng không mong muốn trong bất kỳ tệp nào mà đầu ra được hướng đến.
Có nhiều cách khác để gây ra tiếng bíp. Một phương pháp đáng tin cậy hơn một chút là mở /dev/tty
và gửi nhân vật BEL của bạn ở đó. Điều này mạnh mẽ chống lại chuyển hướng I / O, nhưng vẫn thất bại trong trường hợp tập lệnh shell muốn tạo tiếng bíp không có thiết bị đầu cuối điều khiển, ví dụ vì nó được chạy từ trình quản lý cửa sổ X.
Cách tiếp cận thứ ba là kết nối với màn hình X của bạn và gửi cho nó một lệnh chuông. Điều này không phụ thuộc vào thiết bị đầu cuối Unix, nhưng (tất nhiên) yêu cầu hiển thị X.
beep
sẽ chỉ đơn giản là thử 3 phương pháp này.
beep
lệnh là: johnath.com/beep Trên Ubuntu / Debian, bạn có thể cài đặt nó với apt-get install beep
.
pcspkr
mô-đun, tải snd-pcsp
và bây giờ bạn có một soundcard alsa sử dụng các thủ thuật trường học cũ để thực sự cung cấp âm thanh kỹ thuật số cho loa bên trong của bạn. Nó cho kết quả tào lao với loa bên trong áp điện, nhưng trên loa bên trong cổ điển, chất lượng khá tốt cho những gì nó là. Bằng cách này, bạn có thể sáng tạo hơn nhiều cho âm thanh tiếng bíp của mình;)
pcspkr
và snd-pcsp
là các mô-đun, không phải gói. sử dụng modprobe
/ modprobe -r
/ lsmod
để thao tác chúng. Đối với thông tin của bạn, chúng nằm trong linux-image-something
gói, hy vọng đã được cài đặt (nếu không bạn sẽ không có kernel linux).
modprobe snd-pcsp
, tiếng bíp hiện đang hoạt động!
Đơn giản chỉ cần lặp lại \a
hoặc \07
làm việc cho tôi.
$ echo -e "\a"
Điều này có thể sẽ yêu cầu pcspkr
mô-đun hạt nhân được tải. Tôi chỉ thử nghiệm điều này trên RHEL, vì vậy YMMV.
Như Warren đã chỉ ra trong các bình luận, điều này có thể không hoạt động khi đăng nhập từ xa thông qua SSH. Cách giải quyết nhanh sẽ là chuyển hướng đầu ra sang bất kỳ thiết bị TTY nào (lý tưởng nhất là thiết bị không được sử dụng). Ví dụ:
$ echo -en "\a" > /dev/tty5
sudo modprobe pcspkr
là đủ để kích hoạt tiếng bíp dưới VT, thông qua printf "\a"
hoặc beep
tiện ích.
Ubuntu 16.04.1 LTS
GHI CHÚ: Giải pháp này phát ra tiếng bíp từ loa , không phải bo mạch chủ .
ALSA đi kèm với kiểm tra loa, trình tạo âm kiểm tra loa dòng lệnh, có thể được sử dụng để tạo tiếng bíp:
$ speaker-test -t sine -f 1000 -l 1
Xem chủ đề diễn đàn linux arch này .
Tuy nhiên, thời lượng tiếng bíp sẽ tùy ý, nhưng có thể được kiểm soát như sau:
$ ( speaker-test -t sine -f 1000 )& pid=$! ; sleep 0.1s ; kill -9 $pid
Chúng ta có thể tiến thêm một bước và phát ra tiếng bíp với chức năng này:
_alarm() {
( \speaker-test --frequency $1 --test sine )&
pid=$!
\sleep 0.${2}s
\kill -9 $pid
}
được gọi với các đối số tần số và thời lượng:
$ _alarm 400 200
Với suy nghĩ này, có thể tạo ra âm nhạc đơn giản với speaker-test
. Xem kịch bản shell này .
timeout ${2} speaker-test --frequency ${1} --test sine
speaker-test -t sine -f 1000 -l 1 & sleep .2 && kill -9 $!
làm điều tương tự. Dù sao, phương pháp của @ user569825 đẹp hơn.
tput bel
bởi vì terminfo định nghĩa bel
là
Variable Cap- TCap Description
String name Code
bell bel bl audible signal
(bell) (P)
Để sử dụng soundcard nếu sox
được cài đặt và loa PC nếu không:
$ play -q -n synth 0.1 sin 880 || echo -e "\a"
sox
có sẵn cho hầu hết các distro.
then
khối bên trong watch
để thông báo cho tôi khi một điều kiện nhất định được đáp ứng. Thậm chí cho phép tôi giữ tai nghe của tôi trên. Điều này rất hữu ích với tôi.
sudo -u USER play...
play
sử dụng pulseaudio, với tư cách là người dùng. Tôi đoán nó phụ thuộc vào cấu hình hệ thống.
Một số distro có tiện ích dòng lệnh để đạt được điều này. Có lẽ bạn có thể cho chúng tôi biết bạn đang ở đâu, hoặc tìm kiếm (ví dụ như emerge -s beep
trong gentoo).
Vượt ra ngoài những tiện ích "có sẵn", bạn cũng có thể tạo một tập lệnh Perl phát ra tiếng bíp, tất cả những gì bạn cần làm là bao gồm:
<SomeCodeBefore>
print "\007";
<SomeCodeAfter>
Nếu bạn cuối cùng nhận được 'tiếng bíp', hãy thử các cách sau:
#! /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"
làm việc trong bash thay vì print "\007
trong perl?
printf '\007'
thay vì echo
.
" Bíp chỉ hoạt động nếu PC của bạn có" loa ". Nhiều máy tính xách tay / thiết bị nhỏ hiện đại không có." - tredegar .
Thay vào đó, hãy thử phát một âm thanh:
$ play xxxxx.wav
Làm việc cho tôi, khi tất cả những thứ khác thất bại.
Trên Linux, các công cụ như beep
có thể sử dụng ioctl trên thiết bị console để phát ra âm thanh nhất định. Để cụ thể hơn, beep
sẽ sử dụng KIOCSOUND
ioctl, nhưng cũng có một KDMKTONE
ioctl có thể được sử dụng để tạo ra âm thanh.
Theo tôi hiểu, cái trước bắt đầu một âm thanh kéo dài cho đến khi nó bị hủy rõ ràng, trong khi cái sau sẽ tạo ra tiếng bíp của thời lượng được xác định trước. Xem trang console_ioctl
(4) man để biết chi tiết.
Vì vậy, nếu bạn không hài lòng với những gì beep
làm, bạn có thể viết một vài dòng mã để truy cập trực tiếp các ioctls này. Giả sử bạn có toàn quyền truy cập /dev/console
, điều này có thể yêu cầu quyền root.
Trong một thiết bị đầu cuối, nhấn Ctrl+ Gvà sau đóEnter