Я пытаюсь получить мощность звука, зацикливаясь на звуковых образцах и получая среднюю мощность на канал.Как я могу нормализовать значение децибела и сделать его между 0 и 1
Я хочу получить значение от 0 до 1, которое отражает интенсивность воспроизводимого звука. Прямо сейчас я получаю дБ (значение децибела), которое является значением с плавающей точкой от -160 (около молчания) до 0 (очень громко).
Вот мой код написан в Swift:
func configureAudio() {
audioController.play()
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
audioController.numberOfLoops = 0
audioController.meteringEnabled = true
var audTimer = CADisplayLink(target: self, selector: "monitorAudio")
audTimer.addToRunLoop(NSRunLoop.currentRunLoop(), forMode: NSRunLoopCommonModes)
}
func monitorAudio() {
audioController.updateMeters()
var dB = Float(0)
for i in 0..<audioController.numberOfChannels {
dB += audioController.averagePowerForChannel(i)
}
dB /= Float(audioController.numberOfChannels)
//code that I copied from website but obviously it is not normalization
var power = (Int(log10(dB+161)/log10(1.5) * 100) - 1220) * 6
if power < 0 {
power = 0
}
println(power)
}
Я не уверен, что если значение дБ я получаю является точным или я делаю что-то не так?
прямо сейчас Я получаю значения между 0-190, используя какой-то код, который я нашел, но для меня это не имеет большого значения.
Что мне нужно, чтобы нормализовать значения дБ я получаю быть между 0 - 1
EDIT - Не стесняйтесь писать код в Obective-C
Я действительно не понимаю, что вы имеете в виду. Что такое log10 (ffs)? –
Моя точка зрения заключается в том, что значение dB, с которого вы начинаете, уже применяло 'log10', так что вы снова вызываете' log10', что является полной противоположностью тому, что вы хотите - функция 'exp' с базой 10. – jaket