Unity与IOS⭐二、Unity接入IOS版百度语音:语音唤醒

本文详细介绍了如何在Unity工程中配置百度语音唤醒功能,并在Xcode中进行相应设置。从Unity工程配置,包括挂载BDWakeupManager和放置OC文件,到Xcode工程配置,如导入SDK、配置唤醒文件和Framework,以及解决可能出现的链接问题。同时,提供了文件备份和复用方法,帮助开发者高效地在多个项目中使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

🎊 商务合作: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打包都重新复制进去即可。





大家还有什么问题,欢迎在下方留言!


在这里插入图片描述
如果你有 技术的问题 项目开发

都可以加下方联系方式

和我聊一聊你的故事🧡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值