找到时间戳
我们已知声波频率是 48 kHz,但如果不知道呢?可以用声波数组的长度除以声波的持续时间来求。不过,Python 的 wave 模块有更好的方法。对波形对象调用 getframerate() 会返回该对象的帧率。
接着,您可以使用 NumPy 的 linspace() 方法,为声波数组中的每个整数生成对应的时间戳。这将有助于我们后续可视化声波。
linspace() 方法接收 start、stop 和 num 参数,并返回在 start 与 stop 之间均匀分布的 num 个数值。
在本题中,start 取 0,stop 取声波数组长度除以帧率(也就是音频文件的持续时间),num 取声波数组的长度。
本练习是课程的一部分
Python 语音语言处理
练习说明
- 将声波字节转换为整数。
- 使用
getframerate()获取"good morning"音频文件的帧率。 - 将
stop设为soundwave_gm的长度除以帧率。 - 将
num设为soundwave_gm的长度。
交互式实操练习
通过完成这段示例代码来试试这个练习。
# Read in sound wave and convert from bytes to integers
good_morning = wave.open('good_morning.wav', 'r')
signal_gm = good_morning.readframes(-1)
soundwave_gm = np.frombuffer(____, dtype='int16')
# Get the sound wave frame rate
framerate_gm = good_morning.____
# Find the sound wave timestamps
time_gm = np.linspace(start=0,
stop=____/____,
num=____)
# Print the first 10 timestamps
print(time_gm[:10])