Qwen-Audio-ASR-Message实时语音识别iOS SDK

更新时间:
复制 MD 格式

本文档提供了Qwen-Audio-3.1-ASR-Flash-Message实时语音识别iOS SDK的详细使用指南,帮助您将语音转换为文本。

快速开始

  1. 获取API Key:获取与配置 API Key

  2. 下载SDK并运行示例代码:
    • 下载最新SDK整合包。
    • 解压 ZIP 包,将其中的 nuisdk.xcframework 添加到工程。
    • 在 Build Phases → Link Binary With Libraries 中添加 nuisdk.xcframework。
    • 在 General → Frameworks, Libraries, and Embedded Content 中将 nuisdk.xcframework 设置为 Embed & Sign。
    • 用 Xcode 打开示例工程。示例代码位于DashFunAsrSpeechTranscriberViewController.m,替换 API Key 后体验功能。

调用步骤

  1. 初始化 SDK
  2. 按业务需求设置参数:通过nui_initialize接口设置连接与控制参数;通过nui_set_params接口设置语音识别效果参数。
  3. 调用nui_dialog_start启动识别流程。
  4. 在onNuiAudioStateChanged回调中,根据音频状态开启录音设备。
  5. 在onNuiNeedAudioData回调中持续提供录音数据,或者通过nui_update_audio_data持续推送录音数据。
  6. 在onNuiEventCallback回调中监听事件并获取语音识别结果。
  7. 调用nui_dialog_cancel停止识别,并通过监听EVENT_TRANSCRIBER_COMPLETE事件确认识别已结束。
  8. 当识别功能不再使用时,调用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"
}
参数说明
参数类型是否必须说明

url

String

是

服务地址:

  • wss://dashscope.aliyuncs.com/api-ws/v1/inference

  • 华北2(北京):wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/inference

  • 新加坡:wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference

调用时,请将 {WorkspaceId} 替换为真实的 Workspace ID。

apikey

String

是

API Key。

service_mode

String

是

运行模式。实时语音识别固定为 "1"。

device_id

String

是

用于标识终端用户的唯一字符串,可设为应用内用户ID或客户端生成的设备唯一标识符。此ID主要用于日志追踪和问题排查。

audio_update_manually

String

否

是否启用主动推送音频数据模式。默认值:"false"。

设为 "true",且 SDK 版本支持端侧音频能力(如 AEC、VAD)时,默认启用端侧音频能力。

workspace

String

否

端侧资源文件的存储路径。当 audio_update_manually 设为 "true" 且启用端侧音频能力(如 AEC、VAD)时,必须设置此参数。

debug_path

String

否

日志文件的存储路径。

此参数仅在调用nui_initialize接口时将save_log设为YES时生效。此时必须设置日志文件路径,否则将报错。

本地最多保留两个日志文件。

save_wav

String

否

是否保存调试用的音频文件。音频文件保存于debug_path下。

默认值:"false"。

取值范围:

  • "true":是

  • "false":否

此参数仅在调用nui_initialize接口时将save_log设为true时生效。 同时,debug_path也必须被设置。

max_log_file_size

int

否

设定日志文件的最大字节数。

此参数仅在调用nui_initialize接口时将save_log设为YES时生效。

默认值:104857600(100 * 1024 * 1024 字节, 即 100MiB)。

log_track_level

int

否

控制通过日志回调(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_params接口的params参数中传入一个JSON字符串来配置。

参数示例:以下为 JSON 字符串示例,参数未完整列出。请按实际需求在编码时补充:

{
    "service_type": 4,
    "nls_config": {
        "model": "qwen-audio-3.1-asr-flash-message",
        "sr_format": "pcm",
        "sample_rate": "16000"
    }
}
参数说明
一级参数类型是否必须说明

service_type

int

是

语音服务类型。实时语音识别固定为 4。

nls_config

object

是

语音识别核心配置对象,包含模型选择、识别效果控制等关键参数。

nls_config.model

string

是

模型名,设置为 qwen-audio-3.1-asr-flash-message。

nls_config.sr_format

string

是

音频格式。

取值范围:

  • pcm
  • opus

重要传入 PCM 格式的音频数据时,如果将该参数设为 opus,SDK 会在内部完成 Opus 编码。

nls_config.sample_rate

int

是

采样率(Hz)。

仅支持 16000 Hz。

nls_config.language_hints

array[string]

否

待识别音频语种。无默认值,不设置时模型自动识别。

最多支持设置 4 个值,超出时仅前 4 个生效。

点击查看支持的语言代码

  • zh: 中文
  • en: 英文
  • ja: 日语
  • ko:韩语
  • vi:越南语
  • th:泰语
  • id:印尼语
  • ms:马来语
  • tl:菲律宾语
  • hi:印地语
  • ar:阿拉伯语
  • fr:法语
  • de:德语
  • es:西班牙语
  • pt:葡萄牙语
  • ru:俄语
  • it:意大利语
  • nl:荷兰语
  • sv:瑞典语
  • da:丹麦语
  • fi:芬兰语
  • no:挪威语
  • el:希腊语
  • pl:波兰语
  • cs:捷克语
  • hu:匈牙利语
  • ro:罗马尼亚语
  • bg:保加利亚语
  • hr:克罗地亚语
  • sk:斯洛伐克语

仅在最终结果(sentence_end=true)生效,中间结果(sentence_end=false)不支持。

nls_config.keep_dialect

boolean

否

是否保留方言表达,默认值为 false。false:将方言转写为普通话文本;true:保留方言表达。

说明仅在最终结果(sentence_end=true)生效,中间结果(sentence_end=false)不支持。

nls_config.vad_model

string

否

VAD 模型,默认值为 far_field_meeting_16k。

  • near_meeting_16k:近场场景。
  • far_field_meeting_16k:远场场景。

nls_config.max_sentence_silence

int

否

VAD 断句静音阈值(ms)。当一段语音后的静音时长超过该阈值时,系统会判定该句子已结束。

默认值:800。

取值范围:[200, 6000]。

nls_config.heartbeat

boolean

否

是否启用心跳包。

默认值:false。

  • true:在持续发送静音音频的情况下,可保持与服务端的连接不中断。
  • false(默认):即使持续发送静音音频,连接也将在一定时间后因超时而断开。

静音音频指的是在音频文件或数据流中没有声音信号的内容。静音音频可以通过多种方法生成,例如使用音频编辑软件如Audacity或Adobe Audition,或者通过命令行工具如FFmpeg。

nls_config.disfluency_removal_enabled

boolean

否

是否过滤语气词并对输出结果进行润色,默认值为 false。设置为 true 时启用。

nls_config.intermediate_result_enabled

boolean

否

是否返回流式中间结果,默认值为 false。设置为 true 时返回流式中间结果。

nls_config.vocabulary_id

string

否

预编译热词列表 ID。

需预先调用创建热词列表接口生成,识别时传入该 ID 即可使用列表中的热词。

适用于词汇已知且相对稳定、需要跨请求复用同一词表的场景。

使用方法请参见预编译热词。

nls_config.instant_vocabulary

object

否

即时热词。

以键值对形式传入,键为热词文本(string),值为热词权重(integer),无需预先创建热词列表。权重取值范围为 [1, 5] 或 50:取 [1, 5] 时值越大模型越倾向输出该词;取 50 时为超级热词,召回率大幅提升,但超级热词数量最多不超过 50 个。

适用于临时性、会话级别的热词优化。

与预编译热词同时配置时,系统会合并两类热词;合并后超过 2000 个时,随机选择 2000 个使用。使用方法、适用模型及限制请参见即时热词。

nls_config.speech_noise_threshold

float

否

语音与噪音的判定阈值,用于调整语音活动检测(VAD)的灵敏度。

取值范围:[-1.0, 1.0]。

取值说明:

  • 取值越接近 -1:降低噪音判定阈值,噪音被识别为语音的概率增大,可能导致更多噪音被转写
  • 取值越接近 +1:提高噪音判定阈值,语音被误判为噪音的概率增大,可能导致部分语音被过滤

此参数为高级配置参数,调整可能显著影响识别效果,建议:

  • 调整前充分测试验证效果
  • 根据实际音频环境小幅度调整(建议步长 0.1)

nls_config.enable_connection_fast_check

BOOL

否

是否启用快速网络检测,以便尽快反馈断网情况。默认值:NO。

关键接口

NeoNui

nui_initialize

初始化语音识别SDK实例。SDK为单例模式,在调用 nui_release 前禁止重复初始化。

方法签名
-(NuiResultCode) nui_initialize:(const char *)parameters
                       logLevel:(NuiSdkLogLevel)level
                        saveLog:(BOOL)save_log;
参数说明
参数类型说明

parameters

char*

JSON字符串,包含鉴权、连接和调试参数。参见连接与控制参数。

level

NuiSdkLogLevel

控制SDK自身日志的打印级别。

save_log

BOOL

是否保存本地日志。若为YES,须在连接与控制参数通过debug_path指定路径,并可通过max_log_file_size设置文件大小。

nui_set_params

以JSON格式设置语音识别效果参数。在 nui_dialog_start 之前调用。

方法签名
-(NuiResultCode) nui_set_params:(const char *)params;
参数说明
参数类型说明

params

char*

语音识别效果参数。

nui_dialog_start

开始识别。

方法签名
-(NuiResultCode) nui_dialog_start:(NuiVadMode)vad_mode
                      dialogParam:(const char *)dialog_params;
参数说明
参数类型说明

vad_mode

NuiVadMode

VAD模式。固定为MODE_P2T。

dialog_params

char*

如果连接与控制参数的apikey参数使用的是临时API Key,当其过期时,可在此处更新。如果需要通过上下文增强来提升识别准确率,也可在此处传入上下文。

内容为JSON格式:

{
  "apikey": "st-****",
  "input_context": [
    {
      "role": "user",
      "content": [
        {
          "text": "xxxxx",
          "type": "input_text"
        }
      ]
    }
  ]
}

nui_dialog_cancel

结束识别或者立即取消当前交互。

方法签名
-(NuiResultCode) nui_dialog_cancel:(BOOL)force;
参数说明
参数类型说明

force

BOOL

是否强制结束而忽略最终结果。

  • YES:不等待服务端返回最终识别结果就立即结束任务。

  • NO:结束任务,但是会等待完整结果返回。

nui_dialog_action

在交互过程中下发对话动作指令,用于更新识别上下文等运行时行为。

方法签名
-(NuiResultCode) nui_dialog_action:(const char *)action_params;
参数说明
参数类型说明

action_params

char*

JSON 字符串,用于更新识别上下文等运行时行为。

action_params.type

String

固定为 "action"。

action_params.command

String

运行指令。支持以下取值:

  • context:即时更新上下文增强,以提升识别准确率。

  • play_start:使用端侧 AEC 时,通知 SDK 内部 AEC 播放器开始播放音频。

  • play_over:使用端侧 AEC 时,通知 SDK 内部 AEC 播放器已经播放结束。

action_params.context

String

当 command 为 "context" 时,用于即时更新上下文增强。示例:

{
  "context": [
    {
      "role": "user",
      "content": [
        {
          "text": "xxx",
          "type": "input_text"
        }
      ]
    }
  ]
}

nui_update_audio_data

当 audio_update_manually 设为 "true" 时,录音数据不再通过 onNuiNeedAudioData 填入,而是通过此接口主动推送。

方法签名
-(NuiResultCode) nui_update_audio_data:(const char *)data
                                    Len:(int)length
                              FirstPack:(BOOL)first_pack;
参数说明
参数类型说明

data

const char *

推送的音频数据。

length

int

推送的音频数据的字节数。

first_pack

BOOL

无需关注此参数。

nui_push_reference_data

当 audio_update_manually 设为 "true" 且启用端侧 AEC 回声消除能力时,需要通过此接口推送播放器播放的音频数据作为参考信号。

方法签名
-(NuiResultCode) nui_push_reference_data:(const char *)data
                                     Len:(int)length
                               FirstPack:(BOOL)first_pack;
参数说明
参数类型说明

data

const char *

推送的音频数据。

length

int

推送的音频数据的字节数。

first_pack

BOOL

无需关注此参数。

nui_release

释放SDK所有内部资源,并强制终止所有正在进行的任务。此方法调用后,SDK实例将变为不可用状态,如需再次使用,必须重新调用 nui_initialize 进行初始化。

方法签名
-(NuiResultCode) nui_release;

nui_get_version

获得当前SDK版本信息。此接口需在 nui_initialize 之后调用才有返回值。

方法签名
-(const char*) nui_get_version;
返回值说明

当前SDK版本信息。

nui_get_all_response

获得当前事件回调的完整信息。

方法签名
-(const char*) nui_get_all_response;
返回值说明

JSON字符串格式的完整事件信息。

NeoNuiSdkDelegate:监听回调

onNuiEventCallback:监听事件和语音识别结果

方法签名
-(void) onNuiEventCallback:(NuiCallbackEvent)nuiEvent
                    dialog:(long)dialog
                 kwsResult:(const char *)wuw
                 asrResult:(const char *)asr_result
                  ifFinish:(BOOL)finish
                   retCode:(int)code;
参数说明
参数类型说明

nuiEvent

NuiCallbackEvent

回调事件。

dialog

long

会话编码,无需关注该参数。

wuw

char*

语音唤醒功能。无需关注该参数。

asr_result

char*

语音识别结果。

finish

BOOL

本轮识别是否结束标志。

code

int

仅在出现 EVENT_ASR_ERROR 事件时有效。

onNuiAudioStateChanged:监听音频状态

SDK 通过此回调通知何时应该开始或停止录音。

方法签名
-(void) onNuiAudioStateChanged:(NuiAudioState)state;
NuiAudioState状态说明
参数说明

STATE_OPEN

交互启动,可以打开录音设备进行录音。

STATE_PAUSE

交互停止,可以停止录音。

STATE_CLOSE

SDK 实例已释放,可以彻底关闭录音设备。

onNuiNeedAudioData:填充待识别音频数据

开始识别后,该回调被连续触发,需在其中提供待识别音频数据。

方法签名
-(int) onNuiNeedAudioData:(char *)audioData length:(int)len;
参数说明
参数类型说明

audioData

char *

填充的音频数据。

len

int

填充的音频数据的字节数。

onNuiAssistEventCallback:辅助数据和信息结果

此回调用于接收 SDK 内部的辅助事件和相关数据。

方法签名
-(void) onNuiAssistEventCallback:(NuiCallbackEvent)nuiEvent
                            info:(char*)info
                         infoLen:(int)info_len
                          buffer:(char*)buffer
                             len:(int)len;
参数说明
参数类型说明

nuiEvent

NuiCallbackEvent

回调事件。

info

char *

无需关注此参数。

info_len

int

无需关注此参数。

buffer

char *

辅助数据,例如 AEC 回声消除后的音频数据。

len

int

辅助数据的字节数。

onNuiLogTrackCallback:监听追踪日志

此回调用于接收 SDK 内部的详细日志,方便进行问题定位和调试。

-(void) onNuiLogTrackCallback:(NuiSdkLogLevel)level
                   logMessage:(const char *)log;

NuiCallbackEvent:事件类型

事件说明

EVENT_TRANSCRIBER_STARTED

任务启动成功。

EVENT_VAD_START

任务启动后即触发该事件。不代表检测到人声起点。

EVENT_VAD_END

检测到人声终点。

EVENT_ASR_PARTIAL_RESULT

语音识别中间结果。

EVENT_ASR_ERROR

语音识别过程中出现错误。

EVENT_MIC_ERROR

因连续2秒未收到任何音频数据而触发。

EVENT_SENTENCE_END

检测到一句话结束,此时会返回一句完整的识别结果。

EVENT_TRANSCRIBER_COMPLETE

语音识别结束。

EVENT_AEC_DATA

AEC 回声消除后的音频数据。