Nの世界

【 CMT8001(JAVA版)によるテープイメージ作成方法 】

●はじめに

細かい操作等に関しては、Readme.txt等を参照して下さい。
最もとっつき難いツールですが、慣れれば何が原因で変換に失敗しているか
最も分かり易いと思います。

●対象テープ

600baud、1200baudで保存したN,N88系のテープが対象です。
※P6系も可能との話です。(自分では現時点では確認していませんが)

●Wav音録音設定

以下の条件で録音して下さい。
サンプリングレート 22050Hzもしくは44100Hz
タイプ モノラル
データフォーマット 8ビット
※サンプリングレートのみ変更可能なので、他のレートに変更後、再度挑戦すると
上手く行く場合があるかも知れません。

●JAVAのインストール

このツールを動かすには、JAVAが動作出来る環境が必要なため、JDKもしくはJREをインストール
する必要があります。ちなみにJDK、JREはフリーソフトです。
以下のURLからダウンロードして下さい。(この事は、readme.txtに書いてあります)
JDK
JRE
ちなみに、ファイルの大きさは、40〜50MB位あります。
高速ネット接続環境が無ければ、かなりダウンロードするのに辛いサイズです。
場合によっては、JAVA系の本や雑誌の付録に付いているCDから入手した方が良いかも知れません。
ダウンロードしたら、ダウンロードしたexeファイルを実行してインストールを行います。
後は、良く見かける形式のインストール方式なので、特に問題なくインストール出来ると思います。
インストールが完了したら、Cドライブ直下にあるautoexec.batをテキストエディタで
以下の内容を追加します。
PATH "JDKもしくはJREにBINディレクトリィ"
<例>
PATH E:\APL\SOFT\JDK1.3.1_02\BIN

これを記述しないと、JAVAの命令を毎回フルパスで記述しないといけないため、
かなり実行するのが面倒になります。
※詳しい事は、JAVAを解説してサイトに行った方が良く分かると思います。(爆)

●cmt8001(JAVA版)による基本変換手順

他のツールと違い、GUIではないので、順をおって、変換手順を説明します。
なお、変換対象wavファイルは、cmt8001(JAVA版)と同じディレクトリを置いた方が変換作業は楽です。

1.MS-DOSプロンプトを起動します。

2.cmt8001(JAVA版)をインストールしたディレクトリに移動します。
<例>
cd c:\temp

3.java -jar cmt8001.jar 変換対象wavファイル オプションを実行すると変換出来ます。

<例>
java -jar cmt8001.jar magic.wav -1200(1200ボーの標準変換方法)
java -jar cmt8001.jar magic.wav -600 -inv(600ボー、位相反転での変換方法)
java -jar cmt8001.jar magic.wav -600 -p(600ボー、パリティビット有での変換方法)
java -jar cmt8001.jar magic.wav -1200 -inv -p(1200ボー、位相反転かつパリティビット有での変換方法)

※バッチファイルを作成して変換する場合は、添付されているbatファイルを参考にすると
楽に作成する事が出来ます。(そのままでは、厳密には使用出来ません。)

●オプション補足説明

-inv 位相を反転する。
(波形反転モード)
-p パリティビット有。
-300
-600
-1200
300ボー
600ボー(default)
1200ボー

●ログ(.log)ファイルの読み方

これは、変換に成功した時のログの例です。(-600 -pオプション時)
skip [1 silent 2 2]・・・無音部
skip [2 silent 44546 44548]
skip [3 silent 18 44566]



skip SPACE(392)・・・スペース連続部
skip MARK(1021)・・・マーク連続部
[Start] ------------------------------------------
| 0:01011100:1:1 -> 58 | skip MARK(4)・・・データ本体部
| 0:10001111:0:1 -> 241 | skip MARK(4)
| 0:10101010:1:1 -> 85 | skip MARK(4)



| 0:01011100:1:1 -> 58 | skip MARK(4)
| 0:00000000:1:1 -> 0 | skip MARK(4)
| 0:00000000:1:1 -> 0 | skip MARK(16) -> block terminal
+------------------------------------------ [End]
skip MARK(1840)・・・マーク連続部
skip [19242 warning 148 273702]・・・無視



skip [19575 silent 17 284830]
skip [19576 silent 7 284837]
skip SPACE(338)・・・スペース連続部
skip MARK(1)・・・無視
EOF(magic2.fsk)

ちなみに成功時の画面は、こんな感じです。
成功画面

この例から以下のログの読み方が分かります。
1.skip [1 silent 2 2]の様に、skipとsilentが同時にあるものは、無音部分です。
これは、ログを読む上で、意識する必要はありません。

2.データ本体に入る([Start])前に、ぽー(スペースの連続)とぴー(スペースの連続)があることが
分かります。skip SPACE(392)とskip MARK(1021)の部分が該当します。

3.データ本体は、[Start]から[End]に区切られた区間です。
各データを表す「0:01011100:1:1 -> 58 | skip MARK(4)」の意味は、以下の通りです。

0: 2進数の先頭を表す
01011100 読取ったデータ(2進数)
:1 パリティビット
※-pオプションがない場合は表示されません。
:1 2進数の終端を表す
58 読取ったデータ(10進数)
skip MARK(4) MARK(8):300ボー
MARK(4):600ボー
MARK(2):1200ボーを表す
注意する必要があるのは、2進数の読み方です。
通常の2進数と違い、左から1、2、4・・・の順で読み取ります。
例えば、通常10進数の58を2進数で表わすと、00111010となります。
しかし、今回の形式の場合、逆から表現しているので、01011100となります。

4.データを読み終わると最後に、ぴー(スペースの連続)とぽー(スペースの連続)があることが
分かります。skip MARK(1840)とskip SPACE(338)の部分が該当します。

5.データが読み終わった後のwarning(skip [19242 warning 148 273702])はデータを読み終わった後
なので、無視して問題ありません。
また、最後のマーク(skip MARK(1))もひょろーなので、無視して問題ありません。
まず、この正しく変換出来た例を頭に入れて下さい。

次に失敗例を示します。(-600オプションのみ 成功例と同じデータ)
skip [1 silent 2 2]
skip [2 silent 44546 44548]
skip [3 silent 18 44566]



skip SPACE(392)
skip MARK(1021)
[Start] ------------------------------------------
| 0:01011100:1 -> 58 | skip MARK(8)
| 0:10001111:0 -> pass
| * [1789 S 19 67145]・・・変換失敗
+---------------------------------------- [Reset]
skip MARK(8)・・・尻切れとんぼしたデータ
skip SPACE(2)・・・尻切れとんぼしたデータ



[Start] ------------------------------------------
| 0:00110000:0 -> pass
| * [3057 S 18 83420]・・・変換失敗
+---------------------------------------- [Reset]
skip SPACE(6)
skip MARK(4)



skip SPACE(2)
skip MARK(28)
[Start] ------------------------------------------
| 0:01000000:0 -> pass
| * [4063 S 18 95293]
*err*
error [Reset回数が、10回を超えました]
ビット変換がうまくいっていないようです
Fsk2Cmt 処理を中止します
パリティの有無、ボーレートなどが違っていませんか?
error [4063 S 18 95293]
これは、ビット認識に失敗した例(パリティ有なのに-pオプションを付けていない)です。
ボーレートを間違った場合も同じようなReset回数が10回を超えるエラーログになります。

このエラーログを見る時、やはり最初のエラー発生ログに注目します。
[Start] ------------------------------------------
| 0:01011100:1 -> 58 | skip MARK(8)
| 0:10001111:0 -> pass
| * [1789 S 19 67145]
skip MARK(8)
skip SPACE(2)

最初の「0:01011100:1 -> 58 | skip MARK(8)」は、一見変換に成功しているように見えます。
しかし、skip MARK(8)と表示されるのは、データが300ボーの場合です。
だから、次の「0:10001111:0 -> pass」で、変換に失敗しています。
その変換失敗詳細情報が、次の「* [1789 S 19 67145]」です。
詳細情報の見方を以下に示します。
1789(1番目) エラーログ名.fskファイルのn行目
(この場合、1789行目)がおかしいことを
示しています。
S(2番目) エラーログ名.fskファイルのn行目の
内容(スペース(S)かマーク(M))を
示しています。
19(3番目) エラーログ名.fskファイルのn行目を
cmt8001がどのようにスペース(18が基本?)、
マーク(9が基本?)と認識したかを示す?
(この値を見て、スペース、マークの規則が
崩れていないか?チェックします。)
67145(4番目) エラーログ名.wav(変換元wavファイル)の
nバイト目を1〜3番目のように認識したことを
示しています。

今回、cmt8001でエラーを認識した波形は、以下の通りです。問題がある波形ではありません。
エラー波形

また、その時のエラーログ名.fskファイルの内容は以下の通りです。
エラーfsk

これを見た感じでは、波形に問題がない以上、エラーログの説明にある通り、ボーレート
もしくはパリティビットオプションを見直してリトライすれば良いと分かります。
ちなみに、ボーレートを誤った(-1200)時のログは以下の通りです。
skip SPACE(392)
skip MARK(1021)
[Start] ------------------------------------------
| 0:00011001:1 -> 152 | skip MARK(8) -> block terminal
+------------------------------------------ [End]
skip SPACE(4)
skip MARK(12)
[Start] ------------------------------------------
| 0:01100000:0 -> pass
| * [1771 S 18 66964]
+---------------------------------------- [Reset]



※以下、上記エラーログとほとんど同じにつき省略。

もう一つ失敗例を示します。これはcmt8001側で波形の認識に失敗(-600)した例です。
skip SPACE(1290)
skip MARK(7308)
[Start] ------------------------------------------
| 0:01011100:1 -> 58 | skip MARK(4)
| 0:00001001:1 -> 144 | skip MARK(4)
| 0:00000000:1 -> 0 | skip MARK(4)



| 0:11001111:1 -> 243 | skip MARK(4)
| 0:10000000:1 -> 1 | skip MARK(4)
| 0:10*err*・・・変換失敗個所
error [S(1)/M]・・・変換失敗理由
error [14413 M 13 190592]・・・変換失敗個所の詳細情報

順調に、データ変換に成功しているにも関わらず、途中で、*err*と表示されてリセットなしで
データ変換を終了しています。
この場合、前の場合とは違って、wavファイルの波形が崩れている可能性が高いです。
まず、エラーと認識した波形は、以下の通りです。
エラー波形

また、その時のエラーログ名.fskファイルの内容は以下の通りです。
エラーfsk

今回の場合、目読みで明らかにスペースが2個連なった後、マークが4個あると読み取れます。
つまり、.fskファイルの14413行目の認識がM(マーク)が誤りでS(スペース)が正しい事が分かります。
ということは、このデータは、600ボーにも関わらずスペースが1つしかないのに次にマークが来る
ありえないデータという事になります。
従って、今まで見かけなかったerror [S(1)/M]の「S(1)/M」の意味は、スペースが1つなのに、
次にマークが来ている矛盾したデータがあることを示していることになります。
もし、似たようなエラーが発生した場合は、同じように意味を解釈して下さい。

このような場合、他のwav変換系ツールでは、波形をエディタで加工もしくは、セッティングを変えて、
録音し直す必要性があります。
しかし、cmt8001では、.fskファイルを修正するだけで、エラーリトライを行うことが出来ます。
その方法を説明する前に、.fskファイルの読み方について説明します。

●変換(.fsk)ファイルの読み方

まず、.fskファイルの例を以下に示します。
silent 56
silent 20
warning 58
warning 102



silent 18
silent 18
S 17
S 18



S 17
S 18
warning 55
silent 138



warning 149
silent 47
silent 5
.fskファイルを読む上で注意すべき点は2点だけです。
1つ目は、silent、warningは、データ本体(MもしくはSの開始から終了までの間)以外にあれば、
無視して構いません。逆にデータ本体中にあれば、おかしいので、対象個所の波形をチェックします。
2つ目は、前述のエラーログのところでも話があったオプションで指定したボーレートの形式に
合わないマーク、スペースがあるかどうかです。
もし、合わない信号があれば、波形とその前後の.fskファイルのデータから推測して正しいデータを
見つけ出します。

●エラーリトライ方法(波形異常時)

波形異常時に、.fskファイルのエラー個所のデータを、直接S(スペース)もしくはM(マーク)に
テキストエディタを用いて書き換えます。
この時、括弧の中の数値を書き換える必要はありません。
データを追加削除する必要がある場合、直接データを追加、削除します。
前の例を参考に話をします。エラーリトライを行う前に、まず先ほどの.fskファイルの14413行目を
S(スペース)に書き換えてます。
次に以下のコマンドを実行します。
java -jar cmt8001.jar 変換対象fskファイル オプション

<例>
java -jar cmt8001.jar ultan.fsk -600
ここで指定するオプションは、ボーレートだけを指定します。
ちなみに成功時の画面は、こんな感じです。
成功画面

もし、その先で変換に失敗しても根気良く変換作業を行えば、いつかは変換が完了します。
(ちなみに、この成功画面を出すまで20個所位修正しています・・・。)

●補足説明

以下の情報は、このツールの作者であるHAL8999さんから教えて頂いた情報です。
ほぼ、原文のまま提載しています。この場を借りてお礼申しあげます。
1. バイト列の構成で、末尾の MARK の波数は固定ではありません。
超人ロック(PONYCA)で確認 (波数:0〜上限は忘れた)しています。
また、88や60でも波数が「ぶれる」ものを確認しています。
MARK(wait) が、0 (いきなり SPACE) でも何とか読むようです。
CMT8001(VB版)では、ここを固定にしていたので読めませんでした。
6001 (1200ボー)
| SPACE(1) -> [11101010:1] -> 87 | skip MARK(4)
| SPACE(1) -> [11000010:1] -> 67 | skip MARK(6) ← ココ
| SPACE(1) -> [00000010:1] -> 64 | skip MARK(4)
| SPACE(1) -> [00000010:1] -> 64 | skip MARK(4)
| SPACE(1) -> [00000010:1] -> 64 | skip MARK(4)

8001 (600ボー) 超人ロック
| SPACE(2) -> [11111111:1] -> 255 | skip MARK(4)
| SPACE(2) -> [00000000:1] -> 0 | skip MARK(4)
| SPACE(2) -> [00000000:1] -> 0          ← ココ
| SPACE(2) -> [00000000:1] -> 0 | skip MARK(4)
| SPACE(2) -> [00000000:1] -> 0 | skip MARK(4)

●経験談

cmt8001(JAVA版)を使用していた時に経験した問題点等です。
変換に失敗する場合、もしかするとこの情報が役に立つかも知れません・・・。
1.VB版と比べ、録音音量に依存される事はかなり減ったようです。
録音音量によっては、-invオプション(位相を反転)を付けないと上手く認識出来ないようです。
(家の環境では、-invオプションを付けないと上手く認識しませんでした。
ちなみに録音音量は、VB版時と比べると半分の音量です。(22050Hz))

2.頭と最後のノイズ、無音にも比較的強いです。
ただし、VB版と同じ感覚で、最初のぽー、ぴーの音が極端に短くすると、高確率で失敗します。
また、稀に最初に何故か?終端を認識して、1Byte目にFFを書込む場合があります。
この場合、バイナリエディタを用いて1Byte目のFFを削除します。

3.1200ボーのソフトでも、wavファイルのどこで認識失敗したか?分かるようになりました。
これは、作業を行う上で非常に大きい事です。
P6DatRec(2)では、変換に失敗してもどこで失敗したか分からなかったので、
波形が壊れていると思われるテープソフトがあれば、まずこれでイメージ変換を行い、
エラーログを解析するのが良いと思います。

4.いわゆる特殊フォーマットに対して、現行あるツールの中では、かなり強い部類に入ります。
たとえ、想定していない特殊フォーマットがあったとしても、作者さんに連絡すれば、
対応してくれるかも知れません。(爆)
逆に、雑誌から打込んだプログラム(BASIC,マシン語)の変換は、意外と変換に失敗する
ケースが多い気がします。(この場合、WavT88であっさり変換出来る事が多々あります。)


【 P6DatRec(2)によるテープイメージ作成方法 】へ続く



[戻る]