Continue crash sound
This commit is contained in:
parent
b90f5bbfc8
commit
85b8b1352d
3 changed files with 65 additions and 64 deletions
88
audio.h
88
audio.h
|
@ -18,24 +18,32 @@ struct
|
|||
{
|
||||
uint32_t frame;
|
||||
uint8_t soundPlayed;
|
||||
uint16_t soundPlayedSample;
|
||||
uint16_t soundPlayedFrame;
|
||||
uint32_t noise;
|
||||
|
||||
uint8_t crashSample;
|
||||
|
||||
|
||||
int engineIntensity;
|
||||
int engineOsc;
|
||||
int engineInc;
|
||||
|
||||
|
||||
} LCR_audio;
|
||||
|
||||
|
||||
|
||||
|
||||
void LCR_audioInit(void)
|
||||
{
|
||||
LCR_LOG0("initializing audio");
|
||||
LCR_audio.frame = 0;
|
||||
LCR_audio.soundPlayed = LCR_SOUND_NONE;
|
||||
LCR_audio.soundPlayedSample = 0;
|
||||
LCR_audio.soundPlayedFrame = 0;
|
||||
LCR_audio.noise = 0;
|
||||
|
||||
LCR_audio.crashSample = 0;
|
||||
|
||||
LCR_audio.engineOsc = 0;
|
||||
|
||||
LCR_audio.engineInc = 1;
|
||||
|
@ -54,7 +62,7 @@ void LCR_audioPlaySound(uint8_t sound)
|
|||
{
|
||||
LCR_LOG2("playing sound");
|
||||
LCR_audio.soundPlayed = sound;
|
||||
LCR_audio.soundPlayedSample = 0;
|
||||
LCR_audio.soundPlayedFrame = 0;
|
||||
}
|
||||
|
||||
uint8_t _LCR_audioNoise(void)
|
||||
|
@ -63,60 +71,60 @@ uint8_t _LCR_audioNoise(void)
|
|||
return LCR_audio.noise >> 16;
|
||||
}
|
||||
|
||||
|
||||
uint8_t LCR_audioGetNextSample(void)
|
||||
{
|
||||
unsigned char result = 128;
|
||||
|
||||
switch (LCR_audio.soundPlayed)
|
||||
{
|
||||
case LCR_SOUND_CRASH_SMALL:
|
||||
result += (LCR_AUDIO_CRASH_LEN - LCR_audio.soundPlayedSample) *
|
||||
(_LCR_audioNoise() / 16) / LCR_AUDIO_CRASH_LEN;
|
||||
switch (LCR_audio.soundPlayed)
|
||||
{
|
||||
case LCR_SOUND_CRASH_SMALL:
|
||||
case LCR_SOUND_CRASH_BIG:
|
||||
{
|
||||
int limit = (LCR_audio.soundPlayed == LCR_SOUND_CRASH_BIG ? 256 : 128) -
|
||||
(LCR_audio.soundPlayedFrame * 256) / LCR_AUDIO_CRASH_LEN;
|
||||
|
||||
if (LCR_audio.soundPlayedSample >= LCR_AUDIO_CRASH_LEN)
|
||||
LCR_audio.soundPlayed = LCR_SOUND_NONE;
|
||||
if (LCR_audio.frame % 2 || // lower frequency
|
||||
LCR_audio.soundPlayedFrame < LCR_AUDIO_CRASH_LEN / 4)
|
||||
LCR_audio.crashSample = _LCR_audioNoise();
|
||||
|
||||
break;
|
||||
if (LCR_audio.crashSample > limit)
|
||||
LCR_audio.crashSample = (_LCR_audioNoise() % 2) ? 0 : limit;
|
||||
|
||||
case LCR_SOUND_CRASH_BIG:
|
||||
result += ((LCR_AUDIO_CRASH_LEN * 2) - LCR_audio.soundPlayedSample) *
|
||||
(_LCR_audioNoise() / 8) / (2 * LCR_AUDIO_CRASH_LEN);
|
||||
result += LCR_audio.crashSample - limit / 2;
|
||||
|
||||
if (LCR_audio.soundPlayedSample >= 2 * LCR_AUDIO_CRASH_LEN)
|
||||
LCR_audio.soundPlayed = LCR_SOUND_NONE;
|
||||
if (limit == 0)
|
||||
LCR_audio.soundPlayed = LCR_SOUND_NONE;
|
||||
|
||||
break;
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (LCR_audio.soundPlayed != LCR_SOUND_NONE)
|
||||
LCR_audio.soundPlayedSample++;
|
||||
else
|
||||
{
|
||||
LCR_audio.engineOsc +=
|
||||
LCR_audio.engineInc ?
|
||||
(((_LCR_audioNoise() % 256) <
|
||||
(10 + LCR_audio.engineIntensity))) : -31;
|
||||
if (LCR_audio.soundPlayed != LCR_SOUND_NONE)
|
||||
LCR_audio.soundPlayedFrame++;
|
||||
else
|
||||
{
|
||||
LCR_audio.engineOsc +=
|
||||
LCR_audio.engineInc ?
|
||||
(((_LCR_audioNoise() % 256) <
|
||||
(10 + LCR_audio.engineIntensity))) : -31;
|
||||
|
||||
if (LCR_audio.engineInc && LCR_audio.engineOsc >
|
||||
(90 + (LCR_audio.engineIntensity / 8)))
|
||||
LCR_audio.engineInc = 0;
|
||||
else if ((!LCR_audio.engineInc) && LCR_audio.engineOsc < 10)
|
||||
LCR_audio.engineInc = 1;
|
||||
if (LCR_audio.engineInc && LCR_audio.engineOsc >
|
||||
(90 + (LCR_audio.engineIntensity / 8)))
|
||||
LCR_audio.engineInc = 0;
|
||||
else if ((!LCR_audio.engineInc) && LCR_audio.engineOsc < 10)
|
||||
LCR_audio.engineInc = 1;
|
||||
|
||||
result +=
|
||||
LCR_audio.engineIntensity < 20 ?
|
||||
LCR_audio.engineOsc / 2 : LCR_audio.engineOsc;
|
||||
}
|
||||
result +=
|
||||
LCR_audio.engineIntensity < 20 ?
|
||||
LCR_audio.engineOsc / 2 : LCR_audio.engineOsc;
|
||||
}
|
||||
|
||||
LCR_audio.frame++;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif // guard
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue