SDカードアクセスができるようになったので、通話音声を録音してみます。とりあえずは、相手側の音声だけを録音です。録音は常におこなうこととし、オフフックした時点でファイル(rec.wav)をオープンすることにしました。WAVファイルのヘッダを書いたら、あとは20ms毎に160バイトづつ書き込んでいくだけです。そしてオンフックされたらヘッダ部分のデータ長部分を更新してファイルをクローズさせます。以下、動作の様子。
> Off-Hook -I- SD/MMC card initialization successful -I- Card size: 1882 MB -I- Block size: 1024 Bytes DTMF: 1 DTMF: 7 DTMF: 7 ATDT177##0 CONNECT 120000 connected!! PROGIND:1 On-Hook ATH SD_Stop newname = rec118.wav SD_Stop DISC OK >ファイルをクローズしたら、ファイル名を変更しています。今のところブートからの経過秒数をつかってrecXXX.wavという名前にすることにしています。上の例の場合には、以下に示すようにrec118.wavというファイルが作成されています。ホントはファイル名で日付/時刻も表現したいところですが、LFNが使えないのでこれで我慢です。
> fat -I- SD/MMC card initialization successful -I- Card size: 1882 MB -I- Block size: 1024 Bytes shows directory list... --------------------- 6676127 2008/11/23 21:09:54 AT91SA~1.PDF 461024 2008/12/10 18:58:04 AT91SA~2.PDF 245178 2009/01/01 00:00:00 rec118.wav 122 2009/01/25 13:59:44 sample.txt --------------------- dumping sample.txt... --------------------- This is a sample text file created on the Windows. If you can read this message, it means you can access the FAT file. --------------------- >Windows Media Playerで再生してみましたが、問題なく録音できているようです。とは言っても、改善すべき点もいくつかあります。
- カードの抜挿を検出していないので、オフフックする度にf_mount操作をおこなっている。抜挿を検出して無駄なf_mountを無くしたい。
- 相手側音声しか録音していないので、ほんとの会話録音にはなっていない。上り音声も録音すべき。ミックスするまでもなく、ステレオ形式で書き込んで簡単に対応してしまおうかと考えています。
- やっぱり、ファイルにタイムスタンプが無いのは淋しいなぁ
f_mount()を実行すると、fs_typeがクリアされますが、auto_mount()ではこの値がクリアされていると disk_initialize()を呼び出すようになっています。したがい、f_mount()をしておけば、その後でSDの初期化手順が走ることが保証されることになります。
そうなるとオフフックする度にf_mount操作でも良い様な・・・