Q:
Sequence Grabber を使ってマイクから音声をキャプチャし、QuickTime のムービーに保存していますが、マイクの音量を制御できません。SGSetChannelVolume を呼び出しても、効果がありません。マイクの音量を設定する方法はありますか?
A:
まず、SGGetSoundInputDriver 関数を使って、選択したサウンド入力デバイス(マイク)の Sequence Grabber によって使われているサウンド入力ドライバを検出する必要があります。次に、Sound Manager の SPBSetDeviceInfo 関数を使ってデバイスの(音量パラメタではなく)入力ゲインパラメタを設定します。
SGSetChannelVolume 関数は、再生中の音量の設定だけに作用します。したがって録画されたムービーのトラックの録音レベルや音量には作用しません。
下のリスト 1 は、これを行う方法を示しています。
long sndInputDriverRef;
sndInputDriverRef = SGGetSoundInputDriver(yourSoundChannel);
if (sndInputDriverRef != 0)
{
OSErr result;
Fixed newGainValue = Long2Fix(1.5); /* 入力ゲインは、0.5 〜 1.5 の範囲 */
result = SPBSetDeviceInfo(sndInputDriverRef,
siInputGain,
(void *)newGainValue);
}
| |
リスト 1. 入力ゲイン値の設定
|
将来、Mac OS X の QuickTime では Sound Manager の使用を取りやめ、Core Audio の使用に移行します。そのときには、Core Audio のパラメタを操作する新しい API が用意される予定です。このため、SGGetSoundInputDriver 関数の呼び出し時に、上記のエラーコード(戻り値 0)をチェックすることが重要です。
また、最近の QuickTime 6.0.2 アップデートでは、Sound Driver のバグが修正されます。このバグは、特定のハードウェアがそれ自体を「接続されていない」と報告し、そのために SGGetSoundInputDriver から 0 の戻り値が返されるというものです。QuickTime 6.0.2 アップデートが適用されていないシステムでコードを実行しているかどうかを確認できるように、この問題を認識しておいてください。そのような環境でコードを実行している場合は、当然、Sequence Grabber で録音を実行することもできません。
[2002 年 10 月 25 日]
|