QTKit Captureを使ってみる - その5 [プログラミング - QTKit Capture]
音声の入力とプレビュー
音声の入力
こないだの具体的なコードの例では音に関する設定は何もしていない。メディアタイプによってストリームに音声が重畳されて(インターリーブされて)いるDVの場合と、別々になっている場合があるので、それを区別する必要がある。
別々の入力デバイス(iSightと内蔵マイク)の場合はそれぞれ別の対応するデバイスをオープンしてQTCaptureSessionに繋げばいい。DVの場合はデータに音声も一緒に含まれているので、入力に関しては何もする必要はない。
Appleのガイドには
if (![videoDevice hasMediaType:QTMediaTypeSound] && ![videoDevice hasMediaType:QTMediaTypeMuxed]) { //1 QTCaptureDevice *audioDevice = [QTCaptureDevice defaultInputDeviceWithMediaType:QTMediaTypeSound]; success = [audioDevice open:&error]; //2 if (!success) { audioDevice = nil; // Handle error } if (audioDevice) { mCaptureAudioDeviceInput = [[QTCaptureDeviceInput alloc] initWithDevice:audioDevice]; success = [mCaptureSession addInput:mCaptureAudioDeviceInput error:&error];//3 if (!success) { // Handle error } } }と言うコードの例が示されている。つまり、videoDeviceが音声を持っていなかったら(videoDeviceのメディアタイプがQTMediaTypeSoundでもQTMediaTypeMuxedでもなかったら(1))、videoDeviceを作ったときと全く同じやり方でaudioDeviceを作って(2)QTCaptureSessionに繋げ(3)、ということ。
音声のプレビュー
音声のプレビューはQTCaptureViewのようなQTCaptureAudioPreviewOutputという簡単な専用クラスがある。ただし、QTCaptureViewのようにQTCaptureSessionを教えてやる、と言う方法は取られていない。他の出力と同じようにQTCaptureSessionに出力を繋ぐ、という操作を行う。
captureAudioOutput = [[QTCaptureAudioPreviewOutput alloc] init]; [captureSession addOutput:captureAudioOutput error:&error]; [captureAudioOutput setVolume:1.0];これだけで動画と同期した音声が鳴る。あまり難しいことをしないならめちゃめちゃ簡単。
最後の行では音声ボリュームを最大に上げている。QTCaptureAudioPreviewOutputのインスタンスは作られただけではデフォルトでボリュームは0になっているらしい。まあ、普通そうだわな。これ、実は悩んだ。ちゃんとやってるのに音が鳴らない、どうして?なんていう調子。聴こえるようにするにはボリュームを上げてやる必要がある。ここでは単に最大にしているだけだけど、本来ならUserDefaultsを使って最後の設定を復元するようにすべきである。
これでQTKit Captureの基本はおしまい。これだけでは面白くないし、もうちょっと悩まないとすぐ忘れてしまうので、次は少し難しいことをやってみる。
コメント 0