recorder-h5.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import UNI_APP from '@/.env.js';
  2. let rc = null;
  3. let duration = 0;
  4. let chunks = [];
  5. let stream = null;
  6. let start = () => {
  7. return navigator.mediaDevices.getUserMedia({ audio: true }).then(audioStream => {
  8. const startTime = new Date().getTime();
  9. chunks = [];
  10. stream = audioStream;
  11. rc = new MediaRecorder(stream)
  12. rc.ondataavailable = (e) => {
  13. console.log("ondataavailable")
  14. chunks.push(e.data)
  15. }
  16. rc.onstop = () => {
  17. duration = (new Date().getTime() - startTime) / 1000;
  18. console.log("时长:", duration)
  19. }
  20. rc.start()
  21. })
  22. }
  23. let close = () => {
  24. stream.getTracks().forEach((track) => {
  25. track.stop()
  26. })
  27. rc.stop()
  28. }
  29. let upload = () => {
  30. return new Promise((resolve, reject) => {
  31. setTimeout(() => {
  32. const newbolb = new Blob(chunks, { 'type': 'audio/mpeg' });
  33. const name = new Date().getDate() + '.mp3';
  34. const file = new File([newbolb], name)
  35. console.log("upload")
  36. uni.uploadFile({
  37. url: UNI_APP.BASE_URL + '/file/upload',
  38. header: {
  39. accessToken: uni.getStorageSync("loginInfo").accessToken
  40. },
  41. file: file,
  42. name: 'file',
  43. success: (res) => {
  44. let r = JSON.parse(res.data);
  45. if (r.code != 200) {
  46. console.log(res)
  47. reject(r.message);
  48. } else {
  49. const data = {
  50. duration: parseInt(duration),
  51. url: r.data
  52. }
  53. resolve(data);
  54. }
  55. },
  56. fail: (e) => {
  57. reject(e);
  58. }
  59. })
  60. }, 100)
  61. })
  62. }
  63. export {
  64. start,
  65. close,
  66. upload
  67. }