[swift] 마이크 입력 음량 표시하기
이번에는 Swift를 사용하여 마이크의 입력 음량을 표시하는 방법에 대해 알아보겠습니다.
AVAudioRecorder를 사용하여 음량 측정하기
import UIKit
import AVFoundation
class ViewController: UIViewController, AVAudioRecorderDelegate {
var audioRecorder: AVAudioRecorder!
override func viewDidLoad() {
super.viewDidLoad()
setupAudioRecorder()
}
func setupAudioRecorder() {
let audioSession = AVAudioSession.sharedInstance()
try? audioSession.setCategory(.record, mode: .default)
try? audioSession.setActive(true)
let audioFilename = getDocumentsDirectory().appendingPathComponent("recording.wav")
let settings = [
AVFormatIDKey: Int(kAudioFormatLinearPCM),
AVSampleRateKey: 44100,
AVNumberOfChannelsKey: 1,
AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
]
try? audioRecorder = AVAudioRecorder(url: audioFilename, settings: settings)
audioRecorder.delegate = self
audioRecorder.isMeteringEnabled = true
audioRecorder.prepareToRecord()
audioRecorder.record()
let updateTimer = Timer(timeInterval: 0.1, target: self, selector: #selector(updateAudioMeter), userInfo: nil, repeats: true)
RunLoop.current.add(updateTimer, forMode: .common)
}
func updateAudioMeter() {
audioRecorder.updateMeters()
let averagePower = audioRecorder.averagePower(forChannel: 0)
let normalizedValue = pow(10, averagePower / 20)
let volumePercentage = normalizedValue * 100
print("Current volume: \(volumePercentage)%")
}
func getDocumentsDirectory() -> URL {
return FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
}
}
위의 코드는 AVAudioRecorder를 사용하여 마이크 입력 음량을 측정하고 표시하는 기능을 구현한 예제입니다.
-
setupAudioRecorder
메서드에서는 AVAudioRecorder를 설정하고 초기화합니다. 소리를 녹음하기 위해 오디오 세션을 설정하고, 녹음할 파일의 경로를 설정하고, 필요한 설정 값들을 설정합니다. 또한 녹음을 시작하고 음량을 주기적으로 업데이트하기 위해 Timer를 설정합니다. -
updateAudioMeter
메서드에서는updateMeters
메서드를 호출하여 현재 음량을 업데이트하고, 평균 음량을 계산합니다. 평균 음량 값을 정규화하여 백분율로 변환하고, 현재 음량을 출력합니다. -
getDocumentsDirectory
메서드에서는 녹음한 파일을 저장할 경로를 가져옵니다.
위의 코드를 참고하여 마이크 입력 음량을 측정하고 필요에 따라 화면에 표시하는 기능을 추가할 수 있습니다.