Eight-eight key keyboard, extrapolated from VRML Sourcebook Figure 24.4, including animation of key movements coordinated with sounding of key when touched.
Not all tones work (hardware, operating system dependent?) and so may need some higher-frequency sound files.
X3D Specification Comment: pitch attribute might be better on Sound node, thus avoiding need for AudioClip to reload the same audio file multiple times
Figure 24.4, The VRML 2.0 Sourcebook, Copyright [1997] By Andrea L. Ames, David R. Nadeau, and John L. Moreland
X3D-Edit 3.3, https://www.web3d.org/x3d/tools/X3D-Edit
"tone1.wav" "../../Vrml2Sourcebook/Chapter24-Sound/tone1.wav" "https://www.web3d.org/x3d/content/examples/Basic/StudentProjects/tone1.wav" "https://www.web3d.org/x3d/content/examples/Vrml2Sourcebook/Chapter24-Sound/tone1.wav"
ecmascript: function playScriptedNotes(time, eventTime){ playC4=eventTime; playD4=eventTime+1.1; playE4=eventTime+2.2; playF4=eventTime+3.3; playG4=eventTime+4.4; playA5=eventTime+5.5; } function hideUnscriptedKeyWarnings () { playA0=0; playAs0=0; playB0=0; playC0=0; playCs0=0; playD0=0; playDs0=0; playE0=0; playF0=0; playFs0=0; playG0=0; playGs0=0; playA1=0; playAs1=0; playB1=0; playC1=0; playCs1=0; playD1=0; playDs1=0; playE1=0; playF1=0; playFs1=0; playG1=0; playGs1=0; playA2=0; playAs2=0; playB2=0; playC2=0; playCs2=0; playD2=0; playDs2=0; playE2=0; playF2=0; playFs2=0; playG2=0; playGs2=0; playA3=0; playAs3=0; playB3=0; playC3=0; playCs3=0; playD3=0; playDs3=0; playE3=0; playF3=0; playFs3=0; playG3=0; playGs3=0; playA4=0; playAs4=0; playB4=0; playC4=0; playCs4=0; playD4=0; playDs4=0; playE4=0; playF4=0; playFs4=0; playG4=0; playGs4=0; playA5=0; playAs5=0; playB5=0; playC5=0; playCs5=0; playD5=0; playDs5=0; playE5=0; playF5=0; playFs5=0; playG5=0; playGs5=0; playA6=0; playAs6=0; playB6=0; playC6=0; playCs6=0; playD6=0; playDs6=0; playE6=0; playF6=0; playFs6=0; playG6=0; playGs6=0; playA7=0; playAs7=0; playB7=0; playC7=0; playCs7=0; playD7=0; playDs7=0; playE7=0; playF7=0; playFs7=0; playG7=0; playGs7=0; playA8=0; playAs8=0; playB8=0; playC8=0; }