Guest User

Untitled

a guest
May 20th, 2018
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.71 KB | None | 0 0
  1. // somewhere in your frontend
  2. // <button id="start">Start</button>
  3. // <button id="stop">Stop</button>
  4. if (navigator.mediaDevices) {
  5. let accessLevel = { audio: true };
  6. let voiceInputData = [];
  7.  
  8. // use a button or use an even to trigger listening
  9. let record = document.getElementById('start');
  10. let stopRecord = document.getElementById('stop');
  11.  
  12. navigator.mediaDevices.getUserMedia(accessLevel)
  13. .then(function (stream) {
  14. let mediaRecorder = new MediaRecorder(stream);
  15.  
  16. // could be done programmatically using background event listeners or triggers
  17. record.addEventListener('click', () => {
  18. mediaRecorder.start();
  19. /* debug > get current state */
  20. console.log(mediaRecorder.state);
  21.  
  22. /* push data to dataArray when available */
  23. mediaRecorder.ondataavailable = (e) => {
  24. voiceInputData.push(e.data);
  25. }
  26. });
  27.  
  28. stopRecord.addEventListener('click', () => {
  29. mediaRecorder.stop();
  30. console.log(mediaRecorder.state);
  31. });
  32.  
  33. mediaRecorder.onstop = () => {
  34.  
  35. // create blob from recorded data
  36. let blob = new Blob(voiceInputData, { 'type': 'audio/wav; codecs=opus' });
  37.  
  38. // encode to base64
  39. let reader = new window.FileReader();
  40. reader.readAsDataURL(blob);
  41. reader.onloadend = () => {
  42. let base64Audio = reader.result.split(',')[1];
  43.  
  44. /* debug > print out the current base64 string */
  45. console.log(base64Audio);
  46. // return base64Audio or send backend
  47. }
  48. }
  49. }).catch(error => {
  50. console.log(error.message);
  51. });
  52. } else {
  53. console.log('not supported')
  54. }
Add Comment
Please, Sign In to add comment