2006年11月23日
テキスト音楽「サクラ」で音楽素材コンテンスト開催
テキスト音楽「サクラ」で音楽素材コンテンスト開催します!!
われこそは、素材王と名乗れる方、ぜひ応募してください。
http://oto.chu.jp/contest/2006/index.htm
協賛してくださる方も募集しています!!
====
テキスト音楽「サクラ」主催で、久しぶりの作曲コンテンストを行います。
その名も、「素材王決定戦」です。
今も、昔も、ゲームを作ったときに必要で、その重要な要素に、BGMがあげられます。
どんないいゲームでも、BGMがだめだと、ゲームの品格が台無しになってしまいます。
そこで、ゲームのBGMとして使える曲のコンテンストを開催したいと思います!!
【応募条件】 自分で作曲した曲なら、発表曲・未発表曲を問いません。
(1)サクラを作って作った曲であること
(2)MMLのソースで投稿できること
(3)BGMとして使える(※クリエイティブコモンズ準拠)こと
2006年10月17日
Flash版テキスト音楽「サクラ」(テスト)
先日より、通勤電車の往復を利用して、こつこつFlash を使って、Webアプリ版MMLコンパイラ(ドレミで作曲)を作ってみました。
↓Flash版サクラ(テスト)
http://oto.chu.jp/websakura/
もともと、MIDI操作機能だけ作って、オルゴールでもと思っていましたが、こつこつやっているうちに、出来てしまいました。まだまだ、未対応のコマンドだらけですが、テスト版なのでこんなものです。
※元ネタは、adasさんの JavaScriptサクラです。
こちらの、adasさんの方が対応コマンド多いです。(Flashも要らないし...)
クライアントサイドでも、十分サクラが動くようになってきました!!
長い曲はちょっとまだテストしていませんが、いろいろテストしてみようと思っています。
2006年09月09日
MIDIプログラミング~n分音符とタイムベース
久々にMIDIプログラミングをやっています。なんだか、昔は当然のように計算していたタイムベースの計算とか、かなり忘れていて、思い出しながらやっています。それで、忘れないようにメモることにしました。そういうわけで今日もメモブログです。
・・・
四分音符は、1小節を4分割した長さのこと。
八分音符は、1小節を8分割した長さのこと。
MIDIのTimebaseは、四分音符の長さを指定する。
つまり、n分音符の正確なTick値を得るためには、まず、1小節の長さを求めておいて、これを分割することで得られる。
---(
n分音符のTick値 = 1小節の長さ / n分音符
---)
ただ、この1小節の長さを求めるためには、拍子が決定されなくてはならず、MIDIファイルを読み込んだら、まず拍子をチェックして、4/4 なのか、6/8なのかを見る。
そして、4/4とか、8/8なら、問題なく、
1小節の長さ=Timebase * 4
で良いのだけど、6/8とかだと、これに、6/8をかけた長さになるので、
1小節の長さ=Timebase * 4 * (拍子の分子/拍子の分母)
とやることで求められる。つまり、以下の式が成り立つ
---(
n分音符のTick値 = (Timebase * 4 * (拍子の分子/拍子の分母)) / n分音符
---)
??あ、でも、タイムベースは、四分音符を基準にしているのだから、四分音符の何倍か調べるだけでいいのか。遠回りしちゃった。
---(
何倍か=n分音符 / 4
n分音符のTick値 = Timebase / 何倍か
1小節のTick値 = n分音符のTick値 * 拍子記号の分子
---)
半端な音符を、より正確に求めたい場合は、1度小節のTick値を求めてから、さらに、n分音符かを割るといいと思う。
----
それから、tick数から、小節:拍:tickを求める計算式も必要だったので計算。
---(
// TimeSigOya ... 拍子の分母, TimeSigKo ... 拍子の分子, TimeBase ... 四分音符のTick数
function TSmfSong.time2str(time: DWORD): string;
var
measure, beat, tick: DWORD;
baseTick, measureTick, tickN: DWORD;
begin
// 拍子記号の分母の基本Tick数を求める
baseTick := TimeBase div (TimeSigOya div 4);
// 1小節の長さを求める
measureTick := baseTick * TimeSigKo;
// 何小節目か?
measure := time div measureTick + 1;
// 端数を得る
tickN := time mod measureTick;
// 何拍目かを求める
beat := tickN div baseTick + 1;
// Tickを求める
tick := tickN mod baseTick;
// 表示
Result := SysUtils.Format(
'%0.3d:%d:%0.3d', [measure, beat, tick]);
end;
---)