#13 in Midi & mixers books
Use arrows to jump to the previous/next product
Reddit mentions of BasicSynth
Sentiment score: 1
Reddit mentions: 1
We found 1 Reddit mentions of BasicSynth. Here are the top ones.
Buying options
View on Amazon.comor
- Baby ruffle edges
- Removable cups
Features:
Specs:
Height | 9 Inches |
Length | 6 Inches |
Number of items | 1 |
Weight | 0.93916923612 Pounds |
Width | 0.72 Inches |
Just basic synthesizer stuff with AVRs.
Making a "proper" synthesizer from scratch is a fairly big job. Most people would probably recommend using csound as the fundamental building blocks.
I recently read through the book basicSynth, and this is the website: http://basicsynth.com/
It explains audio synthesis from zero to a full-blown synthesizer. It's a good read, even if you know some of it.
To run csound, you'd need something that runs Linux. e.g. a Raspberry Pi would be perfect.
To make interesting sounds, you don't need much processing. To make large and complex sounds, you do need a bit more processing but it's mainly for running several voices at once.
Do you know DDS? Direct Digital Synthesis?
You have a "phase accumulator". e.g. 32bit integer.
Every sample you add (or subtract) a value (Frequency Word) to the phase accumulator.
Every sample you take the top half (MSBits) of the phase accumulator, this becomes the lookup address into your wavetable (e.g. sine, square, triangle, random), the value at the wavetable is output to the DAC.
Vary the Frequency Word and you vary the frequency of the waveform.
This consumes about 10 instructions on most CPUs. That's your basic oscillator.
while(1)
{
outputsample = DDS_sin(440); // 440Hz sine wave generator
DAC(outputsample);
delay(sample_period);
}
Take two DDS blocks, and use one to modulate the other. You've got a basic FM synthesizer.
while(1)
{
outputsample = DDS_sin1(DDS_square(10) + 440); // 440Hz sine wave modulated with 10Hz square wave
DAC(outputsample);
delay(sample_period);
}
You can also add envelope modulation (Amplitude Modulation) to the output of your DDS blocks.
while(1)
{
outputsample = DDS_envelope() * DDS_sin1(DDS_sin2(10) + 440); // 440Hz modulated with 10Hz
DAC(outputsample);
delay(sample_period);
}