用Python制作音乐笔记

时间:2012-07-23 20:04:04

标签: python

我有一个项目用python3制作一种音乐合成器。我必须使用库存数据中的数字并使用我的音乐类创建一个播放器文件和一个文件,该文件将使用我的播放功能将注释输出到.rra文件。

m.play(D,3,2)在第三个八度音阶中演奏D为2节拍。

我仍然很困惑我的游戏功能如何运作。为了在八度音阶播放某个音符,我假设只要该音符应该播放,我会附加股票数据。我很困惑,因为我将其输入到代码中。

任何帮助或提示都将不胜感激。

以下是我的音乐类文件和播放器文件的骨架:

我会用命令播放:“python3 player.py stock.dat | aplay”

music.py

课堂音乐:

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 :(得分:0)

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

aplay man page

我找不到有关此类文件格式的任何详细信息,但这是您应该从哪里开始的。如果允许您为aplay选择一些选项(通过在命令行的末尾添加-options),那么您可以找到更容易使用的格式。

您项目的基本思想是采用一种“MIDI”格式,教师毫无疑问地指定了这种格式,其中给出了音符和节拍等,并以标准格式输出原始声音文件。您应该注意到类似Midi的压缩格式是一个小得多的文件。

答案 1 :(得分:0)

为何选择RRA格式?

我曾经做过类似的事情,但主要是在内部使用MIDI格式。

播放midi文件的示例程序是here。在函数midievents_to_rawpcm(已定义here)中,我使用fluidynth进行合成。

采用键盘输入并将其解释为钢琴键的示例程序是here