📄 copteraudio.java
字号:
cgOrienPresets.append( "You've fallen facedown", null );
cgOrienPresets.append( "You've fallen flat on your back", null );
formOrientation.append( cgOrienPresets );
}
void initDirectForm()
{
formDirectivity = getNewForm(
"Directivity of the sound settings" );
cmggMinAngle = new CopterMeterGauge( formDirectivity,
0, 360, audio_sc.getMinAngle() , 15,
"Fore spatial angle where the sound level is maximum",
"degrees" );
cmggMaxAngle = new CopterMeterGauge( formDirectivity,
0, 360, audio_sc.getMaxAngle(), 15,
"Fore spatial angle where the level is greater than the rear level",
"degrees");
cmggRearLevel = new CopterMeterGauge( formDirectivity,
-10000, 0, audio_sc.getRearLevel(), 400,
"Rear level ( assuming the fore level 0 dB )",
"dB");
}
int calcVelFactor( int stepScale )
{
return stepScale * framesPerSecond;
}
int velFac2diagVelocity( int vf )
{
return vf / halfSqrt2x1000; // vf * sqrt(2) / 1000;
}
int diagVelocity2VelFac( int dv )
{
return dv * halfSqrt2x1000; // dv * 1000 / sqrt(2);
}
int calcDiagVelocity( int stepScale )
{
return velFac2diagVelocity( calcVelFactor( stepScale ) );
}
int getDiagVelocity()
{
return velFac2diagVelocity( audio_sc.getVelFactor() );
}
void setVelFacFromLocation()
{
audio_sc.setVelFactor( calcVelFactor( audio_sc.getStepScale() ) );
}
int getFramePeriod() // in milliseconds
{
return 1000 / framesPerSecond;
}
int getNStepsHorizontal()
{
return timeToCrossScreen * framesPerSecond;
}
int getStepScale( int screenWidth /* in meters */ )
{
return screenWidth * 1000 / getNStepsHorizontal();
}
void setScale( int screenWidth /* in meters */ )
{
audio_sc.setStepScale( getStepScale( screenWidth ) );
}
// returns the Screen width in meters
int getScale()
{
return audio_sc.getStepScale() * getNStepsHorizontal() / 1000;
}
void setAltitude( int a /* in meters */ )
{
audio_sc.setAltitude( a * 1000 );
}
int getAltitude()
{
return audio_sc.getAltitude() / 1000;
}
class Mover extends TimerTask
{
public void run()
{
canvas.nextFrame( disp );
audio_sc.nextFrame( canvas );
}
}
void cleanup()
{
timer.cancel();
audio_sc.stop();
}
public void commandAction(Command c, Displayable d) {
if( c == cmdVolume )
disp.setCurrent( formVolume );
else if ( c == cmdPan ) {
disp.setCurrent( formPan );
}
else if ( c == cmdLocation ) {
disp.setCurrent( formLocation );
}
else if ( c == cmdDoppler ) {
disp.setCurrent( formDoppler );
}
else if ( c == cmdCopterSize ) {
disp.setCurrent( formCopterSize );
}
else if( c == cmdOrientation ) {
disp.setCurrent( formOrientation );
}
else if( c == cmdDirect ) {
disp.setCurrent( formDirectivity );
}
else if( formDistAtt.isThisCommand(c) ) {
formDistAtt.setCurrent( disp );
}
else if( c == cmdObstr ) {
disp.setCurrent( formObstr );
}
else if ( c == cmdExit ) {
if( d == canvas )
{
cleanup();
notifyDestroyed();
}
else
{
disp.setCurrent( canvas );
}
}
}
public class CopterStateListener implements ItemStateListener {
public void itemStateChanged(Item item) {
if ( cmggVolume.isThisItem( item ) ) {
audio_sc.setVolume( cmggVolume.getValue() );
}
else if ( cggPan.isThisItem( item ) ) {
audio_sc.setPan( cggPan.getValue() );
}
else if ( item == cgDoppler ) {
handleDopplerFlagsChange();
}
else if ( cmggExplicitVel.isThisItem( item ) ) {
audio_sc.setVelFactor(
diagVelocity2VelFac(
cmggExplicitVel.getValue() ) );
}
else if ( cmggScale.isThisItem( item ) ) {
setScale( cmggScale.getValue() );
if( _isDopplerVImplicit ){
setVelFacFromLocation();
}
}
else if ( cmggAltitude.isThisItem( item ) ) {
setAltitude( cmggAltitude.getValue() );
}
else if( cmggLength.isThisItem( item ) ) {
audio_sc.setCopterLength( cmggLength.getValue() );
}
else if( cmggWidth.isThisItem(item) ) {
audio_sc.setCopterWidth( cmggWidth.getValue() );
}
else if( cmggHeight.isThisItem(item) ) {
audio_sc.setCopterHeight( cmggHeight.getValue() );
}
else if( item == cgOrienPresets ) {
handleOriChoiceChange();
}
else if( cmggMinAngle.isThisItem(item) ) {
if( cmggMinAngle.getValue() >
cmggMaxAngle.getValue() )
{
cmggMinAngle.decr();
}
audio_sc.setMinAngle( cmggMinAngle.getValue() );
}
else if( cmggMaxAngle.isThisItem(item) ) {
if( cmggMaxAngle.getValue() <
cmggMinAngle.getValue() )
{
cmggMaxAngle.incr();
}
audio_sc.setMaxAngle( cmggMaxAngle.getValue() );
}
else if( cmggRearLevel.isThisItem(item) ) {
audio_sc.setRearLevel( cmggRearLevel.getValue() );
}
else if( formDistAtt.isCurrent( disp ) ) {
formDistAtt.handleItem( item );
}
else if( item == cgWall ) {
handleWallChanged();
}
}
}
void handleWallChanged()
{
if( cgWall.getSelectedIndex() == 0 ) {
canvas.setWall( false );
audio_sc.setNoObstr();
}
else if( cgWall.getSelectedIndex() == 1 ) {
canvas.setWall( true );
audio_sc.setSingleWin();
}
else if( cgWall.getSelectedIndex() == 2 ) {
canvas.setWall( true );
audio_sc.setDoubleWin();
}
else if( cgWall.getSelectedIndex() == 3 ) {
canvas.setWall( true );
audio_sc.setThinDoor();
}
else if( cgWall.getSelectedIndex() == 4 ) {
canvas.setWall( true );
audio_sc.setThickDoor();
}
else if( cgWall.getSelectedIndex() == 5 ) {
canvas.setWall( true );
audio_sc.setWoodWall();
}
else if( cgWall.getSelectedIndex() == 6 ) {
canvas.setWall( true );
audio_sc.setBrickWall();
}
else if( cgWall.getSelectedIndex() == 7 ) {
canvas.setWall( true );
audio_sc.setStoneWall();
}
else if( cgWall.getSelectedIndex() == 8 ) {
canvas.setWall( true );
audio_sc.setCurtain();
}
}
void handleOriChoiceChange()
{
switch ( cgOrienPresets.getSelectedIndex() ) {
case 0:
audio_sc.setStandingStraight();
break;
case 1:
audio_sc.setFallenRight();
break;
case 2:
audio_sc.setFallenLeft();
break;
case 3:
audio_sc.setFallenFacedown();
break;
case 4:
audio_sc.setFallenFlatBack();
break;
default:
}
}
void handleDopplerFlagsChange()
{
if( cgDoppler.size() == 1 && cgDoppler.isSelected( 0 ) )
{
// the 1st flag was switched on, enabling Doppler
audio_sc.setDopplerEnabled( true );
cgDoppler.append( "Velocity is calculated from the location",
null );
cgDoppler.setSelectedIndex( 1, _isDopplerVImplicit );
if( !_isDopplerVImplicit )
{
cmggExplicitVel.appendTo( formDoppler );
cmggExplicitVel.setValue( getDiagVelocity() );
}
}
else if( cgDoppler.size() == 2 && !cgDoppler.isSelected( 0 ) ) {
// the 1st flag was switched off, disabling Doppler
audio_sc.setDopplerEnabled( false );
cmggExplicitVel.deleteFrom( formDoppler );
cgDoppler.delete( 1 );
}
else if( cgDoppler.size() == 2 && !cgDoppler.isSelected( 1 ) ) {
// the 2nd flag was switched off
_isDopplerVImplicit = false;
cmggExplicitVel.appendTo( formDoppler );
cmggExplicitVel.setValue( getDiagVelocity() );
}
else if( cgDoppler.size() == 2 && cgDoppler.isSelected( 1 ) ){
// the 2nd flag was just switched on
_isDopplerVImplicit = true;
cmggExplicitVel.deleteFrom( formDoppler );
setVelFacFromLocation();
}
else {
System.out.println( "Doppler settings error" );
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -