5

LinuxでMIDISysExデータの双方向ダンプを取得する良い方法を知っている人はいますか?(YamahaPSR-E413MIDIキーボードとWineで実行されているYamahaMusicSoftDownloaderのコピーの間)

キーボードの内部メモリとの間でMIDIファイルをコピーするために使用されるプロトコルをリバースエンジニアリングしたいと思います。そのためには、2つの間の有効な交換を記録する必要があります。

このユーティリティはWineで動作しますが(少し微調整します)、FUSEファイルシステムを使用できる場合は、Wineの安価でスクリプト化できないアプリに依存する必要はありません。

現在の状況は次のとおりです。

  • キーボードは、内蔵のUSB-MIDIブリッジを介してPCに接続します。USBダンパー/スヌーパーは可能性がありますが、可能であればそれらを避けたいと思います。始める前に、プロトコルエンコーディングのさらに別のレイヤーをデコードする必要はありません。
  • Linuxのみを実行しています。ただし、Windowsベースのダンパー/スヌーパー以外のオプションが実際にない場合は、WinXPVirtualBoxVMでUSB1.1パススルーを動作させることができます。
  • 波形オーディオミキシング用のdmixを使用して、オーディオシステム用にベアALSAを実行しています。
    • サウンドサーバーが必要な場合は、JACKを試してみます。
    • PulseAudioはご遠慮ください。私のシステムからそれを削除するのに十分な時間がかかりました。
  • プロセスにALSAMIDIルーティングが含まれる場合:
  • II本当に必要な場合は、ALSAにパッチを適用してダンプを取得できると思いますが、これは実際には最後の手段のオプションです。
    • 私のプログラミング経験の大部分は、Python、PHP、Javascript、およびシェルスクリプトです。
    • 私はCでのプログラミングの経験がほとんどありません。
    • カーネルモードのコードを垣間見ることすら見たことがありません。
    • システムを安定させ、稼働時間を長くしたいと思います。
4

4 に答える 4

4

この質問はしばらくの間答えられていません、そして私はあなたの問題に対する正確な答えを持っていませんが、私はあなたを正しい方向に押し進めることができる何かを持っているかもしれません(あるいは同様の問題を抱えている他の人)。

Akai LPK25 MIDIキーボードでプリセットを設定および読み取るために使用されるデータをスニッフィングしたい場合、それほど複雑ではありませんが、同様の問題が発生しました。セットアップと同様に、キーボードをセットアップするソフトウェアはWineで実行できますが、Linux用のスニファーセットアップを見つけることができませんでした。

既存のソリューションがないため、virmidiポートを介してALSAMIDIルーティングを使用して独自のソリューションを作成しました。追加のソフトウェアがないとMIDIトラフィックのスニッフィングに役立たないため、なぜそれらが役に立たないと見なされるのか理解しています。

私の解決策は、JavaでMIDIリレー/ブリッジをプログラミングすることでした。ここでは、virmidiポートから入力を読み取り、データを表示して、さらにキーボードに送信します。キーボードからの回答(ある場合)も読み取られ、表示され、最終的にvirmidiポートに返送されます。Wineのアプリケーションは、通信にvirmidiポートを使用するように設定でき、理論的には、このプロセスは完全に透過的です(潜在的な遅延の問題を除く)。アプリケーションは一般的な方法で作成されており、私の問題にハードコードされていません。

私は約20バイトの長さのSysExメッセージしか扱っていなかったので、大量のデータの転送をスニッフィングするためにソフトウェアがどれだけうまく機能するかわかりません。しかし、多分あなたはそれを修正する/例に従ってあなた自身のプログラムを書くことができます。

ここで入手可能なソース:https ://github.com/hiben/MIDISpy

(Java 1.6、Antビルドファイルが含まれています。ソースはBSDライセンスの下にあります)

于 2012-09-07T00:34:16.427 に答える
1

私はそのために使うのが好きaseqdumpです。

http://www.linuxcommand.org/man_pages/aseqdump1.html

于 2015-03-27T17:43:07.517 に答える
0

この目的のために仮想MIDIデバイスを使用できます。snd_seq_dummyしたがって、少なくとも2つのポートが作成されるようにロードする必要があります。

    $ sudo modprobe -r snd_seq_dummy
    $ sudo modprobe snd_seq_dummy ports=1 duplex=1

次に、次の名前のデバイスが必要ですMidi through

    $ aconnect -i -o -l
    client 0: 'System' [type=kernel]
        0 'Timer           '
        1 'Announce        '
    client 14: 'Midi Through' [type=kernel]
        0 'Midi Through Port-0:A'
        1 'Midi Through Port-0:B'
    client 131: 'VMPK Input' [type=user,pid=50369]
        0 'in              '
    client 132: 'VMPK Output' [type=user,pid=50369]
        0 'out             '

この例では、ポート番号とデバイス番号を取り上げます。設定に従って、自分で検査する必要があります。

次に、お気に入りのMIDIデバイスをMidi Throughポートに接続します。

    $ aconnect 132:0 14:0
    $ aconnect 14:0 131:0

この時点で、両方のデバイスを同時にスパイできる接続があります。aseqdumpMIDI会話をスパイするために使用できます。さまざまな可能性があります。ループバックデバイスと実際のデバイス間の接続をスパイすることをお勧めします。これにより、ループバックデバイスへのrawmidi接続が可能になります。

    $ aseqdump -p 14:0,132:0 | tee dump.log

これで、すべてが使用できるように設定されました。MIDIアプリケーションのポート名に注意する必要があります。からMIDIデータを読み取りMidi Through Port-0:B、にデータを書き込む必要がありMidi Through Port-0:Bます。

追加のヒント:グラフィカルフロントエンドを使用して、patchageドラッグアンドドロップでMIDI接続を接続および検査できます。これを行うと、すべてのMidi Throughポートが入力として1回、出力として1回発生することがわかります。このセットアップを機能させるには、両方を接続する必要があります。

GMidiMonitorまたは他のアプリケーションを使用する場合は、(方向を示さずに)混合された両方のストリームをスパイしaconnectます。129:0Midi Monitor

    $ aconnect 14:0 129:0
    $ aconnect 132:0 129:0

正確な方向情報が必要な場合は、ポートの1つにのみ接続する別のGMidiMonitorインスタンスを追加できます。欠落しているメッセージは他のポートから送信されます。

于 2020-02-28T16:15:33.027 に答える
-1

gmidimonitorの使用はどうですか?http://home.gna.org/gmidimonitor/を参照してください

于 2012-12-29T22:47:12.903 に答える