log_e "Pitch"语音分析快速 iOS 13 规范化时出现问题



我正在从SFVoiceAnalytics "Pitch"中检索值。我的目标是将数据转换为原始基频。根据文档,这些值log_e返回。 当我将 exp(( 应用于返回的值时,我得到以下范围:

  • 男声: [0.25, 1.85], 预期: [85, 180]
  • 女声: [0.2,1.6], 预期: [165, 255]

为了简单起见,我使用了Apple的示例代码"识别现场音频中的语音"。

感谢您的帮助!!

文档:https://developer.apple.com/documentation/speech/sfvoiceanalytics/3229976-pitch

if let result = result {                
// returned pitch values
for segment in result.bestTranscription.segments {
if let pitchSegment = segment.voiceAnalytics?.pitch.acousticFeatureValuePerFrame {
for p in pitchSegment {
let pitch = exp(p)
print(pitch)
}
}
}
// Update the text view with the results.
self.textView.text = result.bestTranscription.formattedString
isFinal = result.isFinal
}

我最近遇到了类似的问题,最终使用了另一种解决方案来检索音高数据。

我为斯威夫特带来了一个名为贝多芬的音高检测库。它实时检测音高,而SFSpeechRecognizer的语音分析仅在转录完成后返回它们。

贝多芬还没有更新为与 Swift 5 配合使用,但我并不觉得让它工作太难。

此外,在挖掘为什么 voiceAnalytics 中的值是这样的时,我通过文档发现音高是一个标准化的音高估计

该值是每帧的归一化音高估计值的对数(以 e 为底(。

我对此的解释可能是这些值被归一化(除以(基频,所以我不确定是否有可能使用这些数据来恢复绝对频率。它似乎最适合用于传达音高之间的间隔变化。

最新更新