Continue music

This commit is contained in:
Miloslav Číž 2020-04-16 18:43:55 +02:00
parent 2a58188ee0
commit 22b18f1d90
2 changed files with 23 additions and 23 deletions

View File

@ -179,13 +179,9 @@ void emscripten_set_main_loop(em_callback_func func, int fps, int simulate_infin
uint8_t audioBuff[SFG_SFX_SAMPLE_COUNT]; uint8_t audioBuff[SFG_SFX_SAMPLE_COUNT];
uint16_t audioPos = 0; uint16_t audioPos = 0;
static inline uint8_t addSamples(uint8_t sample1, uint8_t sample2) static inline uint8_t mixSamples(uint8_t sample1, uint8_t sample2)
{ {
int16_t mixed = sample1; return (((uint16_t) sample1) + ((uint16_t) sample2)) / 2;
mixed -= 127;
mixed += sample2;
mixed = (mixed > 0) ? ((mixed < 255) ? mixed : 255) : 0;
return mixed;
} }
uint8_t musicOn = 1; uint8_t musicOn = 1;
@ -195,7 +191,7 @@ void audioFillCallback(void *userdata, uint8_t *s, int l)
for (int i = 0; i < l; ++i) for (int i = 0; i < l; ++i)
{ {
s[i] = musicOn ? s[i] = musicOn ?
addSamples(audioBuff[audioPos],SFG_getNextMusicSample()) : mixSamples(audioBuff[audioPos],SFG_getNextMusicSample() / 2) :
audioBuff[audioPos]; audioBuff[audioPos];
audioBuff[audioPos] = 127; audioBuff[audioPos] = 127;
@ -217,7 +213,7 @@ void SFG_playSound(uint8_t soundIndex, uint8_t volume)
for (int i = 0; i < SFG_SFX_SAMPLE_COUNT; ++i) for (int i = 0; i < SFG_SFX_SAMPLE_COUNT; ++i)
{ {
audioBuff[pos] = audioBuff[pos] =
addSamples(audioBuff[pos],SFG_GET_SFX_SAMPLE(soundIndex,i) * volumeStep); mixSamples(audioBuff[pos],SFG_GET_SFX_SAMPLE(soundIndex,i) * volumeStep);
pos = (pos < SFG_SFX_SAMPLE_COUNT - 1) ? (pos + 1) : 0; pos = (pos < SFG_SFX_SAMPLE_COUNT - 1) ? (pos + 1) : 0;
} }

View File

@ -37,13 +37,10 @@
struct struct
{ // all should be initialized to 0 { // all should be initialized to 0
// TODO: leave only those needed here
uint8_t track; uint8_t track;
uint32_t t; uint32_t t;
uint32_t t2; uint32_t t2;
uint32_t n3t; uint32_t n11t;
uint32_t n5t;
uint32_t n7t;
} SFG_MusicState; } SFG_MusicState;
/** /**
@ -56,28 +53,28 @@ uint8_t SFG_getNextMusicSample()
{ {
SFG_MusicState.track++; SFG_MusicState.track++;
if (SFG_MusicState.track >= 4) if (SFG_MusicState.track >= 5)
SFG_MusicState.track = 0; SFG_MusicState.track = 0;
SFG_MusicState.t = 0; SFG_MusicState.t = 0;
SFG_MusicState.t2 = 0; SFG_MusicState.t2 = 0;
SFG_MusicState.n3t = 0; SFG_MusicState.n11t = 0;
SFG_MusicState.n5t = 0;
SFG_MusicState.n7t = 0;
} }
uint8_t result; uint8_t result;
#define t SFG_MusicState.t #define t SFG_MusicState.t
#define t2 SFG_MusicState.t2 #define t2 SFG_MusicState.t2
#define n3t SFG_MusicState.n3t #define n11t SFG_MusicState.n11t
switch (SFG_MusicState.track) // individual music tracks switch (SFG_MusicState.track) // individual music tracks
{ {
case 0: case 0:
{ {
uint32_t a = ((t >> 7) | (t >> 9) | (~t << 1) | t); uint32_t a = ((t >> 7) | (t >> 9) | (~t << 1) | t);
result = ((t) & 65536 ? (a & (((t * t) >> 16) & 0x09)) : ~a); result = ((t) & 65536 ? (a & (((t2) >> 16) & 0x09)) : ~a);
t2 += t;
break; break;
} }
@ -105,6 +102,17 @@ uint8_t SFG_getNextMusicSample()
break; break;
} }
case 4:
{
result =
((0x47 >> (t >> 9)) & (t >> t)) | (0x57 >> (t >> 7)) |
(0x06 >> (t >> (((n11t) >> 14) & 0x0e)));
n11t += 11;
break;
}
default: default:
result = 127; result = 127;
break; break;
@ -112,13 +120,9 @@ uint8_t SFG_getNextMusicSample()
#undef t #undef t
#undef t2 #undef t2
#undef n3t #undef n11t
SFG_MusicState.t += 1; SFG_MusicState.t += 1;
SFG_MusicState.t2 += SFG_MusicState.t;
SFG_MusicState.n3t += 3;
SFG_MusicState.n5t += 5;
SFG_MusicState.n7t += 7;
return result; return result;
} }