Created
April 5, 2014 10:51
-
-
Save kurogelee/9990338 to your computer and use it in GitHub Desktop.
ポケット・ミクをJava/Clojureから操作してみる ref: http://qiita.com/kurogelee/items/12a175866ef620f3c520
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns pokemiku.core | |
(:import [javax.sound.midi MidiSystem ShortMessage SysexMessage MidiDevice] | |
[javax.xml.bind DatatypeConverter])) | |
(def dev | |
(->> (seq (MidiSystem/getMidiDeviceInfo)) | |
(filter #(re-find #"NSX-39" (:name (bean %)))) | |
(filter #(re-find #"External" (:description (bean %)))) | |
first | |
(MidiSystem/getMidiDevice))) | |
(with-open [dev dev] | |
(.open dev) | |
(let [r (.getReceiver dev) | |
data (DatatypeConverter/parseHexBinary (str "F0437909110A00" 37 "F7"))] | |
(.send r (SysexMessage. data (count data)) -1) | |
(.send r (ShortMessage. ShortMessage/NOTE_ON 72 127) -1) | |
(Thread/sleep 2000))) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package pokemiku; | |
import javax.sound.midi.MidiDevice; | |
import javax.sound.midi.MidiSystem; | |
import javax.sound.midi.Receiver; | |
import javax.sound.midi.ShortMessage; | |
import javax.sound.midi.SysexMessage; | |
import javax.xml.bind.DatatypeConverter; | |
public class PokeMikuSample { | |
public static void main(String... args) throws Exception{ | |
try(MidiDevice d = getDevice()){ | |
d.open(); | |
Receiver r = d.getReceiver(); | |
byte[] data = DatatypeConverter.parseHexBinary("F0437909110A00"+ 21 +"F7"); | |
r.send(new SysexMessage(data, data.length), -1); | |
r.send(new ShortMessage(ShortMessage.NOTE_ON, 80, 127), -1); | |
Thread.sleep(2000); | |
} | |
} | |
static MidiDevice getDevice() throws Exception{ | |
for(MidiDevice.Info i : MidiSystem.getMidiDeviceInfo()){ | |
if(i.getName().startsWith("NSX-39") && i.getDescription().startsWith("External")){ | |
return MidiSystem.getMidiDevice(i); | |
} | |
} | |
throw new RuntimeException(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment