2015-11-20 4 views
-1

Я здесь в основном, чтобы спросить вас, что вы предлагаете сделать довольно низкоуровневое программное обеспечение для обработки цифрового сигнала (DSP) для Windows. Позвольте мне объяснить, в чем моя цель.Обработка цифрового сигнала в реальном времени. Какой язык использовать?

Я хотел бы разработать виртуальный усилитель, чтобы я мог подключить свою гитару к линии на моем компьютере, а затем обработать этот сигнал (добавление эффектов, таких как перегрузка, эхо и т. Д.), И дать ему выход по умолчанию устройство. Самое главное, что программное обеспечение должно работать в реальном времени, так что, если я играю, я могу услышать звук, как только я начну играть.

Я знаю C++, java, и я мог бы изучить C# при необходимости, но что вы предлагаете? Возможно ли, что этот проект?

Я бы пошел с C++ из-за эффективности, низкой латентности и программирования на низком уровне, но я не мог найти хорошую документальную библиотеку, которая позволяет мне это делать. Я знаю, что за каждым звуковым эффектом много математики, и я мог бы изучить его, по крайней мере, базовые, но в первую очередь мне нужно знать, смогу ли я его реализовать.

Я также подумал о внедрении VST-модуля, а затем написал свои собственные Vst-плагины, чтобы фактически обработать сигнал, и я нашел Naudio (aC# library), который мог бы выполнить эту работу, но тогда возникает вопрос: может ли быть в реальном времени большинство средних настольных компьютеров?

Благодарим вас за консультацию.

+0

Слово предостережения здесь - обычно можно получить требуемый уровень математики с нескольких лет бакалавра в инженерной дисциплине, математике или физике. Что касается языков, вполне возможно сделать это на C# .NET, но время работы JITed всегда является плохими новостями для вещей в реальном времени, потому что у вас просто недостаточно контроля над тем, что происходит на самом деле. – marko

+0

Итак, вы в основном говорите, что C# может полностью выполнять DSP, но вы сомневаетесь, что он может получить ответы в реальном времени, не так ли? –

+0

Скачать для steinberg VST SDK. Затем вы можете просто написать часть моделирования усилителя и не беспокоиться о части сбора данных. – jaket

ответ

2

Большинство DSP в режиме реального времени выполняется с использованием скомпилированного (опережающего) языка без времени выполнения или минимального использования времени с высокой степенью детерминированности (без произвольной сборки мусора). Наиболее распространенными языками программирования с этими характеристиками являются код сборки, C и ограниченное подмножество C++. Эти методы облегчают определение того, подходит ли весь критический код задержки в I-кеше или в не кэшированной локальной памяти (если доступно).

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

Но вы можете изучать и оценивать множество методов DSP в автономном режиме на сохраненных аудиофайлах, где латентность перестает быть критичной. MatLab - общий язык для этого.

Смежные вопросы