音频工作组是一套通过标记来帮助系统识别应用内音频关键线程的接口,系统通过应用提供的关键音频线程以及工作组运行信息可以提升音频线程运行的稳定性。
以下各步骤示例为代码片段,可通过示例代码右下方链接获取完整示例。
开发者在使用OH_AudioWorkgroup的API前,需要先用OH_AudioManager_GetAudioResourceManager获取OH_AudioResourceManager实例。
#include <ohaudio/native_audio_resource_manager.h>
// ...
OH_AudioResourceManager *resMgr;
// ...
OH_AudioManager_GetAudioResourceManager(&resMgr); 开发者先使用OH_AudioResourceManager_CreateWorkgroup创建一个新的音频工作组,再使用OH_AudioWorkgroup_AddCurrentThread将关键线程加入音频工作组。
#include <chrono>
// ...
int32_t g_tokenId;
OH_AudioWorkgroup *grp = nullptr;
// ...
OH_AudioResourceManager_CreateWorkgroup(resMgr, "workgroup", &grp);
OH_AudioWorkgroup_AddCurrentThread(grp, &g_tokenId); 当音频工作组开始一个工作周期时,开发者可以通知系统任务的开始时间和预期完成时间。在音频工作组完成当前周期内的工作时,开发者应再次通知系统任务已结束。
constexpr static uint64_t intervalMs = 20;
bool threadShouldRun = true;
while (threadShouldRun) {
auto now = std::chrono::system_clock::now().time_since_epoch();
auto startTimeMs = std::chrono::duration_cast<std::chrono::milliseconds>(now).count();
OH_AudioWorkgroup_Start(grp, startTimeMs, startTimeMs + intervalMs);
// 此处为示例逻辑,实际开发中应根据业务需求控制线程运行周期。
threadShouldRun = false;
// 应用音频数据处理。
OH_AudioWorkgroup_Stop(grp);
}