カクタスソフトウェア
カクタスソフトウェア
サウンド MIDI マルチメディア アプリケーション

Windowsフォームアプリケーション(.NET C#バージョン)

このセクションでは、Visual Studiuo 2008を用いて、.NET C#で動作するWindowsフォームアプリケーションを作成します。

新しいプロジェクトを作成する

メニューから、ファイル(F) -> 新規作成(N) -> プロジェクト(P) を選び、「新しいプロジェクト」ダイアログを開きます。C#を利用するので、プロジェクトの種類(P)から「Visual C#」を選択します。右側のペインには、開発可能なテンプレート一覧が表示されます。

新規プロジェクト作成に必要な項目は、プロジェクト名(N)・場所(L)・ソリューション名(M)の3箇所です。

プロジェクト名(N)は、アプリケーションの名前と考えて良いでしょう。ここで設定した名前がデフォルトのアプリケーション名になります。ソリューションとは、プロジェクトの入れ物です。一つのアプリケーションを複数のプロジェクトに分割して開発したり、複数のアプリケーションをまとめて管理するなど、いろいろな運用が可能です。「ソリューションのディレクトリを作成(D)」をチェックすると、ソリューション名(M)のディレクトリが作成され、その下に関連するすべてのファイルが作成されます。チェックをはずすと、場所(L)で指定されたディレクトリの下に関連するファイルが作成されます。

このサンプルプログラムは、どの.NET Frameworkのバージョンでも動作します。ここではデフォルトの3.5に設定します。

テンプレートの選択

プロジェクトの種類(P)で、Visual C#の下のWindowsをクリックします。右側のペインに、C#を用いたWindowsアプリケーション用のテンプレートが表示されます。ここでは、Windowsフォームアプリケーションを選びます。

プロジェクトを作成する

プロジェクト名(N)をここでは「PlaySoundCS」とします。ソリューション名は「SoundApp」とし、ソリューションのディレクトリを作成(D)にチェックを入れます。場所(L)は、デフォルトで構いませんが、特に設定したい場所があれば設定してください。入力が終わったら、OKボタンをクリックします。

これで場所(L)で示されたディレクトリにSoundAppというサブディレクトリが作成され、その中にソリューションが作成されます。そして、SoundAppの下にPlaySoundCSという名前のプロジェクトが作成されます。

既存のソリューションに追加する

C++のサンプルをすでに作成している場合、ソリューションSoundAppに今回のプロジェクトを追加することができます。

すでに存在するソリューションに新しいプロジェクトを追加するときは、以下のように行います。

メニューから、ファイル(F) -> 開く(O) -> プロジェクト/ソリューション(P) を選び「プロジェクトを開くダイアログ」を開きます。ダイアログから既存のソリューション、例えば「SoundApp.sln」を選択します。既存のソリューションが開きます。

次に、メニューから、ファイル(F) -> 追加(D) -> 新しいプロジェクト(N) を選び「新しいプロジェクトの追加」ダイアログを開きます。

テンプレートの選択

プロジェクトの種類(P)で、Visual C#の下のWindowsをクリックします。右側のペインからWindowsフォームアプリケーションを選びます。

プロジェクトを作成する

プロジェクト名(N)を「PlaySoundCS」と入力します。場所(L)は、既存のプロジェクトを示しているので変更の必要はありません。入力が終わったら、OKボタンをクリックします。

プロジェクトの管理

これ以降、PlaySoundCSの開発を行うので、PlaySoundCSを起動プロセスとして設定します。

ソリューションエクスプローラーでPlaySoundCSを選択します。メニューから、プロジェクト(P) -> スタートアッププロジェクトに設定(A)を選択します。マウスの右ボタンをクリックし、コンテキストメニューからスタートアッププロジェクトに設定(A)を選択することも可能です。

こでで以下の様な画面になっているか確認してください。なっていれば、準備完了です。

ソリューションエクスプローラーには、3つのプロジェクトが表示されています。それぞれのプロジェクトは、独立したアプリケーションですが、一つのソリューションで管理することができます。PlaySoundCSがボールドで表示されています。これは、PlaySoundCSが起動プロセスであることを示しています。

画面を作成する

最初にウィンドウの大きさを設定します。サンプルの例では、320×150にしました。設定方法は、プロパティウィンドウの「Size」欄に「320,150」と入力します。

ウィンドウが表示されていないときは、以下の手順でウィンドウを表示させることができます。

ソリューションエクスプローラーの「Form1.cs」をダブルクリックします。

コントロールを配置する

ツールボックスの「TextBox」を選択し、ウィンドウ画面をクリックします。ツールボックスからダイアログ画面にコントロールをドラッグ&ドロップすることもできます。

もし、ツールボックスが表示されていないときは、メニューの表示(V)からツールボックス(X)を選択してください。

その後、コントロールを使いやすい位置とサイズに変更します。位置の変更は、マウスでコントロール全体をドラッグします。コントロールの端をつかんでドラッグすると、サイズを変更することができます。

次に「Button」を選択し、ウィンドウ画面にドロップします。

ボタンのサイズとキャプションを変更するために、プロパティウィンドウを用います。Size欄に「19,19」と入力します。Text欄に3点リーダー「…」と入力します。変更が済んだら、ボタンをドラッグして、テキストボックスの右側に配置します。

同様の方法でプレイボタンとOKボタンを配置します。サイズは自由です。ここではデフォルトのままとしました。プレイボタンのTextを「Play」、OKボタンのTextを「OK」とします。

画面の設計は、これで終わりです。

イベントを関連付ける

次にボタンをクリックしたとき、サービス関数がコールされる仕組みを作ります。

ファイルダイアログ

最初に、ファイル選択ダイアログ用ボタン(エディットボックス右に配置したもの)を選択します。

プロパティビューが「button1」を表示していることを確認します。次に、プロパティビューの上にある黄色の雷を模したボタンをクリックします。このボタンをクリックすると、コントロールに関連するイベントを設定することができます。ここでは、ボタンをクリックしたとき、イベントを発生させたいので「Click」を選択します。

右側のペインに関数名を入力することができます。デフォルトで良いときは、ダブルクリックします。ここではデフォルトとしました。button1_Click関数の雛形が追加され、ソースコードが表示されます。

C#には、.hファイルが存在しません。すべてのコードは、.csファイルに記述します。

このボタンでは、ファイルダイアログを利用したいので、OpenFileDialogの自動挿入機能を使うことにします。デザイン画面に戻るために、「Form1.cs[デザイン]」タブをクリックします。

ツールボックスの下の方にあるダイアログセクションを開きます。OpenFileDialogの欄をダブルクリックします。そうすると「openFileDialog1」というインスタンスを作成するコードが自動的に生成されます。

openFileDialog1を選択し、いくつかプロパティを設定します。画面のデザインに表示されないインスタンス等は、画面下に設けられた特別な枠に表示されます。

プロパティビューがopenFileDialog1を表示していることを確認してください。ここでデフォルトの拡張を「wav」とします。FileNameの初期値をクリアします。そしてファイルフィルターを以下のように設定します。

WAV File (*.wav)|*.wav|All Files (*.*)|*.*

button1_Click関数を次のように実装します。

        private void button1_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = openFileDialog1.FileName;
            }
        }

ShowDialog()関数でダイアログを表示します。OKボタンでダイアログを終了すると、「DialogResult.OK」が戻ります。ファイルダイアログのファイル名を、テキストボックスのテキスト変数へ代入します。

プレイボタン

同様のやり方で、プレイボタンの実装を行います。ダイアログのプレイボタンを選択します。プロパティビューが「button2」を表示していることを確認します。プロパティビューのイベントボタンをクリックし、「Click」をダブルクリックします。

button2_Click関数の雛形が追加され、ソースコードが表示されます。

button2_Click関数を次のように実装します。

        private void button2_Click(object sender, EventArgs e)
        {
            PlaySound(textBox1.Text, this.Handle, 0);
        }

OKボタン

OKボタンは、配置した段階では一般的なボタンと変わりありません。クリックによってアプリケーションが自動的に終了するわけではありません。そこで、クリックでアプリケーションが終了するようプログラムします。

ウィンドウのOKボタンを選択し、プロパティビューが「button3」を表示していることを確認します。プロパティビューのイベントボタンをクリックし、「Click」をダブルクリックします。

button3_Click関数が追加されたら、Form1.csに以下のコードを実装します。Application.Exit()関数を実行すると、アプリケーションが終了します。

        private void button3_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

PlaySoundのリンク

この状態でコンパイルすると、PlaySound()関数が見つからないというエラーが出ます。PlaySound関数は、マルチメディア関連の関数を収めた"winmm.dll"に収められています。ここで以下の定義をForm1クラスに含め、PlaySound関数が"winmm.dll"にあることを宣言します。

        [DllImport("winmm.dll")]
        static extern bool PlaySound(
            string      pszSound,   // 再生対象のサウンド
            IntPtr      hmod,       // インスタンスハンドル
            int         fdwSound);  // 再生フラグ

「DllImport」というキーワードは、extern以降の関数が引数のdllで定義されていることを宣言します。

DllImportは、「System.Runtime.InteropServices」という名前空間で定義されているため、以下のusing文をコードの先頭に追加する必要があります。

using System.Runtime.InteropServices;

以下に修正済みのForm1.csを示します。

以上でプログラムは完成です。コンパイルして実行してみてください。

実行

ファイルダイアログを開き、演奏させたいWAVファイルを選びます。ファイルパスがテキストボックスに表示されます。プレイボタンをクリックして再生します。

PlaySoundについて

短いサウンドでは気が付かないかも知れないので、できるだけ長いサウンドを演奏して見てください。演奏中は、すべてのボタンが操作不能になります。PlaySoundは、演奏が終わるまで制御を戻しません。そのため、すべてのメッセージ処理が停止し、アプリケーションがフリーズしたようになります。

PlaySoundは簡易に利用でき、便利な関数です。しかし上記のようにスレッドをブロックするため、ウィンドウのメッセージループの中で使うべきではありません。もし利用する場合は、ごく短い警告用のサウンドに留めるべきでしょう。

このセクションでは、初めてのサンプルということで、PlaySoundを用いました。本編の解説では、サウンドを自由に、様々な形態で再生する技術について解説します。

ドキュメントの先頭へ

カクタスソフトウェア 技術協力 資料室 資料室の広場 SourceForge.jp お問い合わせ