古いPCの時から、マザーボード上にはほとんどブザーがついており、BIOSなどが使うことがあります。
そのブザー、「なにかの用途に使えるかも」って思ったりしたことはないですか?
でも調べてみてもあまり有力な情報がありません。(実際、ブザーの需要はないので)
ですが、ちょっとコマンドを打てば、ブザーはLinux上から鳴らせるようになります。
ブザーがあるか調べるには
Ubuntuなどを導入している場合、GRUBなどのブートローダーで、「memtest86+」という項目があると思います。
memtest86+というのはご存知の通り、メモリ診断ツールです。
これを起動するとき、マザーボードにブザーがあると「ピポッ」となるのです。
それを利用して、チェックしてみてください。
※ベルを鳴らすecho -e '\a'
というのがありますが、それはPulseAudioなどで模擬的に鳴らしています。
導入方法
ここではUbuntuを前提に説明します。
まず、端末を開いてから
sudo apt install beep
と入力してください。beepというパッケージがインストールされます。
※aptコマンドがエラーになる場合は、従来のapt-getを使ってください。
これで利用可能になりました。
beepコマンドを使う
先ほどのbeepパッケージをインストールすると、beepというコマンドが利用可能になります。
ただ普通にbeep
と打つと、440Hzくらいの音がブザーから出ます。
※鳴らない場合は、最後のトラブルシューティングをご覧ください
でもこれだけでは面白くありませんね。
beepコマンドでは、パラメータをいじると、周波数や鳴らす時間も変えることができます。
詳しいヘルプはbeep --help
を実行してください。
周波数を変えるには
周波数を指定するには -f [周波数(Hz)] を指定します。
ただし、大抵の場合は50Hzくらいからしか音は出ません。
何回かbeep -f 200
とかbeep -f 1400
などとやって遊んでみてください。
ちなみに、beep -f 2000; beep -f 1000
を実行すると、なつかしいあの音が出ます。
Pythonで次のようなプログラムを作ると、一気に鳴らせます。
#!/usr/bin/python3
import os, time
Hzs = [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1500, 2000, 2500]
for i in Hzs:
os.system("beep -f " + str(i) + " -l 50")
鳴らす時間を変えるには
周波数は変えられるようになりましたが、長さはデフォルトなので「ピーピーピー」とあまりかっこよくありません。
もちろん、変えることができます。-l [長さ(ミリ秒)] で変えられます。
例えばbeep -f 300 -l 2000
を実行すると、2秒間鳴りっぱなしになります。
逆にbeep -f 300 -l 100
とすれば、「ピッ」という短い音にすることができます。
10ms以下はあまり聞こえません。
まとめ
ブザーを鳴らすにはbeep
周波数を変えるにはbeep -f [周波数(Hz)]
鳴らす時間を変えるにはbeep -l [時間(ミリ秒)]
100Hzを1.5秒鳴らしたいときはbeep -f 100 -l 1500
このコマンドを使って、通知に使ったり、エラー発生時などに鳴らすように工夫してみてください。
トラブルシューティング:beepコマンドで音が鳴らない
筆者も経験していますが、ほとんどのLinuxでは、beepコマンドが使えても鳴らない場合があります。
原因はモジュールが読み込まれていないからです。
ブザーを鳴らすときは、pcspkrというモジュールが仲介しています。そのため、pcspkrがロードされていないと鳴りません。
Ubuntuなどではデフォルトでpcspkrを読み込まない設定になっているので、設定を変える必要があります。
モジュールなどを読み込むかは、/etc/modprobe.d にあるファイル群で管理されています。
そのうちのblacklist.confのブラックリストにpcspkrが登録されているので、コメントアウトしましょう。
nanoエディタが使える人は端末を開き、sudo nano /etc/modprobe.d/blacklist.conf
を実行し、/etc/modprobe.d/blacklist.confをroot権限で編集してください。
49行目にblacklist pcspkr
という行があるはずです。それを**#blacklist pcspkr
**に変えて、保存します。
これにより、PC起動時に自動でpcspkrが読み込まれます。
それから、**sudo modprobe pcspkr
**を実行します。
modprobeコマンドはモジュールを読み込むコマンドです。
これでbeepコマンドでなるようになりました。
それでも鳴らない場合はマザーボードにブザーがないか、壊れています。
またはpcspkrモジュールがI/Oコントローラーとうまく通信できていないとか、ブザーを見つけられなかった、ということかもしれません。
アンロード(無効化)するにはsudo modprobe -r pcspkr
とします。
さきほどのブラックリストでコメントアウトしましたが、それを元に戻せばPC起動時にpcspkrは読み込まれません。