3 Алгоритм частотного вибрато
Перед непосредственной реализацией эффекта частотного вибрато необходимо поставить некоторые ограничения. Наиболее естественная музыкальная частота модуляции составляет 4—8 Гц (частота вибрато музыкальных звуков). При таких частотах вибрато приобретает своеобразную тембровую окраску, украшающую и оживляющую звук. Красивое звучание получается только в том случае, когда глубина частотного вибрато (относительное изменение частоты звука) невелика. Как известно, единица музыкальных интервалов, в 1200 раз меньшая, чем октава, называется центом. Интервал между соседними полутонами в темперированной гамме равен в точности 100 центам. Колебание высоты тона при частотном вибрато не должно превышать нескольких десятков центов. В противном случае создается впечатление нарушения строя инструмента.
Таким образом, условимся, что модулирующий сигнал представляет собой синусоиду с частотой 6 Гц, а максимальное колебание высоты тона широкополосного модулируемого сигнала составляет 60 центов, что в среднем соответствует 20 Гц.
Также частота входного сигнала должна составлять не менее 4 кГц для узнаваемости человеческого голоса. Следовательно, минимальная частота дискретизации сигнала допускается равной 8 кГц. При заданной частоте дискретизации в 8 кГц промежуток времени между двумя отсчётами составляет 1/8000 с. Длительность массива отсчётов, состоящего из 1024 элементов равна 1024 * 1/8000 = 0,128 c. Следовательно, на один отсчёт приходится 7,8 Гц. Максимально колебание высоты тона равна 20 Гц, т.е. 2,56 отсчёта для нашего случая. Округлим до 3. Получаем, что смещение спектра в 3 отсчётов составляет 3 * 7,8 = 23,4 Гц. Величина 23,4 Гц близка к 20 Гц, что позволит нам почувствовать разницу между входным и выходным звуком как эффект вибрато Таким образом, считаем величину выборки в 1024 отсчётов окончательно утвержденной.
Далее выполняем прямое преобразования Фурье с 1024 звуковыми отсчётами. После преобразования Фурье необходимо осуществить само смещение. Очевидное решение ситуации – заполнить первые V элементов массива смещенного спектра отсчётов нулями и начать запись первых 512–V элементов исходного спектра сразу с V+1 элемента или записать в массив смещенного спектра последние 512–V элемента исходного, а оставшиеся V элементов заполнить нулями. Значение V и выбор того или иного направления смещения определяется значением модулирующего синусоидального сигнала, которое будем получать для определенности в момент взятия последнего отсчета каждой выборки. После смещения проделываем операцию обратного преобразования Фурье для перевода полученного массива смещенных отсчётов во временную область. После прохождения ЦАП и вывода на звуковое устройство получаем звук, отличающийся от входа на 23,4 Гц в предельном случае, смещенный в сторону верхних или нижних частот.
3.1 Основной цикл
Основной цикл алгоритма состоит из следующих шагов:
Шаг 1. Обнуление входных буферов x[N] выходного буфера y[N], счётчика i, счетчика k.
Шаг 2. Инициализация кодека.
Шаг 3. Увеличение счетчика k на единицу.
Шаг 4. Чтение из кодека текущего отсчета сигнала и запись в буфер, х[i] = GetSample().
Шаг 5. Увеличение счетчика i на единицу.
Шаг 6. Проверка значения i: если i < N, то переход на Шаг 3, если i = 1024 – на следующий шаг.
Шаг 7. Выполнение функции Bending над N отсчётами текущего входного массива x[].
Шаг 8. Запись выходного отсчета сигнала в кодек, PutSample(y[N-i]).
Шаг 9. Уменьшение счетчика i на единицу.
Шаг 10. Проверка значения i: если i > 0, то переход на Шаг 7, если i = 0 – на Шаг 3.
