maxiaoxiao 10 miesięcy temu
rodzic
commit
b25b02077f
1 zmienionych plików z 87 dodań i 0 usunięć
  1. 87 0
      src/views/aiModel/record.js

+ 87 - 0
src/views/aiModel/record.js

@@ -0,0 +1,87 @@
+//必须引入的核心
+import Recorder from 'recorder-core';
+//引入mp3格式支持文件;如果需要多个格式支持,把这些格式的编码引擎js文件放到后面统统引入进来即可
+import 'recorder-core/src/engine/mp3';
+import 'recorder-core/src/engine/mp3-engine';
+//录制wav格式的用这一句就行
+import 'recorder-core/src/engine/wav';
+
+const record = {
+  RecordApp: null,
+  recBlob: null,
+  /**麦克风授权 */
+  getPermission: (fn) => {
+    const newRec = Recorder({
+      type: 'wav',
+      bitRate: 16,
+      sampleRate: 16000, //阿里采样率16000
+      onProcess: function (buffers, powerLevel, duration, bufferSampleRate) {
+        console.log(buffers);
+      },
+    });
+    //打开录音,获得权限
+    newRec.open(
+      () => {
+        record.RecordApp = newRec;
+        fn({ status: 'success', data: '开启成功' });
+      },
+      (msg, isUserNotAllow) => {
+        //用户拒绝了录音权限,或者浏览器不支持录音
+        fn({ status: 'fail', data: msg });
+        console.log((isUserNotAllow ? 'UserNotAllow,' : '') + '无法录音:' + msg);
+      }
+    );
+  },
+  /**开始录音 */
+  startRecorder: () => {
+    if (record.RecordApp && Recorder.IsOpen()) {
+      record.RecordApp.start();
+    }
+  },
+  /** 停止录音 */
+  stopRecorder: (fn) => {
+    try {
+      if (!record) {
+        console.error('未打开录音');
+        return;
+      }
+      record.RecordApp.stop((blob, duration) => {
+        console.log('录音成功', blob, '时长:' + duration + 'ms');
+        if (blob) {
+          record.recBlob = blob;
+          const formData = new FormData();
+          formData.append('audio', blob);
+          fn({ loading: true });
+        }
+        /* eslint-enable */
+        record.RecordApp.close();
+        record.RecordApp = null;
+      });
+    } catch (err) {
+      fn({ err: err });
+      console.error('结束录音出错:' + err);
+      record.RecordApp.close();
+      record.RecordApp = null;
+    }
+  },
+  /**关闭录音,释放麦克风资源 */
+  destroyRecorder: () => {
+    if (record.RecordApp) {
+      record.RecordApp.close();
+      record.RecordApp = null;
+    }
+  },
+  /**暂停 */
+  pauseRecorder: () => {
+    if (record.RecordApp) {
+      record.RecordApp.pause();
+    }
+  },
+  /**恢复继续录音 */
+  resumeRecorder: () => {
+    if (record.RecordApp) {
+      record.RecordApp.resume();
+    }
+  },
+};
+export default record;