私は問題に苦しんでいます:プレビューレイヤーを持つAVCaptureSessionがあり、ユーザーがボタンをタップすると触覚フィードバックを提供したいと考えています。私がAVCaptureSessionにaudioInputを追加すると、私は触覚フィードバックを全く生成できません。レコードを開始する直前にaudioInputを追加しようとしましたが、停止直後に削除するようにしましたが、キャプチャセッションの設定(シリアルキューで行った)を変更するとビデオプレビューの不具合が発生します。そして、私はSnapchatとInstagramがこのトリックをどのようにしているのかまだ分かりません。私の推測の1つは、どうにかAVAudioSessionを設定することでしたが、わかりませんでした。AVCaptureSessionにオーディオ入力を追加するには、ビデオプレビューを中断することなく録音する必要がありますか?
私のキャプチャセッションの初期化はかなり一般的であるので、私はそれを貼り付けないであろう(ここで注目すべき私はcaptureSession.automaticallyConfiguresApplicationAudioSession = false
ラインと共有AVAudioSessionがそのようにAVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, mode: AVAudioSessionModeVideoRecording, options: [.mixWithOthers])
のように変更されていることである)が、私は、オーディオ入力を切り替えるには、私の試みを投稿します:
func addAudioInput() {
self.sessionQueue.async { [unowned self] in
self.captureSession.beginConfiguration()
let microphone = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeAudio)
if let audioInput = try? AVCaptureDeviceInput(device: microphone), self.captureSession.canAddInput(audioInput) {
self.captureSession.addInput(audioInput)
}
self.captureSession.commitConfiguration()
}
}
func removeAudioInput() {
self.sessionQueue.async { [unowned self] in
if let audioInput = self.captureSession.inputs.first(where: { ($0 as? AVCaptureDeviceInput)?.device.deviceType == .builtInMicrophone }) as? AVCaptureDeviceInput {
self.captureSession.beginConfiguration()
self.captureSession.removeInput(audioInput)
self.captureSession.commitConfiguration()
}
}
}
コードサンプルがある場合は答えを更新してください –