用Python中的正弦波填充wav文件

时间:2013-09-14 04:29:12

标签: python audio wav bass

所以我使用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文件的内容。

0 个答案:

没有答案