LoginSignup
34
33

More than 5 years have passed since last update.

Swift2で録音と再生ができる簡易レコーダーを作ってみた

Last updated at Posted at 2016-02-13

やってみたこと

音をリアルタイムでモニタリングしてほげほげするアプリを作るために、「とりあえず録音と再生をできるようになろう!」とネットで調べながら、サンプルアプリを作ってみました。
録音してそれを再生する最低限の機能しか作ってません。状態に応じてのボタン表示を変更とかもしてないです。

この記事が参考になるかもしれない人たち

  • とりあえずswiftで録音と再生をやってみたい
  • Button配置してActionやOutletなんてお茶の子さいさい

こんなものができます

image

ソースコードを若干解説

ソースコードにコメント追加しただけの解説です。
もし不明点あれば遠慮無くこの記事へのコメントでご質問ください。

//
//  ViewController.swift
//  AVRecorderSample
//
//  Created by yokoyama.tatsuya on 2016/02/13.
//  Copyright © 2016年 yokoyama.tatsuya. All rights reserved.
//

import UIKit
import AVFoundation

class ViewController: UIViewController {

    // file操作をするときに役立つNSFileManager
    // 録音したファイルをDocmentsディレクトリに保存しています。
    // 他にもtmpディレクトリやLibrary/Cachesディレクトリなんかがあるので、
    // 興味あればググってください
    let fileManager = NSFileManager()
    var audioRecorder: AVAudioRecorder?
    var audioPlayer: AVAudioPlayer?
    let fileName = "sample.caf"

    @IBOutlet weak var recordButton: UIButton!
    @IBOutlet weak var playButton: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.setupAudioRecorder()
    }

    // 録音ボタンを押した時の挙動
    @IBAction func pushRecordButton(sender: AnyObject) {
        audioRecorder?.record()
    }

    // 再生ボタンを押した時の挙動
    @IBAction func pushPlayButton(sender: AnyObject) {
        self.play()
    }

    // 録音するために必要な設定を行う
    // viewDidLoad時に行う
    func setupAudioRecorder() {
        // 再生と録音機能をアクティブにする
        let session = AVAudioSession.sharedInstance()
        try! session.setCategory(AVAudioSessionCategoryPlayAndRecord)
        try! session.setActive(true)
        let recordSetting : [String : AnyObject] = [
            AVEncoderAudioQualityKey : AVAudioQuality.Min.rawValue,
            AVEncoderBitRateKey : 16,
            AVNumberOfChannelsKey: 2,
            AVSampleRateKey: 44100.0
        ]
        do {
            try audioRecorder = AVAudioRecorder(URL: self.documentFilePath(), settings: recordSetting)
        } catch {
            print("初期設定でerror出たよ(-_-;)")
        }
    }
    // 再生
    func play() {
        do {
            try audioPlayer = AVAudioPlayer(contentsOfURL: self.documentFilePath())
        } catch {
            print("再生時にerror出たよ(´・ω・`)")
        }
        audioPlayer?.play()

    }
    // 録音するファイルのパスを取得(録音時、再生時に参照)
    // swift2からstringByAppendingPathComponentが使えなくなったので少し面倒
    func documentFilePath()-> NSURL {
        let urls = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask) as [NSURL]
        let dirURL = urls[0]
        return dirURL.URLByAppendingPathComponent(fileName)
    }


}


guthubにもあげてます

34
33
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
33