<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN"   "http://www.web3d.org/specifications/x3d-3.0.dtd">
<X3D profile='Immersiveversion='3.0xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation=' http://www.web3d.org/specifications/x3d-3.0.xsd '>
<head>
<meta name='titlecontent='KeyboardEightyEightKeys.x3d'/>
<meta name='descriptioncontent='Eight-eight key keyboard, extrapolated from VRML Sourcebook Figure 24-4, including animation of key movements coordinated with sounding of key when touched.'/>
<meta name='warningcontent='Not all tones work, need some higher-frequency sound files.'/>
<meta name='creatorcontent='Scott Gilman'/>
<meta name='createdcontent='27 August 2004'/>
<meta name='modifiedcontent='27 November 2004'/>
<meta name='identifiercontent=' http://www.web3d.org/x3d/content/examples/Basic/StudentProjects/KeyboardEightyEightKeys.x3d '/>
<meta name='referencecontent='Figure 24.4, The VRML 2.0 Sourcebook, Copyright [1997] By Andrea L. Ames, David R. Nadeau, and John L. Moreland'/>
<meta name='referencecontent=' http://www.web3d.org/x3d/content/examples/Basic/Vrml2.0Sourcebook/Chapter24-Sound/Figure24.4FourKeyKeyboard.x3d '/>
<meta name='generatorcontent='X3D-Edit 3.2, https://savage.nps.edu/X3D-Edit'/>
<meta name='licensecontent='../license.html'/>
</head>
<!--

Index for ExternProtoDeclare definition: ViewPositionOrientation
Index for DEF nodes: A0, A0Mover, A0TRANS, A1, A1Mover, A1TRANS, A2, A2Mover, A2TRANS, A3, A3Mover, A3TRANS, A4, A4Mover, A4TRANS, A5, A5Mover, A5TRANS, A6, A6Mover, A6TRANS, A7, A7Mover, A7TRANS, A8, A8Mover, A8TRANS, As0, As0Mover, As0TRANS, As1, As1Mover, As1TRANS, As2, As2Mover, As2TRANS, As3, As3Mover, As3TRANS, As4, As4Mover, As4TRANS, As5, As5Mover, As5TRANS, As6, As6Mover, As6TRANS, As7, As7Mover, As7TRANS, As8, As8Mover, As8TRANS, B0, B0Mover, B0TRANS, B1, B1Mover, B1TRANS, B2, B2Mover, B2TRANS, B3, B3Mover, B3TRANS, B4, B4Mover, B4TRANS, B5, B5Mover, B5TRANS, B6, B6Mover, B6TRANS, B7, B7Mover, B7TRANS, B8, B8Mover, B8TRANS, BlackKey, C0, C0Mover, C0TRANS, C1, C1Mover, C1TRANS, C2, C2Mover, C2TRANS, C3, C3Mover, C3TRANS, C4, C4Mover, C4TRANS, C5, C5Mover, C5TRANS, C6, C6Mover, C6TRANS, C7, C7Mover, C7TRANS, C8, C8Mover, C8TRANS, ClockA0, ClockA1, ClockA2, ClockA3, ClockA4, ClockA5, ClockA6, ClockA7, ClockA8, ClockAs0, ClockAs1, ClockAs2, ClockAs3, ClockAs4, ClockAs5, ClockAs6, ClockAs7, ClockAs8, ClockB0, ClockB1, ClockB2, ClockB3, ClockB4, ClockB5, ClockB6, ClockB7, ClockB8, ClockC0, ClockC1, ClockC2, ClockC3, ClockC4, ClockC5, ClockC6, ClockC7, ClockC8, ClockCs0, ClockCs1, ClockCs2, ClockCs3, ClockCs4, ClockCs5, ClockCs6, ClockCs7, ClockD0, ClockD1, ClockD2, ClockD3, ClockD4, ClockD5, ClockD6, ClockD7, ClockDs0, ClockDs1, ClockDs2, ClockDs3, ClockDs4, ClockDs5, ClockDs6, ClockDs7, ClockE0, ClockE1, ClockE2, ClockE3, ClockE4, ClockE5, ClockE6, ClockE7, ClockF0, ClockF1, ClockF2, ClockF3, ClockF4, ClockF5, ClockF6, ClockF7, ClockFs0, ClockFs1, ClockFs2, ClockFs3, ClockFs4, ClockFs5, ClockFs6, ClockFs7, ClockG0, ClockG1, ClockG2, ClockG3, ClockG4, ClockG5, ClockG6, ClockG7, ClockGs0, ClockGs1, ClockGs2, ClockGs3, ClockGs4, ClockGs5, ClockGs6, ClockGs7, Cs0, Cs0Mover, Cs0TRANS, Cs1, Cs1Mover, Cs1TRANS, Cs2, Cs2Mover, Cs2TRANS, Cs3, Cs3Mover, Cs3TRANS, Cs4, Cs4Mover, Cs4TRANS, Cs5, Cs5Mover, Cs5TRANS, Cs6, Cs6Mover, Cs6TRANS, Cs7, Cs7Mover, Cs7TRANS, D0, D0Mover, D0TRANS, D1, D1Mover, D1TRANS, D2, D2Mover, D2TRANS, D3, D3Mover, D3TRANS, D4, D4Mover, D4TRANS, D5, D5Mover, D5TRANS, D6, D6Mover, D6TRANS, D7, D7Mover, D7TRANS, Ds0, Ds0Mover, Ds0TRANS, Ds1, Ds1Mover, Ds1TRANS, Ds2, Ds2Mover, Ds2TRANS, Ds3, Ds3Mover, Ds3TRANS, Ds4, Ds4Mover, Ds4TRANS, Ds5, Ds5Mover, Ds5TRANS, Ds6, Ds6Mover, Ds6TRANS, Ds7, Ds7Mover, Ds7TRANS, E0, E0Mover, E0TRANS, E1, E1Mover, E1TRANS, E2, E2Mover, E2TRANS, E3, E3Mover, E3TRANS, E4, E4Mover, E4TRANS, E5, E5Mover, E5TRANS, E6, E6Mover, E6TRANS, E7, E7Mover, E7TRANS, F0, F0Mover, F0TRANS, F1, F1Mover, F1TRANS, F2, F2Mover, F2TRANS, F3, F3Mover, F3TRANS, F4, F4Mover, F4TRANS, F5, F5Mover, F5TRANS, F6, F6Mover, F6TRANS, F7, F7Mover, F7TRANS, FrontFar, Fs0, Fs0Mover, Fs0TRANS, Fs1, Fs1Mover, Fs1TRANS, Fs2, Fs2Mover, Fs2TRANS, Fs3, Fs3Mover, Fs3TRANS, Fs4, Fs4Mover, Fs4TRANS, Fs5, Fs5Mover, Fs5TRANS, Fs6, Fs6Mover, Fs6TRANS, Fs7, Fs7Mover, Fs7TRANS, G0, G0Mover, G0TRANS, G1, G1Mover, G1TRANS, G2, G2Mover, G2TRANS, G3, G3Mover, G3TRANS, G4, G4Mover, G4TRANS, G5, G5Mover, G5TRANS, G6, G6Mover, G6TRANS, G7, G7Mover, G7TRANS, Gs0, Gs0Mover, Gs0TRANS, Gs1, Gs1Mover, Gs1TRANS, Gs2, Gs2Mover, Gs2TRANS, Gs3, Gs3Mover, Gs3TRANS, Gs4, Gs4Mover, Gs4TRANS, Gs5, Gs5Mover, Gs5TRANS, Gs6, Gs6Mover, Gs6TRANS, Gs7, Gs7Mover, Gs7TRANS, LeftSide, PitchA0, PitchA1, PitchA2, PitchA3, PitchA4, PitchA5, PitchA6, PitchA7, PitchA8, PitchAs0, PitchAs1, PitchAs2, PitchAs3, PitchAs4, PitchAs5, PitchAs6, PitchAs7, PitchAs8, PitchB0, PitchB1, PitchB2, PitchB3, PitchB4, PitchB5, PitchB6, PitchB7, PitchB8, PitchC0, PitchC1, PitchC2, PitchC3, PitchC4, PitchC5, PitchC6, PitchC7, PitchC8, PitchCs0, PitchCs1, PitchCs2, PitchCs3, PitchCs4, PitchCs5, PitchCs6, PitchCs7, PitchD0, PitchD1, PitchD2, PitchD3, PitchD4, PitchD5, PitchD6, PitchD7, PitchDs0, PitchDs1, PitchDs2, PitchDs3, PitchDs4, PitchDs5, PitchDs6, PitchDs7, PitchE0, PitchE1, PitchE2, PitchE3, PitchE4, PitchE5, PitchE6, PitchE7, PitchF0, PitchF1, PitchF2, PitchF3, PitchF4, PitchF5, PitchF6, PitchF7, PitchFs0, PitchFs1, PitchFs2, PitchFs3, PitchFs4, PitchFs5, PitchFs6, PitchFs7, PitchG0, PitchG1, PitchG2, PitchG3, PitchG4, PitchG5, PitchG6, PitchG7, PitchGs0, PitchGs1, PitchGs2, PitchGs3, PitchGs4, PitchGs5, PitchGs6, PitchGs7, playPiano, RightSide, StartPlaying, TopDown, TopDownCloser, WhiteKey
Index for Viewpoint images: Viewpoint_1, RightSide, FrontFar, LeftSide, TopDown, TopDownCloser
-->
<Scene>
<Viewpoint description='Middle C, C#, D, D#orientation='1 0 0 -0.758position='0 2 2'/>
<Viewpoint DEF='RightSidedescription='From right end of keyboardorientation='-.238 .939 .25 1.6349position='15.5 8.5 -.2'/>
<Viewpoint DEF='FrontFardescription='Looking down from a distanceorientation='-1 .007 -.004 .6661position='.3 11 13.7'/>
<Viewpoint DEF='LeftSidedescription='From left end of keyboardorientation='-.252 -.932 -.261 1.636position='-15.9 9.6 -.1'/>
<Viewpoint DEF='TopDowndescription='Looking down from above middle Corientation='-1 -.024 .007 1.5504position='-1 15.4 .3'/>
<Viewpoint DEF='TopDownCloserdescription='top down view, closerorientation='-1 -.005 -.008 1.1528position='-.6 7.1 3.1'/>
<Group>
<!-- A0TRANS ROUTE:  [from A0Mover.value_changed to set_translation ] -->
<Transform DEF='A0TRANStranslation='-7.5 0 0'>
<Shape DEF='WhiteKey'>
<Box size='0.23 0.1 1.5'/>
</Shape>
<!-- A0 ROUTEs:  [from touchTime to PitchA1.set_startTime ] [from touchTime to ClockA0.set_startTime ] -->
<TouchSensor DEF='A0description='A0'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- As0TRANS ROUTE:  [from As0Mover.value_changed to set_translation ] -->
<Transform DEF='As0TRANStranslation='-7.375 0.1 -.375'>
<Shape DEF='BlackKey'>
<Box size='0.23 0.1 1.5'/>
<Appearance>
<Material diffuseColor='0.4 0.4 0.4'/>
</Appearance>
</Shape>
<!-- As0 ROUTEs:  [from touchTime to PitchAs1.set_startTime ] [from touchTime to ClockAs0.set_startTime ] -->
<TouchSensor DEF='As0description='As0'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- B0TRANS ROUTE:  [from B0Mover.value_changed to set_translation ] -->
<Transform DEF='B0TRANStranslation='-7.25 0 0'>
<Shape USE='WhiteKey'/>
<!-- B0 ROUTEs:  [from touchTime to PitchB1.set_startTime ] [from touchTime to ClockB0.set_startTime ] -->
<TouchSensor DEF='B0description='B0'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- C0TRANS ROUTE:  [from C0Mover.value_changed to set_translation ] -->
<Transform DEF='C0TRANStranslation='-7 0 0'>
<Shape USE='WhiteKey'/>
<!-- C0 ROUTEs:  [from touchTime to PitchC1.set_startTime ] [from touchTime to ClockC0.set_startTime ] -->
<TouchSensor DEF='C0description='C0'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- Cs0TRANS ROUTE:  [from Cs0Mover.value_changed to set_translation ] -->
<Transform DEF='Cs0TRANStranslation='-6.875 0.1 -0.375'>
<Shape USE='BlackKey'/>
<!-- Cs0 ROUTEs:  [from touchTime to PitchCs1.set_startTime ] [from touchTime to ClockCs0.set_startTime ] -->
<TouchSensor DEF='Cs0description='Cs1'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- D0TRANS ROUTE:  [from D0Mover.value_changed to set_translation ] -->
<Transform DEF='D0TRANStranslation='-6.75 0 0'>
<Shape USE='WhiteKey'/>
<!-- D0 ROUTEs:  [from touchTime to PitchD1.set_startTime ] [from touchTime to ClockD0.set_startTime ] -->
<TouchSensor DEF='D0description='D0'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- Ds0TRANS ROUTE:  [from Ds0Mover.value_changed to set_translation ] -->
<Transform DEF='Ds0TRANStranslation='-6.625 0.1 -0.375'>
<Shape USE='BlackKey'/>
<!-- Ds0 ROUTEs:  [from touchTime to PitchDs1.set_startTime ] [from touchTime to ClockDs0.set_startTime ] -->
<TouchSensor DEF='Ds0description='Ds0'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- E0TRANS ROUTE:  [from E0Mover.value_changed to set_translation ] -->
<Transform DEF='E0TRANStranslation='-6.5 0 0'>
<Shape USE='WhiteKey'/>
<!-- E0 ROUTEs:  [from touchTime to PitchE1.set_startTime ] [from touchTime to ClockE0.set_startTime ] -->
<TouchSensor DEF='E0description='E0'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- F0TRANS ROUTE:  [from F0Mover.value_changed to set_translation ] -->
<Transform DEF='F0TRANStranslation='-6.25 0 0'>
<Shape USE='WhiteKey'/>
<!-- F0 ROUTEs:  [from touchTime to PitchF1.set_startTime ] [from touchTime to ClockF0.set_startTime ] -->
<TouchSensor DEF='F0description='F0'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- Fs0TRANS ROUTE:  [from Fs0Mover.value_changed to set_translation ] -->
<Transform DEF='Fs0TRANStranslation='-6.125 0.1 -0.375'>
<Shape USE='BlackKey'/>
<!-- Fs0 ROUTEs:  [from touchTime to PitchFs1.set_startTime ] [from touchTime to ClockFs0.set_startTime ] -->
<TouchSensor DEF='Fs0description='Fs0'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- G0TRANS ROUTE:  [from G0Mover.value_changed to set_translation ] -->
<Transform DEF='G0TRANStranslation='-6 0 0'>
<Shape USE='WhiteKey'/>
<!-- G0 ROUTEs:  [from touchTime to PitchG1.set_startTime ] [from touchTime to ClockG0.set_startTime ] -->
<TouchSensor DEF='G0description='G0'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- Gs0TRANS ROUTE:  [from Gs0Mover.value_changed to set_translation ] -->
<Transform DEF='Gs0TRANStranslation='-5.875 0.1 -0.375'>
<Shape USE='BlackKey'/>
<!-- Gs0 ROUTEs:  [from touchTime to PitchGs1.set_startTime ] [from touchTime to ClockGs0.set_startTime ] -->
<TouchSensor DEF='Gs0description='Gs0'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- A1TRANS ROUTE:  [from A1Mover.value_changed to set_translation ] -->
<Transform DEF='A1TRANStranslation='-5.75 0 0'>
<Shape USE='WhiteKey'/>
<!-- A1 ROUTEs:  [from touchTime to PitchA1.set_startTime ] [from touchTime to ClockA1.set_startTime ] -->
<TouchSensor DEF='A1description='A1'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- As1TRANS ROUTE:  [from As1Mover.value_changed to set_translation ] -->
<Transform DEF='As1TRANStranslation='-5.625 0.1 -.375'>
<Shape USE='BlackKey'/>
<!-- As1 ROUTEs:  [from touchTime to PitchAs1.set_startTime ] [from touchTime to ClockAs1.set_startTime ] -->
<TouchSensor DEF='As1description='As1'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- B1TRANS ROUTE:  [from B1Mover.value_changed to set_translation ] -->
<Transform DEF='B1TRANStranslation='-5.5 0 0'>
<Shape USE='WhiteKey'/>
<!-- B1 ROUTEs:  [from touchTime to PitchB1.set_startTime ] [from touchTime to ClockB1.set_startTime ] -->
<TouchSensor DEF='B1description='B1'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- C1TRANS ROUTE:  [from C1Mover.value_changed to set_translation ] -->
<Transform DEF='C1TRANStranslation='-5.25 0 0'>
<Shape USE='WhiteKey'/>
<!-- C1 ROUTEs:  [from touchTime to PitchC1.set_startTime ] [from touchTime to ClockC1.set_startTime ] -->
<TouchSensor DEF='C1description='C1'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- Cs1TRANS ROUTE:  [from Cs1Mover.value_changed to set_translation ] -->
<Transform DEF='Cs1TRANStranslation='-5.125 0.1 -0.375'>
<Shape USE='BlackKey'/>
<!-- Cs1 ROUTEs:  [from touchTime to PitchCs1.set_startTime ] [from touchTime to ClockCs1.set_startTime ] -->
<TouchSensor DEF='Cs1description='Cs1'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- D1TRANS ROUTE:  [from D1Mover.value_changed to set_translation ] -->
<Transform DEF='D1TRANStranslation='-5 0 0'>
<Shape USE='WhiteKey'/>
<!-- D1 ROUTEs:  [from touchTime to PitchD1.set_startTime ] [from touchTime to ClockD1.set_startTime ] -->
<TouchSensor DEF='D1description='D1'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- Ds1TRANS ROUTE:  [from Ds1Mover.value_changed to set_translation ] -->
<Transform DEF='Ds1TRANStranslation='-4.875 0.1 -0.375'>
<Shape USE='BlackKey'/>
<!-- Ds1 ROUTEs:  [from touchTime to PitchDs1.set_startTime ] [from touchTime to ClockDs1.set_startTime ] -->
<TouchSensor DEF='Ds1description='Ds1'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- E1TRANS ROUTE:  [from E1Mover.value_changed to set_translation ] -->
<Transform DEF='E1TRANStranslation='-4.75 0 0'>
<Shape USE='WhiteKey'/>
<!-- E1 ROUTEs:  [from touchTime to PitchE1.set_startTime ] [from touchTime to ClockE1.set_startTime ] -->
<TouchSensor DEF='E1description='E1'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- F1TRANS ROUTE:  [from F1Mover.value_changed to set_translation ] -->
<Transform DEF='F1TRANStranslation='-4.5 0 0'>
<Shape USE='WhiteKey'/>
<!-- F1 ROUTEs:  [from touchTime to PitchF1.set_startTime ] [from touchTime to ClockF1.set_startTime ] -->
<TouchSensor DEF='F1description='F1'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- Fs1TRANS ROUTE:  [from Fs1Mover.value_changed to set_translation ] -->
<Transform DEF='Fs1TRANStranslation='-4.375 0.1 -0.375'>
<Shape USE='BlackKey'/>
<!-- Fs1 ROUTEs:  [from touchTime to PitchFs1.set_startTime ] [from touchTime to ClockFs1.set_startTime ] -->
<TouchSensor DEF='Fs1description='Fs1'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- G1TRANS ROUTE:  [from G1Mover.value_changed to set_translation ] -->
<Transform DEF='G1TRANStranslation='-4.25 0 0'>
<Shape USE='WhiteKey'/>
<!-- G1 ROUTEs:  [from touchTime to PitchG1.set_startTime ] [from touchTime to ClockG1.set_startTime ] -->
<TouchSensor DEF='G1description='G1'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- Gs1TRANS ROUTE:  [from Gs1Mover.value_changed to set_translation ] -->
<Transform DEF='Gs1TRANStranslation='-4.125 0.1 -0.375'>
<Shape USE='BlackKey'/>
<!-- Gs1 ROUTEs:  [from touchTime to PitchGs1.set_startTime ] [from touchTime to ClockGs1.set_startTime ] -->
<TouchSensor DEF='Gs1description='Gs1'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- A2TRANS ROUTE:  [from A2Mover.value_changed to set_translation ] -->
<Transform DEF='A2TRANStranslation='-4 0 0'>
<Shape USE='WhiteKey'/>
<!-- A2 ROUTEs:  [from touchTime to PitchA2.set_startTime ] [from touchTime to ClockA2.set_startTime ] -->
<TouchSensor DEF='A2description='A2'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- As2TRANS ROUTE:  [from As2Mover.value_changed to set_translation ] -->
<Transform DEF='As2TRANStranslation='-3.875 0.1 -0.375'>
<Shape USE='BlackKey'/>
<!-- As2 ROUTEs:  [from touchTime to PitchAs2.set_startTime ] [from touchTime to ClockAs2.set_startTime ] -->
<TouchSensor DEF='As2description='As2'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- B2TRANS ROUTE:  [from B2Mover.value_changed to set_translation ] -->
<Transform DEF='B2TRANStranslation='-3.75 0 0'>
<Shape USE='WhiteKey'/>
<!-- B2 ROUTEs:  [from touchTime to PitchB2.set_startTime ] [from touchTime to ClockB2.set_startTime ] -->
<TouchSensor DEF='B2description='B2'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- C2TRANS ROUTE:  [from C2Mover.value_changed to set_translation ] -->
<Transform DEF='C2TRANStranslation='-3.5 0 0'>
<Shape USE='WhiteKey'/>
<!-- C2 ROUTEs:  [from touchTime to PitchC2.set_startTime ] [from touchTime to ClockC2.set_startTime ] -->
<TouchSensor DEF='C2description='C2'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- Cs2TRANS ROUTE:  [from Cs2Mover.value_changed to set_translation ] -->
<Transform DEF='Cs2TRANStranslation='-3.375 0.1 -0.375'>
<Shape USE='BlackKey'/>
<!-- Cs2 ROUTEs:  [from touchTime to PitchCs2.set_startTime ] [from touchTime to ClockCs2.set_startTime ] -->
<TouchSensor DEF='Cs2description='Cs2'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- D2TRANS ROUTE:  [from D2Mover.value_changed to set_translation ] -->
<Transform DEF='D2TRANStranslation='-3.25 0 0'>
<Shape USE='WhiteKey'/>
<!-- D2 ROUTEs:  [from touchTime to PitchD2.set_startTime ] [from touchTime to ClockD2.set_startTime ] -->
<TouchSensor DEF='D2description='D2'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- Ds2TRANS ROUTE:  [from Ds2Mover.value_changed to set_translation ] -->
<Transform DEF='Ds2TRANStranslation='-3.125 0.1 -0.375'>
<Shape USE='BlackKey'/>
<!-- Ds2 ROUTEs:  [from touchTime to PitchDs2.set_startTime ] [from touchTime to ClockDs2.set_startTime ] -->
<TouchSensor DEF='Ds2description='Ds2'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- E2TRANS ROUTE:  [from E2Mover.value_changed to set_translation ] -->
<Transform DEF='E2TRANStranslation='-3 0 0'>
<Shape USE='WhiteKey'/>
<!-- E2 ROUTEs:  [from touchTime to PitchE2.set_startTime ] [from touchTime to ClockE2.set_startTime ] -->
<TouchSensor DEF='E2description='E2'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- F2TRANS ROUTE:  [from F2Mover.value_changed to set_translation ] -->
<Transform DEF='F2TRANStranslation='-2.75 0 0'>
<Shape USE='WhiteKey'/>
<!-- F2 ROUTEs:  [from touchTime to PitchF2.set_startTime ] [from touchTime to ClockF2.set_startTime ] -->
<TouchSensor DEF='F2description='F2'/>
<Sound minBack='5minFront='5'> </Sound>
</Transform>
<!-- Fs2TRANS ROUTE:  [from Fs2Mover.value_changed to set_translation ] -->
<Transform DEF='Fs2TRANStranslation='-2.625 0.1 -0.375'>
<Shape USE='BlackKey'/>
<!-- Fs2 ROUTEs:  [from touchTime to PitchFs2.set_startTime ] [from touchTime to ClockFs2.set_startTime ] -->
<TouchSensor DEF='Fs2description='