getUserMedia MediaRecorder Данные отсутствуют
Я пытаюсь записать звук в своем проекте Angular. Для этого я использую MediaStream Recording API ( https://developer.mozilla.org/en-US/docs/Web/API/MediaStream_Recording_API).
Он записывает мой аудиовход, и я могу загрузить аудиофайл в соответствии с типом, который я ему предоставляю. Для этого я использую этот бит кода.
navigator.mediaDevices.getUserMedia({audio: true, video: false})
.then(stream => {
mediaRecorder = new MediaRecorder(stream);
mediaRecorder.start();
mediaRecorder.ondataavailable = event => {
audioChunks.push(event.data);
this.translate(audioChunks);
};
this.stopRecording = setTimeout(async() => {
await mediaRecorder.stop();
}, 5000);
});
blob = new Blob(audio, { 'type' : 'audio/x-flac; rate=44100; codecs=opus' });
url = window.URL.createObjectURL(blob);
После этого я отправляю данные как byteArray в мой REST API и отправляю их в Google Speech API v2, используя ( https://www.google.com/speech-api/v2/recognize?)
Теперь это работает, когда я сам создаю аудиофайл, но когда я использую MediaRecorder, ответ, который я получаю, пуст. Теперь я проверил свойства аудиофайлов и вижу, что некоторые свойства отсутствуют (длина звука и битрейт). Помимо свойств я слышу аудио этих файлов.
Есть ли способ добавить эти свойства или есть лучший API для этого?
1 ответ
Работает над аналогичным случаем и имеет такой же пустой ответ от речевого API
Можете ли вы проверить, что у вас есть что-то в объекте blob, который вы создаете? Я использую onstop
создать блоб, затем преобразовать его в base64 и передать в запрос. (разделить и пропустить первую часть, которая является заголовком)
mediaRecorder.onstop = (e) => {
const blob = chunks[0];//new Blob(chunks, { 'type': 'audio/webm;codec=opus' });
var reader = new FileReader();
reader.readAsDataURL(blob);
reader.onloadend = () => {
const base64data = reader.result;
console.info('sending request to gcloud');
expect(base64data).to.exist;
gCloudRequest(base64data.split(',')[1])