ここから本文です

WAVファイルに書かれたデータの意味について

jia********さん

2011/7/2418:27:22

WAVファイルに書かれたデータの意味について

Wave形式はPCMの8kHz、8ビット、モノラルです。EEPROMに記録した音声データ(PCMデータ)を順次PIC12F683で読み出してPWMに出力する事で音声を出す事ができるそうです。PCMデータをPWNに出力する事で音声が出るという事は、1バイト事のPCMデータはデューティ比つまり電圧の強さを表すのだから、例えば'7F'と書かれたWaveデータは7F/FFつまり127/256≠0.5いう事で、このデータ一つでは音声データとしては意味をなさないけれど、例えば'7FAFFEAF7F3F013F'→'0.5,0.68,0.98,0.68,0.5,0.24,0.1,0.24'という様に数バイトで一定の周期を繰り返し、その周期が音声というか音そのものの周期になっていると言う事でよいのでしょうか?

判りづらい書き方ですがよろしくご教示の程お願いいたします。

補足更に言えばWAVEファイルの1バイトのデータを0から255までのグラフにするとWAVEエディタのグラフと同じ形になるという事でよいのでしょうか?

閲覧数:
1,454
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

m_t********さん

2011/7/2716:21:07

概ね質問者さんの理解でまちがいありません。

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。
といった表現形式になっています。

この回答は投票によってベストアンサーに選ばれました!

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる