[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를 사용하여 마이크 입력 음량을 측정하고 표시하는 기능을 구현한 예제입니다.

  1. setupAudioRecorder 메서드에서는 AVAudioRecorder를 설정하고 초기화합니다. 소리를 녹음하기 위해 오디오 세션을 설정하고, 녹음할 파일의 경로를 설정하고, 필요한 설정 값들을 설정합니다. 또한 녹음을 시작하고 음량을 주기적으로 업데이트하기 위해 Timer를 설정합니다.

  2. updateAudioMeter 메서드에서는 updateMeters 메서드를 호출하여 현재 음량을 업데이트하고, 평균 음량을 계산합니다. 평균 음량 값을 정규화하여 백분율로 변환하고, 현재 음량을 출력합니다.

  3. getDocumentsDirectory 메서드에서는 녹음한 파일을 저장할 경로를 가져옵니다.

위의 코드를 참고하여 마이크 입력 음량을 측정하고 필요에 따라 화면에 표시하는 기능을 추가할 수 있습니다.

참고 자료