wavファイルの再生

すること

  • 音そのものの再生
  • wavファイルから波形データを取得
  • wavファイルの音を再生

実行環境

  • データ
    声優統計コーパスを利用します.
  • 実行環境
    • Mac(High Sierra)
    • python3.7
    • Jupyter lab

実際に試したJupyter

まずwavファイルから音を再生します
初心者だったので,音はどういうデータとして扱われているかから調べました.

調べた結果,音声データは(シンプルには)1次元の配列として扱われていることがわかりました. 配列のi番目の要素の大きさが時刻iでの音の大きさを表します.

実際に,単純な正弦波を再生します.

import numpy as np
import IPython.display as ipd

rate = 8000
length = 1
t = np.arange(0, length, 1 / rate)
amp = 2.0
freq = 440
audio = amp * np.sin(2 * np.pi * freq * t)

ipd.Audio(audio, rate=rate)

次に実際のwavデータを読み込みます.
データを読み込む時は scipyscipy.io.wavfile を使います.

from scipy.io import wavfile
voice_path = "../voice-statistics/assets/data/tsuchiya_happy/tsuchiya_happy_001.wav"
fs, voice = wavfile.read(voice_path)

ipd.Audio(voice, rate=fs)

fsはサンプリング周波数,voiceは音声データの一次元配列です. voiceのサイズからフレーム数がわかり,フレーム数/ サンプリング周波数で再生時間もわかります.

注意
read時にWavFileWarning: Chunk (non-data) not understood, skipping it. WavFileWarning)が出ることがあります. おそらくwavのサンプリングレートとデータ本体以外のチャンクが捨てられたため,警告が出たのではないかと思います.

wavファイルのチャンクについてはここが参考になりました.

注意2
wavファイルにはステレオとモノラルの2つが(主に)あります. ステレオは二次元配列,モノラルは一次元配列になります. readipd.Audioもステレオ,モノラル両方対応しています. ただし,ステレオの場合,型が異なっており,転置が必要になります.

fs, stereo_audio = wavfile.read('./audios/signal.wav')
ipd.Audio(stereo_audio.T, rate=fs)

統計コーパスはモノラルなので特に意識する必要はありません.

// コードブロック