//build: 20240525 //依赖组件:dxDriver,dxCommon import { alsaClass } from './libvbar-m-dxalsa.so' import dxCommon from './dxCommon.js' const alsaObj = new alsaClass(); const alsa = {} /** * alsa 初始化 * @param {string} id 句柄id,非必填(若初始化多个实例需要传入唯一id) * @param {number} volume 音量,非必填 * @param {number} periodSize 周期大小,非必填 * @param {number} bufferSize 缓存大小,非必填 * @returns 句柄id */ alsa.init = function (id, volume, periodSize, bufferSize) { if (volume === undefined || volume === null) { volume = 35 } if (periodSize === undefined || periodSize === null) { periodSize = 512 } if (bufferSize === undefined || bufferSize === null) { bufferSize = 2048 } let pointer = alsaObj.alsaInit(volume, periodSize, bufferSize) if (!pointer) { throw new Error("alsa.init: init failed") } return dxCommon.handleId("alsa", id, pointer) } /** * alsa 取消初始化 * @param {string} id 句柄id,非必填(需保持和init中的id一致) * @returns true/false */ alsa.deinit = function (id) { let pointer = dxCommon.handleId("alsa", id) return alsaObj.alsaDeinit(pointer) } /** * 播放音乐文件 * @param {string} path wav文件绝对路径,路径是以'/app/code/' 开头,通常放在项目的resource目录下(和src同级),必填 * @param {string} id 句柄id,非必填(需保持和init中的id一致) * @returns true/false */ alsa.play = function (path, id) { if (!path) { throw new Error("alsa.play: 'path' parameter should not be null") } let pointer = dxCommon.handleId("alsa", id) return alsaObj.alsaWav(pointer, path) } /** * TTS文字转语音 * @param {string} 要播放的音频文字,必填 * @param {string} id 句柄id,非必填(需保持和init中的id一致) * @returns true/false */ alsa.ttsPlay = function (str, id) { if (!str) { throw new Error("alsa.ttsPlay: 'str' parameter should not be null") } let pointer = dxCommon.handleId("alsa", id) return alsaObj.alsaAudioPlayString(pointer, str) } /** * 获取音量 * @param {string} id 句柄id,非必填(需保持和init中的id一致) * @returns 返回数字类型的音量,不会超出音量范围 */ alsa.getVolume = function (id) { let pointer = dxCommon.handleId("alsa", id) return alsaObj.alsaGetVolume(pointer) } /** * 设置音量 设置过大或过小会缺省等于音量范围的最大或最小值 * @param {number} volume 音量,必填 * @param {string} id 句柄id,非必填(需保持和init中的id一致) * @returns true/false */ alsa.setVolume = function (volume, id) { let pointer = dxCommon.handleId("alsa", id) return alsaObj.alsaSetVolume(pointer, volume) } /** * 播放流式音频 * @param {ArrayBuffer} 音频流 ,必填 * @param {string} id 句柄id,非必填(需保持和init中的id一致) * @returns true/false */ alsa.alsaWavData = function (buffer, id) { if (!buffer) { throw new Error("alsa.alsaWavData: 'buffer' parameter should not be null") } let pointer = dxCommon.handleId("alsa", id) return alsaObj.alsaWavData(pointer, buffer) } export default alsa;