我正在进行一个个人研究项目。
我的目标是通过将一个声音的波形与数据库中的波形进行比较,来识别该声音并判断它是否属于国际音标。我在Mathematica、SciPy和PyBrain方面有一些技能。
在第一阶段,我仅使用美式英语的音标。我在网上找到了一些简单的英语音标音频文件测试库。这里的技巧是:
我想将一个音频文件分解成对应不同音节的波形——这需要一个学习算法。因此,’I like apples’ 将被分割成组成该句子的音节波形。
然后每个波形与英语音标的波形进行比较。我还不确定如何做这部分。我在考虑使用Praat来检测波形,捕获波形的图像并通过图像分析与数据库中存储的波形进行比较(这做起来挺有趣的)。
这里的问题是我不知道如何让Praat自动生成波形文件,然后将其按音节分割成波形块。逻辑上,我会为学习算法准备测试案例,并教计算机完成这项工作。
如果不需要波形图像——我能否使用快速傅里叶变换来比较两个fft——在x%的误差范围内认为它是y音节呢?
回答:
你可以尝试Praat脚本。
仅使用FFT会得到相当糟糕的结果。一个非常长的特征向量将很难进行分割和训练。这对于单个音节来说是数千个点。一些深度神经网络能够处理,但前提是你要正确设计它们并提供庞大的训练集。使用神经网络的优点是它们可以从“原始数据”中为你构建特征(我认为fft也属于“原始数据”)。然而,当你处理声音时,并不那么需要——你可以手动设计特征。对于声音,科学非常清楚声音具有哪些类型的“特征”。
你可以使用像Yaafe这样的库来计算这些特征。我推荐即使你不是在C++或Python中进行操作也去查看它——我提供的链接也提供了计算它们的公式。我在我的kiwi分类器中使用了一些这些特征。
另一个好的方法来自于scikit-talkbox,它提供了你可能需要的工具。