2010年05月17日

ロギング実装

起動ログやら実行ログを出力するようにしましたー。
これで、バグの特定がしやすくなりました。

スタックトレース使えばいいじゃんって言われそうですけど、オプティマイザを使って少しでも配布サイズを切り詰めたいのでライン情報もメソッド名もクラス名も変わっちゃうんです。
そんなわけで、ログの出力は必須なわけですね。

あとは7z形式で圧縮すれば配布サイズの縮小化は限界かな?

ところで、最近、メモリの使用量が気になります。
Javaアプリってのは基本的にメモリとCPUパワーを最大限に使って動作するように作られることが多いみたいです。
だって、ガベージコレクションがあるわけですから、自分でメモリ管理ができないんですよね・・
だから、結句、メモリ食いまくりになるみたいです。

でもでもー!!ソフトを使ってて、スワップしまくりってのは気分悪いと思います!!
絶対。
Eclipseが実際そうですしー(´・ω・`)

だからこそ気になります(笑)
そんなんで、プリプロセッサを導入しようか迷ってます。
メンバ定数なんかは#defineマクロで定義しちゃえば変数を使わない→メモリ節約!!ってことに・・!
古くから使われてて実績があるのはpppかなって思います。
でも、ちょっと見た感じではククリップってのも良さげ。

ただ、それぞれ「指定したディレクトリ」か「単ファイル」だけしかプリプロセスしてくれないんですよー。
ファイルもフォルダもたくさんあるのに・・・ラップしようか悩むぅん。
ちなみに言っておきますけど、ファイルもフォルダも1つにはまとめられません

そんなことやってないで、さっさとノートの配置をできるようにしろって聞こえてきそう・・

2010年05月07日

修正完了

ソースレベルを1.4.xから1.6.xに修正しましたー。
ジェネリックスを使ったり拡張for文を使ったりはもちろん。
1.4.xでは実装が面倒だったものも1.6.xでAPIが充実したりしてての変更だったり。

とりゃえーず!!
ピアノロールをどうにかします。

そんなことより!!
アイコン!!

たぼに作ってとお願いしたら「ワタシ エ ニガテ デス」って逃げられました(´・ω・`)
そこはさぁ、「ようがす、あたしが作ってござんしょう!」ってイケメンな返事を期待してたんですけどね(笑)

いいですよー。自分で作りますよー(´・ω・`)

2010年05月02日

スクロール完全版

キー入力によるスクロールも完全に対応しました!!
どうしてキー操作だとスクロールがずれるんだろう・・・って思ってまたsrc.zipをあさりました(笑)
やっぱりjavax.swing.plaf.basic.BasicScrollPaneUIにヒントがありました。
どうやらjavax.swing.JScrollPaneに追加するコンポーネントはjavax.swing.Scrollableを実装してやればいいみたいです。
その中でも
public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction)
public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction)
こいつらを使ってスクロールの増分値を返せばいいみたいです。
戻り値にマイナスは付けないでいいみたいです。
3つ目の引数はなんのために使うんだろう・・

これに合わせてjavax.swing.JScrollPaneから取得できるスクロールバーの増分値の設定を変えました。
ま、上記のメソッドを使って取得するようにしただけですけどね。
その方が一箇所変えるだけで済むので便利ですしー。
こんなん。
scrollpane.getVerticalScrollBar().setUnitIncrement(canvas.getScrollableUnitIncrement(new Rectangle(), SwingConstants.VERTICAL, 1));
scrollpane.getVerticalScrollBar().setBlockIncrement(canvas.getScrollableBlockIncrement(new Rectangle(), SwingConstants.VERTICAL, 1));

こんどこそ、可変に挑戦しまッス!!

------------------------------------------------------

追記:

うぬーん・・
javax.swing.Scrollableを実装したらマウスホイールでのスクロールも挙動が変わりました。
よくわかんないんですけど、リスナーを削除しても3ステップ分スクロールします(笑)
なんなんだろ・・
もちろん、そんなコード書いてませんよ?

マウスホイールリスナーの上書きは消しちゃってもいいのかな?
そのうち、たぁぼうにも確認してもらおうと思いますー。

2010年04月25日

ホイイィィィィイル!!!

マウスホイールによるピアノロールのスクロールをほぼ完璧に実装しました!!
当初の予定通りjavax.swing.JScrollPaneを使って実装しました。
Swingらしい実装になって一安心です(笑)

マウスホイールの実装をどうやって回避したのかと言うと――

まず、ホイールリスナー
class MouseWheelHandler implements MouseWheelListener
{
    public void mouseWheelMoved(MouseWheelEvent e)
    {
        if(scrlPane.isWheelScrollingEnabled())
        {
            if(scrlPane.getVerticalScrollBar().isVisible())
            {
                scroll(scrlPane.getVerticalScrollBar(), e);
            }
            else if(scrlPane.getHorizontalScrollBar().isVisible())
            {
                scroll(scrlPane.getHorizontalScrollBar(), e);
            }
        }
    }

    private void scroll(final JScrollBar sb, final MouseWheelEvent e)
    {
        int totalAmount = 0;
        if(e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL)
        {
            totalAmount = (int)(12 * zoomHeight * 3) * e.getWheelRotation();
        }
        else if(e.getScrollType() == MouseWheelEvent.WHEEL_BLOCK_SCROLL)
        {
            // マウスホイールによるブロックスクロールは未確認
            totalAmount = e.getWheelRotation() * sb.getBlockIncrement(e.getWheelRotation());
        }
        sb.setValue(sb.getValue() + totalAmount);
    }
}
次にリスナーの登録
MouseWheelListener[] mouseWheelListeners = scrlPane.getMouseWheelListeners();
for(int i = 0; i < mouseWheelListeners.length; ++i)
{
    scrlPane.removeMouseWheelListener(mouseWheelListeners[i]);
}
scrlPane.addMouseWheelListener(new MouseWheelHandler());
これだけです。
マウスイベントってコンポーネントを突き抜けてコンテナまで届くんですね。
ちょっちびびりました。
このコードを書くためにsrc.zipを探りまくった(笑)
最終的にホイールリスナーを登録してるのはjavax.swing.plaf.basic.BasicScrollPaneUIでした。
メソッドはpublic void installUI(JComponent x)経由でprotected void installListeners(JScrollPane c)が呼び出され、そこで入れ子クラスのprotected class BasicScrollPaneUI.MouseWheelHandlerをリスナーとして登録してました。
javax.swing.JScrollPaneで迷ってる人は要確認ですヨ!!

ただし、キー入力によるスクロールはまた別の話ですので、要研究です。
キー入力によるスクロールに問題があるんだけどなぁ・・
ナンデモナーイ!!キニシナーイ!!微々たることだからもういいのー!!

お次はピアノロールを可変にしないとですねー。

2009年08月13日

どうにか?

ひとまずピアノロールのスクロールを実装しました。
実装してから気づいたんですけど、拡張音源を使った場合はオクターブが増えるんですよー。
そうなった場合を想定して作ってませんでした・・

1〜7オクターブまでに入ってくれるように作っちゃいました。
しかも小節数を表示するスペースをとっておくの忘れてるし・・
完全に失態です(´・ω・`)

-------------------------------------------
ちょっとメモ
(時空を越えて書き換えるかも)

矩形波(AB) = 2〜7
三角波(C) = 2〜7
ノイズ(D) = 0
ΔPCM(E) = 0〜3
FDS(F) = 0〜6
n106(PQRSTUVW) = 0〜8
VRC7(GHIJKL) = 不明→要調査
VRC6(MNO) = 不明→要調査
MMC5(ab) = 不明→要調査(2〜7?)
Sunsoft 5B(XYZ) = 不明→要調査

pmck/pmckc以降の拡張音源はオクターブが不明。
誰かおせーて(笑)
-------------------------------------------


とりあえず0〜8オクターブの間で可変にすれば対応できるっぽい?
上限、下限ともに可変にして最上部に小節の表示区域を確保してって・・
できるかな?

まだ拡張音源に対応するかわかんないですが、ノイズとΔPCMに対応するにも可変は必須とφ(..)

とりあえず、オクターブが可変になるってことはデータの持ち方も変わってくるしどうするか・・

そうそう、実は縦方向の拡縮も内部的に実装されてます。
まだ外部から操作する方法がないので固定になってますけどね。
ただ、小数点による拡大率指定なので計算でズレるかも?!
暫定的な実装なので、その内、拡大率を定数化しようと思います。

ピアノロールには問題がいっぱいですね・・
ピアノロールが完成しないと音符の配置ができなくて、開発も進まない(´・ω・`)
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。