Zelf een synth programmeren

Oogst

Ingeburgerd
Lid sinds
25 januari 2005
Berichten
37
Locatie
Utrecht
Ik ben aan het proberen om in C++ zelf een simpele synthesizer te programmeren (puur voor de lol) en was nu aan het zoeken naar informatie over hoe je zelf een mooi geluid maakt. De basics werken al: ik kan noten spelen. Ik heb ook al zitten spelen met harmonische sinussen en saws en zo stapelen, en dat werkt ook, maar echt mooi wil het nog niet klinken. Dat is dus waar het mij hier om gaat: hoe programmeer je zelf iets dat niet klinkt als een pure, lelijke sinus?

Als ik zoek op synths programmeren, krijg ik nagenoeg alleen maar artikelen over hoe je bestaande synths edit om er een mooi geluid uit te krijgen. Maar ik wil dus echt low level zelf een geluid programmeren.

Mijn vraag dus: weten jullie linkjes naar goede artikelen om hierover te lezen, of hebben jullie zelf tips?

Alvast bedankt! :)
 
NLT-module Sound Design en WaveWizard

NLT-module Sound Design en WaveWizard

Als je zelf tonen wilt programmeren die heel wat expressiever klinken dan een sinus of een zaagtand dan zou je eens kunnen gaan experimenteren met Karplus-Strong: een simpele, maar uitermate interessant en realistisch klinkende simulatie van een getokkelde snaar die dan ook een van de beroemdste algoritmen van de computermuziek is.
Je kunt ook zelf filters programmeren en die koppelen aan toongeneratoren. Dan heb je in principe al een eenvoudige synth!

Een praktisch startpunt hiervoor, zowel voor Karplus-Strong ("Snaarplukvergelijking") als voor filters, zou de NLT-module Sound Design kunnen zijn, geschreven voor de bovenbouw van VWO. Je moet dan dus wel een heeeel klein beetje wiskunde kennen. Bij Sound Design wordt gebruik gemaakt van de software WaveWizard die juist voor mensen zoals jij is ontworpen: je kunt daar je eigen algoritmen heel snel op uitproberen, voorafgaand aan jouw eigen implementatie in C++. Je kunt er ook heel veel ideeën voor klanksynthese uit putten.

Zowel van de NLT-module Sound Design als WaveWizard bestaan op Synthforum discussies, zie links hieronder.
Het lesmateriaal van de module is gratis te downloaden en WaveWizard kun je opstarten via de gratis toegangscode voor Synthforumleden, zie link WaveWizard. Zie ook hieronder, tekst handtekening.

NLT-module Sound Design: https://www.synthforum.nl/forums/showthread.php?t=123046
WaveWizard: https://www.synthforum.nl/forums/showthread.php?t=151316
 
check:

The Synthesis ToolKit in C++ (STK)


What is the Synthesis ToolKit?

The Synthesis ToolKit in C++ (STK) is a set of open source audio signal processing and algorithmic synthesis classes
written in the C++ programming language. STK was designed to facilitate rapid development of music synthesis and audio processing software, with an emphasis on cross-platform functionality, realtime control, ease of use, and educational example code. The Synthesis ToolKit is extremely portable (it's mostly platform-independent C and C++ code), and it's completely user-extensible (all source included, no unusual libraries, and no hidden drivers). We like to think that this increases the chances that our programs will still work in another 5-10 years. In fact, the ToolKit has been working continuously for nearly 15 years now.

:okdan: :okdan:
 
The Synthesis Tool Kit (STK)1 is an object-oriented C++ tool kit
useful for rapid prototyping of real-time computational acoustic
models.
/* Acoustic echo simulator, main C++ program.
Compatible with STK version 4.2.1.
Usage: main inputsoundfile
Writes main.wav as output soundfile
*/
#include "FileWvIn.h" /* STK soundfile input support */
#include "FileWvOut.h" /* STK soundfile output support */
#include "Stk.h" /* STK global variables, etc. */
static const int M = 20000; /* echo delay in samples */
static const StkFloat g = 0.8; /* relative gain factor */
#include "delayline.c" /* defined previously */
int main(int argc, char *argv[])
{
unsigned long i;
FileWvIn input(argv[1]); /* read input soundfile */
FileWvOut output("main"); /* creates main.wav */
unsigned long nframes = input.getSize();
for (i=0;i<nframes+M;i++) {
StkFloat insamp = input.tick();
output.tick(insamp + g * delayline(insamp));
}
}

Toevallig had ik dit net op mn buroblad :)
 
Back
Top