From bafe96b16ba665ca5205ed5da97785f828e28711 Mon Sep 17 00:00:00 2001 From: Rik Veenboer Date: Sun, 18 Sep 2011 11:08:49 +0000 Subject: [PATCH] Diverse aanpassingen. --- java/mimis.dll | Bin 164713 -> 164713 bytes java/src/mimis/Main.java | 4 +- java/src/mimis/Worker.java | 2 +- .../application/PhotoViewerApplication.java | 106 +++++++++++++ .../gomplayer/GomPlayerApplication.java | 2 +- .../application/robot/RobotApplication.java | 39 +++++ java/src/mimis/event/EventListener.java | 3 +- java/src/mimis/util/BufferedSound.java | 4 +- java/src/mimis/util/Sound.java | 144 +++++++++++++++--- java/src/wiiusej/WiiUseApi.java | 4 +- java/src/wiiusej/WiiUseApiManager.java | 8 +- java/src/wiiusej/Wiimote.java | 10 +- java/wiiuse.dll | Bin 4110222 -> 4111430 bytes java/wiiusej.dll | Bin 40874 -> 40874 bytes 14 files changed, 290 insertions(+), 36 deletions(-) create mode 100644 java/src/mimis/application/PhotoViewerApplication.java create mode 100644 java/src/mimis/application/robot/RobotApplication.java diff --git a/java/mimis.dll b/java/mimis.dll index 790db4259685e8db5e953d0359edef0c288041ca..55d8bdc22ef777bd2f31c3e8d8d4749fc58b32e5 100644 GIT binary patch delta 35 pcmaFa#`Us|YeEOJ$7%10-M&oTX^pqG-eT0+2@=@OzKb#GBmf#D4_g2L delta 35 pcmaFa#`Us|YeEO}ql;P-yM38#iyLoky~U`t6C|*meHUZWNdPO^5Lf^J diff --git a/java/src/mimis/Main.java b/java/src/mimis/Main.java index 18044d2..21601ec 100644 --- a/java/src/mimis/Main.java +++ b/java/src/mimis/Main.java @@ -1,5 +1,6 @@ package mimis; +import mimis.application.PhotoViewerApplication; import mimis.application.cmd.windows.gomplayer.GomPlayerApplication; import mimis.application.cmd.windows.winamp.WinampApplication; import mimis.application.cmd.windows.wmp.WMPApplication; @@ -37,7 +38,8 @@ public class Main { new MPCApplication(), new VLCApplication(), new WinampApplication(), - new iPodApplication()}; + new iPodApplication(), + new PhotoViewerApplication()}; deviceArray = new Device[] { new LircDevice(), new WiimoteDevice(), diff --git a/java/src/mimis/Worker.java b/java/src/mimis/Worker.java index 0229b30..2a97931 100644 --- a/java/src/mimis/Worker.java +++ b/java/src/mimis/Worker.java @@ -101,6 +101,6 @@ public abstract class Worker implements Runnable { } } } - + protected abstract void work(); } diff --git a/java/src/mimis/application/PhotoViewerApplication.java b/java/src/mimis/application/PhotoViewerApplication.java new file mode 100644 index 0000000..d3dc254 --- /dev/null +++ b/java/src/mimis/application/PhotoViewerApplication.java @@ -0,0 +1,106 @@ +package mimis.application; + +import mimis.Worker; +import mimis.application.robot.RobotApplication; +import mimis.exception.worker.ActivateException; +import mimis.exception.worker.DeactivateException; +import mimis.value.Action; +import mimis.value.Key; + +public class PhotoViewerApplication extends RobotApplication { + protected final static String TITLE = "Photo Viewer"; + + protected static final int ZOOM_SLEEP = 100; + protected static final int DELETE_SLEEP = 2000; + + protected ZoomWorker zoomWorker; + protected boolean fullscreen; + + public PhotoViewerApplication() { + super(TITLE); + zoomWorker = new ZoomWorker(); + fullscreen = false; + } + + public void stop() { + super.stop(); + zoomWorker.stop(); + } + + public void begin(Action action) { + try { + switch (action) { + case VOLUME_UP: + zoomWorker.activate(1); + break; + case VOLUME_DOWN: + zoomWorker.activate(-1); + break; + } + } catch (ActivateException e) { + log.error(e); + } + } + + public void end(Action action) { + log.trace("PhotoViewerApplication end: " + action); + switch (action) { + case VOLUME_UP: + case VOLUME_DOWN: + try { + zoomWorker.deactivate(); + } catch (DeactivateException e) { + log.error(e); + } + break; + case FORWARD: + break; + case REWIND: + break; + case NEXT: + press(Key.RIGHT); + break; + case PREVIOUS: + press(Key.LEFT); + break; + case MUTE: + press(Key.CONTROL); + press(Key.NUMPAD0); + release(Key.CONTROL); + break; + case FULLSCREEN: + press(fullscreen ? Key.ESCAPE : Key.F11); + fullscreen = !fullscreen; + break; + case DISLIKE: + boolean restore = false; + if (fullscreen) { + end(Action.FULLSCREEN); + sleep(DELETE_SLEEP); + restore = true; + } + press(Key.F16); + press('Y'); + if (restore) { + sleep(DELETE_SLEEP); + end(Action.FULLSCREEN); + } + break; + } + } + + protected class ZoomWorker extends Worker { + protected int zoomDirection; + + public void activate(int zoomDirection) throws ActivateException { + super.activate(); + this.zoomDirection = zoomDirection; + } + + public void work() { + Key key = zoomDirection > 0 ? Key.ADD : Key.SUBTRACT; + press(key); + sleep(ZOOM_SLEEP); + } + } +} diff --git a/java/src/mimis/application/cmd/windows/gomplayer/GomPlayerApplication.java b/java/src/mimis/application/cmd/windows/gomplayer/GomPlayerApplication.java index b00ba00..a214a89 100644 --- a/java/src/mimis/application/cmd/windows/gomplayer/GomPlayerApplication.java +++ b/java/src/mimis/application/cmd/windows/gomplayer/GomPlayerApplication.java @@ -34,7 +34,7 @@ public class GomPlayerApplication extends WindowsApplication { log.trace("GomPlayerApplication begin: " + action); try { switch (action) { - case VOLUME_UP: + case VOLUME_UP: volumeWorker.activate(1); break; case VOLUME_DOWN: diff --git a/java/src/mimis/application/robot/RobotApplication.java b/java/src/mimis/application/robot/RobotApplication.java new file mode 100644 index 0000000..8119096 --- /dev/null +++ b/java/src/mimis/application/robot/RobotApplication.java @@ -0,0 +1,39 @@ +package mimis.application.robot; + +import java.awt.AWTException; +import java.awt.Robot; + +import mimis.Application; +import mimis.exception.worker.ActivateException; +import mimis.value.Key; + +public class RobotApplication extends Application { + protected Robot robot; + + public RobotApplication(String title) { + super(title); + } + + public void activate() throws ActivateException { + try { + robot = new Robot(); + robot.setAutoWaitForIdle(true); + } catch (AWTException e) { + log.error(e); + throw new ActivateException(); + } + super.activate(); + } + + public void press(Key key) { + robot.keyPress(key.getCode()); + } + + public void press(char key) { + robot.keyPress(key); + } + + public void release(Key key) { + robot.keyRelease(key.getCode()); + } +} diff --git a/java/src/mimis/event/EventListener.java b/java/src/mimis/event/EventListener.java index 5be1369..7b56a44 100644 --- a/java/src/mimis/event/EventListener.java +++ b/java/src/mimis/event/EventListener.java @@ -37,10 +37,11 @@ public abstract class EventListener extends Worker { } public void stop() { - super.stop(); synchronized (work) { work.notifyAll(); } + + super.stop(); } public abstract void event(Event event); diff --git a/java/src/mimis/util/BufferedSound.java b/java/src/mimis/util/BufferedSound.java index 3cbab1f..5ada054 100644 --- a/java/src/mimis/util/BufferedSound.java +++ b/java/src/mimis/util/BufferedSound.java @@ -11,8 +11,8 @@ public class BufferedSound { this.sampleSize = sampleSize; } - public byte[] getReport(int paramInt) { - return soundData[paramInt]; + public byte[] getReport(int i) { + return soundData[i]; } public int numReports() { diff --git a/java/src/mimis/util/Sound.java b/java/src/mimis/util/Sound.java index 7c477ab..86a0d92 100644 --- a/java/src/mimis/util/Sound.java +++ b/java/src/mimis/util/Sound.java @@ -8,6 +8,9 @@ import java.util.TimerTask; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.DataLine; +import javax.sound.sampled.SourceDataLine; +import javax.sound.sampled.UnsupportedAudioFileException; import wiiusej.Wiimote; import mimis.device.wiimote.WiimoteDevice; @@ -27,62 +30,121 @@ public class Sound { public static final int yamaha_difflookup[] = { 1, 3, 5, 7, 9, 11, 13, 15, - -1, -3, -5, -7, -9, -11, -13, -15}; + -1, -3, -5, -7, -9, -11, -13, 15}; public Object object = new Object(); public static void main(String[] args) { + /*File file = new File("sound.wav"); + try { + AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file); + AudioFormat au = audioInputStream.getFormat(); + System.out.println(au.getSampleRate());// Hz + System.out.println(au.getSampleSizeInBits());// bits + } catch (Exception e) { + e.printStackTrace(); + }*/ new Sound().start(); } public void start() { + File file = new File("1kSine16 (3130).wav"); + play(file); + System.exit(0);//if (true) return; + WiimoteService wiimoteService = new WiimoteService(); try { WiimoteDevice wiimoteDevice = new WiimoteDevice(); Wiimote wiimote = wiimoteService.getDevice(wiimoteDevice); - File file = new File("sound.wav"); - AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file); - BufferedSound bufferedSound = bufferSound(audioInputStream); + AudioFormat audioFormat = audioInputStream.getFormat(); + // BufferedSound bufferedSound = bufferSound(audioInputStream); + System.out.println(audioInputStream.getFormat().getSampleRate()); + System.out.println(audioInputStream.getFormat().getFrameRate()); + + //System.out.println(bufferedSound.getSampleRate()); + //byte rate = (byte) (48000 / bufferedSound.getSampleRate()); + //wiimote.setSpeakerRate((byte) rate, (byte) 0x00); + + wiimote.setSpeakerFormat(PCM); + //wiimote.setSpeakerRate((byte) 0, rate); + wiimote.setSpeakerRate((byte) 0x00, (byte) (48000 / audioFormat.getSampleRate())); // pcm + //wiimote.setSpeakerRate((byte) 0xd0, (byte) 0x07); // adpcm + wiimote.setSpeakerVolume(1); wiimote.activateSpeaker(); - wiimote.setSpeakerConfig(PCM, bufferedSound.getSampleRate(), 1); + /* File file = new File("volbeat_pcm_u8_32_1500.raw"); + FileInputStream fin = new FileInputStream(file); + byte[] block = new byte[20]; + while (fin.read(block) != -1) { + wiimote.streamSpeakerData(block); + }*/ - AudioFormat audioFormat = audioInputStream.getFormat(); - double sampleSizeInBytes = audioFormat.getSampleSizeInBits() / 8D; - double samplesPerBlock = BLOCK_SIZE / sampleSizeInBytes; - int step = (int) Math.round(1000 * samplesPerBlock / audioFormat.getSampleRate()); - - playBufferedSound(wiimote, bufferedSound, step); - - object.wait(); + //playBufferedSound(wiimote, bufferedSound, step); + playSound(wiimote, audioInputStream); + synchronized (object) { + object.wait(); + } wiimoteService.exit(); } catch (Exception e) { e.printStackTrace(); } } + public void playSound(final Wiimote wiimote, final AudioInputStream audioInputStream) { + Timer timer = new Timer(); + TimerTask timerTask = new TimerTask() { + public void run() { + try { + byte[] buffer = new byte[20]; + if (audioInputStream.read(buffer) != -1) { + buffer[0] = -2; + System.out.format("%2x\n", buffer[0]); + wiimote.streamSpeakerData(buffer); + } else { + cancel(); + synchronized (object) { + object.notifyAll(); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }; + AudioFormat audioFormat = audioInputStream.getFormat(); + double sampleSizeInBytes = audioFormat.getSampleSizeInBits() / 8D; + double samplesPerBlock = BLOCK_SIZE / sampleSizeInBytes; + int step = (int) Math.round(1000 * samplesPerBlock / (float) audioFormat.getSampleRate()); + System.out.println("step: " + step); + timer.scheduleAtFixedRate(timerTask, 0, step); + } + public void playBufferedSound(final Wiimote wiimote, final BufferedSound bufferedSound, int step) { Timer timer = new Timer(); TimerTask timerTask = new TimerTask() { int i = 0; public void run() { wiimote.streamSpeakerData(bufferedSound.getReport(i)); + /*if (i % 10 == 0) { + wiimote.setSpeakerVolume(Math.random()); + wiimote.setSpeakerConfig(); + }*/ if (++i > bufferedSound.numReports()) { cancel(); + object.notifyAll(); } } }; timer.scheduleAtFixedRate(timerTask, 0, step); - object.notifyAll(); } public BufferedSound bufferSound(AudioInputStream audioInputStream) throws IOException { AudioFormat audioFormat = audioInputStream.getFormat(); int size = (int) (audioInputStream.getFrameLength() * audioFormat.getFrameSize()); - byte[][] sound = new byte[size / BLOCK_SIZE + 1][BLOCK_SIZE + 1]; + byte[][] sound = new byte[size / BLOCK_SIZE + 1][BLOCK_SIZE]; for (int i = 0; i < sound.length; ++i) { byte[] block = new byte[BLOCK_SIZE]; int j = 0; @@ -94,15 +156,59 @@ public class Sound { j += read; } while (j < BLOCK_SIZE); for (j = 0; j < BLOCK_SIZE; ++j) { - if ((i * 20 + j) > size) { + if ((i * BLOCK_SIZE + j) > size) { break; } - sound[i][j] = block[j]; - //sound[i][j] = 0x34; - sound[i][j] = (byte) (Math.random() * 0xff); + //sound[i][j] = block[j]; + sound[i][j] = (byte) ((j % 2 == 0) ? 0x33 : 0xcc); + //sound[i][j] = (byte) (Math.random() * 0xff); } } audioInputStream.close(); return new BufferedSound(sound, (int) audioFormat.getSampleRate(), audioFormat.getSampleSizeInBits()); } + + public void play(File file) { + + + try { + AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file); + AudioFormat audioFormat = audioInputStream.getFormat(); + System.out.println(audioFormat.getEncoding()); + System.out.println(audioFormat.getSampleRate()); + System.out.println(audioFormat.getFrameRate()); + AudioFormat newFormat = new AudioFormat( + AudioFormat.Encoding.PCM_SIGNED, + 3130, 8, 1, 1, 3130, false); + AudioInputStream newAudioInputStream = new AudioInputStream( + audioInputStream, + newFormat, + audioInputStream.getFrameLength() * audioFormat.getFrameSize()); + play(newAudioInputStream); + } catch (UnsupportedAudioFileException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void play(AudioInputStream audioInputStream) { + try { + AudioFormat audioFormat = audioInputStream.getFormat(); + DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, audioFormat); + SourceDataLine sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo); + sourceDataLine.open(audioFormat); + sourceDataLine.start(); + int i; + byte[] buffer = new byte[128]; + while ((i = audioInputStream.read(buffer, 0, buffer.length)) != -1) { + sourceDataLine.write(buffer, 0, i); + } + sourceDataLine.drain(); + sourceDataLine.close(); + } + catch(Exception e) { + e.printStackTrace(); + } + } } diff --git a/java/src/wiiusej/WiiUseApi.java b/java/src/wiiusej/WiiUseApi.java index 61f1e5c..303cb32 100644 --- a/java/src/wiiusej/WiiUseApi.java +++ b/java/src/wiiusej/WiiUseApi.java @@ -359,8 +359,8 @@ public class WiiUseApi { native void activateSpeaker(int id); native void deactivateSpeaker(int id); native void setSpeakerFormat(int id, byte format); - native void setSpeakerRate(int id, int rate); + native void setSpeakerRate(int id, byte rate, byte freq); native void setSpeakerVolume(int id, double volume); - native void setSpeakerConfig(int id, byte format, int rate, double volume); + native void setSpeakerConfig(int id); native void streamSpeakerData(int id, byte[] block); } diff --git a/java/src/wiiusej/WiiUseApiManager.java b/java/src/wiiusej/WiiUseApiManager.java index bbefe2e..62305bc 100644 --- a/java/src/wiiusej/WiiUseApiManager.java +++ b/java/src/wiiusej/WiiUseApiManager.java @@ -692,16 +692,16 @@ public class WiiUseApiManager extends Thread { wiiuse.setSpeakerFormat(id, format); } - public void setSpeakerRate(int id, int rate) { - wiiuse.setSpeakerRate(id, rate); + public void setSpeakerRate(int id, byte rate, byte freq) { + wiiuse.setSpeakerRate(id, rate, freq); } public void setSpeakerVolume(int id, double volume) { wiiuse.setSpeakerVolume(id, volume); } - public void setSpeakerConfig(int id, byte format, int rate, double volume) { - wiiuse.setSpeakerConfig(id, format, rate, volume); + public void setSpeakerConfig(int id) { + wiiuse.setSpeakerConfig(id); } public void streamSpeakerData(int id, byte[] block) { diff --git a/java/src/wiiusej/Wiimote.java b/java/src/wiiusej/Wiimote.java index 6999d18..8194f40 100644 --- a/java/src/wiiusej/Wiimote.java +++ b/java/src/wiiusej/Wiimote.java @@ -530,19 +530,19 @@ public class Wiimote implements WiiUseApiListener { } public void setSpeakerFormat(byte format) { - manager.setSpeakerFormat(format, format); + manager.setSpeakerFormat(id, format); } - public void setSpeakerRate(int rate) { - manager.setSpeakerRate(id, rate); + public void setSpeakerRate(byte rate, byte freq) { + manager.setSpeakerRate(id, rate, freq); } public void setSpeakerVolume(double volume) { manager.setSpeakerVolume(id, volume); } - public void setSpeakerConfig(byte format, int rate, double volume) { - manager.setSpeakerConfig(id, format, rate, volume); + public void setSpeakerConfig() { + manager.setSpeakerConfig(id); } public void streamSpeakerData(byte[] block) { diff --git a/java/wiiuse.dll b/java/wiiuse.dll index 0e4621585ea05c5d4e055b974c87d053035c120c..bc0bf2ef87856c05f416f33e2637c2dc81b283c3 100644 GIT binary patch delta 37186 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 W7P(y+rk+~kN1UL#8QYbw0{L(_ diff --git a/java/wiiusej.dll b/java/wiiusej.dll index 8aa37fd541a40a09301c4c5232fef5a2a454204f..d233ced10ad4ada13b8ce0859b3a1db39760a0fa 100644 GIT binary patch delta 1693 zcmY*Z3rtg27(VB=9TmG-*8&QKRwy77p+>m9rH|{-$ej!Yd59nnrBENmF@_FQ5UDI8 zL5lyfITs@)bD3lh=ACHV5}2?c8!oV@xG*=|)G%e6S&U2Ow(f7K4{mbq|DFGRzW<)v z)ys7CGVTKs$2aL6tr?Oq7ws5-iBU*87KFizl&3mzA9YZw5PxNoDAhuQG?Dou0@g@{ zkdGn=8I+MKyMy2}DAjw#Ok2#2FGeaN@rgsg4ut10)os50%27O8&n%W$|Niw|z~+g|Y6jDA}Kggmn} zI2BD<7#8g{rTb0EV(BwyRnlzNlo~Xl3u5NsvqH>R5GaX0bHn37XUp^G95>V~lt35Rh;xd@6E5su>!k|tzqlgx7qV-KRe7` zXa8m;MujoRSZUm8Y%;!OoX^E_1}>i~v4-Zk}_PNfW{+)lZhazBMJ2b$I92y?7?wK><^Vt&(n+}v-DvlQi6UbpPG zxGi0l^Oj4NDT~~ywwkQz);w#wb@SAB7Gf=(+!RVjx6;(^8@ohlM2CVNjf2wO?k;2_}RR z9bvq)Bw_%PHbe6hYNlprX3LRC__fV2;0(GX7=?j6zmm{DvQ>q#XnNBM4 zC3Rwe63%9(q08y42Q^XnIhGK|1dw+9#$}WIEyuYWhMUAv=<~AuC&Csx+88 z6m&VEs!q+LhD%CHDmQM~P6%Y=MA0gEHK(2GfaXTwJ36>c&}wEW@9`6CO^WX5_IZp{BgH29IKZD|zkst&FZqgAdo~eP|oLmlP&L zb-q9aAG(Jq(}%XN7ihi@O(81vp{)f1-Rwh?epK(@-z*gH5Z+vyHVCxVhb9m;`cQF^ zKo9uP4@GWdWpte#MvGtbqf;eb4r#gnRK8=cNq%E$rn*51D;PVV}?sF?g2CH_U|KX#$STF7hm>>w E2UOY>q5uE@ delta 1835 zcmY*Z2}~4M7=CZql@)8)y30|{71j#@2Zh-khuyI#GW7&Gv_=cDc%+v^Xpu$}G*ygLMWYsvw$vDFwPyRzE@++P?f=dHfB&)HdvA`M zW{#X@TswT4@5Z#XEcWTRL)r%3VS;_yCWgY>RHRMvW?D{ZuzZh6q_hztR5O^Rk+4)H z1&xm+q(@DvZRG@?9+gosLvA>x5-7lZm6h&-Y3iiVAKpUuKcR#;>y4V8c}5jQo-@%n zqz;2RbtGeqfPHFXP<#X-%bGiDN)?JO-B#{Y8HXlDz$JBT;Dc~)EJlf$Mq<|?Xw0m@ zLm0}yv`I>6;YjFXxp2%$ohB#K@ld-nPY+hV$he=do;#qu%~tMzV!*l5sKOE40p0lS z=+@@u_ny&`-5W@@^A08%m5do(1F8CJ3QHHtD9b{X|4jYhHZA06GXo?c-P8MH9a%cnYWu==2PY_^F{NZ zdD#5a{KD+V`|}1qhEL=x_;vgaelPz8|25yuU*T`@&-uvNV}&Wgd|{!GB@_#lLXFTM zY!{9R#~X!v!ehZLL?=6wzfbN@zMVXr>}LtF#90*c0 z)mDe~u(iv2-ulQIC{7d2Vx?FwZV_9>L*fy!L;OZOBmOL26t9Z6#QWkS@tKJ7v4j}V zFsvUtfem4!*cf&uJDW{m7qF^)wwjeYr9|4XV5{0>3nYXhnL#=svMBSi3@kPtXpd)faP6^{xaT zp?!!}Tf#x*dlKwHJ2Ya;a=q`j(Y|5hpm?POJJAlJ)s%9OpC`dKw7=%LU{RSJuH@Un zSZ;^*0y`>_kedX{3MKl~gZc_32E}a8O@t*y5~K0La|pFwxS&{Kg1zu8LW391FOit3 z25^Vv`uN7j`0?Zc9-UCzKnTzF zRYH}kI`G1VSDf}&8egwnp-g42i_+D4xOgy0LD|~UQq=S?tf}kQcfQmbU8H>+s&9~2 zd{{>HQ#~1@=X2wDLbL|BxUn8(SX$qY5=`0DPtSsTQ<@@z)DT4nVRb_*wZrp`82@fEtlyPc(LV2 z6iM!Oq)>l@PHgjK+9&&L(`lf|83ENvz98(G#mqEA!mbd=<+Sp?J=!<_1Gfxb A3jhEB