找出時間戳記
我們已知音波的頻率是 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])