223 lines
5.9 KiB
C
223 lines
5.9 KiB
C
|
/****************************************************************************
|
|||
|
Copyright (c) 2011-2013,WebJet Business Division,CYOU
|
|||
|
|
|||
|
http://www.genesis-3d.com.cn
|
|||
|
|
|||
|
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 __SoundSourceComponent_H__
|
|||
|
#define __SoundSourceComponent_H__
|
|||
|
|
|||
|
#include "appframework/component.h"
|
|||
|
#include "soundfeature/SoundFeature.h"
|
|||
|
#include "addons/resource/audiores.h"
|
|||
|
|
|||
|
#if __ANDROID__
|
|||
|
#include "addons/soundsystem/SoundSystemOpenSL.h"
|
|||
|
#endif
|
|||
|
|
|||
|
namespace App
|
|||
|
{
|
|||
|
|
|||
|
class SoundRes;
|
|||
|
|
|||
|
struct SoundScheduledSource;
|
|||
|
|
|||
|
class SoundSource : public Component
|
|||
|
{
|
|||
|
__DeclareSubClass(SoundSource, Component);
|
|||
|
public:
|
|||
|
SoundSource();
|
|||
|
virtual ~SoundSource();
|
|||
|
|
|||
|
/// @Component::SetupCallbacks setup callbacks for this component, call by Actor in OnActivate()
|
|||
|
virtual void SetupCallbacks();
|
|||
|
|
|||
|
///// @Component::_OnBeginFrame called called on begin of frame.
|
|||
|
virtual void _OnBeginFrame();
|
|||
|
|
|||
|
///// @Component::_OnMoveAfter called after movement has happened.
|
|||
|
virtual void _OnMoveAfter();
|
|||
|
|
|||
|
/// called from Actor::ActivateComponents()
|
|||
|
virtual void OnActivate();
|
|||
|
/// called from Actor::DeactivateComponents()
|
|||
|
virtual void OnDeactivate();
|
|||
|
/// resource needed
|
|||
|
virtual void GetReferenceResourceId(Util::Array<Resources::ReferenceResource>& list) const;
|
|||
|
|
|||
|
void SetupAcceptedMessages();
|
|||
|
void HandleMessage(const GPtr<Messaging::Message>& msg);
|
|||
|
/// for script
|
|||
|
public:
|
|||
|
void Play(void);
|
|||
|
void Stop(void);
|
|||
|
void Pause(void);
|
|||
|
|
|||
|
bool IsPlaying(void) const;
|
|||
|
bool IsPaused(void) const;
|
|||
|
|
|||
|
bool GetLoop (void) const;
|
|||
|
void SetLoop (const bool loop);
|
|||
|
|
|||
|
float GetVolume(void) const;
|
|||
|
void SetVolume(const float volume);
|
|||
|
|
|||
|
bool GetMute(void) const;
|
|||
|
void SetMute(const bool mute);
|
|||
|
|
|||
|
// set sound res
|
|||
|
bool Init(const Util::String &name, const bool &is3D = false);
|
|||
|
bool Is3D(void) const;
|
|||
|
bool Set3D(const bool &is3D);
|
|||
|
|
|||
|
const Util::String& GetName(void) const;
|
|||
|
bool SetName(const Util::String &name, Resources::Priority priority = Resources::ResourcePriority::SoundDefault);
|
|||
|
|
|||
|
uint GetLength(void) const;
|
|||
|
|
|||
|
float GetPitch(void) const;
|
|||
|
void SetPitch(const float pitch);
|
|||
|
|
|||
|
float GetPlayRate(void) const;
|
|||
|
void SetPlayRate(const float playRate);
|
|||
|
|
|||
|
float GetSpread(void) const;
|
|||
|
void SetSpread(float spread);
|
|||
|
|
|||
|
float GetPan() const;
|
|||
|
void SetPan(float pan);
|
|||
|
|
|||
|
float GetMinDistance() const;
|
|||
|
void SetMinDistance(float minDistance);
|
|||
|
|
|||
|
float GetMaxDistance() const;
|
|||
|
void SetMaxDistance(float maxDistance);
|
|||
|
|
|||
|
RolloffMode GetRolloffMode() const;
|
|||
|
void SetRolloffMode(RolloffMode mode);
|
|||
|
|
|||
|
int GetDecompressFlag(void) const;
|
|||
|
void SetDecompressFlag(const int flag);
|
|||
|
|
|||
|
uint GetPosition (void)const;
|
|||
|
void SetPosition(uint position);
|
|||
|
|
|||
|
float GetDopplerLevel(void) const;
|
|||
|
void SetDopplerLevel (float level);
|
|||
|
|
|||
|
int GetPriority() const;
|
|||
|
void SetPriority(int priority);
|
|||
|
|
|||
|
bool IsSteamed() const;
|
|||
|
void SetSteamed(bool b);
|
|||
|
|
|||
|
bool IsDecompress() const;
|
|||
|
void SetDecompress(bool b);
|
|||
|
|
|||
|
bool IsCompressed() const;
|
|||
|
void SetCompressed(bool b);
|
|||
|
|
|||
|
bool IsStatistics() const;
|
|||
|
void SetStatistics(bool b);
|
|||
|
|
|||
|
void SetSoundDirty(bool bDirty);
|
|||
|
public:
|
|||
|
|
|||
|
void AssignInfo(void);
|
|||
|
|
|||
|
void UpdateSoundInfo ();
|
|||
|
|
|||
|
//void SetSoundRes(const GPtr<SoundRes> &res);
|
|||
|
SoundRes* GetSoundRes() const {return mSoundRes; }
|
|||
|
|
|||
|
Sound::SoundSystemSource* GetSoundSystemSource() const {return mSoundSystemSource; }
|
|||
|
|
|||
|
GPtr<Resources::AudioRes> GetAudioRes()const {return mAudioRes;}
|
|||
|
|
|||
|
|
|||
|
// to control function
|
|||
|
void SetDirty(void);
|
|||
|
void ClearDirty(void);
|
|||
|
void SetDirtyIndex(const int dirtyValue);
|
|||
|
bool IsDirty() const { return mDirtyIndex != 0; }
|
|||
|
int GetDirtyIndex() { return mDirtyIndex; }
|
|||
|
|
|||
|
bool GetPlayOnActive() const { return mPlayOnActive; }
|
|||
|
void SetPlayOnActive(const bool playOnActive);
|
|||
|
|
|||
|
void AttachFilters();
|
|||
|
|
|||
|
|
|||
|
// Serialization
|
|||
|
public:
|
|||
|
// @ISerialization::GetVersion. when change storage, must add SerializeVersion count
|
|||
|
virtual Version GetVersion() const;
|
|||
|
|
|||
|
// @ISerialization::Load
|
|||
|
virtual void Load( Version ver, AppReader* pReader, const Serialization::SerializationArgs* args );
|
|||
|
|
|||
|
// @ISerialization::Save
|
|||
|
virtual void Save( AppWriter* pWriter ) const;
|
|||
|
|
|||
|
// copy from other component
|
|||
|
virtual void CopyFrom( const GPtr<Component>& pComponent );
|
|||
|
|
|||
|
protected:
|
|||
|
virtual void OnDestroy();
|
|||
|
|
|||
|
private:
|
|||
|
|
|||
|
Sound::SoundSystemSource* mSoundSystemSource;
|
|||
|
|
|||
|
GPtr<SoundRes> mSoundRes;
|
|||
|
GPtr<Resources::AudioRes> mAudioRes;
|
|||
|
|
|||
|
bool mPlayOnActive;
|
|||
|
int mDirtyIndex;
|
|||
|
|
|||
|
bool mIsSoundDirty;
|
|||
|
bool mStreamed;
|
|||
|
bool mCompressed;
|
|||
|
bool mDecompress;
|
|||
|
bool mStatistics;
|
|||
|
|
|||
|
SoundSouceInfo mSoundInfo;
|
|||
|
//Math::vector mLatestPos;
|
|||
|
|
|||
|
/**
|
|||
|
* backward compatibility props
|
|||
|
**/
|
|||
|
bool mIsSetPlay;
|
|||
|
|
|||
|
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
typedef Util::List<GPtr<Sound::SoundDecodeMsg> > SoundStubList;
|
|||
|
SoundStubList mAsynSoundQueue;
|
|||
|
#if __ANDROID__
|
|||
|
Sound::SoundData mSoundData;
|
|||
|
#endif
|
|||
|
};
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#endif //__SoundSourceComponent_H__
|
|||
|
|