ai-clone/frontend-ai/unpackage/dist/build/mp-weixin/pages/upload-audio/upload-audio.js

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(this.recorderManager)try{this.recorderManager.start({duration:6e4,sampleRate:16e3,numberOfChannels:1,encodeBitRate:96e3,format:"mp3"})}catch(t){console.error("启动录音失败:",t),e.index.showModal({title:"时光意境",content:"麦克风被其他应用占用\n\n请关闭其他使用麦克风的应用",confirmText:"确定",showCancel:!1})}else e.index.showToast({title:"录音初始化失败",icon:"none"})},stopRecord(){this.recorderManager&&this.isRecording&&this.recorderManager.stop()},playAudio(){this.innerAudioContext||(this.innerAudioContext=e.index.createInnerAudioContext(),this.innerAudioContext.src=this.audioPath,this.innerAudioContext.onPlay((()=>{this.isPlaying=!0})),this.innerAudioContext.onPause((()=>{this.isPlaying=!1})),this.innerAudioContext.onEnded((()=>{this.isPlaying=!1})),this.innerAudioContext.onError((t=>{console.error("音频播放失败:",t),this.isPlaying=!1,e.index.showToast({title:"播放失败",icon:"none"})}))),this.isPlaying?this.innerAudioContext.pause():this.innerAudioContext.play()},deleteAudio(){this.innerAudioContext&&(this.innerAudioContext.stop(),this.innerAudioContext.destroy(),this.innerAudioContext=null),this.audioPath="",this.audioName="",this.isPlaying=!1},handleSubmit(){if(this.uploading)return;if(!this.canSubmit)return void e.index.showToast({title:this.voiceName.trim()?"请先录制音频":"请填写音色名称",icon:"none"});const o=e.index.getStorageSync("userId");if(!o)return e.index.showToast({title:"请先登录",icon:"none"}),void setTimeout((()=>{e.index.navigateTo({url:"/pages/login/login"})}),1500);(()=>{this.uploading=!0;const i=e.index.getStorageSync("token")||"",n=`recording_${Date.now()}.mp3`,r=this.useCosyVoice?"/api/voice/cosy-create":"/api/voice/create";e.index.uploadFile({url:`${t.API_BASE}${r}`,filePath:this.audioPath,name:"audio",fileName:n,formData:{name:this.voiceName,displayName:this.voiceName},header:{"X-User-Id":o,Authorization:i?`Bearer ${i}`:""},success:t=>{console.log("上传响应:",t);try{const o="string"==typeof t.data?JSON.parse(t.data):t.data;if(console.log("解析后的数据:",o),console.log("状态码:",t.statusCode),200===t.statusCode&&o.success)return e.index.showToast({title:"音色创建成功",icon:"success",duration:2e3}),void setTimeout((()=>{e.index.navigateBack()}),2e3);if(402===t.statusCode)return void e.index.showModal({title:"需要付费",content:o&&o.message?o.message:"免费次数已用完,请先完成支付",showCancel:!1});console.error("服务器错误:",o&&(o.message||o.error)?o.message||o.error:`服务器错误 (${t.statusCode})`,o),e.index.showModal({title:"创建失败",content:o&&o.message?o.message:"创建失败,请重试",showCancel:!1})}catch(o){console.error("处理响应失败:",o),e.index.showModal({title:"创建失败",content:"创建失败,请重试",showCancel:!1})}},fail:t=>{console.error("上传失败:",t),e.index.showModal({title:"创建失败",content:"网络请求失败,请检查网络连接",showCancel:!1})},complete:()=>{this.uploading=!1}})})()}}};const i=e._export_sfc(o,[["render",function(t,o,i,n,r,s){return e.e({a:r.voiceName,b:e.o((e=>r.voiceName=e.detail.value)),c:r.useCosyVoice,d:e.o(((...e)=>s.onUseCosyVoiceChange&&s.onUseCosyVoiceChange(...e))),e:e.o(((...e)=>s.switchReferenceText&&s.switchReferenceText(...e))),f:e.t(s.referenceText),g:e.o(((...e)=>s.copyReferenceText&&s.copyReferenceText(...e))),h:!r.audioPath},r.audioPath?{}:{i:r.isRecording,j:e.o(((...e)=>s.startRecord&&s.startRecord(...e)))},{k:!r.audioPath},r.audioPath?{o:e.t(r.audioName),p:e.t(r.isPlaying?"暂停":"播放"),q:e.o(((...e)=>s.playAudio&&s.playAudio(...e))),r:e.o(((...e)=>s.deleteAudio&&s.deleteAudio(...e)))}:e.e({l:r.isRecording},r.isRecording?{m:e.t(r.recordDuration),n:e.o(((...e)=>s.stopRecord&&s.stopRecord(...e)))}:{}),{s:r.uploading},(r.uploading,{}),{t:!s.canSubmit||r.uploading,v:e.o(((...e)=>s.handleSubmit&&s.handleSubmit(...e)))})}],["__scopeId","data-v-84d46214"]]);wx.createPage(i);