一昨日あたりに作成したwaveGeneratorを少し修正してみた。
音階を取得するところとかそーいうあたりをリファクタリング
あと、AをプロパティにしたのでAを変更するとオクターブをかえれるようになっている。

#!/usr/bin/env python
import wave, math, array

class waveGenerator():
    def __init__(self,fileName=''):
        if fileName!='':
            self.openFile(fileName)
        else:
            f = None
        self.inc = math.pow(2,1.0/12)
        self.A = 440
        self.scaleFreqMap = {'A':0,'AS':1,'B':2,'C':3,'CS':4,'D':5,'DS':6,
                             'E':7,'F':8,'FS':9,'G':10,'GS':11}
    def getFreq(self,scale):
        return math.pow(self.inc,self.scaleFreqMap[scale]) * self.A

    def addScale(self,scale,len,volume=15000):
        self.addWave(self.getFreq(scale),len,volume)

    def openFile(self,fileName):
        self.nchannels = 1
        self.sampwidth = 2
        self.framerate = 44100
        self.nframes = 0
        self.compname = 'NONE'
        self.comptype = 'not compressed'
        self.f = wave.open(fileName,'w')
        self.f.setparams((self.nchannels,self.sampwidth,self.framerate,self.nframes,
                          self.compname,self.comptype))

    def closeFile(self):
        self.f.close()

    def addWave(self,freq,len,volume=15000.0):
        data = array.array('h')
        data.extend([0]*int(len*self.framerate))
        a = math.pi * 2.0 * float(freq) / float(self.framerate)
        for i in range(int(self.framerate*len)):
            ft = int(math.sin(a*float(i))*volume)
            data[i] = ft
        self.f.writeframesraw(data.tostring())
    def addHarmonyWave(self,freqs,len,volume=15000.0):
        print (freqs,len,volume)
    def no9(self):
	w.addScale('E',0.5)
	w.addScale('E',0.5)
	w.addScale('F',0.5)
	w.addScale('G',0.5)
	w.addScale('G',0.5)
	w.addScale('F',0.5)
	w.addScale('E',0.5)
	w.addScale('D',0.5)
	w.addScale('C',0.5)
	w.addScale('C',0.5)
	w.addScale('D',0.5)
	w.addScale('E',0.5)
	w.addScale('E',0.5)
	w.addScale('D',0.5)
	w.addScale('D',0.5)
	w.addWave(0,0.5)
	w.addScale('E',0.5)
	w.addScale('E',0.5)
	w.addScale('F',0.5)
	w.addScale('G',0.5)
	w.addScale('G',0.5)
	w.addScale('F',0.5)
	w.addScale('E',0.5)
	w.addScale('D',0.5)
	w.addScale('C',0.5)
	w.addScale('C',0.5)
	w.addScale('F',0.5)
	w.addScale('E',0.5)
	w.addScale('D',0.5)
	w.addScale('C',0.5)
	w.addScale('C',0.5)
	w.closeFile()