mirror of
https://github.com/Fledge68/WiiFlow_Lite.git
synced 2024-11-01 00:55:06 +01:00
-added ability for music plugin to play playlist files (.pls or .m3u)
edit your music plugin ini. change the filetypes line to include .pls for example: filetypes=.mp3|.ogg|.pls|.m3u
This commit is contained in:
parent
796a8d78f7
commit
c48ea85348
BIN
out/boot.dol
BIN
out/boot.dol
Binary file not shown.
Before Width: | Height: | Size: 3.3 MiB After Width: | Height: | Size: 3.3 MiB |
@ -1052,7 +1052,10 @@ void CMenu::_launch(const dir_discHdr *hdr)
|
||||
/* check if music player plugin, if so set wiiflow's bckgrnd music player to play this song */
|
||||
if(plugin_dol_len == 5 && strcasecmp(plugin_dol_name, "music") == 0)
|
||||
{
|
||||
if(strstr(launchHdr.path, ".pls") == NULL && strstr(launchHdr.path, ".m3u") == NULL)
|
||||
MusicPlayer.LoadFile(launchHdr.path, false);
|
||||
else
|
||||
MusicPlayer.InitPlaylist(m_cfg, launchHdr.path, currentPartition);// maybe error msg if trouble loading playlist
|
||||
m_exit = false;
|
||||
return;
|
||||
}
|
||||
|
@ -16,8 +16,11 @@
|
||||
****************************************************************************/
|
||||
#include <cstdio>
|
||||
#include <algorithm>
|
||||
#include <fstream>
|
||||
|
||||
#include "MusicPlayer.hpp"
|
||||
#include "SoundHandler.hpp"
|
||||
#include "devicemounter/DeviceHandler.hpp"
|
||||
#include "list/ListGenerator.hpp"
|
||||
#include "gui/text.hpp"
|
||||
#include "gecko/gecko.hpp"
|
||||
@ -46,6 +49,11 @@ static inline void FileNameAdder(char *Path)
|
||||
|
||||
void Musicplayer::Init(Config &cfg, const string& musicDir, const string& themeMusicDir)
|
||||
{
|
||||
if(usingPlaylist)
|
||||
{
|
||||
InitPlaylist(cfg, curPlaylist, pl_device);
|
||||
return;
|
||||
}
|
||||
Cleanup();
|
||||
FadeRate = cfg.getInt("GENERAL", "music_fade_rate", 8);
|
||||
Volume = cfg.getInt("GENERAL", "sound_volume_music", 255);
|
||||
@ -61,10 +69,55 @@ void Musicplayer::Init(Config &cfg, const string& musicDir, const string& themeM
|
||||
srand(unsigned(time(NULL)));
|
||||
random_shuffle(FileNames.begin(), FileNames.end());
|
||||
}
|
||||
usingPlaylist = false;
|
||||
OneSong = (FileNames.size() == 1);
|
||||
CurrentFileName = FileNames.begin();
|
||||
}
|
||||
|
||||
int Musicplayer::InitPlaylist(Config &cfg, const char *playlist, u8 device)
|
||||
{
|
||||
ifstream filestr;
|
||||
filestr.open(playlist);
|
||||
|
||||
if(filestr.fail())
|
||||
return 0;
|
||||
|
||||
filestr.seekg(0,ios_base::end);
|
||||
int size = filestr.tellg();
|
||||
if(size <= 0)
|
||||
return -1;
|
||||
filestr.seekg(0,ios_base::beg);
|
||||
|
||||
string song;
|
||||
FileNames.clear();
|
||||
while(!filestr.eof())
|
||||
{
|
||||
getline(filestr, song, '\r');
|
||||
if(song.find(".mp3") == string::npos && song.find(".ogg") == string::npos)// if not song path continue to next line
|
||||
continue;
|
||||
while(song.find("\\") != string::npos)// convert all '\' to '/'
|
||||
song.replace(song.find("\\"), 1, "/");
|
||||
string::size_type p = song.find("/");// remove drive letter and anything else before first /
|
||||
song.erase(0, p);
|
||||
const char *songPath = fmt("%s:%s", DeviceName[device], song.c_str());
|
||||
FileNames.push_back(songPath);
|
||||
}
|
||||
filestr.close();
|
||||
|
||||
curPlaylist = playlist;
|
||||
usingPlaylist = true;
|
||||
pl_device = device;
|
||||
if(cfg.getBool("GENERAL", "randomize_music", true) && FileNames.size() > 0)
|
||||
{
|
||||
srand(unsigned(time(NULL)));
|
||||
random_shuffle(FileNames.begin(), FileNames.end());
|
||||
}
|
||||
OneSong = (FileNames.size() == 1);
|
||||
CurrentFileName = FileNames.begin();
|
||||
LoadCurrentFile();
|
||||
return 1;
|
||||
}
|
||||
|
||||
void Musicplayer::SetFadeRate(u8 faderate)
|
||||
{
|
||||
FadeRate = faderate;
|
||||
@ -123,7 +176,7 @@ void Musicplayer::Stop()
|
||||
{
|
||||
if(!MusicFile.IsPlaying())
|
||||
return;
|
||||
MusicFile.Pause();
|
||||
MusicFile.Pause();// why not Stop()
|
||||
CurrentPosition = SoundHandle.Decoder(MusicFile.GetVoice())->Tell();
|
||||
MusicFile.FreeMemory();
|
||||
MusicStopped = true;
|
||||
|
@ -29,6 +29,7 @@ class Musicplayer
|
||||
public:
|
||||
void Cleanup();
|
||||
void Init(Config &cfg, const string& musicDir, const string& themeMusicDir);
|
||||
int InitPlaylist(Config &cfg, const char *playlist, u8 device);
|
||||
void Tick(bool attenuate);
|
||||
|
||||
void SetFadeRate(u8 faderate);
|
||||
@ -60,6 +61,9 @@ protected:
|
||||
int CurrentPosition;
|
||||
bool MusicStopped;
|
||||
bool MusicChanged;
|
||||
const char *curPlaylist;
|
||||
bool usingPlaylist = false;
|
||||
u8 pl_device;
|
||||
|
||||
GuiSound MusicFile;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user