Archive for January, 2016

mono – Open source synthesizer

January 31, 2016

Now let’s build a synthesizer on the Arduino Nano platform.

The mono is a monophonic synth but has a paraphonic oscillator so you can play chords. The synth architecture is a basic 2 DCO, 1 DCF and 1 DCA.

We’ll start with a donor keybed.
I’ve used the Swissonic49 4-octave full sized keyboard with pitchbend and modwheel.
While not a Fatar bed, is it quite a good quality full sized keyboard.

http://www.thomann.de/se/swissonic_easykey_49.htm

Swissonic49

You’ll find the full Project here:

Build the mono synth

My work on these free synthesizers is based on donations from people.
If you find the code useful, please consider a $3 donation to keep future developments open source.

Donate $3

Chips for building DIY synthesizers can be found at:

http://www.dspsynth.eu

Advertisements

The O2 Minipops rhythm box

January 30, 2016

Like the Minipops 7 rhythm box?
Yes, the one that Jean Michel Jarre used on the Oxygen album.

Here is the source code to build one yourself.

It runs unmodified on any Arduino.

And how does it sound?

My work on these free synthesizers is based on donations from people.
If you find the code useful, please consider a $3 donation to keep future developments open source.

Donate $3

Chips for building DIY synthesizers can be found at:

http://www.dspsynth.eu

You find the full source code here:
The O2 source code

How to build your very own string synth

January 15, 2016

solina1

The Eminent Solina is one of the fameous string synthesizers from the 70’s.
It is based on a paraphonic oscillator, a simple envelope and a phaser.

solina6

The oscillators in the original was a divide down structure where you generate the frequencys for the top octave and divide those down by modulo 2 for the rest of the octaves.

Paraphonic means it’s kind of polyphonic but shares some parts of the soundpath.
In this case it’s the envelope shared by all the keys played on the keyboard.

So what does it sound like?


Pretty nice eh?

Build instructions and the full source code for upload in an Arduino Nano can be found at the link to the right top on this page or this link:
https://janostman.wordpress.com/how-to-build-your-very-own-string-synth/

My work on these free synthesizers is based on donations from people.
If you find the code useful, please consider a $3 donation  to keep future developments open source.

Donate $3

Chips for building DIY synthesizers can be found at:

http://www.dspsynth.eu

 

Release for the R-606 Vintage Drum Chip

January 4, 2016

R606

The R-606 is a vintage drum kit in a 28-pin DIP.

It features 7 polyphonic drum sounds and 6 analog level inputs.
1 global accent input.

Sounds are virtual analog modelled for a true vintage sound.
I have used Spice for modelling so you could call it “Circuit Modelling”

R606sch

The chip can be ordered for $30 including international shipping.

Order the R-606 drum chip

More at http://www.dspsynth.eu including application documents.

New demo video for the dsp-D4 drum chip

January 4, 2016

The dsp-D4 chip is a 4-voice polyphonic PCM drum synth in a 8-pin DIP chip.

It can be ordered for $15 including international shipping.

Order the dsp-D4 chip

Or as a 4-pack for individual outputs for $40

Order the dsp-D4 4-pack

More at http://www.dspsynth.eu including application documents.

The dsp-L8 Latin Perc Chip Source code

January 4, 2016

The source code to the dsp-L8 Latin Percussions chip is now avaliable for download.

dsp-L8

L8sch

The code runs unmodified on any Arduino Uno/Nano or on a standalone ATmega with 32Kb or more flash.

You can still buy the preprogrammed chip for $20

Order the preprogrammed dsp-L8 chip

The code is free for non commercial use and if you find it useful, please consider a $3 donation.

Donate $3

Source code:

Download the dsp-L8 Source

 

// dsp-L8 Latin Perc Chip (c) DSP Synthesizers 2015
// Free for non commercial use
// Please consider a donation of $3 if you find this code useful

#include <avr/interrupt.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

// Standard Arduino Pins
#define digitalPinToPortReg(P) \
(((P) >= 0 && (P) <= 7) ? &PORTD : (((P) >= 8 && (P) <= 13) ? &PORTB : &PORTC))
#define digitalPinToDDRReg(P) \
(((P) >= 0 && (P) <= 7) ? &DDRD : (((P) >= 8 && (P) <= 13) ? &DDRB : &DDRC))
#define digitalPinToPINReg(P) \
(((P) >= 0 && (P) <= 7) ? &PIND : (((P) >= 8 && (P) <= 13) ? &PINB : &PINC))
#define digitalPinToBit(P) \
(((P) >= 0 && (P) <= 7) ? (P) : (((P) >= 8 && (P) <= 13) ? (P) – 8 : (P) – 14))

#define digitalReadFast(P) bitRead(*digitalPinToPINReg(P), digitalPinToBit(P))

#define digitalWriteFast(P, V) bitWrite(*digitalPinToPortReg(P), digitalPinToBit(P), (V))

const unsigned char PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
//——— Ringbuf parameters ———-
uint8_t Ringbuffer[256];
uint8_t RingWrite=0;
uint8_t RingRead=0;
volatile uint8_t RingCount=0;
volatile uint16_t SFREQ;
//—————————————–

 

The dsp-D8 Drumchip Source code

January 3, 2016

With the release of the dsp-CR4 and R-606 virtual analog modelling chips I have decided to make the code for the PCM based dsp-D8 open source.

dsp-D8

D8sch

The code below can run on any ATmega with 32Kb flash or more.

You can still buy the preprogrammed chip for $20 by using this link:

Order the dsp-D8 drum chip

If you find  this code useful please consider a donation of $3:

Donate $3

Source code:

Download dsp-D8 source

// dsp-D8 PCM Drum chip  (c) DSP Synthesizers Sweden 2016
//Free for non Commercial use.
// Please consider a donation of $3 if you find this code useful

#include <avr/interrupt.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

// Standard Arduino Pins
#define digitalPinToPortReg(P) \
(((P) >= 0 && (P) <= 7) ? &PORTD : (((P) >= 8 && (P) <= 13) ? &PORTB : &PORTC))
#define digitalPinToDDRReg(P) \
(((P) >= 0 && (P) <= 7) ? &DDRD : (((P) >= 8 && (P) <= 13) ? &DDRB : &DDRC))
#define digitalPinToPINReg(P) \
(((P) >= 0 && (P) <= 7) ? &PIND : (((P) >= 8 && (P) <= 13) ? &PINB : &PINC))
#define digitalPinToBit(P) \
(((P) >= 0 && (P) <= 7) ? (P) : (((P) >= 8 && (P) <= 13) ? (P) – 8 : (P) – 14))

#define digitalReadFast(P) bitRead(*digitalPinToPINReg(P), digitalPinToBit(P))

#define digitalWriteFast(P, V) bitWrite(*digitalPinToPortReg(P), digitalPinToBit(P), (V))

const unsigned char PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
//——— Ringbuf parameters ———-
uint8_t Ringbuffer[256];
uint8_t RingWrite=0;
uint8_t RingRead=0;
volatile uint8_t RingCount=0;
volatile uint16_t SFREQ;
//—————————————–