読者です 読者をやめる 読者になる 読者になる

S.F. Page

Programming,Music,etc...

STed2

Web Audio APIのモジュラー接続デモを作ってみる(15) - シーケンスエディタ引き続き作成中

カーソルの動き、イベントの追加・削除が動くようになってきた。Undo/Redoも。画面は変わりないように見えるが。さらにメジャーエンドで小節のステップ合計を表示できるようにしてみた。徐々にSTED2のエディタっぽくなってきている。 しかしこのSTED2のエデ…

Web Audio APIのモジュラー接続デモを作ってみる(14) - STED2風のシーケンス・エディタを実装、あとはSTED2のこととか

STED2を実際に動かし、その動きをまねるコードを書いている。非常にゆっくりとしているが。コードを書いている途中得た知見はQiitaにもぼちぼち書いてみている。 私が書いているものは、トラックはモノトラックだし、コマンド列というものを追加しているから…

STED2コードのC++化 - モニター用にSC88Pro購入

STED2からMIDI出力されているか全然わからなかったので、モニタ用に中古SC88Proを購入した。15K円だった。貧乏な私にはちょっと高い買い物だったけれども、故レイ・ハラカミさんの愛機であるし(レイ・ハラカミさんの曲の音色はSC88Proで作られているらしい…

STED2コードのC++化

STED2コードの解析をしてシーケンスソフトの基本を学ぼうとしているのだが、どうせならということで解析と同時にコードをC++化しようとしている。Better C的に書き直して、あとはX68Kのエミュレーションレイヤをなくしてしまい、純粋なWin32アプリにしたいと…

STED2の改造(2)

今コードを一行一行見ながら、文字列のwstring化、ファイル操作のfilesystem化、配列のコンテナ化(array,vector)を進めている。

STED2の改造 - C++の文字列処理

STED2のソースコードを読んでいると、最初のmain関数のところなどはもうファイル読み込み、ファイル名の操作で相当なコード量となっている。これをライブラリに任せれば相当すっきりし、コードの見通しもよくなる気がする。なのでコードを読みながら改造する…

STED2の再コンパイル(4) - ようやく動くようになった。

とりあえずBUGをつぶしたり、自作のウィンドウラッパーを最新のものに差し替えたりしてようやく動くようになった。しかしMIDI INが認識しない。。なんかこれ、前も同じ目にあった気もするんだけど、なんだったっけかな。。 ソースコード

STED2の再コンパイル(3)

コンパイル・リンクがようやく通るようになった。大量のエラーの原因だがヘッダーファイルにあるグローバル変数にexternキーワードを付け忘れていたからだった。いやーもうグローバル変数なんてほとんど使ってないから完全に忘れてしまっていた。「C言語の正…

STED2の再コンパイル (2)

引き続き、再コンパイルの作業を続けている。昨日・今日でとりあえず、.cppにある関数プロトタイプ宣言の修正が終わったのでコンパイルしたところ、リンクで大量にエラーが発生。よく考えるとヘッダーに関数プロトタイプ宣言をまとめないといけなかったのだ…

STED2の再コンパイル

解析を進めるにあたり、やっぱり動きを見ながらのほうがわかりやすいので、Windows 8上でコンパイルして動かしてみることにした。以前Windows 7上で動かしていたものをベースにして、コンパイルだけやり直そうかなと思ったのだが、どうせなのでプロジェクト…

STED2の解析 (2)

今日はDoxygenを思い出しながらとりあえずドキュメント化してみた。ちなみにこのソースコードは以前いじっていたもので、少し私のコードが混じっている。 2年前にかなり内容を理解したつもりだったのだが全然わかっていなかった&忘れていた。しかしSTED2を…

STED2の解析

ちょっとかなり前に放置していたSTED2のウィンドウズ版を再び解析しようかなと思い立った。まあまたすぐ放置しそうだけれども。とりあえずはDoxygenに放り込んで、その後少しずつコメントを入れながら解析を進めるとしようかな。 このソフトはX68Kで開発され…

MIDIメッセージ

昨日もほとんどプログラムを書かずに終わってしまった。 MIDIメッセージをどうC++のクラスで表現するかを考えていて、なかなか答えがでない。 とりあえずはメッセージの種類 = 型と考えて定義はしてみている。 struct ID { enum { ノートオン = 0x90, ノート…

STed2 いじり edit.cを読む。

一番興味のあるところ、エディタおよびトラック部分のソースコードを読んでいる。

データの無駄を省く工夫

STed2のRCPファイル部分のソースコードを電車の中で眺めていて気づいたのは、昔のPCはメモリ容量が少なかったのでデータ節約のための工夫をしているということ。 例えばステップタイム。私だと32ビットで、、、とか考えるけど、RCPでは8ビットしかない。例え…

RCPファイルフォーマット

STed2のソースから、RCPファイルフォーマットを調べてみた。 RCPファイルフォーマット ファイルヘッダ ファイルの位置変数の型説明 0x0000 - 0x001fchar[32]ヘッダ文字列 0x0020 - 0x005fchar[64]タイトル 0x0060 - 0x01bfchar[336]タイトル 0x01c0charタイ…

MIDI再生部分を考える。

MIDI IN/OUTができるようになったところで、次にしようと思っているのはMIDIデータの読み込みと演奏である。 演奏部分はXS-1+サウンドフォントを使って再生できるようにしたいとか考えている。 大まかな仕組み スタンダードMIDI・RCP形式のファイルを読み込…

STed2いじり(25)

今日は電車の中でiPod TouchのFiles Liteというドキュメントビューアを通してソースコードを見ていた。 コードを見ているとイベント・ドリブンなアプリをイベント・ドリブンでないOSで動かすためのイベント・ドリブンなコードが組み込まれている。これはイベ…

STed2いじり(23) Direct2D - 透明色の矩形領域塗りつぶし

Direct2Dは通常描画時に常にアルファ値が考慮される。1.0だと描画され、0.5だと半透明、0.0だと描画されない。これはこれで良いのだが、矩形領域を透明部分も含めて上書きしたいときは一工夫する必要がある。例えば文字の上に文字を上書きしたい時は透明部分…

STed2いじり(22) GDIとDirect2Dの共用

結局BitBltまわりは、GDI関数でやることにして、先に進めることにした。 Direct2Dと共用する方法は、 デバイスコンテキストをDirect2Dのレンダーターゲットにする方法 Direct2Dのレンダーターゲットからデバイスコンテキストを取得してGDI関数を使う方法 の2…

STed2いじり(22) Direct2D化 - みかちゃんフォント

滞り気味。 すこしWindows Core Audioに惹かれているのと、BitBltを使ったテキストの反転処理を手をかけないでDirect2Dに持っていけないかなとか思案しているからである。 GDI関数もDirect2Dのレンダーターゲットに使用できるので、そのままでもいいんだけれ…

STed2いじり(21) Direct2D化

かなり元の画面に近づいてきた。

STed2いじり(20) Direct2D化

少しずつ進めている。 昨日・今日はライン描画(罫線)の部分を少し実装した。しかし歩みはめちゃめちゃ遅いな。。 今の実装の仕方だと、効率が悪い感じがするので、ひととおり動くようになったら最適化を行なわなくてはならない。また今は「もともと」のコ…

STed2いじり(19) Direct2D化

今日は文字描画まわりをDirect2D化した。 文字表示はできるようになったが、まだまだ完成度は低い。

STed2いじり(18) Direct2D化

一気にコードを変更しようとしたけど、モチベーションが続かない。 目に見える成果をこまかく確認しないとモチベーションが落ちていく性格なので。 すこしずつ動かしてはチェックできるように、GDIコードをコメントアウトしてコンパイルが通るようにした。 …

STed2いじり(17) Direct2D化

ほとんど進んでいない。 テキストVRAM操作部分をいじっているがX68kのText VRAMの構造がぼんやりとしかわかってないので、理解が遅い。朝の快速電車の中、家に帰ったらX68kのドキュメントを漁ってみることにしようかとか思っていて、 家に帰ると手をつけよう…

STed2いじり(16) Direct2D化

実装をのらりくらりと進めている。 今日はCSTedScreenWin32::TextXBox()をDirect2D化した。 マスク処理については自分の中では整理出来たつもりだったのだが、やはり混乱をしてしまう。 頭悪いなあ。

STed2いじり(15) Direct2D化

ビットマップが透過されるか念のため確認。結果は御覧の通り。 グラデーションブラシで書いた文字の上に、ビットマップに「ビットマップ」という文字を書いてDrawBitmap()した。 std::wstring td2d(L"DWR こんにちは"); // グラデーションブラシでHwndRender…

STed2いじり(14) Direct2D化

すこしずつDirect2D化を進めている。 昨日は下記コードのDirect2D化について考えていた。 // public void CSTedScreenWin32::Paint(RECT *in_rect) { int x,y; int w,h; x = in_rect->left; y = in_rect->top; w = in_rect->right-x; h = in_rect->bottom-y;…

STed2いじり(13) Direct2D化

DirectWriteいじりもそこそこにして、Sted2のコードをDirect2D化し始めた。 DirectWriteも奥が深いというかフォント自体奥が深いので自分のやりたいことを見失いそうだ。疑問に感じたらまたDirectWrite調べをすることにして、STed2のコードいじりを進めるこ…

STed2いじり(12) Direct2D化

DirectWriteのドキュメントを休憩中に読んでいたりした。しかしフォントというものは私にとってなんとなく難しい。グリフって何?とかいうレベルなので。なかなか頭に入らない。 そういうわけでSTed2の実装に入る前にDirectWrite APIを学ぶと同時にGDIのフォ…

STed2いじり(11) Direct2D化

今日は電車の中でソースコードを読んでいた。電車の中でソースコードを読んでいる人って、他人から見ればどうなのかな。やはり変わり者にみえるのだろうか。。コードを読んでいる途中でバグを見つけた。あとで直すかな。 並行して、GDI描画APIをDirect2D API…

STed2いじり(10) Direct2D化

実装をどうしようかなとか今日はソースコードをチラ見しながら考えていた。 今のX68000の描画エミュレートのまま実装するか、それともコードにかなり手を入れてDirect2D向けに最適化するかだが、X68000の描画エミュレートのまま実装を試みることにする。 オ…

STed2いじり(9) Direct2D化

Direct2Dのコンテンツを漁っていたらDWMの記事(半透明のウィンドウフレーム)が目に留まり組み込んでみた。半透明のSTEd2だ。見づらい。。 実装にあたりDirect2DおよびDirectWriteのおさらいをしている。結構コンテンツが揃っている。以下羅列。 DWMにもな…

STed2いじり(8) Direct2D化

とりあえず自作のWindowsラッパクラスとの融合作業は完了した。 WindowsラッパクラスはDirect2DでUIを作るためにWTLの仕組みをすこし拝借して作成したものである。なのでDirect2D周りの初期化コードもふくんでいる。とりあえずそのあたりが動くかどうか確か…

STed2いじり(7) Direct2D化

CSTedScreenWin32クラスの改造をはじめたところ。 CSTedScreenWin32は過去に自作したウィンドウラッパクラスbase_windowを継承することにした。 クラス内でhwndをいじれるようにするとコードがすっきりしそうな気がしたので。 base_windowはWTLを参考にサン…

STed2いじり(6) Direct2D化

今日はコンパイル環境を整えていた。過去コードを組み合わせながらなんとか楽できないかとかも考えていた。 もうBoostやSTLを使わないと生きていけなくなっている(使いこなしている度はかなり低いが)ので、ヘッダをプリコンパイルするのはいつもの作業とな…

STed2いじり(5) Direct2D化

Direct2Dをおさらいしながら、STed2 For Windowsにどう組み込んでいくかソースコードをチラ見しつつ考えている。コメントもほとんどなくあまり親しみのないC言語ベースというのもあって私にとってはとても読みづらいコードであるが、作者の熱意はひしひしと…

STed2いじり(4) Direct2D化

ちょっとこのページを見ていたり、自分の過去コードを見ていたら描画部分をDirect2D化したくなってきたのでチャレンジすることにした。 またすぐ挫折しそうな気もするが。。

STed2いじり(3) MIDI設定が反映されない原因が判明

MIDI設定が反映されないのは原因が判明。設定が反映されるようになった。ただこのままだとMIDIインターフェース設定が保存・復元できないので作り直す必要がある。 あとメッセージ処理がすこし??だったのでPeekMessage()をかましてメッセージが無いときにS…

STed2いじり(2) 音が鳴った

STed2 For Windowsだが音が鳴ることがわかった。 Windows 7上ではXPのようなMIDI設定画面がないので、MIDI周りがどうなっているのかわからない。音がならないのは環境のせいかもしれないと思い、Cherryを動かしてみるとちゃんとGS Wave Synthが指定でき再生…

STed2いじり(1) コンパイルしてみる

STEd2 for Windows をいじってみることにした。 いまのところ、コンパイルが通り実行はできる。 でもMIDI Outのセレクトができない。僕は外部音源を何も持っていないので、GS Wave Synthを指定して鳴らしてみようとするのだが、設定が元に戻ってしまいできな…