3.4. Практикум: Простая мелодия
В рамках этого практического задания вы научитесь воспроизводить звуки на микроконтроллере, используя данные, полученные с помощью датчика яркости. Данный проект состоит из трех частей:
- Проигрывание простых тонов (частот)
- Проигрывание нот при заданных тонах (частот нот)
- Проигрывание нот при заданном списке названий нот
Вы научитесь:
- Настраивать диапазон яркости brightness.range(), чтобы значения были подходящими для воспроизведения звука
- Проигрывать звуки или музыкальные ноты в зависимости от значения яркости
В предыдущих уроках вы научились использовать функции sound.tone() и sound.note() в работе с микроконтроллером TI-Innovator Hub. Сейчас вы будете использовать датчик яркости для создания "шума" и "мелодии" (иногда их очень трудно различить).
Примечание для учителя: Все музыкальные ноты имеют определенную частоту, которая рассчитывается по формуле 55*2**(k/12), где k это целое число (k>=0). Тоны же могут иметь любую частоту.
Часть 1: Проигрывание простых тонов
1. Сейчас вам опять придется использовать программу по измерению яркости, которую вы уже создавали в первой части третьего урока (Урок 3.1. Работа со светом). Еще раз скопируйте ее через меню: menu > Actions > Create Copy....
Далее вы должны решить, какой диапазон яркости brightness.range() лучше всего подойдет для работы со звуками.
2. Для тонов вы можете использовать любую частоту в диапазоне от 0 до 8000 Гц, но многие из этих частот слишком высокие или слишком низкие для восприятия человеческим ухом. Начните с диапазона (100,1000), а позже вы сможете изменить его по желанию.
3. Вставьте функцию sound.tone() под выражением brightness.measurement и используйте переменную b в качестве аргумента frequency. Установите время проигрывания звука time по своему усмотрению и используйте то же самое значение в выражении sleep(), чтобы синхронизировать работу микроконтроллера TI-Innovator Hub и калькулятора.
Если хотите, можете сделать значение sleep() немного больше, чем значение времени звучания тона. Это приведет к образованию небольшой паузы между проигрыванием звуков.
Теперь протестируйте свою программу и при необходимости измените числа, которые использовали.
Примечание для учителя: В следующем шаге применяется основы теории музыки, описанные в Уроке 1.3. "Работа со звуком"
Часть 2: Проигрывание музыкальных нот при заданной частоте
1. В пяти октавах, отображенных на рисунке, всего 60 нот (12 нот в каждой октаве).
Нота A1 (A ("до") первой октавы) имеет частоту 55 Гц.
Последующие ноты имеют частоту 55 * 2 ** (k/12), где k является номером ноты после A1. A1 - это нота номер ноль: k=0 → 2**(0/12) = 1.
2. Чтобы воспроизводить "ноты", вам нужно отредактировать программу.
Например, изменить диапазон brightness.range(), который теперь должен быть от 0 до 59.
Выражение brightness.measurement() производит десятичное число, но вам нужны только целые числа, поэтому необходимо конвертировать b в целое число с помощью выражения b = int(b).
Выражение int() можно найти в меню: menu > Built-ins > Type.
Вычислить частоту ноты можно, используя формулу f = 55*2**(b/12).
В качестве частоты используйте переменную f в выражении sound.tone().
Попробуйте снова запустить программу. Некоторые ноту могут быть слишком низкими или слишком высокими. Что можно изменить в коде, чтобы сократить диапазон нот?
Часть 3: Воспроизведение нот при заданном списке их названий
1. Напоминаем, что микроконтроллер также может воспроизводить ноты по их названию.
Вверху своей программы (перед циклом с оператором while) составьте список из названий нот, как вы делали в предыдущем уроке:
notes = ["C5", "D5", "E5", ... ]
Названиями для нот могут служить буквы ABCDEFG, после которых следуют числа 12345.
Установите диапазон яркости brightness.range() (от 0 до № ноты в вашем списке -1).
Конвертируйте переменную b в целое число.
Используйте переменную b в качестве индекса списка нот:
sound.note(notes[b], .25)
Теперь запустите программу.
Сейчас программа будет воспроизводить ноты в начале списке, если уровень яркости низкий, а при высоком уровне яркости, вы услышите ноты, записанные в конце списка.
Примечание для учителя: Ниже представлен фрагмент списка нот. Если есть необходимость, вы можете использовать буквы F (бемоль) и/или S (диез).
notes = ['A1', 'B1', 'C1', 'D1', 'E1', 'F1', 'G1', 'A2', 'B2', 'C2', 'D2', 'E2', 'F2', 'G2', 'A3', 'B3', 'C3', 'D3', 'E3', 'F3', 'G3', 'A4', 'B4', 'C4', 'D4', 'E4', 'F4', 'G4', 'A5', 'B5', 'C5', 'D5', 'E5', 'F5', 'G5']