【发布时间】:2014-03-23 17:52:56
【问题描述】:
我正在开发一个用于语言学习的应用程序(带有外语发音的卡片)。我可以使用画外音,但我希望能够导入带有本地发音的音频 CD。问题是给定部分的音频文件没有按单词划分。有没有办法检测它们之间的差距?
我设法将 iPod 库中的歌曲导入到应用程序文件夹中,因此我可以使用 AVFoundation 等。我认为可以通过处理单个样本来实现,但我不知道该怎么做。任何帮助将不胜感激。
【问题讨论】:
我正在开发一个用于语言学习的应用程序(带有外语发音的卡片)。我可以使用画外音,但我希望能够导入带有本地发音的音频 CD。问题是给定部分的音频文件没有按单词划分。有没有办法检测它们之间的差距?
我设法将 iPod 库中的歌曲导入到应用程序文件夹中,因此我可以使用 AVFoundation 等。我认为可以通过处理单个样本来实现,但我不知道该怎么做。任何帮助将不胜感激。
【问题讨论】:
我终于通过处理单个音频样本来完成这项任务。其他问题有很好的答案,它们确实有助于理解如何获取所需的所有音频信息: AVAudioPlayer - Metering & Reading audio samples via AVAssetReader
你必须:
请注意,样本表示经过零的波,因此您需要向前分析一些样本以查看是否没有其他音频信号。这同样适用于有时可能超过您的容忍度的噪音。
【讨论】:
对于每个声音样本,s = samp[k],做:
fac = 0.01
tot = (1.-fac) * tot + fac * (s*s)
这种技术是一种非常基本的低通滤波器形式;它会给你一个更真实的瞬时能量测量。
另一种轻量级技术是对最后一百个样本量值进行框积分,也称为运行平均值。
av = float[1000]
p=0
然后对于每个样本:
tot -= ring[p]
ring[p] = s*s
tot += ring[p]
p = p+1 % 1000
要研究的另一件事是泄漏的积分器。
例如,您也可以只处理每 10 个样本中的一个,这仍然可以捕获高达 2205Hz 的频率
【讨论】: