本文檔提供了Qwen-Audio-3.1-ASR-Flash-Message實時語音識別iOS SDK的詳細使用指南,幫助您將語音轉換為文本。
快速開始
-
獲取API Key:獲取與配置 API Key
-
下載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 後體驗功能。
調用步驟
- 初始化 SDK
- 按業務需求設置參數:通過
nui_initialize接口設置連接與控制參數;通過nui_set_params接口設置語音識別效果參數。 - 調用
nui_dialog_start啓動識別流程。 - 在
onNuiAudioStateChanged回調中,根據音頻狀態開啓錄音設備。 - 在
onNuiNeedAudioData回調中持續提供錄音數據,或者通過nui_update_audio_data持續推送錄音數據。 - 在
onNuiEventCallback回調中監聽事件並獲取語音識別結果。 - 調用
nui_dialog_cancel停止識別,並通過監聽EVENT_TRANSCRIBER_COMPLETE事件確認識別已結束。 - 當識別功能不再使用時,調用
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 | 是 | 服務地址:
{WorkspaceId} 替換為真實的 Workspace ID。 |
apikey | String | 是 | API Key。 |
service_mode | String | 是 | 運行模式。實時語音識別固定為 "1"。 |
device_id | String | 是 | 用於標識終端用戶的唯一字符串,可設為應用內用戶ID或客戶端生成的設備唯一標識符。此ID主要用於日誌追蹤和問題排查。 |
audio_update_manually | String | 否 | 是否啓用主動推送音頻數據模式。默認值: |
workspace | String | 否 | 端側資源文件的存儲路徑。當 audio_update_manually 設為 "true" 且啓用端側音頻能力(如 AEC、VAD)時,必須設置此參數。 |
debug_path | String | 否 | 日誌文件的存儲路徑。此參數僅在調用nui_initialize接口時將 |
save_wav | String | 否 | 是否保存調試用的音頻文件。音頻文件保存於
save_log設為true時生效。 同時,debug_path也必須被設置。 |
max_log_file_size | int | 否 | 設定日誌文件的最大字節數。此參數僅在調用nui_initialize接口時將 |
log_track_level | int | 否 | 控制通過日誌回調(
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 格式的音頻數據時,如果將該參數設為 |
nls_config.sample_rate | int | 是 | 採樣率(Hz),僅支援 |
nls_config.max_sentence_silence | int | 否 | VAD 斷句靜音閾值(毫秒)。語音後的靜音時長超過此值時判定句子結束。預設值為 |
nls_config.heartbeat | boolean | 否 | 是否啓用心跳包。 默認值: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 | 否 | 即時熱詞。 以鍵值對形式傳入,鍵為熱詞文本( 適用於臨時性、會話級別的熱詞優化。 與預編譯熱詞同時配置時,系統會合併兩類熱詞;合併後超過 2000 個時,隨機選擇 2000 個使用。使用方法請參見即時熱詞。 |
nls_config.speech_noise_threshold | float | 否 | 語音與噪音的判定閾值,用於調整語音活動檢測(VAD)的靈敏度。 取值範圍:[-1.0, 1.0]。 取值說明:
此參數為高級配置參數,調整可能顯著影響識別效果,建議:
|
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* | 如果連接與控制參數的 內容為JSON格式: |
返回錯誤碼,參見錯誤碼查詢。
nui_dialog_cancel
結束識別或者立即取消當前交互。
方法簽名-(NuiResultCode) nui_dialog_cancel:(BOOL)force;
參數說明
| 參數 | 類型 | 說明 |
|---|---|---|
force | BOOL | 是否強制結束而忽略最終結果。
|
返回錯誤碼,參見錯誤碼查詢。
nui_dialog_action
在交互過程中下發對話動作指令,用於更新識別上下文等運行時行為。
方法簽名-(NuiResultCode) nui_dialog_action:(const char *)action_params;
參數說明
| 參數 | 類型 | 說明 |
|---|---|---|
action_params | char* | JSON 字符串,用於更新識別上下文等運行時行為。 |
action_params.type | String | 固定為 "action"。 |
action_params.command | String | 運行指令。支持以下取值:
|
action_params.context | String | 當 |
返回錯誤碼,參見錯誤碼查詢。
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 回聲消除後的音頻數據。 |