- ベストアンサー
24ビットのWaveデータの中身について
バイナリ表示ソフトで中を覗いて、 3バイトずつ入っていることまで確認できたのですが、 実際10進数に直すとどうしても数値と波形が合いません。 一番左が符号だとすると正側に波形の山を波形ソフトで描き データを見ると000000,84D30E,EF3D24,64A53A,000000 となっていて64A53Aだけ他の2つと符号が違うのですが 24ビットのWAVEデータを数値にするにはどうすればいいんでしょうか? 3バイトずつ読み取るのがそもそも間違ってるんでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
24bitのWaveデータと言うならば、今、巷に出回っているのは「Roland 24bit WAVE/MP3 RECORDER R-09HR」で使われている「96kHz リニアPCM 24bit モノラル(1チャンネル)」だろうと思われます。 本当であれば、サンプリング周波数の「96kHz」とチャンネル数の「1」は、Waveファイルのヘッダを見ないと決められないのですが「今、実際に多く使われているのは、96kHz リニアPCM 24bit モノラル(1チャンネル)だけと言っても過言ではない」ので、もう、そうだと仮定しちゃいます。 このデータは、1データ24ビットの1チャンネルですから、量子化データは [[LowByte][MiddleByte][HighByte]][[LowByte][MiddleByte][HighByte]][[LowByte][MiddleByte][HighByte]]………… と言うバイト並びで並んでいます。 バイト並びが 00 00 00 84 D3 0E EF 3D 24 64 A5 3A 00 00 00 であれば、実際の量子化データは 000000 0ED384 243DEF 3AA564 000000 です。 Low-Middle-Highで1セットなので注意して下さい。
その他の回答 (3)
- chie65536(@chie65535)
- ベストアンサー率44% (8798/19954)
因みに、最大振幅の波形データを作ると +1 ------------------------ 7FFFFF +++ | ++ ++ + | + + + 000000 0 ------------------------ + + + FFFFFF ++ ++ | +++ | -1 ------------------------ 800000 と言う感じになります。
- wolf03
- ベストアンサー率22% (241/1086)
wave形式は単なるコンテナ定義なので中味の形式はヘッダを確認しないとわかりませんが? ヘッダから得られたコーデック情報からコーデックに合わせたデータ取得をしないと意味のない物になりますが。
補足
コーデックはフォーマットの事なんでしょうか RIFF,WAVE,fmt と、フォーマットタグが1のPCMであることは確認しました。 3バイトのべた並びだと考えるのが間違っているのでしょうか?
- Tacosan
- ベストアンサー率23% (3656/15482)
一応確認: 「3バイトずつ入っている」ことはどうやって確認したんでしょうか? WAVヘッダにチャネル数とか 1サンプルのビット数などが書いてあるんだけど, そこは確認してますか?
補足
wFormatTag 1 nChannels 1 サンプル 44100 nBlockAlign 3 ビット24 となっていました。 Wavosaurという波形ソフトで点を移動させて山を作っただけなんです もっと色々書いてみたんですが1点書くと3バイトずつバイナリエディタで変わっているのを確認し、 いくつか書くと符号が逆になっている部分ができるのを確認しました。 他の波形ソフトで見ても山になってました。 何も入力しないと、00で埋め尽くされるので、 値の範囲は-8388608~0~+8388608だと思うのですが、 最初に書いた3点の一つが符号が逆でどうしても理解できません 教えてください。お願いします。
お礼
そういうことだったんですか。 仕様がわからないとどうしようもないんですね。 ローランドで使われているというだけで、24bitというだけで いくらでもフォーマットが変わってしまうんですね。 正負の中でも逆なことも教えていただきありがとうございました。 すっきりしました!