How to record and play audio in JavaScript ? - GeeksforGeeks

24 Mar, 2022
JavaScript is a very flexible language and it provides many API support to do many useful things. Here one important thing is that record audio or video in web pages is also done using JavaScript. In this case, it will ask the user for microphone access to the browser and record the audio through the microphone and save the audio data chunks in form of binary value in an array and when we play the audio then retrieve chuck data and start playing. The same thing happens for video also, when we do video conferences then this actually happens in the server, only thing is that here we play the video at the same page, and in case of video conference the video will play at the other end.
This whole thing happens using an API, which is MediaRecorder API. This API provides functionality to record media such as audio or video. It is created using the MediaRecorder() constructor.
Here we use one property of JavaScript, which is mediaDevices property, which is used to get access to connected input media devices like microphones, webcams, etc. This property uses a method getUserMedia() to get permission for accessing the microphone, webcam etc. This method returns a promise to the navigator object.
The Promises are as follows:
If true:
resolve : If all permissions are achieved and the microphone or camera are working fine, then it returns a MediaStream object. This is the main recorded data.
If false:
NotAllowedError: If the user reject the permission for recording.
NotFoundError: If there is no media track.
NotReadableError: If the input devices are not found or the hardware is not working.
OverconstrainedError: If constraint audio settings are preventing.
AbortError: If generic unknown cause is found.
TypeError: If audio: false stated in the Javascript code.
Example: 
javascript
<!DOCTYPE html><html> <head>  <script>     let audioIN = { audio: true };    //  audio is true, for recording     // Access the permission for use    // the microphone    navigator.mediaDevices.getUserMedia(audioIN)       // 'then()' method returns a Promise      .then(function (mediaStreamObj) {         // Connect the media stream to the        // first audio element        let audio = document.querySelector('audio');        //returns the recorded audio via 'audio' tag         // 'srcObject' is a property which        // takes the media object        // This is supported in the newer browsers        if ("srcObject" in audio) {          audio.srcObject = mediaStreamObj;        }        else {   // Old version          audio.src = window.URL            .createObjectURL(mediaStreamObj);        }         // It will play the audio        audio.onloadedmetadata = function (ev) {           // Play the audio in the 2nd audio          // element what is being recorded          audio.play();        };         // Start record        let start = document.getElementById('btnStart');         // Stop record        let stop = document.getElementById('btnStop');         // 2nd audio tag for play the audio        let playAudio = document.getElementById('adioPlay');         // This is the main thing to recorded        // the audio 'MediaRecorder' API        let mediaRecorder = new MediaRecorder(mediaStreamObj);        // Pass the audio stream         // Start event        start.addEventListener('click', function (ev) {          mediaRecorder.start();          // console.log(mediaRecorder.state);        })         // Stop event        stop.addEventListener('click', function (ev) {          mediaRecorder.stop();          // console.log(mediaRecorder.state);        });         // If audio data available then push        // it to the chunk array        mediaRecorder.ondataavailable = function (ev) {          dataArray.push(ev.data);        }         // Chunk array to store the audio data        let dataArray = [];         // Convert the audio data in to blob        // after stopping the recording        mediaRecorder.onstop = function (ev) {           // blob of type mp3          let audioData = new Blob(dataArray,                    { 'type': 'audio/mp3;' });                     // After fill up the chunk          // array make it empty          dataArray = [];           // Creating audio url with reference          // of created blob named 'audioData'          let audioSrc = window.URL              .createObjectURL(audioData);           // Pass the audio url to the 2nd video tag          playAudio.src = audioSrc;        }      })       // If any error occurs then handles the error      .catch(function (err) {        console.log(err.name, err.message);      });  </script></head> <body style="background-color:rgb(101, 185, 17); ">  <header>    <h1>Record and Play Audio in JavaScript</h1>  </header>  <!--button for 'start recording'-->  <p>    <button id="btnStart">START RECORDING</button>          &nbsp;&nbsp;&nbsp;&nbsp;    <button id="btnStop">STOP RECORDING</button>    <!--button for 'stop recording'-->  </p>   <!--for record-->  <audio controls></audio>  <!--'controls' use for add    play, pause, and volume-->   <!--for play the audio-->  <audio id="audioPlay" controls></audio></body> </html>
Output:  
simmytarika5
surinderdawra388
HTML-Misc
JavaScript-Misc
Picked
HTML
JavaScript
Web Technologies
Web technologies Questions
HTML
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
How to update Node.js and NPM to next version ?
How to Insert Form Data into Database using PHP ?
REST API (Introduction)
Types of CSS (Cascading Style Sheet)
Form validation using HTML and JavaScript
Convert a string to an integer in JavaScript
How to calculate the number of days between two dates in javascript?
Difference between var, let and const keywords in JavaScript
Differences between Functional Components and Class Components in React
File uploading in React.js