2 lines
7.9 KiB
JavaScript
2 lines
7.9 KiB
JavaScript
|
|
"use strict";const e=require("../../common/vendor.js"),t=require("../../config/api.js"),o={data:()=>({voiceName:"",audioPath:"",audioName:"",audioSize:0,useCosyVoice:!1,referenceTexts:["我想和你说说最近的生活。今天的天气很好,我也在努力让自己过得更开心。希望你也一切都好。","你好呀,最近我过得还不错。今天我想和你聊聊我的心情,也想听听你的近况。","我在一个安静的房间里,正在认真朗读这段文字。希望声音清晰自然,能够帮助创建更好的音色。","今天我精神很好,说话也很清楚。我会保持语速适中、情绪自然,尽量减少停顿与杂音。"],referenceTextIndex:0,uploading:!1,isPlaying:!1,isRecording:!1,recordDuration:0,recordTimer:null,recorderManager:null,innerAudioContext:null}),computed:{canSubmit(){return this.voiceName.trim()&&this.audioPath},referenceText(){return(this.referenceTexts||[])[this.referenceTextIndex]||""}},onLoad(){this.checkLogin(),this.initRecorder()},onUnload(){this.innerAudioContext&&(this.innerAudioContext.stop(),this.innerAudioContext.destroy()),this.recordTimer&&clearInterval(this.recordTimer),this.recorderManager&&this.isRecording&&this.recorderManager.stop()},methods:{onUseCosyVoiceChange(e){this.useCosyVoice=!!(e&&e.detail&&e.detail.value)},copyReferenceText(){e.index.setClipboardData({data:this.referenceText,success:()=>{e.index.showToast({title:"已复制",icon:"success"})}})},switchReferenceText(){const e=this.referenceTexts||[];e.length<=1||(this.referenceTextIndex=(this.referenceTextIndex+1)%e.length)},checkLogin(){const t=e.index.getStorageSync("userId"),o=e.index.getStorageSync("token");return!(!t||!o)||(e.index.showModal({title:"需要登录",content:"请先登录后再创建音色",showCancel:!1,success:()=>{e.index.reLaunch({url:"/pages/login/login"})}}),!1)},initRecorder(){this.recorderManager=e.index.getRecorderManager(),this.recorderManager.onStart((()=>{console.log("录音开始"),this.isRecording=!0,this.recordDuration=0,this.recordTimer=setInterval((()=>{this.recordDuration++,this.recordDuration>=60&&this.stopRecord()}),1e3)})),this.recorderManager.onStop((t=>{console.log("录音停止",t),this.isRecording=!1,this.recordTimer&&(clearInterval(this.recordTimer),this.recordTimer=null),this.recordDuration<3?e.index.showToast({title:"录音时长至少3秒",icon:"none"}):(this.audioPath=t.tempFilePath,this.audioName=`录音_${this.recordDuration}秒.mp3`,e.index.showToast({title:"录音完成",icon:"success"}))})),this.recorderManager.onError((t=>{console.error("录音错误:",t),this.isRecording=!1,this.recordTimer&&(clearInterval(this.recordTimer),this.recordTimer=null),e.index.showToast({title:"录音失败,请重试",icon:"none"})}))},chooseAudioFile(){this.checkLogin()&&e.index.chooseMessageFile({count:1,type:"file",extension:[".mp3",".wav",".m4a",".aac"],success:t=>{const o=t.tempFiles&&t.tempFiles[0];o?o.size>10485760?e.index.showToast({title:"文件大小不能超过10MB",icon:"none"}):(this.audioPath=o.path,this.audioName=o.name||"audio",this.audioSize=o.size||0,this.recordDuration=0,e.index.showToast({title:"已选择音频",icon:"success"})):e.index.showToast({title:"选择文件失败",icon:"none"})},fail:t=>{console.error("选择文件失败:",t),e.index.showToast({title:t.errMsg||"选择文件失败",icon:"none"})}})},startRecord(){this.checkLogin()&&(this.recorderManager||this.initRecorder(),e.index.getSetting({success:t=>{t.authSetting["scope.record"]?this.doStartRecord():!1===t.authSetting["scope.record"]?e.index.showModal({title:"需要录音权限",content:"请在设置中开启录音权限",confirmText:"去设置",success:t=>{t.confirm&&e.index.openSetting({success:e=>{e.authSetting["scope.record"]&&this.doStartRecord()}})}}):e.index.authorize({scope:"scope.record",success:()=>{this.doStartRecord()},fail:()=>{e.index.showModal({title:"需要录音权限",content:"请允许使用麦克风进行录音",confirmText:"去设置",success:t=>{t.confirm&&e.index.openSetting()}})}})},fail:()=>{this.doStartRecord()}}))},doStartRecord(){if(th
|