SND12 - siOSTypeInput セレクタ (98 年 4 月 12 日)
Q: 新しい siOSTypeInputSource および siOSTypeInputAvailable セレクタは、どのように使ったらよいのでしょうか。
A: siOSTypeInputSource セレクタの動作は siInputSource セレクタとちょうど同じです。SPBGetDeviceInfo と SPBSetDeviceInfo で使います。これを使用するには、選択する入力ソースを表す 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 ]
|