3

私はpython3で一種の音楽シンセサイザーを作るプロジェクトを持っています。ストック データの数値を使用して、プレーヤー ファイルと、再生機能を使用してノートを .rra ファイルに出力する音楽クラスを含むファイルを作成する必要があります。

m.play(D,3,2) 第 3 オクターブの 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()
4

2 に答える 2

0

コマンド「python3player.pystock.dat| aplay」は、ALSAサウンドカードドライバーのオーディオプレーヤーであるaplayユーティリティにファイルをストリーミングすることを示します。オプションがない場合、入力はデフォルトでU8形式になります。

aplayのマニュアルページ

そのようなファイルのフォーマットの詳細はわかりませんが、そこから始めるべきです。(コマンドラインの最後に-optionsを追加することで)aplayのいくつかのオプションを選択できる場合は、より簡単な形式を見つけることができます。

プロジェクトの基本的な考え方は、インストラクターが間違いなく指定した、音符やビートなどが与えられた一種の「MIDI」フォーマットを採用し、生のサウンドファイルを標準フォーマットで出力することです。MIDIのような圧縮形式ははるかに小さいファイルであることに注意してください。

于 2012-07-23T22:32:05.910 に答える
0

なぜ RRA 形式なのですか?

私は似たようなものに取り組みましたが、内部的には主に MIDI フォーマットを使用しました。

midiファイルを再生するサンプルプログラムはこちらです。関数midievents_to_rawpcm(ここで定義) では、合成に fluidsynth を使用しています。

キーボード入力を受け取り、それらをピアノのキーとして解釈するサンプル プログラムはこちらにあります。

于 2012-11-10T16:12:12.247 に答える