全部產品
Search
文件中心

Alibaba Cloud Model Studio:Fun-ASR-Realtime iOS SDK

更新時間:Sep 29, 2026

本文檔提供了Fun-ASR-Realtime實時語音識別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"
}
參數說明
參數類型是否必須說明
urlString是服務地址:
  • 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。
apikeyString是API Key。
service_modeString是運行模式。實時語音識別固定為 "1"。
device_idString是用於標識終端用戶的唯一字符串,可設為應用內用戶ID或客戶端生成的設備唯一標識符。此ID主要用於日誌追蹤和問題排查。
audio_update_manuallyString否是否啓用主動推送音頻數據模式。默認值:"false"。設為 "true",且 SDK 版本支持端側音頻能力(如 AEC、VAD)時,默認啓用端側音頻能力。
workspaceString否端側資源文件的存儲路徑。當 audio_update_manually 設為 "true" 且啓用端側音頻能力(如 AEC、VAD)時,必須設置此參數。
debug_pathString否日誌文件的存儲路徑。此參數僅在調用nui_initialize接口時將save_log設為YES時生效。此時必須設置日誌文件路徑,否則將報錯。本地最多保留兩個日誌文件。
save_wavString否是否保存調試用的音頻文件。音頻文件保存於debug_path下。默認值:"false"。取值範圍:
  • "true":是
  • "false":否
此參數僅在調用nui_initialize接口時將save_log設為true時生效。 同時,debug_path也必須被設置。
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_params接口的params參數中傳入一個JSON字符串來配置。

參數示例:以下為 JSON 字符串示例,參數未完整列出。請按實際需求在編碼時補充:

{
    "service_type": 4,
    "nls_config": {
        "model": "fun-asr-realtime",
        "sr_format": "pcm",
        "sample_rate": "16000"
    }
}
參數說明
一級參數類型是否必須說明
service_typeint是語音服務類型。實時語音識別固定為 4。
nls_configobject是語音識別核心配置對象,包含模型選擇、識別效果控制等關鍵參數。
nls_config.modelstring是模型名稱。
nls_config.sr_formatstring是音頻格式。

取值範圍:

  • pcm
  • opus

重要傳入 PCM 格式的音頻數據時,如果將該參數設為 opus,SDK 會在內部完成 Opus 編碼。

nls_config.sample_rateint是採樣率(Hz)。

取值範圍:8k模型僅支持 8000 Hz,其他模型支持任意採樣率。

重要啓用端側音頻能力(如 AEC、VAD)時,不支持 8000 Hz。

nls_config.semantic_punctuation_enabledboolean否是否啓用語義斷句。

默認值:false。

  • true:開啓語義斷句,關閉 VAD 斷句。
  • false(默認):開啓 VAD 斷句,關閉語義斷句。

語義斷句準確性更高,適合會議轉寫場景;VAD(Voice Activity Detection,語音活動檢測)斷句延遲較低,適合交互場景。

nls_config.max_sentence_silenceint否VAD 斷句靜音閾值(ms)。當一段語音後的靜音時長超過該閾值時,系統會判定該句子已結束。當semantic_punctuation_enabled為true時,不作為sentence_end返回依據,但設置過小可能會影響識別效果。

默認值:1300。

取值範圍:[200, 6000]。

nls_config.multi_threshold_mode_enabledboolean否

重要僅在semantic_punctuation_enabled參數為false時生效。

是否啓用多閾值模式。啓用後可防止 VAD 斷句切割過長。

默認值:false。

nls_config.heartbeatboolean否是否啓用心跳包。

默認值:false。

  • true:在持續發送靜音音頻的情況下,可保持與服務端的連接不中斷。
  • false(默認):即使持續發送靜音音頻,連接也將在一定時間後因超時而斷開。

靜音音頻指的是在音頻文件或數據流中沒有聲音信號的內容。靜音音頻可以通過多種方法生成,例如使用音頻編輯軟件如Audacity或Adobe Audition,或者通過命令行工具如FFmpeg。

nls_config.vocabulary_idstring否預編譯熱詞列表 ID。

需預先調用創建熱詞列表接口生成,識別時傳入該 ID 即可使用列表中的熱詞。

適用於詞彙已知且相對穩定、需要跨請求復用同一詞表的場景。

使用方法請參見預編譯熱詞。

nls_config.language_hintsarray[string]否待識別音頻語種。無默認值,不設置時模型自動識別。

僅支持設置 1 個值,設置多個時僅第一個生效。

點擊查看支持的語言代碼

  • fun-asr-realtime、fun-asr-realtime-2025-11-07:

    • 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:斯洛伐克語
  • fun-asr-realtime-2026-02-28:

    • zh: 中文
    • en: 英文
    • ja: 日語
  • fun-asr-realtime-2025-09-15:

    • zh: 中文
    • en: 英文
  • fun-asr-flash-8k-realtime、fun-asr-flash-8k-realtime-2026-01-28:

    • zh: 中文
nls_config.speech_noise_thresholdfloat否語音與噪音的判定閾值,用於調整語音活動檢測(VAD)的靈敏度。

取值範圍:[-1.0, 1.0]。

取值說明:

  • 取值越接近 -1:降低噪音判定閾值,噪音被識別為語音的概率增大,可能導致更多噪音被轉寫
  • 取值越接近 +1:提高噪音判定閾值,語音被誤判為噪音的概率增大,可能導致部分語音被過濾

此參數為高級配置參數,調整可能顯著影響識別效果,建議:

  • 調整前充分測試驗證效果
  • 根據實際音頻環境小幅度調整(建議步長 0.1)
nls_config.special_word_filterobject否指定在語音識別過程中需要處理的敏感詞,並支持對不同敏感詞設置不同的處理方式。詳情請參見敏感詞過濾。
nls_config.enable_connection_fast_checkBOOL否是否啓用快速網絡檢測,以便盡快反饋斷網情況。默認值:NO。

關鍵接口

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_params

以JSON格式設置語音識別效果參數。在 nui_dialog_start 之前調用。

方法簽名
-(NuiResultCode) nui_set_params:(const char *)params;
參數說明
參數類型說明
paramschar*語音識別效果參數。

nui_dialog_start

開始識別。

方法簽名
-(NuiResultCode) nui_dialog_start:(NuiVadMode)vad_mode
                      dialogParam:(const char *)dialog_params;
參數說明
參數類型說明
vad_modeNuiVadModeVAD模式。固定為MODE_P2T。
dialog_paramschar*如果連接與控制參數的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;
參數說明
參數類型說明
forceBOOL是否強制結束而忽略最終結果。
  • YES:不等待服務端返回最終識別結果就立即結束任務。
  • NO:結束任務,但是會等待完整結果返回。

nui_dialog_action

在交互過程中下發對話動作指令,用於更新識別上下文等運行時行為。

方法簽名
-(NuiResultCode) nui_dialog_action:(const char *)action_params;
參數說明
參數類型說明
action_paramschar*JSON 字符串,用於更新識別上下文等運行時行為。
action_params.typeString固定為 "action"。
action_params.commandString運行指令。支持以下取值:
  • context:即時更新上下文增強,以提升識別準確率。
  • play_start:使用端側 AEC 時,通知 SDK 內部 AEC 播放器開始播放音頻。
  • play_over:使用端側 AEC 時,通知 SDK 內部 AEC 播放器已經播放結束。
action_params.contextString當 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;
參數說明
參數類型說明
dataconst char *推送的音頻數據。
lengthint推送的音頻數據的字節數。
first_packBOOL無需關注此參數。

nui_push_reference_data

當 audio_update_manually 設為 "true" 且啓用端側 AEC 回聲消除能力時,需要通過此接口推送播放器播放的音頻數據作為參考信號。

方法簽名
-(NuiResultCode) nui_push_reference_data:(const char *)data
                                     Len:(int)length
                               FirstPack:(BOOL)first_pack;
參數說明
參數類型說明
dataconst char *推送的音頻數據。
lengthint推送的音頻數據的字節數。
first_packBOOL無需關注此參數。

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;
參數說明
參數類型說明
nuiEventNuiCallbackEvent回調事件。
dialoglong會話編碼,無需關注該參數。
wuwchar*語音喚醒功能。無需關注該參數。
asr_resultchar*語音識別結果。
finishBOOL本輪識別是否結束標誌。
codeint僅在出現 EVENT_ASR_ERROR 事件時有效。

onNuiAudioStateChanged:監聽音頻狀態

SDK 通過此回調通知何時應該開始或停止錄音。

方法簽名
-(void) onNuiAudioStateChanged:(NuiAudioState)state;
NuiAudioState狀態說明
參數說明
STATE_OPEN交互啓動,可以打開錄音設備進行錄音。
STATE_PAUSE交互停止,可以停止錄音。
STATE_CLOSESDK 實例已釋放,可以徹底關閉錄音設備。

onNuiNeedAudioData:填充待識別音頻數據

開始識別後,該回調被連續觸發,需在其中提供待識別音頻數據。

方法簽名
-(int) onNuiNeedAudioData:(char *)audioData length:(int)len;
參數說明
參數類型說明
audioDatachar *填充的音頻數據。
lenint填充的音頻數據的字節數。

onNuiAssistEventCallback:輔助數據和信息結果

此回調用於接收 SDK 內部的輔助事件和相關數據。

方法簽名
-(void) onNuiAssistEventCallback:(NuiCallbackEvent)nuiEvent
                            info:(char*)info
                         infoLen:(int)info_len
                          buffer:(char*)buffer
                             len:(int)len;
參數說明
參數類型說明
nuiEventNuiCallbackEvent回調事件。
infochar *無需關注此參數。
info_lenint無需關注此參數。
bufferchar *輔助數據,例如 AEC 回聲消除後的音頻數據。
lenint輔助數據的字節數。

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_DATAAEC 回聲消除後的音頻數據。