1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package tsukuba_bunko.peko.scenario.stage;
20
21 import org.xml.sax.Attributes;
22
23 import tsukuba_bunko.peko.Logger;
24
25 import tsukuba_bunko.peko.canvas.stage.AudioPlayer;
26 import tsukuba_bunko.peko.scenario.PSMLUtil;
27
28
29 /***
30 * <samp>start-bgm</samp>, <samp>stop-bgm</samp>, <samp>start-se</samp>,
31 * <samp>stop-se</samp> 要素を処理する <code>ElementHandler</code> です。
32 * @author $Author: ppoi $
33 * @version $Revision: 1.2 $ $Date: 2005/08/19 03:18:11 $
34 */
35 public class SoundHandler extends StageElementHandler {
36
37 /***
38 * <code>SoundHandler</code> のインスタンスを作成します。
39 */
40 public SoundHandler()
41 {
42 super();
43 }
44
45
46
47
48
49 public void startDocument()
50 {
51 }
52
53 public void endDocument()
54 {
55 }
56
57 public void startElement( String namespaceURI, String localName, String qName, Attributes attrs )
58 {
59 String id = PSMLUtil.getAttributeValue( attrs, "id" );
60 if( id == null ) {
61 Logger.error( MessageIDs.SCN3003E, new Object[]{getSceneContext().getCurrentPath()} );
62 return;
63 }
64
65 String clipName = null;
66 String loop = null;
67 boolean lp = false;
68
69 StageCoordinator coordinator = getStageCoordinator();
70 if( "play-bgm".equals(localName) ) {
71 clipName = PSMLUtil.getAttributeValue( attrs, "clip" );
72 if( clipName == null ) {
73 Logger.warn( MessageIDs.SCN3004W, new Object[]{getSceneContext().getCurrentPath()} );
74 return;
75 }
76
77 loop = PSMLUtil.getAttributeValue( attrs, "loop" );
78 if( loop != null ) {
79 lp = (loop.equalsIgnoreCase("true") || loop.equalsIgnoreCase("yes") || loop.equalsIgnoreCase("on"));
80 }
81 else {
82 lp = true;
83 }
84
85 coordinator.playBGM( id, clipName, lp );
86 }
87 else if( "play-se".equals(localName) ) {
88 clipName = PSMLUtil.getAttributeValue( attrs, "clip" );
89 if( clipName == null ) {
90 Logger.warn( MessageIDs.SCN3004W, new Object[]{getSceneContext().getCurrentPath()} );
91 return;
92 }
93
94 loop = PSMLUtil.getAttributeValue( attrs, "loop" );
95 if( loop != null ) {
96 lp = (loop.equalsIgnoreCase("true") || loop.equalsIgnoreCase("yes") || loop.equalsIgnoreCase("on"));
97 }
98 else {
99 lp = false;
100 }
101
102 coordinator.playSE( id, clipName, lp );
103 }
104 else if( "stop-bgm".equals(localName) ) {
105 int fadeoutMode = AudioPlayer.STOP_WITH_ASYNC_FADEOUT;
106 String fadeout = PSMLUtil.getAttributeValue( attrs, "fadeout" );
107 if( fadeout != null ) {
108 if( "sync".equals(fadeout) ) {
109 fadeoutMode = AudioPlayer.STOP_WITH_SYNC_FADEOUT;
110 }
111 else if( "none".equals(fadeout) ) {
112 fadeoutMode = AudioPlayer.STOP_IMMEDIATELY;
113 }
114 else if( "async".equals(fadeout) ) {
115 fadeoutMode = AudioPlayer.STOP_WITH_ASYNC_FADEOUT;
116 }
117 else {
118 Logger.warn( MessageIDs.SCN3007W, new Object[]{getSceneContext().getCurrentPath(), "async"} );
119 }
120 }
121 coordinator.stopBGM( id, fadeoutMode );
122 }
123 else if( "stop-se".equals(localName) ) {
124 int fadeoutMode = AudioPlayer.STOP_WITH_ASYNC_FADEOUT;
125 String fadeout = PSMLUtil.getAttributeValue( attrs, "fadeout" );
126 if( fadeout != null ) {
127 if( "sync".equals(fadeout) ) {
128 fadeoutMode = AudioPlayer.STOP_WITH_SYNC_FADEOUT;
129 }
130 else if( "none".equals(fadeout) ) {
131 fadeoutMode = AudioPlayer.STOP_IMMEDIATELY;
132 }
133 else if( "async".equals(fadeout) ) {
134 fadeoutMode = AudioPlayer.STOP_WITH_ASYNC_FADEOUT;
135 }
136 else {
137 Logger.warn( MessageIDs.SCN3007W, new Object[]{getSceneContext().getCurrentPath(), "async"} );
138 }
139 }
140 coordinator.stopSE( id, fadeoutMode );
141 }
142 }
143 }