#############################
# コンソール版PCMコンバータ #
#############################

Windows用WAV形式ファイルを、P/ECE用PPD形式ファイルに変換します。

----
特徴
----

P/ECE開発環境標準のPiecePCMConverter(ppcmcnv.exe)に較べて、次のような特徴があります。

・「PiecePCMConverter」では、あらかじめサウンドレコーダーなどを使って
　入力ファイル形式を「リニアPCM・16000Hz・8/16ビット」にしておかなければいけません。
　「コンソール版PCMコンバータ」は、前段の形式変換をツール自身が行うので、
　入力ファイル形式は何でも構いません。例えば、「MS ADPCM形式・44000Hz」とかでもOKです。

・「PiecePCMConverter」では、出力形式は入力形式に依存する場合がありました。
　例えば、入力形式が16ビットなら、出力形式も16ビットになりました。
　「コンソール版PCMコンバータ」は、入力形式によらず、出力形式を指示することができます。

・「PiecePCMConverter」では、ADPCM可変周波数の出力形式に対応していません。
　従って、16000Hz以外のPPDファイルは作成できませんでした。
　「コンソール版PCMコンバータ」は、ADPCM可変周波数の出力形式に対応しています。
　例えば、「ADPCM可変周波数・8000Hz」などを指示して、ファイルサイズを小さくできます。

------------
簡単な使い方
------------

たぶん、いちばんよく使われるPPDファイル形式は、「ADPCM・16000Hz固定」だと思います。

「ADPCM・16000Hz固定・テキスト(C言語形式)」を指示して、sample.wav→sample.c変換を行うには：
        dppcmcnv -t -fa sample
とタイプします。

「ADPCM・16000Hz固定・バイナリ」を指示して、sample.wav→sample.ppd変換を行うには：
        dppcmcnv -b -fa sample
とタイプします。

とりあえず、この二つの使い方だけで充分だと思います。

------------
詳しい使い方
------------

コマンド書式は次のとおりです

	dppcmcnv [options] <filename.wav>

入力ファイル名の拡張子「.wav」は省略可能です。

次に、オプションの詳細説明を行います。

・タイプ指定オプション

	-t		C言語形式のテキストファイル(.c)を出力します。
	-b		バイナリファイル(.ppd)を出力します。

・フォーマット指定オプション

	-fp		リニアPCM形式に変換します。
			入力WAVファイルが8bitなら、8bitリニア形式(PW_TYPE_8BITPCM)になります。
			入力WAVファイルが16bitなら、16bitリニア形式(PW_TYPE_16BITPCM)になります。
	-fp8		8bitリニアPCM形式に変換します。
			入力WAVファイルのbit数によらず、8bitリニア形式(PW_TYPE_8BITPCM)になります。
	-fp16		16bitリニアPCM形式に変換します。
			入力WAVファイルのbit数によらず、16bitリニア形式(PW_TYPE_16BITPCM)になります。

	-fa		4bitADPCM形式に変換します。

	-fv		4bitADPCM可変周波数形式に変換します。
			周波数は、入力WAVファイルの周波数と同じになります。
			ただし、入力WAVファイルの周波数が16000Hz以上のときは、16000Hzになります。
	-fv(周波数)	4bitADPCM可変周波数形式に変換します。
			周波数は、入力WAVファイルの周波数によらず、(周波数)で指定された値になります。
			例えば「-fv8000」と指定すると、8000Hzになります。

・その他のオプション

	-o(ファイル名)	出力ファイル名を指定します。
			このオプションを指定しない場合、出力ファイル名は入力ファイル名の拡張子を変更したものです。
			テキスト形式の場合は「入力ファイル名.c」、バイナリ形式の場合は「入力ファイル名.ppd」です。
			-oオプションを使うと、入力ファイル名や出力形式に依存せず、出力ファイル名を指定できます。
			例えば「-opiece.dat」と指定すると、出力ファイル名は「piece.dat」になります。
	-l(ラベル)	テキスト形式出力時の、C言語配列名（ラベル）を指定します。
			このオプションを指定しない場合、C言語配列名は入力ファイル名と同じになります。
			例えば入力ファイルが「piece.wav」の場合、C言語配列名は「PIECE[]」になります。
			-lオプションを使うと、入力ファイル名に依存せず、C言語配列名を指定できます。
			例えば「-lCRYSTAL」と指定すると、C言語配列名は「CRYSTAL[]」になります。
	-p(ﾌﾟﾚﾌｨｸｽ)	前述のとおり、-lオプションを指定しない場合、C言語配列名は入力ファイル名と同じになりますが、
			-pオプションを使うと、入力ファイル名の前にプレフィクス文字を置くことができます。
			例えば入力ファイル名が「piece.wav」の場合、「-pSND_」と指定すると、
			C言語配列名は「SND_PIECE[]」になります。
	-q		詳細なメッセージを表示しません。
			このオプションを指定しない場合、次のような詳細メッセージが表示されます。
				IN  FILE : test.wav
				OUT FILE : test.ppd
				OUT TYPE : BINARY
				OUT FMT  : ADPCM
				OUT LABEL: TEST
				OUT SMPL : 16
				OUT RATE : 16000
			これらの詳細メッセージ表示が不要な場合は、-qオプションを指定してください。

----------------------------
Sun Jul 21 19:00:00 JST 2002
Naoyuki Sawa
nsawa@north.hokkai.net
----------------------------

---------------
2006/07/17 追記
---------------

以下のバグを修正しました。

・変換元のwavファイルが大きい場合に、不正なppdファイルを出力することがあった。
　具体的には、変換元のwavファイルが数十秒以上の長さで、出力形式が可変周波数ADPCM形式の場合、
　出力されるppdファイルのPCEWAVEINFO.lenフィールドが、誤ってマイナスになることがありました。

今回の修正により、このバグは無くなりました。

==================
Mon Jul 17 2006
Naoyuki Sawa
nsawa@piece-me.org
==================

---------------
2006/12/19 追記
---------------

・2bitADPCM可変周波数(独自拡張)を追加しました。
  CLiPライブラリで再生します。

	-fx(周波数)	2bitADPCM可変周波数形式に変換します。
			周波数は、入力WAVファイルの周波数によらず、(周波数)で指定された値になります。
			例えば「-fx8000」と指定すると、8000Hzになります。

==================
Tue Dec 19 2006
Naoyuki Sawa
nsawa@piece-me.org
==================

---------------
2006/12/20 追記
---------------

・2bitADPCM可変周波数(独自拡張)のエンコードにおいて、⊿値が大きくなりすぎないよう、制限を設けました。
  この制限の理由については、keep/2-bit ADPCMの参考資料/Adpcm2bit/main.cのコメントを参照してください。

==================
Wed Dec 20 2006
Naoyuki Sawa
nsawa@piece-me.org
==================

---------------
2011/06/06 追記
---------------

・先頭と末尾から、連続する無音部分をカットする機能を追加しました。(オプション-c[level])
  -cオプションを指定しなければ、これまでの動作と変わりありません。
・「-c0」～「-c99」で指定してください。又は、「-c」は「-c0」と等価です。
  「-c0」と、-cオプションを指定しないのとは、等価でない点に注意してください。
  「-c0」は、音量0%以下が連続する部分をカットしますが、-cオプションを指定しなければ一切カットしません。

==================
Mon Jun 06 2011
Naoyuki Sawa
nsawa@piece-me.org
==================
