LoginSignup
0
0

More than 1 year has passed since last update.

スピーカー特性の測定方法・・・2-2)矩形波形の作成&再生

Last updated at Posted at 2021-12-25

前回はサイン波形の作成について記述しましたが
今回は、矩形波形について説明します。

矩形波作成

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を変更することで音の高低が変化します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0