2011-03-02 12 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

관련 문제