2011-03-02 7 views

答えて

6

それが役立つかどうかは知りませんが、ここでは周波数と振幅を与えるに基づいて複雑な音をsynthetizesいくつかのコードです:私はノートや和音を生成するコード使用しています

import math 
import wave 
import struct 

def synthComplex(freq=[440],coef=[1], datasize=10000, fname="test.wav"): 
    frate = 44100.00 
    amp=8000.0 
    sine_list=[] 
    for x in range(datasize): 
     samp = 0 
     for k in range(len(freq)): 
      samp = samp + coef[k] * math.sin(2*math.pi*freq[k]*(x/frate)) 
     sine_list.append(samp) 
    wav_file=wave.open(fname,"w") 
    nchannels = 1 
    sampwidth = 2 
    framerate = int(frate) 
    nframes=datasize 
    comptype= "NONE" 
    compname= "not compressed" 
    wav_file.setparams((nchannels, sampwidth, framerate, nframes, comptype, compname)) 
    for s in sine_list: 
     wav_file.writeframes(struct.pack('h', int(s*amp/2))) 
    wav_file.close() 

synthComplex([440,880,1200], [0.4,0.3,0.1], 30000, "tone.wav") 

Python。あなたは、最初のパラメータ、振幅リスト(最初のものと同じサイズ)、サンプル数、ファイル名の頻度リストを表示します。指定された組み合わせのwavファイルが生成されます。

+4

最初の2つの引数を1組のタプルリストにしてみませんか? ([440、.4)、(880、.3)、(1200、.1)] ' – user470379

+0

...そうです、それは良いアプローチです。この文脈で、はるかに理にかなっています、チップのおかげで! – Nemeth

+0

このコードの開発をどこからでも追跡できますか(または1つでしたか?) - gplアプリケーションで使用するのは大丈夫ですか? – Sirex

関連する問題