Calendar
2006年02月
Su Mo Tu We Th Fr Sa
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28        
amazon検索
最近のコメント
Archives
Recent Entries
Search


Links
Powered by
Movable Type 2.65
カテゴリ別アーカイブ
RadioSharkPlayer [14件]
VBA [2件]
VC [1件]
VSTi_ChordMaster [8件]
アセンブラ [2件]
知識 [4件]
TOTAL:

TODAY:

YESTERDAY:


2006年02月19日

_ボタンつけた

これまた、センスのないボタンになっちまいました。それぞれのコントロールを眺めてると思うんです。この統一性の無さって何?w

でもスライダはランダムにコードを選択する要素でもありましたが、ボタンはきっちりと狙ったコードが鳴らせるので楽しいですね。やぺー、これだけの機能でも十分すぎるw

snapshot060219_2.png

次はコードの転回を操作する処理をつくるぜ、コードは転回しないと自然なコード進行が再現できないもんね。ギターコードモードとかもつくったろうかと思ってます。ギターの基本フォームがかき鳴らす音ってなんか気持ちいいよね。

常人では絶対にひけないようなコードが簡単に試せるのがよかったりします(トランスをフルマニュアルで演奏する坂本先生タイプの人間は除外です。)。テンポ140で16分音符とかで速弾きコードも試せるぜ。まだ不完全だからみんなにお披露目できないのが惜しいくらいに楽しいですよ。これ。

気に入ったコード進行を見つけてからピアノロールにノートを配置するという使い方です。
弾いたコードの履歴をとっといて、smfファイルとかmidiファイルをつくろうかと思いましたが、そこまでいける技術と時間はないような気がするのでやめときます。実現したとしてもなんか面倒な利用方法しか思いつかないし、最善の利用法を考えると、VSTiがDAWのピアノロールにアクセスするような暴挙ができないと駄目だと思います。

Posted by yo-net at 15:24 | Comments (1) | TrackBack(0)

_サボりすぎた

はい。サボりすぎました。だって楽しい誘惑がいっぱいなんだもん。
オリンピックも面白いし、ライブドア上場廃止への動きも楽しい。堀江起訴もしかり・・・
ギター弾いて楽しい、買い物に行ったり、お出かけしていろんなもの見てきたりするよね。

というわけで、サボりすぎるのもよくないので、少しだけ触りました。
そう、たったこれだけなんだ。今、何のコードを引いているか文字列にして表示するという処理です。素敵。だれか画面デザインを考えて欲しい。なんだこの美しくない配色w
あとでどうにでも変更できるという余裕をかまして作っているうちに大変なことになるという道筋をたどっている気がしないでもない。

snapshot060219.png

まぁとにかくだ、気楽にいきまっしょいw正直なところ死ぬまでにできればいいかなぐらいで考えてます(ぉぃ。

うん、今はChord選択用のスライダ連動型ボタンをデザイン中。とりあえずテストドライブ用のデザインをしています。最終的にはものすごい緻密かつ機能的なデザインをしないと、沢山あるChordボタンが画面内に収まらなくなるよね。あー集中してたらネットラジオをまたサボってしまった。時間管理がうまくできないおじさんは社会人失格だね。まいったまいった。

あーそうそう。ソフトウェア開発技術者試験を受けることにしました。今年こそとる!これまでに2回申し込んでいて、1回はサボり、2回目はガチで敗戦を決め込んでしまいましたw。オレって最低w

基本情報処理技術者からソフトウェア開発技術者になってみせます!そしてアプリケーションエンジニアへ挑戦するぜ!つうか、アプリケーションエンジニアの問題って難しすぎる。とりあえずはソフトウェア開発技術者だなぁ。SQLは会社で無理やりMySQLデータベースを使ってのリソグラフィ技術支援システムを構築して、実務経験を積みつつばっちし覚えたし、2年前に午前の部の勉強はひととおりやったぜ、あともう少し努力しないとなぁ。この試験って実務レベルがあるからといって通るような試験じゃないぜ。この試験専用の勉強をしないと流石に無理だわ。その前に自分の仕事は情報処理技術って関係ないしw

リソグラフィとかそういう、たぐいの勉強したほうがええんかなwんんや、日本最速の開発のためには欠かせない技術だ。がんがん勉強して、自信つけていこうと思う。

Posted by yo-net at 00:46 | Comments (0) | TrackBack(0)

2006年02月12日

_マイナーコードの切り替えが出来るようになった。

snapshot060212.png
やっぱマイナーコードって暗いけど素敵です。なんか渋い響きですね。
最近いろんな和音を聞いているおかげなのか、好きなコードと嫌いなコードがだんだんわかってきました。

はやく、これを使って曲をつくってみたいなぁ。

ちなみに現段階で、ユーザインターフェース(UI)は恐ろしいほどしょぼいです。なんかFLASHでの映像作成のためにはじめたDTMがいつのまにやらプログラミング作成になっているというこの脱線具合。これほどに本来の目的から遠ざかっていく人間が本来の道に戻るの日は来るのでしょうかw

このままどんどん脱線しまくって、プログラミングしやすい環境をもとめてOSづくりとかやりはじめたりしないか、今からものすごく心配です。

というわけで、次の目標は新たにボタンスイッチを作成して、コードの種類をそのボタンスイッチで切り替えできるようにすることと、既存のコード切り替えスライダとUIが連動するように設定します。

128段階スライダを0~1の小数点で管理することのややこしさが身に染みてきました。でも独自のコントロール管理クラスにしちゃうとこれまたややこしさが倍増するので、このままSDKの仕様に基づいて作ってみようと思うわけであります。

Posted by yo-net at 09:35 | Comments (0) | TrackBack(0)

2006年02月11日

_ユーザインターフェース(UI)って作るの大変

頑張ってく背景だけ作ったのです。実装も頑張りました。
独自のユーザインタフェースを実装するのって案外大変ですよコレw

snapshot060211.png


今回のVSTiは物凄く便利だと思うので、出来上がったら、公開しようと思っています。
というわけで、制作者のところにハンドル名を記述しようかと思ったんですけど、
なんか恥ずかしいし、短く過ぎてなんかしっくりこないから、なんかの会社みたいな名称を考えてつけてみました。その名も「Yonetek Media Systems =よねてっく メディア システムズ」MacromediaとAdobeとyonetを融合させたようなネーミングにしましたw今後、もしプログラミングを本意気でやる機会があれば、このネーミングで統一していきたいなぁと思っております。

さて、こんなところで油売ってないで、作業に戻ります。いやー実に過酷です。

Posted by yo-net at 07:08 | Comments (0) | TrackBack(0)

2006年02月10日

_納得

DreamStationでは暴走がとまらない件について、どうやらMidiEventがまとめて送られてくると失敗するのはDreamStation側の問題のようです。こういう複数のMidiEventが同時に送られてくることに対応できていないVSTiが有料で販売されているなんて、信じがたいがこれは紛れも無い事実でありまして、

5000円返せ!のVSTiです。DreamStationのようなVSTi用に何か対策を講じた処理を追加するのが僕のお仕事になるわけですが、ちょっとお手上げだなぁ。あのChordSpaceでさえDreamStationを暴走させていることがわかりました。これは後で対応することにしようと思います。特定のVSTi固有の問題にいちいち悩んでいてもしょうがないよね。

じゃあ、今日は頑張ってマイナーコードとメジャーコードを切り替えるスライダをつくってみようかなぁ、

MIDIコントローラの仕様によるとスライダは128の値を送信できるのが普通みたい。スライダが0〜63のときをメジャーコード64〜127ときをマイナーコードにしてみます。でもVSTではこの値を0〜1の浮動小数点数で管理しなければいけないようです。つまり0〜63は0.00〜0.49にして64〜127は0.50〜0.99にしないとねあ1.00もだね。

じゃ、とりあえず面倒だから今は0〜63は0にして64〜127は1にしようっと。スライダはとりあえずVSTSDK標準のGUIを流用してみよう。

Posted by yo-net at 08:46 | Comments (0) | TrackBack(0)

2006年02月08日

_出来た!

なんだ、きちんとMidiメッセージを全部処理していなかったせいだったんだ。
同時に送られてきた場合は最初の一つしか処理してなかったorz

せっかくループ処理作ったのに、一つうまくいったら関数を強制的に終わらせてたよ。
ショック
なんかすっげー、簡単なミスしてた。

楽しい。コードひけまくり。でも弾いているとメジャーコードだけではつまんないってことを身に染みて感じるようになるよ。ギターでも同じ指の形で押さえるフレットをスライドさせてもつまんないから、当然なんだけどね。たぶんマイナーコードに対応するだけでもずいぶんかわってくるんだろうなぁ。よし、次の作戦はまた明日やね。

とおもったらDreamStationDXi2は暴走しやがった。どういうことなんだ、ますますわけわからねぇぜ。

Posted by yo-net at 03:51 | Comments (0) | TrackBack(0)

_少しだけわかった「中間報告」(ん、誰に?

どうやら、ほぼ同時に離した場合だけ0x80 0xnn 0x00 0x00 がきちんと出力されていない
ようです。

MIDIキーボードはきちんと信号をだしてるはずなので、まずはありえない。てことはやっぱり自分のせいなのです。ふぐー。でも以下のトレースで少しわかってきたよ。

キーボード番号 32 と 2f を同時に押す。
0x0 0x 1 Event Info送信
0x90 0x32 0x63 0x0 Chord root
0x90 0x36 0x63 0x0 Chord +4
0x90 0x39 0x63 0x0 Chord +7
0x0 0x 3 Event Info受信 32のメジャーコードが鳴る
0x90 0x32 0x63 0x0 Chord root
0x90 0x36 0x63 0x0 Chord +4
0x90 0x39 0x63 0x0 Chord +7
0x0 0x 1 Event Info送信
0x90 0x2f 0x63 0x0 Chord root
0x90 0x33 0x63 0x0 Chord +4
0x90 0x36 0x63 0x0 Chord +7
0x0 0x 3 Event Info受信 2fのメジャーコードが鳴る
0x90 0x2f 0x63 0x0 Chord root
0x90 0x33 0x63 0x0 Chord +4
0x90 0x36 0x63 0x0 Chord +7

0x0 0x 2 Event Info送信
0x80 0x2f 0x 0 0x0 Chord root
0x80 0x33 0x 0 0x0 Chord +4
0x80 0x36 0x 0 0x0 Chord +7
0x0 0x 6 Event Info受信 2fのメジャーコードが止まる
0x80 0x2f 0x 0 0x0 Chord root
0x80 0x33 0x 0 0x0 Chord +4
0x80 0x36 0x 0 0x0 Chord +7

32のメジャーコードの音を止める信号は出ない。2fのメジャーコードと重複している構成要素の36 番は止まりました。この状態でノートを止める信号を送出してみるも音は止まりませんでした。ゆっくり離すと問題なく止まる。イベントが複数とどいている兆候がありますので、こいつを上手く処理していないということになるのかな。同時に鍵盤をおしてもEventはひとつしか発生しないようになってるみたいなので、そのあたりが原因かもしれません。もうちょっと動きをおってみようと思います。

Posted by yo-net at 02:23 | Comments (0) | TrackBack(0)

2006年02月07日

_とりあえずメジャーコードを指一本で弾けるようになった。

ルート音を押さえるだけでコードを自動で演奏できる。VSTiを開発中。つまりChordSpaceの自分が使いやすい形式版みたいなものです。ChordSpaceのコンセプトはJAZZによく使われるコード進行をマウスクリックだけで実現したり8種類の鍵盤にコードを割り当てることができるという特定の調だけを扱うJAZZのためのVSTi

自分の今作っているChordMasterはまだそんなに仕様が決定したわけでもないのですが、キーボードでルート音を押せばコードがなるというものでコード進行をサポートするというよりはコードの入力をサポートするものを考えています。

とりあえず今日までにルート音のMIDIノート信号からメジャーコードのMIDIノート信号を作って出力する部分を実装してみた。指一本でメジャーコードがカツカツならせるのは気持ちよいですね。黒鍵をおしても全然平気。難しいことなんてひとつもないね。楽しい。メジャーコード進行だけをあつかう明るい感じの曲はこれで簡単につくれそうだ。コード進行に悩んでる時間が少なくなりそうです。

でも問題点が浮上。どうやら原因不明のタイミングでノート信号が暴走する模様です。音が止まらなくなる。暴走してからはベロシティー値0のノート信号を全てのノート番号(音階)に対して送ってみたりするのですが、音は止まらないっす。うーん暴走する原因の特定が難しい。ちなみにFLStudioをホストアプリとして利用中です。

しかも動作も不可解極まりない。起動時にb0 65 00 00 というMidi信号がVSTiに送られてくるし、ためしにMIDIキーボードの入力からオールノートストップ関連のMIDI信号 b0 78 00 00、b0 79 00 00、b0 7B 00 00、といった信号を送っても、受け取るのはb0 65 00 00なのだ。MIDIの仕様に厳密じゃないFLStudioって怪しいけど好き。FLのMIDIは基本的に音を鳴らすためだけに使われているっぽい仕様っぽいなぁ。制御信号はFLが独自の方式で管理していて、VSTiには流さないのかもしれないなぁ。

ちなみに無理やり入力信号をオールノートストップ関連の信号に変換させてVSTiに出力させても音が止まらない。なぜだ!VSTiは一体どんな信号を出力してるんだろう。Midi出力Portから入力Portに流している受け側のVSTi(実際に音をならすVSTi)はなにを受け取ってしまったのか不明だ。なぜ鳴りっぱなしになるんだろうねぇ(´・д・`)

ふむ、あ、0番以外のちゃんねるがなんか悪さをしたのかなぁ、後で確かめてみよう。とにかくしばらく複雑な演奏をすると確実に発生するこの不具合なんとかしないとねぇ。


これが解決したらあとはコードの種類を多種に渡りサポートするコードスイッチ関数とグラフィカルインターフェースの実装が必要や。今のところ、基本構成はVST SDKのサンプルと変わらない見た目です。ボタンクリックでも、MIDIコントローラーのノブでもコードを切り替えできるようにしようと思っています。コードの転回も画面とコントローラーで操作できるようにしようとおもっとります。余裕ができたらアルペジエータ奏法や、コードの中のひとつひとつの音でMIDIベロシティーが調整できるようにもしたいなぁ。どんなインターフェースが便利なんだろうね。試行錯誤だわ☆

結局、それを使うのはコードが押さえられない自分という、自分のためのプログラミングだぜ。
まだ未完成なのにChordMasterと名づけたこのアプリ、使い始めるとChordを自分で押さえるということをMasterできなくなるという矛盾したところもありますが、コードを簡単にならすことはマスターできそうですぜ。

おもしろそうでしょ。でもねここのブログには誰も気がついてないので、秘密の開発日記にしていこうと思ってます。表のサイトからはリンクもはってないし、グーグルさんがいつ見つけてくれるかだなw

自分のプログラムをtraceした結果。
0xb0 0x78 0x 0 0x0 all sound off
0xb0 0x79 0x 0 0x0 reset all controller
0xb0 0x7b 0x 0 0x0 all note off
0x90 0x30 0x63 0x0 Chord root
0x90 0x34 0x63 0x0 Chord +4
0x90 0x37 0x63 0x0 Chord +7
0x80 0x30 0x 0 0x0 Chord root
0x80 0x34 0x 0 0x0 Chord +4
0x80 0x37 0x 0 0x0 Chord +7
0x90 0x34 0x63 0x0 Chord root
0x90 0x38 0x63 0x0 Chord +4
0x90 0x3b 0x63 0x0 Chord +7
0x80 0x34 0x 0 0x0 Chord root
0x80 0x38 0x 0 0x0 Chord +4
0x80 0x3b 0x 0 0x0 Chord +7
0x90 0x37 0x63 0x0 Chord root
0x90 0x3b 0x63 0x0 Chord +4
0x90 0x3e 0x63 0x0 Chord +7
0x80 0x37 0x 0 0x0 Chord root
0x80 0x3b 0x 0 0x0 Chord +4
0x80 0x3e 0x 0 0x0 Chord +7

ちなみにDreamStationDXiの場合、鳴りっぱなし状態に陥ると再起不能。
Sytrusなら同じ音を弾けば正常復帰。

これってオレのせいなのかなぁ。(´・д・`)

Posted by yo-net at 07:54 | Comments (0) | TrackBack(0)

2006年02月05日

_NASMその2

VC2003.netでnasmを使うには
プロジェクトの中でアセンブリ形式のプログラミングを行ったファイルに対してプロパティシートをオープンして、カスタムビルドのセッティングをするのがよいでしょう。プロジェクトの一部として科学技術計算を効率的に行うためのnasmを使うことがほとんどだと思いますので、以下の方法がよいと思われます。

例えば

nasmw -p ".\engine\i386\Nasm.cfg" -dWIN32 -f win32 -o ".\bin\debug\$(InputName).obj" "$(InputDir)$(InputName).nas"

のようにカスタムビルドのセッティングをします。
ここでは.nasという拡張子を使っていますが多くは*.asmと表記されることが多いようです。
-p で インクルードファイルの読み込みを指定
-dWin32 で 各種インクルードファイル設定でWin32形式の定義を採用するためのオプションです。インクルードファイルを利用したアセンブラコンパイルにはよく使われるオプションです。
-f win32でwin32形式のオブジェクトファイルを書き出すことになります。
-o で 出力するオブジェクトファイルの名前を定義します。
-I".\engein/i386"のようにインクルードファイルを読み込むこともできるようです。

今回、自分は午後のこ〜だを自分でコンパイルしたときにnasmというものを知りました(今更ですw 自分の使っているCPUに最適化されたみたいでdllのサイズもちっさくなったし、エンコードもなんか速くなった気がします。

アセンブリかー、今の自分にはきついプログラミングだなぁ。高校生のときZ80とかいうマイコンで触って依頼の大接近だわ。どうやってこんなの調べるんだろと思いつつインテルからPentium4プロッセッサの仕様書を3つ(上巻・中巻・下巻)ゲットしてみた。今から理解しはじめたら半年以上かかりそうなボリュームっす。でも、今回午後のこ〜だをコンパイルしてみて勉強になったなぁ。

Posted by yo-net at 11:16 | Comments (0) | TrackBack(0)

2006年02月04日

_NASMその1

極まれにアセンブラをVC2003.netで利用することがあります。VS2003.netでアセンブラを使うときに便利なカスタムビルドコンパイラの紹介です。しかもフリーです。大多数の人はここにお世話になるんじゃないでしょうか?アセンブラって何?って...オクサン。そりゃもう機械語を16進数で表記したニーモニックという形式の命令を書きなぐったようなプログラムがありまして、

ニーモニック表記のイメージは下のような感じを思い浮かべてもらえればいいですね。実際は2進数なので1と0の羅列です。一番左が命令を表すコードで右にオペランドという命令に対する引数が記述されます。基本的には数値を意味するものや、命令実行用に用意したメモリアドレス番号になるね。オペランド部は3つだったり、2つだったり、いろいろです。命令部の桁数やオペランドの桁数もCPUによって様々。

16進でニーモニック表記をイメージした場合

55 6D 2B
67 FF 2B
55 6D 2B

55っていう命令がオペランド1(6D)というメモリアドレス部にオペランド2の値(2B)っていう値を格納しなさいというものだったり、そういう感じでプログラミングされてるんですねぇ。こんなやり方でウィンドウズプログラミングなんかやったら死ねるw

2進の場合(アクマで想像ですよw
01010101 01101100 00101011
01110111 11101100 00101011 
01010101 01101100 00101011 
 
これを少しだけ分かり易くしたのがアセンブリ言語ってことになります。

命令の部分を文字に置き換えます。つまり数字と命令を対応させる表みたいなのがあるとおもっていだければよいと思います。そうすると

LD 6D 2B ←LDはLOADとかいう英語をうまく2文字くらいで表してたりする?
MOV FF 2B
LD 6D 2B

まーこんな感じらしいです。これでも実際プログラムやれっていわれると、ちょっと厳しいんだけどね。ニーモニック表記よりは何をやってるかがわかっていいよね。

つまり!こうやって1と0の表記を16進数にして表したり、何かの文字列に置き換えたってことは、結局は文字列表記にしたものを1と0の羅列に変換しないとコンピュータには何も命令できないのです。人間さまが勝手に対応表とかつくっちゃったんだから、その対応表から元の形に戻す必要があるよね。文字列とか渡されても電圧の起伏でしか処理を決められないコンピュータさんは1と0の2値で表現されるようなものを渡されないと困るんすね。この変換を機械語からアセンブリ言語に翻訳していると見立てるとコンパイラは機械語翻訳機という位置付けになるんすね。この仕組み自体を人間さまが考えているのでコンピュータの電子回路をうまく利用するひとつの表現手法ですな。C言語とかはアセンブリで記述した場合の一定の命令の流れをさらにわかりやすい文字列にまとめた言語ってことになるよ。だけど決まった形のアセンブリ言語のカタマリを使いまわすので、実は効率がわるい。なるべく機械語に近い形でコンピュータに信号を送ったほうがいいんだよね。

ともかく・・・
そこで登場するのが、intelやamdのCPUに忠実なアセンブラ(機械語コンパイラ)のこやつです。

NASM(Netwide Assembler)
現在(2003-02-04)リリースされているものはVersion0.98です。
入手は以下のURLのサイトからになります。

http://sourceforge.net/project/showfiles.php?group_id=6208

Microsoft Windowsしか、知らずに生まれてきた僕だから、ダウンロードするのは上記ページに様々なOS用に幾つか用意されてあるNASMの中から

Win32 binaries(コマンドライン専用:Win32用コンパイル済みexeセット)

これを選択します。DOSの方も動くと思うけど、使い勝手は悪そうです。試しに使ってみたら、Win32コマンドプロンプトからだと何にもメッセージが帰ってこないね。コマンドヘルプすらない感じだった。
ダウンロードしたzipファイルの中にはアセンブラと逆アセンブラの実行ファイルが入っとります。ありがたいです。まじでありがたいです。IntelやAMDは仕様書を配ってはいますが、やっぱこういう実用的なものも配って欲しいよね。うーんCPUメーカからしたら世の中にたくさんあるオペレーティングシステム用のアセンブラなんて知ったこっちゃないって言われりゃ、何も言い返せません。

こういうものはOSを作った人が提供するべきなんだろうね。でも、OSの仕組みさらけ出したり、OSを使ってのアプリ開発自体を商売にしているマイクロソフトはタダでは提供しません。これが経済をここまで成長させてきた、ひとつの仕組みだったりします。こうやってお金稼ぎしながらアプリを開発できるからこそ、みんな必死になってアプリ開発をしたんすね。しかもMicrosoftWindowsというOSを主軸としてここまでやってきた。もう僕らは後戻りできないところまで歩いてきたんだ。今更、引き返せないよ。引き返したいけど、引き返せない。もう戻れないんだ。

引き返せると自負するパワフルな人がいれば、どうぞお早めに!いま、80x86CPU市場では、少数の非力な人間どもが立派なセキュリティと最高の使い勝手を備えたOSを開発中ですが、Windowsにとって変われるだけの魅力や素質や可能性はどれもないようです。むしろ、ますます差は開きつつあるように思います。

nasm.exe:アセンブラ、コマンドラインアプリ
ndisasm.exe:ディス(逆)アセンブラ、コマンドラインアプリ

あ、今日はここまでっす。
VC2003.netで、このツールをつまく使う方法はまた今度(いつ? さぁ?

Posted by yo-net at 12:46 | Comments (0) | TrackBack(0)