Start crash sound

This commit is contained in:
Miloslav Ciz 2024-12-25 22:28:46 +01:00
parent 367112dbd9
commit b90f5bbfc8
4 changed files with 103 additions and 46 deletions

68
audio.h
View file

@ -7,11 +7,12 @@
#define LCR_SOUND_NONE 0
#define LCR_SOUND_CLICK 1
#define LCR_SOUND_CRASH 2
#define LCR_SOUND_ACCELERATOR 3
#define LCR_SOUND_CRASH_SMALL 2
#define LCR_SOUND_CRASH_BIG 3
#define LCR_SOUND_ACCELERATOR 4
#define LCR_AUDIO_CRASH_LEN 2048
#define LCR_AUDIO_MIN_RPM 128
#define LCR_AUDIO_MAX_RPM 2048
struct
{
@ -25,8 +26,6 @@ int engineIntensity;
int engineOsc;
int engineInc;
} LCR_audio;
void LCR_audioInit(void)
@ -53,6 +52,7 @@ void LCR_audioSetEngineIntensity(uint8_t value)
void LCR_audioPlaySound(uint8_t sound)
{
LCR_LOG2("playing sound");
LCR_audio.soundPlayed = sound;
LCR_audio.soundPlayedSample = 0;
}
@ -68,23 +68,49 @@ uint8_t LCR_audioGetNextSample(void)
{
unsigned char result = 128;
//if (LCR_audio.engineIntensity)
{
LCR_audio.engineOsc +=
LCR_audio.engineInc ?
(((_LCR_audioNoise() % 256) <
(10 + LCR_audio.engineIntensity))) : -31;
switch (LCR_audio.soundPlayed)
{
case LCR_SOUND_CRASH_SMALL:
result += (LCR_AUDIO_CRASH_LEN - LCR_audio.soundPlayedSample) *
(_LCR_audioNoise() / 16) / LCR_AUDIO_CRASH_LEN;
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.soundPlayedSample >= LCR_AUDIO_CRASH_LEN)
LCR_audio.soundPlayed = LCR_SOUND_NONE;
result +=
LCR_audio.engineIntensity < 20 ?
LCR_audio.engineOsc / 2 : LCR_audio.engineOsc;
}
break;
case LCR_SOUND_CRASH_BIG:
result += ((LCR_AUDIO_CRASH_LEN * 2) - LCR_audio.soundPlayedSample) *
(_LCR_audioNoise() / 8) / (2 * LCR_AUDIO_CRASH_LEN);
if (LCR_audio.soundPlayedSample >= 2 * LCR_AUDIO_CRASH_LEN)
LCR_audio.soundPlayed = LCR_SOUND_NONE;
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.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;
}
LCR_audio.frame++;