2002年に初期バージョンを作り、2008年にバージョンアップしたメトロノームソフト。その後ずっと手を付けていなかったのですが、どうも最近のパソコンでは動きがギクシャクするのが気になっていました。
そこで、新しい開発環境を手に入れたのを機会に、見なおしてみました。
「アウフタクト3」としてとりあえず公開します。
ここでは、今回の開発にまつわることをメモ的に書いておきます。
まず、ユーザ側からの変更点。
以前、とあるユーザ(パリ在住の日本人)から、MM=300~400のテンポを指示できないか、という話を頂きました。その速さで指標を動かしても、動きが不連続に見えてしまい実用的ではないと思っていました。そこで、動きとしてはゆっくりとした動きで、その中にクリック音を出すことにしました。普通のメトロノームに付いている8部音符や3連符相当の音を出す機能です。「アウフタクト3」では、いわゆる拍点のビート感、テンポ感はそのままで、音だけ自由に入れたり消したりできるようにしました。
これに伴い、前バージョンでつけていた、3連符の場所に水平線を引くオプションは不要となり、削除しました。
分割振りの際のテンポの指定を変更しました。前バージョでは分割振りにしたときに、テンポの指定を倍にするなどの手間が必要でしたが、今回その手間をなくしました。しかし、これにはいろいろな考え方があるかと思います。実際使ってみてご意見をいただければと思います。
分割振りの指定を、チェックボックスに変更しました。拍(BEAT)の指定は数字と空白だけにし、分かりやすさを向上させました。チェックのON/OFFで即座に分割モードに移行させることができます。
その他、ファンクションキーだけで基本的な操作ができるようにし、画面上のコントロールの配置もわかりやすく変更しました。あとは指標を単なるボールから、8分音符にしてみました。これはお遊びです。プログラム上は任意の画像を使えるようにしています。ユーザからの要望が強ければ、自分の作ったキャラクターをドラッグ&ドロップして「放物運動」させるようバージョンアップするかもしれません。
今回の公開バージョンでは、チューニングと設定情報の保存機能はつけていません。(単に、時間的余裕がなかったからです。)
--
次にプログラム開発関連の話題です。
今回から、Visual Studio 2010(VB2010)で開発しました。BASICとという名前が残っているものの、かなり本格的なオブジェクト志向になっているなという印象を持ちました。開発環境もかなり使いやすく感じました。が、プロ仕様ということでもあり、私のようなアマチュアが使うにはもったいないですね。
さて、今回のいちばんの目的は、メトロノームの機能そのものではなく、指標の動きの改善でした。
前バージョンよりも初期バージョンのほうが動きがなめらかだったのです。最新のパソコンで、余計なものをあまり突っ込んでいないマシンでも動きがギクシャクしてしまいます。そこで、新しいVB2010でコンパイルすればさすがにそれは解決するだろうと思っていました。
ところが、それは甘かった。です。
ほとんどのBASICの参考書は、タイマー割り込みについて書いていて、タイマー割り込みの値を1msec単位で指定できる。と書いています。ところがどうもこれは違う。たしかに言語仕様上はそうでも実際には、最短でも15msec程度でしか割込みがかからないのだそうです。CRT時代の垂直同期VSYNC割込みの名残でしょうか。
肝心の画面書き換えの割込み間隔については、結局OS任せにするしかありませんでした。さらに困ったことに、どうやらWindows7あたりから、割込みのタイミングを、OSが勝手に決めてしまうそうなのです。
また、画面の書き換えも、プログラム上の命令が置かれているタイミングではなくて、OSが判断して最適のタイミングで書き換えているようです。javaのpaint()メソッドみたいな…。
ということで、このへんのいわゆるリアルタイムOSではないものを相手に格闘するだけの気力も時間も、もうあまりないので、とりあえず前バージョンよりはずっとなめらかに動くようになったということで公開に踏み切ることにしました。
正直、これ以上は私の力では厳しいな。という感じです。
指標を動かさずに、音だけだったら、こんなに苦労することもなかったでしょう。また、midiデバイスに任せれば、もっと高精度のテンポを提示できたでしょう。
苦肉の策として、4つのタイマーを走らせているのです。そのうちひとつは、指標の動きの「拍点」と、音のタイミングのずれを補正するためのものです。
メトロノームに関する論文を検索してみると、意外に、音楽関連よりもパーキンソンやアルツハイマーのリハビリとか、多動性障害の改善に関するものが多く、今後、「アウフタクト」も、それらの分野をはじめ、いろいろな分野で役に立てればいいなと願っています。
そこで、新しい開発環境を手に入れたのを機会に、見なおしてみました。
「アウフタクト3」としてとりあえず公開します。
ここでは、今回の開発にまつわることをメモ的に書いておきます。
まず、ユーザ側からの変更点。
以前、とあるユーザ(パリ在住の日本人)から、MM=300~400のテンポを指示できないか、という話を頂きました。その速さで指標を動かしても、動きが不連続に見えてしまい実用的ではないと思っていました。そこで、動きとしてはゆっくりとした動きで、その中にクリック音を出すことにしました。普通のメトロノームに付いている8部音符や3連符相当の音を出す機能です。「アウフタクト3」では、いわゆる拍点のビート感、テンポ感はそのままで、音だけ自由に入れたり消したりできるようにしました。
これに伴い、前バージョンでつけていた、3連符の場所に水平線を引くオプションは不要となり、削除しました。
分割振りの際のテンポの指定を変更しました。前バージョでは分割振りにしたときに、テンポの指定を倍にするなどの手間が必要でしたが、今回その手間をなくしました。しかし、これにはいろいろな考え方があるかと思います。実際使ってみてご意見をいただければと思います。
分割振りの指定を、チェックボックスに変更しました。拍(BEAT)の指定は数字と空白だけにし、分かりやすさを向上させました。チェックのON/OFFで即座に分割モードに移行させることができます。
その他、ファンクションキーだけで基本的な操作ができるようにし、画面上のコントロールの配置もわかりやすく変更しました。あとは指標を単なるボールから、8分音符にしてみました。これはお遊びです。プログラム上は任意の画像を使えるようにしています。ユーザからの要望が強ければ、自分の作ったキャラクターをドラッグ&ドロップして「放物運動」させるようバージョンアップするかもしれません。
今回の公開バージョンでは、チューニングと設定情報の保存機能はつけていません。(単に、時間的余裕がなかったからです。)
--
次にプログラム開発関連の話題です。
今回から、Visual Studio 2010(VB2010)で開発しました。BASICとという名前が残っているものの、かなり本格的なオブジェクト志向になっているなという印象を持ちました。開発環境もかなり使いやすく感じました。が、プロ仕様ということでもあり、私のようなアマチュアが使うにはもったいないですね。
さて、今回のいちばんの目的は、メトロノームの機能そのものではなく、指標の動きの改善でした。
前バージョンよりも初期バージョンのほうが動きがなめらかだったのです。最新のパソコンで、余計なものをあまり突っ込んでいないマシンでも動きがギクシャクしてしまいます。そこで、新しいVB2010でコンパイルすればさすがにそれは解決するだろうと思っていました。
ところが、それは甘かった。です。
ほとんどのBASICの参考書は、タイマー割り込みについて書いていて、タイマー割り込みの値を1msec単位で指定できる。と書いています。ところがどうもこれは違う。たしかに言語仕様上はそうでも実際には、最短でも15msec程度でしか割込みがかからないのだそうです。CRT時代の垂直同期VSYNC割込みの名残でしょうか。
肝心の画面書き換えの割込み間隔については、結局OS任せにするしかありませんでした。さらに困ったことに、どうやらWindows7あたりから、割込みのタイミングを、OSが勝手に決めてしまうそうなのです。
また、画面の書き換えも、プログラム上の命令が置かれているタイミングではなくて、OSが判断して最適のタイミングで書き換えているようです。javaのpaint()メソッドみたいな…。
ということで、このへんのいわゆるリアルタイムOSではないものを相手に格闘するだけの気力も時間も、もうあまりないので、とりあえず前バージョンよりはずっとなめらかに動くようになったということで公開に踏み切ることにしました。
正直、これ以上は私の力では厳しいな。という感じです。
指標を動かさずに、音だけだったら、こんなに苦労することもなかったでしょう。また、midiデバイスに任せれば、もっと高精度のテンポを提示できたでしょう。
苦肉の策として、4つのタイマーを走らせているのです。そのうちひとつは、指標の動きの「拍点」と、音のタイミングのずれを補正するためのものです。
メトロノームに関する論文を検索してみると、意外に、音楽関連よりもパーキンソンやアルツハイマーのリハビリとか、多動性障害の改善に関するものが多く、今後、「アウフタクト」も、それらの分野をはじめ、いろいろな分野で役に立てればいいなと願っています。
※コメント投稿者のブログIDはブログ作成者のみに通知されます