Arka fon
MIDI dosyaları WAV veya MP3 ses dosyalarından oldukça farklıdır. MP3 ve WAV dosyaları sesin bir "kaydını" temsil eden baytlar içerirken, MIDI dosyaları MIDI olaylarında depolanan bir MIDI sentezleyicisine hangi sanal aletin çalınacağını veya kullanılması gereken bir MIDI sıralayıcısını bildiren bir dizi MIDI mesajı içerir. Bu mesajlar parçalar halinde saklanır ve bir parça koleksiyonu, olayları bir sekanslayıcı tarafından analiz edilebilen ve mesajlarının sekansörden bir sentezleyicinin alıcısına iletilebildiği bir MIDI sekansı oluşturur.
Çoğu zaman MIDI olaylarında depolanan MIDI mesajları Not Sentezleyiciye belirli bir notayı çalmasını söyleyen mesajlar veya sentezleyiciye nota çalmayı durdurmasını söyleyen Not Kapalı mesajlarıdır. Bu mesajlar iki veri baytı içerir, bunlardan ilki sentezleyiciye notanın hızı hakkında bilgi verir (daha yüksek hız daha yüksek bir nota neden olur) ve ikincisi sentezleyiciye nota çalmasını söyler (yani Orta C). Olayların kendileri, sıralayıcıya mesajları ne zaman göndereceğini bildirme amacına hizmet eden keneler de içerir.
Meydan okuma
Zorluk, tam izli bir program veya tek izli MIDI dizisindeki bir dizi Not Açık ve Not Kapalı MIDI mesajını analiz eden ve belirli notların ne zaman açık olduğunu, ne zaman kapandığını ve bu notların hızı. Grafiğin dikey ekseni not değerini temsil eder ve aşağıda açıklandığı gibi etiketlenmelidir ve yatay eksen MIDI kenelerinde zamanı temsil eder (ancak karmaşıklığı ve boşluk sorunlarını azaltmak için etiketsiz kalması gerekir).
Girişiniz, her biri bir dizi tamsayı değeri içeren dört ayrı dizi veya liste olabilir; bir dizi tamsayı değerine sahip dört alt dizi / alt liste içeren iki boyutlu bir dizi veya liste; veya diğer uygun araçlar; bu, parçadaki Not Açık ve Not Kapalı mesajlarıyla toplama MIDI olaylarını temsil eder. Bu dizilerin ilkindeki değerler notu, ikincisi hızı, üçüncüsü olay işaretindeki notu ve dördüncü notu olay işaretini belirtir. Örneğin, aşağıdakiler gibi dört dizi verildi:
{60, 62, 64, 65, 67}
{20, 40, 60, 80, 100}
{ 0, 4, 8, 12, 16}
{ 2, 6, 10, 14, 18}
Her dizinin ilk öğesini analiz etmek iki olay sağlar: 0 notunda, Not Açık komutu, 60 notu (Orta C) ve 20 notu notu olan bir olay; ve aynı not ve hızda bir Not Kapalı komutuna sahip bir mesaj içeren 2. kutucuktaki bir olay.
kurallar
Grafikte, sol tarafta (not değerini temsil eden) azalan sırada görüntülenen 0 ile 127 arasındaki sayılar, not başladığında, her notun süresi (Not Off tick eksi Note On tick) ve notun hızı bulunmalıdır. Notları temsil eden semboller hızlarına bağlıdır:
- 0-15:
O
- 16-31:
=
- 32-47:
#
- 48-63:
-
- 64-79:
@
- 80-95:
+
- 96-111:
0
- 112-127:
*
Aşağıdakileri varsayabilirsiniz:
- Not ve hız değerleri [0, 127] aralığında olacaktır.
- Dört dizinin her birinin uzunluğu her zaman birbirine eşit olacaktır.
İşte birkaç örnek:
{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 |
İşte Ode to Joy'un ilk birkaç notunu gösteren bir örnek:
{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 |
Sen edebilirsiniz % 25 puanınızı azaltmak için gönderme, girdi olarak gerçek bir MIDI dizisi alır On Not analiz eder ve sizin seçtiğiniz herhangi bir parçanın mesajlar Kapalı Not en az dört günü Not etkinliklerle Not mesajlar Kapalı ve çıkış mevcuttur verdiyse Yukarıda açıklandığı gibi bir grafik.
Bu kod golf, bu yüzden en kısa kod kazanır. İyi şanslar!