【语音转文字,让会议记录更高效】
想象一下,当您坐在会议室里,每一位发言者的每一句话都能即时转换成准确的文字记录。讲座、研讨会、采访……我们的平台易于操作,界面友好,即使是第一次使用的用户也能迅速上手。我们的技术采用先进的语音识别算法,能够适应各种口音和专业术语,确保转写的准确性。无论是正式的商务会议,还是轻松的团队讨论,它都能完美适应,让您的会议记录工作变得轻松而高效。在这个信息爆炸的时代,让我们的技术帮助您把握每一次沟通的机会
在快节奏的商务环境中,每分每秒都至关重要。传统的会议记录方式往往耗时耗力,不仅需要记录者全神贯注地聆听,还需要他们迅速地将语言转化为文字。现在,有了我们的实时语音转文字技术,这一切将成为历史。
我们提供的不仅仅是一个工具,而是一种全新的会议体验。想象一下,当您坐在会议室里,每一位发言者的每一句话都能即时转换成准确的文字记录。无需担心错过任何细节,无需担心记录速度跟不上讲话速度。一切都那么流畅,那么自然。
我们的技术采用先进的语音识别算法,能够适应各种口音和专业术语,确保转写的准确性。无论是正式的商务会议,还是轻松的团队讨论,它都能完美适应,让您的会议记录工作变得轻松而高效。
而且,我们的服务不仅仅局限于会议。讲座、研讨会、采访……任何需要将语音内容转换为文字的场景,我们都能提供帮助。我们的平台易于操作,界面友好,即使是第一次使用的用户也能迅速上手。
在这个信息爆炸的时代,让我们的技术帮助您把握每一次沟通的机会,让信息的传递更加准确无误。选择我们的实时语音转文字服务,让每一次会议都成为效率和成果的双重胜利。
立即体验,开启您的智能会议新时代!


具体实现代码如下:
<template>
<div class="Meeting-container" style="padding: 10px;margin-bottom:50px; ">
<!--聊天窗口开始 -->
<div style="height: 150px;">
<textarea v-model="text"
placeholder="请点击长时会议记录,会把会议说的话记录成文字,方便会后整理纪要"
style="height: 560px;width: 100%;padding: 20px; border: none;border-top: 1px solid #ccc;border-bottom: 1px solid #ccc;outline: none">
</textarea>
</div>
<div style="text-align: left;padding-right: 10px;margin-top:440px;">
<el-button type="primary" size="medium" @click="voiceSend"><i class="el-icon-microphone"></i>长时会议记录
</el-button>
<el-button type="danger" size="medium" @click="stopVoice">停止记录
</el-button>
</div>
</div>
</template>
<script>
// 初始化录音工具,注意目录
let recorder = new Recorder("../../recorder")
recorder.onStart = () => {
console.log("开始录音了")
}
recorder.onStop = () => {
console.log("结束录音了")
}
// 发送中间帧和最后一帧
recorder.onFrameRecorded = ({isLastFrame, frameBuffer}) => {
if (!isLastFrame && wsFlag) { // 发送中间帧
wsTask.send(new Int8Array(frameBuffer)) // 执行发送
// console.log("发送中间帧...")
} else {
if (wsFlag) {
wsTask.send('{"end": true}') // 执行发送最后一帧
}
}
}
function toBase64(buffer) {
let binary = "";
let bytes = new Uint8Array(buffer);
let len = bytes.byteLength;
for (let i = 0; i < len; i++) {
binary += String.fromCharCode(bytes[i]);
}
return window.btoa(binary);
};
let wsFlag = false;
let wsTask = {};
export default {
name: "Meeting",
data() {
return {
user: localStorage.getItem("user") ? JSON.parse(localStorage.getItem("user")) : {}, // 获取本地存储用户
text: "", // 转写结果
URL: 'wss://rtasr.xfyun.cn/v1/ws', // 实时转写,很多JS文件放到public/raasr下面了
}
},
methods: {
async stopVoice() {
if (await this.consumeBalance(this.user, "停止记录")) {
// 执行具体能力
recorder.stop();
this.$message.success("停止记录!")
}
},
async voiceSend() { // 开始语音识别要做的动作
if (await this.consumeBalance(this.user, "长时会议记录")) {
// 执行具体能力
this.text = "";
await this.wsInit();
}
}
,
// 建立ws连接
async wsInit() {
// this.iat = "";
this.$message.success("已开始记录会议...")
var _this = this;
console.log("我打印的" + _this.text)
if (typeof (WebSocket) == 'undefined') {
console.log('您的浏览器不支持ws...')
} else {
console.log('您的浏览器支持ws!!!')
let reqeustUrl = await _this.getWebSocketUrl()
wsTask = new WebSocket(reqeustUrl);
// ws的几个事件,在vue中定义
wsTask.onopen = function () {
console.log('ws已经打开...')
// _this.res = "开始录音"
wsFlag = true
// 下面就可以循环发送中间帧了
// 开始录音
console.log("开始录音")
recorder.start({
sampleRate: 16000,
frameSize: 1280,
});
}
wsTask.onmessage = function (message) { // 调用第二个API 自动把语音转成文本
console.log(JSON.stringify(message.data))
_this.renderResult(message.data)
}
// 关闭事件
wsTask.onclose = function () {
console.log('ws已关闭...')
}
wsTask.onerror = function () {
console.log('发生错误...')
}
}
}
,
renderResult(resultData) {
let jsonData = JSON.parse(resultData);
if (jsonData.action == "started") {
// 握手成功
console.log("握手成功");
} else if (jsonData.action == "result") {
const data = JSON.parse(jsonData.data)
console.log(data)
// 转写结果
let resultTextTemp = ""
data.cn.st.rt.forEach((j) => {
j.ws.forEach((k) => {
k.cw.forEach((l) => {
resultTextTemp += l.w;
});
});
});
if (data.cn.st.type == 0) {
// 【最终】识别结果:
this.text += resultTextTemp;
resultTextTemp = ""
}
} else if (jsonData.action == "error") {
// 连接发生错误
console.log("出错了:", jsonData);
}
},
// 获取鉴权地址与参数
getWebSocketUrl() {
// 请求地址根据语种不同变化
var appId = atob(this.user.appid);
var secretKey = "xxx";
var ts = Math.floor(new Date().getTime() / 1000);
var signa = hex_md5(appId + ts);
var signatureSha = CryptoJSNew.HmacSHA1(signa, secretKey);
var signature = CryptoJS.enc.Base64.stringify(signatureSha);
signature = encodeURIComponent(signature);
return `${this.URL}?appid=${appId}&ts=${ts}&signa=${signature}`;
}
}
}
</script>
<!--scoped 不能加-->
<style>
</style>
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)