/******************************************************** * Speaker Verification Implemented Security * * CA4 Project * * Written by: Ronan Crowley (97084603) * * and Paul Connolly (97307599) * ********************************************************/ import Audio.*; import java.io.*; import java.net.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Record extends JDialog { private Container c; private GridLayout grid; private String contents; private Audio.SoundBite s = null; private int numseconds = 10; ObjectInputStream input; ObjectOutputStream output; String IPAddress; String username; Icon sv = new ImageIcon("sv.gif"); /** Constructor @param stream ObjectInputStream which is already established between Client and Server @param whatToSay The randomly generated text for what to say @param parent The calling Frame **/ public Record(ObjectInputStream istream, ObjectOutputStream ostream, String whatToSay, Frame parent, String IP, String un) { super(parent); //Assign passed-in variables to private contents = whatToSay; username =un; input = istream; output = ostream; IPAddress = IP; try { init(); } catch(Exception e) { e.printStackTrace(); } pack(); } /** Component initialization **/ private void init() throws Exception { this.setTitle("Say this......"); grid = new GridLayout( 1, 2 ); c = getContentPane(); c.setLayout( grid ); //Setup GUI JTextArea jTextArea1 = new JTextArea(); JButton record = new JButton(); jTextArea1.setText("\n\n"+contents+"\n\n"); jTextArea1.setEditable(false); jTextArea1.setBackground(Color.white); jTextArea1.setToolTipText("Press record and say this !"); record.setText("RECORD"); record.setMnemonic('r'); c.add(jTextArea1); c.add(record); record.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { record_actionPerformed(e); } }); // Setup recording at 22050 kHz s = new Audio.SoundBite(false, false, Audio.SampleRate.R_22050, numseconds * Audio.SampleRate.R_22050 .toInt()); setSize( 300, 200 ); show(); } /** Record the sample, send to server and test ! **/ public void record_actionPerformed(ActionEvent e) { try { System.out.println("\tStarting recording"); { s.recordStart(); // s.recordWaitFor(); // or int i=10; String time = "\t"+i+" Seconds"; long finishTime = System.currentTimeMillis()+1000; while (i>0) { if (System.currentTimeMillis() >= finishTime) { finishTime += 1000; time = "\t"+i+" Seconds"; i--; System.out.println(time); } } s.recordWaitForGet(); } System.out.println("\tRecording done"); s.save("speech.wav"); s.dispose(); } catch (Audio.SoundBiteException aud) { aud.printStackTrace(); System.err.println("Audio Exception: " + aud.getMessage()); } //Once recorded, send file. Sendfile transmit = new Sendfile(); transmit.send(IPAddress, "speech.wav"); dispose(); //Finished sending WAV now recieve result ! try{ String message=(String) input.readObject(); int i=0; while (message.charAt(i) != '.'){ i++; } int compare = Integer.parseInt(message.substring(0, i)); //Receive individual Threshold from Server String threshold = (String) input.readObject(); i=0; while (threshold.charAt(i) != '.'){ i++; } int compare1 = Integer.parseInt(threshold.substring(0, i)); System.out.println("Sum of log liklihoods: "+compare); System.out.println("Individual Threshold: "+compare1); //Test ! //10000 and above indicates all silence (i.e. Broken Microphone) if ((compare >= compare1) && (compare < 10000)) { JOptionPane.showMessageDialog(this, "You have successfuly logged in to the System.\n\nYour x: has been mapped to a secure area.", "Successful Logon", 1, sv); try { //Map hidden and secure drive Runtime.getRuntime().exec("net use x: \\\\l114-129\\secure sv /User:sv"); /** Will not appear to work in demo, as with Ronan and Paul are admin's on both PC's, thus attempts to run this would result in: "ERROR 1219: The credentials supplied conflict with an existing set of credentials." **/ } catch(IOException ioe) { System.err.println("Error : " + ioe.toString()); } } else { JOptionPane.showMessageDialog(this, "Your voice was not within an acceptable threshold.\n\nAccess denied.", "Unsuccessful Logon", 1, sv); } } catch (ClassNotFoundException cnfex){ System.out.println("Unknown object type received"); } catch (EOFException eof) { System.out.println("Server terminated connection"); } catch ( IOException io) { io.printStackTrace(); } catch ( NumberFormatException n) { System.out.println(n); } } }