# aardio 范例: 游戏音效池：启动时载入，之后一句 play 播放，多个声音可以同时响



```aardio
//游戏音效池：启动时载入，之后一句 play 播放，多个声音可以同时响
//sys.soundPool 使用指南: https://www.aardio.com/zh-cn/docs/library/sys/soundPool/
import win.ui;
/*DSG{{*/
var winform = win.form(text="sys.soundPool - 游戏音效池";right=519;bottom=239)
winform.add(
btnBgm={cls="button";text="循环播放 / 停止";left=272;top=96;right=472;bottom=136;z=4};
btnBurst={cls="button";text="连发 8 次";left=272;top=36;right=472;bottom=76;z=2};
btnDing={cls="button";text="叮";left=48;top=36;right=248;bottom=76;z=1};
btnPitch={cls="button";text="随机音高";left=48;top=96;right=248;bottom=136;z=3};
lblInfo={cls="static";left=48;top=164;right=472;bottom=212;color=0x808080;z=5}
)
/*}}*/

import sys.soundPool;

//创建一次（打开音频设备约 80 毫秒）。没有声卡时为静音模式，play 什么也不做
var sounds = sys.soundPool();

//载入系统自带的提示音：WAV 文件、MP3 等文件、PCM、av.audio 生成的音效都可以
sounds.add("ding","C:\Windows\Media\Windows Ding.wav");
sounds.add("click","C:\Windows\Media\Windows Navigation Start.wav");
sounds.add("bgm","C:\Windows\Media\Windows Proximity Connection.wav",0.6); //参数 3 是基础音量

winform.btnDing.oncommand = function(){
	sounds.play("ding");
}

//同一个声音可以重叠播放，play 只是提交请求，不会卡界面
winform.btnBurst.oncommand = function(){
	for(i=1;8){
		sounds.play("click",0.8,0.8 + i * 0.1); //音高逐次升高
		thread.delay(60);
	}
}

//重复的音效每次在 1 附近随机取音高，听起来不单调
winform.btnPitch.oncommand = function(){
	sounds.play("ding",1,0.8 + math.random() * 0.4);
}

var bgm;
winform.btnBgm.oncommand = function(){
	if(bgm && sounds.isPlaying(bgm)){
		sounds.stop(bgm);
		bgm = null;
	}
	else {
		bgm = sounds.loop("bgm");
	}
}

if(sounds.available){
	winform.lblInfo.text = "声音在系统音频线程里混音，play 约 0.03 毫秒。连续点击按钮，声音会叠在一起。";
}
else {
	winform.lblInfo.text = sounds.lastError;
}

winform.show();
win.loopMessage();

```

