所以我使用BASS库在Python中创建一个wave文件,我无法生成正弦波。它会产生波浪,但它具有间歇性的静态部分。我的想法是问题在于header方法,因为我尝试了很多不同的波形生成方法,它们都有静态或奇怪的噪音。我不能使用python wave类,因为我最终会使用它来将wav写入内存而不是文件。
以下是我用来生成文件的代码:
def make_wav_header(self, sampleArray, sampleRate):
byteCount = (len(sampleArray)) * 2 # 16-bit signed
wavFile = ""
# write the header
wavFile += pack('<ccccIccccccccIHHIIHH',
'R', 'I', 'F', 'F',
byteCount + 0x2c - 8, # header size
'W', 'A', 'V', 'E', 'f', 'm', 't', ' ',
0x10, # size of 'fmt ' header
1, # format 3 = floating-point PCM
1, # channels
sampleRate, # samples / second
sampleRate * 2, # bytes / second
2, # block alignment
16) # bits / sample
wavFile += pack('<ccccI',
'd', 'a', 't', 'a', byteCount)
print "sample length: " + str(len(sampleArray))
#for sample in sampleArray:
#wavFile += pack("<h", sample)
wavFile += sampleArray
print "wave length: " + str(len(wavFile))
return wavFile
def gen_wave(self, freq, rate):
amplitude = 22000
wvData=""
dataPerSample = freq*2*pi/rate
phase = 0
for i in range(0, rate*3):
phase += dataPerSample
wvData+=pack('h', amplitude*sin(phase))
return wvData
第一种方法生成波头,第二种方法生成正弦波。 wvData从gen_wave返回并传递给make_wav_header的第二个参数。从make_wave_header返回的数据是写入wav文件的内容。