iPhone/iPad用ドット絵エディタ「EDGE touch」

最近のエントリー

ドッターの皆さんはとりあえず↓の動画を見ていただければ、内に秘めた想いが溢れ出すと思います!

第四回の作品を募集中とのことで、詳しい参加規約は公式ブログの方をどうぞ。
http://amaisakura.blog28.fc2.com/blog-entry-30.html

締め切りは2010年7月2日でして、まだまだ時間がありますので、興味のある方は参加されてみてはいかがでしょうか??

Edge1

↑右がリソースエディタで貼ったツリーコントロールで、
左が↓のコードで貼ったツリーコントロール。

// m_TreeはCTreeCtrl型
m_Tree.CreateEx(WS_EX_CLIENTEDGE, WS_CHILD | WS_VISIBLE | TVS_SHOWSELALWAYS, CRect(10, 10, 200, 200), 
this, 0);
m_Tree.InsertItem(_T("ああああ"));

見てお判りの通りWS_EX_CLIENTEDGEが付きません。
CTreeCtrl::CreateExのソースを見てみると、変なことやってますので、そりゃ付かないですね。

BOOL CTreeCtrl::CreateEx(DWORD dwExStyle, DWORD dwStyle, const RECT& rect,
	CWnd* pParentWnd, UINT nID)
{
	BOOL bRet = Create(dwStyle, rect, pParentWnd, nID);
	if (bRet && dwExStyle != 0)
	{
		bRet = ModifyStyleEx(0, dwExStyle);
	}
	return bRet;
}

かと言って

m_Tree.CreateEx(0, WS_CHILD | WS_VISIBLE | TVS_SHOWSELALWAYS, CRect(10, 10, 200, 200), this, 0);
m_Tree.ModifyStyleEx(0, WS_EX_CLIENTEDGE, SWP_FRAMECHANGED);
m_Tree.InsertItem(_T("ああああ"));

こんなコードにしても、↓のようにビジュアルテーマ(?)が適用されません。
Edge5
(WS_BORDERだとちょっと濃い枠が付くため、これもちょっと違います。)

回避方法としては、

m_Tree.CWnd::CreateEx(WS_EX_CLIENTEDGE, WC_TREEVIEW, _T(""), WS_CHILD | WS_VISIBLE | TVS_SHOWSELALWAYS, CRect(10, 10, 200, 200), this, 0);
m_Tree.InsertItem(_T("ああああ"));

というように、CWnd::CreateExを直接呼び出してしまう事ぐらいでしょうか。

これで一応リソースエディタで貼った物と同じ枠が付きます。
Edge6

MFCのバグ一覧とかどっかにまとまってたりしないのかな・・・。

Domino久々に更新しました~。
結構大幅に手を入れましたので、不具合等見つけられましたらお手数ですがwikiまでご報告をお願いいたします。

ダウンロードはこちらからどうぞ↓
https://takabosoft.com/domino

いくつかの機能をピックアップしてご紹介したいと思います。

範囲の追加選択

範囲の追加選択が出来るようになりました。
(同じ種類に限ります。)

これにより、離れたノートを選択することが出来るようになります。
Edge8

ドラムパートの場合は、楽器毎(音階毎)に細かく選択/非選択を行うことができるようになりました。
Edge9

上部ヘッダーやトラックリストでも同様に追加選択が可能です。

範囲の追加選択は、選択ツールにて「Ctrl+左ドラッグ」操作で行います。
ただし、すでにマウス操作のカスタマイズを行っている場合は、各Ctrl+操作に「選択(追加)」を割り当てる必要があります。
Edge10

  • ピアノロール-選択ツール-左クリック+Ctrl
  • ピアノロール-ヘッダー-左クリック+Ctrl
  • ピアノロール-鍵盤-左クリック+Ctrl
  • ピアノロール-鍵盤-選択範囲上で左クリック+Ctrl
  • トラックリスト-選択ツール-左クリック+Ctrl

イベントグラフの矩形選択に対応

イベントグラフでの選択は時間範囲で指定するだけで、値による範囲は指定出来ませんでしたが、ツールのモードを切り替えることで、矩形選択が可能になります。

Edge12
(よく切り替える場合はツールバーのカスタマイズ機能でどこかに配置してください。)

こちらも追加選択が可能です。
Edge14

範囲はShift+左ドラッグで垂直移動、Alt+左ドラッグで水平移動ができます。

選択枠とノートの当たり判定方法を設定可能に

今までは例えばノートのおしり部分を選択枠で囲っても、選択状態にはなりませんでした。
Edge15

環境設定で当たり判定の項目を「ノート全体」に設定することで、選択されるようになります。
Edge16

こちらの設定を使うと、長いノートの先頭部分までわざわざスクロールせずともノートを選択できたり、ノートが多数有る中で希望のノートだけを選択しやすくなると言ったメリットがあります。

Edge19

「選択範囲の絞り込み」画面でTickの種類が選択可能に

環境設定の「時間の表し方」が「Measure : Tick」設定のままでも、「Measure : Beat : Tick」の時のTickの値を使って絞り込むことが出来るようになりました(ややこしい)。

「Measure : Tick」設定の人でも裏泊だけ選択することが出来るようになった、と言った方が判りやすいでしょうかね。
Edge20

ノートの結合

選択したノートを結合する機能を付けてみました。
Edge21

イベントメニューから実行できます。

更新内容

  • 範囲を追加選択できるようにしました。
    ピアノロールの編集エリア・上部ヘッダー・鍵盤部分、イベントグラフの編集エリア、トラックリストの編集エリア・上部ヘッダーで対応しています。
    [環境設定]画面の[マウス操作]で、+Ctrlキーに対して「選択(追加)」を割り当てる必要があります。
  • イベントグラフの選択時に、矩形で選択出来るようにしました。
    [ツール]メニューの[イベントグラフ1]→[矩形選択]をオンにしてお使い下さい。
    よく切り替える方はツールバーに配置しておくと良いかと思います。
    範囲の移動は、+Altで水平移動、+Shiftで垂直移動固定になります。
  • イベントグラフの範囲ドラッグ時にアンカーが付いてくるようにしました。
    移動後の位置がより判りやすくなると思います。
  • 選択枠とノートとの当たり判定方法を「ノートオン位置(今までの物)」と、「ノート全体」と選べるようにしました。
    ノート全体にしておくと、例えばノートのお尻だけを選択枠で囲う事で選択できるようになります。
    [環境設定]画面の[全般 (3)]から設定できます。
    ピアノロール部分の選択、ピアノロール上部ヘッダーの選択、トラックリストの選択、トラックリストの上部ヘッダーの選択において、当たり判定設定が反映されます。
  • 起動時に、前回使っていたdmsファイルを自動で開くオプションを追加しました。
    [環境設定]画面の[全般 (3)]から設定できます。
  • イベントグラフで曲線などを描画する際、右から左へドラッグした時には、左から右へドラッグした時のグラフが左右反転した形になるようにしました。
    もし今までのままを希望される方がいらっしゃいましたらご連絡ください(設定で切り替えられるようにします)。
  • パニックコマンドを追加しました。
    [演奏]メニューの[パニック]から実行できます。
    MIDIキーボードなどの接触不良などで音が鳴りっぱなしになってしまった時などに実行すれば音が止まります。
  • ノートの結合機能を実装しました。
    範囲選択後、[イベント]メニューの[結合]から実行できます。
  • エクスクルーシブ受信バッファ数・サイズを設定で変えられるようにしました。
    [環境設定]画面の[MIDI-IN]から設定できます。
    もし機器から大量のダンプを受信しようとして、受信しきれないような事態になりましたら、バッファ数やサイズを増やしてみてください。
  • F7で終わっていないエクスクルーシブデータを許容するオプションを追加しました。
    [環境設定]画面の[全般 (2)]から設定できます。
  • 音源定義ファイルの可変値に#VPGLと#VPGHを追加しました。
    #VPGLは(Value + Gate)の下位7bit値です。
    #VPGHは(Value + Gate)の上位7bit値です。
  • SMFを読み込んだ場合は、そのパスを書き出し先パスとして覚えておくようにしました。
  • Ctrl+左ドラッグで範囲の複製を移動したりするときに、もう一度Ctrlキーを押すまではTickクォンタイズ切り替え機能が発動しないようにしました。
  • データに変更があったときのみバックアップを行うオプションを追加しました。
  • 演奏中にピアノロールの自動改ページ切り替えを行うかどうかを切り替えられるようにしました。
    [表示]メニューの[ピアノロールペイン]内から切り替えられます。
  • [選択範囲の絞り込み]画面にて、Tickの絞り込みが出来ますが、元となるTickの値をどのように生成するかを以下の3つから選べるようにしました。
    • デフォルト(環境設定の「時間の表し方」で設定されている方)
    • M : T(Meas : Tick)
    • M : B : T(Meas : Beat : Tick)
  • MSGS音量調節機能を実装しました。
    デフォルトではMSGSの音量が小さかったりミュートになっていたりすると警告が出るようになっています。
    [環境設定]画面の[全般 (3)]から設定できます。
  • アウトプットペインの右クリックメニューに「クリア」を追加しました。
  • イベントグラフの高さが小さくなっている時などに、直線・曲線ツールで線などを描画すると、終了する値がステータスバーに表示された値と1ずれる事がある不具合を修正しました。
  • [リアルタイム録音]画面で停止した後で、キーボードのESCキーなどが効かない不具合を修正しました。
  • トラックリストのトラック名部分でアンダースコアが表示されない不具合を修正しました。
  • 演奏モニターで横スクロールを行うと、VOL値などをクリックした時に、クリックした場所とは違う値が反応してしまう不具合を修正しました。
  • トラックリストでALT+ドラッグでSMFをエクスポートしたときに、Bポート以降のトラックがAポートの音源定義ファイルを使って書き出されていた不具合を修正しました。
  • トラックセレクトペインの幅が狭い時は、ポート&チャンネルの表記を短くするようにしました。
  • [範囲の選択]画面でコンダクタートラックのイベントグラフを選択できない不具合を修正しました。
  • 低負荷演奏中にはバックアップ処理が走らないように修正しました。
  • 一括変更時の値の上下限値を常にカレントトラックの音源定義ファイルを使用していた不具合を修正しました。
  • [選択範囲の絞込み]画面を開いたときに、「範囲外」チェックがオンなのにスライダー部分が範囲外になっていない事がある不具合を修正しました。
  • 「カーソル位置のイベントをピアノロール側で判別できるようにする」がオンになった状態で、イベントを全て消すと落ちる事がある不具合を修正しました。

Dominoユーザーさんからメールを頂きましたので、ご紹介させていただきます。

(コメント抜粋)

 長年Dominoを愛用していたのですが、つい先日ショートカットキーの設定が出来ることに気がつきました。(気づくのが遅かったです。)操作性が向上し、テンションが上がったので一曲耳コピしました。
 使用音源は、Microsoft GS Wavetable SW Synth です。評判が良くない音源ですが、シンプルで多彩な音色とコントロールチェンジの反応の速さが優秀なので音作りが好きな人には最高の音源だと思ってます。
 相当気合を入れて作ったので、Microsoft GS Wavetable SW Synth の可能性を皆に伝えることができたら幸いです。

またもしこの場で宣伝したい方がいらっしゃいましたら、メール等でご連絡ください。

音量(パンポット)はmidiOutSetVolumeを使えばあっという間に設定できるのですが、
これだとミュートチェックは外してくれません。

というわけでこちら(http://www.terra.dti.ne.jp/~vivas/delphi/mixerapi.html)のサイト様の説明を参考にさせて頂きながらミキサーAPIを使ってミュートを解除するコードを書いてみました。

MIXERLINE MixerLine = {sizeof(MIXERLINE)};
MixerLine.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
if (mixerGetLineInfo((HMIXEROBJ)nDevID, &MixerLine, MIXER_GETLINEINFOF_COMPONENTTYPE | MIXER_OBJECTF_MIDIOUT) == MMSYSERR_NOERROR) {
	MIXERCONTROL Ctrl;
	MIXERLINECONTROLS Ctrls = {sizeof(MIXERLINECONTROLS), MixerLine.dwLineID};
	Ctrls.cControls = 1;
	Ctrls.dwControlType = MIXERCONTROL_CONTROLTYPE_MUTE; 
	Ctrls.cbmxctrl = sizeof(MIXERCONTROL);
	Ctrls.pamxctrl = &Ctrl;
	if (mixerGetLineControls((HMIXEROBJ)nDevID, &Ctrls, MIXER_GETLINECONTROLSF_ONEBYTYPE | MIXER_OBJECTF_MIDIOUT) == MMSYSERR_NOERROR) {
		MIXERCONTROLDETAILS Details = {sizeof(MIXERCONTROLDETAILS)};
		Details.dwControlID = Ctrl.dwControlID;
		Details.cChannels = 1;	// 決めうちで良いらしい
		MIXERCONTROLDETAILS_BOOLEAN Boolean = {0};
		Details.paDetails = &Boolean;
		Details.cbDetails = sizeof(MIXERCONTROLDETAILS_BOOLEAN);
		if (mixerSetControlDetails((HMIXEROBJ)nDevID, &Details, MIXER_SETCONTROLDETAILSF_VALUE | MIXER_OBJECTF_MIDIOUT) == MMSYSERR_NOERROR) {
			// 成功
		}
	}
}

この制御をDominoに組み込めば「音が鳴らない!」と助けを求める方が激減する予感。

記事検索

コミュニティ

Banner designed by 真帆様
ドット絵掲示板
ドット絵掲示板
自作の「ドット絵」を投稿することができます。ドッターさん同士の交流の場としてご利用ください。
TakaboSoft Wiki
TakaboSoft Wiki
ソフトウェアに関する質問・不具合報告・要望などを書き込むことができます。