.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のシステム・サウンドはコントロール・パネル]の[サウンドとオーディオ デバイス]より確認および変更できる。 | |||||||||||||||
|
従来の.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メソッドを呼び出して、システム・サウンドを再生する。具体的なコードは次のとおりだ。
|
||
システム・サウンドを再生するサンプル・プログラムのコード(上: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メソッドを使ってドレミファソラシドをビープ音で演奏する例である。
|
||
PCサウンドを鳴らすサンプル・プログラムのコード(上:C#、下:VB) | ||
ボタンをクリックしたときに発生するClickイベントのハンドラ・メソッドを追加して、その中にPCサウンドの呼び出しを実装している。 |
このように、「Console.Beep(<周波数>、<時間>)」というコードをたった1行記述するだけで、簡単にPCサウンドが鳴らせる。
利用可能バージョン:.NET Framework 2.0のみ カテゴリ:Windowsフォーム 処理対象:サウンド カテゴリ:クラス・ライブラリ 処理対象:サウンド 使用ライブラリ:SystemSoundクラス(System.Media名前空間) 使用ライブラリ:SystemSoundsクラス(System.Media名前空間) 使用ライブラリ:Consoleクラス(System名前空間) 関連TIPS:VB.NET固有の関数をC#で使用するには? 関連TIPS:Win32 APIやDLL関数を呼び出すには? |
|
「.NET TIPS」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|