始める無料で始める

タイムスタンプを求める

このサウンドウェーブのサンプリング周波数が 48 kHz であることはすでにわかっていますが、もしわかっていなかったらどうすればよいでしょうか。サウンドウェーブ配列の長さをサウンドウェーブの長さ(秒)で割ることで求めることもできますが、Python の wave モジュールにはもっと良い方法があります。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])
コードを編集して実行