Graba y reproduce audio simultáneamente

Cualquiera me ayuda a grabar y reproducir audio simultáneamente en Iphone.

Puede reproducir y grabar simultáneamente en dispositivos iOS (excepto el toque de primera generación) utilizando la unidad de audio RemoteIO o la API Audio Queue. Estas son API de nivel inferior en las que tiene que manejar los búferes entrantes de las muestras de PCM entrantes y salientes usted mismo.

Consulte la aplicación de muestra aurioTouch de Apple, por ejemplo, el código.

Puede obtener un uso del marco AVFoundation. Tiene AVAudioPlayer para reproducir archivos de audio y AVAudioRecorder para grabar. Debes tener en cuenta que Recorder grabará solo con el micrófono. Por lo tanto, la reproducción simultanea de un archivo de audio y la grabación dependen de cómo el micrófono percibirá el audio que se reproduce.

Por favor, compruebe el código de muestra de la manzana aurioTouch para grabar y reproducir audio simultáneamente

También puede verificar la grabación de audio en un iPhone

Para grabar un juego de archivos de audio en iOS, puede usar el marco AVFoundation. Utilice el siguiente código rápido para grabar y reproducir los audios. Recuerde que la grabadora grabará el audio con el uso del micrófono, por lo tanto, pruebe este código en el dispositivo.

import UIKit import AVFoundation extension String { func stringByAppendingPathComponent(path: String) -> String { let nsSt = self as NSString return nsSt.stringByAppendingPathComponent(path) } } class ViewController: UIViewController, AVAudioPlayerDelegate, AVAudioRecorderDelegate{ var audioPlayer : AVAudioPlayer! var audioRecorder : AVAudioRecorder! @IBOutlet var recordButton : UIButton! @IBOutlet var playButton : UIButton! @IBOutlet var stopButton : UIButton! override func viewDidLoad() { super.viewDidLoad() self.recordButton.enabled = true self.playButton.enabled = false self.stopButton.enabled = false } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } //MARK: UIButton action methods @IBAction func playButtonClicked(sender : AnyObject){ let dispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) dispatch_async(dispatchQueue, { if let data = NSData(contentsOfFile: self.audioFilePath()) { do{ self.audioPlayer = try AVAudioPlayer(data: data) self.audioPlayer.delegate = self self.audioPlayer.prepareToPlay() self.audioPlayer.play() } catch{ print("\(error)") } } }); } @IBAction func stopButtonClicked(sender : AnyObject){ if let player = self.audioPlayer{ player.stop() } if let record = self.audioRecorder{ record.stop() let session = AVAudioSession.sharedInstance() do{ try session.setActive(false) } catch{ print("\(error)") } } } @IBAction func recordButtonClicked(sender : AnyObject){ let session = AVAudioSession.sharedInstance() do{ try session.setCategory(AVAudioSessionCategoryPlayAndRecord) try session.setActive(true) session.requestRecordPermission({ (allowed : Bool) -> Void in if allowed { self.startRecording() } else{ print("We don't have request permission for recording.") } }) } catch{ print("\(error)") } } func startRecording(){ self.playButton.enabled = false self.recordButton.enabled = false self.stopButton.enabled = true do{ let fileURL = NSURL(string: self.audioFilePath())! self.audioRecorder = try AVAudioRecorder(URL: fileURL, settings: self.audioRecorderSettings() as! [String : AnyObject]) if let recorder = self.audioRecorder{ recorder.delegate = self if recorder.record() && recorder.prepareToRecord(){ print("Audio recording started successfully") } } } catch{ print("\(error)") } } func audioFilePath() -> String{ let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] let filePath = path.stringByAppendingPathComponent("test.caf") as String return filePath } func audioRecorderSettings() -> NSDictionary{ let settings = [AVFormatIDKey : NSNumber(int: Int32(kAudioFormatMPEG4AAC)), AVSampleRateKey : NSNumber(float: Float(16000.0)), AVNumberOfChannelsKey : NSNumber(int: 1), AVEncoderAudioQualityKey : NSNumber(int: Int32(AVAudioQuality.Medium.rawValue))] return settings } //MARK: AVAudioPlayerDelegate methods func audioPlayerDidFinishPlaying(player: AVAudioPlayer, successfully flag: Bool) { if flag == true{ print("Player stops playing successfully") } else{ print("Player interrupted") } self.recordButton.enabled = true self.playButton.enabled = false self.stopButton.enabled = false } //MARK: AVAudioRecorderDelegate methods func audioRecorderDidFinishRecording(recorder: AVAudioRecorder, successfully flag: Bool) { if flag == true{ print("Recording stops successfully") } else{ print("Stopping recording failed") } self.playButton.enabled = true self.recordButton.enabled = false self.stopButton.enabled = false } } 

Probé este código en xCode 7.0 y iOS 9.

Espero que esto ayude a algunas personas … Hice una aplicación que graba audio, digamos desde una aplicación como Pandora y puede reproducir el audio. Ejecute / Reproduzca una aplicación de audio, ejecute AudioMic, grabe, apague el sonido de la aplicación de audio, regrese y reproduzca el audio grabado de AudioMic. ¡Hurra!

https://github.com/casspangell/AudioMic