前回はサイン波形の作成について記述しましたが
今回は、矩形波形について説明します。
矩形波作成
import wave
import pyaudio
import numpy as np
nchannels = 1
freq = 400
framerate = 44100
sampwidth = 2 #16bit
total_secs = 2.0
# 1 cycle
half_frames_per_cycle = int(round(framerate / freq /2 ))
frames_per_cycle = half_frames_per_cycle * 2
w0 = np.full(half_frames_per_cycle * nchannels, 32767, dtype=int)
w1 = np.full(half_frames_per_cycle * nchannels, -32768, dtype=int)
d = np.concatenate([w0.astype(np.int16), w1.astype(np.int16)])
cycle_time = frames_per_cycle / framerate
data = np.tile(d, int(total_secs/cycle_time))
out_wave = wave.Wave_write('square.wav')
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を変更することで音の高低が変化します。