3

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

m.play(D,3,2) 在第三个八度音阶中播放 D 2 拍。

我仍然很困惑我的播放功能将如何工作。为了以八度音阶演奏某个音符,我假设只要该音符应该演奏,我就会附加库存数据编号。我很困惑如何将其输入代码。

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

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

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

音乐.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

播放器.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()
4

2 回答 2

0

为什么是 RRA 格式?

我做过类似的工作,但在内部主要使用 MIDI 格式。

播放 MIDI 文件的示例程序在这里。在函数midievents_to_rawpcm(定义在这里)中,我使用流体合成器进行合成。

这里有一个接受键盘输入并将它们解释为钢琴键的示例程序。

于 2012-11-10T16:12:12.247 回答
0

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

aplay 手册页

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

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

于 2012-07-23T22:32:05.910 回答