<jupyter_start><jupyter_text>Pythonで440Hzのサイン波を作成しWAVファイルに保存する<jupyter_code>import numpy as np
import wave
import struct
from matplotlib import pylab as plt

fname = 'sinwave_440hz.wav'
ch = 1 # チャンネル数：モノラル
width = 2 # 量子化精度：2byte=16bit=65,536段階=±32,767
fs = 44100 # サンプリング周波数：44.1kHz
f = 440 # 基本周波数：440Hz(A4)
time = 3 # 録音時間：3秒間
samples = time * fs # サンプル数

t = np.linspace(0, time, samples + 1)
s = 32767 * np.sin(2 * np.pi * f * t)
s = np.rint(s)
s = s.astype(np.int16)
s = s[0:samples]
data = struct.pack("h" * samples , *s) # ndarrayからbytesオブジェクトに変換

wf = wave.open(fname, 'w')
wf.setnchannels(ch)
wf.setsampwidth(width)
wf.setframerate(fs)
wf.writeframes(data)
wf.close()

plt.plot(s[0:500])
plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.15020297699594046, 'fraction_numerical': 0.07171853856562922, 'mean_word_length': 5.3247863247863245, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '270062', 'license': 'MIT', 'n_tokens_mistral': 423, 'n_tokens_neox': 391, 'n_words': 67, 'path': 'make_sinwave_440hz.ipynb', 'repo_name': 'oishiikurigohan/spectrum_analysis', 'size': '739'}