Skip to content

Commit cb8ff8e

Browse files
authored
Fix the issue where audio playback throws an error in HarmonyOS Next (#19090)
1 parent 9d1f096 commit cb8ff8e

2 files changed

Lines changed: 14 additions & 5 deletions

File tree

native/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3678,6 +3678,7 @@ if(OPENHARMONY)
36783678
libohgame_controller.z.so
36793679
libz.so
36803680
librawfile.z.so
3681+
libdeviceinfo_ndk.z.so
36813682
libohsensor.so
36823683
${CC_EXTERNAL_LIBS}
36833684
)

native/cocos/audio/openharmony/PcmAudioService.cpp

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ THE SOFTWARE.
2828
#include "audio/openharmony/PcmAudioService.h"
2929
#include "audio/android/AudioMixerController.h"
3030
#include "audio/android/cutils/log.h"
31+
#include <deviceinfo.h>
3132

3233
namespace cc {
3334

@@ -104,18 +105,25 @@ bool PcmAudioService::init(AudioMixerController *controller, int numChannels, in
104105
OH_AudioStreamBuilder_SetRendererInfo(_builder, AUDIOSTREAM_USAGE_GAME);
105106

106107
OH_AudioRenderer_Callbacks callbacks;
107-
callbacks.OH_AudioRenderer_OnWriteData = nullptr;
108+
static int sdkApi = OH_GetSdkApiVersion();
109+
if(sdkApi >= 21) {
110+
callbacks.OH_AudioRenderer_OnWriteData = nullptr;
111+
} else {
112+
callbacks.OH_AudioRenderer_OnWriteData = reinterpret_cast<int32_t (*)(OH_AudioRenderer*,void* ,void* ,int32_t)>(AudioRendererOnWriteData);
113+
}
108114
callbacks.OH_AudioRenderer_OnInterruptEvent = AudioRendererOnInterrupt;
109115
callbacks.OH_AudioRenderer_OnError = nullptr;
110116
callbacks.OH_AudioRenderer_OnStreamEvent = nullptr;
111117
ret = OH_AudioStreamBuilder_SetRendererCallback(_builder, callbacks, this);
112118
if (ret != AUDIOSTREAM_SUCCESS) {
113119
return false;
114120
}
115-
116-
ret = OH_AudioStreamBuilder_SetRendererWriteDataCallback(_builder, AudioRendererOnWriteData, this);
117-
if (ret != AUDIOSTREAM_SUCCESS) {
118-
return false;
121+
122+
if(sdkApi >= 21) {
123+
ret = OH_AudioStreamBuilder_SetRendererWriteDataCallback(_builder, AudioRendererOnWriteData, this);
124+
if (ret != AUDIOSTREAM_SUCCESS) {
125+
return false;
126+
}
119127
}
120128

121129
ret = OH_AudioStreamBuilder_GenerateRenderer(_builder, &_audioRenderer);

0 commit comments

Comments
 (0)