slow donw, put stuff into header
This commit is contained in:
parent
f37519c06f
commit
eef4ec0e44
|
@ -18,7 +18,7 @@ static void init_sampletimer(void)
|
||||||
TCCR0A = (1 << WGM01);
|
TCCR0A = (1 << WGM01);
|
||||||
TCCR0B = (1 << CS00) | (1 << CS01);
|
TCCR0B = (1 << CS00) | (1 << CS01);
|
||||||
|
|
||||||
OCR0A = 3; /* TOP */
|
OCR0A = 6; /* TOP */
|
||||||
TCNT0 = 0;
|
TCNT0 = 0;
|
||||||
/*enable interrupt*/
|
/*enable interrupt*/
|
||||||
TIMSK0 |= (1<<OCIE0A);
|
TIMSK0 |= (1<<OCIE0A);
|
||||||
|
|
|
@ -1,36 +1,15 @@
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
#include "synth.h"
|
||||||
#include "freq_table.h"
|
#include "freq_table.h"
|
||||||
// sample rate is 8M / (3 * 64)
|
// sample rate is 8M / (3 * 64)
|
||||||
|
|
||||||
|
|
||||||
enum { WAVE_OFF, WAVE_PULSE, WAVE_SAW, WAVE_NOISE };
|
|
||||||
enum {
|
enum {
|
||||||
channel_count = 3,
|
channel_count = 3,
|
||||||
tick_length = 800,
|
tick_length = 400,
|
||||||
row_length = 4,
|
row_length = 4,
|
||||||
pattern_length = 16
|
pattern_length = 16
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint8_t note;
|
|
||||||
uint8_t inst_nr;
|
|
||||||
uint8_t pos;
|
|
||||||
|
|
||||||
uint16_t phase;
|
|
||||||
uint16_t pulse_width;
|
|
||||||
|
|
||||||
uint8_t level; // envelop level
|
|
||||||
|
|
||||||
} synth_channel_t;
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint16_t pulse_width;
|
|
||||||
uint8_t pulse_sweep;
|
|
||||||
uint8_t wave_table_pos;
|
|
||||||
uint8_t decay;
|
|
||||||
|
|
||||||
} synth_instrument_t;
|
|
||||||
|
|
||||||
|
|
||||||
static const synth_instrument_t instruments[] = {
|
static const synth_instrument_t instruments[] = {
|
||||||
|
@ -68,9 +47,9 @@ static const uint8_t patterns[][pattern_length][2] = {
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
{ 33 - 12, 0 },
|
{ 33 - 12, 0 },
|
||||||
|
{ 0, 0 },
|
||||||
{ 0xff, 1 },
|
{ 0xff, 1 },
|
||||||
{ 33 - 12, 1 },
|
{ 0, 0 },
|
||||||
{ 0xff, 1 },
|
|
||||||
{ 33, 1 },
|
{ 33, 1 },
|
||||||
{ 0xff, 1 },
|
{ 0xff, 1 },
|
||||||
{ 33, 1 },
|
{ 33, 1 },
|
||||||
|
@ -86,9 +65,9 @@ static const uint8_t patterns[][pattern_length][2] = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ 28 - 12, 0 },
|
{ 28 - 12, 0 },
|
||||||
|
{ 0, 0 },
|
||||||
{ 0xff, 1 },
|
{ 0xff, 1 },
|
||||||
{ 28 - 12, 1 },
|
{ 0, 0 },
|
||||||
{ 0xff, 1 },
|
|
||||||
{ 28, 1 },
|
{ 28, 1 },
|
||||||
{ 0xff, 1 },
|
{ 0xff, 1 },
|
||||||
{ 28, 1 },
|
{ 28, 1 },
|
||||||
|
@ -202,14 +181,6 @@ void synth_init(void)
|
||||||
tick = 0;
|
tick = 0;
|
||||||
row = 0;
|
row = 0;
|
||||||
seq = 0;
|
seq = 0;
|
||||||
|
|
||||||
/*
|
|
||||||
// some test values
|
|
||||||
channels[0].wave = WAVE_PULSE;
|
|
||||||
channels[0].pulse_width = 1 << 15;
|
|
||||||
|
|
||||||
channels[1].wave = WAVE_SAW;
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t synth_mix(void)
|
uint16_t synth_mix(void)
|
||||||
|
@ -239,7 +210,7 @@ uint16_t synth_mix(void)
|
||||||
if(note == 0xff) {
|
if(note == 0xff) {
|
||||||
chan->level = 0;
|
chan->level = 0;
|
||||||
} else {
|
} else {
|
||||||
chan->level = 100;
|
chan->level = 80; // TODO: less?
|
||||||
chan->note = note;
|
chan->note = note;
|
||||||
chan->inst_nr = patterns[pattern_nr][row][1];
|
chan->inst_nr = patterns[pattern_nr][row][1];
|
||||||
inst = &instruments[chan->inst_nr];
|
inst = &instruments[chan->inst_nr];
|
||||||
|
|
|
@ -1,3 +1,26 @@
|
||||||
|
enum { WAVE_OFF, WAVE_PULSE, WAVE_SAW, WAVE_NOISE };
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t note;
|
||||||
|
uint8_t inst_nr;
|
||||||
|
uint8_t pos;
|
||||||
|
|
||||||
|
uint16_t phase;
|
||||||
|
uint16_t pulse_width;
|
||||||
|
|
||||||
|
uint8_t level; // envelop level
|
||||||
|
|
||||||
|
} synth_channel_t;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint16_t pulse_width;
|
||||||
|
uint8_t pulse_sweep;
|
||||||
|
uint8_t wave_table_pos;
|
||||||
|
uint8_t decay;
|
||||||
|
|
||||||
|
} synth_instrument_t;
|
||||||
|
|
||||||
|
|
||||||
void synth_init(void);
|
void synth_init(void);
|
||||||
uint16_t synth_mix(void);
|
uint16_t synth_mix(void);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user