[Atelier Blue アトリエブルー]HomeプログラミングManaged DirectXMusic>基本

基本

それでは本格的に説明させて頂きます。

ソースコード

一応載せておきます。

using System;
using System.Windows.Forms;
using System.IO;
using Microsoft.DirectX.DirectSound;
using DS = Microsoft.DirectX.DirectSound;


namespace Sound2
{
    /// <summary>
    /// Class1 の概要の説明です。
    /// </summary>
    public class SoundForm:Form
    {
        private Device device_;
        private DS.SecondaryBuffer secondaryBufferA_;
        //開くファイル
        private string fileName =@"i:\temp\test.wav";

        public SoundForm()
        {
            this.Text="DirectSoundのテスト";

            DSInitialize();
        }


        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if(secondaryBufferA_ != null)
                {
                    secondaryBufferA_.Stop();
                    secondaryBufferA_.Dispose();
                }
                if(device_ != null)
                {
                    device_.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        private void DSInitialize()
        {
            device_ =new Device();

            //協調レベルの設定
            device_.SetCooperativeLevel(this,CooperativeLevel.Normal);

            //バッファについての情報設定クラス
            BufferDescription desc=new BufferDescription();

            //セカンダリバッファを作成
            secondaryBufferA_ =
                new SecondaryBuffer(fileName,desc,device_);

            //再生開始
            secondaryBufferA_.Play(0,0);
        }
    }

    public class Program
    {
        public static void Main()
        {
            Application.Run(new SoundForm());
        }
    }
}

かなり簡単に再生できます。

Device(デバイス)

音を出す装置です。これがないと音を流せません。引数がないのでそのまま作成しましょう。

協調レベル(CooperativeLevel)

デバイスを使えるようにするためには「協調レベル」というものを設定しなければいけません。これは、Deviceが音を出すときの制限を定めるものです。Windowsはマルチタスクなので、他のアプリケーションを考える必要があるからです。次の三つがあります。

標準協調レベル

この協調レベルでは、22 KHz、ステレオ サウンド、8 ビット サンプリングのプライマリバッファフォーマットを使う。デバイスはアプリケーション間で最も円滑に切り替えられます。プライマリバッファのフォーマット設定、プライマリバッファへの書き込みデバイスのオンボードメモリ圧縮が使えない。

優先協調レベル

アプリケーションはハードウェアミキシングなどのハードウェアリソースに対して最高の権限を確保する。プライマリバッファのフォーマット設定、デバイスのオンボードメモリの圧縮を行える。

ゲームでは、たいてい優先協調レベルを使います。このレベルは、サンプリングレートとビット深度に対するアプリケーション制御を可能にしながら最も強力に動作します。

書き込み優先協調レベル

最上位の協調レベルはこれです。この協調レベルではプライマリサウンドバッファに直接アクセスできます。言い換えると、プライマリバッファに直接書き込みを行わなければなりません。この書き込み中は、セカンダリバッファを再生できません。



このサンプルではノーマルを設定していますが、ゲームであれば、「優先協調レベル」になるでしょう。

バッファ

バッファにはプライマリバッファセカンダリバッファがあります。今はまだプライマリバッファを気にする必要がないのでセカンダリバッファだけを考えます。

セカンダリバッファ

セカンダリバッファは複数作ることが出来ます。そして、それらをミキシングすることによってプライマリバッファを作り再生するのです。つまり、まずはセカンダリバッファに再生するデータを入れなければ再生できないのです。

セカンダリバッファを使った再生

//バッファについての情報設定クラス
BufferDescription desc=new BufferDescription();

//セカンダリバッファを作成
secondaryBufferA_ =
    new SecondaryBuffer(fileName,desc,device_);

//再生開始
secondaryBufferA_.Play(0,0);

今回は細かいことをしないので上のように短く収まっています。

BufferDescription

どんな能力を持ったバッファを作るかを指定するためのものです。今回は初期設定のまま使います。

SecondaryBuffer

ファイル名と少しを渡すだけで作れます。信じられないくらい簡単です。

再生

「Play(0,0)」で再生です。



今回はこんなモンです。とりあえず協調レベルさえ覚えておけば大丈夫です。他については後で詳しく解説していきます。


ページの一番上へ
前のページへ 一覧に戻る 次のページへ

初版2006-4-29
[Atelier Blue アトリエブルー]HomeプログラミングManaged DirectXMusic>基本