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

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

🟥 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打包都重新复制进去即可。
相关文章
|
4月前
|
语音技术 开发工具 图形学
Unity与IOS⭐一、百度语音IOS版Demo调试方法
Unity与IOS⭐一、百度语音IOS版Demo调试方法
|
4月前
|
图形学 Android开发 iOS开发
穿越数字洪流,揭秘Unity3d中的视频魔法!Windows、Android和iOS如何征服RTSP与RTMP的终极指南!
【8月更文挑战第15天】在数字媒体的海洋中,实时视频流是连接世界的桥梁。对于那些渴望在Unity3d中搭建这座桥梁的开发者来说,本文将揭示如何在Windows、Android和iOS平台上征服RTSP与RTMP的秘密。我们将深入探讨这两种协议的特性,以及在不同平台上实现流畅播放的技巧。无论你是追求稳定性的RTSP拥趸,还是低延迟的RTMP忠实粉丝,这里都有你需要的答案。让我们一起穿越数字洪流,探索Unity3d中视频魔法的世界吧!
75 2
|
3月前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
160 0
|
4月前
|
图形学 iOS开发
Unity与IOS⭐最基础的交互演示
Unity与IOS⭐最基础的交互演示
|
4月前
|
开发工具 图形学 iOS开发
Unity与IOS⭐Unity接入IOS SDK的流程图
Unity与IOS⭐Unity接入IOS SDK的流程图
|
4月前
|
图形学 数据安全/隐私保护 iOS开发
Unity与IOS⭐Xcode打包,上架TestFlight的完整教程
Unity与IOS⭐Xcode打包,上架TestFlight的完整教程
|
5月前
|
人工智能 搜索推荐 vr&ar
苹果手机iOS18最新升级:植入AI人工智能,国内百度文心一言,国外GPT4o来辅助
iOS 18亮点速览:AI强化的Siri、RCS安卓消息兼容、自定义主屏、辅助功能增强,VR进步,新隐私工具,包括锁定APP和眼动追踪。Passwords app保障安全,Apple Intelligence提升个性化体验。
235 1
|
7月前
|
图形学
Unity Hololens2开发|(七)MRTK3子系统 TextToSpeechSubsystem(文本转语音)
Unity Hololens2开发|(七)MRTK3子系统 TextToSpeechSubsystem(文本转语音)
|
机器学习/深度学习 缓存 自然语言处理
谷歌Recorder实现说话人自动标注,功能性与iOS语音备忘录再度拉大
谷歌Recorder实现说话人自动标注,功能性与iOS语音备忘录再度拉大
139 0
|
人工智能 算法 API
iOS MachineLearning 系列(13)—— 语音与音频相关的AI能力
在语音分析方面,iOS中提供了原生的Speech框架,这个框架可以实时的将语音解析成文本。这个能力非常强大,使用它我们可以实现类似实时翻译的功能。对于非语音的音频,也有一些原生的AI能力可以使用,例如分析语音的类型。SoundAnalysis框架能够识别300多种声音,我们也可以使用自己训练的模型来处理定制化的音频识别需求。
362 0
下一篇
DataWorks