maxiaoxiao 10 mēneši atpakaļ
vecāks
revīzija
55e56752e9
2 mainītis faili ar 45 papildinājumiem un 20 dzēšanām
  1. 25 10
      src/views/aiModel/index.vue
  2. 20 10
      src/views/aiModel/record.js

+ 25 - 10
src/views/aiModel/index.vue

@@ -129,23 +129,17 @@ export default {
     },
     /**初始化 */
     init() {
+      let _this = this;
       record.getPermission(function (permiss) {
         if (permiss.status == "fail") {
-          createMessage.warning(permiss.data);
+          _this.$message.warning("语音识别出错: " + permiss.data);
         } else {
           record.startRecorder();
-          // state.confLoading = true;
+          _this.$message.success("开始语音识别...");
+          _this.spdisabled = true;
         }
       });
     },
-    /**结束录音 */
-    stopRec() {
-      // state.loading = true;
-      // state.confLoading = true;
-      record.stopRecorder(function (res) {
-        /**处理 */
-      });
-    },
     sendDefault() {
       this.sendContent = this.defaultMsg;
       // this.send();
@@ -168,6 +162,27 @@ export default {
         // if (!recognition) this.initSpeech();
         // recognition.start(); // 开始语音识别
         this.init();
+      } else {
+        /**结束录音 */
+        record.stopRecorder(function (res) {
+          console.log("-blob----",res.blob);
+          /**处理 */
+          axios({
+            method: "POST",
+            url: `${window.aiURI}/upload`,
+            data: { file: res.blob },
+            headers: {
+              "Content-Type": "application/json",
+            },
+          })
+            .then((mres) => {
+              if (mres.status == 200) {
+              } else {
+              }
+            })
+            .catch(() => {});
+        });
+        this.spdisabled = false;
       }
     },
     sendToBackend(msg, mindex) {

+ 20 - 10
src/views/aiModel/record.js

@@ -1,23 +1,33 @@
-//必须引入的核心
 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';
-
+// import { RecordType } from './type';
+var rec, wave, recBlob;
 const record = {
   RecordApp: null,
   recBlob: null,
   /**麦克风授权 */
   getPermission: (fn) => {
+    rec = null;
+    wave = null;
+    recBlob = null;
+
     const newRec = Recorder({
-      type: 'wav',
+      //mp3格式,指定采样率hz、比特率kbps,其他参数使用默认配置;注意:是数字的参数必须提供数字,不要用字符串;需要使用的type类型,需提前把格式支持文件加载进来,比如使用wav格式需要提前加载wav.js编码引擎
+      type: "mp3",
       bitRate: 16,
-      sampleRate: 16000, //阿里采样率16000
-      onProcess: function (buffers, powerLevel, duration, bufferSampleRate) {
-        console.log(buffers);
-      },
+      sampleRate: 16000,
+      onProcess: function (buffers, powerLevel, bufferDuration, bufferSampleRate, newBufferIdx, asyncEnd) {
+        //录音实时回调,大约1秒调用12次本回调
+        // document.querySelector(".recpowerx").style.width = powerLevel + "%";
+        // document.querySelector(".recpowert").innerText = formatMs(bufferDuration, 1) + " / " + powerLevel;
+
+        //可视化图形绘制
+        // wave.input(buffers[buffers.length - 1], powerLevel, bufferSampleRate);
+      }
     });
     //打开录音,获得权限
     newRec.open(
@@ -49,9 +59,9 @@ const record = {
         console.log('录音成功', blob, '时长:' + duration + 'ms');
         if (blob) {
           record.recBlob = blob;
-          const formData = new FormData();
-          formData.append('audio', blob);
-          fn({ loading: true });
+          // const formData = new FormData();
+          // formData.append('audio', blob);
+          fn({ loading: true, blob });
         }
         /* eslint-enable */
         record.RecordApp.close();