2011-07-13 8 views
3

私はLuaで.MIDファイルを読み込み、すべてのノート(すなわち、 "A"、 "B#"、 "Cb"など)を持つテーブルに解析しようとしていますが、ファイルを正しく。私はio.openとfile:lines()を使用しますが、同じ行を別のmidiファイルに書き込むと、動作しないmidiファイルになります。Luaでの.MIDファイルの読み込みと解析?

Luaで.MIDファイルを読み込んで解析する簡単な方法はありますか?

答えて

4

Standard MIDI Fileの形式はテキストではなくバイナリ形式です。だからあなたはそれを「行」として読むことは期待できません。代わりに、read関数を使用してバイトを取得し、それらを検査する必要があります。 MIDIファイル用のCライブラリを見つけてLuaにバインドする方が良いかもしれません。

+0

バイナリファイルを読み込むためのio.openの "b"引数はどうですか? – user809559

+2

確かに、それを使うのは良い考えかもしれませんが、 "行"を読むことはできません。このファイルをバイナリとして扱う必要があります。基本的には、 "lines"関数は改行文字を探しています。これはMIDIの "new line"以外を意味します。 –

4

.MIDファイル(おそらく標準MIDIフォーマット)は、テキストではなくバイナリです。 file:lines()でそれらを読むことはできません。あなたは文字列全体を読む必要があります(ルア文字列は任意のバイトのデータを保持できます)。代わりにfile:read("*a")を使用します。これはファイル全体を単一の文字列に読み込みます。また、バイナリモードでファイルを開く必要があります(これが異なるプラットフォームでは)。

4

MIDIデータの解析用にMIDI.luaと呼ばれるフレームワークがあるようです。しかし、それがMIDIファイルをどれくらいうまく処理しているかはわかりません。

関連する問題