语音识别问题:使用华为云http直接进行通讯,注意点如下(感谢社区大神Horo~的帮助):

 

IDE、SDK、系统版本:DevEco Studio 3.0.0.991 SDK 3.2.12.2 系统是release3.2

 

  1. 音频的录制,参数需要设置16k16bit单通道录音数据(否则请求成功后只会返回空值),具体接口参考https://docs.openharmony.cn/pages/v3.2/zh-cn/application-dev/reference/apis/js-apis-media.md/#codecmimetype8

 

 

let audioConfig = {
  audioEncodeBitRate : 16000,
  audioSampleRate : 16000,//采样率16k
  numberOfChannels : 1, // 单通道
  uri :'',
  location : { latitude : 30, longitude : 130},
  audioEncoderMime : media.CodecMimeType.AUDIO_AAC, //唯一选择
  fileFormat : media.ContainerFormatType.CFT_MPEG_4A,//唯一选择
}

 

 

  1. 华为云TOKEN的获取:TOKEN在API调试时要全部填写正确,否则请求一句话识别时报错。

(获取TOKEN时我采用API调试:https://console.huaweicloud.com/apiexplorer/#/openapi/IAM/debug?api=KeystoneCreateUserTokenByPassword)

 

{

 "auth": {

  "identity": {

   "methods": [

    "password"

   ],

   "password": {

    "user": {

     "domain": {

      "name": "CSDN-ruihahadaren"

     },

     "name": "CSDN-ruihahadaren"

    }

   }

  },

  "scope": {

   "domain": {

    "id": "ac2f106414f14544ba7366c8ead5ba7e",

    "name": "CSDN-ruihahadaren"

   },

   "project": {

    "id": "24006b8776a84b93b387353e460dff86",

    "name": "cn-north-4"

   }

  }

 }

}

此处的账号需要换自己的账号才可以。所有都要填。

 

  1. 获取Base64的音频,此处感谢社区大神Horo~的帮助,关键代码如下:
let stat = fs.statSync(globalThis.fd) // 获取文件消息
let size = stat.size // 获取文件大小
let buffer = new ArrayBuffer(size)
let stream = fs.fdopenStreamSync(globalThis.fd, 'r') // 打开流
stream.readSync(buffer)
let uint8Array = new Uint8Array(buffer);
let helper = new util.Base64Helper()
this.datas = helper.encodeToStringSync(uint8Array) // base64编码

 

未知原因base64的log一次性打印不出,只能循环打印:

for(var i =0;i<this.datas.length;i++){
  console.log(i+":"+this.datas[i])
}

 

  1. http请求:(因为open Harmony接口的音频编码格式。当前仅支持AUDIO_AAC,对应的音频格式为:mp4a-latm类型。)参考:https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/reference/apis/js-apis-http.md/
globalThis.httpRequest.request("https://sis-ext.cn-north-4.myhuaweicloud.com/v1/24006b8776a84b93b387353e460dff86/asr/short-audio",

                      {
                        method: http.RequestMethod.POST,
                        header: {
                          "X-Auth-Token": globalThis.token, // TOKEN
                          "Content-Type":"application/json"

                        },
                        extraData: {
                          "config": {
                            "audio_format": "auto", //m4a音频,只有这一种符合(前提16k16bit单通道录音数据)
                            "property": "chinese_16k_common",
                            "add_punc": "no",
                            "digit_norm": "yes",
                            "need_word_info": "no"
                          },
                           "data":this.datas // Base64编码
                        },
                        readTimeout: 60000,
                        connectTimeout: 60000
                      }, (err, data) => {

                        if (!err) {
                          console.info('success');
                          console.info(JSON.stringify(data));
                        } else {
                          console.info('error:' + JSON.stringify(err));
                        }
  })

 

 

 

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐