Record and play audio Simultaneously Record and play audio Simultaneously objective-c objective-c

Record and play audio Simultaneously


You can get a use from AVFoundation framework. It has AVAudioPlayer to play audio files and AVAudioRecorder to record.You have to bear in mind that Recorder will record with the use of mic only.So with the simultameously playing a audio file and recording it depends on how the mic will perceive the audio that is played.


Please Check aurioTouch apple sample code for audio record-and-play simultaneously

You can also check Recording Audio on an iPhone


To record an play the audio files in iOS, you can use AVFoundation framework. Use below swift code to record and play the audios.Remember that recorder will record the audio with the use of mic, so please test this code on device.

import UIKitimport AVFoundationextension 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 methodsfunc 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 methodsfunc 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}}

I had tested this code on xCode 7.0 & iOS 9.