web-dev-qa-db-ja.com

PCスピーカーのビープ音を鳴らす方法

Bashを使用して、どのようにPCスピーカーのビープ音を鳴らすことができますか?

何かのようなもの echo 'beepsound' > /dev/pcspkr いいだろう。

185
Stefan

私は通常、多くのシステムにインストールされている小さなユーティリティbeepを使用します。このコマンドは、システムサウンドを作成するためのさまざまなアプローチを試みます。

beepマンページからサウンドを作成する方法は3つあります。

  1. シェルスクリプトでビープ音を生成する従来の方法は、次のようなシェルコマンドを使用して、ASCII BEL\007)文字を標準出力に書き込むことです。

    echo -ne '\007'
    

    これは、呼び出し元のシェルの標準出力が現在何らかの端末デバイスに送信されている場合にのみ機能します。そうでない場合、ビープ音は鳴らず、出力先のファイルが破損する可能性もあります。

  2. ビープ音が発生する他の方法があります。もう少し信頼できる方法は、/dev/ttyを開いて、そこにBEL文字を送信することです。これはI/Oリダイレクトに対して堅牢ですが、ビープ音を生成したいシェルスクリプトがX端末マネージャーから実行されているなどの理由で制御端末を持っていない場合でも失敗します。

  3. 3番目のアプローチは、Xディスプレイに接続してベルコマンドを送信することです。これはUnix端末デバイスに依存しませんが、(もちろん)Xディスプレイを必要とします。

beepは、これら3つの方法を試すだけです。

133
echox

単に\aまたは\07は私のために働きます。

$ echo -e "\a"

これには、おそらくpcspkrカーネルモジュールをロードする必要があります。これはRHELでのみテストしたので、YMMVでテストしました。

更新

Warrenがコメントで指摘したように、SSH経由でリモートでログインした場合、これは機能しない可能性があります。簡単な回避策は、出力を任意のTTYデバイス(理想的には未使用のもの)にリダイレクトすることです。例えば。:

$ echo -en "\a" > /dev/tty5
78
Shawn Chin

注:このソリューションはマザーボードではなくスピーカーからビープ音を発します。

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でシンプルな音楽を作成することができます。 このシェルスクリプト を参照してください。

76
Ryne Everett
tput bel

terminfobel

           Variable                       Cap-               TCap                  Description
            String                        name               Code

   bell                                   bel                bl                audible signal
                                                                               (bell) (P)
32
Winston Smith

soxがインストールされている場合はサウンドカードを、インストールされていない場合はPCスピーカーを使用する場合:

$ play -q -n synth 0.1 sin 880 || echo -e "\a"

soxはほとんどのディストリビューションで利用できます。

19
Alexander

一部のディストリビューションには、これを実現するためのコマンドラインユーティリティがあります。たぶん、あなたはあなたがどこにいるディストリビューションを私たちに言うか、検索するかもしれません(例えば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
13
wormintrude

ビープ音は、PCに「スピーカー」が搭載されている場合にのみ機能します。多くの最新のラップトップ/小型デバイスには搭載されていません。」 - トレデガー

代わりにサウンドを再生してみてください:

$ play xxxxx.wav

他のすべてが失敗したときに私のために働いた。

参考文献

4
Elliptical view

試す

エコー-n Ctrl+VCtrl+G

欠点は、これが出力デバイスが端末である場合にのみ機能するため、たとえばcronジョブ内では機能しない可能性があることです。 (ただし、rootの場合は、すぐにビープ音を鳴らすために/dev/consoleにリダイレクトできる場合があります。)

2
codehead

Linuxでは、 beep のようなツールは、コンソールデバイスでioctlを使用して、所定の音を出すことができます。具体的には、beepKIOCSOUND ioctlを使用しますが、サウンドの生成に使用できるKDMKTONE ioctlもあります。

私が理解しているように、前者は明確にキャンセルされるまで続くサウンドを開始しますが、後者は所定の継続時間のビープ音を生成します。詳細は the console_ioctl(4)man page を参照してください。

したがって、beepの動作に不満がある場合は、これらのioctlに直接アクセスするためのコードを数行書くことができます。 /dev/consoleへの完全なアクセス権があるとすると、ルート権限が必要になる場合があります。

2
MvG

ターミナルで、 Ctrl+G その後 Enter

0
Hitesh Chechani