开始使用免费开始使用

找到时间戳

我们已知声波频率是 48 kHz,但如果不知道呢?可以用声波数组的长度除以声波的持续时间来求。不过,Python 的 wave 模块有更好的方法。对波形对象调用 getframerate() 会返回该对象的帧率。

接着,您可以使用 NumPy 的 linspace() 方法,为声波数组中的每个整数生成对应的时间戳。这将有助于我们后续可视化声波。

linspace() 方法接收 startstopnum 参数,并返回在 startstop 之间均匀分布的 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])
编辑并运行代码