1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
//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;