0

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

我非常确定订阅密钥是有效的,因为当我使用获取令牌时它会响应 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();
    }

};

4

1 回答 1

0

首先,写

let form = new FormData();

代替

let form = new formData();

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

uri:audioFile

所以最终的实施将是

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));
于 2021-05-05T08:24:27.990 回答