高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先



SND13 - siMonitorSource セレクタ

(98 年 4 月 12 日)

Q: siMonitorAvailable および siMonitorSource セレクタはどのようにして使ったらよいのでしょうか。

A: これらのセレクタはサウンド出力コンポーネントで使用するもので、ユーザが聞こえるソースを選択して、それをデフォルトの録音用ソースとします。このセレクタはサウンド出力コンポーネントだけで使用するものなので、このためにサウンドチャネルを使用する必要はありません。

siMonitorAvailable セレクタは、siOSTypeInputAvailable 同様、SoundInfoList を返します。これは shortHandle の構造体です。このハンドルにはモニタ可能な入力ソースの OSTypes の配列が含まれます。SoundInfoList 構造体の操作方法の詳細については、「Q&A SND12」を参照してください。

サウンド出力コンポーネントを探し、siMonitorSource および siMonitorAvailable セレクタを使用する方法を示す、サンプルコードを以下に掲載します。

#include    <Sound.h>
#include    <Errors.h>
#include    <Memory.h>

// 使用可能なモニタソースを取得し、それぞれの名前を調べ、
// どのソースがアクティブか調べ、さまざまなソースを設定する
// 簡単なアプリケーション

void main(void) {
    NumVersionVariant       smVersion;
    ComponentResult         err;
    OSType                  source;
    SoundInfoList           monitorList;
    Component               device;
    ComponentDescription    looking;

    smVersion.parts = SndSoundManagerVersion();

    // SoundComponentGet/SetInfo 関数は、Sound Manager 3.1 以降でのみ利用可能。
    // System 7.5 以降で動作していることがわかっている場合は、
    // SM バージョンのチェックは省略可能。

    if (smVersion.whole >= 0x03100000) {
        looking.componentType = kSoundOutputDeviceType;
        looking.componentSubType = 0;
        looking.componentManufacturer = kAppleManufacturer;
        looking.componentFlags = 0;
        looking.componentFlagsMask = 0;
        device = FindNextComponent (0, &looking);

        // 使用可能なモニタソースのリストを取得する方法を以下に示す
        // (モニタソースがサポートされているかも調べる)
        // その結果、各ソースの OSTypes のリストが得られる
        // (あとでハンドルの破棄を忘れないように) 

        err = GetSoundOutputInfo(device, siMonitorAvailable, &monitorList);

        if (err != noErr)                        // モニタソースがサポートされていないため、自分で行う。
             goto Exit;

        DisposeHandle(monitorList.infoHandle);   // 返されたハンドルを破棄するのを忘れないこと

        // どのソースがモニタされているのかを調べる
        GetSoundOutputInfo(device, siMonitorSource, &source);

        // CD をモニタソースとして設定する (すでに存在する場合。err <> noErr だと存在しない) 
        err = SetSoundOutputInfo(device, siMonitorSource, (void *)kCDSource);

        // 再度モニタソースを調べ、上の設定が機能したか確認する。
        err = GetSoundOutputInfo(device, siMonitorSource, &source);
    }

Exit:
    return;
}

セレクタは Universal Headers 3.1 以降で、次のように定義されています。

   siMonitorAvailable            = FOUR_CHAR_CODE('mnav'),
   siMonitorSource               = FOUR_CHAR_CODE('mons'),

-- Mark Cookson
devsupport@apple.com


[ Technical Q&A's : Graphics & Media : QuickTime : Sound : SND13 ]