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(); | ||
|  | } |