Làm thế nào để tôi làm cho loa pc của tôi phát ra tiếng bíp


172

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/pcspkrsẽ tốt đẹp.



Câu trả lời:


124

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ừ beeptrang chủ:

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

  2. 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/ttyvà 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.

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


9
Trang chủ của beeplệnh là: johnath.com/beep Trên Ubuntu / Debian, bạn có thể cài đặt nó với apt-get install beep.
Riccardo Murri

14
Trên linux, có một phương thức badass thứ tư để phát ra tiếng bíp: dỡ bỏ pcspkrmô-đun, tải snd-pcspvà 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;)
BatchyX

8
@isomorphismes: pcspkrsnd-pcsplà 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-somethinggói, hy vọng đã được cài đặt (nếu không bạn sẽ không có kernel linux).
BatchyX

3
tiếng bíp thường hoạt động trong hộp dành cho debian nhưng tôi cần tải mô-đun để nó hoạt động trên Ubuntu
mchid

4
Như mchid đã nói, sau khi thêm mô-đun : modprobe snd-pcsp, tiếng bíp hiện đang hoạt động!
Lepe

73

Đơn giản chỉ cần lặp lại \ahoặc \07làm việc cho tôi.

$ echo -e "\a"

Điều này có thể sẽ yêu cầu pcspkrmô-đ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.

CẬP NHẬT

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

5
Nếu bạn đang sử dụng thiết bị đầu cuối X hoặc ssh'd vào máy, điều này có thể khiến thiết bị đầu cuối nhấp nháy, vì nhiều chương trình loại xterm / vt100 được định cấu hình để thực hiện điều đó cho các ký tự BEL.
Warren Young

2
Điều này có ý nghĩa nhưng nó không hoạt động với tôi trên Ubuntu 12.04.
đẳng cấu

2
@isomorphismes: đó là cho bảng điều khiển, không phải thiết bị đầu cuối X11. Đối với tiếng bíp dưới X, bạn có thể thử điều này: Askubfox.com/a/587311/11015
MestreLion

1
@isomorphismes: Tôi cũng đang sử dụng Ubuntu 12.04 và đối với tôi sudo modprobe pcspkrlà đủ để kích hoạt tiếng bíp dưới VT, thông qua printf "\a"hoặc beeptiện ích.
MestreLion

3
Không có phương pháp nào làm việc cho tôi. Ubuntu 16.04.1 LTS
ar2015

67

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 .


1
Chức năng của bạn là một lớp lót (và tương thích với Ctrl-C):timeout ${2} speaker-test --frequency ${1} --test sine
user569825

1
Không có nhu cầu thực sự để tiết kiệm pid, chỉ cần 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.
erm3nda

28
tput bel

bởi vì terminfo định nghĩa bel

           Variable                       Cap-               TCap                  Description
            String                        name               Code

   bell                                   bel                bl                audible signal
                                                                               (bell) (P)

17

Để 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.


2
+1 Tôi không biết rằng chơi có tính năng này. Tôi đã kết thúc việc sử dụng cái này trong một thenkhố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.
andyortlieb

Từ một trò chơi bash sh có thể sẽ cầnsudo -u USER play...
intika

Trên hệ thống của tôi, playsử 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.
Alexander

13

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 beeptrong 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

Tôi muốn các câu hỏi của tôi vẫn không phân biệt, sẽ echo -e "\007"làm việc trong bash thay vì print "\007trong perl?
Stefan

1
@Stefan - Tiếng bíp khá nhiều 'phổ quát'. Tuy nhiên, bạn vẫn có thể phân phối thuyết bất khả tri bằng cách sử dụng 'echo -e "\ a"' hoặc 'echo -e "\ 07"'. Chúc mừng!
wormintrude

2
Nó sẽ dễ mang theo hơn để sử dụng printf '\007'thay vì echo.
Dennis Williamson


2

Thử

tiếng vang -n Ctrl+ V Ctrl+G

Nhược điểm là điều này sẽ chỉ hoạt động khi thiết bị đầu ra là một thiết bị đầu cuối, vì vậy nó có thể không hoạt động trong một công việc định kỳ, ví dụ. (Nhưng nếu bạn đã root, bạn có thể chuyển hướng đến /dev/consoletiếng bíp ngay lập tức.)


1

Trên Linux, các công cụ như beepcó thể sử dụng ioctl trên thiết bị console để phát ra âm thanh nhất định. Để cụ thể hơn, beepsẽ sử dụng KIOCSOUNDioctl, nhưng cũng có một KDMKTONEioctl 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ì beeplà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.


-1

Trong một thiết bị đầu cuối, nhấn Ctrl+ Gvà sau đóEnter


1
Trong thiết bị đầu cuối của tôi (gnome-terminal), nó hoạt động mà không cần Enter. Cũng giống như một bài kiểm tra loa PC, điều này có vẻ tốt với tôi. Nó hoàn toàn vô dụng trong các kịch bản, mặc dù.
Palec

Downvote đáng ngạc nhiên. Điều này không hoạt động trên một số PC, mặc dù nó có thể không hoạt động.
Zzzach ...

Nó không hoạt động trên rxvt, urxvt, xterm, lxterm hoặc lxterminal, không nên thiết bị đầu cuối của tôi ít nhất là flash nếu nó có chuông trực quan?
Willem

Nó hoạt động trên xterm
Chris
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.