可変周波数の音パターンをwavファイル化するプログラムをPythonで作成してみました。
振幅、周波数、秒のパラメータを好きに変えることでオリジナルの音源を作成することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
import wave import numpy as np import struct a = 1 #振幅 fs = 44100 #サンプリング周波数 f0 = 0 f1 = 440 #周波数 f2 = 493.88 f3 = 523.25 f4 = 587.33 sec = 1 #秒 swav=[] for n in np.arange(fs * sec): s = a * np.sin(2.0 * np.pi * f0 * n / fs) swav.append(s) for n in np.arange(fs * sec): s = a * np.sin(2.0 * np.pi * f1 * n / fs) swav.append(s) for n in np.arange(fs * sec): s = a * np.sin(2.0 * np.pi * f2 * n / fs) swav.append(s) for n in np.arange(fs * sec): s = a * np.sin(2.0 * np.pi * f3 * n / fs) swav.append(s) for n in np.arange(fs * sec): s = a * np.sin(2.0 * np.pi * f4 * n / fs) swav.append(s) #サイン波を-32768から32767の整数値に変換(signed 16bit pcmへ) swav = [int(x * 32767.0) for x in swav] #バイナリ化 binwave = struct.pack("h" * len(swav), *swav) #サイン波をwavファイルとして書き出し w = wave.Wave_write("sample.wav") p = (1, 2, fs, len(binwave), 'NONE', 'not compressed') w.setparams(p) w.writeframes(binwave) w.close() |
swavという配列に波形の数値をappendで追加していき、追加完了したらバイナリ化してwavファイル化します。
wavファイル化しておけばどの端末でも再生できるので便利です。