波の合成
前回のエントリで書いたユーティリティをちょっといじって新しいルールを追加してサイン波を合成させた。
- Waveクラスは加算をオーバーロードする。2つのWaveクラスa,bの加算はオーディオフレームの添字をiとしてとする。1/2しているのは加算結果がwavデータで扱える数値を超えないようにするため。
- SilentInitクラスはWaveInitクラスの派生クラスで、全てのオーディオフレームを無音(ビット深度が8bitなら128,16bitなら0)で初期化する。
この新しいルールによって、Waveクラスのシーケンスに対してsum関数で合成波が得られる。
info = WaveInfo(1, 16, 44100, 44100) wavs = (Wave(info, SinWaveInit(hz)) for hz in lst) comp = sum(wavs, Wave(info, SilentInit())) # 合成波