[DRUMSOFT 旧BBS][全部]

文字から音を作るスレ

utaは最近pythonに凝っているらしいので、その過程を実況中継します。巷ではcircuit bending なんていうそこらへんの安い楽器の電子回路をメクラ滅法弄って、ステキな音を出すっていうプロジェクトが流行っているらしい。http://www.youtube.com/results
35 hrk 2011-08-25 17:43 permalink
>>13
訂正: FM はこうでした。

sine_phase = 0

def generate_sine(generate_time):
mod_phase = 2.0 * pi * generate_time * mod_freq / samp_rate
modwave = sin( mod_phase )
sine_phase += 2.0 * pi * (freq + fm_rate * modwave) / samp_rate
sinwave = amp * sin( sine_phase )
return sinwave

8 とか 13 のコードだと modwave の変化に対する sine_phase の変化量(Δsine_phase/Δmodwave)が
8: Δsine_phase/Δmodwave = 2.0 * pi * generate_time * freq * fm_rate / samp_rate
13: Δsine_phase/Δmodwave = 2.0 * pi * generate_time * fm_rate / samp_rate
なので、 generate_time が大きくなると変調が効き過ぎておかしくなるね。

というわけで、
Δsine_phase/Δgenerate_time = 2.0 * pi * (freq + fm_rate * modwave) / samp_rate
を毎フレーム毎に sine_phase に加算してあげるのが正しい計算かと。

この場合 sine_phase を generate_sine 用に保持する必要があるので、オブジェクトとかクロージャにするといいですね。
[DRUMSOFT 旧BBS][全部]