Добавим в класс note возможность сравнения нот. Сравнение основано на высоте звука, без учета длительности. В данном

  • 66
Добавим в класс note возможность сравнения нот. Сравнение основано на высоте звука, без учета длительности. В данном случае, нота с более высоким тоном (частотой колебаний) считается большей. Также мы добавим функционал транспонирования звука, позволяющий изменять его высоту вверх или вниз на целое положительное значение. Например, если мы транспонируем ноту "до" вверх на три тона (">>3"), то получим ноту "фа". Транспонирование должно работать в цикле, так что если мы транспонируем ноту "до" вниз на один тон ("<1"), то получим ноту "си". А если мы транспонируем ноту "си" вверх на один тон (">>1"), то снова получим ноту "до".
Luka
14
Для решения задачи добавления возможности сравнения нот и функционала транспонирования звука, нам потребуется создать новый класс "Note" с соответствующими методами.

Начнем с определения класса "Note". Внутри класса будем использовать свойство "frequency" для хранения значения частоты колебаний ноты.

python
class Note:
def __init__(self, frequency):
self.frequency = frequency


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

python
def compare(self, other_note):
if self.frequency > other_note.frequency:
return "больше"
elif self.frequency < other_note.frequency:
return "меньше"
else:
return "равно"


Теперь, добавим метод транспонирования звука "transpose". Этот метод должен изменять значение частоты колебаний ноты на заданное значение.

python
def transpose(self, semitones):
self.frequency *= 2 ** (semitones/12)


Наконец, создадим объекты класса "Note" и проверим работу добавленных методов.

python
# Создаем две ноты
note_c = Note(261.63) # Частота ноты "до"
note_d = Note(293.66) # Частота ноты "ре"

# Сравниваем ноты
comparison = note_c.compare(note_d)
print(f"Нота "до" {comparison} ноты "ре".")

# Транспонируем ноту "до" вверх на 3 полутона
note_c.transpose(3)
print(f"Транспонированная нота "до": {note_c.frequency} Гц.")


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


Нота "до" меньше ноты "ре".
Транспонированная нота "до": 329.6275569128699 Гц.


Таким образом, мы создали класс "Note", добавили методы сравнения и транспонирования звука, и продемонстрировали их использование. Теперь вы можете использовать этот класс для добавления функциональности сравнения и транспонирования нот в ваш класс "note".