AVAudioRecorder 를 사용하여 녹음 하고 재생하는 예제를 만들어 본다.



Main.storyboard 에서 record, start, stop 세개의 버튼을 만들고 컨트롤러 파일에 각각 outlet 과 액션을 연결한다.




아래는 ViewController.swfit 파일의 전체 코드이다.


import UIKit

import AVFoundation


class ViewController: UIViewController, AVAudioPlayerDelegate, AVAudioRecorderDelegate {


    @IBOutlet weak var recordButton: UIButton!

    @IBOutlet weak var stopButton: UIButton!

    @IBOutlet weak var playButton: UIButton!

    

    var audioPlayer: AVAudioPlayer?

    var audioRecorder: AVAudioRecorder?

    

    @IBAction func recordAudio(sender: AnyObject) {

        if audioRecorder?.recording == false {

            playButton.enabled = false

            stopButton.enabled = true

            audioRecorder?.record()

        }

    }

    

    @IBAction func stopAudio(sender: AnyObject) {

        stopButton.enabled = false

        playButton.enabled = true

        recordButton.enabled = true

        if audioRecorder?.recording == true {

            audioRecorder?.stop()

        } else {

            audioPlayer?.stop()

        }

    }

    

    @IBAction func startAudio(sender: AnyObject) {

        if audioRecorder?.recording == false {

            stopButton.enabled = true

            recordButton.enabled = false

            

            do {

                try audioPlayer = AVAudioPlayer(contentsOfURL: (audioRecorder?.url)!)

                audioPlayer!.delegate = self

                audioPlayer!.prepareToPlay()

                audioPlayer!.play()

            } catch let error as NSError {

                print("audioPlayer error: \(error.localizedDescription)")

            }

        }

    }

    

    func audioPlayerDidFinishPlaying(player: AVAudioPlayer, successfully flag: Bool) {

        recordButton.enabled = true

        stopButton.enabled = false

    }

    func audioPlayerDecodeErrorDidOccur(player: AVAudioPlayer, error: NSError?) {

        print("Audio Play Decode Error")

    }

    func audioRecorderDidFinishRecording(recorder: AVAudioRecorder, successfully flag: Bool) {

        

    }

    func audioRecorderEncodeErrorDidOccur(recorder: AVAudioRecorder, error: NSError?) {

        print("Audio Record Encode Error")

    }

    

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

        playButton.enabled = false

        stopButton.enabled = false

        

        let fileMgr = NSFileManager.defaultManager()

        let dirPaths = fileMgr.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)

        let soundFileURL = dirPaths[0].URLByAppendingPathComponent("sound.caf")

        let recordSettings = [AVEncoderAudioQualityKey: AVAudioQuality.Min.rawValue, AVEncoderBitRateKey: 16,

                              AVNumberOfChannelsKey: 2, AVSampleRateKey: 44100.0]

        let audioSession = AVAudioSession.sharedInstance()

        

        do {

            try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)

        } catch let error as NSError {

            print("audioSession error: \(error.localizedDescription)")

        }

        

        do {

            try audioRecorder = AVAudioRecorder(URL: soundFileURL, settings: recordSettings as! [String : AnyObject])

            audioRecorder?.prepareToRecord()

        } catch let error as NSError {

            print("audioSession error: \(error.localizedDescription)")

        }

    }


    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }



}


+ Recent posts