コマンドプロンプトから音を出す方法

Windows のコマンドプロンプトから音を出す方法をいくつか紹介します。

動作確認環境

  • Windows 10 Home 21H1, 64bit

方法 1. 「^G」を出力して音を出す

コマンドプロンプトから「^G」を出力することで音を出すことができます。「^G」と表記していますが、これはバイナリデータの「0x07」、ASCII コードの「BEL」を意味します。

echo コマンドを使って「^G」を出力してみましょう。

  1. コマンドプロンプト (cmd.exe) を起動します。
  2. 「echo ^G」と入力し、[Enter] キーを押します。「^G」は [Ctrl] キーを押しながら [G] キーを押します。[^] キーを押してから [G] キーを押すわけではありません。

出力される音は、コントロールパネルの[サウンド]で「システムエラー」として登録されたサウンドになります。Windows API の MessageBeep(MB_ICONERROR); で再生されるサウンドと同じです。

【詳細】
「echo ^G」を実行すると、出力バッファに「0x07 0x0D 0x0A」を詰めた状態で WriteConsole 関数が呼び出されます。

方法 2. 「rundll32」コマンドで音を出す

コマンドプロンプトから、Windows 付属の「rundll32」コマンドを使って Windows API の「MessageBeep」関数を呼び出すことで音を出すことができます。

実際に試してみましょう。

  1. コマンドプロンプト (cmd.exe) を起動します。
  2. 「rundll32 user32.dll,MessageBeep」と入力し、[Enter] キーを押します。


出力される音は、コントロールパネルの[サウンド]で「一般の警告音」として登録されたサウンドになります。Windows API の MessageBeep(MB_OK); で再生されるサウンドと同じです。

【詳細】
正確には MessageBeep(MB_OK);、言い換えると MessageBeep(0); が実行されているわけではありません。rundll32 コマンドは、MessageBeep 関数の引数として、自身が内部的に生成したウィンドウのハンドルを渡します。この値は不定であり、たとえば「0x000b0694」だったり「0x000c0846」だったりします。MessageBeep 関数はこのような不適切な値を受け取ると、デフォルトのサウンドを鳴らします。それが MessageBeep(MB_OK); と同じサウンドというだけです。

方法 3. 「choice」コマンドで音を出す

Windows 付属の「choice」コマンドを使って音を出すことができます。
「choice」コマンドは [Y] や [N] などのキー入力を待ち受けるコマンドですが、規定外のキーを入力すると警告音を鳴らします。これを利用します。

実際に試してみましょう。

  1. コマンドプロンプト (cmd.exe) を起動します。
  2. 「echo XY | choice」と入力し、[Enter] キーを押します。

「choice」コマンドで入力を待ち受けている状態で、最初に無効な [X] キーを流し込んで警告音を鳴らし、続いて有効な [Y] キーを流し込んでコマンドを終了させています。
画面に [Y,N]?Y というメッセージが表示されるのが邪魔な場合は、「echo XY | choice > nul」とし、nul にリダイレクトしてください。

【詳細】
「choice」コマンドの警告音は Beep(1500, 500); です。すなわち、1500 ヘルツ 500 ミリ秒です。