iOSアプリ開発 入門 (14) - マイク音量の取得
マイク音量の取得の手順をまとめました。
前回
1. iOSのマイク音量の取得
iOSのマイク音量を取得するには、「AVCaptureSession」を使います。
2. UI
今回は、「UILabel」と「UIButton」を配置します。
3. Info.plist
マイク音量の取得を行うには、「NSMicrophoneUsageDescription」をInfo.plistに追加する必要があります。
4. コード
コードは、次のとおりです。
import UIKit
import Speech
import AVFoundation
// ViewController
class ViewController: UIViewController, AVCaptureAudioDataOutputSampleBufferDelegate {
// UI
@IBOutlet weak var label: UILabel!
@IBOutlet weak var button: UIButton!
// マイク音量の取得
let captureSession = AVCaptureSession()
let captureQueue = DispatchQueue(label: "capture")
var captureActive = false
// ビューのロード時に呼ばれる
override func viewDidLoad() {
super.viewDidLoad()
// キャプチャセッションの準備
setupCaptureSession()
// UI
self.captureActive = false
self.label.text = ""
self.button.isEnabled = true
self.button.setTitle("マイク音量取得の開始", for: .normal)
}
// キャプチャセッションの準備
func setupCaptureSession() {
let audioDevice: AVCaptureDevice! = AVCaptureDevice.default(for: AVMediaType.audio)
let audioInput = try! AVCaptureDeviceInput(device: audioDevice)
let audioDataOut = AVCaptureAudioDataOutput()
audioDataOut.setSampleBufferDelegate(self, queue: self.captureQueue)
captureSession.addInput(audioInput)
captureSession.addOutput(audioDataOut)
}
// バッファ出力を通知
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer,
from connection: AVCaptureConnection) {
// マイク音量の平均値(dB) / マイク音量のピーク値(dB)
var averagePowerLevel: Float = 0
var peakHoldLevel: Float = 0
for audioChannel in connection.audioChannels {
averagePowerLevel += audioChannel.averagePowerLevel
peakHoldLevel += audioChannel.peakHoldLevel
}
averagePowerLevel = averagePowerLevel/Float(connection.audioChannels.count)
peakHoldLevel = peakHoldLevel/Float(connection.audioChannels.count)
// ラベルに表示
DispatchQueue.main.async {
self.label.text = String(format: "%.2f/%.2f", averagePowerLevel, peakHoldLevel)
}
}
// ボタンクリック時に呼ばれる
@IBAction func onButtonClick(_ sender: UIButton) {
// マイク音量取得の開始
if (!self.captureActive) {
// UI
self.captureActive = true
self.button.setTitle("マイク音量取得の停止", for: .normal)
self.label.text = ""
// マイク音量取得の開始
self.captureSession.startRunning()
}
// マイク音量取得停止
else {
//UI
self.captureActive = false
self.button.setTitle("マイク音量取得の開始", for: .normal)
// マイク音量取得の停止
self.captureSession.stopRunning()
}
}
}
5. db (デシベル)
db (デシベル)については、以下が参考になります。
次回
この記事が気に入ったらサポートをしてみませんか?