問題タブ [javax.sound.midi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
750 参照

java - Java 上のサウンドバンクを使用した信頼性の高い MIDI 再生

MIDI ノートを再生するアプリケーションを作成していますが、サウンドバンクに問題があります。

Mac用のデフォルトのJVMにsoundbank-mid.gmは存在しますが、Javaはデフォルトのサウンドバンクがなく、楽器がロードされていないと教えてくれます。また、独自のサウンドフォント ファイルの読み込みにも失敗します。ただし、デフォルトからまだ再生されます。

私のJVM 7には、デフォルトのサウンドバンクと読み込まれた楽器があり、SF2ファイルも読み込みます。ただし、7 で動作しないネイティブ dep があります。

Ubuntu でも同様の問題がありましたが、それは がsoundbank.gmデフォルトでインストールされていないためです。SF2また、ファイルを正常にロードすることもできました。

Windowsを試したことはありません。

プラットフォーム間で midi を再生する信頼できる方法は何ですか?

0 投票する
1 に答える
604 参照

java - MIDI イベントの編集

ピアノ ロール エディタでグラフィカル ノート (四角形) を上下に移動して、シーケンス内の既存の MIDI ノートのピッチを編集しようとしています。API とオンライン ドキュメントを読んでも、既存のメモを編集する方法が具体的にわかりません。私が知る限り、setMessage() メソッドを使用して既存の ShortMessage を上書きする必要があります。これが私が今持っているものです:

ノートをマウスでドラッグして JPanel から changePitch() を呼び出し、ピッチを調整する増分として +1 または –1 を送信しています。私が見つけられないのは、setMessage() 呼び出しの他の 4 つの空白パラメーターに入れる必要がある値です。論理的には、コマンド、チャネル、およびタイムスタンプの既存の値を保持したいのですが、これらの既存の値にアクセスして空白に入れるにはどうすればよいでしょうか? message.command や message[0] などを試しましたが、うまくいきません。また、ドキュメントでは、set Message の引数は (byte[] data, int length) として示されています。これらの引数の説明は非常に曖昧で、最初に ShortMessage を作成するために使用した引数とはまったく一致しません。助言がありますか?

0 投票する
1 に答える
1292 参照

java - ミディノートのタイミングが機能しないのはなぜですか?

MIDIピアノロールエディターを作成しています。Noteクラスは、NOTE_ONオブジェクトと関連するNOTE_OFFオブジェクト、およびユーザーが画面上でノートのピッチ、タイミング、持続時間を操作するために操作する長方形を作成して含みます。以下は、このクラスのコードから長方形のコードを引いたものです。なぜ正しく動作しないのかわかりません。テストプログラムは、これらのNoteオブジェクトを5つ作成し、ピアノロールグリッドに表示します。これらは正しく再生されます。長方形を上下にドラッグすると、ピッチを変更する方法も適切に機能します。しかし、タイミングや期間を変更するためにメソッドを呼び出すと、メモが誤動作し始めます。まず第一に、彼らは動かされたときに彼らが言われた場所で演奏しません、そして次にノートがお互いの上にドラッグされたり、互いに延長されたりすると、移動したノートは、その下のノートが再生されないようにします。argとしてこれらのメソッドに送信される移動の単位は16に設定されているため、ノートは常に16番目のビート位置にスナップします。誰かが私のコードに何か問題を見つけることができますか?

MIDIシーケンサーとシンセサイザー:

0 投票する
1 に答える
1960 参照

java - Java で再生するためのハードウェア MIDI 出力?

JavaでMIDIファイルを再生する簡単なアプリケーションを作成しています。
図書館を利用していjavax.sound.midiます。

MIDI Out デバイス (USB to MIDI ケーブル) を正しく取得できます。

しかし、シーケンスを再生すると、ホスト OS の General Midi (Soundfont) 再生であるデフォルトのサウンド シンセサイザーで常に再生されます。

私が抱えている問題は、デフォルトの MIDI Out を変更することです。

私が実行するとき

スピーカーから MIDI シーケンスの再生が聞こえます。

ドキュメントを参照した後

しかし、この送信機/受信機のペアを明示的に使用し、新しいデフォルト シンセサイザーでシーケンサー オブジェクトをインスタンス化する方法については言及されていません。

私は正しい送信機と受信機を持っています。しかし、それらは MIDI 出力から再生されていません。

また、試したときに

何も変わらないようです。

デフォルト シーケンサーが MIDI 出力ポートを使用するように、このレシーバー/トランスミッター ペアをシンセサイザーで明示的に使用するにはどうすればよいですか?

0 投票する
1 に答える
185 参照

java - MidiMessage を使用しない Java MIDI

MidiMessage オブジェクトを作成せずに Java で MIDI メッセージを送受信する方法はありますか?

私は一種の概念実証用の高性能リアルタイム ミュージック ワークステーション プロトタイプに取り組んできました。設計基準の 1 つは、通常の楽器の演奏と信号処理では一般にオブジェクトを割り当てないことです。オブジェクトは割り当てられるだけです。ユーザーが設定を変更したとき。(ガベージ コレクションの一時停止の必要性をできるだけ減らしたい。)

明らかに、細かい粒度の MIDI イベントごとに MidiMessage オブジェクトを割り当てることは、私が従いたかった哲学とは正反対です。javax.sound.sampled パッケージを使用すると、割り当てなしでサンプリングされたサウンドを処理できますが、これまでのところ、大量のオブジェクトを割り当てずに Java で MIDI を使用する方法を見つけることができませんでした。

MidiMessage オブジェクトを受信する代わりに、MIDI デバイスからバッファにバイトを読み込む方法はありますか? MIDI メッセージは非常に簡単にデコードできるので、MidiMessage クラスが提供する「ヘルプ」がなくても問題ありません (メッセージ内のバイトをデコードする必要があるため、あまり役に立ちません)。

0 投票する
0 に答える
76 参照

java - javax.sound.midi.Sequencer による MIDI 再生が断続的に一時停止する

javax.sound.midiライブラリを使用して MIDI ファイルを再生するClojure コードの短いスニペットがあります。問題は、再生時にシーケンスが頻繁に約 20 ~ 30 秒間再生を一時停止してから再開することです。コードのスニペットは次のとおりです。

念のためjavax.sound.midi.Synthesizer、REPL でのオブジェクトのレイテンシーを確認しました。

これらのライブラリを使用した MIDI 再生の経験がある人はいますか?もしそうなら、再生が断続的に一時停止する原因は何ですか? システム情報は次のとおりです。

0 投票する
1 に答える
288 参照

java - 新しい MidiOut を Java にインストールしますか?

自分のシステムで Java のカスタム MIDI ドライバーの 1 つを使用したいのですが、次のコードを使用して設定しようとすると、次のようになります。

i要求された MidiDevice の MidiDevice.Info です。このコードは例外をスローします: (このコードは MidiPlayer の 58 行目あたりです)

デバイスをインストールするにはどうすればよいですか?