Sound

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)