2009-02-20 19 views
23

MIDIサウンドを作成する小さなアプリケーションを作成したいと考えています。私はプログラミングのサウンドを扱ったことがないので、基本的なものから始まり、良い文書を持っていきたいと思っています。私はPythonに執着したいと思います。なぜなら、私はPythonに最も快適で、最初は自分自身を圧倒したくないからです。Python用シンプルなクロスプラットフォームMIDIライブラリ

私の時間は、WindowsとUbuntuの間で約50分の50に分割されているので、どちらのプラットフォームでも「うまくいく」ということが本当に役に立ちます。

提案がありますか?

+0

関連:http://stackoverflow.com/questions/507227 /高レベルのプログラミング言語のための音楽の構成 –

+0

なぜあなたはあなたの質問に回答としてマークしていない! – Shimmy

+3

あなたの質問は本当に明確ではありません。 「MIDIサウンドを作成する」ことはできません。 MIDIはサウンドを保存または送信せず、MIDI互換機器/ソフトウェアのコントロールデータのみを保存します。 a)あなたのコンピュータのMIDIインターフェイスを使ってリアルタイムで他のMIDIデバイス/ソフトウェアと会話するか、b)標準MIDIファイル(SMF)を読み書きするかのどちらかです。これらは2つの異なる要件です(ただし、多くのアプリケーションには両方の機能があります)。また、両方のタスクに適したライブラリがあります。 –

答えて

33

MIDIUtilライブラリ(Googleコードでホストされたhere)は、 :純粋なPythonライブラリからMIDIファイルを書き込みます。それについての素敵なこと(そして完全な開示:私は著者です)は、ノートオンやノートオフなどのより低レベルのMIDイベントを追跡する必要がないということです。

ノートを書くための例として、あなたのようなものだろう:

MyMIDI = MIDIFile(1) 
track = 0 
channel = 0 
pitch = 60 
time = 0 
duration = 1 
volume = 100 
MyMIDI.addNote(track,channel,pitch,time,duration,volume) 

希望をこれがそれだ

+2

本当に遅くこれを投稿するが、それは和音を扱うことができますか?私はそれができる場合、私のソフトウェアでこれを実装するかもしれません... – Blender

+1

それは本当に便利な、感謝! – Dan

+2

あなたは簡単に和音を定義できますか? 'ピッチのピッチ:midi.addNote(..、pitch、...)' –

8

pyPortMidiは、PortMidiのPythonラッパーで、「リアルタイムMIDIコントロールのためのクロスプラットフォームのCライブラリ」と呼ばれています。私は自分で使ったことはありませんが、非常に有望です。リアルタイムでMIDIデータを送信できることの明示的な言及。

+4

pyPortMidiは2005年3月15日に最後に更新されました。放棄された。 – larsks

+2

pyGameに含まれるpyPortMidiのバージョンが少し上がっていますが、これは正常に使用されています。 – rjmunro

+0

は生の16進形式で書かずにピッチベンドを送信することはできませんか? 'player.write_short(0xE0、0x00、0x60)':/ – endolith

-3

cSoundsをご覧ください。

+3

この回答を拡大できますか? cSoundsページには、MIDIやPythonについては言及していません。 – rjmunro

+0

@rjmunro、FYI:http://www.csounds.com/manual/html/py.html –

3

pyGame 1.9にはミディサポートが追加されていますが、主に開発段階にありますが、まだ十分に文書化されていませんが、動作します。

pyGameの後継者であるpgreloaded(またはpygame2)でもミディサポートが開発されています。

また、pyGameのタイトルに「ゲーム」が含まれていても、その使用方法はゲームデザインをはるかに超えています。

+4

PyGameのMIDIサポートは、pyPortMidi(@ unwindの回答を参照)と同じコードベースに基づいており、pyPortMidiコードは[ PyGameリポジトリ](https://bitbucket.org/pygame/pygame)は、現在、最新かつ使用可能なバージョンです。免責事項:私はPyGameのpyPortMidiバージョンへのパッチの作成者です。コードを多く整理し、重大なエラーを修正しています。パッチは現在、[portmidi repository](https://portmedia.svn.sourceforge.net/svnroot/portmedia/portmidi/)にはまだ適用されていません。ここでは、pyPortMidiコードが現在生きています。ネット上にはいくつかの他のpyPortMidi reposがありますが、これは古くなっています。 –

10

MIDIファイルを生成する純粋なPythonライブラリを探していましたが、mxm's Python MIDI libraryとまったく同じです。 this dzone snippetから

、上記ライブラリーの単一ファイルのバージョンがある、smidi.py(後世のためgist'd here

使い方は非常に簡単です:

>>> import smidi 
>>> m = smidi.MidiOutFile('out.mid') 
>>> m.header() 
>>> m.start_of_track() 
>>> m.update_time(0) 
>>> m.note_on(note=0x40) # single note 
>>> m.update_time(192) 
>>> m.note_off(note=0x40) # stop it after 192 
>>> m.update_time(0) 
>>> m.end_of_track() 
>>> m.eof() 

はおそらく元の例として、(Windows上で動作します出力ファイル名としてC:\out.midを使用しています)、OS Xでテストしました

7

を助け、あなただけmingusを試し、ミディまたはプロセスのMIDIファイルを生成する必要がある場合は、 また、コード、コード進行、スケールなどのより高い抽象化を可能にします。

5

wikiに記載されている8つのパッケージを試しました。http://wiki.python.org/moin/PythonInMusic。 は、私はそのmusic21 1(http://web.mit.edu/music21/)は

  • 最も包括的な
  • 最高のチュートリアル

にインストールするのが最も簡単であることがわかったが、簡単にするためにあなたの要求に関しては、Iそれが最も単純なものではないと思う。しかし、私は他のどのプログラムも堅牢な方法でMIDIファイルを読み込むことができませんでした。(私は奇妙で素晴らしいミディファイル形式がたくさんあります)

関連する問題