カセットテープにデータを記録

投稿者: | 2012年3月19日

人生で初めて使い始めた Macintosh には、既に内蔵ハードディスク、CD ドライブ、FD ドライブが搭載されていたので、コンパクトカセット(音楽カセットテープ)を補助記憶媒体としてリアルタイムに使った事がありません。父が使っていた MZ-700 を譲り受けて持っていますが、肝心のデータレコーダのゴムが劣化していて、まともに使えないのが残念です。
中学生の頃までコンパクトカセットを使って、よくラジオで流れていた好きな音楽を録音していました。そんなコンパクトカセットにデジタルデータが記録されるのが、ひどくアナログな雰囲気だけど、ちゃんとデジタルなところが魅力的で、試してみたいなあ、と考えて、MP3 プレイヤーが 500 円で買えるご時世に、安いステレオラジカセを購入した事もありました。
古いコンピュータのエミュレータ環境のツールの一つとして、コンパクトカセットの情報をデジタルデータに変換するコンバータ・ソフトは、Windows ではよく見かけていました。
Linux で使えるものはないな、と思いリポジトリを漁ってみましたが、需要がなかった模様。
アマチュア無線関連のツールや本物(?)のテープレコーダ用のツール( tar )はあっても、民生用カセット向けのツールは乏しいみたいです。

そこで、Wikipedia でデータレコーダの項を調べてみると、

情報を FSK などの変調方式でオーディオ周波数帯の信号に変調して記録するもので、代表的な記録方式にKCS(カンサスシティスタンダード)があり1200Hz/2400HzのFSK方式で300bpsの記録ができた。NECのPC-8000シリーズなどではキャリア周波数はそのままでシンボル長のみ短縮した600bpsでの記録を標準としていた。シャープのMZシリーズではコンピュータ本体に直接内蔵され、ソフトウェア制御によるパルス幅変調方式で記録を行い、他の機種と比較し、エラーの少ないアクセスと共に、1200bpsの速度を実現していた。

という記事が見つかった。この KCS という記録方式を元に検索してみると、py-kcsというツールを見つけました。Python で書かれた KCS 方式のエンコーダ・デコーダらしい。入出力対象の音声ファイル形式は WAVE。使えそうです。

ダウンロード

http://linux.softpedia.com/get/Multimedia/Audio/py-kcs-59693.shtml

使い方

[bash]

Python 3.1.2 以降が必須。

テキストファイルを音声データにエンコード。

python3 kcs_encode.py input.txt output.wav

音声データをデコードし、内容を標準出力に印字。

python3 kcs_decode.py input.wav

RAW なバイナリデータとして印字する場合は -b オプションを用いる。

python3 kcs_decode.py -b input.wav
[/bash]

作者によるページでは、実際に Ohio Scientific Superboard II という 70 年代のボードに音声信号で BASIC プログラムを転送しています。楽しそうだなあ。

ちょっと使ってみる

Python 3.2 の環境を整えた後、py-kcs をダウンロードしてきます。解凍すると、kcs_decode.py と kcs_encode.py というスクリプトが得られます。

[bash]

試しに、README.txt をエンコードしてみる。

$ python3 kcs_encode.py README.txt hoge.wav

再生してみると、懐しいノイジーな音が出てくる。

$ mplayer hoge.wav

ここで、コンピュータの Line Out または Headphone 端子とラジカセの Line In

または Mic 端子をミニジャックで接続し、コンパクトカセットに録音後、すかさず

$ cat hoge.wav > /dev/dsp

する。再生が終わったら(手元の環境では1分58秒だった)、録音を停止。

[/bash]

これで多分、デジタルデータのアナログ音声化&カセットテープに保存が完了します。
次に、カセットテープを巻き戻し、

[bash]

冒頭の 5 秒くらいのところから再生をスタート。すかさず

$ cat /dev/dsp > fuga.wav

する。再生が終わったら、C-c してコンピュータ側の録音を停止。

得られた fuga.wav に対して、

$ python3 kcs_decode.py fuga.wav > README.new.txt

して、README.new.txt の内容が、正しく復号されたものか確認する。

$ cat README.new.txt
[/bash]

上記の要領で行けるだろうと思いました。

手元にラジカセがなかったので、試しに、変換した WAVE ファイルを一度、MP3 ファイルに変換し、再度 WAVE ファイルにデコードし直してから、kcs_decode に食わせてみました。
すると、一応デコードはしてくれましたが、文字化けをした意味の無いバイトコードが生成されてしまいました。

んー、データの維持に問題がありそうな周波数の変更はしていないし、そんなに劣化させてないハズなんだけどな。
やり方がマズかったのか。後日、実際にラジカセで試してみたいと思います。

コメントを残す

メールアドレスが公開されることはありません。