Skip to content

Refactor audio engine module, replace backend with OpenAL for android platform. #18958

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 24 additions & 26 deletions cocos/audio/AudioEngine.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/****************************************************************************
Copyright (c) 2014-2016 Chukong Technologies Inc.
Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.

Copyright (c) 2018 x-studio365 @HALX99.
http://www.cocos2d-x.org

Permission is hereby granted, free of charge, to any person obtaining a copy
Expand Down Expand Up @@ -32,11 +32,11 @@
#include "base/ccUtils.h"

#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
#include "audio/android/AudioEngine-inl.h"
#include "audio/android/AudioEngineImpl.h"
#elif CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_MAC
#include "audio/apple/AudioEngine-inl.h"
#include "audio/apple/AudioEngineImpl.h"
#elif CC_TARGET_PLATFORM == CC_PLATFORM_WIN32
#include "audio/win32/AudioEngine-win32.h"
#include "audio/win32/AudioEngineImpl.h"
#elif CC_TARGET_PLATFORM == CC_PLATFORM_WINRT
#include "audio/winrt/AudioEngine-winrt.h"
#elif CC_TARGET_PLATFORM == CC_PLATFORM_LINUX
Expand All @@ -58,12 +58,12 @@ const int AudioEngine::INVALID_AUDIO_ID = -1;
const float AudioEngine::TIME_UNKNOWN = -1.0f;

//audio file path,audio IDs
std::unordered_map<std::string,std::list<int>> AudioEngine::_audioPathIDMap;
std::unordered_map<std::string,std::list<uintptr_t>> AudioEngine::_audioPathIDMap;
//profileName,ProfileHelper
std::unordered_map<std::string, AudioEngine::ProfileHelper> AudioEngine::_audioPathProfileHelperMap;
unsigned int AudioEngine::_maxInstances = MAX_AUDIOINSTANCES;
AudioEngine::ProfileHelper* AudioEngine::_defaultProfileHelper = nullptr;
std::unordered_map<int, AudioEngine::AudioInfo> AudioEngine::_audioIDInfoMap;
std::unordered_map<uintptr_t, AudioEngine::AudioInfo> AudioEngine::_audioIDInfoMap;
AudioEngineImpl* AudioEngine::_audioEngineImpl = nullptr;

AudioEngine::AudioEngineThreadPool* AudioEngine::s_threadPool = nullptr;
Expand Down Expand Up @@ -177,19 +177,17 @@ bool AudioEngine::lazyInit()
}
}

#if (CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID)
if (_audioEngineImpl && s_threadPool == nullptr)
{
s_threadPool = new (std::nothrow) AudioEngineThreadPool();
}
#endif

return true;
}

int AudioEngine::play2d(const std::string& filePath, bool loop, float volume, const AudioProfile *profile)
uintptr_t AudioEngine::play2d(const std::string& filePath, bool loop, float volume, const AudioProfile *profile)
{
int ret = AudioEngine::INVALID_AUDIO_ID;
uintptr_t ret = AudioEngine::INVALID_AUDIO_ID;

do {
if (!isEnabled())
Expand Down Expand Up @@ -260,7 +258,7 @@ int AudioEngine::play2d(const std::string& filePath, bool loop, float volume, co
return ret;
}

void AudioEngine::setLoop(int audioID, bool loop)
void AudioEngine::setLoop(uintptr_t audioID, bool loop)
{
auto it = _audioIDInfoMap.find(audioID);
if (it != _audioIDInfoMap.end() && it->second.loop != loop){
Expand All @@ -269,7 +267,7 @@ void AudioEngine::setLoop(int audioID, bool loop)
}
}

void AudioEngine::setVolume(int audioID, float volume)
void AudioEngine::setVolume(uintptr_t audioID, float volume)
{
auto it = _audioIDInfoMap.find(audioID);
if (it != _audioIDInfoMap.end()){
Expand All @@ -287,7 +285,7 @@ void AudioEngine::setVolume(int audioID, float volume)
}
}

void AudioEngine::pause(int audioID)
void AudioEngine::pause(uintptr_t audioID)
{
auto it = _audioIDInfoMap.find(audioID);
if (it != _audioIDInfoMap.end() && it->second.state == AudioState::PLAYING){
Expand All @@ -309,7 +307,7 @@ void AudioEngine::pauseAll()
}
}

void AudioEngine::resume(int audioID)
void AudioEngine::resume(uintptr_t audioID)
{
auto it = _audioIDInfoMap.find(audioID);
if (it != _audioIDInfoMap.end() && it->second.state == AudioState::PAUSED){
Expand All @@ -331,7 +329,7 @@ void AudioEngine::resumeAll()
}
}

void AudioEngine::stop(int audioID)
void AudioEngine::stop(uintptr_t audioID)
{
auto it = _audioIDInfoMap.find(audioID);
if (it != _audioIDInfoMap.end()){
Expand All @@ -341,7 +339,7 @@ void AudioEngine::stop(int audioID)
}
}

void AudioEngine::remove(int audioID)
void AudioEngine::remove(uintptr_t audioID)
{
auto it = _audioIDInfoMap.find(audioID);
if (it != _audioIDInfoMap.end()){
Expand Down Expand Up @@ -381,9 +379,9 @@ void AudioEngine::uncache(const std::string &filePath)
//@Note: For safely iterating elements from the audioID list, we need to copy the list
// since 'AudioEngine::remove' may be invoked in '_audioEngineImpl->stop' synchronously.
// If this happens, it will break the iteration, and crash will appear on some devices.
std::list<int> copiedIDs(audioIDsIter->second);
std::list<uintptr_t> copiedIDs(audioIDsIter->second);

for (int audioID : copiedIDs)
for (uintptr_t audioID : copiedIDs)
{
_audioEngineImpl->stop(audioID);

Expand Down Expand Up @@ -415,7 +413,7 @@ void AudioEngine::uncacheAll()
_audioEngineImpl->uncacheAll();
}

float AudioEngine::getDuration(int audioID)
float AudioEngine::getDuration(uintptr_t audioID)
{
auto it = _audioIDInfoMap.find(audioID);
if (it != _audioIDInfoMap.end() && it->second.state != AudioState::INITIALIZING)
Expand All @@ -430,7 +428,7 @@ float AudioEngine::getDuration(int audioID)
return TIME_UNKNOWN;
}

bool AudioEngine::setCurrentTime(int audioID, float time)
bool AudioEngine::setCurrentTime(uintptr_t audioID, float time)
{
auto it = _audioIDInfoMap.find(audioID);
if (it != _audioIDInfoMap.end() && it->second.state != AudioState::INITIALIZING) {
Expand All @@ -440,7 +438,7 @@ bool AudioEngine::setCurrentTime(int audioID, float time)
return false;
}

float AudioEngine::getCurrentTime(int audioID)
float AudioEngine::getCurrentTime(uintptr_t audioID)
{
auto it = _audioIDInfoMap.find(audioID);
if (it != _audioIDInfoMap.end() && it->second.state != AudioState::INITIALIZING) {
Expand All @@ -449,7 +447,7 @@ float AudioEngine::getCurrentTime(int audioID)
return 0.0f;
}

void AudioEngine::setFinishCallback(int audioID, const std::function<void (int, const std::string &)> &callback)
void AudioEngine::setFinishCallback(uintptr_t audioID, const std::function<void (uintptr_t, const std::string &)> &callback)
{
auto it = _audioIDInfoMap.find(audioID);
if (it != _audioIDInfoMap.end()){
Expand All @@ -467,7 +465,7 @@ bool AudioEngine::setMaxAudioInstance(int maxInstances)
return false;
}

bool AudioEngine::isLoop(int audioID)
bool AudioEngine::isLoop(uintptr_t audioID)
{
auto tmpIterator = _audioIDInfoMap.find(audioID);
if (tmpIterator != _audioIDInfoMap.end())
Expand All @@ -479,7 +477,7 @@ bool AudioEngine::isLoop(int audioID)
return false;
}

float AudioEngine::getVolume(int audioID)
float AudioEngine::getVolume(uintptr_t audioID)
{
auto tmpIterator = _audioIDInfoMap.find(audioID);
if (tmpIterator != _audioIDInfoMap.end())
Expand All @@ -491,7 +489,7 @@ float AudioEngine::getVolume(int audioID)
return 0.0f;
}

AudioEngine::AudioState AudioEngine::getState(int audioID)
AudioEngine::AudioState AudioEngine::getState(uintptr_t audioID)
{
auto tmpIterator = _audioIDInfoMap.find(audioID);
if (tmpIterator != _audioIDInfoMap.end())
Expand All @@ -502,7 +500,7 @@ AudioEngine::AudioState AudioEngine::getState(int audioID)
return AudioState::ERROR;
}

AudioProfile* AudioEngine::getProfile(int audioID)
AudioProfile* AudioEngine::getProfile(uintptr_t audioID)
{
auto it = _audioIDInfoMap.find(audioID);
if (it != _audioIDInfoMap.end())
Expand Down
12 changes: 6 additions & 6 deletions cocos/audio/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ if(WINDOWS)
audio/win32/AudioPlayer.h
audio/win32/AudioDecoderOgg.h
audio/win32/AudioMacros.h
audio/win32/AudioEngine-win32.h
audio/win32/AudioEngineImpl.h
audio/win32/AudioDecoderMp3.h
audio/win32/AudioCache.h
)
Expand All @@ -21,7 +21,7 @@ if(WINDOWS)
audio/win32/SimpleAudioEngine.cpp
audio/win32/MciPlayer.cpp
audio/win32/MciPlayer.h
audio/win32/AudioEngine-win32.cpp
audio/win32/AudioEngineImpl.cpp
audio/win32/AudioCache.cpp
audio/win32/AudioPlayer.cpp
audio/win32/AudioDecoder.cpp
Expand Down Expand Up @@ -72,7 +72,7 @@ elseif(ANDROID)
audio/android/jni/cddandroidAndroidJavaEngine.h
audio/android/AudioMixerController.h
audio/android/AudioResamplerCubic.h
audio/android/AudioEngine-inl.h
audio/android/AudioEngineImpl.h
audio/android/IVolumeProvider.h

)
Expand All @@ -81,7 +81,7 @@ elseif(ANDROID)
audio/android/cddSimpleAudioEngine.cpp
audio/android/ccdandroidUtils.cpp
audio/android/jni/cddandroidAndroidJavaEngine.cpp
audio/android/AudioEngine-inl.cpp
audio/android/AudioEngineImpl.cpp
audio/android/CCThreadPool.cpp
audio/android/AssetFd.cpp
audio/android/AudioDecoder.cpp
Expand Down Expand Up @@ -127,12 +127,12 @@ elseif(APPLE)
audio/apple/AudioPlayer.h
audio/apple/AudioMacros.h
audio/apple/AudioCache.h
audio/apple/AudioEngine-inl.h
audio/apple/AudioEngineImpl.h
)
set(COCOS_AUDIO_PLATFORM_SRC
audio/apple/AudioCache.mm
audio/apple/AudioDecoder.mm
audio/apple/AudioEngine-inl.mm
audio/apple/AudioEngineImpl.mm
audio/apple/AudioPlayer.mm
)
# split it in _C and non C
Expand Down
45 changes: 15 additions & 30 deletions cocos/audio/android/Android.mk
Original file line number Diff line number Diff line change
Expand Up @@ -7,33 +7,15 @@ LOCAL_MODULE := audioengine_static

LOCAL_MODULE_FILENAME := libaudioengine

LOCAL_SRC_FILES := AudioEngine-inl.cpp \
LOCAL_SRC_FILES := AudioEngineImpl.cpp \
../AudioEngine.cpp \
CCThreadPool.cpp \
AssetFd.cpp \
AudioDecoder.cpp \
AudioDecoderProvider.cpp \
AudioDecoderSLES.cpp \
AudioDecoderOgg.cpp \
AudioDecoderMp3.cpp \
AudioDecoderWav.cpp \
AudioPlayerProvider.cpp \
AudioResampler.cpp \
AudioResamplerCubic.cpp \
PcmBufferProvider.cpp \
PcmAudioPlayer.cpp \
UrlAudioPlayer.cpp \
PcmData.cpp \
AudioMixerController.cpp \
AudioMixer.cpp \
PcmAudioService.cpp \
Track.cpp \
audio_utils/format.c \
audio_utils/minifloat.cpp \
audio_utils/primitives.c \
utils/Utils.cpp \
mp3reader.cpp \
tinysndfile.cpp
AudioCache.cpp \
AudioDecoderManager.cpp \
AudioPlayer.cpp \
utils/Utils.cpp


LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../include
Expand All @@ -43,12 +25,14 @@ LOCAL_EXPORT_LDLIBS := -lOpenSLES
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../include \
$(LOCAL_PATH)/../.. \
$(LOCAL_PATH)/../../platform/android \
$(LOCAL_PATH)/../../../external/android-specific \
$(LOCAL_PATH)/../../../external/android-specific/tremolo

LOCAL_STATIC_LIBRARIES += libvorbisidec libpvmp3dec
$(LOCAL_PATH)/../../../external/android-specific/OggDecoder/include \
$(LOCAL_PATH)/../../../external/android-specific/MP3Decoder/include \
$(LOCAL_PATH)/../../../external/android-specific/OpenalSoft/include

LOCAL_SHARED_LIBRARIES += mpg123_shared openal_shared
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_ogg_static cocos_vorbis_static cocos_vorbisfile_static
include $(BUILD_STATIC_LIBRARY)

#SimpleAudioEngine
include $(CLEAR_VARS)

Expand All @@ -69,5 +53,6 @@ LOCAL_C_INCLUDES := $(LOCAL_PATH)/../include \

include $(BUILD_STATIC_LIBRARY)

$(call import-module,android-specific/tremolo)
$(call import-module,android-specific/pvmp3dec)
$(call import-module,android-specific/OggDecoder/prebuilt)
$(call import-module,android-specific/MP3Decoder/prebuilt)
$(call import-module,android-specific/OpenalSoft/prebuilt)
80 changes: 0 additions & 80 deletions cocos/audio/android/AudioBufferProvider.h

This file was deleted.

Loading