X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=benchmarks%2Fdrivers%2FJava%2FIHome%2FIHome.java;h=b7ba3b4414d9cb0f1405ea10118f81b47d062db5;hb=258a0230ed01ad0927ed54d37aafa3dd37da5af0;hp=a9bcf0d50452919929564e36535840cb9f77dc42;hpb=3e3e0d0e468e7f791963c1c14e06966563d3f65c;p=iot2.git diff --git a/benchmarks/drivers/Java/IHome/IHome.java b/benchmarks/drivers/Java/IHome/IHome.java index a9bcf0d..b7ba3b4 100644 --- a/benchmarks/drivers/Java/IHome/IHome.java +++ b/benchmarks/drivers/Java/IHome/IHome.java @@ -31,6 +31,9 @@ import java.util.LinkedList; import java.util.concurrent.Semaphore; import java.util.concurrent.CopyOnWriteArrayList; +// TODO: REMOVE THIS +import java.util.Random; +import java.io.File; public class IHome implements Speaker { @@ -50,6 +53,8 @@ public class IHome implements Speaker { public static final long RTP_TIMESTAMP_INCREMENT_VALUE = 352L; public static final long SOURCE_ID = 1326796157; public static final long SEQUENCE_ID = 0x86b27741; + // TODO: REMOVE THIS + public static final String MUSIC_FILE_DIRECTORY = "./music/"; // file that the music files are in private IoTDeviceAddress tcpAddress = null; private IoTDeviceAddress myAddress = null; @@ -102,6 +107,11 @@ public class IHome implements Speaker { @config private IoTSet speakerAddresses; + public IHome(IoTSet devAddresses) { + this(); + speakerAddresses = devAddresses; + } + public IHome() { didInit.set(false); playbackAboutToStart.set(false); @@ -311,12 +321,15 @@ public class IHome implements Speaker { if (keyValue.length == 2) { if (keyValue[0].equals("server_port")) { serverPort = Integer.parseInt(keyValue[1]); + System.out.println("DEBUG: Server port: " + serverPort); } else if (keyValue[0].equals("control_port")) { controlPort = Integer.parseInt(keyValue[1]); + System.out.println("DEBUG: Control port: " + controlPort); } else if (keyValue[0].equals("timing_port")) { timingPort = Integer.parseInt(keyValue[1]); + System.out.println("DEBUG: Timing port: " + timingPort); } } @@ -963,6 +976,110 @@ public class IHome implements Speaker { long nanotime = System.nanoTime(); return nanotime; } + + + // TODO: REMOVE THIS + /** + * Prepare the speakers for a new song to start playing + */ + private void prepareNextSong(IHome ih) { + System.out.println("Starting Music Prep"); + + System.out.println("Stopping all device playback"); + // stop all devices that are still playing and clear their buffers + // they are about to end playback anyways + try { + + if (ih.getPlaybackState()) { + ih.stopPlayback(); + } + ih.clearData(); + } catch (Exception e) { + e.printStackTrace(); + } + + // get the music file names that are in the music files directory + File musicFolder = new File(MUSIC_FILE_DIRECTORY); + File[] audioFiles = musicFolder.listFiles(); + List audioFileNames = new ArrayList(); + + // put all names in a list + for (int i = 0; i < audioFiles.length; i++) { + if (audioFiles[i].isFile()) { + try { + audioFileNames.add(audioFiles[i].getCanonicalPath()); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + } + + // pick a random file to play + Random rand = new Random(System.nanoTime()); + String audioFilename = audioFileNames.get(rand.nextInt(audioFileNames.size())); + + System.out.println("Going to load audio file"); + System.out.println(audioFilename); + + // decode the mp3 file + System.out.println("Starting Decode"); + MP3Decoder dec = new MP3Decoder(audioFilename); + List dat = dec.getDecodedFrames(); + System.out.println("Ending Decode"); + + // count the number of samples + int count = 0; + for (short[] d : dat) { + count += d.length; + } + + // make into a single large buffer for 1 large RMI call + short[] compressedArray = new short[count]; + count = 0; + for (short[] d : dat) { + for (short s : d) { + compressedArray[count] = s; + count++; + } + } + + System.out.println("Loading Speakers"); + // send the new data to all the speakers + ih.loadData(compressedArray, 0, compressedArray.length); + System.out.println("Done loading a single speaker with data"); + System.out.println("All Speakers done loading"); + + // Attack the speaker + System.out.println("Trying to play the song on the speaker"); + ih.startPlayback(); + ih.setPosition(0); + } + + /* TODO: Uncomment this part to do speaker test + public static void main(String[] args) throws Exception { + + System.out.println("Executing main function!"); + //IoTDeviceAddress iotDevAdd1 = new IoTDeviceAddress("192.168.0.93", 60000, 1024, false, false); + //IoTDeviceAddress iotDevAdd2 = new IoTDeviceAddress("192.168.0.90", 60001, -1, false, false); + //IoTDeviceAddress iotDevAdd3 = new IoTDeviceAddress("192.168.0.93", 60010, -1, false, true); + //IoTDeviceAddress iotDevAdd4 = new IoTDeviceAddress("192.168.0.93", 60011, -1, false, true); + //IoTDeviceAddress iotDevAdd5 = new IoTDeviceAddress("192.168.0.93", 60012, -1, false, true); + IoTDeviceAddress iotDevAdd1 = new IoTDeviceAddress(args[0], 60000, 1024, false, false); + IoTDeviceAddress iotDevAdd2 = new IoTDeviceAddress(args[1], 60001, -1, false, false); + IoTDeviceAddress iotDevAdd3 = new IoTDeviceAddress(args[0], 60010, -1, false, true); + IoTDeviceAddress iotDevAdd4 = new IoTDeviceAddress(args[0], 60011, -1, false, true); + IoTDeviceAddress iotDevAdd5 = new IoTDeviceAddress(args[0], 60012, -1, false, true); + Set set = new HashSet(); + set.add(iotDevAdd1); + set.add(iotDevAdd2); + set.add(iotDevAdd3); + set.add(iotDevAdd4); + set.add(iotDevAdd5); + IoTSet iotset = new IoTSet(set); + IHome ih = new IHome(iotset); + ih.init(); + ih.prepareNextSong(ih); + }*/ }