反应原生 wav 文件传递​​问题中的 Azure 语音到文本

问题描述

我想将 Azure 的 STT REST API 用于我的带有录制音频的 react-native 应用程序。 但我尝试搜索如何传递 wav 文件,但总是响应“未收到音频数据”或其他错误响应。

我非常确定订阅密钥是有效的,因为当我使用 get 令牌时,它会响应 200。 wav 文件也不是问题。因为当我将文件下载到我的计算机然后将它上传到 Azure STT 的主页时,它会响应正确的答案。 最后,我试图弄清楚如何以正确的形式传递它,但一切都是为了网站。 这是我的代码 `

  const file = new ReactNativeFile({
    uri:
      `file://${audioFile}`,type: 'audio/wav',name: 'ABCS160101e1a011b160a3e169d7b0.wav',});
  let form = new formData();
  const headers = {
    'Ocp-Apim-Subscription-Key': 'MyKey','Content-type': 'audio/wav; codecs=audio/pcm;samplerate=16000',Accept: 'application/json',};

  const url = `https://eastasia.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1?language=en-US`;

  await form.append('audio',file);

  console.log('before');
  let response = await axios.post(url,form,{
    headers: headers,});
  console.log('after');
  console.log('result',JSON.stringify(response));
} catch (err) {
  getlog.cw('err23',err);
  return err;
}

};`

这是我在另一个地方的录音功能,它正在播放。

import AudioRecord from 'react-native-audio-record';
const options = {
  sampleRate: 16000,// default 44100
  bitsPerSample: 16,// 8 or 16,default 16,wavFile: "ABCS160101e1a011b160a3e169d7b0.wav"
};
     const toggleRecord = async () => {
    if (isRecording) {
      const audioFile = await AudioRecord.stop();
      setIsRecording(false);
      // reloadRecorder();
    } else {
      setIsRecording(true);
      AudioRecord.init(options);
      AudioRecord.start();
    }

};

解决方法

首先写

let form = new FormData();

代替

let form = new formData();

其次,我想您的 audioFile 看起来像这样 - file://...。所以你不必像这样写 uri: file://${audioFile} ..你可以简单地写

uri:audioFile

SO 最终实施将是

let form = new FormData();

    form.append('audio',{
      uri: audioFile,type: 'audio/wav',name: 'ABCS160101e1a011b160a3e169d7b0.wav',});

    const headers = {
      'Ocp-Apim-Subscription-Key': 'MyKey','Content-type': 'audio/wav; codecs=audio/pcm;samplerate=16000',Accept: 'application/json',};

    const url = `https://eastasia.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1?language=en-US`;

    console.log('before');
    let response = await axios.post(url,form,{
      headers: headers,});
    console.log('after');
    console.log('result',JSON.stringify(response));