sent patterns and freq_table to programspace to fix #1
This commit is contained in:
parent
7e1f6c835b
commit
6d2d1eae1e
|
@ -1,4 +1,6 @@
|
||||||
const uint16_t freq_table[] = {
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
|
const uint16_t freq_table[] PROGMEM = {
|
||||||
/*0x00*/ 39,
|
/*0x00*/ 39,
|
||||||
/*0x01*/ 41,
|
/*0x01*/ 41,
|
||||||
/*0x02*/ 43,
|
/*0x02*/ 43,
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include "synth.h"
|
#include "synth.h"
|
||||||
#include "freq_table.h"
|
#include "freq_table.h"
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
// sample rate is 8M / (3 * 64)
|
// sample rate is 8M / (3 * 64)
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
@ -43,7 +45,7 @@ static const uint8_t wave_table[][2] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static const uint8_t patterns[][pattern_length][2] = {
|
static const uint8_t patterns[][pattern_length][2] PROGMEM = {
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
{ 33 - 12, 0 },
|
{ 33 - 12, 0 },
|
||||||
|
@ -204,7 +206,7 @@ uint16_t synth_mix(void)
|
||||||
// enter new row
|
// enter new row
|
||||||
if(tick == 0) {
|
if(tick == 0) {
|
||||||
uint8_t pattern_nr = pattern_table[seq][i];
|
uint8_t pattern_nr = pattern_table[seq][i];
|
||||||
uint8_t note = patterns[pattern_nr][row][0];
|
uint8_t note = pgm_read_byte(&patterns[pattern_nr][row][0]);
|
||||||
|
|
||||||
if(note) { // new note, maybe?
|
if(note) { // new note, maybe?
|
||||||
if(note == 0xff) {
|
if(note == 0xff) {
|
||||||
|
@ -212,7 +214,7 @@ uint16_t synth_mix(void)
|
||||||
} else {
|
} else {
|
||||||
chan->level = 80; // TODO: less?
|
chan->level = 80; // TODO: less?
|
||||||
chan->note = note;
|
chan->note = note;
|
||||||
chan->inst_nr = patterns[pattern_nr][row][1];
|
chan->inst_nr = pgm_read_byte(&patterns[pattern_nr][row][1]);
|
||||||
inst = &instruments[chan->inst_nr];
|
inst = &instruments[chan->inst_nr];
|
||||||
chan->pos = inst->wave_table_pos;
|
chan->pos = inst->wave_table_pos;
|
||||||
if(inst->pulse_width) chan->pulse_width = inst->pulse_width;
|
if(inst->pulse_width) chan->pulse_width = inst->pulse_width;
|
||||||
|
@ -240,7 +242,7 @@ uint16_t synth_mix(void)
|
||||||
synth_channel_t* chan = &channels[i];
|
synth_channel_t* chan = &channels[i];
|
||||||
const synth_instrument_t* inst = &instruments[chan->inst_nr];
|
const synth_instrument_t* inst = &instruments[chan->inst_nr];
|
||||||
|
|
||||||
chan->phase += freq_table[(uint8_t)(chan->note + wave_table[chan->pos][0])];
|
chan->phase += pgm_read_word(&freq_table[(uint8_t)(chan->note + wave_table[chan->pos][0])]);
|
||||||
|
|
||||||
uint8_t amp;
|
uint8_t amp;
|
||||||
switch(wave_table[chan->pos][1]) {
|
switch(wave_table[chan->pos][1]) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user