本文档提供了Paraformer录音文件识别iOS SDK的详细使用指南,帮助您将语音转换为文本。
用户指南:关于模型介绍和选型建议请参见录音文件识别。
在线体验:仅paraformer-v2、paraformer-8k-v1、paraformer-v1和paraformer-mtl-v1支持在线体验。
快速开始
获取API Key:获取API Key
说明当需要为第三方应用或用户提供临时访问权限,或者希望严格控制敏感数据访问、删除等高风险操作时,建议使用临时API Key。临时API Key拥有固定的60秒有效期,过期后需重新获取。
下载SDK并运行示例代码:
解压 ZIP 包,将其中的 nuisdk.framework 添加到工程。
在 Build Phases → Link Binary With Libraries 中添加 nuisdk.framework。
在 General → Frameworks, Libraries, and Embedded Content 中将 nuisdk.framework 设置为 Embed & Sign。
用 Xcode 打开示例工程。示例代码位于
DashParaformerFileTranscriberViewController,替换 API Key 后体验功能。
调用步骤
同步模式
初始化 SDK
按业务需求配置相关参数
调用
nui_file_trans_start启动识别任务(async_request设为false)在
onFileTransEventCallback接口中监听EVENT_FILE_TRANS_RESULT事件,获取最终识别结果调用
nui_release释放 SDK 资源
异步模式
初始化 SDK
按业务需求配置相关参数
调用
nui_file_trans_start启动识别任务(async_request设为true)调用
nui_file_trans_query主动查询识别进度/结果在
onFileTransEventCallback接口中监听EVENT_FILE_TRANS_QUERY_RESULT事件,获取当前查询结果在
onFileTransEventCallback接口中监听EVENT_FILE_TRANS_RESULT事件,获取最终识别结果调用
nui_release释放 SDK 资源
请求参数
连接与控制参数
通过在nui_initialize接口的parameters参数中传入一个JSON字符串来配置。
参数示例:以下为 JSON 字符串示例,参数未完整列出。请按实际需求在编码时补充:
{ "url": "wss://dashscope.aliyuncs.com/api-ws/v1/inference", "apikey": "st-****", "device_id": "my_device_id", "service_mode": "1" }参数说明
参数
类型
是否必须
说明
urlString是
服务地址,固定为
wss://dashscope.aliyuncs.com/api-ws/v1/inference。apikeyString是
API Key。建议使用时效性短、安全性更高的临时API Key,以降低长期有效Key泄露的风险。
service_modeString是
运行模式。录音文件识别固定为
"1"。device_idString是
用于标识终端用户的唯一字符串,可设为应用内用户ID或客户端生成的设备唯一标识符。此ID主要用于日志追踪和问题排查。
debug_pathString否
日志文件的存储路径。
此参数仅在调用nui_initialize接口时将
save_log设为YES时生效。此时必须设置日志文件路径,否则将报错。本地最多保留两个日志文件。
max_log_file_sizeint否
设定日志文件的最大字节数。
此参数仅在调用nui_initialize接口时将
save_log设为YES时生效。默认值:104857600(100 * 1024 * 1024 字节, 即 100MiB)。
log_track_levelint否
控制通过日志回调(onNuiLogTrackCallback)对外发送的日志内容的过滤级别。
默认值:2。
取值范围:
0:LOG_LEVEL_VERBOSE
1:LOG_LEVEL_DEBUG
2:LOG_LEVEL_INFO
3:LOG_LEVEL_WARNING
4:LOG_LEVEL_ERROR
5:LOG_LEVEL_NONE(表示关闭此功能)
注意:
log_track_level与level(通过nui_initialize接口设置)共同决定最终回调的日志。一条日志的级别数值必须同时大于或等于log_track_level和level的值,才会被回调。例如,log_track_level设为2 (INFO),level设为3 (WARNING),则只有WARNING及以上级别(数值>=3)的日志才会被回调。
语音识别效果参数
通过nui_set_param接口配置nl_config参数,或者通过nui_file_trans_start接口配置所有语音识别效果参数。
参数示例:以下为 JSON 字符串示例,参数未完整列出。请按实际需求在编码时补充:
{ "file_urls": [ "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav", "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_male2.wav" ], "async_request": false, "nls_config": { "model":"paraformer-v2", "disfluency_removal_enabled":false, "timestamp_alignment_enabled": false } }参数说明
参数
类型
是否必须
说明
file_urlsarray[string]是
音视频文件转写的URL列表,支持HTTP / HTTPS协议,单次请求最多支持100个URL。
音频格式:
aac、amr、avi、flac、flv、m4a、mkv、mov、mp3、mp4、mpeg、ogg、opus、wav、webm、wma、wmv重要由于音视频格式及其变种众多,技术上无法穷尽测试,API不能保证所有格式均能够被正确识别。请通过测试验证您所提供的文件能够获得正常的语音识别结果。
音频采样率
因模型而异:
paraformer-v2 支持任意采样率
paraformer-v1 支持任意采样率
paraformer-8k-v2 仅支持8kHz采样率
paraformer-8k-v1 仅支持8kHz采样率
paraformer-mtl-v1 支持16kHz及以上采样率
音频文件大小和时长:音频文件不超过2GB;时长在12小时以内。
如果希望处理的文件超过了上述限制,可尝试对文件进行预处理以降低文件尺寸。有关文件预处理的最佳实践可以查阅预处理视频文件以提高文件转写效率(针对录音文件识别场景)。
async_requestboolean否
语音识别是否为异步请求。
默认值:
false。取值范围:
true:异步请求
false:同步请求
apikeystring否
nls_configobject是
语音识别核心配置对象,包含模型选择、识别效果控制等关键参数。
nls_config.modelstring是
语音识别模型。
nls_config.language_hintsarray[string]否
指定待识别语音的语言代码。该参数仅适用于paraformer-v2模型。
默认值:
["zh", "en"]。支持的语言代码:
zh: 中文
en: 英文
ja: 日语
yue: 粤语
ko: 韩语
de:德语
fr:法语
ru:俄语
nls_config.disfluency_removal_enabledboolean否
是否过滤语气词,如“嗯”、“啊”等。
默认值:false。
取值范围:
true:过滤
false:不过滤
nls_config.timestamp_alignment_enabledboolean否
是否启用时间戳校准功能。
默认值:false。
取值范围:
true:开启
false:关闭
nls_config.special_word_filterobject否
指定在语音识别过程中需要处理的敏感词,并支持对不同敏感词设置不同的处理方式。
若未传入该参数,系统将启用系统内置的敏感词过滤逻辑,识别结果中与阿里云百炼敏感词表匹配的词语将被替换为等长的
*。若传入该参数,则可实现以下敏感词处理策略:
替换为
*:将匹配的敏感词替换为等长的*;直接过滤:将匹配的敏感词从识别结果中完全移除。
该参数的值应为一个 JSON Object,其结构如下所示:
{ "filter_with_signed": { "word_list": ["测试"] }, "filter_with_empty": { "word_list": ["开始", "发生"] }, "system_reserved_filter": true }JSON字段说明:
filter_with_signed类型:对象。
是否必填:否。
描述:配置需替换为
*的敏感词列表。识别结果中匹配的词语将被等长的*替代。示例:以上述JSON为例,“帮我测试一下这段代码”的语音识别结果将会是“帮我**一下这段代码”。
内部字段:
word_list: 字符串数组,列出需被替换的敏感词。
filter_with_empty类型:对象。
是否必填:否。
描述:配置需从识别结果中移除(过滤)的敏感词列表。识别结果中匹配的词语将被完全删除。
示例:以上述JSON为例,“比赛这就要开始了吗?”的语音识别结果将会是“比赛这就要了吗”。
内部字段:
word_list: 字符串数组,列出需被完全移除(过滤)的敏感词。
system_reserved_filter类型:布尔值。
是否必填:否。
默认值:true。
描述:是否启用系统预置的敏感词规则。设为
true时,将同时启用系统内置的敏感词过滤逻辑,识别结果中与阿里云百炼敏感词表匹配的词语将被替换为等长的*。
nls_config.channel_idarray[integer]否
指定在多音轨文件中需要进行语音识别的音轨索引,以List的形式给出,例如
[0]表示仅识别第一条音轨,[0, 1]表示同时识别前两条音轨。默认值:
[0]nls_config.diarization_enabledboolean否
自动说话人分离,默认关闭。
仅适用于单声道音频,多声道音频不支持说话人分离。
启用该功能后,识别结果中将显示
speaker_id字段,用于区分不同说话人。有关
speaker_id的示例,请参见识别结果说明。nls_config.speaker_countinteger否
说话人数量参考值。若要使用该功能,需将
diarization_enabled设置为true。默认自动判断说话人数量,如果配置此项,只能辅助算法尽量输出指定人数,无法保证一定会输出此人数。
取值范围:
[2, 100]。该功能用于区分多个说话人,因此最少需要设置2。nls_config.vocabulary_idstring否
热词词表ID,用于提升特定词汇的识别准确率。该参数适用于v2及更高版本模型。热词的使用方法请参见定制热词。
nls_config.resourcesarray[object]否
热词资源配置,用于v1版本模型。功能与
vocabulary_id相同,但配置方式不同:resources是一个对象数组,其每个元素包含resource_id和resource_type字段:resource_id:string类型,热词ID。resource_type:string类型,取值为固定字符串“asr_phrase”。
示例:
{ "nls_config": { "resources": [ { "resource_id": "xxxxxxxxxxxx", "resource_type": "asr_phrase" } ] } }热词的使用方法请参见Paraformer语音识别热词定制与管理。
关键接口
NeoNui
nui_initialize
初始化语音识别SDK实例。SDK为单例模式,在调用 nui_release 前禁止重复初始化。
方法签名
-(NuiResultCode) nui_initialize:(const char *)parameters logLevel:(NuiSdkLogLevel)level saveLog:(BOOL)save_log;参数说明
参数
类型
说明
parameterschar*JSON字符串,包含鉴权、连接和调试参数。参见连接与控制参数。
levelNuiSdkLogLevel控制SDK自身日志的打印级别。
save_logBOOL是否保存本地日志。若为
YES,须在连接与控制参数通过debug_path指定路径,并可通过max_log_file_size设置文件大小。返回值说明
返回错误码,参见错误码查询。
nui_set_param
此接口用于独立设置或更新 nls_config 参数。如果所有参数都在nui_file_trans_start中一次性提供,则无需调用此方法。
nui_file_trans_start
开始识别。
方法签名
-(NuiResultCode) nui_file_trans_start(const char *params, char *task_id);参数说明
参数
类型
说明
paramschar*示例:
{ "file_urls": [ "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav", "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_male2.wav" ], "async_request": false, "nls_config": { "model":"paraformer-v2", "disfluency_removal_enabled":false, "timestamp_alignment_enabled": false } }task_idchar*任务ID,SDK内部生成随机字符串,在此接口调用成功后可获得task_id。
返回值说明
返回错误码,参见错误码查询。
nui_file_trans_query
此接口用于主动查询一个异步任务的当前状态和结果。调用成功后,结果将通过onFileTransEventCallback回调中的 EVENT_FILE_TRANS_QUERY_RESULT 事件返回。
方法签名
-(NuiResultCode) nui_file_trans_query(const char *task_id);参数说明
参数
类型
说明
task_idchar*待查询的任务ID。
返回值说明
返回错误码,参见错误码查询。
nui_file_trans_cancel
立即取消当前任务。
方法签名
-(NuiResultCode) nui_file_trans_cancel(const char *task_id);参数说明
参数
类型
说明
task_idchar*待取消的任务ID。
返回值说明
返回错误码,参见错误码查询。
nui_release
释放SDK所有内部资源,并强制终止所有正在进行的任务。此方法调用后,SDK实例将变为不可用状态,如需再次使用,必须重新调用 nui_initialize 进行初始化。
方法签名
-(NuiResultCode) nui_release;返回值说明
返回错误码,参见错误码查询。
nui_get_version
获得当前SDK版本信息。
方法签名
-(const char*) nui_get_version;返回值说明
当前SDK版本信息。
NeoNuiSdkDelegate:监听回调
onFileTransEventCallback:监听事件和语音识别结果
方法签名
-(void) onFileTransEventCallback:(NuiCallbackEvent)nuiEvent asrResult:(const char *)asr_result taskId:(const char *)task_id ifFinish:(BOOL)finish retCode:(int)code;参数说明
参数
类型
说明
nuiEventNuiCallbackEvent回调事件。
asr_resultchar*语音识别结果。
task_idchar*任务ID。
finishBOOL本轮识别是否结束标志。
codeint错误码,在出现EVENT_ASR_ERROR事件时有效,参见错误码查询。
onFileTransLogTrackCallback:监听追踪日志
此回调用于接收 SDK 内部的详细日志,方便进行问题定位和调试。
-(void)onFileTransLogTrackCallback:(NuiSdkLogLevel)level
logMessage:(const char *)log;NuiCallbackEvent:事件类型
事件 | 说明 |
EVENT_FILE_TRANS_CONNECTED | 连接服务成功。 |
EVENT_FILE_TRANS_UPLOADED | 上传待识别音频文件成功。 |
EVENT_FILE_TRANS_QUERY_RESULT | 查询任务结果。 |
EVENT_FILE_TRANS_RESULT | 识别最终结果。 |
EVENT_ASR_ERROR | 语音识别过程中出现错误。 |