更新时间:2026-02-03 GMT+08:00
分享

一句话识别

前提条件

  • 确保已经按照配置好iOS开发环境。
  • 已经保存好1分钟内音频文件,建议使用16k16bit进行录音并保存为wav格式。
  • 请参考SDK(websocket)获取最新版本SDK包。

初始化Client

初始化SASRClient,参数为AuthInfo,详见表1。

表1 AuthInfo

参数名称

是否必选

参数类型

描述

ak

是

String

用户的ak,可参考AK/SK认证。

sk

是

String

用户的sk,可参考AK/SK认证。

region

是

String

区域,如cn-north-4,参考终端节点。

projectId

是

String

项目ID,同region一一对应,参考获取项目ID。

请求参数

请求类为SASRConfig和语音数据data,详见表2。

表2 SASRConfig

参数名称

是否必选

参数类型

描述

config

是

Config object

配置信息。

data

是

String

本地音频文件经过Base64编码后的字符串,音频文件时长小于60s。

表3 Config

参数名称

是否必选

参数类型

描述

audioFormat

是

String

音频格式,具体信息请参见《API参考》中一句话识别章节。

property

是

String

属性字符串,语言_采样率_模型,如chinese_16k_general。具体信息请参见《API参考》中一句话识别章节。

addPunc

否

String

表示是否在识别结果中添加标点,取值为yes 、 no,默认no。

digitNorm

否

String

表示是否将语音中的数字识别为阿拉伯数字,取值为yes 、 no,默认为yes。

vocabularyId

否

String

热词表id,不使用则不填写。

创建热词表请参考《API参考》中创建热词表章节。

响应参数

响应类为SASRResponse,详见表4。调用失败处理方法请参见错误码。

表4 SASRResponse

参数名

是否必选

参数类型

说明

traceId

是

String

服务内部的令牌,可用于在日志中追溯具体流程,调用失败无此字段。

在某些错误情况下可能没有此令牌字符串。

result

是

SASRResult

调用成功表示识别结果,调用失败时无此字段。请参考表5。

表5 SASRResult

参数名

是否必选

参数类型

说明

text

是

String

调用成功表示识别出的内容。

score

是

Float

调用成功表示识别出的置信度,取值范围:0~1。

代码示例

如下示例仅供参考,最新代码请前往SDK(websocket)章节获取并运行。

import SwiftUI
import AVFoundation
import SIS

struct Config {

  
    static let region = "cn-north-4"
    static let projectId = ""
}

class HTTPClientDelegate: HTTPDelegate, ObservableObject {

    @Published var result = ""
    func onMessage(response: SASRResponse) {
        self.result = response.result.text

    }

    func onError(response: SASRErrorResponse) {
        self.result = response.errorMsg
    }
}

enum STATE {
    case IDLE
    case RECORDING
}

struct SASRView: View {
    @ObservedObject var delegate = HTTPClientDelegate()
    @State var client: SASRClient?
    @State var recordStatus = STATE.IDLE
    @State var recorder: AudioFileRecorder?

    var body: some View {
        VStack {
            Button("开始录音") {
                do {
                    try AVAudioSession.sharedInstance().setCategory(.record)
                    try AVAudioSession.sharedInstance().setActive(true)
                } catch {
                    self.delegate.result = "初始化录音失败"
                    return
                }
                //认证用的AK和SK硬编码在代码中或明文存储都有很大安全风险,建议在配置文件或环境变量中密文存放,使用时解密,确保安全。
                //本示例以AK和SK保存在环境变量中来实现身份验证为例,运行本示例请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
                let ak = ProcessInfo.processInfo.environment["HUAWEICLOUD_SDK_AK"]!
                let sk = ProcessInfo.processInfo.environment["HUAWEICLOUD_SDK_SK"]!
                let authInfo = AuthInfo(ak: ak, sk: sk, region: Config.region, projectId: Config.projectId)
                self.client = SASRClient(auth: authInfo)
                self.client!.delegate = self.delegate
                self.recorder = AudioFileRecorder()
                self.recorder?.start()
                self.delegate.result = ""
                self.recordStatus = .RECORDING
            }
            .buttonStyle(.borderedProminent)
            .disabled(self.recordStatus == .RECORDING)

            Button("停止录音") {
                self.recorder?.stop()
                let filePath = self.recorder?.filePath
                let binData = try! Data(contentsOf: URL(fileURLWithPath: filePath!))
                let base64Data = binData.base64EncodedData()
                let strData = String(decoding: base64Data, as: UTF8.self)
                var config = SASRConfig()
                config.addPunc = "yes"
                config.digitNorm = "no"
                let sasrRequest = SASRRequest(config: config, data: strData)
                self.client!.transcribe(request: sasrRequest)
                self.recordStatus = .IDLE
            }
            .buttonStyle(.borderedProminent)
            .disabled(self.recordStatus == .IDLE)
            Text(delegate.result)
        }
        .padding()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        SASRView()
    }
}

相关文档