windowsでよく使われるようなwavファイル
をマイコンのPWMなんか使って再生したり、逆に
AD変換したデータをwavファイルに取り込んだり
したいな、などと思ってフォーマットを調べて
いました。
まぁwavファイルのフォーマットについては
以前トランジスタ技術SPECIAL (No.72) で概要
を読んで、RIFF形式の簡単なデータだということ
は知ってたんですが、バイナリデータって言うと
いろいろ細かいことがあるので(エンディアンの
話とかもろもろ)、自分で直接弄るのは…
と二の足を踏んでいたんですが、実際に中身を覗いて
みるとやっぱり大した事はないようでした。
手元にあったwavファイルを題材に、
http://oku.edu.mie-u.ac.jp/~okumura/wavefmt.html
こちらで公開されているC言語のプログラムをそのまま
コンパイルしてみると、WAVファイルの中身を
テキストファイルに整形したものが得られます。
こんな感じ。
[RIFF] (94756 bytes)
[WAVEfmt ] (16 bytes)
Data type = 1 (1 = PCM)
Number of channels = 2 (1 = mono, 2 = stereo)
Sampling rate = 44100Hz
Bytes / second = 176400
Bytes x channels = 4
Bits / sample = 16
[data] (94720 bytes)
-748 878
54 1435
805 922
805 -53
411 -569
254 -389
354 121
415 602
415 850
412 715
281 288
65 1
131 129
(以下延々と続く)
ちなみにこいつの中身をバイナリビュアーで
見てみるとこんなかんじ。

うん。想定どおりの中身。ちゃんとリトルエンディアン
で入ってるんだな。数値を10進表示してみると
先ほどのC言語のツールと一致するのがわかります。
これだけ判ってしまえば、マイコンで扱うのも
大した話じゃないはずなんだけど、あと問題は
マイコンでfatを扱う話だな…。fatが
読み書きできないと、あえてwavフォーマットを
使う意味が無いからな…
Chanさんのfat用ライブラリをつかえば
それなりに簡単に行くんでしょうけど、まだ
使ったことないから、使い方を理解する手間は
有るかな。
他の音声フォーマットと違って、wavフォーマット
の、しかもごく普通のPCMならAD変換の値を
そのまま使えるから、ちょっとしたものなら簡単に
作れそう。ADPCMとかだと圧縮やらなにやら
面倒だけど、単なるPCMだからな…。
PCMなら…と書きましたが、1サンプルあたりの
ビット数が8ビットと16ビットの場合では、
符号あり/符号無しのあつかいが異なるみたい。
8ビットの場合は無音が128(=0x80)で、
16ビットの場合は無音が0(=0x0000)に
なるみたい。つまり16ビット表現の場合は
2の補数表示ってことね。
くわしくはこの辺りに…。
http://www.kk.iij4u.or.jp/~kondo/wave/
フォーマットは見えたので、あとはこれ利用して
なにか作ってみたいな。



|
http://csun.up.shopserve.jp/SHOP/200902015.html
USBメモリから読み出しですか。
とすると、マイコンをUSBマスターにするってことですね?
うーん、CDCとかHIDとしてPCに繋いでみようっていうのは考えてたんですが、USB側をマスターにしてみるのはその後かな…と思っていました。
とりあえずはSPI接続でMMC/SDカード上のwavファイルをスタンドアロンで再生してみるとか、その辺りが直近のゴールでしょうかね…
ご紹介のサイト、CH375というチップ…。寡聞で存じませんでしたが、このチップ自体がMass Storage ClassドライバやFATファイルシステムの機能を持ち合わせているんでしょうかね?それともマイコン側?
いずれにしても、マイコンと接続して使うには便利そうなモジュールですねぇ。