You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
2.5 KiB
100 lines
2.5 KiB
<template>
|
|
<el-dialog class="chat-voice" title="语言录制" :visible.sync="visible" width="35%" :before-close="handleClose">
|
|
<div>
|
|
录音时长:{{duration}}
|
|
</div>
|
|
|
|
<el-row>
|
|
<el-button round type="primary" v-show="state=='STOP'" @click="handleStartRecord()">开始录音</el-button>
|
|
<el-button round type="warning" v-show="state=='RUNNING'" @click="handlePauseRecord()">暂停录音</el-button>
|
|
<el-button round type="primary" v-show="state=='PAUSE'" @click="handleResumeRecord()">继续录音</el-button>
|
|
<el-button round type="danger" v-show="state=='RUNNING'||state=='PAUSE'" @click="handleCompleteRecord()">结束录音</el-button>
|
|
<el-button round type="success" v-show="state=='COMPLETE'" @click="handlePlayRecord()">播放录音</el-button>
|
|
<el-button round type="primary" v-show="state=='COMPLETE'" @click="handleRestartRecord()">重新录音</el-button>
|
|
<el-button round type="primary" v-show="state=='COMPLETE'" @click="handleSendRecord()">立即发送</el-button>
|
|
</el-row>
|
|
|
|
</el-dialog>
|
|
|
|
</template>
|
|
|
|
<script>
|
|
import Recorderx, {
|
|
ENCODE_TYPE
|
|
} from 'recorderx';
|
|
|
|
export default {
|
|
name: 'chatVoice',
|
|
props: {
|
|
visible: {
|
|
type: Boolean
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
rc: new Recorderx(),
|
|
state: 'STOP', //STOP、RUNNING、PAUSE、COMPLETE
|
|
duration: 0
|
|
}
|
|
},
|
|
methods: {
|
|
handleClose() {
|
|
this.$emit("close");
|
|
},
|
|
handleStartRecord() {
|
|
this.rc.start().then(() => {
|
|
this.$message.success("开始录音");
|
|
}).catch(error => {
|
|
this.$message.error("录音失败" + error.message);
|
|
});
|
|
console.log(this.rc)
|
|
this.state = 'RUNNING';
|
|
},
|
|
handlePauseRecord() {
|
|
this.state = 'PAUSE';
|
|
},
|
|
handleResumeRecord() {
|
|
this.state = 'RUNNING';
|
|
},
|
|
handleCompleteRecord() {
|
|
this.rc.pause()
|
|
let wav = this.rc.getRecord({
|
|
encodeTo: ENCODE_TYPE.WAV,
|
|
});
|
|
console.log(wav);
|
|
this.state = 'COMPLETE';
|
|
},
|
|
handlePlayRecord() {
|
|
|
|
},
|
|
handleRestartRecord() {
|
|
this.state = 'RUNNING';
|
|
},
|
|
handleSendRecord() {
|
|
this.upload();
|
|
},
|
|
upload() {
|
|
let wav = this.rc.getRecord({
|
|
encodeTo: ENCODE_TYPE.WAV,
|
|
});
|
|
let name = new Date().getDate() + '.wav';
|
|
var formData = new window.FormData()
|
|
formData.append('file', wav, name);
|
|
this.$http({
|
|
url: '/file/upload',
|
|
data: formData,
|
|
method: 'post',
|
|
headers: {
|
|
'Content-Type': 'multipart/form-data'
|
|
}
|
|
}).then((url)=>{
|
|
this.$message.success("上传成功");
|
|
console.log(url);
|
|
})
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style>
|
|
</style>
|
|
|