カテゴリー:音楽プログラミング

テキスト音楽「サクラ」で音楽素材コンテンスト開催

テキスト音楽「サクラ」で音楽素材コンテンスト開催します!!
われこそは、素材王と名乗れる方、ぜひ応募してください。

http://oto.chu.jp/contest/2006/index.htm

協賛してくださる方も募集しています!!
====
テキスト音楽「サクラ」主催で、久しぶりの作曲コンテンストを行います。
その名も、「素材王決定戦」です。

今も、昔も、ゲームを作ったときに必要で、その重要な要素に、BGMがあげられます。
どんないいゲームでも、BGMがだめだと、ゲームの品格が台無しになってしまいます。
そこで、ゲームのBGMとして使える曲のコンテンストを開催したいと思います!!

【応募条件】 自分で作曲した曲なら、発表曲・未発表曲を問いません。
 (1)サクラを作って作った曲であること
 (2)MMLのソースで投稿できること
 (3)BGMとして使える(※クリエイティブコモンズ準拠)こと

投稿者 kujira : 02:21 | トラックバック

Flash版テキスト音楽「サクラ」(テスト)

先日より、通勤電車の往復を利用して、こつこつFlash を使って、Webアプリ版MMLコンパイラ(ドレミで作曲)を作ってみました。

↓Flash版サクラ(テスト)
http://oto.chu.jp/websakura/

もともと、MIDI操作機能だけ作って、オルゴールでもと思っていましたが、こつこつやっているうちに、出来てしまいました。まだまだ、未対応のコマンドだらけですが、テスト版なのでこんなものです。

※元ネタは、adasさんの JavaScriptサクラです。
こちらの、adasさんの方が対応コマンド多いです。(Flashも要らないし...)

クライアントサイドでも、十分サクラが動くようになってきました!!
長い曲はちょっとまだテストしていませんが、いろいろテストしてみようと思っています。

投稿者 kujira : 00:21 | トラックバック

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; ---)
投稿者 kujira : 22:16 | トラックバック