やってみたこと
音をリアルタイムでモニタリングしてほげほげするアプリを作るために、「とりあえず録音と再生をできるようになろう!」とネットで調べながら、サンプルアプリを作ってみました。
録音してそれを再生する最低限の機能しか作ってません。状態に応じてのボタン表示を変更とかもしてないです。
この記事が参考になるかもしれない人たち
- とりあえずswiftで録音と再生をやってみたい
- Button配置してActionやOutletなんてお茶の子さいさい
こんなものができます
ソースコードを若干解説
ソースコードにコメント追加しただけの解説です。
もし不明点あれば遠慮無くこの記事へのコメントでご質問ください。
//
// 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にもあげてます