vue 使用浏览器实现录音功能
在项目vue中遇到使用浏览器实现录音功能
要在https下才能实现! 要在https下才能实现!! 要在https下才能实现!!!
如果不是https,解决方案 https://www.cnblogs.com/Sabo-dudu/p/12449985.html
注意: 这里输入的文件格式为mp3,因为 wav格式的文件太大了。
项目是基于 vue-cli3 的pc端应用
1. 下载文件,下载完成后把它放在 根目录 public 文件夹下。
下载地址 链接: https://pan.baidu.com/s/1lSve9B5zbCS21TzOEAhm8w 提取码: qf69
2. 然后在 index.html 中全局引入
<script type="text/javascript" src="/recorder/js/recorder.js"></script>
3. 创建组件 mRecorder.vue
<template><div class="wrap-recorder">
<el-row>
<el-col>
<svg
@click="handleClick"
:class="[\'icon\', {anirecorder: recording } ]"
t="1581399509621"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="3242"
width="50"
height="50"
>
<path
d="M512 1024a512 512 0 1 1 512-512 512 512 0 0 1-512 512z m0-992a480 480 0 1 0 480 480A480 480 0 0 0 512 32z m16 623.2V736h48a16 16 0 0 1 0 32h-128a16 16 0 0 1 0-32h48v-80.8A160 160 0 0 1 352 496a16 16 0 0 1 32 0 128 128 0 0 0 256 0 16 16 0 0 1 32 0 160 160 0 0 1-144 159.2zM512 592a96 96 0 0 1-96-96v-144a96 96 0 0 1 192 0v144a96 96 0 0 1-96 96z m64-240a64 64 0 0 0-128 0v144a64 64 0 0 0 128 0v-144z"
p-id="3243"
fill="#707070"
/>
</svg>
</el-col>
</el-row>
<p class="tip">{{ tiptext }}</p>
</div>
</template>
<script>
export default {
data() {
return {
tiptext: "点击录音",
recording: false, // 标记是否在录音
intervaltimerid: "", // 间隔时间定时器编号
recorder: null,
time: 0
};
},
mounted() {
this.init();
},
methods: {
init() {
this.recorder = new MP3Recorder({
//numChannels: 1, //声道数,默认为1
//sampleRate: 8000, //采样率,一般由设备提供,比如 48000
bitRate: 128, //比特率,不要低于64,否则可能录制无声音(人声)
//useMediaRecorder: true, //是否使用MediaRecorder录音(不支持转码为mp3文件)
//recorderType: "video/webm;codes=vp9", //默认编码,仅 useMediaRecorder 为true且浏览器支持时生效
//录音结束事件
complete: (blob, ext) => {
var url = URL.createObjectURL(blob);
this.$emit("handleStop", {
url: url,
mblob: blob
});
}
});
},
// 点击处理
handleClick() {
//录音支持检测
if (!this.recorder.support) return;
this.recording = !this.recording;
this.$emit("handleStop", {
url: "",
mblob: null,
});
if (this.recording) {
this.time = 0;
this.tiptext = "录音中 " + this.time + "s";
this.recorder.start(this.successFun(), this.errorFun());
} else {
clearInterval(this.intervaltimerid);
this.recorder.stop();
this.tiptext = "点击录音";
}
},
writeError() {},
successFun() {
this.intervaltimerid = setInterval(() => {
// 开始累积
if (this.time == 120) {
this.recorder.stop();
this.recording = false;
this.tiptext = "点击录音";
this.$message.warning("对不起,录音只支持120秒以内的语音!");
clearInterval(this.intervaltimerid);
return false;
}
this.time = this.time + 1;
this.tiptext = "录音中 " + this.time + "s";
}, 1000);
},
errorFun(e) {
// clearInterval(this.intervaltimerid);
// switch (e.code || e.name) {
// case "PERMISSION_DENIED":
// case "PermissionDeniedError":
// // this.writeError("用户拒绝提供设备。");
// break;
// case "NOT_SUPPORTED_ERROR":
// case "NotSupportedError":
// // this.writeError("浏览器不支持硬件设备。");
// break;
// case "MANDATORY_UNSATISFIED_ERROR":
// case "MandatoryUnsatisfiedError":
// // this.writeError("无法发现指定的硬件设备。");
// break;
// default:
// // this.writeError(
// // "无法打开麦克风。异常信息:" + (e.code || e.name)
// // );
// break;
// }
}
}
};
</script>
<style scoped lang="scss">
.wrap-recorder {
text-align: center;
.icon {
cursor: pointer;
}
.tip {
padding-top: 20px;
}
}
.anirecorder {
position: relative;
animation: mymove 5s infinite;
animation-direction: alternate;
animation-timing-function: ease-in-out;
}
@keyframes mymove {
0% {
transform: scale(1); /*开始为原始大小*/
}
25% {
transform: scale(1.1); /*放大1.1倍*/
}
50% {
transform: scale(0.9);
}
75% {
transform: scale(1.1);
}
}
</style>
View Code
4. 然后引入该组件
<MRecorder @handleStop="handelEndRecord" />methods:{
// 录音处理结束事件
handelEndRecord(param) {
this.msource = param;
},
}
整个流程就完成了,生成的mp3 格式很小,便于上传。
以上是 vue 使用浏览器实现录音功能 的全部内容, 来源链接: utcz.com/z/376666.html