- [WIP] Repetitive sections in chirps
This commit is contained in:
31
chirp.cpp
31
chirp.cpp
@@ -34,6 +34,10 @@ struct channel_t {
|
||||
Uint8* play_pos;
|
||||
int32_t play_len;
|
||||
Uint8 play_buffer[132300];
|
||||
char* stack[10] = {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
|
||||
uint8_t stackpos = 0;
|
||||
char* labels[10] = {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
|
||||
uint8_t numlabels = 0;
|
||||
};
|
||||
static channel_t channels[MAX_CHANNELS];
|
||||
|
||||
@@ -140,6 +144,8 @@ int chirp_play(const char* new_song) {
|
||||
channels[c].octave=4;
|
||||
channels[c].tempo=44100;
|
||||
channels[c].waveform=0;
|
||||
channels[c].stackpos=0;
|
||||
channels[c].numlabels=0;
|
||||
channels[c].song = (char*)malloc( strlen( new_song ) + 1 );
|
||||
strcpy( channels[c].song, new_song );
|
||||
channels[c].song_ptr = channels[c].song;
|
||||
@@ -200,8 +206,33 @@ int32_t interpret_next_token(const int c) { //uint8_t* buffer) {
|
||||
if( param >= 48 && param <= 57 ) { channels[c].waveform = param - 48; ++*token; }
|
||||
return 0;
|
||||
case '=':
|
||||
channels[c].stackpos = 0;
|
||||
channels[c].numlabels = 0;
|
||||
channels[c].song_ptr = channels[c].song;
|
||||
return 0;
|
||||
case '[':
|
||||
++*token;
|
||||
channels[c].labels[channels[c].numlabels] = *token; //channels[c].song_ptr;
|
||||
channels[c].numlabels++;
|
||||
{
|
||||
char* nextpos = *token;
|
||||
while(*nextpos!=']') nextpos++;
|
||||
channels[c].stack[channels[c].stackpos]=nextpos+1;
|
||||
}
|
||||
channels[c].stackpos++;
|
||||
return 0;
|
||||
case ']':
|
||||
++*token;
|
||||
channels[c].stackpos--;
|
||||
channels[c].song_ptr=channels[c].stack[channels[c].stackpos];
|
||||
return 0;
|
||||
case '@':
|
||||
param = *++*token;
|
||||
if( param >= 48 && param <= 57 ) { param -= 48; ++*token; } else { param = 0; }
|
||||
channels[c].stack[channels[c].stackpos]=*token;
|
||||
channels[c].stackpos++;
|
||||
channels[c].song_ptr=channels[c].labels[uint8_t(param)];
|
||||
return 0;
|
||||
case '\0':
|
||||
return -1;
|
||||
default:
|
||||
|
||||
@@ -2,8 +2,8 @@ x=0
|
||||
|
||||
function _init()
|
||||
text="HOLA MINI"
|
||||
playchirp("o4w4ce")
|
||||
playchirp("o4w4go5c")
|
||||
playchirp("v4[l0ceg]v2@0v1@0")
|
||||
--playchirp("o4w4go5c")
|
||||
end
|
||||
|
||||
function _update()
|
||||
|
||||
Reference in New Issue
Block a user