Play system sound while recording video / audio

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?

+4
source share
3 answers

This is what I use in The Harlem Shake :

 AudioSession.Initialize(); AudioSession.Category = AudioSessionCategory.MediaPlayback; AudioSession.OverrideCategoryMixWithOthers = true; 

Then, to disable it, I do the following:

 AudioSession.Initialize(); AudioSession.Category = AudioSessionCategory.AmbientSound; AudioSession.OverrideCategoryMixWithOthers = false; 

This allows me to play Harlem Shakes with AVAudioPlayer while capturing video. It also undoes the silent switch on iDevice. I don't know if AudioSession.Initialize() is required on both parts, you can play just by calling it once.

+5
source

After my hair was pulled out yesterday, I got this job.

 private void PlayBeepSound() { NSError err; var player = AVAudioPlayer.FromUrl(NSUrl .FromFilename("Sounds/video_record/video_beep.wav"), out err); player.Play(); } 

I used to try using sound.PlaySystemSound (), which didn't work. Switching to AVAudioPlayer allowed you to play sound. At least I found out about the iPhone connections inside myself!

+2
source

Hi fellow developers, this is Objective-C code for the above problem,

 @property (strong, nonatomic) AVAudioPlayer *audioPlayer; NSURL *soundUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"VoicemailSound" ofType:@"mp3"]]; //Download and add a system sound to your project and mention its name and type here self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:nil]; [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker|AVAudioSessionCategoryOptionMixWithOthers error: nil]; [self.audioPlayer prepareToPlay]; [self.audioPlayer play]; 
+1
source

Source: https://habr.com/ru/post/950661/


All Articles