MIDI Chord Helper - What's New
2010年
2010/11/27
2010/08/16
2010/04/28
2010/03/20
2010/03/17
2010/03/06
2009年
2009/10/03
- 選択していないMIDIチャンネルが演奏中かどうかがわかるような
インジケータを表示するようにしました。
2009/06/15
2009/05/31
- コードボタンなどの仮想MIDIデバイスを MIDI Keyboard にまとめました(ちょっと配線が複雑すぎたかな...と思ったので)。
- ドラッグ&ドロップしても最初(0番目)のMIDIファイルだけ再生できないという不具合を修正しました。
これは、バージョン 20090517 で空のプレイリストを許したことがきっかけで、
追加ファイルに「0番目」があり得るようになり、そのことによって表面化した不具合でした。
2009/05/26
2009/05/23
- コードボタンの下に、カポ適用前のコードを表示するようにしました。
キーボードの上にあるカポ適用後のコードと同じように、クリックやマウスホイールで鳴らすことができます。
2009/05/17
- MIDI device connection 画面で、仮想MIDIデバイス、シーケンサーデバイスを含めた
すべてのデバイスを閉じられるようにしました。
- MIDI Editor 画面で、シーケンサーにロードされているMIDIシーケンスも削除できるようにしました。
これに伴い、初期状態で空のシーケンスを作らないようにしました。
2009/05/10
- 仮想 MIDI デバイスを、画面上のMIDIキーボードやコードボタンなどにも実装しました。
これにより、MIDI device connection 画面で自由に接続・切断ができるようになりました。
- MIDI device connection 画面で描かれる接続ケーブルを半透明にし、
接続先 Rx ごとに色をつけました。これで、MIDI デバイスが増えても接続状況を把握しやすくなります。
2009/04/29
- アプレット起動時に setChannel() と setProgram() が効いていなかったために
自動作曲のデモで音色が変わっていなかったのを直しました。
- プログラム番号(音色)やボリュームなどの演奏モニター表示をやめ、
MIDIチャンネル選択をコンボボックス選択方式に戻しました。
状態を保持していても MIDI OUT が変わると無効になってしまうためです。
現在では MIDI OUT を複数接続できるので、MIDI Yoke 経由で TMIDI Player につなぐ
などの方法で代替の演奏モニターとして使えます。
あのような演奏モニターを自前で作って内蔵するという手もありそうですが、
そこまで作るかどうかは現在のところ未定。
2009/04/22
- MIDI OUT だけでなく MIDI IN デバイスも起動時に開いて接続するようにしました。
2009/04/20
- 録音時に音色を変えると多数のプログラムチェンジイベントが記録されてしまう、
という不具合が見つかりました。
原因は、MIDI受信→コンボボックス変更→MIDI送信→...を延々と繰り返していたためとみられます。
このため音色選択のコンボボックスを廃止し、代わりに [Send MIDI event] ボタンを設置しました。
これにより不具合が解消しただけでなく、プログラムチェンジ以外のイベントの
手動送信が可能になりました。
- MIDIデバイスの初期接続時、MIDI Chord Helper GUI の Tx を自分自身の Rx に
接続するようにしました。これはコードボタンの||などの表示トリガーを、
画面上のピアノキーボードから行うのをやめて、MIDI 受信からのトリガーに
一本化したことに伴う修正です。
2009/03/08
- 「あの楽器」機能拡張
- 図形を太くしたうえで半透明にしました。
Color クラスのオブジェクトを作る際にアルファ値(不透明度)を指定するだけで簡単に実現できました。
- 回転方向だけでなく、回転速度もランダムに変わるようにしました。
- 図形を更新する際のタイマーインターバルを20msから15msに短縮しました。
(CPUパワーにもよりますが)かなりなめらかに動くようになったと思います。
2009/03/07
- 「あの楽器」機能拡張
- □、△のときに回転するようにしました。
- MIDIファイルの再生(シーケンサーによる演奏)や、
MIDI IN デバイスからの演奏にも反応するようにしました。
2009/03/06
- 「あの楽器」機能を拡張しました。
- ○だけでなく、□、△、||も出るようにしました。
- マウスだけでなくPCのキーボードで弾いたときにも反応するようにしました。
- ピアノキーボードだけでなくコードボタンで弾いたときにも反応するようにしました。
- ボタンアイコンを作り、メイン画面から直接ON/OFFを切り替えられるようにしました。
- コードの 7(9) を 9 で、M7(9) を M9 として表記するようにしました。
2009/03/04
- 「あの楽器」風に○が広がる機能を追加しました(テスト版)。
この機能を有効にするには、小さい鍵盤アイコンから出てくるプルダウンメニューで
「あの楽器」を選んでみてください。
なお、現在のところこの機能はピアノキーボードをマウスでクリックした場合のみ有効です。
- MIDIデバイス接続画面で、選んだツリー項目の詳細情報が出てくるようにしました。
これにより Java MIDI デバイスに設定されている詳細情報
(MidiDevice.Info クラスの中身)が見えるようになりました。
2009/02/28
- MIDIデバイス接続で、閉じたデバイスの一覧になっていた部分を
JTree を使った階層型インターフェースに置き換えました。
2009/02/26
- MIDIデバイスの開閉とデバイス間接続を
ドラッグ&ドロップで行う機能が一通り揃いました。
これにより、旧バージョンでは出来なかった接続パターンを
ドラッグ&ドロップで自由に組めるようになりました。
これに伴い、従来のプルダウン選択は廃止しました。
MIDI IN については自動で開かないようにしているので、
MIDIキーボードと接続したい場合はMIDIデバイス接続画面でデバイスを開き、
ドラッグ&ドロップでデバイス同士の接続を行ってください。
2009/02/23
- MIDIデバイス接続画面で、端子の名前を MIDI Tx, MIDI Rx に変更しました。
これは javax.sound.midi の Transmitter (Tx), Receiver (Rx) と対応しているためです。
MIDI Tx を持つデバイスについては、空いている MIDI Tx を追加したり、
MIDI Tx を閉じたりできるボタンを追加しました。
ただし、MIDI OUT デバイス(音源)を一旦閉じてドラッグ&ドロップで開き直すと、
画面上のコードボタンやピアノキーボードが効かなくなります。
これを解決するため、今後は MIDI Chord Helper GUI にも MIDI Rx だけでなく
MIDI Tx を増やして自由に接続できるようにする方向で考えています。
2009/02/22
- MIDIデバイス接続画面で、ドラッグ&ドロップが効くようにしました。
左側にある閉じたデバイスを右側へドロップするとそのデバイスが開き、
×印でデバイスを閉じられます。また、MIDI OUT 端子をドラッグし、
接続先の MIDI IN 端子へドロップすると、その通りに接続を変更できます。
あとは MIDI OUT 端子の増減ができないと接続先を増やせませんが、
これは現在のところ未実装です(近日中に実装予定)。
2009/02/19
- 再生スピード調節を MIDI Editor の画面へ移動しました。
- メイン画面に表示される曲のタイトルの形式を見直し、何番目の曲であるか、タイトルなしかどうかが
わかるようにしました。
- MIDIデバイス接続画面で、接続状況をグラフィカルに表示するようにしました。
今後はこれを拡張し、ドラッグ&ドロップで接続や切り離しを行えるようにするつもりです。
- ChordHelperApplet.SequencerUnit という入れ子クラスにあった多くのメソッドや変数などを、
親クラスである ChordHelperApplet へ移動しました。最終的にはこの入れ子クラスを廃止して、
MIDIデバイス接続画面に吸収させる方向で修正していくつもりです。
2009/02/03
2009/02/01
- ニコニコ技術部「あの楽器」東京ミーティングで MIDI Chord Helper を紹介してきました。
→ [レポートの詳細]
2009/01/29
- アプレットの場合のバージョン情報表示で、クリックしても効かないはずのURLが
リンク表示のまま、しかもマウスポインタアイコンまで変化していて紛らわしいので、
通常表示になるようにしました。
2009/01/28
- アプレットとして起動した場合、バージョン情報のリンクが効かないようにしました。
(うっかりクリックしてアプレットが終了してしまうのを防ぐため)
- MIDI 入出力選択画面にあった、テスト用のデバイスリストの表を外しました。
2009/01/25
- MIDI Editor 起動ボタン、プレイボタンを大きめにしました。
- バージョン情報のダイアログを改良しました。URL をクリックすると、
デフォルト設定のブラウザで MIDI Chord Helper のホームが表示されるようになっています。
ただし(Java アプリとしてではなく)ブラウザから Java アプレットとして起動しているときは、
アプレットのウィンドウに表示されてしまいます。
- タイムスライダーのデータ更新などを中心にソースコードを整理しました。
今までは、JSlider に指定するデータモデル DefaultBoundedRangeModel クラスの
オブジェクトが持つ値を
常に Sequencer 上の tick 位置に合わせるという処理が必要でしたが、
BoundedRangeModel インターフェースを実装した独自のクラスを作ったことで、
その必要がなくなりました。
- <applet> → <param> タグで指定する no_eject パラメータを廃止しました。
現在ではイジェクトボタンが Editor 起動ボタンと一体化され、
意味のないものになってしまったからです。
2009/01/18
- MIDI 入出力選択を別画面にしました。現在、暫定的に MIDI device の一覧表を出しています。
複数の MIDI デバイスへ同時に接続できるような機能をつけることを検討中。
- 再生スピード(Speed 選択欄)が選べない不具合を修正しました。
2009/01/09
- MIDI編集画面のトラックのMIDIチャンネルに異なるものがあるとチャンネル変更が効かない
という不具合を直しました。
- MIDI編集画面で名前が空の状態で編集モードに入ってすぐに抜けたとき、
修正済みフラグ(Modified)が立たないようにしました。
- 新規イベント追加のとき、デフォルトでそのトラックの対象MIDIチャンネルを
選択するようにしました。(以前は常に CH.1 が初期選択されていて、他のイベントと異なる
MIDIチャンネルをうっかり設定してしまうことが多かったため)
2009/01/08
- MIDI編集画面で、Data1: のコンボボックス(プログラムチェンジの楽器名など)を
選んでも0しか選べなかった不具合を直しました。
MIDIメッセージの種類ごとにあった3つの JTabbedPane を廃止したあと、選択肢を丸ごと書き換える処理が、
選択時に走ってしまうようになってクリアされてしまったのが原因でした。
そこで、選択肢をあらかじめ設定したデータモデル(ComboBoxModel)を複数作って setModel() で
切り替えるようにしたら直りました。
- MIDI編集画面で、シーケンス一覧やトラック一覧のセルから名前を変更できるようにしました。
さらに、Ch 欄のセルから、トラック内の全てのチャンネルメッセージを同じチャンネルに
変更できるようにしました。
2009/01/04
- MIDI編集画面の一番下にあった小節位置入力欄を外し、
Jump と Paste の小節位置を別ダイアログで指定できるようにしました。
ここまでの修正により、旧バージョンではごちゃごちゃしていた編集画面が、
3つの表からなるシンプルな構成のプレイリストつき編集画面として生まれ変わりました。
2009/01/03
★新年早々、ニコニコ技術部「あの楽器」リクエストに答えてみた!
▼初音ミク「Innocence」のPVに出てくる「あの楽器」のように MIDI Chord Helper で弾いてみました。
(2/1) ニコニコ技術部のイベントで発表してきました!
2008年
2008/12/31
- MIDI編集画面にある小節位置入力欄を改良し、
小節単位だけでなくTick単位でも入力できるようになりました。
どちらかの単位で入力すれば、もう一方の単位で示された値は自動的に再計算されます。
2008/12/30
- MIDIイベント入力欄を別ダイアログに分離し、
[Change] ボタンの代わりにセルのダブルクリックで表示させるようにしました。
新規追加したい場合は [New] ボタンでこのダイアログを表示できます。
2008/12/23
- MIDIイベント編集時、表の中のTick位置(数値)のセルを直接編集できるようにしました。
- MIDI編集画面で分解能の表示方法を整理し、PPQ と SMPTE の区別を明示するようにしました。
2008/12/20
- プレイリストで選択を切り替えたとき、最初のトラックとイベントが自動的に選択されるようにしました。
2008/12/18
- プレイリストとMIDI編集画面を一体化しました。これに伴い、
MIDIシーケンスを選ぶだけで、シーケンサにロードされていなくても編集できるようにしました。
2008/11/24
- 再生・停止・一時停止ボタンに分かれていたのを1つのボタンにまとめました。
2008/11/12
2008/11/10
- 3ヶ月ぶりのバージョンアップです。自動作曲機能を色々と拡張しました。
ドラムなどのリズムパターンを指定できるようにしたり、トラック名を自由に変えられるようにしました。
メロディのリズムは、ずっと同じだと飽きてしまいそうなので、
10回に1回くらいの割合で反転するように作ってあります。
2008/09/17
- MIDI OUT に Java Sound Synthesizer を選んで音を鳴らすために必要となる、
サウンドバンクのインストール方法をマニュアルに追加しました。
Windows 内蔵音源とは一味違った音色を楽しみたいときの参考にしてください。
2008/09/15
- 9/14 オトダストに MIDI Chord Helper 入りノートPCを持ち込んでみました。
→ [レポートの詳細]
2008/08/10
- MIDI Editor 画面の Short Message タブにピアノキーボードを新設しました。
これにより、メイン画面に行かなくても直接音を出しながら選べるようになりました。
- メロディ自動生成画面で、各トラックの音域(最低音・最高音)を
ピアノキーボードで選べるようにしました。
今のところ、ドラムパート(Ch.10)でも意味なく指定できてしまうなど
気になる部分も残っていますが、今後改良していくつもりです。
2008/07/26
- コードダイアグラムもリサイズに対応し、拡大・縮小ができるようになりました。
2008/07/22
- テキスト入力したコードを鳴らしたときにも、マウスホイールによるアルペジオが
効くようにしました。Enter キーを使った場合も、
Enter ボタンをマウスでクリックした場合も同じように動作します。
2008/07/21
- リサイズ対応がほぼ落ち着いて、コードボタンとピアノキーボードの大きさが
均等に変わるようになりました。JSplitPane を使ってサイズの割合をある程度まで
変更できるようになっています。
2008/07/20
- オクターブ幅の最小を3オクターブにしました(2オクターブにすると
転回なしで 9th コードを鳴らしたときに自動スクロールしてしまうため)。
他にもレイアウトなどの細かい修正多数(Swing の BoxLayout を活用することで
リサイズ時の対応を強化しています)。
2008/07/19
- ピアノキーボードの表示オクターブ数をダイナミックに変更できるようにしました。
今までは3〜4オクターブでしたが、2〜11オクターブの範囲で自由に伸縮できます。
これをきっかけに、画面のレイアウトを見直しています。
2008/07/11
- メロディ自動生成時、トラックごとにベロシティを指定できるようにしました
(それまでは 100 で固定でした)。
2008/07/09
- 音域や転回を制御するためのクラス Music.Range を実装しました。
そのうち、このパラメータを GUI から操作できるようにしようと思っています。
- メロディを自動生成する際、ドラムも入れるようにしました。
それと同時に、自動作曲デモの音色もちょっと変えてみました。
2008/06/29
- 内部処理の修正: Music クラスの中に音名を表すクラス NoteSymbol を追加し、
その中に音名を作り出す部分を集約しました。
2008/06/28
- MIDI シーケンス自動生成画面で、開始小節位置を指定できるようにしました。
2008/06/23
- Firefox 3 の登場によって表面化した問題に対応しました。
Firefox 3 で MIDI Chord Helper のトップを開いたとき、デモ演奏などのボタンを押しても自動的に開始されなくなる、
という不具合を直しました(JavaScript の修正のみで、Java アプレットは修正なし)。
原因は、Firefox のバージョンアップで JavaScript が高速化されたことで
Java アプレットの関数を呼び出すタイミングが早くなり過ぎて、
アプレットが完全に起動していないのに呼び出そうとしたためでした。
対策として、try 〜 catch でアプレットの関数を呼んでみて、例外が捕まったら
タイマーで再呼び出しを行うようにしました(6/24:永久ループ防止のため
再呼び出し回数に制限をつけました)。
2008/06/22
- MIDI シーケンス自動生成画面で、各トラックごとに MIDI チャンネルと音色を
指定できるようにしました。
2008/06/17
- プレイリスト → New で出てくる自動生成画面で、キーを指定する方法が変わりました。
コード進行テキスト欄でキーを指定できるようにした代わりに、
キー選択コンボボックスを外しました。移調関連のボタンは今までどおり機能します。
- 調を表すクラス Music.Key を追加し、内部処理を少し整理しました。
2008/05/11
- 消灯してから点灯すると音色ファミリー選択の背景が元に戻らない、
という不具合を修正しました。
2008/05/06
- メイン画面で音色を選ぶとき、ピアノ系、ストリング系といったファミリーを指定することで
音色を絞り込めるようにしました。
ただし、リピート再生中にこの方法で音色を変えたりすると、
曲が始まってプログラムチェンジが降ってきたときに、
Swing が例外 ArrayIndexOutOfBoundsException を投げてくることがあります。
一応この例外は捕まえて表示してからそのまま続行するように実装してありますが、
例外の原因が Swing の内部にあるようなので根本解決のめどは立っていません。
- 歌詞表示のつなぎ目を - ではなくスペースに変更しました
(コードにも - が使われることがあるため)。
- 4月から名乗り始めたニックネームをバージョン情報などに追加しました。
2008/03/30
- プレイリスト画面を整理しました。
- 前後移動、再生、停止ボタンを追加
- ボタン名の変更(Load to sequencer → Jump、Add MIDI file → Open、など)
- 演奏位置の「分:秒」をリアルタイム表示
- 曲を1つ進めるボタンを押しても、メイン画面で曲長の「分:秒」表示が更新されない
ことに気づいたので修正しました。
2008/03/27
- MIDI Editor でコピー&ペーストを行う際、コピー元 MIDI シーケンスの分解能
(PPQ タイムベース)も一緒にコピーするようにし、ペーストされる側の分解能に合わせて
tick 位置を補正するようにしました。
これにより、分解能の異なる MIDI シーケンス間でコピー&ペーストを行っても、
時間が伸び縮みしてしまうことがなくなりました。
この方法は MIDI ファイルを結合するときにも活用できます。
2008/03/25
- メロディの自動生成でリズムを決めるときに、ビートごとに重み付けしてから
乱数で決めるようにしました。これで、音階軸と時間軸の両方の重み付けにより、
メロディに一定の傾向が出せるようになりました。
2008/03/24
- メロディの自動生成時、小節の最後の音に対してコードのルート音の発生確率を
高くするようにしました。
2008/03/23
- メロディの自動生成アルゴリズムを見直しました。
あらかじめ、コード、スケール、および前回との音程差をもとに音階の重みづけをしてから、
乱数で音を決定するようにしました。今まで見ていなかった「前回との音程差」を見ることで
メロディの乱高下がかなり抑えられました。
- 自動生成ダイアログのレイアウトを見直し、
Randomize ボタンで変化する部分を下側に集めました。
2008/03/22
- プレイリスト画面や Base64 画面をリサイズしたとき、
リストやテキストの内容を表示している部分だけがリサイズされるようにしました。
2008/03/17
- プレイリスト画面にあった New sequence タブを、別のダイアログ画面に分離しました。
2008/03/16
- メロディの自動生成に使う音のバリエーションを広げて、スケールの音すべてを
使うようにしました。(コードの構成音を多く使うという点は変わりません)
- ランダムに生成したコード進行をテキスト欄に出力する際、
今までは | C % Am % | とか | G7 % % % | のような出力がありましたが、このような場合、
小節内の全コードが等間隔なので | C Am | や | G7 | のように短縮して出力するようにしました。
なお、| C Am % % | のような場合は等間隔でないために短縮できないのでそのまま出力します。
- プレイリスト画面にあった Base64 入力欄を別のダイアログ画面に分離しました
(主にアプレットとして起動した場合に関係します)。
2008/01/13
- Music.Chord クラスの見直しをさらにすすめた結果、C(11) などの構成音が抽出できるようになりました
(前のバージョンでは、7th がないときなどに正しく抽出できませんでした)。なお、add9 は (9) ではなく
そのまま add9 と出すようにしました。
- コードの表記で () の中に +5 や -5 がある場合にも対応しました。
例えば Bm7-5 が Bm7(-5) のように書いてあっても解釈できます。
2008/01/12
- 和音オブジェクト(Music.Chord クラス)の実装を見直し、
+9, -9, 11, 13 などへの対応を強化しました(暫定版)。
カッコ () で表記されたコードのテキストを解釈できます
(例:D(-9) とか、C(+9,+11,-13) のような形式)。
この見直しにより、add9 や M9 のような表記をすべて () つきに置き換えました。
ただし一部の種類のコードですべての構成音がうまく出ないときがあり、
今後さらに見直すつもりです。
2008/01/05
- 新しいシーケンスを作るとき、曲名として最初のトラックにしか MIDI メタイベントの3番
(シーケンス名/トラック名)を入れていなかったので、他のソフトで読み込むとき、
どのトラックがどのパートなのかわかりにくい...という問題がありました。
そこで、他のトラックにもメタイベントの3番でパート名(ベース、コード、メロディ)を入れるようにしました。
2007年
2007/12/30
- メロディトラックを自動生成するとき、初音ミクなどの VOCALOID2 Editor で読ませることを考慮し、
音符が重ならないように作った...つもりでしたが、実は重なっていることが判明したので直しました。
2007/12/26
- 乱数を使ったコード進行自動生成ボタンを押したとき、キーだけでなく、
テンポや拍子もランダムに変更するようにしました。
2007/12/23
- プレイリスト画面の New sequence に、小節の長さを指定する機能と、
乱数を使ったコード進行自動生成機能を追加しました。
- 新しい JavaScript インターフェース addRandomSongToPlaylist(int measure_length) の作成に伴い、
[自動作曲して再生] するボタンをトップページに追加しました。
2007/12/20
- プレイリスト画面で、コード進行から新しい MIDI シーケンスを作るときに、
乱数を使って自動的にメロディを作るようにしました。
今後は「自動作曲ツール」を目指すべく、メロディ生成規則にもっと磨きをかけていく予定です。
2007/12/14
2007/12/07
2007/09/30
- 複数の MIDI シーケンス(曲)の切り替えが、今まではプレイリスト画面からしかできなかったのを、
メイン画面のボタンからできるようにしました。これに伴い「先頭へ戻る」ボタンを拡張し、
すでに先頭に戻っていれば前の曲へ移動されるようにしました。
2007/09/29
- 画面上のピアノキーボードの上側に表示中の音名(単音)をクリックすることにより、
その音をルートとする調を設定できるようにしました。
2007/09/22
- プレイリストのコード進行入力欄で、曲の先頭を | で始めると曲の長さが0になってしまったり、
途中に || のような空の小節を入れると曲がそこでカットされてしまう、というバグを直しました。
2007/09/15
- 画面上のピアノキーボードの上にある調号表示を、単なるラベルではなく、
選択可能なコンボボックスにしました。
2007/09/02
- アプレットとして起動した場合、ローカルファイルをドラッグ&ドロップしても
アクセスの許可がないため、必ずエラーメッセージが出ます。そこで、このような場合には
ドラッグ&ドロップ自体を受け付けないようにしました。
2007/08/27
- Roland 音源のリズムパートをパートナンバー10(ブロックナンバー0)に変更するような
システムエクスクルーシブ・イベントが含まれた MIDI ファイルを再生すると、そのイベントに遭遇した途端
固まってしまい、CPU 使用率が 100% になってしまう...というバグが見つかったので修正しました。
原因は、Receiver.send() の中で、ch が -1 になった状態で
midi_ch_selecter.ch_views[ch].setRhythmPart() を実行しようとしたためと思われます。
このような場合に「配列の添え字がおかしい」という例外を出してくれなかったのは意外でした。
- 【サーバ障害復旧】
本日23:00頃、RIMNET側から復元データ設置完了通知が来たので、このデータをもとにして
メッセージボードとアクセスカウンタを復旧させました。23:30頃から使えるようになっています。
2007/08/24
- 【サーバ障害続報】RIMNET側で、バックアップデータが 8/27(月曜)以降に復元される可能性が出てきました。
メッセージボードとアクセスカウンタの再開は、バックアップデータの復元が終わったあとになる見込みです。
2007/08/22
- 仮復旧後、base64.cgi の実行パーミッションを立てるのを忘れているのに気づきました。
このためにアプレットでローカル MIDI ファイルの読み書きができない状態になっていたので
(22:30頃に)直しました。
2007/08/20
- 【お知らせ】8/19(日曜)17:30 頃、RIMNET ユーザのホームディレクトリを格納している WWW サーバに
障害が発生しました。
この影響で MIDI Chord Helper のページのアクセスができなくなっていました。
別のサーバが用意されたので、先ほど(8/20 21:40頃)手元のデータをアップロードして仮復旧しました。
なお、メッセージボードとアクセスカウンタについては、書き込み内容やカウント値の
復旧の見通しが立っていないため、しばらくの間停止します。
2007/08/11
- タイトルバーの表示タイミングを改善しました(アプレットには無関係)
- 起動時、タイトルバーに最初から MIDI Chord Helper と出るようにしました。
- プレイリスト上でファイル名を変更したとき、すぐにタイトルバーに反映されるようにしました。
2007/08/09
- プレイリスト画面で、コード進行の文字列に「 | スペース 改行 」のような
文字シーケンスが含まれるとき、曲を自動生成して追加しようとすると「0割りエラー」で落ちる、
というバグを修正しました。
原因は1つの小節内におけるコードの長さの合計が0になったためでした。
このような場合、その小節自体を作らないようにしました。
2007/08/06
- プレイリスト画面に [Enharmonic](=異名同音)ボタンを追加しました。
このボタンを使うと、調号の♭や#が5個以上のときに♭と#のどちらの調で表記するかを選べます。
2007/08/05
- 文字で書かれたコード進行を移調する機能が動くようになりました。
- プレイリスト画面の入力欄からキーを設定できるようにしました。これは移調の際、
異名同音を正しく変換するために調号の♭、#の数の情報が必要なためです。
2007/08/04
- コードネーム(単独・コード進行どちらも)の文字入力時、大文字の音名しか受け付けないようにしました。
- コード進行のテキストを移調するボタンを追加しました。ただし、これはテスト版です。
同じ方向へ連続して押していくと null とかダブルフラット/ダブルシャープが出て、さらに押していくと
やがて例外が発生します。(対応方法は検討中)
2007/08/01
- プレイリスト画面の New Sequence タブにある Chord progression の欄に
行数の多いテキストを入れると、そのまま下に拡張されてしまい、
リサイズしないと見えなくなっていたので、スクロールバーが出てくるようにしました。
- プレイリスト画面の Base64 タブにあるテキスト欄の Java クラスを、
AWT の TextArea から Swing の JTextArea に変更しました。
これでテキスト部品がすべて Swing の部品に統一され、余計なちらつきがなくなりました。
他のテキスト欄と同じように Windows XP で右クリックが使えなくなりますが、
Ctrl+C などメモ帳と同じショートカットキーが使えるので、コピー&ペースト自体は可能です。
2007/07/31
- Firefox からアプレットとして起動しようとすると、Java コンソールに以下のようなエラーが出て
起動できなくなるというバグを直しました。(kmng さん、メッセージボードでのご指摘ありがとうございました)
JFileChooser() のインスタンスを作ろうとすると、アプレットではローカルファイルに
アクセスできないために AccessControlException が出ます。これはきちんと catch しています。
しかし、いつの日からかこの Exception によって ExceptionInInitializerError が引き起こされるように
なっていました(ひょっとしたら Java VM の自動バージョンアップの影響もあるのかも知れません)。
というわけで、ExceptionInInitializerError も catch するように修正しました。
また、この修正だけでは2度目以降の起動で NoClassDefFoundError も出るので、
この Error も catch するようにしました。
Java Plug-in 1.6.0_02
使用中の JRE のバージョン 1.6.0_02 Java HotSpot(TM) Client VM
:
:
java.lang.ExceptionInInitializerError
at sun.awt.shell.Win32ShellFolder2$ComTask.execute(Unknown Source)
at sun.awt.shell.Win32ShellFolder2.getFileSystemPath(Unknown Source)
at sun.awt.shell.Win32ShellFolder2.composePathForCsidl(Unknown Source)
at sun.awt.shell.Win32ShellFolder2.(Unknown Source)
at sun.awt.shell.Win32ShellFolderManager2.getDesktop(Unknown Source)
at sun.awt.shell.Win32ShellFolderManager2.get(Unknown Source)
at sun.awt.shell.ShellFolder.get(Unknown Source)
at javax.swing.filechooser.FileSystemView.getRoots(Unknown Source)
at javax.swing.plaf.metal.MetalFileChooserUI.updateUseShellFolder(Unknown Source)
at javax.swing.plaf.metal.MetalFileChooserUI.installComponents(Unknown Source)
at javax.swing.plaf.basic.BasicFileChooserUI.installUI(Unknown Source)
at javax.swing.plaf.metal.MetalFileChooserUI.installUI(Unknown Source)
at javax.swing.JComponent.setUI(Unknown Source)
at javax.swing.JFileChooser.updateUI(Unknown Source)
at javax.swing.JFileChooser.setup(Unknown Source)
at javax.swing.JFileChooser.(Unknown Source)
at javax.swing.JFileChooser.(Unknown Source)
at PlayListDialog.(PlayList.java:155)
at ChordHelperApplet$SequencerUnit.(ChordHelperApplet.java:239)
at ChordHelperApplet.init(ChordHelperApplet.java:1912)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.security.AccessControlException: access denied (java.lang.RuntimePermission shutdownHooks)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.Runtime.addShutdownHook(Unknown Source)
at sun.awt.shell.Win32ShellFolder2$ComTaskExecutor.(Unknown Source)
at sun.awt.shell.Win32ShellFolder2$ComTaskExecutor.(Unknown Source)
... 22 more
2007/07/30
- コード進行からMIDIシーケンスを自動生成するとき、* でコードを再度鳴らせるようにしました。
これを % と組み合わせることで、コードストロークのタイミング(リズム)を記述できるようになります。
2007/07/27
- コード進行からMIDIシーケンスを自動生成するとき、% で音長を伸ばせるようにしました。
2007/07/24
- コード進行からMIDIシーケンスを自動生成するときに、
拍子、テンポ、シーケンス名を指定できるようにしました。
2007/07/23
- コード進行からMIDIシーケンスを自動生成するとき、分数コードも認識するようにしたうえで、
ベース音のトラックも作るようにしました。
2007/07/22
- コードダイアグラム上のイジェクトボタンを廃止しました。●ボタンで
コードネームのテキストを記録するとき、別ダイアログではなく歌詞表示欄へ追加されます。
- ロードされた MIDI ファイル名をタイトルバーとステータスバーに含めて表示するようにしました。
ただし、アプレットとして実行している場合は、タイトルバーの書き換えは行いません。
- コードを文字入力して伴奏を自動生成する機能を追加
プレイリスト画面の新規MIDIシーケンス作成部分に、コード進行をテキスト入力するための
テキストエリアを追加しました。小節の区切りを | としてコードネームを入力しておくと、
伴奏の入ったトラックが自動的に作られます。まだ最低限の機能しかありませんが、
今後徐々に拡張していくつもりです。
2007/07/21
- 歌詞などを表示するテキスト欄にコードネームを入力して [Enter] を押すだけで
そのコードの音が出るようにしました。
コードとして解釈できない文字列の場合は、出ているコードの音が止まります。
2007/07/14
- 編集した MIDI ファイルを保存せずに終了しようとして取り消そうとすると、
プロセスが終了しないままウィンドウだけが閉じてしまう、というバグがあったので直しました。
- 再生中に編集結果を反映するとき、曲を停止させたり先頭に戻すことなく表示に反映させ、
そのまま再生を続行できるようになりました。
2007/06/30
- MIDI Editor のイベント表示でデコードできる SysEx の種類を増やしました(Roland GS 系を中心に)。
- 今まで Java コンソールに出力していた Coarse Tune / Fine Tune によるチューニング変更通知を
出力しないようにし、これに代わるものとして Tune Offset: のラベルを追加しました(コードダイアグラムが
非表示のときだけ表示)。
2007/06/26
- GS のドラムセット変更を受信したときに、その設定に合わせて Ch.10 以外の MIDI チャンネルも
リズムパートとして扱われるようにしました。
それまでは、リズムパートを変更されてしまうと、打楽器であることを認識できなかったため、
コードボタンに余計な+や○が出てきれいな表示にならなかったり、
ノート番号の表示が音階のままで打楽器の名前にならなかったりしていました。
2007/06/25
- MIDI Editor のイベント表示における SysEx 表示で、GS のドラムセット変更を認識させるようにしました。
2007/06/24
- GM 以外のリセット系メッセージ(GS Reset、GS System Mode Set (Mode 1/2)、XG System ON)にも
反応するようにしました。これらのメッセージを受信した場合、GM System ON/OFF のときと同じように
表示がリセットされます。
- 上記の修正に関連して、MIDI Editor のイベント表示でも SysEx のリセット系メッセージを
明記するようにしました。
2007/06/23
- Reset All Controllers メッセージを受信したとき、MIDI チャンネルセレクタなどの
表示をすべてクリアしていたのですが、実はこの振る舞いは RP-015: Response to Reset All Controllers
に書かれた内容に合っていないことが発覚したので、すべてクリアしないよう修正しました。
この修正により、Program Change のあとに Reset All Controllers が来たときに
音色表示が - に戻ってしまうという現象が発生しなくなりました。
- GM System ON/OFF(Non-Realtime Universal System Exclusive Message の一種)を受信したときに
チャンネルセレクタの表示をクリアするようにしました。
従来は Reset All Controllers ですべてクリアしていたのですが、そうすることが
できなくなったため GM System ON/OFF で代用することにしました。
2007/06/12
- MIDI Editor 画面のイベントリスト表示処理で、データの入っていない
SysEx(システムエクスクルーシブ)に遭遇すると ArrayIndexOutOfBoundsException: 1
と出力されて落ちてしまう、というバグを発見したので修正しました。
- MIDI ファイルを読み込んだあと FileInputStream を close() で閉じるのを忘れていたので、
きちんと閉じるよう修正しました。(閉じ忘れると、アプリケーション終了時までその MIDI ファイルが
ロックされたままになり、移動やファイル名変更などができなくなる現象が起きます)
2007/06/10
- 32x32のアイコン
を作りました。ホームページのアイコンと、jar ファイル内の png ファイルに反映してあります。
- MIDI ファイルをドラッグ&ドロップなどで追加して自動再生するとき、最後に再生した MIDI シーケンスが
もう一度再生されてしまっていたので、その次の MIDI シーケンスから再生するようにしました。
この機能を実現するためには追加先のプレイリスト上のインデックス値が必要になるため、
JavaScript インターフェースの addToPlaylist() 関連関数の戻り値を boolean から int に変更し、
インデックス値を返すようにして、さらに play() にもインデックス値を指定できるようにしました。
また、addToPlaylist() と同様に boolean を返す playMidi() 関数も、これを機会に廃止しました。
- プレイリストにもドラッグ&ドロップできるようにしました。
2007/06/06
- Java アプリケーションとして使っている場合の未保存チェックを強化しました。
保存されていない MIDI ファイルをプレイリストから削除しようとしたり、
保存されていない MIDI ファイルがあるのにアプリケーションを終了しようとした場合に、
確認ダイアログを出すようにしました。
2007/06/05
- エクスプローラなど、他のアプリケーションから MIDI ファイルをドラッグ&ドロップできるようにしました。
ただし、これは通常の Java アプリケーションとして動かしている場合のみ有効です。
Java アプレットとして動いている場合はローカルファイルにアクセスできないので、
ドラッグ&ドロップしても拒否されます。
2007/06/04
- Java アプリケーションとして動作させたとき、引数に指定した MIDI ファイルを
自動再生するようにしました。これにより、MIDI ファイルをダブルクリックして開くときに使う
アプリケーションとしても設定できるようになりました。
2007/06/03
- Java アプレットとしてだけでなく、普通の Java アプリケーションとして
動かせるようにしました。普通の Java アプリケーションであれば MIDI ファイルを直接読み書きできるので、
そのためのボタンをプレイリスト画面に追加しました。(このボタンは Java アプレットとして使っている場合は出現しません)
2007/05/30
- 再生中かどうかを JavaScript から調べるための関数 isRunning()、isPlaying() を追加しました。
- ブラウザ上の MIDI ファイル選択フォームを、アプレットと同居させました。
これにより、演奏中であっても別の MIDI ファイルを選択して演奏予約ができるようになります。
2007/05/24
- ウィンドウの一部を書き換えた場合でも、新しいウィンドウで開いた場合でも全く同じように、
MIDI ファイルの読み書きができたり、ギターのボタンで音色を初期設定して起動することができるようにしました。
- Firefox で動作するようにしました。
- IE と違って、Firefox では document.readyState が使えないので、
子ウィンドウの onLoad をトリガーにして起動する形にしました。
- Firefox では button タグに type 属性がないと submit ボタンだとみなされ、
閉じるボタンを押しても保存ダイアログが出るといった現象が起きるので、
type="button" をきちんとつけるようにしました。
2007/05/15
- MIDI ファイルの URL を読み込ませた場合に、その最後の / より後ろの部分を
ファイル名として設定するようにしました。
- アプレットの Base64 エンコードボタンで出力されるヘッダに、ファイル名を反映するようにしました。
- sendMidiToCGI() を廃止しました。これは HTML フォームのように複数の値を POST メソッドで送るような
フォーマッティングを一切行わないので、Perl の CGI.pm や PHP の $_POST 変数などでは
受け取れない可能性があるためです。CGI プログラムへ MIDI データを送りたい場合は、
代わりに getMidiDataBase64() を使ってデータを取り出し、HTML フォーム経由で送るようにしてください。
2007/05/14
- オンラインで読み込んだときのファイル名を CGI 経由で引継ぎ、保存するファイル名の
初期値として反映できるようにしました。このファイル名はアプレットの
プレイリスト画面で設定・変更することもできます。
2007/05/12
- シーケンサにロード中の MIDI データを、JavaScript から Base64 エンコードした文字列として
取り出せるようにし( getMidiDataBase64() )、さらにこれを CGI 経由でデコードして
ブラウザの「保存しますか?」というダイアログ画面から MIDI ファイルを保存できるようにしました。
これにより、読み込み・保存の両方で、Base64 エンコード/デコードが完全に自動化されました。
(オフラインで使う場合は、従来どおり手動での Base64 変換が必要です。)
2007/05/09
- Base64 エンコーダの CGI を拡張し、エンコード結果を textarea 要素で挟むようにして、
そのテキストをアプレットに直接読ませるようなページを返すようにしました。
(これで Base64 エンコード済み MIDI データをコピー&ペーストする手間が省けます)
2007/05/02
- 自動転回 on/off のボタンを拡張し、構成音の5度、3度、ルート音のうちいずれか一つを
省略できるようにしました(JavaScript からの起動時指定もOK)。
この機能を使うと、2音で構成されるような和音(五度抜きやパワーコード)を
コードボタンで鳴らせるようになります。
2007/05/01
2007/04/30
- 起動時に音色やコードダイアグラムをギターにできるよう、
以下のような JavaScript 呼び出しインターフェースを追加しました。
- setOctavePosition
- setChannel
- setProgram
- setChordDiagramForGuitar
2007/04/28
- 開発環境を JDK 6(Java SE Development Kit 6)にバージョンアップし、コンパイルし直しました。
(詳細は動作環境のページを参照)
2007/04/21
- マウスホイールによるアルペジオ演奏ができる範囲を広げました。
- Capo をチェックしたときにマウスホイールを回しても、
アルペジオ演奏ができなくなっていたので、できるように直しました。
- ピアノキーボードの上にあるコード表示ラベルでも、マウスホイールが効くようにしました。
2007/03/10
2007/03/04
- 当サイトにも Base64 エンコーダ(CGI)を設置しました。自分でエンコーダを持っていなくても、
お手元の MIDI ファイルを手軽に Base64 エンコードして再生できます。
2007/03/03
- トップページ上にアプレットを後から貼り付けて動かせるようにしました。
これに伴い、デモ演奏もトップページに引っ越しました。
- Base64 エンコードしたテキストを JavaScript から与えるための関数として
addToPlaylistBase64() を追加しました。
2007/02/25
- JavaScript から Java アプレットを呼ぶためのインターフェースとして addToPlaylist() と play() を追加しました。
これにより、起動時に JavaScript から複数の MIDI ファイルを読み込ませたうえで連続再生できるようになりました。
2007/02/24
- HTML から MIDI ファイルを指定( param タグ、または JavaScript インターフェース playMidi() )するとき、
直接シーケンサに読み込むようになっていたため、プレイリストに出てきませんでした。
そこで、URL を扱う部分をプレイリストのほうに移動し、すべてプレイリストを経由して読み込むようにしました。
CGI へ渡す部分についても、プレイリストのほうへ移動しました。
2007/02/18
- 再生位置を1小節ずつ移動できるボタンを追加しました。
2007/02/10
- MIDI Editor のイベントリストで使っているデータモデル(ListModel インターフェース)の
スーパークラスを DefaultListModel から AbstractListModel に変更し、
追加や削除のパフォーマンス向上を図りました。
2007/02/08
- MIDI Editor に Edit ボタンを追加しました。
イベント一覧をダブルクリックしたときと同じ動作をします。
2007/02/07
- ロード中のシーケンスを、プレイリストから削除できないようにしました。
もし削除できてしまうと二度と保存できなくなってしまうので、シーケンサからシーケンスを外す
ようにしていたのですが、Sequencer.setSequence() の引数に NULL を入れると、
「1μ秒/四分音符」になるようなので、ロード中は削除できないようにしました。
これにより、テンポの初期化が不要になったので外しました。
- Load ボタンでウィンドウが閉じないようにしました。
- Base64 Encode ボタンをクリックしたときに、Base64 タブが自動的に選択されるようにしました。
2007/02/06
- 初回だけテンポが 60000000 になる現象ですが、根本的な原因がわかりました。
シーケンサのテンポは、何も設定しないと初期値が 120 QPM ではなく、
「1μ秒/四分音符」(1分あたりに換算すると「四分音符60000000個」すなわち 60000000 QPM)に
なるようです。この影響か、初回だけ曲が「暴走」するという現象もみられました。
初期テンポが異常に速いために、テンポチェンジイベントの処理が間に合わず暴走してしまったのでしょう。
そこで、表示を 120 にするのではなく、シーケンサにMIDIシーケンスを設定(あるいはクリア)する前に
Sequencer.setTempoInBPM() でシーケンサのテンポ設定を 120 に初期化するようにしました。
これにより、初回だけ暴走するようなことがなくなりました。
2007/02/05
- プレイリスト画面について以下の3点を修正しました:
- 空のMIDIシーケンスをシーケンサにロードした瞬間、テンポの表示が 60000000 になる現象が起きることがあったので、修正しました。
原因は、javax.sound.midi の Sequencer.getTempoInBPM() がそのような値を返していたためです。
回避策として、60000000 が返された場合に Java コンソールにメッセージを表示したうえで
強制的に 120 に置き換えて表示するようにしました。
- シーケンスを新規追加したときに、追加したシーケンスを自動的に選択するようにしました。
- MIDI シーケンスを選択したときに自動的に Base64 エンコードするのをやめ、
Base64 Encode ボタンでエンコード、Clear ボタンでテキスト欄を消去できるようにしました。
2007/02/04
- プレイリスト機能が完成しました。
Base64 読み込みのほか、分解能(PPQ : Pulse Per Quarter =四分音符あたりのTick数、
タイムベースとも呼ばれる)を指定して空のMIDIシーケンスを作れるようになりました。
これにより、分解能が1種類で固定ではなく、複数の選択肢の中から選んで作成できるようになりました。
なお、すでに作成したMIDIシーケンスの分解能を変更することはできません。
2007/02/03
- MIDIシーケンスを複数読み込んで連続的に演奏できるようにするためのプレイリスト機能(暫定版)を追加しました。
- 一時停止ボタンとは別に、停止ボタンを追加しました。機能的には「一時停止 → 先頭へ戻る」と同等です。
2007/02/01
- 曲のタイトルが先頭トラックでなく、2番目以降で初めて出てくる場合でも、
2番目以降のトラックを探して表示するようにしました。
- コントロールチェンジのデータエントリーでデータを変更するとき、RPN と NRPN のどちらに対する
データなのかを区別していなかったため、区別するよう修正しました。
(これが原因で、NRPN 0000 が RPN 0000 すなわちピッチベンドセンシティビティと混同され、
ピアノキーボード上の●の左右の伸びが異常に長くなるという現象が起きていました)
2007/01/23
- 録音の操作方法が大幅に変わりました。
録音の指定はメインウィンドウからではなく、MIDI Editor で直接トラックを作成し、
そのトラックに対して録音するMIDIチャンネルを指定します。
自分でトラックを作ればテンポや拍子を自由に設定できますし、
初期小節数の指定は End Of Track の小節位置を移動することによって自由に行えます。
ここで End Of Track が前方へ移動できないという問題があったので、
End Of Track の削除制限も大幅に緩和しました。
リズムはメインウィンドウの表示内容を見ればよいので、メトロノームトラックの自動作成も廃止しました。
音符をリズミカルにクリックしてテンポを合わせる機能も MIDI Editor へ引き継ぎました(ただし音は出ません)。
- 再生スピードを調整できるようにしました。目盛りは12平均律と全く同じ原理で振ってあり、
7目盛り右へ行くと約1.5倍、12目盛り(=大目盛り1個分)で2倍、のようになります。
2007/01/20
- MIDI Editor のトラック一覧に、Mute/Solo のチェックボックスを追加しました。
- Mute をチェックすると、そのトラックだけ再生されなくなります。
- Solo をチェックすると、そのトラックのみが再生されます。
2007/01/18
- 曲のタイトルを、シーケンサのメタイベントリスナー経由ではなく、
MIDIシーケンスの最初のトラックの先頭へ直接アクセスして取得するようにしました。
曲のタイトルは時間とともに変わるものではなく、MIDIファイルを読み込んだ時点で
1度取得すればよいので、イベントリスナーを通してもあまり意味がないことに気づいたためです。
2007/01/12
- 停止ボタンのアイコンを■から||に変更しました。
停止しても先頭に戻していない場合、「一時停止」ボタンのアイコンが使われることが多いためです。
2007/01/07
- MIDI Editor の Duration 欄にある音符メニューの中に tick 数を併記し、
何分音符が何 tick なのかが一目で分かるようにしました。
(JComboBox はそのままではアイコンまた文字列のいずれかしか表示できませんが、
Renderer を自分で定義することで、両方表示することが可能です。)
さらに、tick 数が音符メニューにあるものと一致した場合に、その音符が自動的に選択されるようにしました。
2007/01/06
- MIDI Editor で音階(Note ON/OFF)を入力するときに使う Duration 欄に、音符メニューを追加しました。
音符の形から選ぶことで tick 数を簡単に割り出すことができます。
- MIDI Editor に Cut/Copy/Paste ボタンを追加し、コピー&ペーストができるようにしました。
ただし OS のクリップボードは使いません。MIDI Editor の内部で持っているバッファへコピーします。
2007/01/05
- MIDI Editor に Change ボタンを追加しました。Change ボタンを使うと Delete と Add の操作が一度に行えます。
- Note ON/OFF をペアで扱うかどうかを選択するチェックボックスを追加しました。
現状では、Note ON/OFF の入力の仕方によっては「三角関係」が生まれてしまい、
他の同じ音階、同じチャンネルの Note ON/OFF イベントを巻き込んでしまうことがあります。
このチェックボックスでペアを一時的に解除することで、三角関係の解消を図ることができます。
2007/01/04
- MIDI Editor のノートの扱いを改良しました。Duration(長さ)を入力することによって Note On/Off を
同時に入力したり、対応する Note On/Off の自動選択、同時削除ができるようになりました。
- メイン画面のピアノキーボードからノート番号入力をするための専用ボタンを、
MIDI Editor のメッセージ入力画面に追加しました。このボタンが表示中かつ選択されていて、
再生中でも録音中でもない場合に働きます。
2007/01/03
- MIDI チャンネル選択ボタンで上下キーを使って音色を変更できるようにしました。
- MIDI Editor でノート番号を入力するとき、メイン画面のピアノキーボードから入力できるようにしました。
この入力機能が有効なのは、次の場合です:
- ノート番号を指定するメッセージ(Note On, Note Off, Polyphonic Key Pressure)が Short Message タブに表示されていること
- イベント追加ボタンが使用可能であること
- 再生中でも録音中でもないこと
この状態のときにメイン画面でピアノキーボードをクリックすると、ノート番号だけでなく、
MIDI チャンネルやベロシティも MIDI Editor 側にコピーされ、MIDI Editor が前面に出ます。
2007/01/02
- メイン画面の MIDI チャンネル選択ボタンについているボリュームインジケータに
エクスプレッション表示を追加しました(幅いっぱいに緑の背景として表示されます)。
- MIDI Editor でトラックの選択を変更したとき、変更前のトラックで選択されていた小節位置の付近へ
スクロールするようにしました。
2007/01/01
- メイン画面の編集ボタンに、自動スクロール機能を追加しました。
演奏中「この小節のところだけ直したい!」と思ったときに編集ボタンをクリックすると、
タイムスライダの位置が MIDI Editor に反映され、直したいイベントの付近へ自動的にスクロールします。
2006年
2006/12/30
- MIDI Editor に Jump ボタンをつけ、指定した小節位置のイベントへジャンプできるようにしました。
- Add ボタンでイベントを追加したとき、自動的にジャンプするようにしました。
2006/12/25
- 先頭に指定されている拍子が 4/4 以外の場合、曲の先頭に戻ると 4/4 表示に戻ってしまっていました
(再生しないと指定の拍子が出なかった)。これを、曲の先頭に戻ったときでも指定の拍子が出るように修正しました。
2006/12/24
- [n Tracks] の表示を廃止し、編集用アイコンボタンに置き換えました。
- PPQ 表示を MIDI Editor の画面へ移動しました。
- イジェクトボタン、先頭戻りボタンを、再生中でも使えるようにしました。
2006/12/19
- MIDI Editor の MIDI メッセージ設定欄は、大部分が 0xFF 0x00 0x08 ... のようなバイナリ数値の羅列で
入力するようになっています。しかし、Meta タブで入力するテンポは、この形式では
実際のテンポ(QPM)がわかりにくいです。
そこで、よりわかりやすい値で入力できるようにしました。
他にもバイナリ数値の羅列でしか入力できないものがありますが、このあたりは今後、
徐々にわかりやすいインターフェースにしていくつもりです。
2006/12/16
- MIDI Editor のボタン制御を強化しました。
- トラックが選択されていないとき、イベント追加ボタン、トラック削除ボタンは操作不可
- イベントが選択されていないとき、または EOT (End Of Track) が選択されているときは、イベント削除ボタンは操作不可
これにより、EOT が削除されてしまうようなことがなくなりました。
- 拍子(Time Signature)のイベントを追加したときに、小節(Measure)の表示を再計算するようにしました。
- トラックやイベントを追加すると、曲の長さ、トラック数、小節数などが変化します。
このような場合にアプレット本体側の表示も更新するようにしました。
2006/12/13
- 変拍子のあとにイベントを追加したとき、指定の小節位置とは違うところに挿入されてしまう、
というバグを直しました。
2006/12/12
- MIDI Editor で Delete ボタンを押したときに、削除するかを確認するダイアログを出すようにしました。
2006/12/10
- MIDI Editor 編集機能の修正
- 0x80 以上のバイト値の入力ができない場合があったので直しました。
(C 言語と違って Java は byte が常に符号付きなので、
128 以上の数値を入れようとすると例外を出してきます)
- メタイベントのテキストを 0xNN の16進数ではなく、直接文字列としてやりとりできるようにしました。
- リサイズのたびに部品があちこちに移動してしまう現象を食い止めるため、
リストとテキストエリアの横幅を固定しました。
2006/12/09
- MIDI Editor 編集機能で、以下の場合に例外が発生する不具合を直しました。
- データ欄に何も入れないままイベントを追加しようとしたとき
- データサイズの間違ったメタイベントを表示しようとしたとき
2006/12/06
- MIDI Editor による編集がとりあえずできるようになりました。
トラックの追加と削除、MIDIイベントの追加と削除ができます。
ただし、まだ最低限の編集機能しかありません。
MIDIイベントは 0x をつけた16進数をスペースで区切って入れる形になっているので、
MIDIメッセージのフォーマットを意識しながら入れる必要があります。
画面レイアウトもあまり整えていません(リサイズすると位置がずれたりします)。
エラーチェックなどもまだ不十分です(例えば、End Of Track が消せてしまったりします)。
2006/11/25
- N-Tracks のラベルをクリックしたときに、MIDI データの中身を表示するウィンドウを出すようにしました。
タイトルが MIDI Editor になっていますが、まだ編集はできません(そのうち編集ができるようにするつもりです)。
2006/11/22
- MIDI データを CGI プログラムに渡すメソッド sendMidiToCGI() が動作するようになりました。
2006/11/19
- 録音時にマウスホイールを回してもアルペジオ演奏ができない、という不具合を直しました。
- 録音した MIDI データを CGI プログラムに渡すメソッド(テスト版)を組み込みました。
2006/11/18
- マウスホイールを回してアルペジオ演奏ができるようにしました。
コードボタンをクリックして鳴らしたあと、コードボタンの上でマウスホイールを回すと、
構成音が1個ずつ順番に鳴ります。
2006/11/06
2006/10/29
- コードダイアグラムの縦スクロールバーが一番上の場合にも、
ツールヒントを出すようにしました。押さえ方のバリエーションの数が表示されます。
2006/10/15
- ピアノキーボードで調号ボタンの選択を変更するとき、
従来は、相対「ド」(メジャーキーの基準音)を右クリックする方法だけでしたが、
相対「ラ」(マイナーキーの基準音)を中クリック(または [Alt] キーと併用)する方法でも選択できるようにしました。
2006/10/12
- ピアノキーボードの paint() メソッド(描画ルーチン)を高速化しました。
今までは、各鍵盤のリストが「全体」しかなかったため、描画のときに無関係な鍵をスキップしながら描画していました。
新しいバージョンでは、オクターブ設定時にあらかじめリストを複数作るようにしています。
追加したリストは、黒鍵のみ、白鍵のみ、PCキーボードの割り当てがある鍵盤のみ、の3種類です。
これらのリストを描画の段階に応じて選ぶことで、無関係な鍵かどうかをチェックしてスキップする手間が省けます。
描画は演奏中に何度も何度も行われるので、処理をできるだけ少なく抑えることが重要なのです。
2006/10/08
- MIDI CH. 選択ボタンの遅延消灯中、明かりのスイッチを点灯/消灯すると白く点灯したままになってしまう不具合を直しました。
2006/10/07
- Note OFF による MIDI CH. 選択ボタンの消灯を遅延させ、小刻みに点滅しないようにしました。
(表示の負担を軽くし、ブラウザ操作による発音遅延の軽減を図っています)
2006/10/01
- MIDIファイル再生時、曲のタイトルの判定で MIDI tick が 0 からわずかに過ぎてしまっていることが
原因で先頭とみなされず、タイトルが出なくなることがあったので修正しました。
- 低音マークを表示する通知を、対象外のコードボタン(その音をルートとして持たないコードと、sus4 コード)に
なるべく送らないようにしました(パフォーマンス向上のため)。
2006/09/07
- ピアノキーボードをドラッグし、マウスボタンを押したまま MIDI CH. ボタンに飛び込んでしまったとき、
押せるはずがないのに□が点灯してしまっていたので、点灯しないよう修正しました。
2006/08/19
- コードボタンに低音マークを表示するようにしました。
これによってベース音が見えるようになり、分数コードをより的確に検知できるようになりました。
2006/08/16
- フリーソフトである旨明記し、ホームページ素材として使う場合の方法をドキュメントに追加しました。
2006/08/15
2006/08/05
- アプレットのパラメータ(param name=midi_file)で指定した MIDI ファイルが読み込めなかった場合、
アプレットのロードに失敗していました。このような場合でも、アプレット自体は起動されるようにしました。
(アプレットのロードに失敗すると、JavaScript から Java アプレットへ曲をセットしようとしたときに
Internet Explorer がフリーズし、タスクマネージャでないと終了できなくなってしまうことがあります。)
- Base64 codec のクラスライブラリ(commons-codec-1.3.jar)が
HTML の applet タグで 指定されていない場合、イジェクトボタンを使えないようにしました。
2006/07/23
- オリジナルソングコーナーを一新しました。
「あれもプラ」の続きを作り、さらに、MIDI Chord Helper のアプレットを埋め込みました。
Java VM が Sun 版の最新になっていれば、アプレットが起動し、そのまま光るコードの動きを
見ながら聴くことができます。
2006/07/04
- ナチュラル記号のアイコンを作りました。キー C/Am には調号がないため、
そのことを示すために == を表示していましたが、これをナチュラル記号に変えました。
2006/06/28
- 起動時に録音ボタン [●] の表示を消せるようにしました。
param タグで name=no_rec value="xxx"(xxx は任意の文字列、長さ0でもOK)のように
指定すると、録音ボタンを消した状態で表示できます。
2006/06/27
- アプレットに playMidi() メソッドを追加しました。
これにより、JavaScript から MIDI ファイルの URL を指定して呼び出せるようになりました。
例えば、ページ上のボタンの onClick イベントハンドラに指定して、
ボタンごとに MIDI ファイルの URL を切り替えて再生する、といった使い方ができます。
- 起動時にイジェクトボタンの表示を消せるようにしました。
param タグで name=no_eject value="xxx"(xxx は任意の文字列、長さ0でもOK)のように
指定すると、イジェクトボタンを消した状態で表示できます。
2006/06/26
- param タグで name=midi_file value="MIDIファイルのURL" のように指定することで、
その MIDI ファイルを起動時に再生できるようにしました。
ただし、Java のセキュリティ上の制限により、
アプレットと異なるサイトの URL にある MIDI ファイルは読み込めません。
2006/06/18
- +マークを復活させました。回や○が同時に出てきたときなどはLマークの繰り返しが目立ちにくく、
間隔が離れすぎて判別しにくくなることがわかったためです。
- コードボタンのペイントの処理(主に paint() の中での処理)を整理し、
描画関数の不要な呼び出しをなるべく行わないように直しました。
2006/06/17
- MIDI ファイルをロードしたときに、コードダイアグラムを消すだけでなく、
自動的にDarkモードになるようにしました。これにより、美しく光り輝くコードボタンの模様の動きを
最小限の操作で楽しめるようになりました。
2006/06/15
- コードボタンの模様の出し方を整理しました。+マークは、Lマークの繰り返しで判別できるので廃止し、
○マークは単にトライトーンを示すだけのマークにしました。
これにより、ノートの変更を伝達するコードボタンの数を減らすことができたので、
負担が少し軽くなったと思います。
2006/05/28
- 今までは停止中にしかできなかった、タイムスライダによる移動を再生中にもできるようにしました。
- 拍子、調、テンポの表示更新タイミングを改善しました。
実際に演奏されたときだけでなく、タイムスライダで曲の途中へ移動した場合にも
表示が更新されるようにしました。
2006/05/21
- ビートバーを廃止し、小節位置のところに何拍目かを表示するようにしました
(拍の視覚的表示はコードボタンに任せることにしました)。
- 小節位置を0始まりから1始まりに変更しました。
これで、MIDI Chord Helper で挿入位置を特定してから実際に MSP で挿入するとき、
頭の中で位置を1つずらさないといけない...というわずらわしさがなくなりました。
2006/05/20
- 公開してから、たぶんもう2年を過ぎたと思います。
そこで、これを機会に MIDI Chord Helper という名前にしました。
(文章中の名称は気づいたら順次直していく予定)
公開した当時は単なる「楽器」で、そのあとはコードファインダとして
使えるだけでしたが、ここ最近「コードの見える MIDI プレーヤ」として使うことが
多くなってきたので、このような名前にしました。
2006/05/16
- MIDI 再生中、選択されている調号ボタンに [回] の模様を表示し、リズムにあわせて
徐々に消えていくようにしました。これで、遠くのビートバーに視線を移動させなくても、
コードとリズムの動きを同時に眺められるようになりました。
- 拍子の分子が2桁の場合でも、ビートバーに表示される数字が隠れないようにしました。
2006/05/13
- 新規リアルタイムレコーディング時に 4/4 拍子以外を設定しても
ビートバー(拍を示すバー)に反映されない、というバグを直しました。
- 今何拍目かを表す数字をビートバーの上に出すようにしました。
- ボタンのアイコンデザインやツールチップを見直しました。ツールチップの一部に日本語の
説明を追加したほか、ダークモード切り替えボタンを照明のスイッチみたいなアイコンにすることで、
まるで部屋の明かりをつけたり消したりするような操作感が得られるようにしました。
2006/05/09 Darkモードで黒くなる範囲を広げました。
2006/05/02 前回の歌詞から充分に時間が経っていない場合、歌詞を上書きしないようにしました。
これにより、歌詞の一部が見えなくなってしまう現象が起こりにくくなりました。
2006/05/01 ダブルシャープを x で統一し、ダブルフラット bb のつくマイナーコードのフォントを縮小しました。
これにより、すべてのコードネームがコードボタンに収まるようになりました。
また、英語での説明で音階が出てくるところは、F double sharp のようにフルスペルで表記するように統一し、
x がエックスではなくダブルシャープを表すことがハッキリわかるようにしました。
2006/04/29
- 調を説明するツールヒントに「ハ長調」「イ短調」といった日本語名が出るようにしました。
- MIDI ファイルの分解能を表示するようにしました(PPQ の場合は四分音符あたりのティック数、
SMPTE の場合は1フレームあたりのティック数)。
2006/04/15
- コードボタンと画面上のキーボードとの間に、最後に出したコードネームが表示されている場合、
それを右クリックしたときに音が止まるようにしました。
- コードのルート音として「ダブルフラット」や「ダブルシャープ」を使った表記ができるようにしました。
2006/04/08 MIDIファイルをロードしたとき、自動的にコードダイアグラムの表示が消えるようにしました。
2006/03/20 長さが 35分47.483647秒(符号付4バイトの最大値 2,147,483,647μ秒)を超えるような
長〜い曲を読み込むと、時間表示やスライダーがおかしくなることが判明したため、この倍の約71分まで
対応できるようにしました。
この現象の根本原因は javax.sound.midi のバグです。
Sequencer.getMicrosecondLength() メソッドは long 型(符号付8バイト)として値を返すので、
本来ならもっと大きいμ秒も表せるはずです。しかし、実際は符号付4バイトの最大値を超えると
マイナスの値を返してきます。そもそも曲の長さや位置にマイナスはありえないので、
「符号なし」扱いになるよう Chord Helper 内部で補正するようにしました。
(fix済みの似たようなバグが報告されていますが、これとは別の新しいバグのようです)
2006/03/18 コードダイアグラムを非表示にしたときに歌詞表示欄が広がるようにしました。
長い歌詞が一度にやってきた場合でも隠れにくくなります。
2006/03/13 曲の途中で停止してそのままもう一度再生したときに曲のタイトルが消えてしまう、
という現象が起こらないようにしました。
2006/03/05 コードボタンと画面上のキーボードとの間に、最後に出したコードネームが表示されている場合、
その表示をクリックすることで再度音を鳴らせるようにしました。なお、コードダイアグラムのほうに
表示されているコードネームは、クリックしても音は出ません(カポありのときの場合分けが
面倒になるので実装していません)。
2006/02/17 Yahoo!ブログがあまりにも重くなってきて更新するのが面倒になってきたので、
開始1年弱でブログ廃止
2006/02/07 以下の2点を修正しました:
- 歌詞が小刻みにやって来た場合に、前回来た歌詞を残してスクロールするようにしました。
- ルート音と減5度が鳴った場合(トライトーン=3全音)、短3度が鳴っていなくても
マイナーコードボタンに○をつけるようにしました。こうすることで、7th の5度が省略された場合でも○が現れ、
通常の 7th のときの形状にぐっと近づきます。
2006/02/05 MIDIファイルに入っているタイトルと歌詞を表示する機能を追加しました。
これは、「シーケンス名/トラック名」「マーカー」「歌詞」などのテキスト系メタイベントを拾って、
文字コード変換(昨日の修正と同様の方法)行うことで実現しています。
先頭(0ティック目)の最も早い時刻にやってきたものを「曲のタイトル」とみなして
タイトル欄に1度だけ出力し、先頭を過ぎてからやってきたものを「歌詞」とみなしてリアルタイムに表示します。
2006/02/04 日本語版 Windows の場合に、MIDI OUT 欄の初期選択値として表示される
「Microsoft MIDI マッパー」のカタカナの部分が文字化けしないようにしました。
(Shift-JIS を unicode に変換して日本語表示すれば文字化けしなくなります)
2006/01/29 モジュレーションデプスを受信したときに、
ピアノキーボード上の●マークが上下に伸びるようにしました。
2006/01/28 MIDIチャンネル選択部分に VO. の部分を追加し、縦軸にボリューム、
横軸にパンポット(ステレオ定位)を視覚的に表示するようにしました。
2006/01/22 ピッチベンドセンシティビティ(コントロールチェンジの RPN の一つ)を認識するようにしました。
これにより、ピアノキーボード画面の●マークの伸縮量が、センシティビティ(=感度)の設定値に合わせて
増減するようになりました。
2006/01/17 自動的に繰り返し演奏ができるよう、リピートボタンを追加しました。
2006/01/15 コードボタンにもドラッグ操作を認識させ、修飾キーを使わずに M7 などが出せるようにしました。
2006/01/11 ピアノキーボードにドラッグ操作を認識させることで、
まるで本物のピアノの鍵盤をなぞったときのように音階が変化するようにしました。
2006/01/09 ピッチベンドチェンジ(= 音程の連続的な変更)を受信したときに、
ピアノキーボード上の●マークが左右に「びよ〜ん」と伸びるようにしました。
2006/01/04 ピアノキーボード画面を中心に、動作と見栄えを修正しました。
- 各 MIDI チャンネルの Note on/off の状態を記憶することにより、オクターブ変更や MIDI チャンネル変更によって
●の状態が消去されることがなくなりました。
- 自動演奏中に各 MIDI チャンネルの演奏状況を素早くキャッチできるよう、
オクターブを自動スクロールするようにしました。
- Graphics2D.fill3DRect() を使った描画によって立体化しました。
- 最大 MIDI ノート番号 = 127 を超える部分を表示しないようにしました。
- ピアノキーボード画面も Dark モードに対応しました。
2005年
2005/12/31 候補となるフレットポジションを全部表示させ、そのポジションをクリックすることで
押さえ方を選べるようにする機能を追加しました。
2005/12/30 コードダイアグラムを非表示にするためのボタンを追加しました。
2005/12/29 コードダイアグラムを一新しました。
- 押さえない領域を表示しないようにすることで、コードダイアグラムの横幅を縮小させました。
これによりアプレットの横幅を少し縮めることができました。
- 最大12フレットまでだったため、10〜13フレットを使うパターンなどが表示できませんでした。
そこで、最大16フレットまでに拡張しました。これにより、1オクターブ分=12種類のフレット範囲が
すべてカバーできたことになります。
- コードダイアグラム上のチューニング設定を変更できるようにしました。
2005/12/06 コードボタンの明暗を逆にする機能(ダークモード)を追加しました。
ダークモードにすると、MIDI再生中にコードボタンがイルミネーションのように光ってきれいです
(これでクリスマスをより楽しめることでしょう)。
2005/12/05 コードボタン上のマーク表示を改良し、コードのルート音だけがなっている場合でも
マークの一部分を表示するようにしました。これにより、ピアノやギターなどのアルペジオ演奏時や、
ベースのソロ演奏時でも、音の「残像効果」が点滅にも現れるようになりました。
また、スケールの外れた音の色を変えることで、キーが適切に設定されているかどうかが一目でわかるようにしました。
2005/11/23 MIDI イベントの受信時、頻繁に受信する MIDI イベントについては
画面描画などの処理をすぐに行わずに一旦キューイングして、タイマーを使って
何ミリ秒か経過したあとでまとめて実行させるようにしました。
これにより、MIDIファイルの再生時に(特に PROGRAM CHANGE が来た場合など)、
発音の開始が遅れてしまう現象が起こらなくなりました。
2005/11/20 今鳴っている和音をコードボタン上に □ ○ + で表示する機能を追加しました。
これにより、MIDIファイル再生時にコード進行の動きが見えるようになりました。
ただし、分散和音(アルペジオ)には対応していません。
その瞬間で同時に鳴っている音階だけから判断して表示しています。
2005/11/10 MIDIチャンネル選択機能を拡張しました。これにより、すべてのチャンネルの
現在の音色番号、音が出ているチャンネル、録音済みトラック、などをリアルタイムに
把握できるようになりました。
2005/10/29 MIDI録音時の拍子・テンポ指定機能、メトロノーム機能を追加しました。
今までは、拍子やテンポを示すメタイベントが MIDI ファイルに出力されていなかったため、
他のシーケンサーソフトで読み込んだときに常に 4/4 拍子、テンポ 120 [BPM]、とみなされてしまい、
小節の区切りにうまく収まらなくなっていました。
また、コード演奏の音消し時に All Notes Off イベントに頼らず、Note Off イベントで1音ずつ消すようにしました。
2005/09/04 コードボタンを使った演奏を、マウスだけでなくPCキーボードでできるようにしました。
2005/05/29 MIDIチャンネル指定機能、MIDI録音・再生機能、Base64 エンコード機能を追加しました。
Base64 でテキスト化した MIDI データを「メール」としてコピーすることで Base64 形式のデータが復号化され、
そのままMIDIファイルとして保存できます。
なお、Base64形式へ変換するクラスライブラリとして、The Apache Software Foundation の Jakarta Project による Commons Codec を使用しています。
2005/03/01 ブログ「楽器アプレット日記 ♪ わおんであそぼ」オープン
2004年
2004/12/19 五度圏コード表つきJavaピアノから Chord Helper に名称変更(関連記事:2005/02/23 - ペンタトニックの筒の徒然)
2004/10〜11月頃 カポ機能を追加しました。
j-total music などを見ると、
ときどき Capo: とか書いてあるものがあって、楽器アプレットで弾こうとするときに、
頭の中でいちいち変換しないとオリジナルキーで弾けないという問題がありました。
そこで、移調もプログラムでやらせようと思い立ち、カポ機能を追加。すでに、コード表、
ピアノキーボード、コードダイアグラムの3つに分かれていたので、ピアノキーボードを
オリジナルキーにして、残りの2つに Capo のチェックボックスをつけました。
2004/10〜11月頃 Note On/Off の区別を、●の色ではなく●の大きさで表すようにしました。
色は構成音の順番を表すように変更しました。
2004/08〜09月頃 ウクレレだけでなく、ギターのコードダイアグラムも表示できるようにしました。
弦を4本から6本に増やせるようにしたり、×(弾かない弦)や○(開放弦で弾く)の表示に対応する
ことによってギターにも対応できるようになりました。
(関連記事:2004/09/28 Guitar Chord Tools 掲示板 - 弾き語って御免)
2004/08/27 サウンドQA掲示板 - 千と千尋の神隠し 珊瑚のフォーラム で紹介される
2004/07/31 ブログ(inside out、ペンタトニックの筒の徒然)で紹介され、
「すごい!」という反響が...。
2004/06〜07月頃 コードダイアグラムを自動探索する機能を追加しました。
ウクレレのコード表をいちいち見るのが面倒になったのと、五度圏順にしないと使いにくい
(余分なコードが目に入ってしまう)と思ったためです。
たくさんあるコードダイアグラムの画像ファイルを1個1個作っていると間違いが起こりやすいため、
プログラム内で検索する形にしました。
2004/05 初期版公開(旧ページ:五度圏コード表つき Java ピアノ)
五度圏配列のコード表で、実際にコードの音を聴けて、
ピアノキーボード上に構成音を表示できるアプレットができました。
修飾キーとクリックをフル活用し、多種類のコードが出せるようになりました。
2004/04 アプレットの開発を開始
JavaScript以外での実現方法を検討。候補は Flash か Java で、と思ったのですが、
下記の理由で Java を選びました。
- コンパイラが無料で入手できる
- MIDI インターフェースを持っている(javax.sound.midi パッケージ)
- 職業柄 C 言語っぽい文法に慣れている(一応 VB 系もわかりますが...)
さっそく、Java で MIDI 音源を鳴らすプログラムを作成。
とりあえず、コード C F G G7 C を順番に鳴らすだけの簡単なプログラムを作成したところ
うまくいったので、AWT & Swing GUI との結合へ。
2004/03月以前 - 最初のきっかけ
以前から、キーとコードとの間に法則性があることを知っていたので、これを作曲ツールに
応用できないかと思い、調性の#や♭の順序を表した丸い図を Excel で作ってみたのが始まりでした。
その頃は「五度圏」という名前があることを知りませんでしたが、音楽理論関係のページを
Web 検索しているうちにCircle of Fifths
という言葉を発見。あっ!これ、無意識のうちに自分が書いてみた図と同じ!
あとで日本語のページも調べていくうち、日本語ではこの図を「五度圏」と呼ぶことがわかりました。
#系と♭系でコードの雰囲気が違うなどの法則性も感じていました。最初はこれを文章に
して説明しようとしたのですが、もっと分かりやすい図にできたらと思い、
キーを選ぶとコードの役割で色が変わるプログラムを JavaScript で書いていました。
そのうち、キーボード上で構成音を示すにまで至ったのですが、
「音も出してみたい」と考えたとたん、大きな壁が...。
JavaScript や HTML だけで音を出すには、それ用のファイル(MIDI ファイルや、wav などのオーディオファイル)を
いくつも作って enbed タグを使って出すなどの方法がよく使われているようです。
でも、こんなの面倒だし、レスポンスも遅くて、とても「演奏する」というレベルのものは作れません。
どうしよう...そう思ったことが、アプレット開発のきっかけでした。
[戻る]