Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UIImpactFeedbackGenerator Not Working When Audio Device Added to AVCaptureSession

Adding microphone audio input to AVCaptureSession seems to disable UIImpactFeedbackGenerator.

let audioDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeAudio)
let audioDeviceInput = try AVCaptureDeviceInput(device: audioDevice)
if self.session.canAddInput(audioDeviceInput) {
   self.session.addInput(audioDeviceInput)
}

Once the audio device is removed, feedback resumes.

Is this normal behavior? Is there a way around this?

I notice the stock iOS Camera app in video mode and long-pressing on thumbnail seem to still make the feedback work. So, there has to be a way around this?

like image 409
Gizmodo Avatar asked Oct 14 '17 23:10

Gizmodo


2 Answers

This seems to be an intentional behavior.

You can stop the capture session, play the haptic, then resume the capture session, which appears to be what the camera app is doing, as when you peek the camera feed goes to a blurred static image of the last frame captured. For example:

self.session.stopRunning()
// Play haptic
UINotificationFeedbackGenerator().notificationOccurred(.warning)
// Not completely sure if this delay is needed but you might need to wait until the run loop after the haptic plays to resume capture session
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1)
{

    self.session.startRunning()
}
like image 181
beyowulf Avatar answered Nov 16 '22 02:11

beyowulf


Try turn on setAllowHapticsAndSystemSoundsDuringRecording of AVAudioSession.

like image 1
BB9z Avatar answered Nov 16 '22 01:11

BB9z