(495) 240-82-80ПН-СБ с 10:00 до 18:00
We speak English

3.4. Практикум: Простая мелодия

В рамках этого практического задания вы научитесь воспроизводить звуки на микроконтроллере, используя данные, полученные с помощью датчика яркости. Данный проект состоит из трех частей:

  1. Проигрывание простых тонов (частот)
  2. Проигрывание нот при заданных тонах (частот нот)
  3. Проигрывание нот при заданном списке названий нот

Вы научитесь:

  • Настраивать диапазон яркости 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']