Pythonでsin波合成(import_numpy&matplotlib) | ..あちゃ! no mic's

..あちゃ! no mic's

クラウドファンディング予定~2026年度
何度でもチャレンジ!
ただいまソーラーピックアップのテスト中

SANTA no Mix


コードの引用元のサイトがどこなのか、分からなくなってしまった。
申し訳ありません。
たぶん、ここを編集した…

盗んだ「コード」で走り出す~

という訳で、モジュールのインストール(Linux)。
RaspberryPiで確認。

$sudo apt-get install python-numpy python-matplotlib
$sudo pip install wave

矩形波の音を出してみた。
「SuperCollider」は、すぐに音が出たけど、こちらはそうではなかった。
10分くらいかかったのはなぜ?
少なくともWAVファイルをツクルのはすぐにできた。

Pythonで記述する方法、いろんなモジュールで可能であるらしく、どれを使っていいのか困った。
記述が多様な分、自由度も大きいんだろうけど、参考サイトも少なくて、初心者には不向きだと思った。
# -*- coding: utf-8 -*-
 
import wave
import numpy as np
from matplotlib import pylab as plt
import struct
 
a = 1     #振幅
fs = 8000 #サンプリング周波数
f0 = 440  #周波数
sec = 10  #秒
 
swav=[0.0] * (fs * sec)
 
for i in range(1,100,2):
    for n in np.arange(fs * sec):
        #サイン波を生成し重ね合わせる
        swav[n] += 1.0 / i * np.sin(2.0 * np.pi * i * f0 * n / fs)
 
for n in range(fs * sec):
    swav[n] *= a
 
#サイン波を表示
plt.plot(swav[0:20])
plt.show()
 
#サイン波を-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("output.wav")
p = (1, 2, 8000, len(binwave), 'NONE', 'not compressed')
w.setparams(p)
w.writeframes(binwave)
w.close()




どうしようもない動画だけど、載せておいた。