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


172

bashを使用して、PCスピーカーのビープ音を鳴らすにはどうすればよいですか?

何かecho 'beepsound' > /dev/pcspkrがいいだろう。



回答:


124

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

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

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

    echo -ne '\007'
    

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

  2. ビープ音を発生させる方法は他にもあります。もう少し信頼できる方法は/dev/tty、BELキャラクターを開いて送信することです。これは、I / Oリダイレクトに対して堅牢ですが、ビープ音を生成するシェルスクリプトに制御端末がない場合、たとえばXウィンドウマネージャーから実行されるため、失敗します。

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

beep これらの3つの方法を単に試してみます。


9
beepコマンドのホームページは次のとおりです。johnath.com / beep Ubuntu / Debianでは、でインストールできますapt-get install beep
リッカルドムリ

14
Linuxには、ビープ音を鳴らす4つ目の方法がありpcspkrます。モジュールをアンロードし、をロードするとsnd-pcsp、昔ながらのトリックを使って実際に内部スピーカーにデジタルサウンドを供給するalsaサウンドカードができました。圧電式内蔵スピーカーでは安っぽい結果が得られますが、従来の内蔵スピーカーでは、品質が非常に優れています。このようにして、ビープ音をより創造的にすることができます;)
BatchyX

8
@isomorphismes:pcspkrsnd-pcspされているモジュールではなくパッケージ。modprobe/ modprobe -r/ lsmodを使用して操作します。情報としては、それらはlinux-image-somethingパッケージに含まれています。パッケージは既にインストールされています(または、Linuxカーネルがない場合)。
BatchyX

3
通常、ビープ音はdebianの場合は問題なく動作しますが、ubuntuで動作するにはこのモジュールを読み込む必要がありました
-mchid

4
mchidが言ったように、モジュールを追加した後:modprobe snd-pcsp、ビープ音は動作しています!
lepe

73

単にエコーする\a\07、私のために動作します。

$ echo -e "\a"

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

更新

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

$ echo -en "\a" > /dev/tty5

5
X端末を使用している場合、またはマシンにsshした場合、多くのxterm / vt100タイプのプログラムがBELキャラクタ用に構成されているため、端末がフラッシュするだけです。
ウォーレンヤング

2
これは理にかなっていますが、Ubuntu 12.04では動作しませんでした。
同型

2
@isomorphismes:これはコンソール用であり、X11端末用ではありません。Xでのビープ音については、次を試してください:askubuntu.com/a/587311/11015
MestreLion

1
@isomorphismes:私はまた、Ubuntuの12.04を使用して、そして私のためだsudo modprobe pcspkrのいずれかを介して、VTの下にビープ音を有効にするには十分だったprintf "\a"beepのユーティリティ。
メストレリオン

3
どの方法も私にはうまくいきません。Ubuntu 16.04.1 LTS
ar2015

67

注:このソリューションでは、マザーボードではなくスピーカーからビープ音が鳴ります

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このシェルスクリプトを参照してください。


1
ワンライナーとしての機能(およびCtrl-C互換):timeout ${2} speaker-test --frequency ${1} --test sine
user569825

1
pidを保存する必要はありspeaker-test -t sine -f 1000 -l 1 & sleep .2 && kill -9 $! ません。同じことを行うだけです。とにかく、@ user569825のメソッドの方が優れています。
erm3nda


17

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

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

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


2
+1プレイにこの機能があることは知りませんでした。特定の条件が満たされたときに通知するために、thenブロック内でこれを使用することになりましたwatch。ヘッドフォンをつけたままにしておきます。これは私にとって非常に役に立ちました。
-andyortlieb

bashからshプレイがおそらく必要になりますsudo -u USER play...
-intika

私のシステムでplayは、ユーザーとしてpulseaudioを使用しています。システムの構成に依存すると思います。
アレクサンダー

13

一部のディストリビューションには、これを実現するコマンドラインユーティリティがあります。たぶん、あなたはどんなディストリビューションにいるのか教えてくれたり、検索したりすることができます(たとえば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

私の質問は、偏見にとらわれず、perl echo -e "\007"ではなくbashで動作しprint "\007ますか?
ステファン

1
@ステファン-ビープ音はほとんど「ユニバーサル」です。ただし、「echo -e "\ a"」または「echo -e "\ 07"」を使用すると、ディストリビューションにとらわれないままにすることができます。乾杯!
wormintrude

2
printf '\007'代わりに使用する方が移植性が高くなりますecho
デニスウィリアムソン


2

試してみる

エコー-n Ctrl+ V Ctrl+G

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


1

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

私が理解しているように、前者は明示的にキャンセルされるまで続くサウンドを開始しますが、後者は所定の持続時間のビープ音を生成します。詳細については、console_ioctl(4)のマニュアルページを参照してください。

そのため、何に満足してbeepいないのかを知りたい場合は、これらのioctlに直接アクセスするコードを数行書くことができます。に完全なアクセス権があると仮定すると/dev/console、root権限が必要になる場合があります。


-1

ターミナルで、Ctrl+ Gを押してから、Enter


1
私の端末(gnome-terminal)では、Enterなしで機能します。PCスピーカーのテストのように、これは私には問題ありません。ただし、スクリプトではまったく役に立ちません。
パレック

驚くべきダウン投票。これは一部のPCで動作しますが、すべてで動作するとは限りません。
Zzzach ...

rxvt、urxvt、xterm、lxterm、またはlxterminalでは動作しません。視覚的なベルがある場合、少なくとも私の端末は点滅しませんか?
ウィレム

xtermで動作します
Chris
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.