218 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			218 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
	
| #include "..\e2dtool.h"
 | |
| #include <map>
 | |
| 
 | |
| typedef std::map<UINT, e2d::Music *> MusicMap;
 | |
| 
 | |
| static MusicMap& GetMusicFileList()
 | |
| {
 | |
| 	static MusicMap s_MusicFileList;
 | |
| 	return s_MusicFileList;
 | |
| }
 | |
| 
 | |
| static MusicMap& GetMusicResList()
 | |
| {
 | |
| 	static MusicMap s_MusicResList;
 | |
| 	return s_MusicResList;
 | |
| }
 | |
| 
 | |
| static float s_fMusicVolume = 1.0;
 | |
| 
 | |
| 
 | |
| bool e2d::Player::preload(const String& filePath)
 | |
| {
 | |
| 	UINT hash = filePath.getHashCode();
 | |
| 
 | |
| 	if (GetMusicFileList().end() != GetMusicFileList().find(hash))
 | |
| 	{
 | |
| 		return true;
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		Music * music = new (std::nothrow) Music();
 | |
| 
 | |
| 		if (music->open(filePath))
 | |
| 		{
 | |
| 			music->setVolume(s_fMusicVolume);
 | |
| 			GetMusicFileList().insert(std::pair<UINT, Music *>(hash, music));
 | |
| 			return true;
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			delete music;
 | |
| 			music = nullptr;
 | |
| 		}
 | |
| 	}
 | |
| 	return false;
 | |
| }
 | |
| 
 | |
| bool e2d::Player::preload(int resNameId, const String& resType)
 | |
| {
 | |
| 	if (GetMusicResList().end() != GetMusicResList().find(resNameId))
 | |
| 	{
 | |
| 		return true;
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		Music * music = new (std::nothrow) Music();
 | |
| 
 | |
| 		if (music->open(resNameId, resType))
 | |
| 		{
 | |
| 			music->setVolume(s_fMusicVolume);
 | |
| 			GetMusicResList().insert(std::pair<UINT, Music *>(resNameId, music));
 | |
| 			return true;
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			delete music;
 | |
| 			music = nullptr;
 | |
| 		}
 | |
| 	}
 | |
| 	return false;
 | |
| }
 | |
| 
 | |
| bool e2d::Player::play(const String& filePath, int nLoopCount)
 | |
| {
 | |
| 	if (Player::preload(filePath))
 | |
| 	{
 | |
| 		UINT hash = filePath.getHashCode();
 | |
| 		auto music = GetMusicFileList()[hash];
 | |
| 		if (music->play(nLoopCount))
 | |
| 		{
 | |
| 			return true;
 | |
| 		}
 | |
| 	}
 | |
| 	return false;
 | |
| }
 | |
| 
 | |
| bool e2d::Player::play(int resNameId, const String& resType, int nLoopCount)
 | |
| {
 | |
| 	if (Player::preload(resNameId, resType))
 | |
| 	{
 | |
| 		auto music = GetMusicResList()[resNameId];
 | |
| 		if (music->play(nLoopCount))
 | |
| 		{
 | |
| 			return true;
 | |
| 		}
 | |
| 	}
 | |
| 	return false;
 | |
| }
 | |
| 
 | |
| void e2d::Player::pause(const String& filePath)
 | |
| {
 | |
| 	if (filePath.isEmpty())
 | |
| 		return;
 | |
| 
 | |
| 	UINT hash = filePath.getHashCode();
 | |
| 
 | |
| 	if (GetMusicFileList().end() != GetMusicFileList().find(hash))
 | |
| 		GetMusicFileList()[hash]->pause();
 | |
| }
 | |
| 
 | |
| void e2d::Player::pause(int resNameId, const String& resType)
 | |
| {
 | |
| 	if (GetMusicResList().end() != GetMusicResList().find(resNameId))
 | |
| 		GetMusicResList()[resNameId]->pause();
 | |
| }
 | |
| 
 | |
| void e2d::Player::resume(const String& filePath)
 | |
| {
 | |
| 	if (filePath.isEmpty())
 | |
| 		return;
 | |
| 
 | |
| 	UINT hash = filePath.getHashCode();
 | |
| 
 | |
| 	if (GetMusicFileList().end() != GetMusicFileList().find(hash))
 | |
| 		GetMusicFileList()[hash]->resume();
 | |
| }
 | |
| 
 | |
| void e2d::Player::resume(int resNameId, const String& resType)
 | |
| {
 | |
| 	if (GetMusicResList().end() != GetMusicResList().find(resNameId))
 | |
| 		GetMusicResList()[resNameId]->pause();
 | |
| }
 | |
| 
 | |
| void e2d::Player::stop(const String& filePath)
 | |
| {
 | |
| 	if (filePath.isEmpty())
 | |
| 		return;
 | |
| 
 | |
| 	UINT hash = filePath.getHashCode();
 | |
| 
 | |
| 	if (GetMusicFileList().end() != GetMusicFileList().find(hash))
 | |
| 		GetMusicFileList()[hash]->stop();
 | |
| }
 | |
| 
 | |
| void e2d::Player::stop(int resNameId, const String& resType)
 | |
| {
 | |
| 	if (GetMusicResList().end() != GetMusicResList().find(resNameId))
 | |
| 		GetMusicResList()[resNameId]->stop();
 | |
| }
 | |
| 
 | |
| bool e2d::Player::isPlaying(const String& filePath)
 | |
| {
 | |
| 	if (filePath.isEmpty())
 | |
| 		return false;
 | |
| 
 | |
| 	UINT hash = filePath.getHashCode();
 | |
| 
 | |
| 	if (GetMusicFileList().end() != GetMusicFileList().find(hash))
 | |
| 		return GetMusicFileList()[hash]->isPlaying();
 | |
| 
 | |
| 	return false;
 | |
| }
 | |
| 
 | |
| bool e2d::Player::isPlaying(int resNameId, const String& resType)
 | |
| {
 | |
| 	if (GetMusicResList().end() != GetMusicResList().find(resNameId))
 | |
| 		return GetMusicResList()[resNameId]->isPlaying();
 | |
| 	return false;
 | |
| }
 | |
| 
 | |
| double e2d::Player::getVolume()
 | |
| {
 | |
| 	return s_fMusicVolume;
 | |
| }
 | |
| 
 | |
| void e2d::Player::setVolume(double volume)
 | |
| {
 | |
| 	s_fMusicVolume = min(max(float(volume), -224), 224);
 | |
| 	for (auto pair : GetMusicFileList())
 | |
| 	{
 | |
| 		pair.second->setVolume(s_fMusicVolume);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void e2d::Player::pauseAll()
 | |
| {
 | |
| 	for (auto pair : GetMusicFileList())
 | |
| 	{
 | |
| 		pair.second->pause();
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void e2d::Player::resumeAll()
 | |
| {
 | |
| 	for (auto pair : GetMusicFileList())
 | |
| 	{
 | |
| 		pair.second->resume();
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void e2d::Player::stopAll()
 | |
| {
 | |
| 	for (auto pair : GetMusicFileList())
 | |
| 	{
 | |
| 		pair.second->stop();
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void e2d::Player::__uninit()
 | |
| {
 | |
| 	for (auto pair : GetMusicFileList())
 | |
| 	{
 | |
| 		pair.second->close();
 | |
| 		delete pair.second;
 | |
| 	}
 | |
| 
 | |
| 	GetMusicFileList().clear();
 | |
| } |