当前位置: 代码网 > it编程>编程语言>Javascript > 对接阿里云webSocket实现语音转换

对接阿里云webSocket实现语音转换

2024年08月05日 Javascript 我要评论
1: ①:需求 : 边说话边翻译成汉字②:需求效果图(阿里云的示例,无代码) :2: 实现流程: 点击话筒 初始化webSocket , 调起 麦克风 , 获取语音 实时发送, 拿到返回的 汉字处理成数组遍历展示出来.3:用到的主要技术: webSocket, js-audio-recorder4:遇到的问题:①:本地运行代码, 调不起麦克风, 一直报 getUserMedia 找不到 ! 如图:原因: 浏览器不支持http开头的路径,认为这个路径不安全,只支持file:,https:,h

1: ①:需求 : 边说话边翻译成汉字
②:需求效果图(阿里云的示例,无代码) :
在这里插入图片描述
2: 实现流程: 点击话筒 初始化websocket , 调起 麦克风 , 获取语音 实时发送, 拿到返回的 汉字处理成数组遍历展示出来.
3:用到的主要技术: websocket, js-audio-recorder

4:遇到的问题:
①:本地运行代码, 调不起麦克风, 一直报 getusermedia 找不到 ! 如图:
在这里插入图片描述
原因: 浏览器不支持http开头的路径,认为这个路径不安全,只支持file:,https:,http://localhost
解决办法:浏览器地址栏输入: chrome://flags/#unsafely-treat-insecure-origin-as-secure按下图配置:
请添加图片描述
②: websocket 一直会断联 ! 目前我遇到的原因有两个:
a: 刚连上就直接断联, 是因为没有实时语音发送过去
b: 链接一段时间 ,也返回了 语音转换后的汉字, 但 不到 1分钟 又断联了 , 原因是: 语音发送太快,语音文件太大 .
各种试, 自己没解决掉这种问题, 因为js-audio-recorder插件没提供 截取音频 合并音频等方法.
最后是 后端 修改了 js-audio-recorder 的底层 recorder.js文件,然后 用引入的方式 放到本地用
(修改的逻辑就是 : 不把 语音整段(会议开始---->会议结束)发送过去, 看底层代码,可以看出 他是把 每段录制到的语音整合成一个文件发过去的,这样文件会过大,导致websocket 自己断联, 直接修改掉他整合的代码, 每次都给清空掉, 可自行看代码)
如下: (可以拷去,按需修改)

/*!
 *
 * js-audio-recorder - js audio recorder plugin
 *
 * @version v1.0.7
 * @homepage https://github.com/2fps/recorder
 * @author 2fps <echoweb@126.com> (https://www.zhuyuntao.cn)
 * @license mit
 *
 */
!function (t, e) {
   
	"object" == typeof exports && "object" == typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define([], e) : "object" == typeof exports ? exports.recorder = e() : t.recorder = e()
}
(this, function () {
   
	return function (t) {
   
		var e = {
   };
		function n(i) {
   
			if (e[i])
				return e[i].exports;
			var o = e[i] = {
   
				i: i,
				l: !1,
				exports: {
   }
			};
			return t[i].call(o.exports, o, o.exports, n),
			o.l = !0,
			o.exports
		}
		return n.m = t,
		n.c = e,
		n.d = function (t, e, i) {
   
			n.o(t, e) || object.defineproperty(t, e, {
   
				enumerable: !0,
				get: i
			})
		},
		n.r = function (t) {
   
			"undefined" != typeof symbol && symbol.tostringtag && object.defineproperty(t, symbol.tostringtag, {
   
				value: "module"
			}),
			object.defineproperty(t, "__esmodule", {
   
				value: !0
			})
		},
		n.t = function (t, e) {
   
			if (1 & e && (t = n(t)), 8 & e)
				return t;
			if (4 & e && "object" == typeof t && t && t.__esmodule)
				return t;
			var i = object.create(null);
			if (n.r(i), object.defineproperty(i, "default", {
   
					enumerable: !0,
					value: t
				}), 2 & e && "string" != typeof t)
				for (var o in t)
					n.d(i, o, function (e) {
   
						return t[e]
					}
						.bind(null, o));
			return i
		},
		n.n = function (t) {
   
			var e = t && t.__esmodule ? function () {
   
				return t.default
			}
			 : function () {
   
				return t
			};
			return n.d(e, "a", e),
			e
		},
		n.o = function (t, e) {
   
			return object.prototype.hasownproperty.call(t, e)
		},
		n.p = "",
		n(n.s = 1)
	}
	([function (t, e, n) {
   
				"use strict";
				function i(t, e, n) {
   
					for (var i = 0; i < n.length; i++)
						t.setuint8(e + i, n.charcodeat(i))
				}
				object.defineproperty(e, "__esmodule", {
   
					value: !0
				}),
				e.compress = function (t, e, n) {
   
					for (var i = e / n, o = math.max(i, 1), r = t.left, a = t.right, s = math.floor((r.length + a.length) / i), u = new float32array(s), c = 0, l = 0; c < s; ) {
   
						var f = math.floor(l);
						u[c] = r[f],
						c++,
						a.length && (u[c] = a[f], c++),
						l += o
					}
					return u
				},
				e.encodepcm = function (t, e, n) {
   
					void 0 === n && (n = !0);
					var i = 0,
					o = t.length * (e / 8),
					r = new arraybuffer(o),
					a = new dataview(r);
					if (8 === e)
						for (var s = 0; s < t.length; s++, i++) {
   
							var u = (c = math.max(-1, math.min(1, t[s]))) < 0 ? 128 * c : 127 * c;
							u = +u + 128,
							a.setint8(i, u)
						}
					else
						for (s = 0; s < t.length; s++, i += 2) {
   
							var c = math.max(-1, math.min(1, t[s]));
							a.setint16(i, c < 0 ? 32768 * c : 32767 * c, n)
						}
					return a
				},
				e.encodewav = function (t, e, n, o, r, a) {
   
					void 0 === a && (a = !0);
					var s = n > e ? e : n,
					u = r,
					c = new arraybuffer(44 + t.bytelength),
					l = new dataview(c),
					f = o,
					p = 0;
					i(l, p, "riff"),
					p += 4,
					l.setuint32(p, 36 + t.bytelength, a),
					i(l, p += 4, "wave"),
					i(l, p += 4, "fmt "),
					p += 4,
					l.setuint32(p, 16, a),
					p += 4,
					l.setuint16(p, 1, a),
					p += 2,
					l.setuint16(p, f, a),
					p += 2,
					l.setuint32(p, s, a),
					p += 4,
					l.setuint32(p, f * s * (u / 8), a),
					p += 4,
					l.setuint16(p, f * (u / 8), a),
					p += 2,
					l.setuint16(p, u, a),
					i(l, p += 2, "data"),
					p += 4,
					l.setuint32(p, t.bytelength, a),
					p += 4;
					for (var d = 0; d < t.bytelength; )
						l.setuint8(p, t.getuint8(d)), p++, d++;
					return l
				}
			}, function (t, e, n) {
   
				"use strict";
				var i,
				o = this && this.__extends || (i = function (t, e) {
   
						return (i = object.setprototypeof || {
   
								__proto__: []
							}
							instanceof 
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com