// 
// Sound Player Lilith for Unicode OSs DDE コマンド仕様
// 
// 2001/7/8  Written by Otachan
// 2001/9/26 Modified by Nv
// 2002/05/17 Modified by Nv
// 2002/10/17 Modified by Nv
// 2003/07/01 Modified by Nv
// 2008/10/18 Modified by Nv
// 2008/10/27 Modified by Nv
// 2008/10/28 Modified by Nv
// 2009/09/06 Modified by Nv

・コマンドライン形式。コマンドとパラメータで指定する。
  パラメータがないコマンドも存在する。

・コマンドとパラメータ間はスペースで区切る。

・矛盾するパラメータや、パラメータに１つしか許されて
  いないのに複数現れた場合は後者を採用する。

・コマンドが省略されてパラメータだけが現れた場合は、
  直前のコマンドのパラメータとみなす。
  一番最初(プレイヤーが起動した直後)は /open が指定
  されているものとみなす。

・コマンド名の大文字・小文字は区別しない。

・コマンド名は / から始まる。

・/play 等の操作は、ファイルをいったんプレイリストに
  格納(/add or /open)、またはダイレクトにオープン(/dopen)
  した後でおこなう。

・現在のところ、エラーがおきたときは無視する。(考えない)

・ファイル名は "" で括っても括らなくてもいい。ただし、
  間にスペースが含まれる場合は "" で括らなければならない。

・サービス名もトピック名も "uLilithDdeControl"
※ 旧 Lilith とは別にコントロールできるよう、変更されているので注意。

・返り値も、大文字小文字を区別しないで判断すること

=================================================
☆  ===== XTYP_EXECUTE 系 =======================
=================================================


●プレイリスト操作系
-------------------------------------------------
/add "ファイル名" "ファイル名" ...

ファイルをプレイリストに追加する

一番最初(プレイリストが空の状態)に追加したときは、
/pos 0 する
-------------------------------------------------
/delete [番号 | all | clearonly]

プレイリストを削除する

0 〜 ?????

all が指定されたときは全部削除する
all の指定では、再生中のファイルはクローズされる
clearonly の指定では、リスト削除のみ行い、
オープン中のファイルのクローズは行わない
-------------------------------------------------
/pos [番号]

プレイリスト内の [番号] に位置を合わせる
0 〜 ?????

-1が指定された時には、リストの末尾の番号を指定したとみなす｡
-------------------------------------------------


●プレイリスト操作補助系(ファイルオープン)
-------------------------------------------------
/open "ファイル名" "ファイル名" ...

プレイリストを削除(/delete all)し、ファイルをプレイリストに
追加(/add)し、プレイリスト内の位置を最初(/pos 0) にし、
更にその先頭ファイルをオープンする

/delete all /add "ファイル名" "ファイル名" ... /pos 0
と同じ意味

複数のコマンドを指定するのが面倒なので /open で
一括指定できるようにする
-------------------------------------------------
/dopen "ファイル名"

プレイリストを介さないでファイルをオープンする
フォルダやリストファイル、cue シートなどを与えたときは、
最初に見つかったファイルのみオープンされ、
それ以外の結果は破棄される。

/dopen "ファイ名" /play 等として使用する
-------------------------------------------------
/addopen "ファイル名"

ファイルをプレイリストに追加(/add)し、
プレイリスト内の位置を追加したファイルの先頭にし、
更にその先頭ファイルをオープンする
旧 Lilith の関連付け『追加して再生』と同じ動作。

-------------------------------------------------
/addopenparent "ファイル名"

指定したファイルがあるフォルダをプレイリストに追加(/add)し、
プレイリスト内の位置を追加したファイルの先頭にし、
更にその先頭ファイルをオープンする
-------------------------------------------------

●演奏制御系
-------------------------------------------------
/seek [シーク時間(ms)]

プレイリストの現在位置にあるファイルをシークする

%、ms、byte 等の単位はプレイヤー依存
デフォルトは ms
Lilithは % sec ms byte sample に対応している
-------------------------------------------------
/play

プレイリストの現在位置にあるファイルをオープンし、
演奏を開始する。
既にファイルがオープンされている場合は、
それを再生する。
演奏の挙動は、/playmode によってあらかじめ指定して
おく
-------------------------------------------------
/newplay

※ uLilith では廃止予定
プレイリストの現在位置にあるファイルをオープンし、
演奏開始する。
既にファイルがオープンされている場合も、
それをクローズしてから
新たに現在位置のファイルをオープンする。
演奏の挙動は、/playmode によってあらかじめ指定して
おく
-------------------------------------------------
/pause

現在演奏中のファイルを一時停止する
既に一時停止されている場合は演奏再開
-------------------------------------------------
/stop

現在演奏中のファイルを停止し、クローズする
-------------------------------------------------
/playmode [1shot | repeat | normal | shuffle]

/play したときの演奏方法を指定する

1Shot 演奏(1曲再生し終わったあとは演奏停止する)・
リピート演奏・順次演奏・シャッフル演奏…等
※ uLilith で引数の名称が変わっているので注意
-------------------------------------------------
/volume [ボリューム(%)]

再生音量を0〜100の範囲で変更する
-------------------------------------------------
/equalizer [on | off]

イコライザをON/OFFする。


>なお、現時点のプレイヤー側実装では、
>ファイルがオープンされている状態では、
>即座に反映されない。
>その場合、次のファイルオープン時から反映される。

Ver.0.990以降からは即座に反映される。
ただし、ON->OFFはフィルタパスからイコライザが削除
されるのではなく、FLAT設定に変わるのみ。
次のファイルオープンからは、
フィルタパスにイコライザが追加されなくなる。

-------------------------------------------------
/next

既定の切り替え方法に従って、リストの次の曲へ切り替える。
-------------------------------------------------
/back

規定の切り替え方法に従って、リストの前の曲へ切り替える。
-------------------------------------------------
/changemode [nonstop | crossfade]

曲が末端に達したときに、次の曲へどのように切り替えるかを指定する。
nonstop = ノンストップ(ギャップレス)切り替え
crossfade = クロスフェード切り替え
-------------------------------------------------


●プレイヤー制御系
-------------------------------------------------
/exit

プレイヤーを終了する
-------------------------------------------------
/windowmode [window | minimize]

プレイヤーのウィンドウモードを設定する
※ uLilith では、tasktray ではなく minimize に変更
-------------------------------------------------
/regist

※ uLilith では廃止予定
レジストリの規定のキーに実行ファイルのパスを書き込む
"HEKY_CURRENT_USER\\Software\\Project9k_Lilith\\Path"
   = "X:\\InstallDirectory\\ExecutionName.exe"
-------------------------------------------------
/unregist

※ uLilith では廃止予定
レジストリの規定のキーの実行ファイルのパスを削除する
-------------------------------------------------
/command [コマンドＩＤ]

※ uLilith では廃止予定
任意のコマンドを実行させる。
指定するＩＤは、添付のコマンドＩＤ一覧.txtを参照のこと
-------------------------------------------------
/topmost [on | off]

最前面表示をON/OFFする。
-------------------------------------------------
/activate

Lilith本体をアクティブウィンドウ化する
(内部でSetForegroundWindowを使用する)
-------------------------------------------------
/pitchscale [on | off] 音程設定値

再生コントロールの音程変更をON/OFFおよび、設定値を変更する。
シングルアクションで、OFFの状態から任意の値での
ON状態へ変更できるように、ON/OFFフラグと
音程設定値をセットで指定する。
音程の範囲は、-120〜+120 (単位:cent 1centは1/10半音)

音程設定値は省略することも可能。
省略した場合は、0が指定される。
-------------------------------------------------
/freqscale [on | off] 周波数倍率設定値

再生コントロールの周波数変更をON/OFFおよび、設定値を変更する。
シングルアクションで、OFFの状態から任意の値での
ON状態へ変更できるように、ON/OFFフラグと
周波数倍率設定値をセットで指定する。
周波数倍率の範囲は、50〜200
(単位:% 100〜200は、常に偶数値になるよう切り捨てられる)

周波数倍率設定値は省略することも可能。
省略した場合は、100が指定される。
-------------------------------------------------
/timescale [on | off] 速度倍率設定値

再生コントロールの再生速度変更をON/OFFおよび、設定値を変更する。
シングルアクションで、OFFの状態から任意の値での
ON状態へ変更できるように、ON/OFFフラグと
速度倍率設定値をセットで指定する。
速度倍率の範囲は、50〜200
(単位:% 100〜200は、常に偶数値になるよう切り捨てられる)

周波数倍率設定値は省略することも可能。
省略した場合は、100が指定される。
-------------------------------------------------
/facefile "ファイル名"

指定したファイル名のフェイス定義ファイルを読み込み、
フェイスを変更する。
ファイル名はフルパスが望ましい。
フルパスで指定されていない場合、
インストールフォルダ内の Face フォルダを
基準フォルダとした相対パスとして解釈される。
指定されたフェイスが既に使用されている場合、
および、アプリケーションが最小化あるいはアイコン化
されている場合は、何も行わない。
-------------------------------------------------



=================================================
☆  ===== XTYP_REQUEST 系 =======================
=================================================


●プレイリスト操作系
-------------------------------------------------
/max

プレイリスト内のファイルの総数を返す
-------------------------------------------------
/pos

プレイリスト内の現在の位置を返す
-------------------------------------------------

●状況取得系
-------------------------------------------------
/status

プレイヤーの現在の演奏状態を返す

play、pause、stop を返す

演奏開始直後で、ロードしたファイルを解析中で忙しい
状態の場合は、play を返してくれるとありがたいです。
-------------------------------------------------
/seek [ms | % | byte] (単位はプレイヤー依存)

プレイリストの現在位置にあるファイルのシーク位置を
返す

デフォルトの単位は ms

Lilithは % sec ms byte sample に対応している

% を指定するときは、100% が MAX だと大雑把すぎるので、
1000%(= 100%) くらいを MAX にしておくといいかも…
-------------------------------------------------
/windowmode

プレイヤーのウィンドウモードの状況を返す

window、minimized を返す
※ uLilith では、tasktray を minimized に変更
-------------------------------------------------
/volume

再生音量を0〜100の範囲で返す
-------------------------------------------------
/equalizer

イコライザの設定状態を返す。
on、off を返す。
-------------------------------------------------
/program

実行モジュールのフルパス名を返す。
-------------------------------------------------
/topmost

最前面表示かどうかを返す。
on、off を返す。
-------------------------------------------------
/query_dde_status

プレイヤーが正しくDDEメッセージを処理できる状態か
どうかを問い合わせる。

dde_acceptable または、それ以外が返る

プレイヤー起動直後には、dde_acceptableが
返ってこない場合がある。
dde_acceptableが返らなかった場合、
その時点でのDDEメッセージの正しい処理は期待できない。
dde_acceptableが返るまで、待機＆再送を繰り返すべき。
一度dde_acceptableが返った後は、
正しいDDEメッセージの処理を期待できる。
-------------------------------------------------
/fileinfo [FileName | FileType | BitRate | Bits |
 Samplerate | Mode | Title | Artist | Album |
 Date | Track | Genre | Comment | PlayTime | Length |
 IsVBR | FilePath | FileExt ]

現在再生中のファイルの該当するタグ情報を文字列で返す
-------------------------------------------------
/playmode

現在の再生モードを返す。
Normal, Repeat, Shuffle, 1Shot のいずれかである。
-------------------------------------------------
/changemode

現在の切り替えモードを返す。
NonStop または CrossFade のどちらかである
-------------------------------------------------
