From e6c5283bf46b50dd373b1579cd057e1dc11f0894 Mon Sep 17 00:00:00 2001 From: Miloslav Ciz Date: Mon, 23 Dec 2024 22:50:07 +0100 Subject: [PATCH] Start engine sound --- assets/licar.mid | Bin 0 -> 38840 bytes assets/licar.mmpz | Bin 0 -> 35608 bytes audio.h | 82 ++++++++++++++++++++++++++++++++++++++++++++++ frontend_sdl.c | 6 +++- game.h | 38 +++++++++++++++++++-- settings.h | 5 +++ 6 files changed, 128 insertions(+), 3 deletions(-) create mode 100644 assets/licar.mid create mode 100644 assets/licar.mmpz create mode 100644 audio.h diff --git a/assets/licar.mid b/assets/licar.mid new file mode 100644 index 0000000000000000000000000000000000000000..ea1b402f449e9db4bb74ade9732672f674812bc3 GIT binary patch literal 38840 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 CL^JaM literal 0 HcmV?d00001 diff --git a/audio.h b/audio.h new file mode 100644 index 0000000..0619c1d --- /dev/null +++ b/audio.h @@ -0,0 +1,82 @@ +/** + audio: this file implements the audio system. +*/ + +#ifndef _LCR_AUDIO +#define _LCR_AUDIO + +#define LCR_SOUND_NONE 0 +#define LCR_SOUND_CLICK 1 +#define LCR_SOUND_CRASH 2 +#define LCR_SOUND_ACCELERATOR 3 + +#define LCR_AUDIO_MIN_RPM 128 +#define LCR_AUDIO_MAX_RPM 2048 + +struct +{ + uint32_t frame; + uint8_t soundPlayed; + uint16_t soundPlayedSample; + uint32_t noise; + + +int engineIntensity; +int engineOsc; + + + + +} 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.noise = 0; + +LCR_audio.engineOsc = 0; +LCR_audio.engineIntensity = 0; + +} + +void LCR_audioSetEngineIntensity(uint8_t value) +{ + LCR_audio.engineIntensity = value; +} + +void LCR_audioPlaySound(uint8_t sound) +{ + LCR_audio.soundPlayed = sound; + LCR_audio.soundPlayedSample = 0; +} + +uint8_t _LCR_audioNoise(void) +{ + LCR_audio.noise = LCR_audio.noise * 32310901 + 37; + return LCR_audio.noise >> 16; +} + +uint8_t LCR_audioGetNextSample(void) +{ + unsigned char result = 128; + + if (LCR_audio.engineIntensity > 5) + { + LCR_audio.engineOsc += + ((_LCR_audioNoise() % 256) < + (30 + LCR_audio.engineIntensity)); + + result += LCR_audio.engineOsc; + } + + LCR_audio.frame++; + + return result; +} + + + +#endif // guard diff --git a/frontend_sdl.c b/frontend_sdl.c index 02c9ee2..ce744d8 100644 --- a/frontend_sdl.c +++ b/frontend_sdl.c @@ -26,7 +26,11 @@ void audioFillCallback(void *userdata, uint8_t *s, int l) rewind(musicFile); } - s[i] = byte; +// s[i] = byte; + +s[i] = byte / 2 + LCR_gameGetNextAudioSample() / 2; + + } } diff --git a/game.h b/game.h index 5485bbd..14b225e 100644 --- a/game.h +++ b/game.h @@ -42,6 +42,11 @@ - Implement the below described functions according to their description. - Implement the main program and game loop. - Call the below described functions as described. + - If you want to support music, make your frontend play music from the "music" + file in assets. It is in raw format, storing 8bit unsigned samples at 8000 + Hz. Use the LCR_gameGetMusicVolume to check what the music volume is. If you + don't support music, set LCR_SETTING_MUSIC to 0 in your frontend code so + that the game knows music is disabled. */ /** @@ -93,6 +98,16 @@ void LCR_gameEnd(void); */ uint8_t LCR_gameStep(uint32_t timeMs); +/** + Gets the current music volume; +*/ +uint8_t LCR_gameGetMusicVolume(void); + +/** + Gets next audio sample (unsigned 8bit samples, 8 KHz). +*/ +uint8_t LCR_gameGetNextAudioSample(void); + //------------------------------------------------------------------------------ #define LCR_LOG0(s) ; @@ -133,8 +148,19 @@ struct uint8_t debugDraw; uint8_t checkpointsTaken; uint32_t runTime; + + uint8_t musicVolume; } LCR_game; +uint8_t LCR_gameGetMusicVolume(void) +{ +#if LCR_SETTING_MUSIC + return LCR_game.musicVolume; +#else + return 0; +#endif +} + void LCR_drawPixelXYUnsafe(unsigned int x, unsigned int y, uint16_t color); @@ -149,6 +175,7 @@ static inline void LCR_drawPixelXYSafe(unsigned int x, unsigned int y, #include "racing.h" #include "assets.h" #include "renderer.h" +#include "audio.h" uint8_t LCR_keyStates[LCR_KEYS_TOTAL]; /**< Assures unchanging key states during a single frame, holds @@ -219,12 +246,12 @@ void LCR_gameInit(void) LCR_rendererInit(); LCR_racingInit(); + LCR_audioInit(); + LCR_game.musicVolume = 255; LCR_game.nextRenderFrameTime = 0; LCR_game.nextRacingTickTime = 0; - LCR_game.controlMode = LCR_CONTROL_MODE_FREECAM; - LCR_gameStartRun(LCR_maps[0]); } @@ -369,6 +396,8 @@ LCR_GameUnit physicsInterpolationParam = LCR_GAME_UNIT - int val = LCR_carSpeedKMH(); +LCR_audioSetEngineIntensity(val < 256 ? val : 255); + if (val < 5) // don't show tiny oscillations when still val = 0; @@ -424,4 +453,9 @@ LCR_GameUnit physicsInterpolationParam = LCR_GAME_UNIT - return 1; } +uint8_t LCR_gameGetNextAudioSample(void) +{ + return LCR_audioGetNextSample(); +} + #endif // guard diff --git a/settings.h b/settings.h index d4accc6..5b8b987 100644 --- a/settings.h +++ b/settings.h @@ -172,4 +172,9 @@ #define LCR_SETTING_POTATO_GRAPHICS 0 #endif +#ifndef LCR_SETTING_MUSIC + /** Whether to enable in game music. */ + #define LCR_SETTING_MUSIC 1 +#endif + #endif // guard