問題タブ [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.
java - .jar ファイルにエクスポートすると MIDI 楽器のサウンドが異なる
Java サウンド API の MIDI パッケージを使用してサウンドを合成する Java プログラムを作成しましたが、それを .jar ファイルにエクスポートすると、再生されるサウンドが Eclipse で実行したときとはかなり異なります。なぜこれを行っているのか、この問題を解決する方法を知っている人はいますか?
楽器のリストはここにあります: http://www.hittrax.com.au/images/artists/gmgs.pdf
以下は私のコードのセクションです
下の画像は、私が録音したときの音声を示しています。最初の画像は、Eclipse でのサウンドの状態です。2 番目の画像は、.jar にエクスポートしたときのサウンドです。
java - シンプルなサウンドが Java midi テスト コードで再生されない
単純なサウンドを生成するコードの機能を確立しようとしてjavax.sound.midi
います。これにより、より複雑な MIDI コードの作業を開始できるようになります。しかし、以下のコードは音を出していません。コード サンプルはわずか約 50 行で、すぐに使用できる Web サンプルからのものです。しかし、代わりに、プログラムを実行すると、コンソールに次のエラー メッセージが表示されます。
また、音が出ません。 それが重要な場合、OSはWindows 8.1です。
このエラーの原因は何ですか? 以下の小さなコード セクションを変更して、単純なサウンドを再生するにはどうすればよいですか?
上記の出力をスローしている完全な〜50行のコードは次のとおりです。
java - Java MIDI シーケンサ SyncMode
こんにちは: MIDI シーケンサーのインスタンスを外部クロックに同期させようとしています。やった:
しかし
戻り値
つまり、これは役に立たなくなります。
私は何を間違っていますか?もちろん、D2 から送信されて、system.out に通知するようにカスタム作成された別のレシーバーに送信されるメッセージの確認があり、シーケンサーは正常に再生されますが、SyncModes ドキュメントをサポートしていないようです。具体的には、このフレーズは私を混乱させます(MIDI_SYNCから:「このモードは、MIDIレシーバーでもあるシーケンサーのマスター同期モードとしてのみ適用されます。」
シーケンサーが受信機であることの意味は何ですか。getReceiver() の私のアプローチで十分だと思いました
よろしくお願いします!
java - フラッシュせずにMIDIシーケンサーを停止
私が取り組んでいるプロジェクトでは、MIDI シーケンサーを一時停止する必要があり、すべての音符を持続させて、それらの音符をエンドレスにしたいと考えています。私が直面している問題は、sequencer.stop()
明らかに再生を停止するだけでなく、MIDI ノート オフ メッセージをすべてのサウンド ノートに送信し、すべてのサウンド ノートを終了させることです (一部の文献ではフラッシュと呼ばれます)。
私は使用しようとしましsequencer.setTempoInBPM(0)
たが、それは仕事を成し遂げますが、私のプロジェクトに特有の他の望ましくない副作用があります.
最も明白な解決策はオーバーライドSequencer.stop()
のようですが、どうすればよいですか? そして、そのオーバーライドされたメソッドはどのように見えるのでしょうか?
編集: gpasch のコメントに応じて質問を編集したいと思います。
再生を停止するだけでなく、MIDI ノート オフ メッセージをすべての音符に送信します。これって同じじゃないですか??
これはオーディオには当てはまりますが、MIDI には当てはまりません。MIDI プロトコルは、それ自体でオーディオ データを指定しません。楽器に何を演奏するかを指示するだけです。楽器は MIDI メッセージを解釈し、最終的な音を出します。
楽器に 1 秒間の音を再生させるには、次のアクションを実行します。
- [Sequencer] MIDI Message Out:ノートオン
- [Instrument] MIDI Message In:ノートオン
- [楽器]音符の解釈を開始: 音を出し始めます
- 【シーケンサー】 1秒待つ
- [Sequencer] MIDI Message Out:ノートオフ
- [Instrument] MIDI Message In:ノートオフ
- [Instrument]ノートオフの解釈を開始: 音の発生を停止
したがって、このプロセスがステップ 4 で中断されると、「エンドレス ノート」が作成されます。MIDI 楽器は、特定の音符の再生を開始する命令を受け取りましたが、その音符の再生を停止する命令を受け取っていないためです。[*]
私の質問に戻ります。ノートの途中でコールsequencer.stop()
すると (ステップ 4)、「エンドレス ノート」の代わりに、その時点で再生されていて、まだノート オフメッセージを受信していないすべてのノートが鳴り止みます。その論理的な説明は、内部でMIDI オール ノート オフメッセージをsequencer.stop()
送信することです。そうでなければ本当に混乱するので、私たちは本当に感謝することができます. 私の特定のケースでは、ノートオフメッセージを送信しないようにシーケンサーが本当に必要です。質問は次のとおりです。そのための回避策を作成できますか?sequencer.stop()
※自然に音が減衰するピアノ音だと、いずれ音は死んでしまいます。しかし、シンセサウンドの場合、音がなくなるまで音が持続します。
java - Java シーケンサーを一時停止するとテンポがリセットされる
私は、実行時に midi シーケンスの再生を自動開始し、ユーザーがキーを押すことでいつでも一時停止できるコードを書いています。これらのキーイベント処理は問題なく機能しますが、次のようにシーケンサーを一時停止すると、非常に奇妙なエラーが発生します。
シーケンサーのテンポをリセットします。曲/シーケンサーは 120000 MPQ (入力からロードされた) で再生を開始し、500000 MPQ にリセットされます。なぜこれが起こっているのか誰にも分かりますか?ありがとう。
java - try-catch が正しく動作しない
私はHeadFirstから Java を読んでいます。例外処理に関する章を読み始めました。本の中には、私が自分のコンピューターで実行したコードがありました。
try-catch ブロックを削除すると、コンパイラで MidiUnavailableException エラーが発生します。その例外をキャッチするために try-catch を使用しましたが、System.out.println("Bummer");
実行されません。代わりに、try ブロックが実行されます。
ここで何が起きてるの?
java-8 - シーケンサーと MIDI コードを Java 8 ラムダとストリームに変換する
Java 6 で記述されたコードを Java 8 に変換しています。コードは、すべてのイベントでサウンドが再生されるゲームのイベント通知機能として機能します。私のコードは次のとおりです。
それをJava 8に変換する方法がわかりません。誰か助けてもらえますか?