Frinika というオープンソースの音楽ワークステーションがあり、Javascript でスクリプトを作成できます。(ノートの挿入/削除、ピッチ ホイールなどの MIDI エフェクトの変更) 通常の MIDI ファイルをインポート/エクスポートできるため、Fruity ループやその他のもので動作します。
// Insert New
song.newLane("MyMidiLane", type("Midi"));
lane = song.getLane("MyMidiLane");
part = lane.newPart( time("10.0:000"), time("4.0:000") );
part.insertNote(note("c#3"), time("11.2:000"), time("2:0"), 120 );
part.insertNote(note("f3"), time("11.3:000"), time("1:0"), 100 );
part.insertNote(note("g#3"), time("11.3:000"), time("1:0"), 100 );
part.insertNote(note("b3"), time("11.3:000"), time("0:64"), 100 );
part.removeNote(note("f3"), time("11.3:000"));
part = song.newLane("MyTextLane",
type("Text")).newPart(time("24.0:000"), time("10.0:000"));
part.text = "This is the test text to be inserted.";
part.lane.parts[0].remove(); // remove initially inserted text-part
メモの読み取り/変更の別の例:
lane = song.getLane("MyMidiLane");
// a lane has a fixed instrument assigned
lane.parts[0].notes[0].duration=64
lane.parts[0].notes[1].duration=32
lane.parts[0].notes[1].startTick=120
// Parts are blocks of notes that you can drag around together in the Frinika GUI.
// They're like patterns in trackers.
for (i in lane.parts[0].notes){
println("i: "+i+", n: "+noteName(lane.parts[0].notes[i].note));
println("i: "+i+", dur: "+lane.parts[0].notes[i].duration);
println("i: "+i+", startT: "+lane.parts[0].notes[i].startTick);
}
http://frinika.appspot.com/
Java Webstart ランチャーも備えているため、インストールする必要さえありません。
以前は Javadoc ドキュメントもバンドルされていましたが、何らかの理由で最新のダウンロードには含まれていません。Javascriptバインディングが文書化されている場所であるため、残念です。そのため、ソースをブラウズするか、自分で Javadoc をビルドする必要があります。(スクリプトウィンドウからアクセスできるいくつかの組み込みの例があります。最初にそれらをチェックアウトする必要があります。私の最初の例はそこからのものです。)
以下は、Javascript のドキュメントがあるソースファイルです。
frinika Javascript doc/source
しかし、他のオプションもあります。音楽理論と MIDI ファイル処理のための Python ライブラリであるmingusも確認できます。Fluidsynth が必要で、デモ アプリにも GamePython が必要なので、Frinika よりもセットアップが少し複雑です。
PS: Frinika には特定のバグがあります。隣接する音符をドラッグすると、適切な長さに聞こえないものがあるかもしれません。連続する音符を前後に移調する (ピアノ ロール ビューではかなり速い) か、音符を含む部分を前後にドラッグすることで、これを支援できます。Frinika を再起動することも役に立ちますが、それでは時間がかかります。したがって、このバグは保存されたファイルにも MIDI エクスポートにも影響しません。