好的,下面我将更新之前的代码示例,加入一个 WakeupServiceHandle
的类,用于管理 WakeUpService
实例。这样可以更好地封装唤醒服务的使用。
头文件 (WakeupServiceHandle.h
)
#ifndef WAKEUP_SERVICE_HANDLE_H
#define WAKEUP_SERVICE_HANDLE_H
#include "WakeUpService.h"
class WakeupServiceHandle {
public:
WakeupServiceHandle();
~WakeupServiceHandle();
// 初始化唤醒服务
bool initialize();
// 反初始化唤醒服务
void deinitialize();
// 发送音频数据
bool sendAudio(const char* audioData, size_t length);
private:
WakeUpService wakeUpService; // 唤醒服务实例
// 唤醒成功回调处理
void onWakeSuccess(const char* message);
};
#endif // WAKEUP_SERVICE_HANDLE_H
源文件 (WakeupServiceHandle.cpp
)
#include "WakeupServiceHandle.h"
#include <iostream>
WakeupServiceHandle::WakeupServiceHandle() {}
WakeupServiceHandle::~WakeupServiceHandle() {
deinitialize();
}
bool WakeupServiceHandle::initialize() {
if (!wakeUpService.initialize()) {
std::cerr << "Failed to initialize the wake up service!" << std::endl;
return false;
}
wakeUpService.setWakeUpCallback([this](const char* message) {
onWakeSuccess(message);
});
return true;
}
void WakeupServiceHandle::deinitialize() {
wakeUpService.deinitialize();
}
bool WakeupServiceHandle::sendAudio(const char* audioData, size_t length) {
return wakeUpService.sendAudio(audioData, length);
}
void WakeupServiceHandle::onWakeSuccess(const char* message) {
std::cout << "Callback: " << message << std::endl;
}
修改使用示例
下面是如何使用 WakeupServiceHandle
的示例代码:
#include "WakeupServiceHandle.h"
#include <iostream>
int main() {
WakeupServiceHandle serviceHandler;
if (!serviceHandler.initialize()) {
return -1; // 初始化失败,退出程序
}
const char* audioSample = "this is a test with wake"; // 示例音频数据(字符串)
serviceHandler.sendAudio(audioSample, strlen(audioSample));
serviceHandler.deinitialize(); // 反初始化
return 0;
}
编译生成动态库 (.so 文件)
你依然可以使用以下命令编译这个代码,并生成共享库:
g++ -fPIC -shared -o libwakeservice.so WakeUpService.cpp WakeupServiceHandle.cpp
总结
在这个实现中,我们创建了一个 WakeupServiceHandle
类,它负责管理 WakeUpService
实例并提供对外接口。通过这种方式,你可以很容易地进行初始化、发送音频和处理唤醒成功的回调。这种封装使得接口更加清晰且易于管理。
内容由零声教学AI助手提供,问题来源于学员提问