Синтезатор звука с непрерывной формой волны

Я начинаю писать программный синтезатор со своеобразной характеристикой: осцилляторы будут иметь ручку «непрерывной формы волны», которая позволит пользователям непрерывно выбирать синусоидальные, прямоугольные и зубчатые волны. То есть, если ручка находится до упора влево, на выходе будет синусоидальная волна, если она посередине, будет пилообразная волна, если до конца вправо, то будет прямоугольная волна. а затем из промежуточных положений будут выводиться волны, которые являются «интерполированными» версиями классических волн. - Положения регуляторов и типы волн могут быть изменены, но желательно иметь непрерывный способ изменения формы волны -

Я придумал несколько способов реализации осциллятора:

  1. Придумайте функцию, которая принимает положение ручки и вычисляет спектр фактического сигнала (массив амплитуд и частот), а затем использует набор синусоидальных функций и блок суммы для реализации выходного сигнала.

  2. Аналогично 1., но применяется обратное преобразование Фурье вместо синусов и суммы (хорошо, на данный момент я не уверен, что это на самом деле одно и то же.)

  3. Сгенерируйте таблицу форм сигналов для каждого возможного регулятора расположите и используйте метод синтеза волновой таблицы для генерации выходного сигнала.

  4. Начните с двух зубчатых волн (они содержат как четные, так и нечетные гармоники), инвертируйте одну и просуммируйте их, а затем контролируйте амплитуду каждой из них с помощью ручки. Волновые формы не будут

У меня несколько вопросов:

A. Я читал, что метод №1 очень интенсивен для процессора и практически неосуществим.Верно ли это для процессоров ARM, таких как iPad?

B. Какой бы метод я ни выбрал, можно ли решить проблему наложения спектров, просто подключив фильтр нижних частот к выходу генератора?

C. Есть ли другие предложения о том, как реализовать такой осциллятор?

D. Есть предложения, какой инструментарий C ++ использовать? Я смотрел STK от CCRMA, но не знаю, есть ли другие более подходящие библиотеки.

Пожелайте мне удачи! ;)

Редактировать: Кто-то указал мне на din прошлой ночью. Кривые Безье - еще один вариант, который следует рассмотреть.

7
задан Rafael Vega 27 January 2012 в 08:51
поделиться