質問: WAVファイルに書かれたデータの意味について
回答: 概ね質問者さんの理解でまちがいありません。 8bit モノラルのWAVファイルの場合、80h=128dを原点とするようなオフセットがかかっています。 つまり、無音は、80hの連続であり、 たとえば、0.0, 0.7, 1.0, 0.7, 0.0, -0.7, -1.0, -0.7, 0.0, ... といった交流信号波形のデータは、 80 D8 FF D8 80 27 01 27 80 ... というバイト列になります。 マイコンで直接交流を出力することはできませんが、このPCMデータをそのままPWMの数値として処理すると、 無音 80h = 1/2 Vcc 電圧出力になり、 +1.0 (FFh) ≒ 1.0Vcc電圧出力 -1.0 (01h) ≒ 0V電圧出力 になります。この出力信号から、コンデンサを通すなどして 1/2 Vcc の直流成分を取り除けば、-1/2Vcc~+1/2Vcc の間で変化するという、波形データが示すのと同じ交流信号が作り出せることになります。 8bitのPCMデータをそのままPWMに出力できるというのは、8bitPCMデータの「80hのオフセット」が、PWMの出力にも適しているので、たまたま何も変換する必要がなかった、ということなのです。 > WAVEファイルの1バイトのデータを0から255までのグラフにするとWAVEエディタのグラフと同じ形になるという事でよいのでしょうか? 「形」は同じになります。 上述のように、WAVEデータにおいてバイト値80hが電圧0になりますので、WAVEエディタは、それを中心に波形を表示しています。 0から255までの数値としてグラフにとると、マイナスの数が出てこない、上にずれたグラフになることは注意してください。 なお、以上は、WAVファイルの8bit型式の場合での話になります。 WAVファイルの16bit型式の場合、2の補数型式のデータ表現になっていますので、このような考え方は使えません。 0000h が電圧0で、 出力値が増えると 0000→0001→0002→0003 ...と値が増えていき、最大値が7FFFh。 出力値が減ると、0000→FFFF→FFFE→FFFD...と値が減っていき、最小値が8001h。 といった表現形式になっています。