From b723af3635a37151ae8d2b3e375acf6d5296acfd Mon Sep 17 00:00:00 2001 From: Daryl Borth Date: Sun, 6 Jan 2019 10:17:20 -0700 Subject: [PATCH] Add support to load external background music --- readme.txt | 2 ++ source/fileop.cpp | 29 +++++++++++++++++++++++++++++ source/fileop.h | 1 + source/mem2.cpp | 2 +- source/menu.cpp | 5 ++++- source/menu.h | 3 +++ source/preferences.cpp | 7 +++++++ 7 files changed, 47 insertions(+), 2 deletions(-) diff --git a/readme.txt b/readme.txt index e1486b4..2f3a7ae 100644 --- a/readme.txt +++ b/readme.txt @@ -39,6 +39,8 @@ Wii homebrew is WiiBrew (www.wiibrew.org). * Fixed Wii U GamePad support * Added ability to load external fonts and activated Japanese/Korean translations. Simply put the ko.ttf or jp.ttf in the app directory +* Added ability to customize background music. Simply put a bg_music.ogg + in the app directory * Added ability to change preview image source with + button (thanks Zalo!) [4.4.1 - January 4, 2019] diff --git a/source/fileop.cpp b/source/fileop.cpp index 2128715..3cac6cc 100644 --- a/source/fileop.cpp +++ b/source/fileop.cpp @@ -890,6 +890,35 @@ size_t LoadFont(char * filepath) fclose(file); return loadSize; } + +void LoadBgMusic() +{ + char filepath[MAXPATHLEN]; + sprintf(filepath, "%s/bg_music.ogg", appPath); + FILE *file = fopen (filepath, "rb"); + if(!file) { + return; + } + + fseeko(file,0,SEEK_END); + size_t ogg_size = ftello(file); + + if(ogg_size == 0) { + return; + } + + u8 * ogg_data = (u8 *)mem2_malloc(ogg_size); + + if(!ogg_data) { + return; + } + + fseeko(file, 0, SEEK_SET); + fread (ogg_data, 1, ogg_size, file); + fclose(file); + bg_music = ogg_data; + bg_music_size = ogg_size; +} #endif /**************************************************************************** diff --git a/source/fileop.h b/source/fileop.h index 5f0dc49..3d85371 100644 --- a/source/fileop.h +++ b/source/fileop.h @@ -37,6 +37,7 @@ size_t LoadFile(char * rbuffer, char *filepath, size_t length, size_t buffersize size_t LoadFile(char * filepath, bool silent); size_t LoadSzFile(char * filepath, unsigned char * rbuffer); size_t LoadFont(char *filepath); +void LoadBgMusic(); size_t SaveFile(char * buffer, char *filepath, size_t datasize, bool silent); size_t SaveFile(char * filepath, size_t datasize, bool silent); diff --git a/source/mem2.cpp b/source/mem2.cpp index 08be67d..f2e0c84 100644 --- a/source/mem2.cpp +++ b/source/mem2.cpp @@ -19,7 +19,7 @@ static heap_cntrl mem2_heap; u32 InitMem2Manager () { - int size = (12*1024*1024); + int size = (20*1024*1024); u32 level; _CPU_ISR_Disable(level); size &= ~0x1f; // round down, because otherwise we may exceed the area diff --git a/source/menu.cpp b/source/menu.cpp index 16266e1..07c9b9c 100644 --- a/source/menu.cpp +++ b/source/menu.cpp @@ -98,6 +98,9 @@ static char progressMsg[201]; static int progressDone = 0; static int progressTotal = 0; +u8 * bg_music; +u32 bg_music_size; + /**************************************************************************** * ResumeGui * @@ -4292,7 +4295,7 @@ MainMenu (int menu) #ifndef NO_SOUND if(firstRun) { - bgMusic = new GuiSound(bg_music_ogg, bg_music_ogg_size, SOUND_OGG); + bgMusic = new GuiSound(bg_music, bg_music_size, SOUND_OGG); bgMusic->SetVolume(GCSettings.MusicVolume); bgMusic->SetLoop(true); enterSound = new GuiSound(enter_ogg, enter_ogg_size, SOUND_OGG); diff --git a/source/menu.h b/source/menu.h index 7b2edb5..d87fe3e 100644 --- a/source/menu.h +++ b/source/menu.h @@ -23,6 +23,9 @@ void CancelAction(); void ShowProgress (const char *msg, int done, int total); void ChangeLanguage(); +extern u8 * bg_music; +extern u32 bg_music_size; + enum { MENU_EXIT = -1, diff --git a/source/preferences.cpp b/source/preferences.cpp index 9f4e18f..ef8977f 100644 --- a/source/preferences.cpp +++ b/source/preferences.cpp @@ -729,5 +729,12 @@ bool LoadPrefs() } ChangeLanguage(); + +#ifdef HW_RVL + bg_music = (u8 * )bg_music_ogg; + bg_music_size = bg_music_ogg_size; + LoadBgMusic(); +#endif + return prefFound; }