始める無料で始める

タイムスタンプを求める

今回は音声の周波数が 48 kHz だと分かっていますが、もし分からなかったらどうすればよいでしょうか。音声配列の長さを音声の継続時間で割れば求められます。ただし、Python の wave モジュールにはよりよい方法があります。波形オブジェクトに getframerate() を呼び出すと、そのオブジェクトのフレームレートが返ってきます。

次に、NumPy の linspace() メソッドを使って、音声配列中の各整数に対応するタイムスタンプを求めます。これは、今後サウンドウェーブを可視化するのに役立ちます。

linspace() メソッドは startstopnum の各パラメータを取り、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])
コードを編集して実行