MMF2MA~2
所属分类:软件设计/软件工程
开发工具:Visual C++
文件大小:44KB
下载次数:20
上传日期:2008-06-05 15:44:08
上 传 者:
kimdongzhe
说明: 是使用在雅马哈手机音源,原代码,编辑软件的最佳代码
(Is the use of mobile phones in the Yamaha Sound, the original code, the best code-editing software)
文件列表:
conv_i.h (1659, 2000-02-02)
conv_i_m.cpp (13572, 2000-02-02)
conv_i_m.h (2822, 2000-02-02)
conv_o.h (966, 2000-02-02)
conv_o_m.cpp (2233, 2000-02-02)
conv_o_m.h (2316, 2000-02-02)
m2m_m.cpp (2946, 2000-02-02)
m2m_m.h (1415, 2000-02-02)
machdep.h (666, 2000-02-02)
main.cpp (4515, 2000-02-02)
mmf2ma1.cpp (112313, 2000-02-02)
mmf2ma1.dsp (4561, 2000-02-01)
mmf2ma1.h (15715, 2000-02-02)
***************************************************************************
Readme.txt 2000.02.02, YH
***************************************************************************
======================
本ドキュメントについて
======================
本ドキュメントはMMFフォーマットtoMA1フォーマット変換プログラムmmf2ma1 Ver0.4(以後mmf2ma1)について説明する。
============
ファイル構成
============
mmf2ma1は以下のファイルから構成されている。
+---------------+-------------------------------------------
|ファイル名 |内容
+---------------+-------------------------------------------
|conv_i.h |コンバータ入力用抽象クラスの定義
|conv_i_m.cpp |メモリを使ったコンバータ入力派生クラスの例
|conv_i_m.h |メモリを使ったコンバータ入力派生クラスの例
|conv_o.h |コンバータ出力用抽象クラスの定義
|conv_o_m.cpp |メモリを使ったコンバータ出力派生クラスの例
|conv_o_m.h |メモリを使ったコンバータ出力派生クラスの例
|main.cpp |コンバータの使用例
|mmf2ma1.cpp |コンバータのコア部分の実装
|mmf2ma1.h |コンバータのコア部分のクラス定義
|m2g_m.cpp |メモリを使った変換クラスの例
|m2g_m.h |メモリを使った変換クラスの例
|machdep.h |実装依存のデータサイズを定義したヘッダ
|MMF2MA1.DSW |VC++6.0のプロジェクトファイル
|MMF2MA1.DSP |VC++6.0のプロジェクトファイル
+---------------+-------------------------------------------
注:上のファイルのうち、コンバータを組み込んだアプリケーションを作成するときに必要なファイルは
conv_i.h
conv_m.h
mmf2ma1.cpp
mmf2ma1.h
machedep.h
の5つのファイルのみである。その他のファイルはサンプルとして用意した。
==========
マクロ説明
==========
mycplusplus
このマクロが定義されている場合にはC++固有のclassを使ったソースコードになる。
このマクロが定義されていない場合にはC++固有の機能は使わないCコンパイラでコンパイルできるソースコードになる。
MA1_OUTPUT
このマクロが定義されていればMA-1フォーマットデータを出力する。
MA1の実機でのMA1フォーマットの評価ができないため、このモードがある。
TEMPO_TEST
このマクロが定義されていれば、テンポレジスタの設定を引数により設定できるようになる。
MMF2MA1_DECLARE_MEMBER
このマクロが定義されていて、かつCバージョン、すなわちmycplusplusが定義されていない場合には、ヘッダに定義されている変数がexternではなくなる。
それ以外の場合にはexternとして定義される。
つまり、C++ではクラスメンバであった変数をCバージョンではどれか1つのファイルで宣言するためにこのマクロを利用している。
==================================
サンプルアプリケーションの使用方法
==================================
アプリケーションの名前はmmf2ma1.exeでありWin95/***/NTのMS-DOSプロンプト上で動作するプログラムである。以下のように引数を与えて使用する。
mmf2ma1 file1 file2
file1は入力ファイル名でMMFフォーマットである。
file2は出力ファイル名でMA1フォーマットである。
なお、TEMPO_TESTマクロが定義された状態で作成された場合にはさらにもう1つ引数が必要となる。
mmf2ma1 file1 file2 tempo_reg
tempo_regはテンポレジスタに書き込まれる値。0255の値をとる。
========
制約事項
========
本バージョンでは以下の制約を設けている。
■MMFのformat typeはHandy Phone Standardのみに対応。
■Sequence Type は0x00(Stream Sequence)のみに対応。
■MIDI/FM Trackは8トラック(07)までのみ対応。それ以上ある場合には変換を中止する。
■4ch以上の曲の場合には、変換されない。
■最長で約1200時間の曲まで扱える。2^32/1000[sec]
■MMF中のProgram Changeによる音色変更は最初の1回のみ有効。
■MMFでは1チャンネルにPOLY表現(ゲート時間が重なる2音)が可能だが、本変換ではタイとみなして1音に結合する。
■MA1では音色チェンジが演奏中にできないので、マルチプルの変更による発音音域の拡大は不可能。3オクターブのみ発音可能でc#2からc8の3オクターブに固定とした。
■サンプルのconv_i_m.cppでは音色バンク番号は、0のみのマッピングが用意されている。1以上の場合には強制的に0にしている。
==============
バージョン履歴
==============
[V0.1] 1999.12.14
+ 新規作成(mmf2g186 V0.17より派生)
+ マクロMA1_OUTPUTをコメントアウトして使わなずに、必ずMA1タイプの出力形式にした。
+ 出力のMA1サイズの縮小のための改良。テーブルとアルゴリズムを改良。
+ Exclusive MessageのMaker ID = YAMAHA, Format ID = MA-1に対応。(テンポ、音色)
[V0.2] 2000.01.13
+ MMFでタイで接続された音符があり、かつその音符の長さがちょうどMA1の1イベントで表現できる場合に、後半の音符が出力されない問題を修正した。休符も入っていないのでその部分が詰まって聞こえる。
音符のステートをMMF2MA1_STATE_PROCESSEDするときに出力済みのノートオフの位置と出力終了位置を比較してからセットするように変更。
+ 最後の音符イベントのTi(次のイベントへのインターバル)をその音符のノートオフの時刻に一致させた。これまでは+2になっていた。
+ 以下のマクロ、構造体、列挙型の名称を変更した。名称のみなので動作にはまったく影響はない。
- マクロ名の変更。MMF_EXCLUSIVE_*_ID -> MMF_EXCLUSIVE_ID_*
- 構造体の名前の変更。INTERNAL_NOTE,INPUT_NOTE,TI_TK_DATAの先頭にMMF2MA1_を追加。
MA1_EXCLUSIVEをMA1_EXCLUSIVE_DATAに変更。
- 列挙型NOTE_SHIFT_MODEの名称をMMF2MA1_NOTE_SHIFT_MODEに変更。
+ Tk2valueをデバッグモードでない場合にも有効にした。リリースモードでコンパイル不可能だった。
+ 変数の未初期化バグがあったため、Exclusiveのテンポが定義されていない場合に、テンポがおかしくなる可能性がある。そのバグを修正した。
[V0.3] 2000.01.14
+ Setup Chunkに含まれるMA1 Exclusive data(音色パラメータ、テンポ)に対応。
+ main.cppにfcloseを追加。これがなくても特に問題はない。
[V0.4] 2000.02.02
+ main.cppとm2m_m.cppで#include "m2g_m.h"を#include "m2m_m.h"に置き換えた。スペルミス。
+ 音色パラメータを1999/12/9版に差し替え。conv_i_m.cpp
+ 3オクターブの発音域を越えた音を発音しないように変更。(以前は変換を中止していた)
さらに発音されなかった音符がある場合には警告値を返すように変更
マクロOCTAVE_RANGE_OVER_TYPEが0の場合には以前と同じ動作をする。
デフォルトとしてOCTAVE_RANGE_OVER_TYPEはmmf2ma1.hで1として定義してある。
+ Mmf2ma1::convert(),Mmf2ma1_memory::convert(),int mmf2ma1_memory_convert()が警告値を戻せるように変更。
+ トラック数が8を超える曲データを(1部分でも)変更することができなかったが、
最大トラック数をメンバ関数で設定できるようにして、指定したトラック数を超えるトラックの内容は無視するようにした。追加した関数は bool set_max_track(UINT16)。デフォルトの最大トラックは4。
+ Seek & Phrase Info Chunkに対応。
+ P2000020200の不具合を修正。2トラックある曲データのトラック0がトラック1よりも早く終わる場合にassertionが発生する不具合。
近期下载者:
相关文件:
收藏者: