今回は、現在再生中のSMFが、何分の何拍子のときに、何泊目を演奏しているか。
そういう情報を表示させる時の計算方法のメモです。

これらを計算するためには次のような情報を知る必要があります。
d 分の n 拍子の1拍は、デルタタイムでいうといくつになるか。
d 分の n 拍子の1小節は、デルタタイムでいうといくつになるか。

基礎知識として、
7/4(4分の7拍子)の場合は、1小節に分子の7拍もつということです。
また、1拍は、分母の4分音符が基本になっています。(分母は必ず2のn乗(0≦n)となる)
つまり、1小節は、4分音符が7つ分の長さあるということです。

タイムベースは、以前のメモより、4分音符の長さが基本となっています。
よって、タイムベースを x とおくと。
2分音符の長さは 2x
4分音符の長さは x
8分音符の長さは x/2
のようになっていくわけです。

というわけで、拍子の分母で、一番時間が長い2分音符の長さを y = 2x とおけば。
2分音符の長さは y/1
4分音符の長さは y/2
8分音符の長さは y/4

これらより、
d 分音符の長さは y /(d /2)=2y /d =4x /d なので、
d 分の n 拍子の1拍は、デルタタイムでいうと     4*timebase /d
d 分の n 拍子の1小節は、デルタタイムでいうと  4*timebase*n /d

あとは、1デルタタイムごとに、これらをふまえて計算していけば、
1小節の何拍目を演奏しているか分かります。

以前のブログへ SMFプレイヤーをつくろう!リベンジ「セットテンポと分解能」
続く… SMFプレイヤーをつくろう!リベンジ「完成した」

完成したJava製のSMFプレイヤーのダウンロード

関連記事

  • SMFプレイヤーをつくろう!リベンジ「出力ポート、MIDIと周波数の関係」SMFプレイヤーをつくろう!リベンジ「出力ポート、MIDIと周波数の関係」 追加した機能 ・Sequencerのインターフェースにメソッド名を似させる。 入れ替えとか、いつかクラスを公開時に役立ちそう。 ・Sequencerにあった、ティック単位の位置調節の追加 内部では、ms単位で処理しているので、ティックから時間に変更するようなメソッドを追加で。 ・メイタベント0x59の調情報取得 この調の情報。最初はノートオン時に反映させると思ってた […] Posted in ツール制作
  • SMFプレイヤーをつくろう!リベンジ「セットテンポと分解能」SMFプレイヤーをつくろう!リベンジ「セットテンポと分解能」 以前(2007/4/30)、HSPでMCI(Media Control Interface)を利用せずに SMF(スタンダードMIDIファイル .mid)を再生するためのモジュールを作ってSMFプレーヤーを作りました。(ここ) しかし実はこれには色々と問題が山積みになっていたりする。 1. なんかメタイベント,SysExイベントが正常に送れていないっぽい? 2. […] Posted in ツール制作
  • 音の高さの表示ソフトdrawwaveの開発 part1音の高さの表示ソフトdrawwaveの開発 part1 音の高さを調べるソフトといえば、「おんかいくん」などが上げられますが、 今日はJavaで製作された「drawwave」というソフトを紹介します。(*^U^*) 何をするソフトかというと、リアルタイム(実時間)で音声を目で見るソフトです。 音声の波形を描く ということで draw wave […] Posted in ツール制作
  • ビューア開発 – 減色とか追加してみました。ビューア開発 – 減色とか追加してみました。 昨日、メディアンカット実装がんばりました! そして、やっぱりipmpackのほうメディアンカットが微妙にバグ持ちでした。 作り直した結果しっかり1色~256色とかどんな色までにも減色できるようになりました。 というか今までRGBを555の15bitsで計算してたけど、 別に16bits内におさめるとかそういう話じゃないから普通に増やしても問題なかった。 […] Posted in ツール制作
  • ビューア開発 – バイラテラルフィルタ追加しましたビューア開発 – バイラテラルフィルタ追加しました 前々から追加追加しようと思って、初めて作ってみた。 日本語の資料がtpotさんのバイラテラルフィルタしかなくて、勉強するのが大変でした。 海外のサイトはもっとよくわかんない謎の式だらけ。 要約すると、バイラテラルフィルタってのは、注目画素の輝度と、フィルタ処理する時の近傍画素の輝度の差(距離)を マイナスの係数をかけて、指数関数の中れたもの を A […] Posted in ツール制作
  • ビューア開発 – トリミングとリサイズ追加ビューア開発 – トリミングとリサイズ追加 よくトリミングできるソフトで、縦幅・横幅を手入力ってのがあるけど、自分的には使いづらかった。 やっぱスライダー+スピンボタンが最強だと思う。 うん。でもAWTにはどちらもないんですよね^^(ってSwingにもないじゃん) しょうがないから、スクロールバーで代用してみた。 やっぱり、こういう目で見えると直感的に操作できるからうれしいと思う。 それと、リサイズにはア […] Posted in ツール制作