由于小智使用了opus编解码音频,而在xiaozhi-esp32-server中,使用了libopus.js进行音频解码。
libopus.js的代码经过压缩,仍然有825K。由于微信小程序不支持opus,以前我试图用AI将libopus改为支持微信小程序环境,然而失败了。以前以为是代码过大的原因,今天才发现,除此之外还有libopus.js使用了asm.js的原因。
asm.js在2013年由mozilla在firefox中提出并实现,其他浏览器也有实现,但似乎支持度一般,也不是正式的JS标准。asm.js以"use asm"开头,后面使用js的子集代码,去掉了js动态语言部分,加载时会先编译再运行来提高运行速度。
其他浏览器不在强力支持的原因是,asm.js后来在2015年演化为W3C标准制定的WebAssembly, 提出了浏览器中运行编译后二进制代码的方式和二进制.wasm文件。由于wasm和js同等地位且wasm可以被js调用,并且wasm可以由多种语言编译而来,得到了众多浏览器和node.js的广泛支持,所以asm.js逐渐被淘汰了,现在浏览器中写asm.js代码,能用但是会提示已经被deprecated了。
不同语言编译为wasm的编译器不太一样,C/C++最著名的是emscripten, rust是wasm-pack,其他语言也有,但是似乎不如这两个这么流行。可能是C/C++/Rust本身就是最快的几个语言了,其他语言也许编译后的效率比不上。emscripten历史比较悠久,在asm.js还流行的时候就可以把C/C++编译为asm.js代码了.

标签: none 阅读量: 12

添加新评论