Хотя ваш вопрос довольно широк, я могу дать некоторое представление о том, с чего начать.
Во-первых, вам нужно копию VST3 SDK от Steinberg
Из моего опыта, есть довольно большой кривой обучения для начала работы с VST SDK. Поэтому я бы предложил найти библиотеку, которая предоставляет оболочку поверх нее. Например, JUCE
Использование обертки поможет вам преодолеть много программируемых шаблонов, которые необходимо выполнить, чтобы сделать работу VST.
Что касается генерации сигнала, фильтрации и других концепций, связанных с DSP ... здесь так много, что я даже не мог описать его.
Взгляните на musicdsp и The STK на некоторые основные понятия.
Получить книгу по теме. Классическим будет The Audio Programming Book
Кроме того, вам необходимо убедиться, что у вас есть сильное понимание теории звука. Взгляните на Introduction to Computer Music: Volume One.
И, конечно же, Google - ваш друг.
EDIT:
Чтобы ответить на ваш вопрос более полно. Да C++ (или C) был бы языком выбора для такого типа приложений (хотя это был не единственный возможный выбор)
Я бы изучил использование Audio API, прежде чем вникать в разработку VST, это позволит вам работать над ваши навыки без проблем развития VST.
Что касается аудио библиотек, ehese являются два популярных варианта:
- PortAudio (написан на С)
RtAudio (написан на C++, но не с ++ 11 или выше)
Или вы можете взглянуть на libzaudio Что такое Audio API, над которым я сейчас работаю.(Это в настоящее время зависит от Portaudio, но обеспечивает более современный C++ 11 способ стиль работы с аудио)
Предполагая, что вы установили Portaudio & libzaudio Ниже будет генерировать грех 440Гц волну за одну секунду:
#include <iostream>
#include <cmath>
#include <libzaudio/zaudio.hpp>
int main(int argc, char** argv)
{
try
{
//bring the needed zaudio components into scope
using zaudio::no_error;
using zaudio::sample;
using zaudio::sample_format;
using zaudio::stream_params;
using zaudio::time_point;
using zaudio::make_stream_context;
using zaudio::make_stream_params;
using zaudio::make_audio_stream;
using zaudio::start_stream;
using zaudio::stop_stream;
using zaudio::thread_sleep;
//create an alias for a 32 bit float sample
using sample_type = sample<sample_format::f32>;
//create a stream context with the default api (portaudio currently)
auto&& context = make_stream_context<sample_type>();
//create a stream params object
auto&& params = make_stream_params<sample_type>(44100,512,0,2);
//setup to generate a sine wave
constexpr sample_type _2pi = M_PI * 2.0;
float hz = 440.0;
sample_type phs = 0;
sample_type stp = hz/params.sample_rate() * _2pi;
//create a zaudio::stream_callback compliant lambda that generates a sine wave
auto&& callback = [&](const sample_type* input,
sample_type* output,
time_point stream_time,
stream_params<sample_type>& params) noexcept
{
for(std::size_t i = 0; i < params.frame_count(); ++i)
{
for(std::size_t j = 0; j < params.output_frame_width(); ++j)
{
*(output++) = std::sin(phs);
}
phs += stp;
if(phs > _2pi)
{
phs -= _2pi;
}
}
return no_error;
};
//create an audio stream using the params, context, and callback created above. Uses the default error callback
auto&& stream = make_audio_stream<sample_type>(params,context,callback);
//start the stream
start_stream(stream);
//run for 1 second
thread_sleep(std::chrono::seconds(1));
//stop the stream
stop_stream(stream);
}
catch (std::exception& e)
{
std::cout<<e.what()<<std::endl;
}
return 0;
}
(Pulled from one of my example files)
Я был бы счастлив, чтобы объяснить более подробно, если вы хотите связаться со мной в другом месте. (Длительное обсуждение этой темы не будет разрешено при переполнении стека)
Этот вопрос слишком широк для этого сайта. Он также запрашивает мнение (* что мне нужно знать *), что делает его не по теме. Сначала вам нужно будет провести собственное исследование, а затем вернуться сюда с конкретными вопросами, как только вы это сделаете. Пожалуйста, уделите несколько минут, чтобы завершить [тур] и просмотреть страницы [помощи], особенно [о каких темах я могу спросить здесь?] (Http://stackoverflow.com/help/on-topic) и [Какие типы вопрос мне следует избегать?] (http://stackoverflow.com/help/dont-ask). –