I am trying to play the beep that Apple needs when I start recording video. I found through SO and other sources that you cannot play audio as long as you have audio input without any configuration.
Here is my attempt to the configuration method:
private void SetupAudio() { beepSound = AssetBank.GetSystemSoundWav("video_record", "video_beep"); AudioSession.Initialize(); AudioSession.Interrupted += delegate { Console.WriteLine("Interrupted handler"); }; AudioSession.Category = AudioSessionCategory.PlayAndRecord; AudioSession.OverrideCategoryMixWithOthers = true; NSError err; AVAudioSession.SharedInstance().SetActive(true, out err); }
And here is my code where I set up a recording session:
public void SetupVideoCaptureSession(AVCaptureDevicePosition position) { // Setup devices foreach (var device in AVCaptureDevice.Devices) { if (device.HasMediaType(AVMediaType.Video)) { if (device.Position == AVCaptureDevicePosition.Front) { frontCam = device; } else if (device.Position == AVCaptureDevicePosition.Back) { backCam = device; } } } // Create capture session captureSession = new AVCaptureSession(); captureSession.BeginConfiguration(); captureSession.SessionPreset = AVCaptureSession.Preset640x480; // Create capture device switch (position) { case AVCaptureDevicePosition.Back: videoDevice = backCam; break; case AVCaptureDevicePosition.Front: videoDevice = frontCam; break; } if (null == videoDevice) { using (var alert = new UIAlertView { Message = "No camera detected!" }) { alert.AddButton("Okay!"); alert.Show(); } return; } audioDevice = AVCaptureDevice.DefaultDeviceWithMediaType(AVMediaType.Audio); // Create capture device input NSError videoError, audioError; videoDeviceInput = new AVCaptureDeviceInput(videoDevice, out videoError); audioDeviceInput = new AVCaptureDeviceInput(audioDevice, out audioError); captureSession.AddInput(videoDeviceInput); captureSession.AddInput(audioDeviceInput); // Create capture device output videoOutput = new AVCaptureMovieFileOutput(); videoOutput.MaxRecordedDuration = new CMTime(10, 1); captureSession.AddOutput(videoOutput); if (null != previewLayer) previewLayer.RemoveFromSuperLayer(); // Create preview layer previewLayer = AVCaptureVideoPreviewLayer.FromSession(captureSession); previewLayer.Orientation = AVCaptureVideoOrientation.Portrait; previewLayer.VideoGravity = "AVLayerVideoGravityResizeAspectFill"; previewLayer.Frame = new RectangleF(new PointF(), ScreenSize); this.ParentScrollView.Layer.InsertSublayer(previewLayer, 0); // Start capture session SetupAudio(); captureSession.CommitConfiguration(); captureSession.StartRunning(); }
No matter what I try, I canβt get a sound to play after I started the capture session. Has anyone solved this in MonoTouch?
source share