goo blog サービス終了のお知らせ 
「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



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/

フォーマットは見えたので、あとはこれ利用して
なにか作ってみたいな。



コメント ( 2 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする



« max2ボードで... 光学マウス »
 
コメント(10/1 コメント投稿終了予定)
 
 
 
Unknown (tokoya)
2009-03-05 00:02:07
これを使ってWAVファイルをUSBメモリから読み出すのはどうでしょう?
http://csun.up.shopserve.jp/SHOP/200902015.html
 
 
 
Unknown (nekosan)
2009-03-05 21:03:43
tokoyaさんこんにちは。

USBメモリから読み出しですか。
とすると、マイコンをUSBマスターにするってことですね?

うーん、CDCとかHIDとしてPCに繋いでみようっていうのは考えてたんですが、USB側をマスターにしてみるのはその後かな…と思っていました。

とりあえずはSPI接続でMMC/SDカード上のwavファイルをスタンドアロンで再生してみるとか、その辺りが直近のゴールでしょうかね…

ご紹介のサイト、CH375というチップ…。寡聞で存じませんでしたが、このチップ自体がMass Storage ClassドライバやFATファイルシステムの機能を持ち合わせているんでしょうかね?それともマイコン側?

いずれにしても、マイコンと接続して使うには便利そうなモジュールですねぇ。
 
コメントを投稿する
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。