バックグラウンド
MIDIファイルは、WAVまたはMP3オーディオファイルとはまったく異なります。MP3およびWAVファイルには、オーディオの「録音」を表すバイトが含まれています。一方、MIDIファイルには、MIDIイベントに格納された一連のMIDIメッセージがあります。これらのメッセージはトラックに保存され、トラックのコレクションがMIDIシーケンスを構成します。MIDIシーケンスのイベントはシーケンサーによって分析され、そのメッセージをシーケンサーからシンセサイザーの受信機に送信できます。
ほとんどの場合、MIDIイベントに保存されるMIDIメッセージは、特定のノートを演奏するようシンセサイザーに指示するノートオンメッセージ、またはノートの再生を停止するようシンセサイザーに指示するノートオフメッセージです。これらのメッセージには2つのデータバイトが含まれており、1つ目はシンセサイザーにノートのベロシティを通知し(ベロシティーが大きいと音が大きくなります)、2つ目はシンセサイザーに再生するノートを伝えます(つまり、ミドルC)。イベント自体には、メッセージをいつ送信するかをシーケンサーに伝える目的に役立つチックも含まれています。
チャレンジ
課題は、シングルトラックMIDIシーケンスで一連のノートオンおよびノートオフMIDIメッセージを分析し、特定のノートがオンのとき、オフのとき、およびこれらのノートの速度。チャートの垂直軸は音価を表し、以下に説明するようにラベル付けする必要があり、水平軸はMIDIティックで時間を表します(ただし、複雑さと間隔の問題を減らすためにラベルは付けないでください)
入力は、それぞれが一連の整数値を含む4つの個別の配列またはリストです。一連の整数値を持つ4つのサブ配列/サブリストを含む2次元配列またはリスト。またはその他の便利な手段。これは、トラック内のノートオンおよびノートオフメッセージを含むコレクションMIDIイベントを表します。これらの配列の最初の値は、音符、2番目のベロシティ、3番目のノートオンイベントティック、4番目のノートオフイベントティックを指定します。たとえば、次のような4つの配列がある場合:
{60, 62, 64, 65, 67}
{20, 40, 60, 80, 100}
{ 0, 4, 8, 12, 16}
{ 2, 6, 10, 14, 18}
各配列の最初の要素を分析すると、次の2つのイベントが得られます。NoteOnコマンド、note 60(中央C)、およびノート速度20のメッセージを持つティック0のイベント。ティック2のイベントには、同じノートとベロシティを持つノートオフコマンドを持つメッセージがあります。
ルール
チャートは、左側に0から127までの数字(音符の値を表す)、音符の開始時、各音符の長さ(音符のオフティックから音符のオンティックを引いたもの)、および音符のベロシティを表示する必要があります。ノートを表すシンボルは、ベロシティに依存します。
- 0-15:
O
- 16-31:
=
- 32-47:
#
- 48-63:
-
- 64-79:
@
- 80-95:
+
- 96-111:
0
- 112-127:
*
次のことを想定できます。
- ノートとベロシティの値は、[0、127]の範囲内になります。
- 4つの配列のそれぞれの長さは、常に互いに等しくなります。
以下に例を示します。
{60, 62, 64, 65, 67}
{20, 40, 60, 80, 100}
{ 0, 4, 8, 12, 16}
{ 2, 6, 10, 14, 18}
127|
126|
125|
...
67 | 00
66 |
65 | ++
64 | --
63 |
62 | ##
61 |
60 |==
59 |
...
2 |
1 |
0 |
{60, 48, 62, 47, 64, 45, 65, 43, 67, 41, 65, 43, 64, 45, 62, 47, 60, 48}
{63, 31, 75, 90, 12, 23, 122, 104, 33, 19, 57, 42, 5, 82, 109, 86, 95, 71}
{0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16}
{2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18}
127|
126|
...
68 |
67 | ##
66 |
65 | ** --
64 | OO OO
63 |
62 | @@ 00
61 |
60 |-- ++
59 |
...
49 |
48 |== @@
47 | ++ ++
46 |
45 | == ++
44 |
43 | 00 ##
42 |
41 | ==
40 |
...
1 |
0 |
Ode to Joyの最初のいくつかのメモを表示する例を次に示します。
{48, 55, 64, 64, 65, 67, 55, 67, 65, 64, 62, 52, 55, 60, 60, 62, 64, 55, 64, 62, 62}
{45, 45, 63, 63, 63, 63, 89, 66, 66, 66, 66, 30, 30, 103, 103, 103, 103, 127, 55, 55, 55}
{ 0, 0, 0, 4, 8, 12, 16, 16, 20, 24, 28, 32, 32, 32, 36, 40, 44, 48, 48, 54, 56}
{16, 16, 2, 6, 10, 14, 32, 18, 22, 26, 30, 48, 48, 34, 38, 42, 46, 64, 50, 55, 64}
127|
...
67 | -- @@
66 |
65 | -- @@
64 |-- -- @@ 00 --
63 |
62 | @@ 00 - --------
61 |
60 | 00 00
59 |
58 |
57 |
56 |
55 |################++++++++++++++++================****************
54 |
53 |
52 | ================
51 |
50 |
49 |
48 |################
...
0 |
あなたはできる25%あなたのスコアを減らすあなたが選んだの任意のトラックのメッセージを離れてあなたの提出が入力として実際のMIDIシーケンスを取る場合、ノートオンを分析し、注意、それは少なくとも4つのメッセージオフノートオンとノートとイベント、および出力が含まれて上記のチャート。
これはコードゴルフなので、最短のコードが勝ちます。幸運を!