第1回解説 にてWAVファイルの読み込み方法を説明しました。
次にオーディオ評価用の音源の作成を行います。
##Sin波形の作成&保存
では、基本ということでSin波形の作成手順を示していきます。
create_wav.py
import wave
import numpy as np
import pyaudio
nchannels = 1
freq = 100 #作成するサイン波形の周波数
framerate = 44100
sampwidth = 2 #16bit
total_secs = 2.0
file_name = 'sin.wav'
data_num = int(total_secs * framerate)
t = np.linspace(0, total_secs, data_num)
wav = 32767 * (np.sin(np.pi*freq*t))
if nchannels == 2:
wav = np.array([wav,wav]).transpose()
data = wav.astype(np.int16)
out_wave = wave.Wave_write(file_name)
out_wave.setnchannels(nchannels)
out_wave.setsampwidth(sampwidth)
out_wave.setframerate(framerate)
out_wave.writeframes(data)
out_wave.close()
##再生(読み込み&再生)
#保存した音声ファイルを再生する
wf = wave.open(file_name, "r")
# ストリームを開く
p = pyaudio.PyAudio()
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels=wf.getnchannels(),
rate=wf.getframerate(),
output=True)
# 音声を再生
chunk = 1024
data = wf.readframes(chunk)
while data != b'':
stream.write(data)
data = wf.readframes(chunk)
stream.close()
p.terminate()
以上で、簡易な波形ジェネレータが作成できました。
パラメータ:freqを下げたり上げたりすると音の高低が調整できます。
今後の解説では、再生した音声を
マイクで録音し周波数特性の解析をするまで行います。
その前に、矩形波の作成方法を説明します。