Coverage report

  %line %branch
tsukuba_bunko.peko.canvas.stage.AudioPlayer
0% 
0% 

 1  
 /*
 2  
  * All Rights Reserved.
 3  
  * Copyright (C) 1999-2005 Tsukuba Bunko.
 4  
  *
 5  
  * Licensed under the BSD License ("the License"); you may not use
 6  
  * this file except in compliance with the License.
 7  
  * You may obtain a copy of the License at
 8  
  *
 9  
  *       http://www.tsukuba-bunko.org/licenses/LICENSE.txt
 10  
  *
 11  
  * Unless required by applicable law or agreed to in writing, software
 12  
  * distributed under the License is distributed on an "AS IS" BASIS,
 13  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 14  
  * See the License for the specific language governing permissions and
 15  
  * limitations under the License.
 16  
  *
 17  
  * $Id: AudioPlayer.java,v 1.4 2005/09/04 12:36:28 ppoi Exp $
 18  
  */
 19  
 package tsukuba_bunko.peko.canvas.stage;
 20  
 
 21  
 import java.io.Serializable;
 22  
 
 23  
 import java.net.URL;
 24  
 
 25  
 import java.util.Map;
 26  
 
 27  
 import tsukuba_bunko.peko.Logger;
 28  
 
 29  
 import tsukuba_bunko.peko.resource.ResourceManager;
 30  
 
 31  
 import tsukuba_bunko.peko.canvas.stage.audio.SampledAudioClip;
 32  
 
 33  
 
 34  
 /**
 35  
  * 音楽クリップの再生を行います。
 36  
  * @author	$Author: ppoi $
 37  
  * @version	$Revision: 1.4 $ $Date: 2005/09/04 12:36:28 $
 38  
  */
 39  
 public class AudioPlayer	implements Serializable	{
 40  
 
 41  
 	/**
 42  
 	 * serial version UID
 43  
 	 */
 44  
 	private static final long	serialVersionUID	= 7799979848147586424L;
 45  
 
 46  
 
 47  
 	/**
 48  
 	 * 停止モード:即停止
 49  
 	 */
 50  
 	public static final int STOP_IMMEDIATELY = 0;
 51  
 
 52  
 	/**
 53  
 	 * 停止モード:フェードアウト(同期)
 54  
 	 */
 55  
 	public static final int	STOP_WITH_SYNC_FADEOUT = 1;
 56  
 
 57  
 	/**
 58  
 	 * 停止モード:フェードアウト(非同期)
 59  
 	 */
 60  
 	public static final int STOP_WITH_ASYNC_FADEOUT = 2;
 61  
 
 62  
 
 63  
 	/**
 64  
 	 * クリップマップ
 65  
 	 */
 66  0
 	transient private Map	_clips = new java.util.HashMap( 17 );
 67  
 
 68  
 	/**
 69  
 	 * BGM registry
 70  
 	 */
 71  0
 	private Map	_bgmRegistry = new java.util.HashMap( 17 );
 72  
 
 73  
 	/**
 74  
 	 * SE registry
 75  
 	 */
 76  0
 	private Map	_seRegistry = new java.util.HashMap( 17 );
 77  
 
 78  
 
 79  
 	/**
 80  
 	 * <code>AudioPlayer</code> のインスタンスを作成します。
 81  
 	 */
 82  
 	public AudioPlayer()
 83  
 	{
 84  0
 		super();
 85  0
 	}
 86  
 
 87  
 
 88  
 	/**
 89  
 	 * BGM を再生します。
 90  
 	 * @param	id	BGM ID
 91  
 	 * @param	clipName	クリップ名
 92  
 	 * @param	loop	ループ再生する場合 <code>true</code>、しない場合 <code>false</code>
 93  
 	 */
 94  
 	public void playBGM( String id, String clipName, boolean loop )
 95  
 	{
 96  0
 		ResourceManager	resources = ResourceManager.getInstance();
 97  
 		try	{
 98  0
 			if( _clips.containsKey(id) )	{
 99  0
 				Logger.error( "[canvas.stage] specified bgm clip id was already used. :" + id );
 100  0
 				return;
 101  
 			}
 102  0
 			_bgmRegistry.put( id, new Object[]{clipName, (loop?Boolean.TRUE:Boolean.FALSE)} );
 103  0
 			URL	clipURL = new URL( resources.getLocationResources().getSoundsDirecotryURL(), clipName );
 104  0
 			playClip( id, clipURL, loop );
 105  
 		}
 106  0
 		catch( Exception e )	{
 107  0
 			Logger.error( "[canvas.stage] fail to play bgm :" + clipName, e );
 108  0
 		}
 109  0
 	}
 110  
 
 111  
 	/**
 112  
 	 * SE(Sound Effect) を再生します。
 113  
 	 * @param	id	BGM ID
 114  
 	 * @param	clipName	クリップ名
 115  
 	 * @param	loop	ループ再生する場合 <code>true</code>、しない場合 <code>false</code>
 116  
 	 */
 117  
 	public void playSE( String id, String clipName, boolean loop )
 118  
 	{
 119  0
 		ResourceManager	resources = ResourceManager.getInstance();
 120  
 		try	{
 121  0
 			if( _seRegistry.containsKey(id) )	{
 122  0
 				Object[]	info = (Object[])_seRegistry.get( id );
 123  0
 				if( info[1] == Boolean.FALSE )	{
 124  0
 					stop( id, AudioPlayer.STOP_IMMEDIATELY );
 125  0
 				}
 126  
 				else	{
 127  0
 					Logger.error( "[canvas.stage] specified se clip id was already used. :" + id );
 128  0
 					return;
 129  
 				}
 130  
 			}
 131  0
 			_seRegistry.put( id, new Object[]{clipName, (loop?Boolean.TRUE:Boolean.FALSE)} );
 132  0
 			URL	clipURL = new URL( resources.getLocationResources().getSoundsDirecotryURL(), clipName );
 133  0
 			playClip( id, clipURL, loop );
 134  
 		}
 135  0
 		catch( Exception e )	{
 136  0
 			Logger.error( "[canvas.stage] fail to play bgm :" + clipName, e );
 137  0
 		}
 138  0
 	}
 139  
 
 140  
 	/**
 141  
 	 * クリップを再生します。
 142  
 	 * @param	id	クリップ ID
 143  
 	 * @param	clipURL	クリップの URL
 144  
 	 * @param	loop	ループ再生する場合 <code>true</code>、しない場合 <code>false</code>
 145  
 	 */
 146  
 	protected void playClip( String id, URL clipURL, boolean loop )
 147  
 	{
 148  
 		try	{
 149  0
 			AudioClip	clip = getAudioClip( id, clipURL );
 150  0
 			if( clip != null )	{
 151  0
 				register( clip );
 152  0
 				clip.play( loop );
 153  
 			}
 154  
 		}
 155  0
 		catch( Exception e )	{
 156  0
 			Logger.error( "[canvas.stage] fail to play clip. :" + clipURL, e );
 157  0
 		}
 158  0
 	}
 159  
 
 160  
 	/**
 161  
 	 * クリップを登録します。
 162  
 	 * @param	clip	登録するクリップ
 163  
 	 */
 164  
 	protected void register( AudioClip clip )
 165  
 	{
 166  0
 		clip.setAudioPlayer( this );
 167  0
 		_clips.put( clip.getID(), clip );
 168  0
 		Logger.debug( "[canvas.stage] registered clip :" + clip.getID() );
 169  0
 	}
 170  
 
 171  
 	/**
 172  
 	 * クリップの登録を解除します。
 173  
 	 * @param	clip	登録解除するクリップ
 174  
 	 */
 175  
 	protected void unregister( AudioClip clip )
 176  
 	{
 177  0
 		_clips.remove( clip.getID() );
 178  0
 		_bgmRegistry.remove( clip.getID() );
 179  0
 		_seRegistry.remove( clip.getID() );
 180  0
 		Logger.debug( "[canvas.stage] unregistered clip :" + clip.getID() );
 181  0
 	}
 182  
 
 183  
 	/**
 184  
 	 * 指定されたクリップの再生を停止します。
 185  
 	 * @param	id	クリップ ID
 186  
 	 */
 187  
 	public void stop( String id )
 188  
 	{
 189  0
 		stop( id, AudioPlayer.STOP_WITH_ASYNC_FADEOUT );
 190  0
 	}
 191  
 
 192  
 	/**
 193  
 	 * 指定されたクリップの再生を停止します。
 194  
 	 * @param	id	クリップ ID
 195  
 	 * @param	mode	停止モード
 196  
 	 */
 197  
 	public void stop( String id, int mode )
 198  
 	{
 199  0
 		AudioClip	clip = (AudioClip)_clips.get( id );
 200  0
 		if( clip != null )	{
 201  0
 			clip.stop( mode );
 202  
 		}
 203  0
 	}
 204  
 
 205  
 	/**
 206  
 	 * 全クリップの再生を停止します。
 207  
 	 */
 208  
 	public void stopAll()
 209  
 	{
 210  0
 		AudioClip[]	clips = (AudioClip[])_clips.values().toArray( new AudioClip[_clips.size()] );
 211  0
 		for( int i = 0; i < clips.length; ++i )	{
 212  0
 			clips[i].stop();
 213  
 		}
 214  0
 	}
 215  
 
 216  
 	/**
 217  
 	 * クリップを再生する AudioClip のインスタンスを作成します。
 218  
 	 * @param	id	クリップ ID
 219  
 	 * @param	clipURL	クリップの URL
 220  
 	 */
 221  
 	protected AudioClip getAudioClip( String id, URL clipURL )
 222  
 	{
 223  0
 		String	clipName = clipURL.getFile().toLowerCase();
 224  0
 		if( clipName.endsWith(".mid") || clipName.equals(".smf") )	{
 225  0
 			Logger.error( "[canvas.stage] unsupported format :" + clipURL );
 226  0
 			return null;
 227  
 		}
 228  0
 		else if( clipName.endsWith( "mp3") ||  clipName.endsWith(".wav") || clipName.endsWith(".au") )	{
 229  0
 			return new SampledAudioClip( id, clipURL );
 230  
 		}
 231  
 		else	{
 232  0
 			Logger.error( "[canvas.stage] unsupported format :" + clipURL );
 233  0
 			return null;
 234  
 		}
 235  
 	}
 236  
 
 237  
 
 238  
 	/**
 239  
 	 * 再生の準備を実行します。
 240  
 	 */
 241  
 	public void prepare()
 242  
 	{
 243  0
 		if( _clips == null )	{
 244  0
 			Logger.debug( "[cavnas.stage] initialize clips." );
 245  0
 			_clips = new java.util.HashMap( 17 );
 246  
 		}
 247  
 
 248  0
 		String[]	id = null;
 249  0
 		Object[]	clip = null;
 250  
 
 251  0
 		Map	registry = _bgmRegistry;
 252  0
 		if( registry.size() > 0 )	{
 253  0
 			id = (String[])registry.keySet().toArray( new String[registry.size()] );
 254  0
 			for( int i = 0; i < id.length; ++i )	{
 255  0
 				clip = (Object[])registry.get( id[i] );
 256  0
 				playBGM( id[i], (String)clip[0], ((Boolean)clip[1]).booleanValue() );
 257  
 			}
 258  
 		}
 259  
 
 260  0
 		registry = _seRegistry;
 261  0
 		if( registry.size() > 0 )	{
 262  0
 			id = (String[])registry.keySet().toArray( new String[registry.size()] );
 263  0
 			for( int i = 0; i < id.length; ++i )	{
 264  0
 				clip = (Object[])registry.get( id[i] );
 265  0
 				playSE( id[i], (String)clip[0], ((Boolean)clip[1]).booleanValue() );
 266  
 			}
 267  
 		}
 268  0
 	}
 269  
 }

This report is generated by jcoverage, Maven and Maven JCoverage Plugin.