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

再生デバイスの列挙とオブジェクト生成

演奏させたいデバイスを指定するときは、デバイスの列挙を行います。デフォルトデバイスで良いときは、デバイスの列挙を省略することができます。

次に、ダイレクトサウンド再生オブジェクトを作成します。このオブジェクトは、どのデバイスで再生するかを識別し、ミックスダウンされたサウンドを格納するプライマリーバッファを自動的に作成します。

ここで用いるダイレクトサウンド関連のクラスや列挙子などは、Microsoft.DirectX.DirectSound名前空間にあります。

再生デバイスの列挙

再生デバイスの列挙には、DevicesCollectionクラスを用います。このクラスのメンバーに、各デバイスの情報を格納したDeviceInformation構造体の配列があります。以下のコードで、各デバイスの情報にアクセスすることができます。

DevicesCollection devices = new DevicesCollection();

foreach (DeviceInformation devInfo in devices)
{
    string strDesc = devInfo.Description;
    Guid guid = devInfo.DriverGuid;
    string strModule = devInfo.ModuleName;
}

再生オブジェクトの作成

再生オブジェクトは、Microsoft.DirectX.DirectSound名前空間にあるDeviceクラスを用います。引数にはDeviceInformation構造体から得たDriverGuidを指定します。デフォルトデバイスで良い時は、Guid.Emptyを指定します。このオブジェクトによって再生デバイスを識別します。

ダイレクトサウンドでは、一つの再生デバイスを複数のアプリケーションから利用することを許可しています。これによってデバイスの取り合いが起こりますが、SetCooperativeLevel()関数でどのようにデバイスを利用し合うか調整します。CooperativeLevelは、協調レベルを指定する列挙子です。

CooperativeLevel 説明 コメント
Normal ウェーブのスペックを落とし、互換性を高めた仕様。 サウンドの質より確実な再生を期待する場合用いる。
Priority 任意のウェーブフォーマットを設定できる。 機能と制限のバランスが良い。通常この設定を用いる。
WritePrimary プライマリーバッファへの書き込みを許可する。 デバイスの性能をぎりぎりまで引き出すことができる。特別な用途以外用いない方が良い。

以下に再生オブジェクトの作成例を示します。

public class MySoundDevice
{
    private Device      RenderDevice = null;
    ...
    public void CreateObject(
        Guid                guidDev,
        Control             owner,
        CooperativeLevel    level)
    {
        RenderDevice = new Device(guidDev);
        RenderDevice.SetCooperativeLevel(owner, level);
    }

再生オブジェクトは、特定の再生デバイスに関連付けれらています。そのためデバイスを変更するときは、新しいオブジェクトを作り直さなければなりません。

ドキュメントの先頭へ

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