Bien que votre question soit assez large, je peux donner un aperçu de l'endroit où commencer.
Tout d'abord, vous aurez besoin d'une copie du VST3 SDK de Steinberg
D'après mon expérience, il y a une assez grande courbe d'apprentissage pour commencer avec le SDK VST. Donc, je suggère de trouver une bibliothèque qui fournit un emballage sur le dessus. Par exemple JUCE
L'utilisation d'un wrapper vous aidera à dépasser une grande partie de la programmation standard qui doit être effectuée pour que le VST fonctionne.
En ce qui concerne la génération de formes d'ondes, le filtrage et d'autres concepts liés aux DSP ... voici tellement de choses sur le sujet que je ne pouvais même pas commencer à le décrire.
Jetez un oeil à musicdsp et The STK pour certains concepts de base.
Obtenir un livre sur le sujet. Un classique serait The Audio Programming Book
En outre, vous devez vous assurer que vous avez une bonne compréhension de la théorie audio. Jetez un oeil à Introduction to Computer Music: Volume One.
Et bien sûr, Google est votre ami.
EDIT:
Pour répondre à votre question plus complètement. Oui C++ (ou C) serait la langue de choix pour ce type d'application (mais pas le seul choix possible)
Je voudrais regarder dans l'aide d'une API Audio avant de plonger dans le développement VST, cela vous permettra de travailler sur vos compétences sans le problème du développement VST.
Comme pour les bibliothèques audio, ehese sont deux des options populaires:
- PortAudio (écrit en C)
RtAudio (écrit en C++, mais pas C++ 11 ou plus)
Ou vous pouvez jeter un oeil à libzaudio Qui est une API audio sur laquelle je travaille actuellement.(Il dépend actuellement PortAudio, mais offre un plus moderne C++ 11 le style façon de travailler avec audio)
En supposant que vous avez installé PortAudio & libzaudio ce qui suit va générer une onde sin 440Hz pour une seconde:
#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)
Je serais heureux d'expliquer plus en détail si vous souhaitez me contacter ailleurs. (Une longue discussion sur le sujet ne serait pas autorisée sur Stack Overflow)
Cette question est de portée beaucoup trop large pour ce site. Il demande également l'avis (* qu'est-ce que j'ai besoin de savoir *), ce qui le rend hors sujet. Vous devrez d'abord faire vos propres recherches, puis revenir ici avec des questions précises une fois que vous l'aurez fait. Veuillez prendre quelques minutes pour compléter le [tour] et consulter les pages [aide], en particulier [Quels sujets puis-je poser à ce sujet?] (Http://stackoverflow.com/help/on-topic) et [Quels types de question devrais-je éviter de demander?] (http://stackoverflow.com/help/dont-ask). –