语音交互服务 SIS-一句话识别:代码示例

时间:2023-11-20 11:21:53

代码示例

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

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()
    }
}
support.huaweicloud.com/sdkreference-sis/sis_05_0096.html