NEC PC-6001/PC-8001 USBメモリのwavファイルをCMT読み込みする


今回は、PC-6001のカセットテープをwavファイルに取り込んでCMT読み込みに挑戦してみます。

wavファイルを入れておくメディアですが、一般にはSDカードが使われますが私はUSBメモリを使うことにします。
しかし、いざやってみると問題が多いのなんのって。

(1) STM32F4x1のUSB HOSTはFull Speed 12MBbpsしかサポートしていないため、転送速度が1MB/sec程度しか出せない
(2) サンプリングレート44100Hzの場合、44.1kBの転送速度を満たせれば良いがFATFSのオーバーヘッド分が必要
(3) フラッシュのアクセスは1セクタ単位では性能が出ないため、一度に複数セクタを読む必要がある
(4) STM32F401CDUのメインメモリは96kBしかないため、複数セクタ読み込みに十分なバッファを確保できない
(5) CPUクロック48MHzとすると、サンプリングレート44100Hzを処理するにはタイマ1回あたり1088のクロック分しか処理できない
(6) FAT LFNとexFATはマイクロソフトが特許を持っているため、商用利用にはライセンス契約が必要

とりあえずやってみて、駄目なら諦めます。
ちなみに(6)については個人利用は対象外なので、自分用に作ってにニヤニヤしながら使う分には全く問題ありません。

FATFSを使うのは今回が初めてなのですが、汎用的なライブラリなのでそれほど難しくはありませんでした。
ただ、タイマ割り込み内で使うとウォッチドッグタイマが発動してフリーズします。
また、複数セクタ読み込みするとフラッシュ読み込みに時間がかかってしまうため、対策として読み込みバッファを2つ用意しました。

ということで、結構苦労しましたが完成です。

・メモリ節約のためwavファイル名は64文字まで
・ファイル数は256まで
・playフォルダにwavファイルを置く
・wavファイルのサンプリングレートは44100Hz、8ビットモノラル
・ファイル名が長すぎる場合はスクロールして表示
・ファイル名の漢字、カナ表記には未対応
・録音には未対応

それでは動作確認です。
PC-6001ではT&Eソフト ピラミッド、すぺーすまうすなど、月刊I/O形式のBASIC+マシン語でも読み込めました。
PC-8001もBASIC、マシン語共に読み込めます。
残念ながらPC-8801は途中でエラーになりました。
1200Hzと2400HzでdB値が異なることが原因でしょうか?
さすがにdB値を可変にするにはDACを使わないといけないので対応できません。
PC-8801については宿題です。

ということで、PC-6001とPC-8001に関してはwavファイルから読み込みできるようになりました。
よく考えると、これってボイスレコーダーや音楽プレイヤーをデータレコーダ代わりに使っているのと変わらないんですよね。
ただ波形を見てみると、やはり音響用とデータレコーダは録音・再生方式が違うみたいです。
実際にラジカセで取り込んだwavファイルとデータレコーダで取り込んだwavファイルを比較すると、ラジカセは正弦波なのですがデータレコーダは矩形波になっています。
まあ正弦波でも読み込みはできるんですけどね。






戻る