Sound
Этот модуль содержит функции для генерации звуковых тонов, подключая пьезо зуммер или динамик к выходному GPIO. Модуль можно использовать двумя способами:
- Прямая нотация, в которой тоны описываются в терминах их частоты и длительности.
- Музыкальная нотация, в которой тоны описываются в терминах музыкальной ноты, длительности ноты, октавы, размера такта и т.д.
Генератор тонов
Тоны синтезируются модулем с использованием генератора тонов:
Генератор | Id | Описание |
---|---|---|
PWM | sound.PWM | Тон синтезируется аппаратным модулем PWM, который генерирует квадратную волну с коэффициентом заполнения 50%. |
DAC | sound.DAC | Тон синтезируется аппаратным модулем I2S/DAC, который генерирует синусоидальную волну с частотой дискретизации 38 кГц. |
Функции конфигурации
instance = sound.attach(tone_generator, pin)
Подключение генератора тонов к пьезо зуммеру или динамику.
Аргументы:
- tone_generator: генератор тонов, используемый для синтеза тонов.
- pin: GPIO, к которому подключен пьезо зуммер или динамик.
Возвращает: экземпляр звука или исключение. Этот экземпляр необходимо сохранить в переменной для дальнейших операций с ним.
instance:detach()
Отсоединение генератора тонов и освобождение всех используемых ресурсов.
Аргументы: нет.
Возвращает: ничего или исключение.
Функции операций
instance:playnote(note, octave)
Воспроизведение музыкальной ноты в желаемой октаве.
Аргументы:
- note: отформатированная строка (name [accidental] duration), описывающая музыкальную ноту для воспроизведения и её длительность.
- octave: октава, в которой должна воспроизводиться нота.
Возвращает: ничего или исключение.
instance:timesignature(upper, lower, bpm)
Установите размер такта для будущих нот, которые будут воспроизводиться.
Аргументы:
-
upper: верхнее значение размера такта, которое указывает, сколько ударов содержится в каждом такте.
-
lower: нижнее значение размера такта, которое указывает, какая длительность ноты эквивалентна 1 удару.
-
bpm: удары в минуту.
Темп bpm Adagio 66–76 Adagietto 70–80 Andante 76–108 Andantino 80–108 Marcia moderato 83–85 Andante moderato 92–112 Moderato 108–120 Allegretto 112–120 Allegro moderato 116–120 Allegro 120–156 Некоторые основные обозначения темпа и их соответствие bpm.
Возвращает: ничего или исключение.
Примеры:
Пример | Как кодировать |
---|---|
instance:timesignature(3,4,120) | |
instance:timesignature(4,4,120) | |
instance:timesignature(4,4,120) |
instance:playsilence(duration)
Воспроизвести тишину указанной длительности.
Аргументы:
-
duration: длительность тишины, относительно целой ноты продолжительностью в 1 временную единицу.
Длительность тишины может быть увеличена наполовину от длительности ноты, добавив точку (.).
instance:playtone(frequency, duration)
Воспроизвести тон указанной частоты и длительности.
Аргументы:
- frequency: частота тонa для воспроизведения в герцах.
- duration: длительность тонa в миллисекундах.
Возвращает: ничего или исключение.
-- Воспроизвести звуковой тон на частоте 440 Гц в течение 1 секунды
buzzer = sound.attach(sound.DAC, pio.GPIO26)
buzzer:playtone(440, 1000)
Пример
В следующем примере показано, как перевести первые 8 тактов нотной записи из музыки Гарри Поттера.
buzzer = sound.attach(sound.DAC, pio.GPIO26)
buzzer:timesignature(3, 4, 240)
buzzer:playsilence("4")
buzzer:playsilence("4")
buzzer:playnote("B4", 4)
buzzer:playnote("E4.", 5)
buzzer:playnote("G8", 5)
buzzer:playnote("F#4", 5)
buzzer:playnote("E2", 5)
buzzer:playnote("B4", 5)
buzzer:playnote("A2.", 5)
buzzer:playnote("F#2.", 5)
buzzer:playnote("E4.", 5)
buzzer:playnote("G8", 5)
buzzer:playnote("F#4", 5)
buzzer:playnote("D2", 5)
buzzer:playnote("F4", 5)
buzzer:playnote("B2.", 4)