開始使用免費開始

找出時間戳記

我們知道音波的取樣頻率是 48 kHz,但如果事先不知道呢?可以用音波陣列的長度除以音波的持續時間來求得。不過,Python 的 wave 模組有更好的方式:對 wave 物件呼叫 getframerate(),就會回傳該物件的影格率(frame rate)。

接著,我們可以使用 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])
編輯並執行程式碼