エレクトーン日記

エレクトーンELS-01C typeUカスタムについての日記です

MIDI

コンピューターで楽譜をエディットするプログラム・・・

最終的な目標として、エレクトーン用のスタイルフォーマットファイル(SFF)エディターを作ることを目指し、プログラムを勉強中だ。

いわゆる楽譜エディタも、作る必要がある。リアルタイム録音での譜面入力は今のところ考えていない。

それができるようなら、クラビノーヴァのお部屋を借りろって話だw

あくまで、RPPの補助ツール的位置づけで考えている・・・

音符貼り付け型のスコアエディターでピアノロールはひとまず考えない。


画面の中で・・・

五線をひいて・・・底に音符を貼り付けていく・・・


まず、全音符とか、2分音とか、音符一つ一つを入力するだけなら簡単なんだよなぁ・・・

しかし、和音入力とか、連符の連桁などを考えるととたんに難しくなる・・・
どうしたモノか・・・

もっといえば、符尾の長さにも色々ルールがあるらしい。基本は1オクターブ分だが、それが音階によっては短くなったり長くなったりする。

さらに、基本8分音符の連符の下に2分音符がいたりするやつもあったりする。

まー市販のMIDIシーケンサーでも、そのあたりの入力が思うようにできない場合も結構あるのだが・・・

別にFINALEのような美しい楽譜を作ることを目指しているわけでもないのだが・・・

なんか上手いこと考えられないモノか考えてしまうわけである・・・


たとえば、楽譜を作るマークアップ言語を考えてみる・・・

単独の音符は・・・
L1920 全音符
L1440 付点2分音符
L960 2分音符
L720 付点4分音符
L480 4分音符
L360 付点8分音符
L240 8分音符
L180  付点16分音符
L120 16分音符
L90 付点32分音符
L60 32分音符
L0 は同じ長さのステップタイムを持つ和音とする
単独音の場合はS{}で表現する
Cn{}で囲むとそこは連符になるとする。nはその合計のステップタイム
単独の音符の場合はなにも付けない
音階番号はN0~N127までを想定する
大文字も小文字も区別しないものとする。
A4=N69だ
G4=N67
F4=N65
E4=N64
D4=N62
C4=N60
休符はN0とする
楽符の音符の並びは基本的には次の音符までのステップタイムを意味する。
発音時間の長さをダイレクトに表現することは少ない。
表記上、ゲートタイムは表示しないモノと考える。

Rn{}はレイヤーでnはレイヤーの番号を意味する。番号は0が一番上に見えて、それよりも下の場合は休符を表示させないモノとする。
Rn{}の中では必ず、音符と休符で合わせて拍子が帳尻を合うようにしなければならない。

ある一小節を表現する
R0{L480n60L0n64L0n67 L240n60L0n64L0n67 L240n60L0n64L0n67 L480n0
C480{L160n60L160n64L160n67}}
R1{L960 n72 L960 n0}

とりあえず、これで


タイは+で表現する。

たとえば4分音符と16分音符のタイは
L480n60+L120n60

で表現する。

C480{L160n60L160n64L160n67}


符尾の長さは各音階毎にデフォルト値を決めておく。

やはり連符のアタマとおしりの音符については符尾の長さを指定できるものとするが、基本はデフォルトの符尾の長さを適用する。
正の数値は上向きの、負の数値は下向きを意味するとする・・・

こんなイメージを作って仕様書にまとめてみようと思っているが...なかなか形にならない・・・

プログラムにする場合には音符ごとに構造体変数としてこれらの値を持つことになるとは思う。
なんかアタマが過熱してきたから考えるのはやめる。

うーーむグローバル変数はできれば使いたくないのだが…orz

MIDI Chちぇいんじゃ~開発遅延中orz

まぁー色々原因はあるんだけど…

一番の原因はC++初心者のくせにMFCなんぞを使って開発してることだろう。

実のところ、外部変数はご法度と言いながら…


何処にメンバーから見れる変数が置けるのかよくわからんw

まぁーイベントメッセージろイベントハンドラ関数の対応とか、リソースIDと実際のリソースとの結合とかは

わかってきて、結構、バリバリ手動で書き換えたりできるようにはなってきたんだが…

このメンバー変数を何処に置くべきかよくわからんねんw

というところで今回とまってしまっている。

ボタンを押すと表示のBMPを切り替えて、それぞれのChが切り替わるところまでは実現したが、それを具体的に、どうやって、他の関数に引き渡せばイイのか?みたいな部分がよくわからーーん。

クラスウィザードも使い方よくわからーーんw

んーーーこまったw
DDXとかとも関係なさそうだしなぁ…

勘から言えばたぶんどこかにCMidiChChangerDlgクラスを定義する部分があって、そこにプライベートメンバーを入れ込めば、その後はそこがメンバー変数からはグローバル変数と同じ要領でアクセスできるはずと踏んでるんだけど…


構造体の2重定義?
んーーよーわからんという状態になって…構造体すら使えんのか…みたいな状態にw

まぁー簡単にできるんならエキストラ変数でも良いのだが…それはなんかオブジェクト志向のプログラムじゃないという意見が大半を占めている現状ではなんか避けたい感じ…


いっそ、MFCにこだわらずに.Netフレームワークに乗り換えるべきだろうか?

って、たぶん論点はそこじゃないような気がするんだよね…orz


てかさ、たぶんダイアログアプリケーションではグローバル変数を避けるのにそれほど意味は無いような気がするんだよねぇーー

悲劇!VC++プロジェクトの崩壊!! MIDI Ch ちぇぃんじゃ~開発!


【訃報】MIDI Ch CHanger Ver 0.1 のプロジェクトファイルが謎の崩壊消滅を遂げました。
リソースファイルがソリューションから全部きれいに無くなったのでどうしようもありません。
作り直しです立ち直るのに丸々2日かかりましたorz
MIDICHCHNGER
【↑在りし日の旧MIDI Ch Changer】
原因はUNICODE文字セットからマルチバイト文字セットへ切り替えたことです。

5日前から取り組んでいるVC++によるプログラム開発ですが、【MIDI Ch CHanegr Ver.0.1】
その後、沸き起こる数々のエラーにより、ソリューションファイルが壊れてしまい…
やっと色々思い出しながら組み立てなおしているところで…

[【↓作りなおした 新・MIDI Ch ちぇぃんじゃ~ Ver.0.2】
MIDIch
今ここまで構築し直せましたw
しかも、今まではダイアログで通知していたものがログウィンドウに表示できるようになりました。
これで、うざいポップアップダイアログともおさらばです。
チャンチャンうるさいダイアログを閉じないとボタンが押せず、なかなかこれってストレスでしたw
えーとこれはナニをしてるのかといえば…
要はSMF(0)ファイルのチャンネルメッセージのチャンネルを変更するツールです。

要はSMF(0)ファイルの1Chのチャンネルメッセージを2Chのそれはそのままに、上書きカット&ペーストしてしまうというツールです。
まぁ、今作ってるのはそのインターフェース部分です。
ぶっちゃけますと…これの先にはSFFエディターを作るという野望があります(^^)v

ちなみに、「ちぇぃんじゃ~」はチェンジャーとチェインの合成語です。

こうした、CH間の相関性のつながりを「チェーン」と呼ぶのに掛けています。


しかし、改めて、MFCのプログラミングは面倒くさい…

そろそろWin32プログラムも勉強しないとなぁ…

って、全然エレクトーンぽくない!!

ギャラリー
  • 悲劇!VC++プロジェクトの崩壊!! MIDI Ch ちぇぃんじゃ~開発!
  • 悲劇!VC++プロジェクトの崩壊!! MIDI Ch ちぇぃんじゃ~開発!
  • スタイルファイルと、SMF(0)との決定的な違い
  • スタイルファイルと、SMF(0)との決定的な違い
  • スター・ウォーズ「メインテーマ」
  • がくっと疲れる話…
  • サイパンに行ってました
  • STAGEAとSFFファイル スタイルファイルとリズムパターンプログラム機能
記事検索