Pythonでsin波のwavファイルを作成する方法を説明する。
具体例
サンプリング周波数44.1kHzで440Hzのサイン波のwavファイルを生成するコードを示す。
- サイン波のデータを生成する。
- 符号無し16bitに変換する。
- バイナリに変換する。「*」はiterateの意味。
- Wave_writeクラスのインスタンスを生成。
- パラメータを設定。引数は(nchannels : チャンネル数(モノラルなら
1
、ステレオなら2
), sampwidth : Byte数(2Byteなら2), framerate : サンプリングレート, nframes : オーディオフレーム数, comptype : 圧縮形式( ‘NONE’ だけがサポートされている), compname : 通常 ‘NONE’ に対して ‘not compressed’ が返される) - バイナリデータからwavファイルを生成する。
#!/usr/bin/env python3
import numpy as np
import struct
import wave
freq = 440 # Hz
output_directory = "/Users/Yoshihiko/Desktop/"
output_file_name = str(freq)
output_file_path_wav = output_directory + output_file_name + ".wav"
number_of_waves = int(freq) # 周波数によらず約1秒分の波数
period_of_waves = 1/freq * number_of_waves # 音の長さ [s]
fs = 44100 # サンプリング周波数 [Hz]
Ts = 1/fs # サンプリング周期 [s]
number_of_samples = fs * period_of_waves # サンプル点数
sin_x = np.arange(0, number_of_samples)
sin_y = np.sin(2 * np.pi * freq * (sin_x * Ts)) # ? 1
sin_y_INT16 = [int(i * pow(2, 16)/2) for i in sin_y] # ? 2
binary = struct.pack("h" * len(sin_y_INT16), * sin_y_INT16) # ? 3
w = wave.Wave_write(output_file_path_wav) # ? 4
w.setparams((1, 2, fs, len(binary), 'NONE', 'not compressed')) # ? 5
w.writeframes(binary) # ? 6
w.close()
まとめ
Pythonでsin波のwavファイルを作成する方法を説明
コメント