@@ -45,20 +45,14 @@ namespace ax
4545
4646float AudioPlayerSettings::distanceScale = 1 .f;
4747
48- const int AudioEngine::INVALID_AUDIO_ID = -1 ;
49- const float AudioEngine::TIME_UNKNOWN = -1 .0f ;
50-
5148// audio file path,audio IDs
52- tlx::string_map<std::list<AUDIO_ID >> AudioEngine::_audioPathIDMap;
49+ tlx::string_map<std::list<AudioId >> AudioEngine::_audioPathIDMap;
5350// profileName,ProfileHelper
5451tlx::string_map<AudioEngine::ProfileHelper> AudioEngine::_audioPathProfileHelperMap;
55- unsigned int AudioEngine::_maxInstances = MAX_AUDIOINSTANCES ;
52+ AudioEngineSettings AudioEngine::_settings ;
5653AudioEngine::ProfileHelper* AudioEngine::_defaultProfileHelper = nullptr ;
57- std::unordered_map<AUDIO_ID , AudioEngine::AudioInfo> AudioEngine::_audioIDInfoMap;
54+ std::unordered_map<AudioId , AudioEngine::AudioInfo> AudioEngine::_audioIDInfoMap;
5855AudioEngineImpl* AudioEngine::_audioEngineImpl = nullptr ;
59-
60- bool AudioEngine::_isEnabled = true ;
61-
6256AudioEngine::AudioInfo::AudioInfo ()
6357 : profileHelper(nullptr ), volume(1 .0f ), loop(false ), duration(TIME_UNKNOWN ), state(AudioState::INITIALIZING )
6458{}
@@ -71,8 +65,7 @@ void AudioEngine::end()
7165 // fix #127
7266 uncacheAll ();
7367
74- delete _audioEngineImpl;
75- _audioEngineImpl = nullptr ;
68+ AX_SAFE_RELEASE_NULL (_audioEngineImpl);
7669
7770 delete _defaultProfileHelper;
7871 _defaultProfileHelper = nullptr ;
@@ -83,27 +76,24 @@ bool AudioEngine::lazyInit()
8376 if (_audioEngineImpl == nullptr )
8477 {
8578 _audioEngineImpl = new AudioEngineImpl ();
86- if (!_audioEngineImpl->init ())
79+ if (!_audioEngineImpl->init (_settings ))
8780 {
88- delete _audioEngineImpl;
89- _audioEngineImpl = nullptr ;
81+ AX_SAFE_RELEASE (_audioEngineImpl);
9082 return false ;
9183 }
9284 }
9385
9486 return true ;
9587}
9688
97- AUDIO_ID AudioEngine::play2d (std::string_view filePath, bool loop, float volume, const AudioProfile* profile)
89+ AudioId AudioEngine::play2d (std::string_view filePath, bool loop, float volume, const AudioProfile* profile)
9890{
9991 return play2d (filePath, ax::AudioPlayerSettings{loop, volume, 0 .0f }, profile);
10092}
10193
102- AUDIO_ID AudioEngine::play2d (std::string_view filePath,
103- const AudioPlayerSettings& settings,
104- const AudioProfile* profile)
94+ AudioId AudioEngine::play2d (std::string_view filePath, const AudioPlayerSettings& settings, const AudioProfile* profile)
10595{
106- AUDIO_ID ret = AudioEngine::INVALID_AUDIO_ID ;
96+ AudioId ret = AudioEngine::INVALID_AUDIO_ID ;
10797
10898 do
10999 {
@@ -130,7 +120,7 @@ AUDIO_ID AudioEngine::play2d(std::string_view filePath,
130120 profileHelper->profile = *profile;
131121 }
132122
133- if (_audioIDInfoMap.size () >= _maxInstances )
123+ if (_audioIDInfoMap.size () >= _settings. maxInstances )
134124 {
135125 AXLOGE (" Fail to play {} cause by limited max instance of AudioEngine" , filePath);
136126 break ;
@@ -197,11 +187,9 @@ int AudioEngine::play3d(std::string_view filePath,
197187 return play3d (filePath, ax::AudioPlayerSettings{loop, volume, 0 .0f , position});
198188}
199189
200- AUDIO_ID AudioEngine::play3d (std::string_view filePath,
201- const AudioPlayerSettings& settings,
202- const AudioProfile* profile)
190+ AudioId AudioEngine::play3d (std::string_view filePath, const AudioPlayerSettings& settings, const AudioProfile* profile)
203191{
204- AUDIO_ID ret = AudioEngine::INVALID_AUDIO_ID ;
192+ AudioId ret = AudioEngine::INVALID_AUDIO_ID ;
205193
206194 do
207195 {
@@ -228,7 +216,7 @@ AUDIO_ID AudioEngine::play3d(std::string_view filePath,
228216 profileHelper->profile = *profile;
229217 }
230218
231- if (_audioIDInfoMap.size () >= _maxInstances )
219+ if (_audioIDInfoMap.size () >= _settings. maxInstances )
232220 {
233221 AXLOGE (" Fail to play {} cause by limited max instance of AudioEngine" , filePath);
234222 break ;
@@ -287,7 +275,7 @@ AUDIO_ID AudioEngine::play3d(std::string_view filePath,
287275 return ret;
288276}
289277
290- void AudioEngine::setLoop (AUDIO_ID audioID, bool loop)
278+ void AudioEngine::setLoop (AudioId audioID, bool loop)
291279{
292280 auto it = _audioIDInfoMap.find (audioID);
293281 if (it != _audioIDInfoMap.end () && it->second .loop != loop)
@@ -297,7 +285,7 @@ void AudioEngine::setLoop(AUDIO_ID audioID, bool loop)
297285 }
298286}
299287
300- void AudioEngine::setVolume (AUDIO_ID audioID, float volume)
288+ void AudioEngine::setVolume (AudioId audioID, float volume)
301289{
302290 auto it = _audioIDInfoMap.find (audioID);
303291 if (it != _audioIDInfoMap.end ())
@@ -312,7 +300,7 @@ void AudioEngine::setVolume(AUDIO_ID audioID, float volume)
312300 }
313301}
314302
315- void AudioEngine::setPitch (AUDIO_ID audioID, float pitch)
303+ void AudioEngine::setPitch (AudioId audioID, float pitch)
316304{
317305 auto it = _audioIDInfoMap.find (audioID);
318306 if (it != _audioIDInfoMap.end ())
@@ -327,7 +315,7 @@ void AudioEngine::setPitch(AUDIO_ID audioID, float pitch)
327315 }
328316}
329317
330- float AudioEngine::getPitch (AUDIO_ID audioID)
318+ float AudioEngine::getPitch (AudioId audioID)
331319{
332320 auto tmpIterator = _audioIDInfoMap.find (audioID);
333321 if (tmpIterator != _audioIDInfoMap.end ())
@@ -339,7 +327,7 @@ float AudioEngine::getPitch(AUDIO_ID audioID)
339327 return 0 .0f ;
340328}
341329
342- void AudioEngine::pause (AUDIO_ID audioID)
330+ void AudioEngine::pause (AudioId audioID)
343331{
344332 auto it = _audioIDInfoMap.find (audioID);
345333 if (it != _audioIDInfoMap.end () && it->second .state == AudioState::PLAYING )
@@ -362,7 +350,7 @@ void AudioEngine::pauseAll()
362350 }
363351}
364352
365- void AudioEngine::resume (AUDIO_ID audioID)
353+ void AudioEngine::resume (AudioId audioID)
366354{
367355 auto it = _audioIDInfoMap.find (audioID);
368356 if (it != _audioIDInfoMap.end () && it->second .state == AudioState::PAUSED )
@@ -385,7 +373,7 @@ void AudioEngine::resumeAll()
385373 }
386374}
387375
388- void AudioEngine::stop (AUDIO_ID audioID)
376+ void AudioEngine::stop (AudioId audioID)
389377{
390378 auto it = _audioIDInfoMap.find (audioID);
391379 if (it != _audioIDInfoMap.end ())
@@ -396,7 +384,7 @@ void AudioEngine::stop(AUDIO_ID audioID)
396384 }
397385}
398386
399- void AudioEngine::remove (AUDIO_ID audioID)
387+ void AudioEngine::remove (AudioId audioID)
400388{
401389 auto it = _audioIDInfoMap.find (audioID);
402390 if (it != _audioIDInfoMap.end ())
@@ -441,9 +429,9 @@ void AudioEngine::uncache(std::string_view filePath)
441429 // @Note: For safely iterating elements from the audioID list, we need to copy the list
442430 // since 'AudioEngine::remove' may be invoked in '_audioEngineImpl->stop' synchronously.
443431 // If this happens, it will break the iteration, and crash will appear on some devices.
444- std::list<AUDIO_ID > copiedIDs (audioIDsIter->second );
432+ std::list<AudioId > copiedIDs (audioIDsIter->second );
445433
446- for (AUDIO_ID audioID : copiedIDs)
434+ for (AudioId audioID : copiedIDs)
447435 {
448436 _audioEngineImpl->stop (audioID);
449437
@@ -476,7 +464,7 @@ void AudioEngine::uncacheAll()
476464 _audioEngineImpl->uncacheAll ();
477465}
478466
479- float AudioEngine::getDuration (AUDIO_ID audioID)
467+ float AudioEngine::getDuration (AudioId audioID)
480468{
481469 auto it = _audioIDInfoMap.find (audioID);
482470 if (it != _audioIDInfoMap.end () && it->second .state != AudioState::INITIALIZING )
@@ -491,7 +479,7 @@ float AudioEngine::getDuration(AUDIO_ID audioID)
491479 return TIME_UNKNOWN ;
492480}
493481
494- bool AudioEngine::setCurrentTime (AUDIO_ID audioID, float time)
482+ bool AudioEngine::setCurrentTime (AudioId audioID, float time)
495483{
496484 auto it = _audioIDInfoMap.find (audioID);
497485 if (it != _audioIDInfoMap.end () && it->second .state != AudioState::INITIALIZING )
@@ -502,7 +490,7 @@ bool AudioEngine::setCurrentTime(AUDIO_ID audioID, float time)
502490 return false ;
503491}
504492
505- float AudioEngine::getCurrentTime (AUDIO_ID audioID)
493+ float AudioEngine::getCurrentTime (AudioId audioID)
506494{
507495 auto it = _audioIDInfoMap.find (audioID);
508496 if (it != _audioIDInfoMap.end () && it->second .state != AudioState::INITIALIZING )
@@ -512,7 +500,7 @@ float AudioEngine::getCurrentTime(AUDIO_ID audioID)
512500 return 0 .0f ;
513501}
514502
515- void AudioEngine::setFinishCallback (AUDIO_ID audioID, const std::function<void (AUDIO_ID , std::string_view)>& callback)
503+ void AudioEngine::setFinishCallback (AudioId audioID, const std::function<void (AudioId , std::string_view)>& callback)
516504{
517505 auto it = _audioIDInfoMap.find (audioID);
518506 if (it != _audioIDInfoMap.end ())
@@ -525,14 +513,14 @@ bool AudioEngine::setMaxAudioInstance(int maxInstances)
525513{
526514 if (maxInstances > 0 && maxInstances <= MAX_AUDIOINSTANCES )
527515 {
528- _maxInstances = maxInstances;
516+ _settings. maxInstances = maxInstances;
529517 return true ;
530518 }
531519
532520 return false ;
533521}
534522
535- bool AudioEngine::isLoop (AUDIO_ID audioID)
523+ bool AudioEngine::isLoop (AudioId audioID)
536524{
537525 auto tmpIterator = _audioIDInfoMap.find (audioID);
538526 if (tmpIterator != _audioIDInfoMap.end ())
@@ -544,7 +532,7 @@ bool AudioEngine::isLoop(AUDIO_ID audioID)
544532 return false ;
545533}
546534
547- float AudioEngine::getVolume (AUDIO_ID audioID)
535+ float AudioEngine::getVolume (AudioId audioID)
548536{
549537 auto tmpIterator = _audioIDInfoMap.find (audioID);
550538 if (tmpIterator != _audioIDInfoMap.end ())
@@ -556,7 +544,7 @@ float AudioEngine::getVolume(AUDIO_ID audioID)
556544 return 0 .0f ;
557545}
558546
559- AudioEngine::AudioState AudioEngine::getState (AUDIO_ID audioID)
547+ AudioEngine::AudioState AudioEngine::getState (AudioId audioID)
560548{
561549 auto tmpIterator = _audioIDInfoMap.find (audioID);
562550 if (tmpIterator != _audioIDInfoMap.end ())
@@ -567,7 +555,7 @@ AudioEngine::AudioState AudioEngine::getState(AUDIO_ID audioID)
567555 return AudioState::ERROR ;
568556}
569557
570- AudioProfile* AudioEngine::getProfile (AUDIO_ID audioID)
558+ AudioProfile* AudioEngine::getProfile (AudioId audioID)
571559{
572560 auto it = _audioIDInfoMap.find (audioID);
573561 if (it != _audioIDInfoMap.end ())
@@ -637,13 +625,13 @@ int AudioEngine::getPlayingAudioCount()
637625 return static_cast <int >(_audioIDInfoMap.size ());
638626}
639627
640- void AudioEngine::setEnabled (bool isEnabled )
628+ void AudioEngine::setEnabled (bool enabled )
641629{
642- if (_isEnabled != isEnabled )
630+ if (_settings. enabled != enabled )
643631 {
644- _isEnabled = isEnabled ;
632+ _settings. enabled = enabled ;
645633
646- if (!_isEnabled )
634+ if (!_settings. enabled )
647635 {
648636 stopAll ();
649637 }
@@ -652,7 +640,7 @@ void AudioEngine::setEnabled(bool isEnabled)
652640
653641bool AudioEngine::isEnabled ()
654642{
655- return _isEnabled ;
643+ return _settings. enabled ;
656644}
657645
658646void AudioEngine::setPan (int audioId, float value, float distance)
@@ -737,4 +725,20 @@ void AudioEngine::setReverbProperties(int audioId, const ReverbProperties* rever
737725
738726 return _audioEngineImpl->setReverbProperties (audioId, reverbProperties);
739727}
728+
729+ void AudioEngine::setHRTFEnabled (bool enabled)
730+ {
731+ #if AX_USE_ALSOFT
732+ if (_settings.hrtfEnabled == enabled)
733+ return ;
734+ if (_audioEngineImpl && _audioEngineImpl->setHRTFEnabled (enabled))
735+ _settings.hrtfEnabled = enabled;
736+ #endif
737+ }
738+
739+ bool AudioEngine::isHRTFEnabled ()
740+ {
741+ return _settings.hrtfEnabled ;
742+ }
743+
740744} // namespace ax
0 commit comments