Bashを使用して、どのようにPCスピーカーのビープ音を鳴らすことができますか?
何かのようなもの echo 'beepsound' > /dev/pcspkr
いいだろう。
私は通常、多くのシステムにインストールされている小さなユーティリティbeep
を使用します。このコマンドは、システムサウンドを作成するためのさまざまなアプローチを試みます。
beep
マンページからサウンドを作成する方法は3つあります。
シェルスクリプトでビープ音を生成する従来の方法は、次のようなシェルコマンドを使用して、ASCII BEL
(\007
)文字を標準出力に書き込むことです。
echo -ne '\007'
これは、呼び出し元のシェルの標準出力が現在何らかの端末デバイスに送信されている場合にのみ機能します。そうでない場合、ビープ音は鳴らず、出力先のファイルが破損する可能性もあります。
ビープ音が発生する他の方法があります。もう少し信頼できる方法は、/dev/tty
を開いて、そこにBEL文字を送信することです。これはI/Oリダイレクトに対して堅牢ですが、ビープ音を生成したいシェルスクリプトがX端末マネージャーから実行されているなどの理由で制御端末を持っていない場合でも失敗します。
3番目のアプローチは、Xディスプレイに接続してベルコマンドを送信することです。これはUnix端末デバイスに依存しませんが、(もちろん)Xディスプレイを必要とします。
beep
は、これら3つの方法を試すだけです。
単に\a
または\07
は私のために働きます。
$ echo -e "\a"
これには、おそらくpcspkr
カーネルモジュールをロードする必要があります。これはRHELでのみテストしたので、YMMVでテストしました。
Warrenがコメントで指摘したように、SSH経由でリモートでログインした場合、これは機能しない可能性があります。簡単な回避策は、出力を任意のTTYデバイス(理想的には未使用のもの)にリダイレクトすることです。例えば。:
$ echo -en "\a" > /dev/tty5
注:このソリューションはマザーボードではなくスピーカーからビープ音を発します。
ALSAには、ビープ音の生成に使用できるコマンドラインスピーカーテストトーンジェネレーター speaker-test が付属しています。
$ speaker-test -t sine -f 1000 -l 1
このArch Linuxフォーラムのスレッド を参照してください。
ただし、ビープ音の長さは任意ですが、次のように制御できます。
$ ( speaker-test -t sine -f 1000 )& pid=$! ; sleep 0.1s ; kill -9 $pid
さらに一歩進んで、この関数でビープ音を出力することができます:
_alarm() {
( \speaker-test --frequency $1 --test sine )&
pid=$!
\sleep 0.${2}s
\kill -9 $pid
}
これは頻度と期間の引数で呼び出されます:
$ _alarm 400 200
これを念頭に置いて、speaker-test
でシンプルな音楽を作成することができます。 このシェルスクリプト を参照してください。
tput bel
terminfoはbel
を
Variable Cap- TCap Description
String name Code
bell bel bl audible signal
(bell) (P)
sox
がインストールされている場合はサウンドカードを、インストールされていない場合はPCスピーカーを使用する場合:
$ play -q -n synth 0.1 sin 880 || echo -e "\a"
sox
はほとんどのディストリビューションで利用できます。
一部のディストリビューションには、これを実現するためのコマンドラインユーティリティがあります。たぶん、あなたはあなたがどこにいるディストリビューションを私たちに言うか、検索するかもしれません(例えばemerge -s beep
in gentoo)。
「利用可能な」ユーティリティを超えて、ビープ音を鳴らすPerlスクリプトを作成することもできます。
<SomeCodeBefore>
print "\007";
<SomeCodeAfter>
「ビープ音」が発生する場合は、以下を試してください。
#! /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
「ビープ音は、PCに「スピーカー」が搭載されている場合にのみ機能します。多くの最新のラップトップ/小型デバイスには搭載されていません。」 - トレデガー 。
代わりにサウンドを再生してみてください:
$ play xxxxx.wav
他のすべてが失敗したときに私のために働いた。
試す
エコー-n Ctrl+VCtrl+G
欠点は、これが出力デバイスが端末である場合にのみ機能するため、たとえばcronジョブ内では機能しない可能性があることです。 (ただし、rootの場合は、すぐにビープ音を鳴らすために/dev/console
にリダイレクトできる場合があります。)
Linuxでは、 beep
のようなツールは、コンソールデバイスでioctlを使用して、所定の音を出すことができます。具体的には、beep
はKIOCSOUND
ioctlを使用しますが、サウンドの生成に使用できるKDMKTONE
ioctlもあります。
私が理解しているように、前者は明確にキャンセルされるまで続くサウンドを開始しますが、後者は所定の継続時間のビープ音を生成します。詳細は the console_ioctl
(4)man page を参照してください。
したがって、beep
の動作に不満がある場合は、これらのioctlに直接アクセスするためのコードを数行書くことができます。 /dev/console
への完全なアクセス権があるとすると、ルート権限が必要になる場合があります。
ターミナルで、 Ctrl+G その後 Enter