Skip to content

Commit

Permalink
optimized fx command implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
localhost committed Feb 23, 2009
1 parent e2b44a9 commit 3153904
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 76 deletions.
131 changes: 67 additions & 64 deletions c/bloopsaphone.c
Expand Up @@ -158,71 +158,74 @@ bloops_synth(bloops *B, int length, float* buffer)
A->playing = BLOOPS_STOP;
} else {
bloopsanote *note = &A->notes[A->nextnote[1]];
for (i = 0; i <= BLOOPS_MAX_FX; i++)
if (note->fxcmd[i] == 1) {
switch (i) {
case BLOOPS_FX_VOLUME:
A->P->volume = note->fxval[BLOOPS_FX_VOLUME];
break;
case BLOOPS_FX_PUNCH:
A->P->punch = note->fxval[BLOOPS_FX_PUNCH];
break;
case BLOOPS_FX_ATTACK:
A->P->attack = note->fxval[BLOOPS_FX_ATTACK];
break;
case BLOOPS_FX_SUSTAIN:
A->P->sustain = note->fxval[BLOOPS_FX_SUSTAIN];
break;
case BLOOPS_FX_DECAY:
A->P->decay = note->fxval[BLOOPS_FX_DECAY];
break;
case BLOOPS_FX_SQUARE:
A->P->square = note->fxval[BLOOPS_FX_SQUARE];
break;
case BLOOPS_FX_SWEEP:
A->P->sweep = note->fxval[BLOOPS_FX_SWEEP];
break;
case BLOOPS_FX_VIBE:
A->P->vibe = note->fxval[BLOOPS_FX_VIBE];
break;
case BLOOPS_FX_VSPEED:
A->P->vspeed = note->fxval[BLOOPS_FX_VSPEED];
break;
case BLOOPS_FX_VDELAY:
A->P->vibe = note->fxval[BLOOPS_FX_VDELAY];
break;
case BLOOPS_FX_LPF:
A->P->lpf = note->fxval[BLOOPS_FX_LPF];
break;
case BLOOPS_FX_LSWEEP:
A->P->lsweep = note->fxval[BLOOPS_FX_LSWEEP];
break;
case BLOOPS_FX_RESONANCE:
A->P->resonance = note->fxval[BLOOPS_FX_RESONANCE];
break;
case BLOOPS_FX_HPF:
A->P->hpf = note->fxval[BLOOPS_FX_HPF];
break;
case BLOOPS_FX_HSWEEP:
A->P->hsweep = note->fxval[BLOOPS_FX_HSWEEP];
break;
case BLOOPS_FX_ARP:
A->P->arp = note->fxval[BLOOPS_FX_ARP];
break;
case BLOOPS_FX_ASPEED:
A->P->aspeed = note->fxval[BLOOPS_FX_ASPEED];
break;
case BLOOPS_FX_PHASE:
A->P->phase = note->fxval[BLOOPS_FX_PHASE];
break;
case BLOOPS_FX_PSWEEP:
A->P->psweep = note->fxval[BLOOPS_FX_PSWEEP];
break;
case BLOOPS_FX_REPEAT:
A->P->repeat = note->fxval[BLOOPS_FX_REPEAT];
break;
}
bloopsafx *fx = (bloopsafx *)note->FX;
while (fx) {
switch (fx->cmd) {
case BLOOPS_FX_VOLUME:
A->P->volume = fx->val;
break;
case BLOOPS_FX_PUNCH:
A->P->punch = fx->val;
break;
case BLOOPS_FX_ATTACK:
A->P->attack = fx->val;
break;
case BLOOPS_FX_SUSTAIN:
A->P->sustain = fx->val;
break;
case BLOOPS_FX_DECAY:
A->P->decay = fx->val;
break;
case BLOOPS_FX_SQUARE:
A->P->square = fx->val;
break;
case BLOOPS_FX_SWEEP:
A->P->sweep = fx->val;
break;
case BLOOPS_FX_VIBE:
A->P->vibe = fx->val;
break;
case BLOOPS_FX_VSPEED:
A->P->vspeed = fx->val;
break;
case BLOOPS_FX_VDELAY:
A->P->vibe = fx->val;
break;
case BLOOPS_FX_LPF:
A->P->lpf = fx->val;
break;
case BLOOPS_FX_LSWEEP:
A->P->lsweep = fx->val;
break;
case BLOOPS_FX_RESONANCE:
A->P->resonance = fx->val;
break;
case BLOOPS_FX_HPF:
A->P->hpf = fx->val;
break;
case BLOOPS_FX_HSWEEP:
A->P->hsweep = fx->val;
break;
case BLOOPS_FX_ARP:
A->P->arp = fx->val;
break;
case BLOOPS_FX_ASPEED:
A->P->aspeed = fx->val;
break;
case BLOOPS_FX_PHASE:
A->P->phase = fx->val;
break;
case BLOOPS_FX_PSWEEP:
A->P->psweep = fx->val;
break;
case BLOOPS_FX_REPEAT:
A->P->repeat = fx->val;
break;
}

fx = (bloopsafx *)fx->next;
}

bloops_ready(B, A, 1);
A->period = 100.0 / (freq * freq + 0.001);
}
Expand Down
11 changes: 9 additions & 2 deletions c/bloopsaphone.h
Expand Up @@ -57,10 +57,17 @@ typedef struct {

#define BLOOPS_HI_OCTAVE 8

typedef struct {
unsigned char cmd;
unsigned char inc;
unsigned char dec;
float val;
struct bloopsafx *next;
} bloopsafx;

typedef struct {
char tone, octave, duration;
char fxcmd[BLOOPS_MAX_FX];
float fxval[BLOOPS_MAX_FX];
struct bloopsafx *FX;
} bloopsanote;

typedef struct {
Expand Down
21 changes: 11 additions & 10 deletions c/notation.rl
Expand Up @@ -34,8 +34,6 @@
mod = 0; \
tone = 0; \
len = 4; \
fxcmd = 0; \
fxval = 0; \
S->nlen++

%%{
Expand Down Expand Up @@ -90,9 +88,12 @@
}

action Afx {
NOTE.fxcmd[fxcmd] = 1;
NOTE.fxval[fxcmd] = fxval;
// printf("\nfxcmd: %u, fxval: %0.3f | ", fxcmd, NOTE.fxval[fxcmd]);
bloopsafx *fx = (bloopsafx *)malloc(sizeof(bloopsafx));
fx->next = (struct bloopsafx *)NOTE.FX;
fx->cmd = fxcmd;
fx->val = fxval;
NOTE.FX = (struct bloopsafx *)fx;
//printf("\nfxcmd: %u, fxval: %0.3f | ", fx->cmd, fx->val);
}

action fxval1 {
Expand Down Expand Up @@ -215,11 +216,11 @@ bloops_track_str(bloopsatrack *track)

adv = sprintf(ptr, "%d", (int)track->notes[i].octave);
ptr += adv;
for (j = 0; j <= BLOOPS_MAX_FX; j++) {
if (track->notes[i].fxcmd[j] == 1) {
adv = sprintf(ptr, "[%s %0.3f]", bloops_fxcmd_name(j), track->notes[i].fxval[j]);
ptr += adv;
}
bloopsafx *fx = (bloopsafx *)track->notes[i].FX;
while (fx) {
adv = sprintf(ptr, "[%s %0.3f]", bloops_fxcmd_name(j), fx->val);
ptr += adv;
fx = (bloopsafx *)fx->next;
}
}
}
Expand Down

0 comments on commit 3153904

Please sign in to comment.