爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      iOS10语音识别框架SpeechFramework应用

      首页 知识中心 云端实践 文章详情页

      iOS10语音识别框架SpeechFramework应用

      2024-06-25 09:53:21 阅读次数:39

      iOS10语音识别框架SpeechFramework应用

      一、引言

              iOS10系统是一个较有突破性的系统,其在Message,Notification等方面都开放了很多实用性的开发接口。本篇博客将主要探讨iOS10中新引入的SpeechFramework框架。有个这个框架,开发者可以十分容易的为自己的App添加语音识别功能,不需要再依赖于其他第三方的语音识别服务,并且,Apple的Siri应用的强大也证明了Apple的语音服务是足够强大的,不通过第三方,也大大增强了用户的安全性。

      二、SpeechFramework框架中的重要类

              SpeechFramework框架比较轻量级,其中的类并不十分冗杂,在学习SpeechFramework框架前,我们需要对其中类与类与类之间的关系有个大致的熟悉了解。

      SFSpeechRecognizer:这个类是语音识别的操作类,用于语音识别用户权限的申请,语言环境的设置,语音模式的设置以及向Apple服务发送语音识别的请求。

      SFSpeechRecognitionTask:这个类是语音识别服务请求任务类,每一个语音识别请求都可以抽象为一个SFSpeechRecognitionTask实例,其中SFSpeechRecognitionTaskDelegate协议中约定了许多请求任务过程中的监听方法。

      SFSpeechRecognitionRequest:语音识别请求类,需要通过其子类来进行实例化。

      SFSpeechURLRecognitionRequest:通过音频URL来创建语音识别请求。

      SFSpeechAudioBufferRecognitionRequest:通过音频流来创建语音识别请求。

      SFSpeechRecognitionResult:语音识别请求结果类。

      SFTranscription:语音转换后的信息类。

      SFTranscriptionSegment:语音转换中的音频节点类。

              了解了上述类的作用于其之间的联系,使用SpeechFramework框架将十分容易。

      三、申请用户语音识别权限与进行语音识别请求

              开发者若要在自己的App中使用语音识别功能,需要获取用户的同意。首先需要在工程的Info.plist文件中添加一个Privacy-Speech Recognition Usage Description键,其实需要对应一个String类型的值,这个值将会在系统获取权限的警告框中显示,Info.plist文件如下图所示:

      iOS10语音识别框架SpeechFramework应用

        //申请用户语音识别权限
      [SFSpeechRecognizer requestAuthorization:^(SFSpeechRecognizerAuthorizationStatus status) {
      }];

      SFSpeechRecognizerAuthorzationStatus枚举中定义了用户的反馈结果,如下:

      typedef NS_ENUM(NSInteger, SFSpeechRecognizerAuthorizationStatus) {
      //结果未知 用户尚未进行选择
      SFSpeechRecognizerAuthorizationStatusNotDetermined,
      //用户拒绝授权语音识别
      SFSpeechRecognizerAuthorizationStatusDenied,
      //设备不支持语音识别功能
      SFSpeechRecognizerAuthorizationStatusRestricted,
      //用户授权语音识别
      SFSpeechRecognizerAuthorizationStatusAuthorized,
      };

              如果申请用户语音识别权限成功,开发者可以通过SFSpeechRecognizer操作类来进行语音识别请求,示例如下:

          //创建语音识别操作类对象
      SFSpeechRecognizer * rec = [[SFSpeechRecognizer alloc]init];
      //通过一个音频路径创建音频识别请求
      SFSpeechRecognitionRequest * request = [[SFSpeechURLRecognitionRequest alloc]initWithURL:[[NSBundle mainBundle] URLForResource:@"7011" withExtension:@"m4a"]];
      //进行请求
      [rec recognitionTaskWithRequest:request resultHandler:^(SFSpeechRecognitionResult * _Nullable result, NSError * _Nullable error) {
      //打印语音识别的结果字符串
      NSLog(@"%@",result.bestTranscription.formattedString);
      }];

      四、深入SFSpeechRecognizer类

              SFSpeechRecognizer类的主要作用是申请权限,配置参数与进行语音识别请求。其中比较重要的属性与方法如下:

      //获取当前用户权限状态
      + (SFSpeechRecognizerAuthorizationStatus)authorizationStatus;
      //申请语音识别用户权限
      + (void)requestAuthorization:(void(^)(SFSpeechRecognizerAuthorizationStatus status))handler;
      //获取所支持的所有语言环境
      + (NSSet<NSLocale *> *)supportedLocales;
      //初始化方法 需要注意 这个初始化方法将默认以设备当前的语言环境作为语音识别的语言环境
      - (nullable instancetype)init;
      //初始化方法 设置一个特定的语言环境
      - (nullable instancetype)initWithLocale:(NSLocale *)locale NS_DESIGNATED_INITIALIZER;
      //语音识别是否可用
      @property (nonatomic, readonly, getter=isAvailable) BOOL available;
      //语音识别操作类协议代理
      @property (nonatomic, weak) id<SFSpeechRecognizerDelegate> delegate;
      //设置语音识别的配置参数 需要注意 在每个语音识别请求中也有这样一个属性 这里设置将作为默认值
      //如果SFSpeechRecognitionRequest对象中也进行了设置 则会覆盖这里的值
      /*
      typedef NS_ENUM(NSInteger, SFSpeechRecognitionTaskHint) {
      SFSpeechRecognitionTaskHintUnspecified = 0, // 无定义
      SFSpeechRecognitionTaskHintDictation = 1, // 正常的听写风格
      SFSpeechRecognitionTaskHintSearch = 2, // 搜索风格
      SFSpeechRecognitionTaskHintConfirmation = 3, // 短语风格
      };
      */
      @property (nonatomic) SFSpeechRecognitionTaskHint defaultTaskHint;
      //使用回调Block的方式进行语音识别请求 请求结果会在Block中传入
      - (SFSpeechRecognitionTask *)recognitionTaskWithRequest:(SFSpeechRecognitionRequest *)request
      resultHandler:(void (^)(SFSpeechRecognitionResult * __nullable result, NSError * __nullable error))resultHandler;
      //使用代理回调的方式进行语音识别请求
      - (SFSpeechRecognitionTask *)recognitionTaskWithRequest:(SFSpeechRecognitionRequest *)request
      delegate:(id <SFSpeechRecognitionTaskDelegate>)delegate;
      //设置请求所占用的任务队列
      @property (nonatomic, strong) NSOperationQueue *queue;

      SFSpeechRecognizerDelegate协议中只约定了一个方法,如下:

      //当语音识别操作可用性发生改变时会被调用
      - (void)speechRecognizer:(SFSpeechRecognizer *)speechRecognizer availabilityDidChange:(BOOL)available;

              通过Block回调的方式进行语音识别请求十分简单,如果使用代理回调的方式,开发者需要实现SFSpeechRecognitionTaskDelegate协议中的相关方法,如下:

      //当开始检测音频源中的语音时首先调用此方法
      - (void)speechRecognitionDidDetectSpeech:(SFSpeechRecognitionTask *)task;
      //当识别出一条可用的信息后 会调用
      /*
      需要注意,apple的语音识别服务会根据提供的音频源识别出多个可能的结果 每有一条结果可用 都会调用此方法
      */
      - (void)speechRecognitionTask:(SFSpeechRecognitionTask *)task didHypothesizeTranscription:(SFTranscription *)transcription;
      //当识别完成所有可用的结果后调用
      - (void)speechRecognitionTask:(SFSpeechRecognitionTask *)task didFinishRecognition:(SFSpeechRecognitionResult *)recognitionResult;
      //当不再接受音频输入时调用 即开始处理语音识别任务时调用
      - (void)speechRecognitionTaskFinishedReadingAudio:(SFSpeechRecognitionTask *)task;
      //当语音识别任务被取消时调用
      - (void)speechRecognitionTaskWasCancelled:(SFSpeechRecognitionTask *)task;
      //语音识别任务完成时被调用
      - (void)speechRecognitionTask:(SFSpeechRecognitionTask *)task didFinishSuccessfully:(BOOL)successfully;

              SFSpeechRecognitionTask类中封装了属性和方法如下:

      //此任务的当前状态
      /*
      typedef NS_ENUM(NSInteger, SFSpeechRecognitionTaskState) {
      SFSpeechRecognitionTaskStateStarting = 0, // 任务开始
      SFSpeechRecognitionTaskStateRunning = 1, // 任务正在运行
      SFSpeechRecognitionTaskStateFinishing = 2, // 不在进行音频读入 即将返回识别结果
      SFSpeechRecognitionTaskStateCanceling = 3, // 任务取消
      SFSpeechRecognitionTaskStateCompleted = 4, // 所有结果返回完成
      };
      */
      @property (nonatomic, readonly) SFSpeechRecognitionTaskState state;
      //音频输入是否完成
      @property (nonatomic, readonly, getter=isFinishing) BOOL finishing;
      //手动完成音频输入 不再接收音频
      - (void)finish;
      //任务是否被取消
      @property (nonatomic, readonly, getter=isCancelled) BOOL cancelled;
      //手动取消任务
      - (void)cancel;

              关于音频识别请求类,除了可以使用SFSpeechURLRecognitionRequest类来进行创建外,还可以使用SFSpeechAudioBufferRecognitionRequest类来进行创建:

      @interface SFSpeechAudioBufferRecognitionRequest : SFSpeechRecognitionRequest

      @property (nonatomic, readonly) AVAudioFormat *nativeAudioFormat;
      //拼接音频流
      - (void)appendAudioPCMBuffer:(AVAudioPCMBuffer *)audioPCMBuffer;
      - (void)appendAudioSampleBuffer:(CMSampleBufferRef)sampleBuffer;
      //完成输入
      - (void)endAudio;

      @end

      五、语音识别结果类SFSpeechRecognitionResult

              SFSpeechRecognitionResult类是语音识别结果的封装,其中包含了许多套平行的识别信息,其每一份识别信息都有可信度属性来描述其准确程度。SFSpeechRecognitionResult类中属性如下:

      //识别到的多套语音转换信息数组 其会按照准确度进行排序
      @property (nonatomic, readonly, copy) NSArray<SFTranscription *> *transcriptions;
      //准确性最高的识别实例
      @property (nonatomic, readonly, copy) SFTranscription *bestTranscription;
      //是否已经完成 如果YES 则所有所有识别信息都已经获取完成
      @property (nonatomic, readonly, getter=isFinal) BOOL final;

      SFSpeechRecognitionResult类只是语音识别结果的一个封装,真正的识别信息定义在SFTranscription类中,SFTranscription类中属性如下:

      //完整的语音识别准换后的文本信息字符串
      @property (nonatomic, readonly, copy) NSString *formattedString;
      //语音识别节点数组
      @property (nonatomic, readonly, copy) NSArray<SFTranscriptionSegment *> *segments;

      当对一句完整的话进行识别时,Apple的语音识别服务实际上会把这句语音拆分成若干个音频节点,每个节点可能为一个单词,SFTranscription类中的segments属性就存放这些节点。SFTranscriptionSegment类中定义的属性如下:

      //当前节点识别后的文本信息
      @property (nonatomic, readonly, copy) NSString *substring;
      //当前节点识别后的文本信息在整体识别语句中的位置
      @property (nonatomic, readonly) NSRange substringRange;
      //当前节点的音频时间戳
      @property (nonatomic, readonly) NSTimeInterval timestamp;
      //当前节点音频的持续时间
      @property (nonatomic, readonly) NSTimeInterval duration;
      //可信度/准确度 0-1之间
      @property (nonatomic, readonly) float confidence;
      //关于此节点的其他可能的识别结果
      @property (nonatomic, readonly) NSArray<NSString *> *alternativeSubstrings;

      温馨提示:SpeechFramework框架在模拟器上运行会出现异常情况,无法进行语音识别请求。会报出kAFAssistantErrorDomain的错误,还望有知道解决方案的朋友,给些建议,Thanks。

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/u_11643026/4282699,作者:珲少,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:前端框架Vue------>第一天学习、Vue学习的路径、Vue官网(1)

      下一篇:Nginx虚拟主机配置实践之nginx访问同一个地址方法(二)

      相关文章

      2024-06-25 09:53:21

      iOS10为用户添加触摸反馈

      在iOS10中,UIKit框架中新增加了3个类,UIImpactFeedbackGenerator类、UINotificationFeedbackGenerator类与UISelectionFeedbackGenerator类。

      2024-06-25 09:53:21
      2024-06-25 09:53:21

      iOS10通知框架UserNotification理解与应用

      关于通知,无论与远程Push还是本地通知,以往的iOS系统暴漏给开发者的接口都是十分有限的,开发者只能对标题和内容进行简单的定义,至于UI展示和用户交互行为相关的部分,开发者开发起来都十分困难。

      2024-06-25 09:53:21
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5242559

      查看更多

      最新文章

      iOS10通知框架UserNotification理解与应用

      2024-06-25 09:53:21

      查看更多

      热门文章

      iOS10通知框架UserNotification理解与应用

      2024-06-25 09:53:21

      查看更多

      热门标签

      客户端 实践 基础知识 Java 服务器 java 数据库 框架 python 服务端 学习 代码 简单 javascript 编程
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      iOS10通知框架UserNotification理解与应用

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号