SSブログ

QTKit Captureを使ってみる - その5 [プログラミング - QTKit Capture]

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の基本はおしまい。これだけでは面白くないし、もうちょっと悩まないとすぐ忘れてしまうので、次は少し難しいことをやってみる。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

献立08/30QTKit Captureを使ってみる .. ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。