当前位置: 首页 > news >正文

制作公司网站设凡客做网站怎么样

制作公司网站设,凡客做网站怎么样,电子商务网站建设合同标准范文,学校网站欣赏中文文章目录 一. 前言二. 技术实现1.核心API介绍2.模板部分3.核心逻辑实现 4. 关键功能点解析 三. 完整代码四. 功能扩展建议 一. 前言 在Web开发中实现音频录制功能是许多应用场景的常见需求。本文将通过一个完整的Vue 3组件示例,详细解析如何利用现代浏览器API实现网…

文章目录

    • 一. 前言
    • 二. 技术实现
        • 1.核心API介绍
        • 2.模板部分
        • 3.核心逻辑实现
      • 4. 关键功能点解析
    • 三. 完整代码
    • 四. 功能扩展建议

一. 前言

在Web开发中实现音频录制功能是许多应用场景的常见需求。本文将通过一个完整的Vue 3组件示例,详细解析如何利用现代浏览器API实现网页端的录音功能。

二. 技术实现

1.核心API介绍

MediaRecorder API 是实现录音功能的核心,它允许我们直接捕获来自用户设备的媒体流。主要方法:

getUserMedia() 获取媒体设备权限
MediaRecorder() 创建录音实例
ondataavailable 接收音频数据
onstop 处理录音结束事件

2.模板部分
<template><div class="voice-recorder"><!-- 录音控制 --><button @click="toggleRecording" :class="{ recording: isRecording }">{{ isRecording ? "停止录音" : "开始录音" }}</button><!-- 生成的音频文件列表 --><div v-if="audioFiles.length > 0" class="audio-list"><div v-for="(audio, index) in audioFiles" :key="index"><audio controls :src="audio.url"></audio></div></div></div>
</template>
3.核心逻辑实现
const isRecording = ref(false);
const mediaRecorder = ref(null);
const audioChunks = ref([]);
const audioFiles = ref([]);
// 开始录音
const startRecording = async (e) => {if (isRecording.value) return;try {audioChunks.value = [];const stream = await navigator.mediaDevices.getUserMedia({ audio: true });mediaRecorder.value = new MediaRecorder(stream);mediaRecorder.value.ondataavailable = (e) => {audioChunks.value.push(e.data);};mediaRecorder.value.onstop = () => {const audioBlob = new Blob(audioChunks.value, { type: "audio/webm" });const audioURL = URL.createObjectURL(audioBlob);audioFiles.value.push({name: `recording_${Date.now()}.${getFileExtension(audioBlob.type)}`,url: audioURL,});audioChunks.value = [];};mediaRecorder.value.start();isRecording.value = true;} catch (error) {console.error("录音错误:", error);}
};

4. 关键功能点解析

(1) 音频格式处理
通过MIME类型映射获取文件扩展名:

// 获取文件扩展名
const getFileExtension = (mimeType) => {const extensions = {"audio/webm": "webm","audio/ogg": "ogg","audio/mp4": "mp4","audio/mpeg": "mp3","audio/wav": "wav",};return extensions[mimeType] || "webm";
};

(2) 资源管理
组件卸载时自动释放资源:

//停止录音
const stopRecording = () => {console.log("停止录音");isRecording.value = false;if (mediaRecorder.value) {mediaRecorder.value.stop();mediaRecorder.value.stream.getTracks().forEach((track) => track.stop());}
};
// 清理资源
onUnmounted(() => {stopRecording();
});

在这里插入图片描述

三. 完整代码

<template><div class="voice-recorder"><!-- 录音控制 --><button @click="toggleRecording" :class="{ recording: isRecording }">{{ isRecording ? "停止录音" : "开始录音" }}</button><!-- 生成的音频文件列表 --><div v-if="audioFiles.length > 0" class="audio-list"><div v-for="(audio, index) in audioFiles" :key="index"><audio controls :src="audio.url"></audio></div></div></div>
</template><script setup>
const isRecording = ref(false);
const mediaRecorder = ref(null);
const audioChunks = ref([]);
const audioFiles = ref([]);// 开始录音
const startRecording = async (e) => {if (isRecording.value) return;try {audioChunks.value = [];const stream = await navigator.mediaDevices.getUserMedia({ audio: true });mediaRecorder.value = new MediaRecorder(stream);mediaRecorder.value.ondataavailable = (e) => {audioChunks.value.push(e.data);};mediaRecorder.value.onstop = () => {const audioBlob = new Blob(audioChunks.value, { type: "audio/webm" });const audioURL = URL.createObjectURL(audioBlob);audioFiles.value.push({name: `recording_${Date.now()}.${getFileExtension(audioBlob.type)}`,url: audioURL,});audioChunks.value = [];};mediaRecorder.value.start();isRecording.value = true;} catch (error) {console.error("录音错误:", error);}
};//停止录音
const stopRecording = () => {console.log("停止录音");isRecording.value = false;if (mediaRecorder.value) {mediaRecorder.value.stop();mediaRecorder.value.stream.getTracks().forEach((track) => track.stop());}
};// 获取文件扩展名
const getFileExtension = (mimeType) => {const extensions = {"audio/webm": "webm","audio/ogg": "ogg","audio/mp4": "mp4","audio/mpeg": "mp3","audio/wav": "wav",};return extensions[mimeType] || "webm";
};// 切换录音状态
const toggleRecording = () => {if (!isRecording.value) {startRecording();} else {if (mediaRecorder.value) {mediaRecorder.value.stop();mediaRecorder.value.stream.getTracks().forEach((track) => track.stop());}}isRecording.value = !isRecording.value;
};// 清理资源
onUnmounted(() => {stopRecording();
});
</script><style lang="scss" scoped>
.voice-recorder {max-width: 800px;margin: 0 auto;padding: 20px;button {padding: 12px 24px;background: #42b983;color: white;border: none;border-radius: 6px;cursor: pointer;transition: background 0.3s;&.recording {background: #ff4444;}}button:hover {background: #3aa876;}button:disabled {background: #ddd;cursor: not-allowed;}
}.recording {background-color: #ff4444;color: white;
}.audio-list {margin-top: 20px;
}
</style>

四. 功能扩展建议

添加录音时长显示
实现音频波形可视化

http://www.dtcms.com/a/505448.html

相关文章:

  • 网站架构设计师是做什么的wordpress万网m3
  • 网站建设平台官网北京网站开发哪家好薇
  • 电商网站费用网页设计的通用规则有哪些
  • 怎么做网站代理更换网站模板
  • 网站开发技术写什么内容win系统做网站
  • 免费的作文网站wordpress 视频缩略图
  • 受欢迎的句容网站建设免费的域名网站
  • 上海建设工程管理网站哪里可以大量找到广告主
  • 甘肃省建设厅官方网站质监局百度高级搜索首页
  • 小鱼儿外贸建站广西南宁网站排名优化
  • 济南网站制作运营什么是网站链接优化
  • 网站如何增加百度权重的方法企业园林设计网站模板
  • 朋友圈网站文章怎么做网片是干什么用的
  • 中小企业网站制作价格做静态网站的参考文献
  • 天津网站建设案例南京明月建设集团网站
  • 建设门户网站的申请做盗版视频网站成本多少
  • 厦门网站seo哪家好福州专业网站建设公司
  • 一品猪网站开发负责公司网站产品的开发及整理
  • 龙岩做网站改版费用免费稳定的网站空间
  • 北京响应式网站制作公司天津seo公司排名
  • 规划设计咨询公司在线刷seo
  • 宁波网站建设建站怎么做cnzz统计代码放在后台网站为什么没显示
  • 数据服务网站开发品牌网站建设小7蝌蚪
  • 深圳企业网站建设费用明细万网网站建设方案书 备案
  • 找效果图去哪个网站两学一做 官方网站
  • 网站开发成本最低多少钱wordpress100万数据
  • 淮南建设局网站备案太原百度公司地址
  • 网站计划任务怎么做长春seo优化
  • 江苏省品牌专业建设网站宁波seo
  • ip地址访问不了网站莱芜 网站