package com.BlossomAssociates.keyboard; import java.applet.*; import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; public class JankoApplet2 extends Applet { private Sounder2 a3Sounder; private Sounder2 as3Sounder; private Sounder2 b3Sounder; private Sounder2 c4Sounder; private Sounder2 cs4Sounder; private Sounder2 d4Sounder; private Sounder2 ds4Sounder; private Sounder2 e4Sounder; private Sounder2 f4Sounder; private Sounder2 fs4Sounder; private Sounder2 g4Sounder; private Sounder2 gs4Sounder; private Sounder2 a4Sounder; private Sounder2 as4Sounder; private Sounder2 b4Sounder; private Sounder2 c5Sounder; private Sounder2 cs5Sounder; private Sounder2 d5Sounder; private Sounder2 ds5Sounder; private Sounder2 e5Sounder; private Sounder2 f5Sounder; private Sounder2 fs5Sounder; private Sounder2 g5Sounder; private Sounder2 gs5Sounder; public JankoApplet2() { super(); } private void loadSounds( java.net.URL theBase ) throws java.security.AccessControlException { a3Sounder = new Sounder2( getAudioClip( theBase, "a3.au" ) ); new Thread( a3Sounder ).start(); as3Sounder = new Sounder2( getAudioClip( theBase, "as3.au" ) ); new Thread( as3Sounder ).start(); b3Sounder = new Sounder2( getAudioClip( theBase, "b3.au" ) ); new Thread( b3Sounder ).start(); c4Sounder = new Sounder2( getAudioClip( theBase, "c4.au" ) ); new Thread( c4Sounder ).start(); cs4Sounder = new Sounder2( getAudioClip( theBase, "cs4.au" ) ); new Thread( cs4Sounder ).start(); d4Sounder = new Sounder2( getAudioClip( theBase, "d4.au" ) ); new Thread( d4Sounder ).start(); ds4Sounder = new Sounder2( getAudioClip( theBase, "ds4.au" ) ); new Thread( ds4Sounder ).start(); e4Sounder = new Sounder2( getAudioClip( theBase, "e4.au" ) ); new Thread( e4Sounder ).start(); f4Sounder = new Sounder2( getAudioClip( theBase, "f4.au" ) ); new Thread( f4Sounder ).start(); fs4Sounder = new Sounder2( getAudioClip( theBase, "fs4.au" ) ); new Thread( fs4Sounder ).start(); g4Sounder = new Sounder2( getAudioClip( theBase, "g4.au" ) ); new Thread( g4Sounder ).start(); gs4Sounder = new Sounder2( getAudioClip( theBase, "gs4.au" ) ); new Thread( gs4Sounder ).start(); a4Sounder = new Sounder2( getAudioClip( theBase, "a4.au" ) ); new Thread( a4Sounder ).start(); as4Sounder = new Sounder2( getAudioClip( theBase, "as4.au" ) ); new Thread( as4Sounder ).start(); b4Sounder = new Sounder2( getAudioClip( theBase, "b4.au" ) ); new Thread( b4Sounder ).start(); c5Sounder = new Sounder2( getAudioClip( theBase, "c5.au" ) ); new Thread( c5Sounder ).start(); cs5Sounder = new Sounder2( getAudioClip( theBase, "cs5.au" ) ); new Thread( cs5Sounder ).start(); d5Sounder = new Sounder2( getAudioClip( theBase, "d5.au" ) ); new Thread( d5Sounder ).start(); ds5Sounder = new Sounder2( getAudioClip( theBase, "ds5.au" ) ); new Thread( ds5Sounder ).start(); e5Sounder = new Sounder2( getAudioClip( theBase, "e5.au" ) ); new Thread( e5Sounder ).start(); f5Sounder = new Sounder2( getAudioClip( theBase, "f5.au" ) ); new Thread( f5Sounder ).start(); fs5Sounder = new Sounder2( getAudioClip( theBase, "fs5.au" ) ); new Thread( fs5Sounder ).start(); g5Sounder = new Sounder2( getAudioClip( theBase, "g5.au" ) ); new Thread( g5Sounder ).start(); gs5Sounder = new Sounder2( getAudioClip( theBase, "gs5.au" ) ); new Thread( gs5Sounder ).start(); } /* Stuff above might be portable to other user interfaces. Below is for an Applet. The Applet uses just AWT for portability amongst browsers, notably old MS IE browsers. Other possibilities would be a Swing Applet and/or Application and maybe a command line interface? Nevermind. AudioClip is in java.applet. So why bother about the command line? */ public String getAppletInfo() { return "Janko Keyboard Applet \n" + "version 2" + " July 2006 \n" + "Blossom Associates West \n" + "Java: " + System.getProperty( "java.version" ) + " " + System.getProperty( "java.vendor" ) + " " + System.getProperty( "os.arch" ) + " " + System.getProperty( "os.name" ) + " " + System.getProperty( "os.version" ); } /** * Get a component to listen for key strokes. * Also get all a containers components to listen. * This way it doesn't matter which component has the focus. * They all listen for keys. */ private void listen( Component theCandidate, KeyListener theListener ) { if ( theCandidate instanceof Container ) { Component[] cmpnt = ((Container)theCandidate).getComponents(); for ( int i = 0; i < cmpnt.length; i++ ) { listen( cmpnt[i], theListener ); } } else { theCandidate.addKeyListener( theListener ); } } public void init() { Panel[] row = { new Panel(), new Panel(), new Panel(), new Panel() }; row[1].add( new Label( "" ) ); row[3].add( new Label( "" ) ); Button a3u = new Button( "A" ); row[0].add( a3u ); row[2].add( new Label( " " ) ); Button as3u = new Button( "#" ); row[1].add( as3u ); row[3].add( new Label( " " ) ); Button b3u = new Button( "B" ); Button b3l = new Button( "B" ); row[0].add( b3u ); row[2].add( b3l ); Button c4u = new Button( "C" ); Button c4l = new Button( "C" ); row[1].add( c4u ); row[3].add( c4l ); Button cs4u = new Button( "#" ); Button cs4l = new Button( "#" ); row[0].add( cs4u ); row[2].add( cs4l ); Button d4u = new Button( "D" ); Button d4l = new Button( "D" ); row[1].add( d4u ); row[3].add( d4l ); Button ds4u = new Button( "#" ); Button ds4l = new Button( "#" ); row[0].add( ds4u ); row[2].add( ds4l ); Button e4u = new Button( "E" ); Button e4l = new Button( "E" ); row[1].add( e4u ); row[3].add( e4l ); Button f4u = new Button( "F" ); Button f4l = new Button( "F" ); row[0].add( f4u ); row[2].add( f4l ); Button fs4u = new Button( "#" ); Button fs4l = new Button( "#" ); row[1].add( fs4u ); row[3].add( fs4l ); Button g4u = new Button( "G" ); Button g4l = new Button( "G" ); row[0].add( g4u ); row[2].add( g4l ); Button gs4u = new Button( "#" ); Button gs4l = new Button( "#" ); row[1].add( gs4u ); row[3].add( gs4l ); Button a4u = new Button( "A" ); Button a4l = new Button( "A" ); row[0].add( a4u ); row[2].add( a4l ); Button as4u = new Button( "#" ); Button as4l = new Button( "#" ); row[1].add( as4u ); row[3].add( as4l ); Button b4u = new Button( "B" ); Button b4l = new Button( "B" ); row[0].add( b4u ); row[2].add( b4l ); Button c5u = new Button( "C" ); Button c5l = new Button( "C" ); row[1].add( c5u ); row[3].add( c5l ); Button cs5u = new Button( "#" ); Button cs5l = new Button( "#" ); row[0].add( cs5u ); row[2].add( cs5l ); Button d5u = new Button( "D" ); Button d5l = new Button( "D" ); row[1].add( d5u ); row[3].add( d5l ); Button ds5u = new Button( "#" ); Button ds5l = new Button( "#" ); row[0].add( ds5u ); row[2].add( ds5l ); Button e5u = new Button( "E" ); Button e5l = new Button( "E" ); row[1].add( e5u ); row[3].add( e5l ); Button f5u = new Button( "F" ); Button f5l = new Button( "F" ); row[0].add( f5u ); row[2].add( f5l ); Button fs5u = new Button( "#" ); Button fs5l = new Button( "#" ); row[1].add( fs5u ); row[3].add( fs5l ); Button g5u = new Button( "G" ); Button g5l = new Button( "G" ); row[0].add( g5u ); row[2].add( g5l ); Button gs5u = new Button( "#" ); row[1].add( gs5u ); row[3].add( new Label( "" ) ); row[0].add( new Label( "" ) ); row[2].add( new Label( "" ) ); setLayout( new GridLayout( 4, 1 ) ); add( row[0] ); add( row[1] ); add( row[2] ); add( row[3] ); java.net.URL base = getDocumentBase(); try { loadSounds( base ); a3u.addActionListener( a3Sounder ); as3u.addActionListener( as3Sounder ); b3u.addActionListener( b3Sounder ); b3l.addActionListener( b3Sounder ); c4u.addActionListener( c4Sounder ); c4l.addActionListener( c4Sounder ); cs4u.addActionListener( cs4Sounder ); cs4l.addActionListener( cs4Sounder ); d4u.addActionListener( d4Sounder ); d4l.addActionListener( d4Sounder ); ds4u.addActionListener( ds4Sounder ); ds4l.addActionListener( ds4Sounder ); e4u.addActionListener( e4Sounder ); e4l.addActionListener( e4Sounder ); f4u.addActionListener( f4Sounder ); f4l.addActionListener( f4Sounder ); fs4u.addActionListener( fs4Sounder ); fs4l.addActionListener( fs4Sounder ); g4u.addActionListener( g4Sounder ); g4l.addActionListener( g4Sounder ); gs4u.addActionListener( gs4Sounder ); gs4l.addActionListener( gs4Sounder ); a4u.addActionListener( a4Sounder ); a4l.addActionListener( a4Sounder ); as4u.addActionListener( as4Sounder ); as4l.addActionListener( as4Sounder ); b4u.addActionListener( b4Sounder ); b4l.addActionListener( b4Sounder ); c5u.addActionListener( c5Sounder ); c5l.addActionListener( c5Sounder ); cs5u.addActionListener( cs5Sounder ); cs5l.addActionListener( cs5Sounder ); d5u.addActionListener( d5Sounder ); d5l.addActionListener( d5Sounder ); ds5u.addActionListener( ds5Sounder ); ds5l.addActionListener( ds5Sounder ); e5u.addActionListener( e5Sounder ); e5l.addActionListener( e5Sounder ); f5u.addActionListener( f5Sounder ); f5l.addActionListener( f5Sounder ); fs5u.addActionListener( fs5Sounder ); fs5l.addActionListener( fs5Sounder ); g5u.addActionListener( g5Sounder ); g5l.addActionListener( g5Sounder ); gs5u.addActionListener( gs5Sounder ); } catch ( java.security.AccessControlException ace ) { System.err.println( ace.getMessage() ); } listen( this, new KeyAdapter() { public void keyPressed( KeyEvent ke ) { int k = ke.getKeyCode(); System.out.println( "key code: " + k ); if ( ke.VK_1 == k ) { a3Sounder.setVolume( 1 ); } else if ( ke.VK_Q == k ) as3Sounder.setVolume( 1 ); else if ( ke.VK_2 == k || ke.VK_A == k ) b3Sounder.setVolume( 1 ); else if ( ke.VK_W == k || ke.VK_Z == k ) c4Sounder.setVolume( 1 ); else if ( ke.VK_3 == k || ke.VK_S == k ) cs4Sounder.setVolume( 1 ); else if ( ke.VK_E == k || ke.VK_X == k ) d4Sounder.setVolume( 1 ); else if ( ke.VK_4 == k || ke.VK_D == k ) ds4Sounder.setVolume( 1 ); else if ( ke.VK_R == k || ke.VK_C == k ) e4Sounder.setVolume( 1 ); else if ( ke.VK_5 == k || ke.VK_F == k ) f4Sounder.setVolume( 1 ); else if ( ke.VK_T == k || ke.VK_V == k ) fs4Sounder.setVolume( 1 ); else if ( ke.VK_6 == k || ke.VK_G == k ) g4Sounder.setVolume( 1 ); else if ( ke.VK_Y == k || ke.VK_B == k ) gs4Sounder.setVolume( 1 ); else if ( ke.VK_7 == k || ke.VK_H == k ) a4Sounder.setVolume( 1 ); else if ( ke.VK_U == k || ke.VK_N == k ) as4Sounder.setVolume( 1 ); else if ( ke.VK_8 == k || ke.VK_J == k ) b4Sounder.setVolume( 1 ); else if ( ke.VK_I == k || ke.VK_M == k ) c5Sounder.setVolume( 1 ); else if ( ke.VK_9 == k || ke.VK_K == k ) cs5Sounder.setVolume( 1 ); else if ( ke.VK_O == k || ke.VK_COMMA == k ) d5Sounder.setVolume( 1 ); else if ( ke.VK_0 == k || ke.VK_L == k ) ds5Sounder.setVolume( 1 ); else if ( ke.VK_P == k || ke.VK_PERIOD == k ) e5Sounder.setVolume( 1 ); else if ( ke.VK_SUBTRACT == k || ke.VK_SEMICOLON == k ) f5Sounder.setVolume( 1 ); else if ( ke.VK_OPEN_BRACKET == k || ke.VK_SLASH == k ) fs5Sounder.setVolume( 1 ); else if ( ke.VK_EQUALS == k || ke.VK_QUOTE == k) g5Sounder.setVolume( 1 ); else if ( ke.VK_CLOSE_BRACKET == k ) gs5Sounder.setVolume( 1 ); } public void keyReleased( KeyEvent ke ) { int k = ke.getKeyCode(); if ( ke.VK_1 == k ) { a3Sounder.setVolume( 0 ); } else if ( ke.VK_Q == k ) as3Sounder.setVolume( 0 ); else if ( ke.VK_2 == k || ke.VK_A == k ) b3Sounder.setVolume( 0 ); else if ( ke.VK_W == k || ke.VK_Z == k ) c4Sounder.setVolume( 0 ); else if ( ke.VK_3 == k || ke.VK_S == k ) cs4Sounder.setVolume( 0 ); else if ( ke.VK_E == k || ke.VK_X == k ) d4Sounder.setVolume( 0 ); else if ( ke.VK_4 == k || ke.VK_D == k ) ds4Sounder.setVolume( 0 ); else if ( ke.VK_R == k || ke.VK_C == k ) e4Sounder.setVolume( 0 ); else if ( ke.VK_5 == k || ke.VK_F == k ) f4Sounder.setVolume( 0 ); else if ( ke.VK_T == k || ke.VK_V == k ) fs4Sounder.setVolume( 0 ); else if ( ke.VK_6 == k || ke.VK_G == k ) g4Sounder.setVolume( 0 ); else if ( ke.VK_Y == k || ke.VK_B == k ) gs4Sounder.setVolume( 0 ); else if ( ke.VK_7 == k || ke.VK_H == k ) a4Sounder.setVolume( 0 ); else if ( ke.VK_U == k || ke.VK_N == k ) as4Sounder.setVolume( 0 ); else if ( ke.VK_8 == k || ke.VK_J == k ) b4Sounder.setVolume( 0 ); else if ( ke.VK_I == k || ke.VK_M == k ) c5Sounder.setVolume( 0 ); else if ( ke.VK_9 == k || ke.VK_K == k ) cs5Sounder.setVolume( 0 ); else if ( ke.VK_O == k || ke.VK_COMMA == k ) d5Sounder.setVolume( 0 ); else if ( ke.VK_0 == k || ke.VK_L == k ) ds5Sounder.setVolume( 0 ); else if ( ke.VK_P == k || ke.VK_PERIOD == k ) e5Sounder.setVolume( 0 ); else if ( ke.VK_SUBTRACT == k || ke.VK_SEMICOLON == k ) f5Sounder.setVolume( 0 ); else if ( ke.VK_OPEN_BRACKET == k || ke.VK_SLASH == k ) fs5Sounder.setVolume( 0 ); else if ( ke.VK_EQUALS == k || ke.VK_QUOTE == k) g5Sounder.setVolume( 0 ); else if ( ke.VK_CLOSE_BRACKET == k ) gs5Sounder.setVolume( 0 ); else showStatus( getAppletInfo().replace( '\n', '-' ) ); } } ); } }