# sys.soundPool 库模块帮助文档

[游戏音效池](https://www.aardio.com/zh-cn/docs/library/sys/soundPool/)

## sys 成员列表 <a id="sys" href="#sys">&#x23;</a>

### sys.soundPool(options) <a id="sys.soundPool" href="#sys.soundPool">&#x23;</a>
创建音效池（打开音频设备约 80 毫秒，程序启动时创建一个即可）。  
可选参数 @options 可指定 maxVoices：每种音频格式最多同时播放的声音数，默认 32，  
超出时打断最早开始的声音  

[返回对象:sysSoundPoolObject](#sysSoundPoolObject)

## sys.soundPool 成员列表 <a id="sys.soundPool" href="#sys.soundPool">&#x23;</a>

游戏音效池：启动时载入音效，之后一句 play(名字) 播放，多个声音可以同时响。  
基于系统自带的 XAudio2（Windows 8 以上），由系统音频线程混音，  
play 只是提交请求（约 0.03 毫秒），延迟约 10 毫秒，不卡界面，不需要线程。  
没有声卡或系统不支持时为静音模式：对象照常创建，play 返回 null，程序不必判断。  
所有方法在创建对象的线程调用

### sys.soundPool.parseWav(data) <a id="sys.soundPool.parseWav" href="#sys.soundPool.parseWav">&#x23;</a>
解析 WAV 文件数据，返回 {data=PCM buffer;format=WAVEFORMATEX 结构体}，  
支持 8/16/24/32 位整数 PCM 与 32 位浮点。失败返回 null,错误信息

## sysSoundPoolObject 成员列表 <a id="sysSoundPoolObject" href="#sysSoundPoolObject">&#x23;</a>

### sysSoundPoolObject.add(name,source,volume) <a id="sysSoundPoolObject.add" href="#sysSoundPoolObject.add">&#x23;</a>
载入声音，成功返回时长（秒），失败返回 null,错误信息。  
参数 @name 是播放时用的名字，重复添加会替换。  
参数 @source 可以是：  
- WAV 文件路径（支持 /res/ 资源路径）或 WAV 数据；  
- MP3、M4A、WMA 等文件路径（用系统 Media Foundation 解码，必须是硬盘文件）；  
- PCM 表 {pcm=buffer;sampleRate=48000;channels=2;bitsPerSample=16}；  
- 提供 pcm16 方法与 sampleRate 字段的声音对象，例如 av.audio.sfx 生成的音效。  
可选参数 @volume 指定这个声音的基础音量，默认 1。  
声音数据常驻内存，适合音效与不太长的背景音乐

### sysSoundPoolObject.available <a id="sysSoundPoolObject.available" href="#sysSoundPoolObject.available">&#x23;</a>
音频设备可用时为 true，静音模式为 null

### sysSoundPoolObject.close() <a id="sysSoundPoolObject.close" href="#sysSoundPoolObject.close">&#x23;</a>
停止所有声音并关闭音频设备（对象被回收时也会自动调用）

### sysSoundPoolObject.duration(name) <a id="sysSoundPoolObject.duration" href="#sysSoundPoolObject.duration">&#x23;</a>
返回声音时长（秒）

### sysSoundPoolObject.has(name) <a id="sysSoundPoolObject.has" href="#sysSoundPoolObject.has">&#x23;</a>
是否已添加指定名字的声音

### sysSoundPoolObject.isPlaying(target) <a id="sysSoundPoolObject.isPlaying" href="#sysSoundPoolObject.isPlaying">&#x23;</a>
是否正在播放。  
参数 @target 可以是播放编号或声音名字，省略则检查是否有任何声音在播放

### sysSoundPoolObject.lastError <a id="sysSoundPoolObject.lastError" href="#sysSoundPoolObject.lastError">&#x23;</a>
静音模式的原因

### sysSoundPoolObject.loop(name,volume,pitch) <a id="sysSoundPoolObject.loop" href="#sysSoundPoolObject.loop">&#x23;</a>
循环播放声音（例如背景音乐），返回播放编号，直到调用 stop 才停止

### sysSoundPoolObject.maxVoices <a id="sysSoundPoolObject.maxVoices" href="#sysSoundPoolObject.maxVoices">&#x23;</a>
每种音频格式最多同时播放的声音数

### sysSoundPoolObject.play(name,volume,pitch) <a id="sysSoundPoolObject.play" href="#sysSoundPoolObject.play">&#x23;</a>
播放声音，立即返回播放编号（可传给 stop）。  
同一个声音可以重叠播放。  
可选参数 @volume 为音量，默认 1（与 add 指定的基础音量相乘）。  
可选参数 @pitch 为音高倍数，默认 1，范围 0.01~4（同时改变速度），  
每次在 1 附近随机取值可让重复的音效不单调。  
失败（包括静音模式）返回 null,错误信息

### sysSoundPoolObject.setVolume(volume) <a id="sysSoundPoolObject.setVolume" href="#sysSoundPoolObject.setVolume">&#x23;</a>
设置总音量（0~1，可大于 1 放大），影响正在播放与之后的所有声音。  
设为 0 即静音

### sysSoundPoolObject.stop(target) <a id="sysSoundPoolObject.stop" href="#sysSoundPoolObject.stop">&#x23;</a>
停止声音。  
参数 @target 可以是 play/loop 返回的播放编号，或声音名字（停止这个声音的所有播放）。  
省略参数停止所有声音
