From 84d2bbe2b32093545d811bfccfa4413eb0ba7fb1 Mon Sep 17 00:00:00 2001 From: James Chen Date: Mon, 29 Jul 2013 14:02:07 +0800 Subject: [PATCH] [Tizen] Re-add missing files for CocosDenshion. --- CocosDenshion/proj.tizen/src/OspPlayer.cpp | 246 +++++++++++++++ CocosDenshion/proj.tizen/src/OspPlayer.h | 65 ++++ .../proj.tizen/src/SimpleAudioEngine.cpp | 295 ++++++++++++++++++ 3 files changed, 606 insertions(+) create mode 100644 CocosDenshion/proj.tizen/src/OspPlayer.cpp create mode 100644 CocosDenshion/proj.tizen/src/OspPlayer.h create mode 100644 CocosDenshion/proj.tizen/src/SimpleAudioEngine.cpp diff --git a/CocosDenshion/proj.tizen/src/OspPlayer.cpp b/CocosDenshion/proj.tizen/src/OspPlayer.cpp new file mode 100644 index 0000000000..f152d8d8c7 --- /dev/null +++ b/CocosDenshion/proj.tizen/src/OspPlayer.cpp @@ -0,0 +1,246 @@ +/**************************************************************************** +Copyright (c) 2013 cocos2d-x.org +Copyright (c) 2013 Lee, Jae-Hong + +http://www.cocos2d-x.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +****************************************************************************/ + +#include "OspPlayer.h" + +using namespace Tizen::Media; + +OspPlayer::OspPlayer() + : __pPlayer(null) + , m_nSoundID(0) +{ + Initialize(); +} + +OspPlayer::~OspPlayer() +{ + Close(); +} + +result +OspPlayer::Initialize() +{ + result r = E_SUCCESS; + + __pPlayer = new (std::nothrow) Player(); + if (__pPlayer == null) + { + AppLogException("pPlyaer = new (std::nothrow) Player() has failed"); + return E_FAILURE; + } + + r = __pPlayer->Construct(*this, null); + if (IsFailed(r)) + { + AppLog("pPlayer->Construct has failed\n"); + return E_FAILURE; + } + + return r; +} + +void +OspPlayer::Open(const char* pFileName, unsigned int uId) +{ + result r = E_SUCCESS; + + Close(); + + r = __pPlayer->OpenFile(pFileName); + if (IsFailed(r)) + { + AppLog("pPlayer->OpenFile has failed\n"); + } + + m_nSoundID = uId; +} + +void +OspPlayer::Play(bool bLoop) +{ + result r = E_SUCCESS; + + r = __pPlayer->SetLooping(bLoop); + if (IsFailed(r)) + { + AppLog("pPlayer->SetLooping has failed\n"); + return; + } + + r = __pPlayer->Play(); + if (IsFailed(r)) + { + AppLog("pPlayer->Play has failed\n"); + } +} + +void +OspPlayer::Pause() +{ + result r = E_SUCCESS; + + r = __pPlayer->Pause(); + if (IsFailed(r)) + { + AppLog("pPlayer->Pause has failed\n"); + } +} + +void +OspPlayer::Stop() +{ + result r = E_SUCCESS; + + r = __pPlayer->Stop(); + if (IsFailed(r)) + { + AppLog("pPlayer->Stop has failed\n"); + } +} + +void +OspPlayer::Resume() +{ + result r = E_SUCCESS; + + if (__pPlayer->GetState() == PLAYER_STATE_PAUSED) + { + r = __pPlayer->Play(); + if (IsFailed(r)) + { + AppLog("pPlayer->Play has failed\n"); + } + } +} + +void +OspPlayer::Rewind() +{ + result r = E_SUCCESS; + + r = __pPlayer->SeekTo(0); + if (IsFailed(r)) + { + AppLog("pPlayer->SeekTo has failed\n"); + } +} + +bool +OspPlayer::IsPlaying() +{ + PlayerState state = __pPlayer->GetState(); + + return (state == PLAYER_STATE_PLAYING) ? true : false; +} + +void +OspPlayer::Close() +{ + result r = E_SUCCESS; + + if (__pPlayer->GetState() == PLAYER_STATE_PLAYING) + { + r = __pPlayer->Stop(); + if (IsFailed(r)) + { + AppLog("pPlayer->Stop has failed\n"); + } + } + + r = __pPlayer->Close(); + if (IsFailed(r)) + { + AppLog("pPlayer->Close has failed\n"); + } +} + +unsigned int +OspPlayer::GetSoundID() +{ + return m_nSoundID; +} + +void +OspPlayer::SetVolume(int volume) +{ + result r = E_SUCCESS; + + if (volume > 100 || volume < 0) + { + return; + } + + r = __pPlayer->SetVolume(volume); + if (IsFailed(r)) + { + AppLog("pPlayer->SetVolume has failed\n"); + } +} + +int +OspPlayer::GetVolume() +{ + return __pPlayer->GetVolume(); +} + +void +OspPlayer::OnPlayerOpened(result r) +{ +} + +void +OspPlayer::OnPlayerEndOfClip(void) +{ +} + +void +OspPlayer::OnPlayerBuffering(int percent) +{ +} + +void +OspPlayer::OnPlayerErrorOccurred(Tizen::Media::PlayerErrorReason r) +{ +} + +void +OspPlayer::OnPlayerInterrupted(void) +{ +} + +void +OspPlayer::OnPlayerReleased(void) +{ +} + +void +OspPlayer::OnPlayerSeekCompleted(result r) +{ +} + +void +OspPlayer::OnPlayerAudioFocusChanged(void) +{ +} diff --git a/CocosDenshion/proj.tizen/src/OspPlayer.h b/CocosDenshion/proj.tizen/src/OspPlayer.h new file mode 100644 index 0000000000..78d54d3571 --- /dev/null +++ b/CocosDenshion/proj.tizen/src/OspPlayer.h @@ -0,0 +1,65 @@ +/**************************************************************************** +Copyright (c) 2013 cocos2d-x.org +Copyright (c) 2013 Lee, Jae-Hong + +http://www.cocos2d-x.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +****************************************************************************/ + +#ifndef _OSP_PLAYER_H_ +#define _OSP_PLAYER_H_ + +#include + +class OspPlayer : public Tizen::Media::IPlayerEventListener +{ +public: + OspPlayer(); + ~OspPlayer(); + + result Initialize(); + void Open(const char* pFileName, unsigned int uId); + void Play(bool bLoop); + void Pause(); + void Stop(); + void Resume(); + void Rewind(); + bool IsPlaying(); + void SetVolume(int volume); + int GetVolume(); + void Close(); + unsigned int GetSoundID(); + +protected: + void OnPlayerOpened(result r); + void OnPlayerEndOfClip(void); + void OnPlayerBuffering(int percent); + void OnPlayerErrorOccurred(Tizen::Media::PlayerErrorReason r); + void OnPlayerInterrupted(void); + void OnPlayerReleased(void); + void OnPlayerSeekCompleted(result r); + void OnPlayerAudioFocusChanged(void); + +private: + Tizen::Media::Player* __pPlayer; + unsigned int m_nSoundID; +}; + +#endif // _OSP_PLAYER_H_ diff --git a/CocosDenshion/proj.tizen/src/SimpleAudioEngine.cpp b/CocosDenshion/proj.tizen/src/SimpleAudioEngine.cpp new file mode 100644 index 0000000000..f2f01e2a8d --- /dev/null +++ b/CocosDenshion/proj.tizen/src/SimpleAudioEngine.cpp @@ -0,0 +1,295 @@ +/**************************************************************************** +Copyright (c) 2013 cocos2d-x.org +Copyright (c) 2013 Lee, Jae-Hong + +http://www.cocos2d-x.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +****************************************************************************/ + +#include "SimpleAudioEngine.h" +#include "OspPlayer.h" +#include "cocos2d.h" +#include + +USING_NS_CC; +using namespace std; + +namespace CocosDenshion { + +typedef map EffectList; +typedef pair Effect; + +static std::string _FullPath(const char * szPath); +static unsigned int _Hash(const char *key); + +#define BREAK_IF(cond) if (cond) break; + +static EffectList& sharedList() +{ + static EffectList s_List; + return s_List; +} + +static OspPlayer& sharedMusic() +{ + static OspPlayer s_Music; + return s_Music; +} + +SimpleAudioEngine::SimpleAudioEngine() +{ +} + +SimpleAudioEngine::~SimpleAudioEngine() +{ +} + +SimpleAudioEngine* SimpleAudioEngine::getInstance() +{ + static SimpleAudioEngine s_SharedEngine; + return &s_SharedEngine; +} + +void SimpleAudioEngine::end() +{ + sharedMusic().Close(); + + EffectList::iterator p = sharedList().begin(); + while (p != sharedList().end()) + { + delete p->second; + p->second = NULL; + p++; + } + sharedList().clear(); +} + +void SimpleAudioEngine::preloadBackgroundMusic(const char* pszFilePath) +{ +} + +void SimpleAudioEngine::playBackgroundMusic(const char* pszFilePath, bool bLoop) +{ + if (!pszFilePath) + { + return; + } + + sharedMusic().Open(_FullPath(pszFilePath).c_str(), _Hash(pszFilePath)); + sharedMusic().Play(bLoop); +} + +void SimpleAudioEngine::stopBackgroundMusic(bool bReleaseData) +{ + if (bReleaseData) + { + sharedMusic().Close(); + } + else + { + sharedMusic().Stop(); + } +} + +void SimpleAudioEngine::pauseBackgroundMusic() +{ + sharedMusic().Pause(); +} + +void SimpleAudioEngine::resumeBackgroundMusic() +{ + sharedMusic().Resume(); +} + +void SimpleAudioEngine::rewindBackgroundMusic() +{ + sharedMusic().Rewind(); +} + +bool SimpleAudioEngine::willPlayBackgroundMusic() +{ + return false; +} + +bool SimpleAudioEngine::isBackgroundMusicPlaying() +{ + return sharedMusic().IsPlaying(); +} + +float SimpleAudioEngine::getBackgroundMusicVolume() +{ + return float(sharedMusic().GetVolume()) / 100.f; +} + +void SimpleAudioEngine::setBackgroundMusicVolume(float volume) +{ + sharedMusic().SetVolume(int(volume * 100)); +} + +float SimpleAudioEngine::getEffectsVolume() +{ + EffectList::iterator iter; + iter = sharedList().begin(); + if (iter != sharedList().end()) + { + return float(iter->second->GetVolume()) / 100.f; + } + return 0.0f; +} + +void SimpleAudioEngine::setEffectsVolume(float volume) +{ + EffectList::iterator iter; + for (iter = sharedList().begin(); iter != sharedList().end(); iter++) + { + iter->second->SetVolume(int(volume * 100)); + } +} + +unsigned int SimpleAudioEngine::playEffect(const char* pszFilePath, bool bLoop/* = false*/, + float pitch/* = 1.0f*/, float pan/* = 0.0f*/, float gain/* = 1.0f*/) +{ + unsigned int nRet = _Hash(pszFilePath); + + preloadEffect(pszFilePath); + + EffectList::iterator p = sharedList().find(nRet); + if (p != sharedList().end()) + { + p->second->Play(bLoop); + } + + return nRet; +} + +void SimpleAudioEngine::stopEffect(unsigned int nSoundId) +{ + EffectList::iterator p = sharedList().find(nSoundId); + if (p != sharedList().end()) + { + p->second->Stop(); + } +} + +void SimpleAudioEngine::preloadEffect(const char* pszFilePath) +{ + int nRet = 0; + do + { + BREAK_IF(! pszFilePath); + + nRet = _Hash(pszFilePath); + + BREAK_IF(sharedList().end() != sharedList().find(nRet)); + + sharedList().insert(Effect(nRet, new (std::nothrow) OspPlayer())); + OspPlayer * pPlayer = sharedList()[nRet]; + pPlayer->Open(_FullPath(pszFilePath).c_str(), nRet); + + BREAK_IF(nRet == pPlayer->GetSoundID()); + + sharedList().erase(nRet); + nRet = 0; + } + while (0); +} + +void SimpleAudioEngine::unloadEffect(const char* pszFilePath) +{ + unsigned nId = _Hash(pszFilePath); + + EffectList::iterator p = sharedList().find(nId); + if (p != sharedList().end()) + { + delete p->second; + p->second = NULL; + sharedList().erase(nId); + } +} + +void SimpleAudioEngine::pauseEffect(unsigned int nSoundId) +{ + EffectList::iterator p = sharedList().find(nSoundId); + if (p != sharedList().end()) + { + p->second->Pause(); + } +} + +void SimpleAudioEngine::pauseAllEffects() +{ + EffectList::iterator iter; + for (iter = sharedList().begin(); iter != sharedList().end(); iter++) + { + iter->second->Pause(); + } +} + +void SimpleAudioEngine::resumeEffect(unsigned int nSoundId) +{ + EffectList::iterator p = sharedList().find(nSoundId); + if (p != sharedList().end()) + { + p->second->Resume(); + } +} + +void SimpleAudioEngine::resumeAllEffects() +{ + EffectList::iterator iter; + for (iter = sharedList().begin(); iter != sharedList().end(); iter++) + { + iter->second->Resume(); + } +} + +void SimpleAudioEngine::stopAllEffects() +{ + EffectList::iterator iter; + for (iter = sharedList().begin(); iter != sharedList().end(); iter++) + { + iter->second->Stop(); + } +} + +////////////////////////////////////////////////////////////////////////// +// static function +////////////////////////////////////////////////////////////////////////// + +static std::string _FullPath(const char * szPath) +{ + return CCFileUtils::getInstance()->fullPathForFilename(szPath); +} + +unsigned int _Hash(const char *key) +{ + unsigned int len = strlen(key); + const char *end=key+len; + unsigned int hash; + + for (hash = 0; key < end; key++) + { + hash *= 16777619; + hash ^= (unsigned int) (unsigned char) toupper(*key); + } + return (hash); +} + +}