Я пишу программный синтезатор и нуждаюсь в генерации bandlimited, alias free waveforms в реальном времени с частотой 44,1 кГц. Звуковая форма пилот-сигнала будет делать сейчас, так как я могу генерировать импульсную волну, смешивая два пилообразных пилы вместе, один перевернутый и сдвинутый по фазе.
До сих пор я пробовал следующие подходы:
-
Предварительно вычитая однотактные идеально диапазонные образцы осциллограмм на разных диапазонах частот при запуске, затем воспроизводя два наиболее близких друг друга. Работы хорошо, я думаю, но не чувствую себя очень элегантно. Требуется много образцов, или будут слышны "промежутки" между ними. Интерполяция и микширование также очень интенсивные.
-
Интеграция поезда DC с компенсацией импульсов sinc для получения пилообразной волны. Звучит здорово, за исключением того, что волна дрейфует от нуля, если вы не получите компенсацию DC точно вправо (что я считаю очень сложным). Проблема постоянного тока может быть уменьшена путем добавления небольшого количества утечек к интегратору, но затем вы теряете низкие частоты.
Итак, мой вопрос: каким образом это делается? Любое предлагаемое решение должно быть эффективным с точки зрения процессора, поскольку оно должно выполняться в реальном времени для многих голосов одновременно.