オトアソビVol.2に参加してきた

2月11日(祝日)に東大で行われたオトアソビVol.2に参加してきました。自作電子楽器をはじめとする音系ネタの発表会です。
3日前にも楽器系イベントに参加したのですが、以前の回のオトアソビのときにも気になってはいたけど行けなかったし、基板の頒布もまたできそうだし…ということで行ってみることに。

会場は赤門から入って左にある、福武ホール B2F ラーニングシアターでした。

丸の内線の「本郷三丁目」駅で下車して歩いていると、途中で不思議な光景が。本郷五丁目に本郷三丁目店がある!
どうやらこれ、単に駅名をそのまま支店名にしただけみたいですねww

あと赤門前は東大を象徴する観光名所と化していて、ここをバックに写真を撮る人も多かったです。

僕がこのツイートを見て気づいたときにはすでに発表の受付が終わっていましたが、物を置けるスペースに余裕があったので、飛び入りでCAmiDionを展示してきました。基板も1枚だけ売れました。

イベントレポートがさっそく上がっていました

金箱さんの「共遊」という、耳の不自由な人でも目で見て音楽を楽しめる工夫も。リズムについての工夫が多かったのですが、和音を目で見る工夫もあったらいいなぁと思ったので、CAmiDionの紹介の延長で、名刺交換して MIDI Chord Helper のことを教えておきました。このソフトがあればMIDI再生で和音が見えるので、和音(コード進行)の「共遊」に応用できそうな気がします。

最後は薙刀商会さん(Maker Faire Tokyo 2012/2013のときに近くで展示していた人)の歌2連発で締めくくり。「月面反射通信」という歌にはCQCQのモールスが入ってるし、「キセノンフラッシュ」という歌とか、最近Raspberry Piがこれにやられる不具合が発覚したからだろうwwと思えるような選曲。

そのあとは懇親会。缶ビールのおつまみとしてピザ、柿の種、ポテトチップス、からあげ、などなど。結局3缶も飲んでしまったw 首からCAmiDionぶら下げたままw

発表が15分ずつと、その合間に45分もの展示見学・交流の時間もあり、なかなか楽しいイベントでした。

2/25 新しいレポート記事ができていました:2015/02/25 藤本健の“DTMステーション” – 自作楽器の発表会、個人開発の電子楽器がスゴすぎる!

MIDI Chord Helper のソースコードをSVNからGitに移行

SourceForgeに置いてあるMIDI Chord Helper のソースコードですが、今までSubversion(SVN)レポジトリに置いてあった内容をGitレポジトリに移行しました。

取り込み手順の概要はこんな感じ:

SourceForge上の既存のリモートSVNレポジトリ
→ git svn clone で一時的なローカルGitレポジトリにクローニングする(はまりどころ1)
→ SourceForge上のリモートGitレポジトリにpush (→ ※1)

eclipseのworkspaceにローカルGitレポジトリを作る
→ 手元のworkspaceにあるソースをこのレポジトリにコミット
→ (→ ※1)で作ったリモートGitレポジトリからpull
→ 同じソースコードのはずなのになぜか競合してるって言われた
→ 仕方ないのでどっちかを全面採用という形でマージ(これもちょっと大変だった)

はまりどころ1

SVNレポジトリの構成ですが、標準だと思っていたら実はそうではなかったという。

2010年頃にはtrunkの中に置いていました(これが標準、ただしリビジョンはr2までそうしてた)。当時はRIMNETのHPの容量制限に引っかかりそうだったので、じゃあそのままSVNレポジトリにしてSourceForgeに引っ越しちゃおう、ということで単なるソース保存場所としてしか使っていませんでした。

その後、2013年頃にeclipseを使い始めたのに伴い、r3からはMIDIChordHelperという名前に移行しました。どうもこの時点から標準じゃない構成になっていたらしく、Git へ移行しようとしたときに git svn の -s オプションでr2まで(つまり2010年当時)しか反映されないという現象に悩まされました。

いろいろ調べた末、このブログ記事が参考になりました:git svn cloneで、標準構成じゃないときのbranches指定方法

cd 一時作業ディレクトリ
git svn clone -trunk=MIDIChordHelper --authers-file=authers.txt レポジトリURL

のようにtrunkが違うところにあることを教えた上で取り込んだら、r4以降が取り込めるようになりました。それより前のリビジョンはというと、eclipseを使い始める前で事実上ほとんど更新しておらず、これじゃGitに載せても意味ないよなーってことで対象外としました。
以後の更新はこのGitレポジトリに積み上げていこうと思います。

ちなみに –authers-file=authers.txt で指定したファイル authers.txt の中身は、

kamide = Akiyoshi Kamide <kamide@yk.rim.or.jp>

の1行を指定しただけです。= の左辺がSubversionに記録されているユーザ名、右辺がGitで使用するユーザ名とメールアドレスです。これがないとGitレポジトリで変なメールアドレスのようなものが勝手につけられてしまうので、ちゃんと指定するようにしました。

trunkを切り替えてcloneすることはSourceTreeではできなかったので、これだけはコマンドラインから行いました。あとはSourceTreeとeclipseの組み合わせでなんとかなりました。

Gitによるバージョン管理を始めました

これまで作業部屋(PersonalForge)はCAmiDionだけでしたが、PWMDAC_Synthの分も作りました。
両者にはGitのリポジトリが1個ずつあるので、ここにpushしておきました。

ソースがGit管理下に置かれたことで、README.txtが作業部屋Wikiのトップに表示されたり、ファイル置き場からダウンロードしなくてもブラウザ上でGitリポジトリにあるソースを直接読むことができて便利になりました。
今後は変更点もGitリポジトリに蓄積されていくので、ある時点でのソースを参照するのも容易になってくるものと思います。

なお、CAmiDionの回路図はGit管理下にはまだ入っていません。
また、MIDI Chord Helper プロジェクトのほうは Subversion ですでに管理されていますが、Git に乗り換えるかどうかは検討中です。→ (1月5日)なんとか移行できました。

Tips

最初、SSHのキーを登録するなどの作業で手間取りました。
GitのGUIツールの一つであるSourceTreeから、SSHのキーを生成するのにPuTTY Key Generatorを起動するわけですが、ここでファイル保存すると改行が入ったりして、SourceForgeのユーザ設定に公開鍵を設定したときに「OpenSSHの形式じゃない」みたいなメッセージが出て拒否されてしまいました。
PuTTY Key Generator の画面に表示された公開鍵をコピペしたらうまくいきました。

Windows 7 の場合、ArduinoのスケッチやライブラリをGit管理下に入れるには下記のディレクトリを対象に git init するとよいようです。

  • C:/Users/ユーザ名/Documents/Arduino/libraries/ライブラリ名/
  • C:/Users/ユーザ名/Documents/Arduino/スケッチ名/

MIDI Chord Helper の乱数歌詞生成機能をポケット・ミク対応にしました!

MIDI Chord Helper Ver.20140408.1 をリリースしました。

先日買ってきたポケット・ミクは、MIDIチャンネル1が初音ミクの声、チャンネル2以降はMIDI音源になっています。ミクに歌わせる歌詞は1音節ごとにシステム・エクスクルーシブ(SysEx)メッセージとして送ることができます。

これまでは乱数で生成した歌詞がメタイベントのテキストや歌詞として出力されていましたが、これをポケット・ミクの SysEx を送るように修正し、画面のチェックボックスを増やしただけです(あとは細かなリファクタリングをしたぐらい)。

さっそくこんな動画を上げました。

ニコニコ版:sm23288156

MIDI Chord Helper の更新・その後

前回のこのブログの記事で書いたGugen応募の件ですが、2年前と違って今回はノミネートすらされず。
原宿での作品展とか渋谷での授賞式とかうーん行こうかどうしようといいながらも、寒かったしちょっと遠い割には自分が展示するわけじゃないし面倒になってしまい結局全然行かず、元になったJavaアプリのほうの MIDI Chord Helper のバージョンアップばかりやってた気がします。

さて、ここからが本題。
1ヶ月ほど前の記事でeclipse入れたことなど書きましたが、ここにきて MIDI Chord Helper のMIDIエディタ部分を中心にリファクタリングして修正しやすくしたうえで、細かいところをいろいろ改善しました。主なものはこんな感じ:

【MIDI Editor 関連】
ボタンの整理。今までプレイリストの下にあったプレイボタンと Load to Sequencer ボタンをプレイリストの中に入れ、プレイボタンや現在位置「分:秒」の空いてるセルをダブルクリックするだけでシーケンサーに選択させることができるようになり、直感的でわかりやすくなりました。
それと同時に、MIDI同期モードのマスター/スレーブのそれぞれについてモード切り替えを行うコンボボックスを追加しました。これはもともと javax.sound.midi でサポートされている機能だったので比較的容易に実装できました。が、Windows7だとモードが1つしか選べず、実質的に機能していないも同然だったりします(他のシステムだと選べたりするんでしょうかね…?選べたっていう人がいたらぜひお知らせください)。

イベント編集ダイアログを開いている最中に表の選択が変わったときに、それに変に追従していたのを、ダイアログを開いたときに決めた箇所に反映するようにしました。

セル幅も選択が変わるたびに等幅に戻ったりしていた現象も直りました。これはテーブルビューが対象とするテーブルデータモデル(例:曲、トラック)が切り替わるたびにその都度内部でテーブル列モデルを作り直すという javax.swing.JTable のデフォルトの動作が原因だったので、テーブル列モデルをテーブルデータモデルに合わせて一度作ったらもう作り直さないよう、JTable のメソッドを setAutoCreateColumnsFromModel(false) として呼ぶようにしました。

Base64変換ダイアログも、曲を選択していないと開けなかったりしましたが、よく考えたらそれでは新しい曲を空のプレイリストに追加できないことに気づいて修正しました。

【アプレットのときだけ発生する問題】
アプレットとして実行したときに、タイムスライダーをちょっと戻すなどの操作をしないと再生音が出なかったり、曲が終わっても次の曲に行かずに秒数をカウントアップし続けるといった現象が出ていて、まだ原因がわかっていない状況です。これもそのうち直したいのですが…今のところめどが立っていない状況(原因さえわかれば直りそうな気もしますが…)

【あの楽器】
MIDI Chord Helper には、初音ミクのあの楽器みたいな図形の広がりを表示する機能がついていますが、MIDI演奏中に頻繁にノートONがやってきたときなど、たまに java.util.ConcurrentModificationException という例外が投げられることがありました。原因は表示中の図形が何であるかを覚えておくキューが別スレッド(paint() と javax.swing.Timer の実行は別スレッド同士とみられる)で同時にイテレータを操作したことで反復処理の衝突が起きたのが原因でした。イテレータだけを別々にしても直らず、結局キューにアクセスする複数の箇所を全部 synchronized で囲んで排他制御することで対応しました。

MIDI Chord Helper のページはこちらです。ソースやダウンロードのページにもここから行けるようになっています。久々に新しくなった MIDI Chord Helper をぜひお試しください。電子楽器CAmiDionの発想の元になったJavaアプリで、これだけでもマウスでコード演奏して遊べます。

MIDI Chord Helper のソースを久々に更新

電子楽器CAmiDionの発想の元になったJavaアプリ、MIDI Chord Helper を、ハロウィンの日の未明に久々に更新しました。最後のjarファイル更新は「初音ミクのあの楽器」っぽい表示に対応した2009年頃から、SourceForge に上げる2010年秋よりも前、すなわち今から4年ほど前でした。

ソースは SourceForge のリポジトリに上げてありますが、jar ファイルのダウンロードページはまだ古いのでそのうち更新しようかと思います。jar ファイルについては MIDI Chord Helper のページからダウンロードできるほうが新しいです。

1年余り前から仕事でも本格的に Java を使うようになり、eclipse を使うようになって慣れてきたことや、PCのマザーボード買い替えによってマシン性能に余裕が出てきたことで、自宅でも eclipse を使うことにしました。

それまで MIDI Chord Helper の開発はメモ帳とコマンドプロンプトベースのバッチファイル(javacを実行)のみで行っていましたが、eclipse に取り込むことによって思わぬバグ(「バグの検索」で発見)の発見につながったり、多数の警告メッセージが出ました。一番目立ったのがジェネリック対応(List のような型)が不十分だったことでしょうか。開発を始めたのが2004年頃だったこともありジェネリックのことはあまり考えずにコードを書いている箇所が数多く残っていたようです。今はJava7の時代で文法も若干新しくなっており、こういったところメスを入れるのにも eclipse が役立ちました。

変数名とかクラスなどの割り当て方もさらに整理の余地がありそうなので、今後もリファクタリングを続けていく予定です。しばらくはソースのリポジトリがちょくちょく更新されるかも知れません。

CAmiDionなブログ始めました

自分のHPの容量がきつくなってきて CAmiDion 3号機の回路図などを置けそうな場所がなくなってきたので、SourceForge上に置くことにしました。

MIDI Chord Helper および電子楽器 CAmiDion 関連の情報をこのブログで発信していこうと思います。

よろしくお願いします!