Web素材/PSGConverter


Total: 6254 / Today: 1 / Yesterday: 1

最新版は、http://mabiassist.logue.be/PSGConverterとhttp://logue.github.com/PSGConverter/index.ja.htmlを見てください

PSGConverter.php

PSGConverter.phpは、たまねぎ氏制作のオンラインゲーム「マビノギ」の作曲スキルで使用するMMLをWeb上でMIDIに変換するスクリプトです。

~~当サイトでは若干の改造と仕様を追加し、%%MML投稿サイトLolereiのスピンアウトとして配布しております。(多言語対応)~

使用方法

基本:
PSGConverter.php?i=(楽器番号)&s=(URLエンコードしたMMLデーター)
拡張オプション:
p=(パンポット0~127)
c=(チャンネル デフォルトは1。ドラムパートを使用する場合は10にすること)
e=(エフェクトの量0~40)
r=(GMリセット trueかfalse)
d=0(ドラムパートで、単音だけ鳴らしたい場合はそのノートを入れる。例:シンバル=57)

Query Stringsに楽器の定義とMMLデーターを入れる。ただし、タイ記号を示す&や、#や♭を示す#などはURLにすると化けてしまうため、そのまま打ち込んでも正常に再生できないので注意。URLで渡す前に、encodeURIComponent()で変換すること。

ドラムパートの楽器が実装されたため、出力されるMIDIファイルのチャンネルを変更するオプションを加えました。QueryStringにch=10を追加すると、ドラムパートとして処理されます。応用としてパートごとに出力されるチャンネルを分ければQuickTimeでなくても合奏できるかも。

オリジナル版との変更点

  • 出力されるMIDIファイルのトラックごとにチャンネルが異なっていたのを修正
  • チャンネルを自由に指定することが可能(応用例:ドラムパートとして使用するなど)
  • GMリセットをいれるオプション
  • エフェクトを指定
  • パンポッドに対応

デモ

準備中

配布/更新履歴

v2.1(2009/08/08)
  • Loreleiリビジョン29とマージ
  • QuickTimeで演奏できないバグを修正
  • midi Classのバージョンを1.7.5に更新
v2.0(2008/04/21)
  • ソースコードを最適化。大幅に正規表現の回数を減らしたため、若干負荷やメモリリークが減っていると思います。
  • ドラムの場合、ノートを決め打ちできるように
  • MIDI企画の慣例に従い、初期設定のトラックを使用
  • PSGConverter本体をサブルーチン化(Lolerei用のコードを流用)
  • 2008/04/17のパッチに対応。これにより、3連譜の入力でC11C12C12のように入力していたMMLをL12CCCでも正常に演奏できるようになった。逆にこれまでのそういったMMLは音がずれる可能性大
  • デフォルトでGMリセットを入れるようにした。(Lolereiのスピンアウトとして作ったため)
  • これに伴い、QuickTimeでの演奏が不可能に。
v0.5 (2008/03/08)
  • トラックごとにチャンネルを分けないようにした。(将来的に合奏に対応させるため)
  • チャンネルを自由に指定することが可能に。(クエリにc=チャンネル)(将来的に合奏に対応させるためと、ドラムパートの為)
  • GMリセットをいれるオプション(クエリにr=true)一般的なMIDI音源用。先頭が1小節分だけ空になる。ノイズ対策にも有効かと。
  • エフェクトを指定(クエリにe=0~128。デフォルトは40)
  • パンポッドに対応(クエリにp=0~128。デフォルトは64)まきまびしーくの規格に準ずる。
  • T50という命令が存在すると、出力されるデーターが化けるバグを修正。
  • URLをデコードする命令を入れた。これにより、encodeURIComponentの1行でPSGConverter.phpに渡すだけで住むようにした。
  • MMLが入力されていないときにエラーを表示。
v0.3 (2008/02/19)
  • PHP MIDI CLASS 1.7.2とマージ
v0.2 (2007/12/27)
  • PHP MIDI CLASS 1.7とマージ

TODO/確認されている不具合

  • 旧仕様(128tick)で作られたMMLが正常に再生できない場合がある。(計算方法に問題あり?)
  • そもそも、正規表現ががいるのは、コマンドを分割するときだけなのでは?せめて、命令が何なのかを解析する部分(ABCDEFNLOV<>の部分)は、substr命令で十分な気がする。

コメント

@pcomment
@keyword

Last Modified: 2011-02-19 15:14:32