如何在Python中生成音符或和弦?

4 投票
1 回答
7654 浏览
提问于 2025-04-16 12:51

有没有人能推荐一个适合在Python 2.7中生成音符和和弦的好库?我查过PythonInfoWiki,但没找到合适的,PyAudio总是崩溃,其他的库似乎也不能生成声音。

1 个回答

8

我不知道这是否有帮助,但这里有一些代码,可以根据给定的频率和振幅合成复杂的声音:

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")

这是我用来在Python中生成音符和和弦的代码。你需要准备一个频率列表作为第一个参数,还有一个振幅列表(大小要和第一个列表一样),然后是样本数量和文件名。这样就能生成一个包含这些组合的wav文件。

撰写回答