[iOS] 음성 레코더 앱 만들기
소개
iPhone 앱 개발을 하고 있어, 음악계의 기사를 조사하면 일본어의 기사가 적거나, 알기 어렵거나 했기 때문에, 메모 정도에.
이번에는 녹음 주위를 씁니다.
환경
구현
1.StoryBoard에서 필요한 부품 배치
이번에 필요한 "녹음 버튼", "재생 버튼", "라벨"을 배치합니다. (라벨은 현재 상태를 확인하기 위해)
다음으로 녹음 할 때 마이크를 사용하기 위해 Info.plist에 마이크 허가 작성
Key : Privacy - Microphone Usage Description
Value : 마이크 사용을 위해(임의의 문자열)
2. 코딩
ViewController.swift를 열고 AVFoundation을 가져옵니다.
import AVFoundation
필요한 프로토콜을 설명합니다.
class ViewController: UIViewController, AVAudioRecorderDelegate, AVAudioPlayerDelegate {
이전에 StoryBoard에 배치 한 부품을 작성하고 연결합니다.
@IBOutlet var label: UILabel!
@IBOutlet var recordButton: UIButton!
@IBOutlet var playButton: UIButton!
그런 다음 녹음 및 재생에 사용할 AVAudioRecorder와 AVAudioPlayer를 선언합니다.
또한 현재가 녹음 상태인지 재생 상태인지를 판별하는 bool 형 변수도 선언한다.
var audioRecorder: AVAudioRecorder!
var audioPlayer: AVAudioPlayer!
var isRecording = false
var isPlaying = false
이번 메인의 녹음을 하는 메소드를 씁니다.
@IBAction func record(){
if !isRecording {
let session = AVAudioSession.sharedInstance()
try! session.setCategory(AVAudioSessionCategoryPlayAndRecord)
try! session.setActive(true)
let settings = [
AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
AVSampleRateKey: 44100,
AVNumberOfChannelsKey: 2,
AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
]
audioRecorder = try! AVAudioRecorder(url: getURL(), settings: settings)
audioRecorder.delegate = self
audioRecorder.record()
isRecording = true
label.text = "録音中"
recordButton.setTitle("STOP", for: .normal)
playButton.isEnabled = false
}else{
audioRecorder.stop()
isRecording = false
label.text = "待機中"
recordButton.setTitle("RECORD", for: .normal)
playButton.isEnabled = true
}
}
녹음하기 위한 settings를 적어주고, URL의 장소에 녹음하고 있습니다.
그런 다음 URL을 검색하는 메소드를 작성합니다.
func getURL() -> URL{
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let docsDirect = paths[0]
let url = docsDirect.appendingPathComponent("recording.m4a")
return url
}
만약 몇몇을 녹음하고 싶다면 ""recording.m4a""라는 문자열을 매번 바꾸는 문자열 (날짜 시간 등)을 생성해주고 배열 등에 넣고 UserDefaults 등으로 저장해 둔다. 라고 좋다고 생각합니다.
마지막으로 녹음한 음성을 재생하기 위한 재생 버튼을 작성하면 완성입니다.
@IBAction func play(){
if !isPlaying {
audioPlayer = try! AVAudioPlayer(contentsOf: getURL())
audioPlayer.delegate = self
audioPlayer.play()
isPlaying = true
label.text = "再生中"
playButton.setTitle("STOP", for: .normal)
recordButton.isEnabled = false
}else{
audioPlayer.stop()
isPlaying = false
label.text = "待機中"
playButton.setTitle("PLAY", for: .normal)
recordButton.isEnabled = true
}
}
두 버튼과 연결하는 것도 잊지 마십시오.
참고로 한 사이트
import AVFoundation
class ViewController: UIViewController, AVAudioRecorderDelegate, AVAudioPlayerDelegate {
@IBOutlet var label: UILabel!
@IBOutlet var recordButton: UIButton!
@IBOutlet var playButton: UIButton!
var audioRecorder: AVAudioRecorder!
var audioPlayer: AVAudioPlayer!
var isRecording = false
var isPlaying = false
@IBAction func record(){
if !isRecording {
let session = AVAudioSession.sharedInstance()
try! session.setCategory(AVAudioSessionCategoryPlayAndRecord)
try! session.setActive(true)
let settings = [
AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
AVSampleRateKey: 44100,
AVNumberOfChannelsKey: 2,
AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
]
audioRecorder = try! AVAudioRecorder(url: getURL(), settings: settings)
audioRecorder.delegate = self
audioRecorder.record()
isRecording = true
label.text = "録音中"
recordButton.setTitle("STOP", for: .normal)
playButton.isEnabled = false
}else{
audioRecorder.stop()
isRecording = false
label.text = "待機中"
recordButton.setTitle("RECORD", for: .normal)
playButton.isEnabled = true
}
}
func getURL() -> URL{
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let docsDirect = paths[0]
let url = docsDirect.appendingPathComponent("recording.m4a")
return url
}
@IBAction func play(){
if !isPlaying {
audioPlayer = try! AVAudioPlayer(contentsOf: getURL())
audioPlayer.delegate = self
audioPlayer.play()
isPlaying = true
label.text = "再生中"
playButton.setTitle("STOP", for: .normal)
recordButton.isEnabled = false
}else{
audioPlayer.stop()
isPlaying = false
label.text = "待機中"
playButton.setTitle("PLAY", for: .normal)
recordButton.isEnabled = true
}
}
사이고에게
음악계의 어플리를 만들고 있을 때 잘 나오는 format나 setting등은 너무 이해하지 않고 쓰고 있으므로, 설명할 수 있는 분 등이 있으면 코멘트등 잘 부탁드립니다.
또한 이번 프로젝트는 GitHub에도 올려 둡니다.
리포지토리 : RecorderSample
Reference
이 문제에 관하여([iOS] 음성 레코더 앱 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/army_sh/items/946aa15263a6d087a99c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([iOS] 음성 레코더 앱 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/army_sh/items/946aa15263a6d087a99c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)