問題タブ [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.
winapi - midiOutPrepareHeader は簡単な呼び出しですか?
midiOutPrepareHeader、midiInPrepareHeader は、いくつかのデータ フィールドをセットアップするだけですか?それとも、より時間のかかる処理を行いますか?
必要に応じて MIDIHDR を構築および破棄するか、それらのプールを維持するかを決定しようとしています。
midi - バーチャル MIDI と VST
これを行う単純な VST プラグインを作成したいと思います。
- オーディオ ストリームの分析 (音量、ビートなど)
- アナライザーの出力にトリガーがあります (例: ボリューム > しきい値の場合に何かを実行)
- トリガーに基づいて MIDI イベントを生成する
これは、プラグインがそのように設計されていない場合でも、プラグインをチェーンできるようにするためです。たとえば、プラグインの MIDI OUT をコンプレッサーのゲイン ボタンの MIDI IN に接続するだけで、オーディオ ストリームのエンベロープでコンプレッサーのゲインを制御できます。
問題は、これを行う方法がわからないことです。VST でこのようなダイレクト MIDI 接続のサポートはありますか? それとも、相互接続用にある種の「仮想 midi デバイス」が必要なのでしょうか?
java - Midi ノート番号を名前とオクターブに変換する
MIDIノート番号を特定のノート名とオクターブ番号にマップするためにJavaの世界に存在するものを知っている人はいますか? たとえば、参照表を参照してください。
http://www.harmony-central.com/MIDI/Doc/table2.html
MIDI ノート番号 60 をオクターブ 4 の対応するノート名 (MiddleC) にマップしたいと考えています。これにはユーティリティ クラス/列挙型を記述できますが、かなり面倒です。誰か何か知っていますか?
私は特に Java で Tenori-On/Monome のクローンを作成するためにこれを使用しています。
解決
これは私が最終的に使用したものです:
java - JavaでMidiUnavailableException?
Java で MIDI ファイルを再生するのに問題があります。私が得たのは、MidiUnavailableException (MIDI OUT transmitter not available)
再生しようとしたときです。私のコードは標準です:
midiseq
ですSequencer
。sound1
ですInputStream
。
このコードは他のいくつかのコンピューターで動作し、コマンド プロンプトから起動したときだけでなく、Eclipse でも動作し、JAR ファイルで使用した場合でも動作します。より安定した Java midi アプリケーションをダウンロードしましたが、同じ例外がスローされました。
Eclipse は問題なく実行できるため、ハードウェアの問題ではありません。また、他のコンピューターで正しく実行されるため、コーディングの問題でもありません。この 1 行のコードでも、次の例外がスローされます。
前もって感謝します。
編集: 私のオペレーティング システムは Windows Vista です。この質問をする前に、最新の JRE と JDK (1.6.0_13 だと思います) をダウンロードしました。
編集:コード:
「シーケンサークラスがロードされました」と出力します。
しかし、このコード:
を投げるMidiUnavailableException.
また、このコード:
私にこれを与える:
midi - XG MIDI ファイル形式
XG MIDI 規格を使用してエンコードされた MIDI ファイルを再生すると、ギターの特定のライトがオンまたはオフになります。MIDI ファイルを使用せずにプログラムで同じイベントを送信できるように、これを引き起こす MIDI イベントを特定しようとしています (ノート オン (144) またはノート オフ (128) コマンドを送信するのと同じ方法)。
ただし、MIDI プロトコルのコピーを見つけることはできましたが、XG MIDI プロトコルを見つけることはできませんでした。適切なコマンドが見つかるまで、考えられるすべてのコマンドをデバイスに送信しようとする以外に、ライトの状態を変化させている MIDI イベントを特定する方法はありますか? または、XG MIDI プロトコルのコピーを入手できる場所はありますか?
c# - .NETでの正確なタイミング
この質問を見たところ、回答の1つは、System.Diagnostics.Stopwatchはパフォーマンスの診断にのみ使用され、本番コードでは使用されないことを示しています。
その場合、.NETで正確なタイミングを取得するための最良の方法は何でしょうか?私は現在、NAudioのMIDI出力機能を使用して非常にシンプルなMIDIシーケンサーを構築する初期段階にあります。MIDIメッセージを(たとえば)1/10に揃えて、できるだけジッターを少なくして送信できるようにしたいと思います。これは実行可能ですか、それともコンテキスト切り替えのようなものが私の一日を台無しにしますか?
Stopwatch
私は現在、コンソールアプリに、150bpmで1/16分音符のストリームを生成するときにジッターを継続的に呼び出して計算するコードをいくつか持っています。この状況では、ジッタは非常に低くなります。ただし、これを別のスレッドに移動するので、それが当てはまるかどうかはわかりません。
java - Web ページで MIDI メッセージを送信する
Web ページで個々の MIDI ノートを再生するにはどうすればよいですか?
私はそれを行う2つの方法を知っています:
ActiveX コントロールを作成します。その後、Windowsでのみ動作します。私はずっと前に ActiveX コントロールを作成していましたが、今では誰もそれらをインストールしたくありません。
Java アプレットを作成します。ユーザーがすでに Java をインストールしている場合は問題ありませんが、多くのユーザーはアプレットを無効にしています。これは私が行った方法であり、newfweiler.com で結果を確認できます。特定の設定でうまくいった場合。必要に応じて Java 1.2 で書き直すことができると思いますが、少なくとも Java 5 が必要です。「リアルタイム シーケンサー」と「Java サウンド シンセサイザー」がうまくいきません。それらを機能させるには、ウェーブテーブルなどをインストールする必要があると思います。
ほとんどのユーザーは Flash をインストールしていますが、Flash と Flex のドキュメントを調べたところ、javax.sound.midi に相当するものは見つかりませんでした。
Web ページで MIDI ファイルを再生する方法はいくつかありますが、キーを押すたびに 1 音の MIDI ファイルを再生する「Javascript ピアノ」を見つけることができます。一度に複数のノートを再生したり、長いノートのためにキーを押したままにすることはできません。
私がやろうとしているのは、ほとんどの人がマシンに通常インストールしているものだけを使用して、 javax.sound.midi.Receiver.send(midiMsg, -1) と同等です。
windows - MMEおよびDirectMusicを使用する場合のANSIまたはOEMコードページ?
MMEからMIDIポート名を読み取るとき、名前はANSIコードページを使用してエンコードされたマルチバイト文字列であることに気付きました。これは私のアプリがデフォルトで使用します。DirectMusicドライバーからこれらの名前を受け取る場合、名前はOEMコードページでエンコードされたワイド文字列です。コードページの簡単な復習については、RaymondChenによるこの記事を参照してください。
私のドイツ語システムでは、これは、ANSIコードページであることが判明した現在のコードページを使用すると、MMEから「Audiogerät」を取得し、DirectMusicから「Audiogeröt」を取得することを意味します。後者は間違っています。これは、その姓を代わりにOEMエンコードとして扱うと修正されます。
では、これらの名前をデコードするコードページをどのように知ることができますか?DirectMusicに由来する名前が異なる方法でエンコードされるのはなぜですか?それはUSBドライバーから来ていますか?COMフレームワーク?DirectMusic?MIDIポートの名前を読み取るときに使用するコードページを確実に知るにはどうすればよいですか?
情報:
- 使用するコードページの引数として、およびを使用して変換を実行するためにand関数を使用します
MultiByteToWideChar()
。WideCharToMultiByte()
CP_ACP
CP_OEMCP
midiInGetDeviceCaps()
MMEサブシステムからMIDIポート情報を取得するために使用します...- ...そして(ANSI)コードページ
MIDIINCAPS.szPname
を使用して変換します。CP_ACP
IID_IDirectMusic8::EnumPort()
DirectMusicからポート情報を取得するために使用します...DMUS_PORTCAPS.wszDescription
...そしてコードページを使用して変換しCP_OEMCP
ます。
midi - MIDI TEMPOメッセージは他のトラックにどのように適用されますか?
私が推測しているかなり単純な質問ですが、どこにも決定的な答えを見つけることができません。
背景:最初のトラックにTEMPOコントロールを含むマルチトラックMIDIファイルがあります。他のトラックのABSOLUTE_TICKカウントを「秒」(MIDIファイルの先頭からオフセットされた小数秒)に変換する必要があります。
ファイルのPulsePerQuarterNote(PPQN)をテンポ(四分音符あたりのMS)に基づいて、ABSOLUTE_TICKを秒に関連付ける式があります。
問題は、最初のトラック(トラック0)のTEMPOの変更が他のすべてのトラックに適用されるかどうかです。
もしそうなら、私が他のトラック(例えば、私が興味を持っているNOTE_ONとNOTE_OFFメッセージを持っているトラック4)を解析している間、私はトラック0のTEMPO変化を並行して指している指を保つ必要があります。そうですか?
ありがとう、
マーク