音声出力と入力の両方を使用し、他のアプリからの音声ミキシングをサポートする Snapchat に似たアプリでバイブレーションを実行しようとしていますが、これは当初考えていたよりも難しい作業のようです。知っておくべき重要なことは、再生または録音中に振動しようとしていないということです。この件に関して見つけたすべてのドキュメントを読んだ結果、次のことがわかりました。
- 再生と録音(出力と入力)の両方をサポートするには、使用する必要があります
AVAudioSessionCategoryPlayAndRecord - 電話を振動
AudioServicesPlaySystemSound (kSystemSoundID_Vibrate)させることは、 を含むどの録音カテゴリでもサポートされていませんAVAudioSessionCategoryPlayAndRecord。 - オプションを追加することで、他のアプリがオーディオを再生できるようにすることができます
AVAudioSessionCategoryOptionMixWithOthers。
したがって、アプリのデリゲートでこれを行います。
NSError *error = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionMixWithOthers error:&error];
私が試したが失敗した振動を行うための可能な解決策は次のとおりです。
バイブレーションの前に共有を無効にし
AVAudioSession、その後すぐに有効にします。[[AVAudioSession sharedInstance] setActive:NO error:nil]; AudioServicesPlaySystemSound (kSystemSoundID_Vibrate); [[AVAudioSession sharedInstance] setActive:YES error:nil];これは振動をうまく実行しますが、その後、映画を録画しようとすると、オーディオがダッキングされます (または、他の何かが原因で非常に静かになります)。また、最初に I/O デバイスを削除せずにセッションを非アクティブ化することはできないというエラーが表示されます。
振動する前にカテゴリを変更し、次に元に戻します。
[[AVAudioSession sharedInstance] setActive:NO error:nil]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil]; [[AVAudioSession sharedInstance] setActive:YES error:nil]; AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); [[AVAudioSession sharedInstance] setActive:NO error:nil]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionMixWithOthers error:nil]; [[AVAudioSession sharedInstance] setActive:YES error:nil];この解決策は時々出てきますが、私にはうまくいかないようです。カテゴリが設定されているように見えますが、振動は発生しません。AVCaptureSessionを設定した場合、これはまだ有効な解決策かもしれませんが、まだ
usesApplicationAudioSession = YES機能させていません。
ソース: