bashを使用して、PCスピーカーのビープ音を鳴らすにはどうすればよいですか?
何かecho 'beepsound' > /dev/pcspkr
がいいだろう。
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つの方法を単に試してみます。
pcspkr
ます。モジュールをアンロードし、をロードするとsnd-pcsp
、昔ながらのトリックを使って実際に内部スピーカーにデジタルサウンドを供給するalsaサウンドカードができました。圧電式内蔵スピーカーでは安っぽい結果が得られますが、従来の内蔵スピーカーでは、品質が非常に優れています。このようにして、ビープ音をより創造的にすることができます;)
pcspkr
とsnd-pcsp
されているモジュールではなくパッケージ。modprobe
/ modprobe -r
/ lsmod
を使用して操作します。情報としては、それらはlinux-image-something
パッケージに含まれています。パッケージは既にインストールされています(または、Linuxカーネルがない場合)。
modprobe snd-pcsp
、ビープ音は動作しています!
単にエコーする\a
か\07
、私のために動作します。
$ echo -e "\a"
これには、おそらくpcspkr
カーネルモジュールをロードする必要があります。これはRHELでしかテストしていませんので、YMMVです。
Warrenがコメントで指摘したように、SSH経由でリモートでログインした場合、これは機能しない場合があります。簡単な回避策は、出力をTTYデバイス(理想的には未使用のデバイス)にリダイレクトすることです。例えば:
$ echo -en "\a" > /dev/tty5
sudo modprobe pcspkr
のいずれかを介して、VTの下にビープ音を有効にするには十分だったprintf "\a"
かbeep
のユーティリティ。
Ubuntu 16.04.1 LTS
注:このソリューションでは、マザーボードではなくスピーカーからビープ音が鳴ります。
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
}
frequencyおよびduration引数で呼び出されます:
$ _alarm 400 200
これを念頭に置いて、で簡単な音楽を作成することができますspeaker-test
。このシェルスクリプトを参照してください。
timeout ${2} speaker-test --frequency ${1} --test sine
speaker-test -t sine -f 1000 -l 1 & sleep .2 && kill -9 $!
ません。同じことを行うだけです。とにかく、@ user569825のメソッドの方が優れています。
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
ほとんどのディストリビューションで利用可能です。
then
ブロック内でこれを使用することになりましたwatch
。ヘッドフォンをつけたままにしておきます。これは私にとって非常に役に立ちました。
sudo -u USER play...
play
は、ユーザーとしてpulseaudioを使用しています。システムの構成に依存すると思います。
一部のディストリビューションには、これを実現するコマンドラインユーティリティがあります。たぶん、あなたはどんなディストリビューションにいるのか教えてくれたり、検索したりすることができます(たとえばemerge -s beep
、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
echo -e "\007"
ではなくbashで動作しprint "\007
ますか?
printf '\007'
代わりに使用する方が移植性が高くなりますecho
。
「ビープ音は、PCに「スピーカー」がある場合にのみ機能します。 最近のラップトップ/小型デバイスの多くには、スピーカーがありません。」- トレデガー。
代わりにサウンドを再生してみてください。
$ play xxxxx.wav
他のすべてが失敗したとき、私のために働いた。
Linuxでは、などのツールbeep
はコンソールデバイスでioctlを使用して特定の音を発することができます。具体的にbeep
は、KIOCSOUND
ioctl を使用しますが、KDMKTONE
サウンドの生成に使用できるioctl もあります。
私が理解しているように、前者は明示的にキャンセルされるまで続くサウンドを開始しますが、後者は所定の持続時間のビープ音を生成します。詳細については、console_ioctl
(4)のマニュアルページを参照してください。
そのため、何に満足してbeep
いないのかを知りたい場合は、これらのioctlに直接アクセスするコードを数行書くことができます。に完全なアクセス権があると仮定すると/dev/console
、root権限が必要になる場合があります。
ターミナルで、Ctrl+ Gを押してから、Enter