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



SND12 - siOSTypeInput セレクタ

(98 年 4 月 12 日)

Q: 新しい siOSTypeInputSource および siOSTypeInputAvailable セレクタは、どのように使ったらよいのでしょうか。

A: siOSTypeInputSource セレクタの動作は siInputSource セレクタとちょうど同じです。SPBGetDeviceInfoSPBSetDeviceInfo で使います。これを使用するには、選択する入力ソースを表す OSType へのポインタを渡してください。例えば、次のようになります。

        inputSource = kCDSource;
        err = SPBSetDeviceInfo (soundRefNum, siOSTypeInputSource, &inputSource);

または、SPBGetDeviceInfo への呼び出しの結果を受け取る OSType へのポインタを渡してください。例えば、次のようになります。

        OSType          inputSource;
        err = SPBGetDeviceInfo (soundRefNum, siOSTypeInputSource, &inputSource);

siOSTypeInputAvailable セレクタは、SPBGetDeviceInfo で使用され、結果として SoundInfoList 構造体を返します。これには short とその次に Handle が続きます。SoundInfoList を調べて、返されたハンドルに格納された OSTypes の個数を取得することができます。

返されたハンドルから OSType をひとつずつ取り出す、簡単な例を以下に示します。

OSErr GetSoundInputSourceOSTypes (long siRefNum) {
        OSErr                           err;
        SoundInfoList                   sourceTypes;
        long                            offset                  = 0;
        short                           numTypes;
        int                             i;
        char                            sourceType[5];
        Handle                          OSTypes                 = nil;

        err = SPBGetDeviceInfo (siRefNum, siOSTypeInputAvailable, &sourceTypes);
        if (err != noErr) {
                printf ("\nGot error #%d from siOSTypeInputAvailable\n\n", err);
        }

        if (err == noErr) {
                printf ("\nThe sound input source OSTypes are:\n");

                numTypes = sourceTypes.count;
                OSTypes = sourceTypes.infoHandle;

                for (i = 0; i < numTypes; i++) {
                        BlockMoveData (&(*OSTypes)[offset], sourceType, 4);
                        sourceType[4] = 0;
                        printf ("  %s\n", sourceType);
                        offset += sizeof (OSType);
                }
        }

        if (OSTypes != nil) {
                DisposeHandle (OSTypes);
        }

        return err;
}

入力ソースの定数は Universal Headers 3.1 以降で定義されています。現在定義されている定数は次の通りです。

/* 入力ソースタイプ */

enum {
    kNoSource            = FOUR_CHAR_CODE('none'),   /* ソースを選択しない */
    kCDSource            = FOUR_CHAR_CODE('cd  '),   /* 内蔵 CD プレイヤーの入力 */

    kExtMicSource        = FOUR_CHAR_CODE('emic'),   /* 外部マイクの入力 */
    kRCAInSource         = FOUR_CHAR_CODE('irca'),   /* RCA ジャックの入力 */
    kTVFMTunerSource     = FOUR_CHAR_CODE('tvfm'),
    kDAVInSource         = FOUR_CHAR_CODE('idav'),   /* DAV アナログの入力 */
    kIntMicSource        = FOUR_CHAR_CODE('imic'),   /* 内蔵マイクの入力 */
    kMediaBaySource      = FOUR_CHAR_CODE('mbay'),   /* メディア・ベイの入力 */
    kModemSource         = FOUR_CHAR_CODE('modm'),   /* モデムの入力 */
    kZoomVideoSource     = FOUR_CHAR_CODE('zvpc')    /* ズーム・ビデオの入力 */
};

    siOSTypeInputSource    = FOUR_CHAR_CODE('inpt'), /* OSType による入力ソース */
    siOSTypeInputAvailable = FOUR_CHAR_CODE('inav'), /* 使用可能な入力ソース OSTypes のリスト */

-- Mark Cookson
devsupport@apple.com


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