You are not logged in.
Hello, i was looking for the way to play mp3 files, and i found the GRRMOD in Google Code, i have downloaded the source code of the sample, and i compiled it, when i ran it in the wii, it seems that works fine, but i didn't played the mp3 file (only the .it, .xm, .x3m, and .mod files), then i look the code of the GRRMOD and i found the file "GRRMOD_MP3.c" there are a lot of functions that seems to be for mp3 playing, so i replaced those functions in the sample code but it still don't play the mp3 file.
i don't know if this is functional, because i just found it in branches section but there is no official publication and/or information about it.
Thanks a lot.
This is the code:
/*=========================================== GRRMOD - Test Code - ============================================*/ #include <grrlib.h> #include "grrmod.h" #include "GRRMOD_internals.h" #include <stdlib.h> #include <wiiuse/wpad.h> // Image file #include "Impact_9_png.h" // Mod file #include "music_mp3.h" #include "music_mod.h" #include "music_xm.h" #include "music_s3m.h" #include "music_it.h" #define MAX_WIDTH 6.0f #define MIN_WIDTH 0.2f #define DECAY 0.5f; typedef struct { u8 *Mem; u32 Size; } PLAYLIST; typedef struct { int freq; int vol; int realvol; float width; } CH; static CH channel1 = {0, 0, 0, MIN_WIDTH}; static CH channel2 = {0, 0, 0, MIN_WIDTH}; static CH channel3 = {0, 0, 0, MIN_WIDTH}; static CH channel4 = {0, 0, 0, MIN_WIDTH}; static float calc_size(u8 voice, CH* channel); int main(int argc, char **argv) { float a = 0.0f; u8 Volume = 64; s8 SongNum = 0; PLAYLIST PlayList[] = { {(u8 *)music_mp3, music_mp3_size}, {(u8 *)music_mod, music_mod_size}, {(u8 *)music_s3m, music_s3m_size}, {(u8 *)music_it, music_it_size}, {(u8 *)music_xm, music_xm_size} }; GRRLIB_Init(); GRRLIB_texImg *tex_Font = GRRLIB_LoadTexture(Impact_9_png); GRRLIB_InitTileSet(tex_Font, 10, 16, 32); GRRMOD_MP3_Init(); GRRMOD_MP3_SetMOD(PlayList[0].Mem, PlayList[0].Size); GRRMOD_MP3_SetVolume(64); WPAD_Init(); PAD_Init(); GRRLIB_Settings.antialias = true; GRRLIB_SetBackgroundColour(0x00, 0x00, 0x00, 0xFF); // Loop forever while(1) { WPAD_ScanPads(); PAD_ScanPads(); // Scan the Wiimotes if (WPAD_ButtonsDown(0) & WPAD_BUTTON_HOME || PAD_ButtonsDown(0) & PAD_BUTTON_START) { break; } if (WPAD_ButtonsHeld(0) & WPAD_BUTTON_PLUS ) { GRRMOD_MP3_SetVolume(++Volume); } if (WPAD_ButtonsHeld(0) & WPAD_BUTTON_MINUS) { GRRMOD_MP3_SetVolume(--Volume); } if (WPAD_ButtonsDown(0) & WPAD_BUTTON_A || PAD_ButtonsDown(0) & PAD_BUTTON_A) { GRRMOD_MP3_Pause(); } if (WPAD_ButtonsDown(0) & WPAD_BUTTON_1 || PAD_ButtonsDown(0) & PAD_BUTTON_X) { GRRMOD_MP3_Start(); } if (WPAD_ButtonsDown(0) & WPAD_BUTTON_2 || PAD_ButtonsDown(0) & PAD_BUTTON_Y) { GRRMOD_MP3_Stop(); } if (WPAD_ButtonsDown(0) & WPAD_BUTTON_LEFT || PAD_ButtonsDown(0) & PAD_BUTTON_LEFT) { SongNum--; if(SongNum < 0) SongNum = 0; GRRMOD_MP3_Unload(); GRRMOD_MP3_SetMOD(PlayList[SongNum].Mem, PlayList[SongNum].Size); GRRMOD_MP3_Start(); } if (WPAD_ButtonsDown(0) & WPAD_BUTTON_RIGHT || PAD_ButtonsDown(0) & PAD_BUTTON_RIGHT) { SongNum++; if(SongNum > 4) SongNum = 4; GRRMOD_MP3_Unload(); GRRMOD_MP3_SetMOD(PlayList[SongNum].Mem, PlayList[SongNum].Size); GRRMOD_MP3_Start();; } GRRLIB_Camera3dSettings(0.0f, 0.0f,13.0f, 0,1,0, 0,0,0); GRRLIB_SetLightAmbient(0x333333FF); GRRLIB_SetLightDiff(0,(guVector){0.0f,0.0f,0.0f},20.0f,1.0f,0x00FFFFFF); GRRLIB_SetLightDiff(1,(guVector){0.0f,13.0f,3.0f},20.0f,1.0f,0x0000FFFF); GRRLIB_SetLightDiff(2,(guVector){0.0f,-13.0f,3.0f},20.0f,1.0f,0x00FFFFFF); GRRLIB_SetLightDiff(3,(guVector){13.0f,0.0f,3.0f},20.0f,1.0f,0x0000FFFF); GRRLIB_SetLightDiff(4,(guVector){-13.0f,0.0f,3.0f},20.0f,1.0f,0x00FFFFFF); GRRLIB_3dMode(0.1,1000,45,0,1); GRRLIB_ObjectViewInv(-3.0f, 0.0f, 0.0f, a,a*2,a*3, 1.0f,calc_size(0, &channel1),1.0f); GRRLIB_DrawCube(1.0,true,0xFFFFFFFF); GRRLIB_ObjectViewInv(-1.0f, 0.0f, 0.0f, a,a*2,a*3, 1.0f,calc_size(1, &channel2),1.0f); GRRLIB_DrawCube(1.0,true,0xFFFFFFFF); GRRLIB_ObjectViewInv(1.0f, 0.0f, 0.0f, a,a*2,a*3, 1.0f,calc_size(2, &channel3),1.0f); GRRLIB_DrawCube(1.0,true,0xFFFFFFFF); GRRLIB_ObjectViewInv(3.0f, 0.0f, 0.0f, a,a*2,a*3, 1.0f,calc_size(3, &channel4),1.0f); GRRLIB_DrawCube(1.0,true,0xFFFFFFFF); a+=0.5f; GRRLIB_2dMode(); GRRLIB_Printf(30, 30, tex_Font, 0xFFFFFFFF, 2, "Song: %s", GRRMOD_MP3_GetSongTitle()); GRRLIB_Printf(30, 60, tex_Font, 0xFFFFFFFF, 2, "Type: %s", GRRMOD_MP3_GetModType()); GRRLIB_Printf(30, 90, tex_Font, 0xFFFFFFFF, 2, "1/X = Play; 2/Y = Stop; A = Pause; Left = Prev; Right = Next"); GRRLIB_Render(); // Render the frame buffer to the TV } GRRMOD_End(); GRRLIB_Exit(); // Be a good boy, clear the memory allocated by GRRLIB exit(0); // Use exit() to exit a program, do not use 'return' from main() } static float calc_size(u8 voice, CH* channel) { int freq = GRRMOD_MP3_GetVoiceFrequency(voice); int vol = GRRMOD_MP3_GetVoiceVolume(voice); int realvol = GRRMOD_MP3_GetRealVoiceVolume(voice); if (freq != channel->freq || vol != channel->vol || realvol > channel->realvol) { channel->width = MAX_WIDTH; } else { channel->width -= DECAY; if (channel->width < MIN_WIDTH) channel->width = MIN_WIDTH; } channel->vol = vol; channel->freq = freq; channel->realvol = realvol; return channel->width; }
Offline
GRRMOD is a side project and is far from being completed. You could mess around with the code but we will not give a lot of support.
To use MP3, in GRRMOD_core.c: http://code.google.com/p/grrlib/source/ … _core.c#44
Comment line 45 and uncomment 46.
The code is not complete, when the song is finished instead on restarting in will simply crash (from what I remember). Plus there is a lot of other incomplete functions. Feel free to help...
PS: I think it does not work anymore with the newest libogc version.
Offline
Oh, that's it, now i understand, thanks a lot Crayon, nice work, i'll try make it play mp3 files.
The problem is only with the mp3 files, with the other files it works perfectly..
Thanks a lot
Offline