WAVデータを弄くって弄ぶ

13/02/23初稿

 これまで「排他WASAPIのビットパーフェクト性」や「Windowsオーディオエンジンでのデータ改変」や「iTunesのデータ改変」などを調べてきましたが、「SoundBlaster DigitalMusic PremiumHD」のような“S/PDIF録音”できるハードウェア(Audio的音質グレードは関係しないので安価なものでよい)さえあれば、あとはフリーソフトで何とかなりました。
 ご興味ある方は是非やってみていただきたいと思いますので、ちょっとしたTipsなどをご紹介させていただきます。


■検証の諸事情

 「サンプル単位」「ビット単位」で見られて「ビットパーフェクト」な波形編集ソフトを前提にします(詳細は後述)。

・再生録音したデータと元データの波形差違を見る方法
 Windowsオーディオエンジンでのデータ改変具合などを見る時の作業です。WaveCompareなどを使えば「一致」「不一致」は判りますが、どんな不一致なのかは判りません。それ=差分を確認するには、波形編集ソフトで元ファイルか録音ファイルかどちらか一方を反転してMixすればOK。差分だけが残ります。
 問題はサンプル単位での位置合わせですね。
 ポイントは「音質を比較したりするワケじゃないので切った貼ったをしても構わない」ってところだと思います。つまり、ふたつのファイルを「位置合わせ」するのではなく、同じサンプルが先頭に来るように「頭出し」したファイルを作るのです。「頭出し」とは、同じサンプル位置より前をカットしてしまうという意味です。検証用にコピーしたファイルを準備すれば、それはどんなに弄っても問題ないですから。

 録音は再生より先に始めて後に終わらせますから、通常、再生したファイルの波形の前後にゼロデータがくっついた状態で録音ファイルは生成されます。その中から「先頭はどこか」をどうやって探すか、ですね。

 WaveGeneなどで生成したサイン波などの「人工波形ファイル」でしたら、一般的には最初に0000hじゃない値になったサンプルが第2サンプル、その前の0000hが第1サンプルですので、その前をカットすればよいでしょう。

 「自然波形ファイル」の場合もじっくり観察すればそれぞれのサンプル位置が解ることもありますが、普通はメンドクサイですよね。
 そこで登場するのが「マーカ」です。といっても特別なものではなく、再生ファイルの先頭領域の普通はほぼゼロデータが連続する中に敢えて突出した値を入れておくだけです。Impulse波形になります(作り方は後述)。

Impulse 2496  ←こんなカンジ

 先頭部分に無音が無いような場合は、WaveCompareや波形編集ソフトでゼロデータを挿入しておいた方が解りやすいでしょう。
 マーカを入れたファイルを再生録音し、元ファイルと録音ファイルが揃ったら、波形編集ソフトのカット機能を使ってそれぞれのマーカの前のサンプル数を切り揃えてやればOKです。

 SoundEngineなどでざっくりとカットし、バイナリエディタで目的のカットを行い、WaveCompareでサンプル数とヘッダ情報のミスマッチを整える、といった手もあります。まあ、敢えてそうするメリットはあまり見いだせませんけれど(苦笑)。

 なお、WAVフォーマットは0000h(0)がゼロ、0001h(1)~7FFFh(+32767)までがプラスで、FFFFh(-1)~8000h(-32768)まではマイナスです。つまり、マイナス側の最大値の方が1大きいので、マイナス最大音量(8000h)は波形反転した時プラスデータとしては1減ってしまいます。
 よって、波形反転Mixでビットパーフェクト性を調査するような場合、マイナス最大音量を持たないデータを使うべきでしょう。

・比較ファイルの長さ
 WaveCompareなどでバイナリ一致を調べる場合は、長さ(サンプル数)の不一致は気にしなくていいでしょう。データ量が違っても両方に存在するサンプル量が一致するなら一致ですし、しなければ不一致ですので。もちろん先頭末尾の(ほぼ)ゼロデータは無視してくれます。
 反転Mixしたデータについては、そのデータ自体はすでに音楽ではないので、音質や開始前の無音期間の長さを気にする必要はないでしょう。曲が終わった後しばらくは無音データがあるハズですが、それが長すぎて気になる場合は適当にカットしてしまって問題ないでしょう。

・Impulse波形の作り方
 前述した「マーカ」にもなりますし、デジタルフィルタの有無確認にも使えます。
 1644フォーマットなら、“つまんで引っ張る”だけで出来てしまうEAC付属のProcessWAVが一番解りやすいと思います。

ProcessWAV.jpg

 1644以外の場合はバイナリエディタで編集するのが確実じゃないかと思います。任意の値のImpulse波形が作れますので、データ改変があったかどうかも値を見ただけで解りますし。
 WAVフォーマットではアドレス2Chがサンプルの先頭ですから、16bitなら4バイトが1サンプル(ステレオなので。前の2バイトがL、後がRです)、24bitなら6バイトが1サンプルとして、一応解りやすく3サンプルめに数値を書き込むことにします。
 ヘンなことが起こらないよう、かつ目立つように、最大音量のおよそ2/3あたりを狙って、プラスなら「6666」マイナスなら「AAAA」がいいのではないかと。数字として見つけやすいですし改変があったらすぐ解りますし。

 バイナリエディタでこんなふう↓にデータ書き換えすると

バイナリエディタでImpulse書き込み

波形としてはこんなふう↓になるって寸法です。きっちり3サンプル目がImpulseしていますね。ばっちりマーカになりました。

バイナリエディタで書いたImpulse波形

 0000hだった元データを書き換えているだけなのでサンプル数の不一致は起こりません。
 24bitなら「666666」「AAAAAA」。こんなカンジです。

バイナリエディタでImpulse書き込み2496


■Windows波形編集ソフトの諸事情

 比較用「頭出し」および「ビット単位でのレベル比較」のために波形編集ソフトは必須です。
 しかし、本来とは異なる目的なので無理もないかもしれませんが、実はそれができるソフトがそんなに多くはなく、結構大変でした。
 そして、まさかまさかの動作も。

・検証用波形編集ソフトの条件
 ・サンプル単位で編集できること(といってもカットとゼロデータペーストくらいしかしませんが)
 ・「1」「-1」データが視覚化できること。16bitなら0001h/FFFFh、24bitなら000001h/FFFFFFh
  (主に、波形反転Mixしたあと値が「0」になっているか否かを確認するため)
 ・せめて2496まで対応していること
 ・ビットパーフェクトであること

・波形編集ソフトで「ビットパーフェクト」するには???
 ヘンなタイトルですが、なんと、“カットしただけで全体的にデータ改変されてしまう”ソフトがあることが判明したので(もちろん、すべてのエフェクト設定はOnになってないのにです)。各種検証ではこの観点で適切なソフトを使わないと何してるのか解らなくなってしまいます。
 「明示的に行った処理以外の処理もされてしまう」なんて思いもしなかったので気付くのが遅れました。だって、WAV=非圧縮データの曲の冒頭のもともと無音(ゼロ)データをサンプル単位でカットしただけなのに、残った波形データが異なる値になっちゃうソフトがあるのです。連続するFFFFhが0000hに書き換わってたり。
 DC成分除去とかノイズ除去とかがかかってるような。
 波形編集ソフトとしては普通なのでしょうか…
 波形編集は素人なので何か設定を見落としてるのかなぁ?

 ということで、いくつかの波形編集ソフトについて“ビットパーフェクト性”を確認しました。と言っても、パーフェクトに確認したとは言えませんので間違っていたら申し訳ありません。

 OKとNGは、「データ頭の無音(ゼロ)部分をカットして保存」した時の挙動が定義です。
  ・OK=カット以外の処理は入らずカット以外のデータは保持される。
  ・NG=全体が異なるデータになる。

・Wavosaur 1.0.8.0
 サンプル単位・・・○
 ビット単位・・・16bitは大丈夫。24bitだと「±1」が見えない。他にも何かあるかも?
 2496対応・・・フォーマットとして表示はされているが上記のような疑問点あり。
 ビットパーフェクト性・・・NG
      どころか、開いて何もしないでセーブしただけで改変されている。
      ファイルを開いた段階では改変されていない模様。
      なので、少なくとも1644データの表示確認用ビューワとしては使える。
      24bitでは「±1」が見えないので、それ以外の目的ならビューワにできる。

・Audacity 2.0.0
 サンプル単位・・・○
 ビット単位・・・なんとか○?
 2496対応・・・表示出るので大丈夫だと思える。ただ、どうせビットパーフェクト性NGなので。
 ビットパーフェクト性・・・NG

・TWE 2.3.1
 サンプル単位・・・○
 ビット単位・・・16bitなら大丈夫。24bitだと「±1」は表示できない模様。
 2496対応・・・表示でるし、編集しても下位ビットが00hになったりしないし大丈夫っぽい。
 ビットパーフェクト性・・・OK
      1644と2496で確認。ただし、編集するとフッタを付ける模様。

・Process WAV(EAC V1.0 beta3 from 29 August 2011 のWAV編集ツール)
 サンプル単位・・・○
 ビット単位・・・○
 2496対応・・・×というか1644専用(そもそもCDコピーソフトですからね)。
 ビットパーフェクト性・・・ゼロデータのカットやペーストでは問題なさそう。
      が、頭に1サンプルペーストしたら途中から1サンプルズレたみたいなので注意必要かも。
      サンプルをつまんで値変えられるのでマーカ入れるのとかに便利なのは前述した通り。
      1644専用になっちゃうけどビューワとしては絶品。

・SoundEngine 5.02
 サンプル単位・・・○
 ビット単位・・・×
 2496対応・・・○
 ビットパーフェクト性・・・OK
      1644も2496もOK ファイルのマージでも“くっつくだけ”だった。
      国産なので解りやすい。「解析」などは音量レベルを見るのに重宝する
      (オールゼロかどうかすぐ判る)。
      ただし、編集して保存するとファイルフッタに“署名”をくっつける。

・WaveStudio7(SBーDM-PHD付属)
 サンプル単位までズームできない。

・Free Audio Editor 2012
 サンプル単位までズームできない。


 ファイルフォーマットや目的に応じてTWEやSoundEngine、ProcessWAVあたりを使い分けるのがよさそうです。

 改めて、フリーソフトウェア作者皆様に感謝感謝!


メインメニューへ

テーマ : オーディオ
ジャンル : 趣味・実用

ERIへようこそ

Author:らかせ
 「最新記事」または「メインメニュー」からどうぞ

・ファイルへの直接リンク以外はリンクフリー(連絡不要)です
・一応、拍手にコメント(非公開)付けられるようにしてあります
・DB的に利用しており、過去記事もガシガシ書き換えています。特に「最新記事」は初稿から一週間くらいは直してることが多く、大幅に変わっちゃうことも。ご了承ください
・ということもありますし、記すまでもないですが無断転載(ファイル含む)はご遠慮ください
・引用の考え方については「007:諸事」をご参照ください
・アフィリエイトはAmazonのみです
・ハイパーリンクは当Blog記事のみです(054:節電記事のみ例外)

最新記事
カテゴリ
検索フォーム
FC2カウンター