mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-02-01 18:15:32 +00:00
Add a method to play an audio track with a custom decoder
This commit is contained in:
parent
1571243ef0
commit
779ced0889
3 changed files with 28 additions and 2 deletions
|
@ -22,6 +22,8 @@ namespace MWWorld
|
||||||
namespace MWSound
|
namespace MWSound
|
||||||
{
|
{
|
||||||
class Sound;
|
class Sound;
|
||||||
|
class Sound_Decoder;
|
||||||
|
typedef boost::shared_ptr<Sound_Decoder> DecoderPtr;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace MWBase
|
namespace MWBase
|
||||||
|
@ -89,6 +91,9 @@ namespace MWBase
|
||||||
virtual void stopSay(MWWorld::Ptr reference=MWWorld::Ptr()) = 0;
|
virtual void stopSay(MWWorld::Ptr reference=MWWorld::Ptr()) = 0;
|
||||||
///< Stop an actor speaking
|
///< Stop an actor speaking
|
||||||
|
|
||||||
|
virtual SoundPtr playTrack(const MWSound::DecoderPtr& decoder) = 0;
|
||||||
|
///< Play a 2D audio track, using a custom decoder
|
||||||
|
|
||||||
virtual SoundPtr playSound(const std::string& soundId, float volume, float pitch,
|
virtual SoundPtr playSound(const std::string& soundId, float volume, float pitch,
|
||||||
int mode=Play_Normal) = 0;
|
int mode=Play_Normal) = 0;
|
||||||
///< Play a sound, independently of 3D-position
|
///< Play a sound, independently of 3D-position
|
||||||
|
|
|
@ -275,6 +275,26 @@ namespace MWSound
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
MWBase::SoundPtr SoundManager::playTrack(const DecoderPtr& decoder)
|
||||||
|
{
|
||||||
|
MWBase::SoundPtr track;
|
||||||
|
if(!mOutput->isInitialized())
|
||||||
|
return track;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
float basevol = mMasterVolume;
|
||||||
|
|
||||||
|
track = mOutput->streamSound(decoder, basevol, 1.0f, Play_NoEnv);
|
||||||
|
track->mBaseVolume = basevol;
|
||||||
|
track->mFlags = Play_NoEnv;
|
||||||
|
}
|
||||||
|
catch(std::exception &e)
|
||||||
|
{
|
||||||
|
std::cout <<"Sound Error: "<<e.what()<< std::endl;
|
||||||
|
}
|
||||||
|
return track;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
MWBase::SoundPtr SoundManager::playSound(const std::string& soundId, float volume, float pitch, int mode)
|
MWBase::SoundPtr SoundManager::playSound(const std::string& soundId, float volume, float pitch, int mode)
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,8 +22,6 @@ namespace MWSound
|
||||||
struct Sound_Decoder;
|
struct Sound_Decoder;
|
||||||
class Sound;
|
class Sound;
|
||||||
|
|
||||||
typedef boost::shared_ptr<Sound_Decoder> DecoderPtr;
|
|
||||||
|
|
||||||
enum Environment {
|
enum Environment {
|
||||||
Env_Normal,
|
Env_Normal,
|
||||||
Env_Underwater
|
Env_Underwater
|
||||||
|
@ -105,6 +103,9 @@ namespace MWSound
|
||||||
virtual void stopSay(MWWorld::Ptr reference=MWWorld::Ptr());
|
virtual void stopSay(MWWorld::Ptr reference=MWWorld::Ptr());
|
||||||
///< Stop an actor speaking
|
///< Stop an actor speaking
|
||||||
|
|
||||||
|
virtual MWBase::SoundPtr playTrack(const DecoderPtr& decoder);
|
||||||
|
///< Play a 2D audio track, using a custom decoder
|
||||||
|
|
||||||
virtual MWBase::SoundPtr playSound(const std::string& soundId, float volume, float pitch, int mode=Play_Normal);
|
virtual MWBase::SoundPtr playSound(const std::string& soundId, float volume, float pitch, int mode=Play_Normal);
|
||||||
///< Play a sound, independently of 3D-position
|
///< Play a sound, independently of 3D-position
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue