Перейти к содержимому
Наше приложение «Дешевые авиабилеты» в AppGallery >>

VBA Excel. Функция Beep API (звуковой сигнал, мелодия)

    Генерация звукового сигнала с заданной частотой и длительностью и простых мелодий в VBA Excel с помощью функции Beep API из набора базовых функций Windows.

    Функция Beep API

    Функция Beep из набора базовых функций Windows API предназначена для генерации звукового сигнала заданной тональности и продолжительности. Последовательное размещении в коде VBA Excel нескольких строк с функцией Beep API или вызов ее с помощью цикла позволит проиграть несколько гудков друг за другом и даже составить из них несложную мелодию.

    Синтаксис функции Beep API

    Beep (FrequencyHz As Long, TimeMs As Long)

    • Beep — имя функции, в дальнейшем мы заменим его на BeepAPI, чтобы не возникало конфликта с одноименным оператором.
    • FrequencyHz — частота звукового сигнала в герцах. Она должна быть в диапазоне от 37 до 32 767.
    • TimeMs — продолжительность сигнала в миллисекундах.

    В коде VBA параметры функции Beep API (FrequencyHz, TimeMs) указываются через запятую, но без скобок.

    Объявление функции Beep API

    Для функции Beep API можно завести отдельный модуль в рабочей книге Excel, где хранить свои гудки и мелодии. Объявляется функция в разделе Declarations модуля VBA следующей строкой:

    Private Declare Function Beep Lib "kernel32" (ByVal FrequencyHz As Long, ByVal TimeMs As Long) As Long

    Но в данном случае функция будет вызываться ключевым словом Beep и будет конфликтовать с оператором Beep, который предназначен для извлечения системных звуков.

    Поэтому следует дать функции Beep API другое наименование, например, BeepAPI. Тогда код объявления для раздела Declarations модуля VBA Excel будет выглядеть следующим образом:

    Private Declare Function BeepAPI Lib "kernel32" Alias "Beep" (ByVal FrequencyHz As Long, ByVal TimeMs As Long) As Long

    Примеры звуковых сигналов

    Пример 1
    Одиночный звуковой сигнал:

    Изменяйте параметры сигнала, наблюдайте за изменением его тональности и продолжительности.

    Пример 2
    Последовательность звуковых сигналов:

    Параметры подобраны наугад с небольшой корректировкой для лучшего звучания. Напишите свою последовательность, более благозвучную. Если нужна пауза, указывайте в параметрах функции Beep API частоту равную нулю и необходимую продолжительность паузы.

    Создание простой мелодии

    Теперь давайте напишем простую мелодию для проигрывания ее из кода VBA Excel.

    Сначала находим в интернете простые ноты какого-нибудь музыкального произведения, например, танца Ламбада для исполнения одним пальцем:

    Первые ноты танца Ламбада
    Первые ноты танца Ламбада

    Названия нот и октав смотрим по таблице из Википедии, представленной в статье Октавная система:

    Названия октав и нот скрипичного ключа
    Названия октав и нот скрипичного ключа

    В нашем отрывке мелодии из танца Ламбада присутствуют ноты первой и второй октав. Соответствующие им частоты узнаем из таблиц «Первая октава» и «Вторая октава» в статье Октавная система из Википедии. Частоты округляем до целых значений.

    Соотношение длительности нот и пауз определяем по таблице из Википедии, представленной в статье Длительность (музыка):

    Относительная длительность нот и пауз
    Относительная длительность нот и пауз

    Если нота или пауза опубликована с одной точкой, к ней прибавляется еще половина ее длительности, которую она имеет без точки.

    Наш отрывок мелодии состоит из 15 нот. Соответственно, необходимо определить 15 пар параметров: частота-длительность.

    Примем длительность целой ноты за 1200 миллисекунд, и исходя из нее рассчитаем продолжительность нот, имеющихся в примере.

    Заполняем данными таблицу (номер октавы указан надстрочным шрифтом):

    Нота Частота Длительность
    Ми¹ 330 300
    Ми² 660 450
    Ре² 587 150
    До² 523 150
    Си¹ 494 150
    Ля¹ 440 300
    Ля¹ 440 150
    До² 523 150
    Си¹ 494 150
    Ля¹ 440 150
    Соль¹ 392 150
    Ля¹ 440 150
    Ми¹ 330 150
    Ре¹ 294 150
    Ми¹ 330 900

    Чтобы сократить код VBA для воспроизведения этой мелодии, присвоим числовые параметры из таблицы массиву. Затем проиграем последовательность сигналов с помощью цикла For…Next.
    Пример 3
    Воспроизведение простой мелодии с помощью кода VBA Excel:

    Если разместить этот код в столбик:

    все будет работать, как и полагается. Хотя код будет более громоздким, зато более наглядным и удобным для редактирования. Для первоначальной настройки воспроизведения простых мелодий из кода VBA Excel рекомендую использовать именно его.

    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    1 комментарий для “VBA Excel. Функция Beep API (звуковой сигнал, мелодия)”

    1. Но это же только для 64 битной системы, — Объявление функции Beep API.

    Обсуждение закрыто.