diff --git a/Makefile b/Makefile index a4277eac..aafc8e0e 100644 --- a/Makefile +++ b/Makefile @@ -31,13 +31,12 @@ LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map,--section-start,.init=0x80a00 #--------------------------------------------------------------------------------- # any extra libraries we wish to link with the project #--------------------------------------------------------------------------------- -LIBS := -lfat -lpngu -lpng -lmetaphrasis -lm -lz -lwiiuse -lbte -lasnd -logc -ltremor -lfreetype +LIBS := -lfat -lpngu -lpng -lmetaphrasis -lm -lz -lwiiuse -lmad -lbte -lasnd -logc -ltremor -lfreetype #--------------------------------------------------------------------------------- # list of directories containing libraries, this must be the top level containing # include and lib #--------------------------------------------------------------------------------- LIBDIRS := $(DEVKITPPC)/lib $(CURDIR) - #--------------------------------------------------------------------------------- # no real need to edit anything past this point unless you need to add additional # rules for different file extensions diff --git a/gui.pnproj b/gui.pnproj index 57e0c7ea..706f4bf5 100644 --- a/gui.pnproj +++ b/gui.pnproj @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/gui.pnps b/gui.pnps index 4d76a3fe..adbc903b 100644 --- a/gui.pnps +++ b/gui.pnps @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/source/libwiigui/gui_customoptionbrowser.h b/source/libwiigui/gui_customoptionbrowser.h index 2ea016bb..8e992225 100644 --- a/source/libwiigui/gui_customoptionbrowser.h +++ b/source/libwiigui/gui_customoptionbrowser.h @@ -7,8 +7,8 @@ class customOptionList { value = new char * [size]; for (int i = 0; i < size; i++) { - name[i] = new char[30]; - value[i] = new char[20]; + name[i] = new char[40]; + value[i] = new char[40]; } length = size; }; diff --git a/source/menu.cpp b/source/menu.cpp index 84fbca9c..243ee24e 100644 --- a/source/menu.cpp +++ b/source/menu.cpp @@ -39,6 +39,7 @@ #include "cfg.h" #include "libwiigui/gui_customoptionbrowser.h" #include "libwiigui/gui_gamebrowser.h" +#include "mp3s.h" #define MAX_CHARACTERS 38 @@ -3412,7 +3413,7 @@ static int MenuSettings() tabBtn.SetImage(&tab1Img); - + GuiButton page1Btn(40, 96); page1Btn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); page1Btn.SetPosition(-202, 90); @@ -3532,7 +3533,7 @@ static int MenuSettings() page2Btn.SetTrigger(2, &trigR); page3Btn.SetTrigger(1, &trigMinus); page3Btn.SetTrigger(2, &trigL); - + mainWindow->Append(&w); mainWindow->Append(&optionBrowser2); @@ -3590,7 +3591,7 @@ static int MenuSettings() mainWindow->Append(&page1Btn); mainWindow->Append(&page3Btn); - sprintf(options2.name[0], " "); + sprintf(options2.name[0], "MP3 Menu"); sprintf(options2.name[1], " "); sprintf(options2.name[2], " "); sprintf(options2.name[3], "Under"); @@ -3600,6 +3601,8 @@ static int MenuSettings() sprintf(options2.name[7], " "); sprintf(options2.name[8], " "); + + } while(menu == MENU_NONE) { @@ -3980,6 +3983,18 @@ static int MenuSettings() sprintf(options2.value[6], " "); sprintf(options2.value[7], " "); sprintf(options2.value[8], " "); + + ret = optionBrowser2.GetClickedOption(); + + switch(ret) { + + case 0: + menu = MENU_MP3; + pageToDisplay = 0; + break; + + } + } if(shutdown == 1) @@ -4045,6 +4060,7 @@ static int MenuSettings() // mainWindow->Remove(&page2Btn); w.Remove(&backBtn); w.Remove(&lockBtn); + w.Remove(&tabBtn); char entered[20] = ""; int result = OnScreenKeyboard(entered, 20,0); // mainWindow->Append(&page1Btn); @@ -4052,6 +4068,7 @@ static int MenuSettings() mainWindow->Append(&optionBrowser2); w.Append(&backBtn); w.Append(&lockBtn); + w.Append(&tabBtn); if ( result == 1 ) { if (!strcmp(entered, Settings.unlockCode)) //if password correct @@ -4375,6 +4392,8 @@ int GameSettings(struct discHdr * header) return retVal; } + + /**************************************************************************** * MenuCheck ***************************************************************************/ @@ -4487,6 +4506,119 @@ static int MenuCheck() return menu; } +int MenuMp3() +{ + int menu = MENU_NONE, cnt = 0; + int ret = 0; + int scrollon, i = 0; + + GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, SOUND_PCM, vol); + GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, vol); + + GuiTrigger trigA; + trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); + + customOptionList options2(500); + char mp3path[30] = "SD:/mp3/"; + char fullpath[100]; + int countmp3 = GetFiles(mp3path); + + for (cnt = 0; cnt < countmp3; cnt++) { + snprintf(options2.value[cnt], 30, "%s", mp3files[cnt]); + sprintf (options2.name[cnt],"%i.", cnt+1); + } + options2.length = cnt; + + GuiImageData btnOutline(settings_menu_button_png); + if(cnt < 9) { + scrollon = 0; + } else { + scrollon = 1; + } + GuiCustomOptionBrowser optionBrowser4(396, 280, &options2, CFG.theme_path, "bg_options_settings", bg_options_settings_png, scrollon); + optionBrowser4.SetPosition(0, 90); + optionBrowser4.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); + optionBrowser4.SetCol2Position(65); + + GuiText cancelBtnTxt("Back", 22, (GXColor){0, 0, 0, 255}); + cancelBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30); + GuiImage cancelBtnImg(&btnOutline); + if (Settings.wsprompt == yes){ + cancelBtnImg.SetWidescreen(CFG.widescreen);} + GuiButton cancelBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); + cancelBtn.SetScale(0.9); + cancelBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); + cancelBtn.SetPosition(180, 400); + cancelBtn.SetLabel(&cancelBtnTxt); + cancelBtn.SetImage(&cancelBtnImg); + cancelBtn.SetSoundOver(&btnSoundOver); + cancelBtn.SetTrigger(&trigA); + cancelBtn.SetEffectGrow(); + + GuiText playBtnTxt("Play", 22, (GXColor){0, 0, 0, 255}); + cancelBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30); + GuiImage playBtnImg(&btnOutline); + if (Settings.wsprompt == yes){ + cancelBtnImg.SetWidescreen(CFG.widescreen);} + GuiButton playBtn(btnOutline.GetWidth(), btnOutline.GetHeight()); + playBtn.SetScale(0.9); + playBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); + playBtn.SetPosition(-180, 400); + playBtn.SetLabel(&playBtnTxt); + playBtn.SetImage(&playBtnImg); + playBtn.SetSoundOver(&btnSoundOver); + playBtn.SetTrigger(&trigA); + playBtn.SetEffectGrow(); + + HaltGui(); + GuiWindow w(screenwidth, screenheight); + w.Append(&cancelBtn); + w.Append(&playBtn); + mainWindow->Append(&optionBrowser4); + mainWindow->Append(&w); + + ResumeGui(); + + while(menu == MENU_NONE) + { + if (cancelBtn.GetState() == STATE_CLICKED) + { + menu = MENU_DISCLIST; + CloseMp3(); + bgMusic->Play(); + break; + } + + ret = optionBrowser4.GetClickedOption(); + + for(i = 0; i < countmp3; i++) { + if(i == ret) { + sprintf(fullpath,"%s%s", mp3path,mp3files[ret]); + PlayMp3(fullpath); + SetMp3Volume(127); + } + } + + if (playBtn.GetState() == STATE_CLICKED) { + + ret = optionBrowser4.GetSelectedOption(); + sprintf(fullpath,"%s%s", mp3path,mp3files[ret]); + //bgMusic->Stop(); + PlayMp3(fullpath); + SetMp3Volume(127); + playBtn.ResetState(); + } + } + + HaltGui(); + mainWindow->Remove(&optionBrowser4); + mainWindow->Remove(&w); + ResumeGui(); + return menu; + + +return menu; +} /**************************************************************************** * MainMenu ***************************************************************************/ @@ -4549,6 +4681,9 @@ int MainMenu(int menu) case MENU_DISCLIST: currentMenu = MenuDiscList(); break; + case MENU_MP3: + currentMenu = MenuMp3(); + break; default: // unrecognized menu currentMenu = MenuCheck(); break; diff --git a/source/menu.h b/source/menu.h index 7e8bd317..e8b280fc 100644 --- a/source/menu.h +++ b/source/menu.h @@ -24,7 +24,8 @@ enum MENU_FORMAT, MENU_INSTALL, MENU_CHECK, - MENU_GAME_SETTINGS + MENU_GAME_SETTINGS, + MENU_MP3 }; #endif diff --git a/source/mp3s.c b/source/mp3s.c new file mode 100644 index 00000000..44ada7d8 --- /dev/null +++ b/source/mp3s.c @@ -0,0 +1,131 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mp3s.h" + +char filename[80]; + +//Files +FILE* pFile; + + +s32 my_reader(void *fp,void *dat, s32 size) +{ + return fread(dat, 1, size, fp); +} + + +void StopMp3() +{ + if(MP3Player_IsPlaying()) { + MP3Player_Stop(); + } +} + +void CloseMp3() { + + if(MP3Player_IsPlaying()) { + MP3Player_Stop(); + } + fclose(pFile); +} + +void SetMp3Volume(u32 vol) +{ + MP3Player_Volume(vol); +} + +int PlayMp3(char * path) { + + if(!MP3Player_IsPlaying()) { + MP3Player_Init(); + } else { + StopMp3(); + } + + pFile = fopen (path, "r"); + MP3Player_PlayFile(pFile, my_reader, NULL); + return 1; +} + +/* +int PlayMp3(char * path) +{ + + + if(!MP3Player_IsPlaying()) { + MP3Player_Init(); + } else { + MP3Player_Stop(); + } + long lSize = 0; + char * buffermp3 = NULL; + size_t resultmp3; + + pFile = fopen (path, "r"); + + //Check that pFile exist + if (pFile!=NULL) + { + // obtain file size: + fseek (pFile , 0 , SEEK_END); + lSize = ftell (pFile); + rewind (pFile); + + // allocate memory to contain the whole file: + buffermp3 = (char*) malloc (sizeof(char)*lSize); + if (buffermp3 == NULL) {fputs (" Memory error",stderr); exit (2);} + + // copy the file into the buffer: + resultmp3 = fread (buffermp3,1,lSize,pFile); + if (resultmp3 != lSize) {fputs (" Reading error",stderr); exit (3);} + + + fclose (pFile); + } + + if (buffermp3 != NULL) + { + MP3Player_PlayBuffer(buffermp3,lSize,NULL); + return 1; + } + +return 0; +} +*/ + +int GetFiles(char * mp3path) +{ +int countmp3 = 0; + +struct stat st; +DIR_ITER* dir; +dir = diropen (mp3path); + +if (dir == NULL) //If empty + { + return 0; + } + else + { + while (dirnext(dir,filename,&st) == 0) + { + if ((st.st_mode & S_IFDIR) == 0) + { + // st.st_mode & S_IFDIR indicates a directory + sprintf(mp3files[countmp3], "%s", filename); + countmp3++; + } + } + } +return countmp3; +} diff --git a/source/mp3s.h b/source/mp3s.h new file mode 100644 index 00000000..4a2f7804 --- /dev/null +++ b/source/mp3s.h @@ -0,0 +1,22 @@ +#ifndef _MP3S_H_ +#define _MP3S_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +char mp3files[500][30]; + +void StopMp3(); +void SetMp3Volume(u32 vol); +int PlayMp3(char * path); +int OpenMp3(char * path); +void CloseMp3(); +int GetFiles(char * mp3path); + +#ifdef __cplusplus +} +#endif + +#endif