タイムスタンプを求める
今回は音声の周波数が 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])