hitode909の日記

以前はプログラミング日記でしたが、今は子育て日記です

KAOSS DJで姉を出したり朝ご飯を選んだり絵文字を高速入力したりgit pushもできる

最近KAOSS DJで遊んでて,きのうMIDIイベントを受け取るところまでできたので,もうちょっと知的なことをやってみる.

f:id:hitode909:20150728133323j:plain

フェーダーに応じて姉を出す

クロスフェーダーの値に応じて文字を出してみる.UniMIDIでイベントを受け取って,182番のときだけ値を見てなんかする.182番はクロスフェーダの操作で,3番目にフェーダーの位置が入ってる.

require 'bundler'

Bundler.require

input = UniMIDI::Input.first.open

loop {
  events = input.gets
  events.each{|event|
    data = event[:data]
    next unless data[0] == 182
    size = data[2] / 127.0 * 30
    puts '' * size
  }
}

sketch-midi/ane.rb at master · hitode909/sketch-midi · GitHub


これで,フェーダーを動かすと姉姉姉姉って出る.簡単.
なぜ姉かというと,意味はないけど,最近社内で姉が流行っていて,foo,bar,bazzのかわりに姉,姉姉,みたいに姉を多用する文化がある.

KAOSS DJで姉出せた


Web MIDI APIを使ってブラウザから朝食を選ぶ

Web MIDI APIを使うと,ブラウザからMIDI機器の操作を読んだり,MIDI機器にイベントを送ったりできる.Google Chromeの43から使えるようになった.
ドキュメントが和訳されてたので,ここのサンプルコードを真似して書いたら動いた.
Web MIDI API (日本語訳)


朝ご飯をパンにするかご飯にするか悩んだときに使えるアプリケーションを作った.クロスフェーダーでどっちか選んで,スクラッチするとパンが高速回転する.

KAOSS DJで朝ごはんスクラッチしながら選べるのができた



KAOSS DJ持ってる人いるか知らないけど,ここで遊べる.
hitode909.appspot.com


ブラウザから呼び出すのはすごい簡単だった.呼び出すだけなら5行くらいで,アプリケーション全部で80行くらい.まだまだボタン余ってるので,ジャムどれにするかとか,炊き加減とか,いろいろ選べそう.
朝食セレクター · hitode909/appspot@3b7757a · GitHub


AppleScriptを使って縦フェーダーでgit pushする

朝ごはん食べたら仕事しようということで,縦フェーダーでgit pushやgit pullできるようにした.Rubyのスクリプトを常駐させておいて,そいつがイベントを監視するという仕組み.フェーダーを向こうに押しやるとpush,引っぱってくるとpullできる.直感的.

Bデッキの縦フェーダーからgit pullやgit pushできるようになった


ほかにも,Cueを押すと:shipit:って一発で出るとか,一時停止で:innocent:とか,横フェーダーでアプリケーションを切り替えるとか,便利機能を搭載している.ちょっとしたDSLみたいにしたので拡張も簡単.
キー入力を送るのは,AppleScript経由でやってるけど,もっといい方法あるかもしれない.Rubyじゃなくて,Objective-CとかSwiftで書くと直接OSのAPIを呼べる??

require 'bundler'

Bundler.require

module AppleScript
  def self.stroke key
      system <<"EOF"
osascript -e 'tell application "System Events"
  keystroke "#{ key }"
  keystroke return
end tell'
EOF
  end

  def self.activate application
    system %Q|osascript -e 'activate application "#{ application }"'|
  end
end

class Observer
  def initialize
    @handlers = {}
  end

  def on event, &handler
    @handlers[event] = handler
  end

  def watch input
    loop {
      events = input.gets
      events.each{|event|
        data = event[:data]

        handler = @handlers[data]
        next unless handler
        handler.call
      }
    }
  end
end

input = UniMIDI::Input.first.open

observer = Observer.new

observer.on [151, 26, 127] { AppleScript.stroke ':ok_man:' }
observer.on [151, 27, 127] { AppleScript.stroke ':innocent:' }
observer.on [151, 29, 127] { AppleScript.stroke ':pray:' }
observer.on [151, 30, 127] { AppleScript.stroke ':shipit:' }
observer.on [152, 30, 127] { AppleScript.stroke 'git fetch' }
observer.on [184, 25, 0]   { AppleScript.stroke 'git pull' }
observer.on [184, 25, 127] { AppleScript.stroke 'git push' }
observer.on [182, 23, 0]   { AppleScript.activate 'Google Chrome' }
observer.on [182, 23, 32]  { AppleScript.activate 'Emacs' }
observer.on [182, 23, 64]  { AppleScript.activate 'iTerm' }
observer.on [182, 23, 96]  { AppleScript.activate 'YoruFukurou' }
observer.on [182, 23, 127] { AppleScript.activate 'Slack' }

observer.watch input

sketch-midi/emoji-button.rb at master · hitode909/sketch-midi · GitHub

ボタンが多いと有利

よく使う機能や操作にキーボードショートカットを設定しようとしても,なかなかキーは余ってない.
そこで,ボタンやつまみのたくさんついたMIDI機器をくっつけることで,圧倒的に余ったインターフェイスが増えて,直感的で便利な暮らしが待っている.
KAOSS DJはなかなかコンパクトで,朝ご飯を選んだり,git pushできたり,ついでにDJもできる機器ということで,おすすめビジネス機器です.

KORG カオスパッド搭載DJコントローラー KAOSS DJ

KORG カオスパッド搭載DJコントローラー KAOSS DJ