.NET TIPS

ビープ音などのシステム・サウンドを鳴らすには?[2.0のみ、C#、VB]

デジタルアドバンテージ 一色 政彦
2006/04/21

 .NET Framework 1.xのクラス・ライブラリの機能ではビープ音を鳴らせなかった。ただし一口に「ビープ音」といっても、次の2種類があることに注意してほしい。

(1)Windowsシステムが管理するサウンド(以降、システム・サウンド)
(2)マシンに内蔵されているブザーの音(以降、PCサウンド)

 .NET Framework 1.xでは、このどちらのビープ音も鳴らせなかったのだ。しかし.NET Framework 2.0ではこれらのサウンド(ビープ音)を鳴らすためのメソッドが新たに追加されており、非常に簡単にこの処理を実装できるようになっている。

 そこで本稿では、前半で(1)Windowsのシステム・サウンドを鳴らす方法について、後半で(2)ブザー音のPCサウンドを鳴らす方法について解説しよう。

■(1)Windowsのシステム・サウンド

 Windowsが用いる主なシステム・サウンドには次のような音がある。

  • Beep音(Windowsの「一般の警告音」で、いわゆる「ビープ音」)
  • Exclamation音(Windowsの「メッセージ (警告)」の音)
  • Asterisk音(Windowsの「メッセージ (情報)」の音)
  • Question音(Windowsの「メッセージ (問い合わせ)」の音)
  • Hand音(Windowsの「システム エラー」の音)

 これらのシステム・サウンドは、Windowsの[コントロール パネル]の[サウンドとオーディオ デバイス]より確認および変更することができる。具体的には次の画面の内容を参照してほしい。

Windowsが用いる主なシステム・サウンドの確認と変更
Windowsのシステム・サウンドはコントロール・パネル]の[サウンドとオーディオ デバイス]より確認および変更できる。
  [サウンド]タブをクリックする。
  [プログラム イベント]から音を鳴らすイベントを選択する。この例では「メッセージ (情報)」を選択しているが、先ほど示したWindowsの「一般の警告音」「メッセージ (警告)」「メッセージ (情報)」「メッセージ (問い合わせ)」「システム エラー」などを選択できる。
  [プログラム イベント]に対応する[サウンド](.wavファイル)を選択する。なお「メッセージ (問い合わせ)」はデフォルトではサウンドが設定されていない(=音が鳴らない)。
  このボタンをクリックすると、サウンドを再生できる。選択されているサウンドがどのような音なのかを確認したい場合に利用する。
  すべてのサウンド設定が完了したら[OK]ボタンを押す。これにより設定が保存される。

 従来の.NET Framework 1.xでこのようなシステム・サウンドを再生するには、Win32 APIのMessageBeep関数を使うか(参考:「C#入門:第20回 実行時に参照可能な属性」の「Win32 APIの呼び出し」の項目)、あるいはVisual Basic(VB)ランタイム・ライブラリにあるBeep関数を使用するしかなかった(参考:「TIPS:VB.NET固有の関数をC#で使用するには?」。ただしBeep関数は引数がないので、Windowsの「一般の警告音」しか鳴らせない)。

■SystemSoundクラスとSystemSoundsクラス

 .NET Framework 2.0では、上記に示したシステム・サウンドそれぞれに対応するSystemSoundクラス(System.Media名前空間)のオブジェクトが定義されている。

 これらのSystemSoundオブジェクトは、SystemSoundsクラス(System.Media名前空間。※クラス名の最後に「s」が付くことに注意)の静的プロパティから取得できる。具体的には次のプロパティである。

  • SystemSounds.Beepプロパティ
  • SystemSounds.Exclamationプロパティ
  • SystemSounds.Asteriskプロパティ
  • SystemSounds.Questionプロパティ
  • SystemSounds.Handプロパティ

 実際にシステム・サウンドを再生するには、これらのプロパティから取得したSystemSoundオブジェクトのPlayメソッドを呼び出すだけでよい。このメソッドはパラメータを持たず、戻り値もない(=void型)。

 以上が理解できたらさっそくサンプル・プログラムを作ってみよう。次の画面は、各ボタンをクリックすることで、これらのシステム・サウンドを再生するサンプル・プログラムである。

システム・サウンドを再生するサンプル・プログラムの実行画面
各ボタンをクリックするとシステム・サウンドにようるビープ音が鳴る。

 このサンプル・プログラムでは、先ほど示した5つの静的プロパティにより取得したSystemSoundオブジェクトのPlayメソッドを呼び出して、システム・サウンドを再生する。具体的なコードは次のとおりだ。

using System.Media;

private void buttonBeep_Click(object sender, EventArgs e)
{
  SystemSounds.Beep.Play();
}

private void buttonExclamation_Click(object sender, EventArgs e)
{
  SystemSounds.Exclamation.Play();
}

private void buttonAsterisk_Click(object sender, EventArgs e)
{
  SystemSounds.Asterisk.Play();
}

private void buttonQuestion_Click(object sender, EventArgs e)
{
  SystemSounds.Question.Play();
}

private void buttonHand_Click(object sender, EventArgs e)
{
  SystemSounds.Hand.Play();
}
Imports System.Media

Private Sub buttonBeep_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buttonBeep.Click
  SystemSounds.Beep.Play()
End Sub

Private Sub buttonExclamation_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buttonExclamation.Click
  SystemSounds.Exclamation.Play()
End Sub

Private Sub buttonAsterisk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buttonAsterisk.Click
  SystemSounds.Asterisk.Play()
End Sub

Private Sub buttonQuestion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buttonQuestion.Click
  SystemSounds.Question.Play()
End Sub

Private Sub buttonHand_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buttonHand.Click
  SystemSounds.Hand.Play()
End Sub
システム・サウンドを再生するサンプル・プログラムのコード(上:C#、下:VB)
各ボタンをクリックしたときに発生するClickイベントのハンドラ・メソッドを追加して、その中にシステム・サウンドの呼び出しを実装している。

 このように、「SystemSounds.Xxxxx.Play()」というコードをたった1行記述するだけで、簡単にシステム・サウンドが鳴らせる。

 またVBでは、次のようにMy機能によってもシステム・サウンドを再生できる。その際、My機能のメソッドのパラメータにSystemSoundオブジェクトを指定する。

My.Computer.Audio.PlaySystemSound(SystemSounds.Beep)

 ただしMyを使った方が、このように記述が少し冗長になってしまう。

■(2)PCサウンド(マシンに内蔵されているブザーの音)

 次にPCサウンドだが、これは先ほどのシステム・サウンドと違ってメロディアスな音にはならず、電子的に作り出したブザー音となる。しかもパソコン本体に内蔵されたブザーから音が鳴るため、例えば次のような場面での利用が想定される(以下で説明するが、このため、主にコンソール・アプリケーションを構築するConsoleクラスに、PCサウンドを鳴らすメソッドが実装されているのだろう)。

  • 深刻なシステム・エラー(例えば、ハードウェア・エラーなど)
  • Windowsオペレーティング・システム(GUI)以外での操作エラー

 従来の.NET Framework 1.xでこのようなPCサウンドを鳴らすには、Win32 APIのBeep関数を使うしかなかった(参考:「TIPS:Win32 APIやDLL関数を呼び出すには?」)。

■Consoleクラスの静的なBeepメソッド

 .NET Framework 2.0では、Consoleクラス(System名前空間)に静的なBeepメソッドが追加されており、これを使えばPCサウンドを鳴らせるようになっている。

 このメソッドの第1パラメータには音の周波数(単位はHz:ヘルツ)を37〜32767Hzの範囲で指定し、第2パラメータに音の持続時間をミリ秒(ms:ミリセカンド)単位で指定する。戻り値はない(=void型)。また、パラメータを指定しないバージョンのオーバーロード・メソッドも用意されており、これを利用した場合は、自動的に音の周波数は800Hzに、音の持続時間は200msになる

 次のサンプル・プログラムは、Console.Beepメソッドを使ってドレミファソラシドをビープ音で演奏する例である。

using System;

private void buttonPCBeep_Click(object sender, EventArgs e)
{
  Console.Beep(262, 400);  // ド
  Console.Beep(294, 400);  // レ
  Console.Beep(330, 400);  // ミ
  Console.Beep(349, 400);  // ファ
  Console.Beep(392, 400);  // ソ
  Console.Beep(440, 400);  // ラ
  Console.Beep(494, 400);  // シ
  Console.Beep(523, 400);  // ド
}
Imports System

Private Sub buttonPCBeep_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buttonBeep.Click
  Console.Beep(262, 400)  ' ド
  Console.Beep(294, 400)  ' レ
  Console.Beep(330, 400)  ' ミ
  Console.Beep(349, 400)  ' ファ
  Console.Beep(392, 400)  ' ソ
  Console.Beep(440, 400)  ' ラ
  Console.Beep(494, 400)  ' シ
  Console.Beep(523, 400)  ' ド
End Sub
PCサウンドを鳴らすサンプル・プログラムのコード(上:C#、下:VB)
ボタンをクリックしたときに発生するClickイベントのハンドラ・メソッドを追加して、その中にPCサウンドの呼び出しを実装している。

 このように、「Console.Beep(<周波数>、<時間>)」というコードをたった1行記述するだけで、簡単にPCサウンドが鳴らせる。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:Windowsフォーム 処理対象:サウンド
カテゴリ:クラス・ライブラリ 処理対象:サウンド
使用ライブラリ:SystemSoundクラス(System.Media名前空間)
使用ライブラリ:SystemSoundsクラス(System.Media名前空間)
使用ライブラリ:Consoleクラス(System名前空間)
関連TIPS:VB.NET固有の関数をC#で使用するには?
関連TIPS:Win32 APIやDLL関数を呼び出すには?

この記事と関連性の高い別の.NET TIPS
コンソール・アプリケーションでビープ音を鳴らすには?
WAVEサウンド(.wavファイル)を再生するには?
Win32 APIやDLL関数を呼び出すには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間