SanHQin hai 2 meses
pai
achega
580ea88527

+ 1 - 1
dist/index.html

@@ -32,7 +32,7 @@
       width: 100%;
       background: #e6eaf0;
       font-family: '黑体';
-    }</style><link href=./static/css/app.b30ce94304e5f11de51401700b3973c2.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.161e82026ac2ae03ab6f.js></script><script type=text/javascript src=./static/js/vendor.bb486323f0fa002ba2e7.js></script><script type=text/javascript src=./static/js/app.d37f5adf896fc04e72d1.js></script></body></html><script>function stopSafari() {
+    }</style><link href=./static/css/app.9a2fe626a84a71e28c654e04b1115f31.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.161e82026ac2ae03ab6f.js></script><script type=text/javascript src=./static/js/vendor.bb486323f0fa002ba2e7.js></script><script type=text/javascript src=./static/js/app.5b5fdd5f51c4af32f47b.js></script></body></html><script>function stopSafari() {
     //阻止safari浏览器双击放大功能
     let lastTouchEnd = 0  //更新手指弹起的时间
     document.documentElement.addEventListener("touchstart", function (event) {

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
dist/static/css/app.9a2fe626a84a71e28c654e04b1115f31.css


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
dist/static/css/app.9a2fe626a84a71e28c654e04b1115f31.css.map


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
dist/static/js/app.5b5fdd5f51c4af32f47b.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
dist/static/js/app.5b5fdd5f51c4af32f47b.js.map


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
dist/static/js/manifest.161e82026ac2ae03ab6f.js.map


+ 18 - 3
src/components/pages/classroomObservation/dialog/batchCreationClassDialog.vue

@@ -314,7 +314,7 @@ export default {
               progress: "0"
             }
           ];
-        } else if (i.type == "audio/wav") {
+        } else if (["audio/wav",'audio/x-m4a'].includes(i.type) ) {
           data.jsonData.baseMessage.imageList.fileList = [
             {
               name: i.name,
@@ -829,7 +829,8 @@ export default {
               console.log("data👉",JSON.parse(JSON.stringify(_startData)))
             } else if (
               fileData.type === "video/mp4" ||
-              fileData.type === "audio/wav"
+              fileData.type === "audio/wav" ||
+              fileData.type === "audio/x-m4a"
             ) {
               //mp4与wav文件
               _stepList[i].status = "2";
@@ -840,8 +841,22 @@ export default {
               let _file = _startData.jsonData.fileData.fileObj;
               if(!_file && JSON.stringify(_file)!="{}"){
                 let fileBody = await this.getFileBody(_startData.jsonData.fileData.url);
-                _file = new File([fileBody.data], 'audio.wav', { type: 'audio/wav' });
+                let _type = _startData.jsonData.fileData.type.split('/')[1];
+                if(_type=='x-m4a'){
+                  _type="m4a"
+                }
+                _file = new File([fileBody.data], `audio.${_type}`, { type: _startData.jsonData.fileData.type });
+              }
+
+              if (_file.type === "audio/x-m4a") {
+                let _data = await this.m4aToWavMixin(_file);
+                if(_data!==1){
+                  _file = _data.data;
+                }else{
+                  console.log("报错👉",_data)
+                }
               }
+              console.log("转录文件",_file)
 
               let {
                 transcriptionContent,

+ 7 - 7
src/components/pages/classroomObservation/dialog/uploadFileToCreateClassDialog.vue

@@ -24,17 +24,17 @@
               <div class="fl_item" v-for="item in fileList" :key="item.index">
                 <div class="fl_i_left">
                   <img
-                   v-if="item.type =='text/plain'"
+                   v-if="['text/plain'].includes(item.type)"
                     src="../../../../assets/icon/classroomObservation/textFile_icon.svg"
                   />
 
                   <img
-                   v-if="item.type =='audio/wav'"
+                   v-if="['audio/wav','audio/x-m4a'].includes(item.type)"
                     src="../../../../assets/icon/classroomObservation/audio_file.svg"
                   />
 
                   <img
-                   v-if="item.type =='video/mp4'"
+                   v-if="['video/mp4'].includes(item.type)"
                     src="../../../../assets/icon/classroomObservation/videoFile_icon.svg"
                   />
                 </div>
@@ -80,7 +80,7 @@
               <img
                 src="../../../../assets/icon/classroomObservation/file_processing.svg"
               />
-              <span>文件格式支持:mp4、wav、txt 文件</span>
+              <span>文件格式支持:mp4、wav、m4a、txt 文件</span>
             </div>
           </div>
           <div class="b_m_right">
@@ -230,7 +230,7 @@ export default {
     addFile() {
       let input = document.createElement("input");
       input.type = "file";
-      input.accept = "video/mp4, audio/wav, text/plain";
+      input.accept = "video/mp4, audio/wav, audio/x-m4a, text/plain";
       input.multiple = true; // 支持多文件上传
       input.style.display = "none";
 
@@ -240,7 +240,7 @@ export default {
         let files = e.target.files;
         for (let i = 0; i < files.length; i++) {
           if (
-            ["video/mp4", "audio/wav", "text/plain"].includes(files[i].type)
+            ["video/mp4", "audio/wav", "audio/x-m4a", "text/plain"].includes(files[i].type)
           ) {
             this.fileList.push({
               file: files[i],
@@ -253,7 +253,7 @@ export default {
               status: "wait"
             });
           } else {
-            this.$message.info("文件格式不支持,仅支持mp4、wav、txt文件。");
+            this.$message.info("文件格式不支持,仅支持mp4、wav、m4a、txt文件。");
           }
         }
         if (!this.fileList.some(i => i.status === "uploading")) {

+ 3 - 3
src/components/pages/classroomObservation/newComponents/batchClassCard.vue

@@ -8,15 +8,15 @@
         <div class="bcc_r_t_left">
           <div class="bcc_r_t_l_image">
             <img
-              v-if="cardData.jsonData.fileData.type == 'text/plain'"
+              v-if="['text/plain'].includes(cardData.jsonData.fileData.type)"
               src="../../../../assets/icon/classroomObservation/file_icon.svg"
             />
             <img
-              v-if="cardData.jsonData.fileData.type == 'audio/wav'"
+              v-if="['audio/wav','audio/x-m4a'].includes(cardData.jsonData.fileData.type)"
               src="../../../../assets/icon/classroomObservation/audio_file.svg"
             />
             <img
-              v-if="cardData.jsonData.fileData.type == 'video/mp4'"
+              v-if="['video/mp4'].includes(cardData.jsonData.fileData.type)"
               src="../../../../assets/icon/classroomObservation/videoFile_icon.svg"
             />
           </div>

+ 36 - 6
src/components/pages/classroomObservation/tools/mixin.js

@@ -175,7 +175,7 @@ ${arr.map(row => `<tr>
               // blob转成file文件
               const audioFile = new File([wavBlob], 'audio.wav', { type: 'audio/wav' });
               this.uploadFileMixin(audioFile).then(upload => {
-                resolve({ audioUrl: upload,fileObj:audioFile })
+                resolve({ audioUrl: upload, fileObj: audioFile })
               })
             } catch (error) {
               console.log("👉", error);
@@ -270,7 +270,7 @@ ${arr.map(row => `<tr>
         // axios({
       });
     },
-    getFileBody(url){
+    getFileBody(url) {
       return new Promise((resolve, reject) => {
         var credentials = {
           accessKeyId: "AKIATLPEDU37QV5CHLMH",
@@ -1334,7 +1334,7 @@ CH:${_CH}
         // 说话人身份编码
         while (tableList.some(i => i.role.indexOf("Guest") != -1 && i.role !== '')) {
           let _ajaxList = tableList.filter(i => i.role.indexOf("Guest") != -1 && i.role !== '').slice(0, 10);
-          console.log(`说话人身份编码:`,_ajaxList)
+          console.log(`说话人身份编码:`, _ajaxList)
           const params = {
             inputs: {
               options: "老师,学生",
@@ -1396,9 +1396,9 @@ CH:${_CH}
 
         console.log("说话人行为编码开始")
         //说话人行为编码
-        while (tableList.some(i => i.code == "" && i.role.indexOf("Guest") == -1 && i.value!="")) {
-          let _ajaxList = tableList.filter(i => i.code == "" && i.role.indexOf("Guest") == -1 && i.value!="").slice(0, 10);
-          console.log(`说话人行为编码:`,_ajaxList)
+        while (tableList.some(i => i.code == "" && i.role.indexOf("Guest") == -1 && i.value != "")) {
+          let _ajaxList = tableList.filter(i => i.code == "" && i.role.indexOf("Guest") == -1 && i.value != "").slice(0, 10);
+          console.log(`说话人行为编码:`, _ajaxList)
           let params = {
             inputs: {
               rows: JSON.stringify(
@@ -1476,5 +1476,35 @@ CH:${_CH}
           });
       });
     },
+    //m4a转wav
+    m4aToWavMixin(fileObj) {
+      return new Promise((resolve) => {
+        const audioContext = new (window.AudioContext || window.webkitAudioContext)();
+
+        const reader = new FileReader();
+
+        reader.onload = (e)=>{
+          const arrayBuffer = e.target.result;
+
+          // 解码音频数据
+          audioContext.decodeAudioData(arrayBuffer)
+            .then(audioBuffer => {
+
+              let wavBlob = this.bufferToWav(audioBuffer);
+              // 在控制台输出WAV文件对象
+              resolve({ data: wavBlob })
+              console.log('转换后的WAV文件对象:', wavBlob);
+            })
+            .catch(err => {
+              resolve({ data: 1, err: err })
+            });
+        };
+        reader.onerror = (e) => {
+          resolve({ data: 1, err: e })
+        };
+
+        reader.readAsArrayBuffer(fileObj);
+      })
+    }
   }
 };

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio