udioextendsAppletimplementsActionListener{publicvoidactionPerformed(ActionEvente){…}}
步骤一:创建一个Applet小程序步骤一:创建一个Applet小程序
这里需要根据事件源即按钮的不同作出分别动作,可以通过e.getActionCommand()来判断是哪个按钮被按下。AudioClip类中的play,stop,loop方法分别对应播放、停止和循环播放功能。
功能扩展
在上面程序的基础上要求增加一套按钮用于播放另一个音乐,2个音乐可以同时播放,制造一种混音效果。运行情况如下:
扩展步骤一:增加一套按钮
定义令一组成员属性包含新的3个成员属性,分别表示播放的第二段声音的URL相对地址,当前播放的音频流和声音播放状态。改写init()方法在其中调用getAudioClip来初始化另一个要播放的音频流:Audio2=getAudioClip(newURL(getDocumentBase(),hurl2));并且添加一套新按钮,重新布局。
扩展步骤二:对Applet容器中的按扩展步骤二:对Applet容器中的按钮重新进行事件处理
为Applet容器中的新按钮添加事件监听器由于要对Applet容器中发生的三种按钮按下事件进行分别响应,可以直接在init()方法中对三个按钮添加语句:addActionListener(this);(4)实现ActionListener接口,在actionPerformed方法中对六个事件源作出相应publicclassmAudioextendsAppletimplementsActionListener{publicvoidactionPerformed(ActionEvente){…}}
完成情况评价标准
完成(1)-(4),得到最终结果的正确输出,100分。完成(1)-(3),正确生成菜单,80分。完成(1)-(2),正确生成菜单,60分。
功能扩展之案例二
编写一个applet让用户从几个音频片段中选择来播放,程序运行画面如下:
功能扩展之案例二
//程序中声音的名字publicfinalString[]AUDIO={"ping","pop","return","salvation","shuffle","squish"};//包含上述字符串数组的下拉框privateChoicechoice;//真实的音频片段数据privateAudioClip[]clips;
功能扩展之案例二
//控制播放停止的按钮privateButtonplayClip;privateButtonloopClip;privateButtonstopClip;privateButtonstopAllClips;//跟踪当前哪些音频片段在播放privateboolean[]clipsPlaying;
应用升级
问题陈述:在电梯系统的模拟程序里,公司要求在模拟中加入声音。例如,当一个人走路时,应能听到脚步声。每当按下或者复位一个楼层按钮或者电梯按钮时,应当听到单击声。电梯到达时铃声应当响起,且在门打开时或者关上时,门应当吱吱作响。最后,当电梯在楼层间运行时,应播放“电梯音乐”。
应用升级
解决思路:编写类SoundEffects,将声音文件转换成java.applet.AudioClip对象
关键代码
try{returnApplet.newAudioClip(getClass().getResource(prefix+soundFile));}//returnnullifsoundFiledoesnotexistcatch(NullPointerExceptionnullPointerException){returnnull;}}
应用升级
类SoundEffects包含方法getAudioClip,该方法通过参数soundFiled调用类java.applet.Applet的static方法.newAudioClip返回一个AudioClip对象。方法setPathPrefix允许改变声音文件的目录(如果我们需要把声音分配到多个目录中,该方法很有用)。
应用升级
(2)编写一个类,通过播放AudioClip对象来产生声音。(学生自主完成)