mirror of
https://port.numenaute.org/aleajactaest/khanat-opennel-code.git
synced 2024-12-20 16:08:44 +00:00
Fixed: #1459 Done
This commit is contained in:
parent
6b88c8dd69
commit
2825b8b402
9 changed files with 39 additions and 17 deletions
|
@ -39,9 +39,6 @@
|
|||
// Current version is 2, Ryzom Live uses 1
|
||||
// Provided to allow compatibility with old binary files
|
||||
#define NLSOUND_SHEET_VERSION_BUILT 1
|
||||
#define NLSOUND_SHEET_V1_DEFAULT_SOUND_GROUP_CONTROLLER "effects"
|
||||
#define NLSOUND_SHEET_V1_DEFAULT_SOUND_MUSIC_GROUP_CONTROLLER "music"
|
||||
#define NLSOUND_SHEET_V1_DEFAULT_SOUND_STREAM_GROUP_CONTROLLER "dialog"
|
||||
|
||||
namespace NLLIGO {
|
||||
class CLigoConfig;
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
// STL includes
|
||||
|
||||
// NeL includes
|
||||
#include <nel/misc/singleton.h>
|
||||
|
||||
// Project includes
|
||||
#include <nel/sound/group_controller.h>
|
||||
|
@ -44,7 +45,7 @@ namespace NLSOUND {
|
|||
* \author Jan Boon (Kaetemi)
|
||||
* CGroupControllerRoot
|
||||
*/
|
||||
class CGroupControllerRoot : public CGroupController
|
||||
class CGroupControllerRoot : public CGroupController, public NLMISC::CManualSingleton<CGroupControllerRoot>
|
||||
{
|
||||
public:
|
||||
CGroupControllerRoot();
|
||||
|
|
|
@ -35,6 +35,10 @@
|
|||
|
||||
// Project includes
|
||||
|
||||
#define NLSOUND_SHEET_V1_DEFAULT_SOUND_GROUP_CONTROLLER "effects"
|
||||
#define NLSOUND_SHEET_V1_DEFAULT_SOUND_MUSIC_GROUP_CONTROLLER "music"
|
||||
#define NLSOUND_SHEET_V1_DEFAULT_SOUND_STREAM_GROUP_CONTROLLER "dialog"
|
||||
|
||||
namespace NLSOUND {
|
||||
|
||||
/**
|
||||
|
@ -45,6 +49,7 @@ namespace NLSOUND {
|
|||
*/
|
||||
class UGroupController
|
||||
{
|
||||
public:
|
||||
virtual void setDevGain(float gain) = 0;
|
||||
virtual float getDevGain() = 0;
|
||||
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
#include <nel/sound/u_audio_mixer.h>
|
||||
#include <nel/sound/u_listener.h>
|
||||
#include <nel/sound/u_stream_source.h>
|
||||
#include <nel/sound/u_group_controller.h>
|
||||
#include <nel/misc/hierarchical_timer.h>
|
||||
|
||||
// Project includes
|
||||
|
@ -325,6 +326,7 @@ static ov_callbacks OV_CALLBACKS_NLMISC_STREAM = {
|
|||
static UAudioMixer *s_AudioMixer = NULL;
|
||||
static UStreamSource *s_StreamSource = NULL;
|
||||
static IAudioDecoder *s_AudioDecoder = NULL;
|
||||
static UGroupController *s_GroupController = NULL;
|
||||
|
||||
static void initSample()
|
||||
{
|
||||
|
@ -368,6 +370,8 @@ static void initSample()
|
|||
s_AudioDecoder = IAudioDecoder::createAudioDecoder(sample, false, false);
|
||||
s_StreamSource->setFormat(s_AudioDecoder->getChannels(), s_AudioDecoder->getBitsPerSample(), (uint32)s_AudioDecoder->getSamplesPerSec());
|
||||
s_StreamSource->setPitch(2.0f);
|
||||
|
||||
s_GroupController = s_AudioMixer->getGroupController("dialog");
|
||||
}
|
||||
|
||||
//CMutex *s_Mutex = NULL;
|
||||
|
@ -405,13 +409,23 @@ static void runSample()
|
|||
|
||||
s_StreamSource->play();
|
||||
|
||||
printf("Press ANY key to exit\n");
|
||||
printf("Change volume with - and +\n");
|
||||
printf("Press ANY other key to exit\n");
|
||||
while (!s_AudioDecoder->isMusicEnded())
|
||||
{
|
||||
if (_kbhit())
|
||||
{
|
||||
_getch();
|
||||
return;
|
||||
switch (_getch())
|
||||
{
|
||||
case '+':
|
||||
s_GroupController->setUserGain(s_GroupController->getUserGain() + 0.1f);
|
||||
break;
|
||||
case '-':
|
||||
s_GroupController->setUserGain(s_GroupController->getUserGain() - 0.1f);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
bufferMore(bytes);
|
||||
s_AudioMixer->update();
|
||||
|
@ -440,6 +454,7 @@ static void runSample()
|
|||
static void releaseSample()
|
||||
{
|
||||
//NLMISC::CHTimer::clear();
|
||||
s_GroupController = NULL;
|
||||
delete s_AudioDecoder; s_AudioDecoder = NULL;
|
||||
delete s_StreamSource; s_StreamSource = NULL;
|
||||
delete s_AudioMixer; s_AudioMixer = NULL;
|
||||
|
|
|
@ -62,6 +62,8 @@ CGroupController::~CGroupController()
|
|||
|
||||
void CGroupController::addSource(CSourceCommon *source)
|
||||
{
|
||||
nlassert(this);
|
||||
|
||||
m_Sources.insert(source);
|
||||
increaseSources();
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#include "nel/georges/u_form_elm.h"
|
||||
|
||||
#if NLSOUND_SHEET_VERSION_BUILT < 2
|
||||
# include "nel/sound/audio_mixer_user.h"
|
||||
# include "nel/sound/group_controller_root.h"
|
||||
#endif
|
||||
|
||||
using namespace std;
|
||||
|
@ -76,7 +76,7 @@ void CMusicSound::importForm(const std::string& filename, NLGEORGES::UFormElm&
|
|||
root.getValueByName(_TimeBeforeCanReplay, ".SoundType.TimeBeforeCanReplay");
|
||||
|
||||
#if NLSOUND_SHEET_VERSION_BUILT < 2
|
||||
_GroupController = static_cast<CGroupController *>(CAudioMixerUser::instance()->getGroupController(NLSOUND_SHEET_V1_DEFAULT_SOUND_MUSIC_GROUP_CONTROLLER));
|
||||
_GroupController = CGroupControllerRoot::getInstance()->getGroupController(NLSOUND_SHEET_V1_DEFAULT_SOUND_MUSIC_GROUP_CONTROLLER);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
@ -106,7 +106,7 @@ void CMusicSound::serial(NLMISC::IStream &s)
|
|||
s.serial(_MinimumPlayTime, _TimeBeforeCanReplay);
|
||||
|
||||
#if NLSOUND_SHEET_VERSION_BUILT < 2
|
||||
if (s.isReading()) _GroupController = static_cast<CGroupController *>(CAudioMixerUser::instance()->getGroupController(NLSOUND_SHEET_V1_DEFAULT_SOUND_MUSIC_GROUP_CONTROLLER));
|
||||
if (s.isReading()) _GroupController = CGroupControllerRoot::getInstance()->getGroupController(NLSOUND_SHEET_V1_DEFAULT_SOUND_MUSIC_GROUP_CONTROLLER);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include "nel/sound/stream_sound.h"
|
||||
|
||||
#include "nel/sound/group_controller.h"
|
||||
#include "nel/sound/group_controller_root.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace NLMISC;
|
||||
|
@ -137,7 +138,7 @@ void CSound::serial(NLMISC::IStream &s)
|
|||
s.serial(name);
|
||||
}
|
||||
|
||||
nlassert(CAudioMixerUser::instance()); // not sure
|
||||
nlassert(CGroupControllerRoot::getInstance()); // not sure
|
||||
#if NLSOUND_SHEET_VERSION_BUILT < 2
|
||||
if (s.isReading()) _GroupController = static_cast<CGroupController *>(CAudioMixerUser::instance()->getGroupController(NLSOUND_SHEET_V1_DEFAULT_SOUND_GROUP_CONTROLLER));
|
||||
#else
|
||||
|
@ -245,12 +246,13 @@ void CSound::importForm(const std::string& filename, NLGEORGES::UFormElm& roo
|
|||
_Priority = MidPri;
|
||||
}
|
||||
|
||||
nlassert(CGroupControllerRoot::getInstance()); // not sure
|
||||
#if NLSOUND_SHEET_VERSION_BUILT < 2
|
||||
_GroupController = static_cast<CGroupController *>(CAudioMixerUser::instance()->getGroupController(NLSOUND_SHEET_V1_DEFAULT_SOUND_GROUP_CONTROLLER));
|
||||
_GroupController = CGroupControllerRoot::getInstance()->getGroupController(NLSOUND_SHEET_V1_DEFAULT_SOUND_GROUP_CONTROLLER);
|
||||
#else
|
||||
std::string groupControllerPath;
|
||||
root.getValueByName(groupControllerPath, ".GroupControllerPath");
|
||||
_GroupController = static_cast<CGroupController *>(CAudioMixerUser::instance()->getGroupController(groupControllerPath));
|
||||
_GroupController = CGroupControllerRoot::getInstance()->getGroupController(groupControllerPath);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@ CSourceCommon::CSourceCommon(TSoundId id, bool spawn, TSpawnEndCallback cb, void
|
|||
_GroupController(groupController ? groupController : id->getGroupController())
|
||||
{
|
||||
CAudioMixerUser::instance()->addSource(this);
|
||||
groupController->addSource(this);
|
||||
_GroupController->addSource(this);
|
||||
|
||||
// get a local copy of the sound parameter
|
||||
_InitialGain = _Gain = id->getGain();
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
#include "nel/sound/stream_sound.h"
|
||||
|
||||
#if NLSOUND_SHEET_VERSION_BUILT < 2
|
||||
# include "nel/sound/audio_mixer_user.h"
|
||||
# include "nel/sound/group_controller_root.h"
|
||||
#endif
|
||||
|
||||
namespace NLSOUND {
|
||||
|
@ -57,7 +57,7 @@ void CStreamSound::importForm(const std::string &filename, NLGEORGES::UFormElm &
|
|||
root.getValueByName(m_Alpha, ".SoundType.Alpha");
|
||||
|
||||
#if NLSOUND_SHEET_VERSION_BUILT < 2
|
||||
_GroupController = static_cast<CGroupController *>(CAudioMixerUser::instance()->getGroupController(NLSOUND_SHEET_V1_DEFAULT_SOUND_STREAM_GROUP_CONTROLLER));
|
||||
_GroupController = CGroupControllerRoot::getInstance()->getGroupController(NLSOUND_SHEET_V1_DEFAULT_SOUND_STREAM_GROUP_CONTROLLER);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
@ -70,7 +70,7 @@ void CStreamSound::serial(NLMISC::IStream &s)
|
|||
s.serial(m_Alpha);
|
||||
|
||||
#if NLSOUND_SHEET_VERSION_BUILT < 2
|
||||
if (s.isReading()) _GroupController = static_cast<CGroupController *>(CAudioMixerUser::instance()->getGroupController(NLSOUND_SHEET_V1_DEFAULT_SOUND_STREAM_GROUP_CONTROLLER));
|
||||
if (s.isReading()) _GroupController = CGroupControllerRoot::getInstance()->getGroupController(NLSOUND_SHEET_V1_DEFAULT_SOUND_STREAM_GROUP_CONTROLLER);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue