🎊 商务合作:https://skode.cn/file/businesscard/wechat.jpg
🎥 本文由 星河造梦坊公司官方 原创!
🏅 如果你有技术问题或项目开发,都可以加上方的联系方式,和我聊一聊你的故事🧡
文章目录
🟥 Untiy工程配置
1️⃣ BDWakeupManager
挂载到GameManager物体上。
using System.Runtime.InteropServices;
using UnityEngine;
public class GameManager : MonoBehaviour
{
/// <summary>
/// 初始化百度语音唤醒
/// </summary>
[DllImport("__Internal")]
private static extern void bdWakeUpInit();
/// <summary>
/// 开始百度语音唤醒
/// </summary>
[DllImport("__Internal")]
private static extern void bdStartWakeup();
/// <summary>
/// 结束百度语音唤醒
/// </summary>
[DllImport("__Internal")]
private static extern void bdStopWakeup();
private void Start()
{
bdWakeUpInit();
bdStartWakeup();
}
public void ReceiverBDWakeupResult(string value)
{
Debug.Log("识别到唤醒词:"+value);
}
public void StopBDWakup()
{
bdStopWakeup();
}
}
2️⃣ OC文件
放到Unity的Plugins/iOS文件夹下。
可在Xcode中创建,也可直接VSCode等创建。
🚩 BDWakeUp.h
#import <Foundation/Foundation.h>
#import "BDSEventManager.h"
#import "BDSWakeupDefines.h"
@interface BDWakeUp : NSObject
@property (strong, nonatomic) BDSEventManager *wakeupEventManager;
@end
🚩 BDWakeUp.m
#import "BDSWakeupDefines.h"
#import "BDSWakeupParameters.h"
#import "BDWakeUp.h"
#import "BDSEventManager.h"
//更改你的百度语音信息
const NSString* APP_ID = @"xxx";
const NSString* API_KEY = @"xxx";
const NSString* SECRET_KEY = @"xxx";
//必须加这个回调,这样在这定义的方法才会跟 BDSWakeupDefines 中的方法有关系
@interface BDWakeUp()< BDSClientWakeupDelegate>
@end
@implementation BDWakeUp
static BDWakeUp* Instance;
void bdWakeUpInit()
{
if(Instance==NULL)
Instance=[BDWakeUp new];
// 创建语音识别对象
Instance.wakeupEventManager = [BDSEventManager createEventManagerWithName:BDS_WAKEUP_NAME];
[Instance configWakeupClient];
[Instance configWakeupSettings];
}
void bdStartWakeup()
{
[Instance.wakeupEventManager setParameter:nil forKey:BDS_WAKEUP_AUDIO_FILE_PATH];
[Instance.wakeupEventManager setParameter:nil forKey:BDS_WAKEUP_AUDIO_INPUT_STREAM];
// 发送指令:加载语音唤醒引擎
[Instance.wakeupEventManager sendCommand:BDS_WP_CMD_LOAD_ENGINE];
// 发送指令:启动唤醒
[Instance.wakeupEventManager sendCommand:BDS_WP_CMD_START];
}
void bdStopWakeup()
{
[Instance.wakeupEventManager sendCommand:BDS_WP_CMD_STOP];
[Instance.wakeupEventManager sendCommand:BDS_WP_CMD_UNLOAD_ENGINE];
}
-(void) configWakeupClient
{
// 设置语音唤醒代理
[Instance.wakeupEventManager setDelegate:Instance];
// 参数配置:离线授权APPID
[Instance.wakeupEventManager setParameter:APP_ID forKey:BDS_WAKEUP_APP_CODE];
}
-(void) configWakeupSettings
{
// 参数配置:唤醒语言模型文件路径
NSString* dat = [[NSBundle mainBundle] pathForResource:@"bds_easr_basic_model" ofType:@"dat"];
//设置唤醒词文件路径
NSString* words = [[NSBundle mainBundle] pathForResource:@"WakeUp" ofType:@"bin"];
[Instance.wakeupEventManager setParameter:dat forKey:BDS_WAKEUP_DAT_FILE_PATH];
[Instance.wakeupEventManager setParameter:words forKey:BDS_WAKEUP_WORDS_FILE_PATH];
}
//唤醒功能回调接口
- (void)WakeupClientWorkStatus:(int)workStatus obj:(id)aObj
{
switch (workStatus) {
case EWakeupEngineWorkStatusStarted: {
//[self printLogTextView:@"WAKEUP CALLBACK: Started.\n"];
break;
}
case EWakeupEngineWorkStatusStopped: {
//[self printLogTextView:@"WAKEUP CALLBACK: Stopped.\n"];
break;
}
case EWakeupEngineWorkStatusLoaded: {
//[self printLogTextView:@"WAKEUP CALLBACK: Loaded.\n"];
break;
}
case EWakeupEngineWorkStatusUnLoaded: {
//[self printLogTextView:@"WAKEUP CALLBACK: UnLoaded.\n"];
break;
}
case EWakeupEngineWorkStatusTriggered: {
//[self printLogTextView:[NSString stringWithFormat:@"WAKEUP CALLBACK: Triggered - %@.\n", (NSString *)aObj]];
UnitySendMessage("GameManager", "ReceiverBDWakeupResult", [(NSString *)aObj UTF8String]);
//NSLog((NSString *)aObj);
break;
}
case EWakeupEngineWorkStatusError: {
//[self printLogTextView:[NSString stringWithFormat:@"WAKEUP CALLBACK: encount error - %@.\n", (NSError *)aObj]];
break;
}
}
}
@end
🚩 配置license
将.m中的license改为你官网的license,记得官网有安卓和IOS之分,安卓和IOS不通用。
🟧 Xcode工程配置
将Unity工程打包,Xcode打开生成的工程。
1️⃣ 配置百度语音SDK
先下载百度语音的IOS版SDK:传送门
🚩 配置SDK文件
1、导入所需的SDK文件
本项目完成语音唤醒,因此我们按百度语音官网文件说明,只将需要的文件配置到我们的工程。
配置的方法按官网文档提示操作。
我们创建的SDK文件夹都放在Libraries下,这是固定位置。
2、配置唤醒文件
1)配置唤醒文件
如上图所示,删掉自带的bds_easr_wakeup_words.dat,
将你导出的唤醒词Wakeup.bin复制进去
2)配置唤醒文件路径
该步我已经帮你做好了,配置的路径就在你的.m文件中,不需要动了。
🚩 备份SDK文件
将你做好的SDK文件夹备份到别的地方。
因为我们每次unity打包(Append方式),都会覆盖原先的xcode工程,导致SDK文件夹丢失(但配置的库、Other Linker Flags等不会丢失)
这就需要我们每次打出Xcode包,都需要手动将SDK文件夹再复制进你的Xcode工程中。
2️⃣ 配置Framework和其他选项
按官网提示,配置所需的Framework
小星河经过测试发现,除了官网提示的Framework,还应配置如下两个 选项,大家一并配置避免踩坑了。
🚩 Other Linker Flags:-lz
Undefined symbols: “_deflate”
Starting with Xcode 7, instead of adding libz.dylib, you should do this:
Go to the project Build Settings tab
Search for Other Linker Flags
Add -lz as a linker flag (see screenshot)
In the Product menu, select Clean before building again
🚩 libsqlite3.tbd
Undefined symbol: _sqlite3_close
🟨 如何复用
1️⃣ 我导出的文件
比如说我导出了这两个文件:
BDVoice:Xcode中的唤醒SDK文件
BDWakeUp.unitypackage:包含了交互的OC文件和C#文件。
2️⃣ 复用方法
- Unity中导入上述的包,调用即可。
- Unity打包后,配置一次 配置Framework和其他选项(后续unity打包都用Append,这样配置的东西不会更改)
- Libraries下放入上方的 BDVoice 文件,每次Unity打包都重新复制进去即可。
大家还有什么问题,欢迎在下方留言!
如果你有 技术的问题 或 项目开发
都可以加下方联系方式
和我聊一聊你的故事🧡