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

Posted

技术标签:

【中文标题】如何在 python 中生成音符或和弦?【英文标题】:How can I generate a note or chord in python? 【发布时间】:2011-03-02 21:34:48 【问题描述】:

谁能指出我在 python 2.7 中生成音符和和弦的好库?我在没有太多运气的情况下查看了 PythonInfoWiki,PyAudio 只是崩溃了,似乎没有其他东西会产生音调。

【问题讨论】:

【参考方案1】:

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

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 文件。

【讨论】:

为什么不将前两个参数设为一个元组列表呢? [(440,.4),(880,.3),(1200,.1)] 我可以在任何地方跟踪此代码的开发(或者它是一次性的吗?) - 可以在 gpl 应用程序中使用它吗? 这是一种一次性的...我正在做一个关于和弦识别的项目,我已经制作了一些脚本来生成测试材料。这不是项目的核心。但你绝对可以在 gpl 应用上使用它。 它为我创建了一个空文件。我正在使用 Mac 和 python 2.6.6

以上是关于如何在 python 中生成音符或和弦?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式检测音符和和弦(在 iPhone SDK 中)?

如何使用 guitar pro 制作扫弦的吉他谱

Python - 如何将时间序列存储到数据集中

使用 NAudio 演奏和弦的最佳方式

如何在 Android 上播放非正弦音符?迷笛?

如何在 Python 中生成唯一 ID? [复制]