以编程方式创建旋律

2024-04-16 16:21:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用编程的方式来演奏旋律。在

我真的不在乎音色,虽然如果我能让它听起来像老式的8位音乐那就太酷了。在

我希望能够通过简单地为每个音符指定它的长度、播放时间(从歌曲开头开始)和音调来播放音乐。在

我想按以下方式使用它:

from awesomeMelodyLibrary import play

# Perhaps play accepts an iterable of 3-tuples where 
# the items of the tuple are (pitch, duration_of_note, when_to_play)
# and then it would play those notes.
play([ (440, 200, 0),    # A4
       (440, 200, 200),
       (660, 200, 400),  # E5
       (660, 200, 600),
       (740, 200, 800),  # F#5
       (740, 200,1000),
       (660, 400,1200) ])

它会播放字母歌的开头。在

它不一定是那样的,我也可以有一些限制(例如,最多只能同时播放三个音符),但关键是我不想被原始声音数据弄脏,处理混合不同声音片段的细节,以便播放和弦、声音片段等


Tags: ofthefrom声音play音乐编程方式
1条回答
网友
1楼 · 发布于 2024-04-16 16:21:46

尝试使用Python前端的RTcmix。在

虽然我在Ubuntu上使用它,但它在osx上运行得最好。这不是一个简单的构建过程,但是你可以在他们的讨论列表中看到我在ubuntu12.04上的安装过程。在

他们有各种各样的工具。我最喜欢的是STRUM2,一种拨弦乐器。在

下面是如何在Python中播放一些音符。在

from rtcmix import *
rtsetparams(44100, 2)
load("STRUM2")
noteOnset = 0 #in seconds
duration = 1.0 # in seconds
amplitude = 10000
pitch = 440 # specified in hertz
squish = 1
decay = 1.0
pan = .5 
STRUM2(noteOnset, duration, amplitude, pitch, squish, decay, pan)

默认情况下,它以赫兹为单位,但是这个函数可以将MIDI键号转换为赫兹。在

^{pr2}$

如果您想用标准符号('Bb6', 'G#8', 'F-1', 'A4')指定注释,那么可以使用我编写的nameToNum函数。找到它here。在

{em4}在我的网站上查看更多的复杂算法的实现。如果你想做的不仅仅是演奏特定的音符,我强烈建议你读一读那本书。它是为Lisp/Common Music编写的,但是我的repo中有很多是Python/RTcmix翻译的。在

相关问题 更多 >