0%

用python识别语音的音调(speech analysis - intonation)

一直想完成我心中很想做的一个东西,不过好难啊,只好拆接下来,一步一步来咯。

第一步,就是用python识别语音的音调。

praat

先说个不用python的方法。最初是偶然找到了praat这个软件,很简单,打开praat-点open-read from file - view & edit - pitch - show pitch 就可以啦(注意要短于10秒,如果超过的话zoom in才能看到线条)。

截屏2021-10-27 下午9.37.50

python

再说用python 的2个方法。

amfm_decompy

首先安装amfm_decompy

1
python3 -m pip install amfm_decompy

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import amfm_decompy.basic_tools as basic
import amfm_decompy.pYAAPT as pYAAPT
import matplotlib.pyplot as plt
import numpy as np

#load audio 注意必须是wav
signal = basic.SignalObj("01.wav")

#pYAAPT pitches 生成pitches文件
pitch = pYAAPT.yaapt(signal, frame_length = 40, tda_frame_length=40,f0_min=75, f0_max=600)

#plot
plt.plot(pitch.samp_values)
plt.show()

截屏2021-10-27 下午9.42.32

要去掉0的话:

1
2
3
4
p_nan = pitch.samp_values
p_nan[pitch.samp_values==0] = np.nan
plt.plot(p_nan)
plt.show()

praat

  1. 用刚刚的praat软件 view & edit 后,点击 pitch - pitch listing,生成一个txt文件

  2. 使用

    1
    2
    3
    4
    5
    6
    7
    import numpy as np
    import matplotlib.pyplot as plt

    praat = np.genfromtxt("info.txt")
    praat = praat[:,1]
    plt.plot(praat)
    plt.show()

结果:
截屏2021-10-27 下午9.49.22

对比

两者对比一下,可以看到结果基本差不多。

截屏2021-10-27 下午9.50.59

Reference

Pitch-Tracking, or How to Estimate the Fundamental Frequency in Speech — on the Examples of Praat, YAAPT, and YIN Algorithms

关于进一步增进matplotlib:https://zhuanlan.zhihu.com/p/109245779