2011-03-02 28 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") 

是這樣的代碼我使用產生的音符與和絃蟒蛇。您可以推薦第一個參數的頻率列表,一個幅度列表(與第一個參數大小相同),一些樣本和文件名稱。它會用給定的組合生成一個wav文件。

+4

爲什麼不把前兩個參數作爲單個元組列表? '[(440,.4),(880,.3),(1200,.1)]' – user470379

+0

...是的,你說得對,那是更好的方法。在這方面更有意義,謝謝你的提示! – Nemeth

+0

有什麼地方我可以跟蹤這段代碼的開發(或者是一次性的?) - 可以在gpl應用中使用它嗎? – Sirex