В этом разделе мы рассмотрим очень полезную структуру данных - список. Мы очень кратко познакомились с ним ранее в разделе о рандомизации, тогда мы случайным образом выбирали ноты из списка, чтобы играть их:
play choose([50, 55, 62])
В этом разделе мы также изучим использование списков для представления аккордов и гамм. Сначала давайте вспомним, как мы можем сыграть аккорд. Помните, что если мы не используем sleep
, все звуки воспроизводятся одновременно:
play 52
play 55
play 59
Давайте посмотрим на другой способ представления этого кода.
Один из вариантов - разместить все ноы в виде списка: [52, 55, 59]
. Наша дружественная функция play
достаточно умна, чтобы понимать, как играть список нот. Попробуйте это:
play [52, 55, 59]
О, это уже приятнее читать. Воспроизведение списка нот не мешает вам использовать любые обычные параметры:
play [52, 55, 59], amp: 0.3
Конечно, мы также можем использовать традиционные имена нот вместо номеров MIDI:
play [:E3, :G3, :B3]
Теперь те из вас, кому повезло изучать теорию музыки, смогут подтвердить, что аккорд ми минор был сыгран в 3-й октаве.
Еще одной полезной особенностью списка является возможность получать оттуда информацию. Это может звучать немного странно, но это не сложнее чьей-либо просьбы открыть книгу на странице 23. Применительно к списку, говорят - “Какой элемент находится по индексу 23”? Единственная странность заключается в том, что в программировании индексы начинаются с 0, а не с 1.
Мы не считаем индекы списка 1, 2, 3… вместо этого мы считаем 0, 1, 2…
Давайте рассмотрим это чуть более подробно. Взгляните на этот список:
[52, 55, 59]
Здесь нет ничего страшного. Теперь, какой второй элемент в этом списке? Конечно, это 55
. Это было легко. Давайте посмотрим, что нам ответит компьютер на аналогичный вопрос:
puts [52, 55, 59][1]
Это выглядит немного странно, если вы никогда не видели ничего подобного раньше. Поверьте мне, это не очень сложно. Строка выше состоит из трёх частей: слово puts
, наш список [52, 55, 59]
и наш индекс [1]
. Сначала мы говорим puts
потому что хотим, чтобы Sonic Pi напечатал ответ для нас в журнал. Далее, мы даём ему наш список, и, наконец, наш индекс запрашивает второй элемент. Мы должны окружить индекс квадратными скобками и т.к. счёт начинается с 0
, индекс второго элемента это 1
. Посмотрите:
# indexes: 0 1 2
[52, 55, 59]
Попробуйте выполнить код puts [52, 55, 59][1]
и вы увидите, что 55
появится в журнале. Измените индекс 1
на другой, попробуйте более длинные списки и подумайте, как вы сможете использовать список в своём следующем сочинении. Например, какие музыкальные структуры могут быть представлены в виде ряда чисел…