用Python制作音乐符号

3
我有一个项目需要用Python3制作一种音乐合成器。我需要使用股票数据中的数字创建一个播放器文件和一个包含我的音乐类的文件,该类将输出音符到.rra文件中,并使用我的播放函数。
例如:m.play(D, 3, 2) 表示在第三八度演奏D音符,持续两个节拍。
但是我仍然很困惑如何使我的播放函数工作。为了演奏特定的音符,我假设必须添加股票数据中的数字,直到音符演奏完成。但我不确定如何将其输入到代码中。
希望能够得到任何帮助或提示。
以下是我的音乐类文件和播放器文件的框架:
可以使用以下命令进行播放:"python3 player.py stock.dat | aplay"
music.py
class music:
def __init__(self, infile):

    self.infile = infile
    self.beats = 4
    self.list = []
    fp = open(infile, 'r')
    for line in fp:
        self.list.append(eval(line))
    pass

def set_beat(self, x):
    self.beats = x

def header(self):
    print("RRA\n%%\n")

def play(self, note, octave, beats):
    pass

def __str__(self):
    s = "infile" + self.infile + ", Beats:" + self.beats

player.py

import sys
from music import Music

def main():

m = Music(sys.argv[1])

m.set_beat(0.25) # one beat is 0.25 seconds

m.header() #output the audio header

m.play("C",3,1) # play C in octave 3 for one beat

m.play("D",3,2) # play D in octave 3 for two beats

main()
2个回答

0

指令:"python3 player.py stock.dat | aplay" 表示您希望将文件流传输到 ALSA 声卡驱动程序的音频播放器 aplay。没有任何选项,输入默认为 U8 格式。

aplay man page

我找不到这种文件格式的详细信息,但这是您应该开始的地方。如果您可以选择一些 aplay 的选项(通过在命令行末尾添加 -options),那么您可以找到一个更容易使用的格式。

您的项目的基本思路是接收一种类似于 "MIDI" 格式的数据,其中包含给定的音符和节奏等信息,并将其转换成标准格式的原始音频文件。您应该注意到,Midi-like 压缩格式是一个更小的文件。


0

为什么要使用RRA格式?

我之前也做过类似的工作,但基本上都是在内部使用MIDI格式。

一个播放midi文件的示例程序在这里。在函数midievents_to_rawpcm中(在这里定义),我使用fluidsynth进行合成。

一个将键盘输入转换为钢琴键的示例程序在这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接