Как исправить проблему с audio.play ()?

Я пытаюсь использовать объект JavaScript Audio. Я очень внимательно слежу за этим руководством: https://medium.com/@bryanjenningz/how-to-record-and-play-audio-in-javascript-faa1b2b3e49b.

В части 6 я должен вызвать play () для объекта Audio, но я получаю сообщение об ошибке «Uncaught TypeError: audio.play не является функцией», и я не уверен, что делаю неправильно. Любая помощь?

Обновлено: код до сих пор:

import React, { Component } from 'react'

class Audio extends Component {

  constructor() {
    super();
    this.state = {
      showButton: true,
    };
  }

  recordAudio = () => {
    this.setState({ showButton: false })

    navigator.mediaDevices.getUserMedia({ audio: true })
    .then(stream => {
      this.setState({ mediaRecorder: new MediaRecorder(stream) })
      this.state.mediaRecorder.start();

      const audioChunks = [];

      this.state.mediaRecorder.addEventListener("dataavailable", event => {
        audioChunks.push(event.data);
      });

      this.state.mediaRecorder.addEventListener("stop", () => {
        const audioBlob = new Blob(audioChunks);
        const audioUrl = URL.createObjectURL(audioBlob);
        const audio = new Audio(audioUrl);
        console.info(audio);
        audio.play();
      });
    });
  }

  stopRecording = () => {
    this.setState({ showButton: true })
    this.state.mediaRecorder.stop();
  }

  render() {
    return (
      <div>

      {/* This is a ternary operator that changes the button that is shown  */}
      {
        this.state.showButton ?
        <button type = "button" onClick = {this.recordAudio}> Start Recording </button> :
        <button type = "button" onClick = {this.stopRecording}> Stop Recording </button>
      }

      </div>

    )
  }

}

export default Audio;

Обновлено: вывод console.info (аудио):

Audio {props: undefined, context: undefined, refs: {…}, updater: {…}, recordAudio: ƒ, …}
    context:undefined
    props:undefined
    recordAudio:ƒ ()
    refs:{}
    state:{showButton: true}
    stopRecording:ƒ ()
    updater:{isMounted: ƒ, enqueueForceUpdate: ƒ, enqueueReplaceState: ƒ, enqueueSetState: ƒ}
    isMounted:(...)
    replaceState:(...)
    __proto__:ReactComponent

Пожалуйста, предоставьте нам код, который вы написали до сих пор.

Adam Chubbuck 23.08.2018 21:30

Что возвращает console.info(audio)?

Misha Saidov 23.08.2018 21:30

Спасибо, что обновили свой пост. Как сказал Миша, что выводит console.info(audio)?

Adam Chubbuck 23.08.2018 21:38

Я добавил вывод console.info (аудио). Есть ли у вас какие-либо мысли о том, что может пойти не так?

CuriousProgrammer70184 23.08.2018 21:58

В этом контексте Audio - это класс вашего компонента, а не конструктор window.Audio по умолчанию. Так что лучше всего было бы переименовать свой класс во что-то более конкретное. Другим решением менее хорошо может быть вызов window.Audio, если вы не перезаписали его своим классом. И столь же менее хорошее решение - вызвать audio = document.createElement('audio'); audio.preload = 'auto'; audio.src = url, поскольку это то, что делает звук по умолчанию.

Kaiido 24.08.2018 02:16
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
467
1

Ответы 1

Комментарий Кайидо решил проблему для меня. Поскольку я назвал свой класс «Audio» и вызывал конструктор «Audio» (когда я думал, что вызываю window.Audio), он не создавал соответствующий объект.

Согласно их решению, либо переименуйте класс, вызовите window.Audio, либо вызовите функциональность window.Audio по умолчанию, как подробно описано в их комментарии.

Другие вопросы по теме