语音交互服务 SIS-实时语音识别连续模式:示例代码

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

示例代码

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

import SwiftUI
import AVFAudio
import SIS

struct Config {
    static let region = "cn-north-4"
    static let projectId = ""
}

class WebSocketDelegate: NSObject, WebSocketConnectionDelegate, ObservableObject {

    @Published var result = ""
    func onConnected(connection: WebSocketConnection) {
        print("connected")
    }

    func onDisconnected(connection: WebSocketConnection) {
        print("disconnected")
    }

    func onError(connection: WebSocketConnection, error: Error) {
        print(error.localizedDescription)
    }

    func onMessage(connection: WebSocketConnection, response: RASRResponse) {
        if response.respType == "RESULT" {
            self.result = response.segments![0].result.text
        }else if (response.respType == "ERROR"){
            self.result = response.errorMsg!
        }
    }
}

enum STATUS {
    case IDLE
    case TRANSCRIBING
}

struct RASRView: View {
    @ObservedObject var delegate = WebSocketDelegate()
    @State var client: RASRClient?
    @State var status = STATUS.IDLE

    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)
                var config = RASRConfig()
                config.addPunc = "yes"
                config.digitNorm = "no"
                config.interimResults = "yes"
                self.client = RASRClient(auth: authInfo, config: config)
                self.delegate.result = ""
                self.client?.delegate = self.delegate
                self.client?.start()
                self.status = .TRANSCRIBING
            }
            .buttonStyle(.borderedProminent)
            .disabled(self.status == .TRANSCRIBING)

            Button("停止录音") {
                self.client?.stop()
                self.status = .IDLE
            }
            .buttonStyle(.borderedProminent)
            .disabled(self.status == .IDLE)
            Text(self.delegate.result)
        }
        .padding()
    }
}

struct RealTimeView_Previews: PreviewProvider {
    static var previews: some View {
        RASRView()
    }
}
support.huaweicloud.com/sdkreference-sis/sis_05_0097.html