質問:
MIDIファイルのチャンネルとトラックの違い
glaba
2013-07-29 20:45:55 UTC
view on stackexchange narkive permalink

MIDIファイルを読み書きするプログラムを作成していますが、混乱する問題が発生しました。トラック数専用の2バイトがあります。これは、65536トラックが存在する可能性があることを意味します。ただし、チャネルは16個しかありません。これは、トラックごとに16のチャネルがあることを意味しますか?それとも、本当に許可されているのは16トラックだけですか?また、フォーマットが0、1、2のいずれであるかによって意味に違いはありますか?

編集:トラックごとに16チャンネルあるというこの投稿を見ましたが、そうではない可能性がありますそれは特定のプログラムのコンテキストにあったので、正しいです: http://forum.cockos.com/showthread.php?t=78919

少し前にMIDIファイル生成プログラムを作成しました。このプログラムでは、曲の途中で各MIDIトラックにチャンネルを再割り当てし、各チャンネルに楽器を再割り当てして、パフォーマンスを最適化し、楽器の有効数を16以上に増やしました(すべての楽器が常に演奏されるわけではないため)。悪い考えであることが判明しました。 Windows Media PlayerやWinampなどの標準的なメディアプレーヤーでMIDIファイルを再生することに問題はありませんでしたが、MIDIファイルをFL Studioにロードしようとすると、楽器の再割り当て後に楽器がすべて乱雑になりました。
したがって、開始後にチャンネルやトラックの割り当てを変更しないことをお勧めします。この場合、midiファイルでのさまざまなトラックの表示でさえより簡単になります。
二 答え:
MillKa
2013-08-25 05:01:29 UTC
view on stackexchange narkive permalink

このサイト( Jeff Glatt-MIDI情報)には、MIDIに関する多くの情報があります。

MIDIデータストリームプロトコル(ワイヤー)はバイトのストリームです(値00000000-1111111バイナリ= 0-25510進数= 0-FF 16進数)。

値00-7F(0-127)はデータバイト、使用例ノート番号や他の多くのパラメータの場合。

値80-FF(128-255)はステータス/コマンドバイトであり、MIDIコマンドに使用されます。

  • 8x:ノートオン
  • 9x:ノートオフ
  • Ax:キープレッシャー/アフタータッチ(ポリフォニック-キーごと)
  • Bx:コントロールチェンジ(例:モジュレーションホイール)
  • Cx:プログラムの変更(楽器/サウンド/ボイスを選択するため)
  • Dx:キープレッシャー/アフタータッチ(チャンネルごと)
  • 例:ピッチベンド

ここで、xはチャンネル番号です。

80〜EFの範囲のステータスバイトは、チャンネル番号をエンコードします。下位4ビット(0000-1111 = 0-15 = 0-F)。たとえば、82はチャネル2のノートオンコマンドです。これらのステータスバイトは、MIDIデバイスの特定の1つのチャネルに送信されるため、チャネルメッセージです。

ステータスバイトF0 -FFはシステムメッセージです。MIDIデバイスのすべてのチャンネルに送信されるためです。

従来の(非USB)ハードウェアを使用したMIDI接続では、丸い5ピンDINコネクタを使用します。ケーブル。デバイスA(キーボードなど)からデバイスB(音源など)にMIDIデータを送信するには、デバイスAのMIDI-OUTポートをデバイスBのMIDI-INポートに接続します。

次に、キーボードのMIDI送信チャンネルをチャンネル0に設定し、キーを押します。キーボードは、ケーブルを介して値80(8 = NoteOn、0 =チャネル0)のバイトをトーンジェネレーターに送信し、その後にノート番号とベロシティの2つのデータバイトが続きます。トーンジェネレータはこれらの3バイトを受信します。最初のバイトでチャンネル0が指定されているため、音源はチャンネル0で現在選択されているサウンドを使用してノートを再生します。 2番目のバイトはノート番号(0-127)を指定し、3番目のバイトはベロシティを指定します。

キーボードを右手と左手用に2つの独立した領域に分割できる場合は、送信チャネルを各地域、例えば右側の領域のチャネル0と左側の領域のチャネル1。次に、右側の領域で再生されたキーはチャネル0(ステータスバイト80)に送信され、左側の領域で再生されたキーはチャネル1(ステータスバイト81)に送信されます。トーンジェネレータは、これらのノートを2つのチャネルで独立して受信し、チャネル0で右側のノートを再生できます。ピアノの声、およびチャンネル1の左側の音符。弦の声。

古い電子オルガンでは通常、上下の手動とペダルが徒歩で演奏され、それぞれが独自のチャンネルで送信されていました(例:0 =上、1 =下、2 =ペダル)。したがって、接続されたトーンジェネレータは、3つのチャネルで3つの異なる音声を再生できます。マニュアルを分割できる場合は、さらに多くのチャンネルを制御できます(たとえば、0 =右上、1 =左上、2 =右下、3 =左下、4 =ペダル)。古い教会や劇場のオルガンでさえ、さらに多くのマニュアルがありました。

ただし、チャネルのエンコードに使用できるビットは4ビットしかないため、 1つのポートで最大16チャネルを送信できます。より多くのチャネルが必要な場合は、より多くのポートが必要です。チャネル17〜32を送信するための2番目のMIDI-OUTポート。

最近、MIDIデバイスは従来のポートの代わりにUSBケーブルを使用することがよくあります。これにより、複数の仮想ポートが可能になります。たとえば、Yamaha PSR-S950キーボードをUSB経由でPCに接続すると、PCにはキーボードに接続された2つの仮想MIDI-OUTポートAとBが表示され、それぞれに16チャンネルがあります。シーケンサープログラムを使用すると、32の独立したチャンネル(ポートA経由で0〜15、ポートB経由で16〜31)でデータを送信して、32の異なる楽器を同時に演奏できます。

シーケンサープログラムはトラック内のMIDIデータ。各トラックには、最大16チャンネルのMIDIデータを含めることができます。 32の楽器で曲を再生するには、少なくとも2つのトラックが必要です(トラック1のポートAのチャンネル0〜15、トラック2のポートBのチャンネル16〜32 ...)。

A SMF0ファイル(スタンダードMIDIファイル-フォーマット0)にはトラックが1つしかありません。すべてのチャネルメッセージとチャネルに依存しないシステムメッセージは、1つのトラックに保存されます。すべてが1つの大きなデータの山であるため、トラックの編集が難しくなります。

SMF1ファイル(スタンダードMIDIファイル-フォーマット1)には、複数のトラックを含めることができます。例:

  • トラック1には、チャンネル0でピアノの声で右手で演奏された音が含まれます。
  • トラック2には、同じピアノで左手で演奏された音が含まれます。チャネル0の音声も。
  • トラック3にはチャンネル1のベースボイスが含まれています。
  • トラック4にはチャンネル2のクラリネットボイスが含まれています。
  • トラック5にはチャンネル9のドラムが含まれています。

..など..

チャンネルをトラックにマップすることができます。

たとえば、トラック3と4を1つのトラックにマージできます。低音はチャンネル1を使用し、クラリネットはチャンネル2を使用するため、両方の声を互いに独立して再生できます。ベースとクラリネットを1つのトラックにマージすることは、音楽的にはそれほど意味がありませんが、技術的には可能です。

または、トラック1と2をマージすることもできます。どちらも、同じチャネルと同じ音声を使用しているためです。しかし、右手と左手に2つの異なるピアノの声を使用したい場合があります。トラック1をポートAに、トラック2をポートBに割り当てると、2つの異なるボイスを選択できます。

または、トラック2をチャンネル0からチャンネル3に変更します。両方のトラックが同じポートに割り当てられている場合でも、2つの異なるボイスを使用できます。
制限は、トラックあたり最大16チャンネルです。 。

2つのトラックが同じポートで同じチャンネルを使用している場合、シーケンサーで個別に編集できますが、シーケンサーがデータを送信するときに互いに独立して再生することはできません。トラックでは、ポートAに割り当てられたすべてのトラックが1つのデータストリームにマージされます。ポートBに割り当てられたすべてのトラックが別のデータストリームにマージされます。

上記の例では、トラック1の小節4でピアノから弦にプログラムを変更すると、トラック2の弦も選択されます。ポートAでチャネル0を使用します。

したがって、正しいマッピングは、接続されているトーンジェネレータのアーキテクチャによって異なります。

AJ Henderson
2013-07-29 21:03:07 UTC
view on stackexchange narkive permalink

チャネルはトラックのセットです。通常、各チャンネルは異なる楽器になりますが、楽器によっては複数のチャンネルを使用する場合があります。トラックには、その楽器とは異なる並列情報が含まれます。

Q / A形式に収まらない主題の詳細については、ウィキペディアの MIDI aに関する記事を参照することをお勧めします。 >、これには多くの詳細があります。

これは、それぞれが異なるチャンネルを指す多くのトラックを持つことができることを意味しますか?それでは、16を超える楽器を使用できますか、それともチャンネルごとに1つの楽器に制限されますか?
@glaba-チャネルにはトラックがありますが、その逆ではありません。それはネストされた関係です。古いオリジナルのMIDIデバイスは単一のチャンネルを使用していましたが、複数のチャンネルを使用するほど複雑な新しいMIDIデバイスがいくつかあると思います。トラックは、同時に信号を送る必要のあるさまざまなものに対応していますが、特定のチャネルのすべてのトラックは同じ楽器によって制御され、異なるパラメーターを測定するだけです。
OK。ありがとうございました。しかし、もう1つ質問があります。特定のチャンネルのすべてのトラックが同じインストゥルメントによって制御されていて、16チャンネルしかない場合、MIDIファイル内のインストゥルメントは16に制限されていますか?
@Glaba-midiファイルの詳細がわかりません。私はMidiプロトコル(実際に何が起こっているのか)について話している。ファイルに同じ制限があるかどうかは100%わかりません。


このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 3.0ライセンスに感謝します。
Loading...