広告 iPhone、PC 関連 ハイレゾレコーディング

FLACとALACが元のWAVファイルに復元されるか?ハッシュ値で調べてみました。

スポンサーリンク

 

過去の記事では、FLACALACフォーマットをAudacity上で元のWAVファイルとの絶対誤差から復元(可逆性)を確認しました。 FLACやALACの可逆性を確認する方法の一つに「ファイルのハッシュ値を用いた評価方法」があります。 この評価方法は、ハッシュ値がファイル固有の文字列であることを利用し、WAVファイルから変換したFLACやALACファイルをデコード(WAV化)した後、デコード後のファイルのハッシュ値が元のWAVファイルと一致すれば、元のWAVファイルに復元された(可逆性がある)と判断できるというものです。 
今回は、この「ファイルのハッシュ値を用いた評価方法」でFLACやALACの可逆性を確認し、更にこの評価方法の妥当性を確認したいと思います。

 

FLACとALACについて

FLAC は、Windows、Linux、macOS、Androidなどの広範なプラットフォームでサポートされています。オープンソースであるため、多くのサードパーティのアプリケーションでも利用されています。 ファイルの拡張子は、✗✗✗✗.flac になります。

一方のALAC は、Appleが開発したフォーマットで、主にApple製品(iPhone、iPad、Macなど)で利用されます。iTunesやApple Musicでの利用に最適化されており、Appleのエコシステム内で高い互換性を持っています。 ファイルの拡張子は、AACと同じ、✗✗✗✗.m4a になります。 【ALACが MPEG-4 Audio フォーマット(通常のオーディオストリームが格納されるコンテナ形式)を使用しているため拡張子がm4aになります。】

FLACやALACは可逆圧縮を用いるため、圧縮前と圧縮後の音質は基本的に同じです。 つまり、FLACやALACをデコードした後に得られるWAVファイルは元のWAVと完全に一致しハッシュ値も一致するはずですので、ハッシュ値が一致すれば音質は元のWAVと全く同じだと考えられます。 ただし、FLACやALACを直接再生する場合、使用するソフトウェアやハードウェアの違いにより、再生環境によって音質に差異が生じることがあるため、注意が必要です。

 

ハッシュ値でFLAC又はALACの復元性の有無を確認できます。

ハッシュ値とは、あるデータ(例えばファイルなど)に対して計算される固定長の文字列や数字のことです。 この値は、元のデータの内容に基づいて計算され、データが変更されていないか、あるいは一致するかどうかを確認するために使用されます。 ハッシュ値の計算は簡単です。 ターミナルを開いて下のコード(ファイルはフルパス)を実行すると、ファイルのハッシュ値が表示されます。

ハッシュ値の計算

 bash command
sha256sum "original.wav"
# 実行すると グリーンの文字列がハッシュ値です。
5a7caf857cb52ac0bb44581669f61f7d6f88ea35f5d9f7140c9f16fa789e8ef1 original.wav

異なる入力から同じハッシュ値が生成される現象を衝突と呼びます。 SHA-256の場合、衝突が発生する確率は「2の128乗分の1」であり、実質的にゼロに近いと言えます。

ハッシュ値でFLAC又はALACの復元性を確認

下の手順はターミナルから手動でハッシュ値を計算し、wavファイルをFLAC及びALACに変換したファイルをwevにデコードした時、元のwevファイルとハッシュ値が一致している(復元されている)かを確認する方法です。

  1. 元のWAVファイルのハッシュ値を計算
  2. FLAC(or ALAC)ファイルをWAVにデコード(復元)してハッシュ値を計算
  3. 元のWAVファイルと復元したWAVファイルのハッシュ値を比較してハッシュ値が一致すれば、ファイルは正しく復元されていると言えます。

 

ターミナルを開いて、夫々のファイルのハッシュ値を計算しハッシュ値の長い文字列を目視等で比較するのは困難ですので、Appleショートカットアプリを使ってハッシュ値の比較が自動化できる【compare hash】ツールを作成しました。

【compare hash】ツールAppleショートカットアプリを使って、ファイルのハッシュ値を比較するツールを作成してみました。

Appleショートカットアプリを利用して、ファイルAとファイルBのハッシュ値を比較してファイルの内容が一致しているか否かを調べるツールを作成しました。  用途としては、例えば、可逆圧縮にエンコードした ...

 

ショートカット・アプリの【compare hash】ツールを使ってファイルのハッシュ値比較をしてみました。

 

Step
1
FLAC及びALACのデコードしてwavファイルを作成

  • オリジナルレコードからFLAC(24bit 96khz)で収録しwavに変換したファイル
    Handel Violin Sonata No_4 Vn_Grumiau.wav
  • FLAC:オリジナルファイルをFLACにエンコードし、WAVにデコードしたファイル
    Handel Violin Sonata No_4 Vn_Grumiau_FLAC.wav
  • ALAC:オリジナルファイルをALACにエンコードし、WAVにデコードしたファイル
    Handel Violin Sonata No_4 Vn_Grumiau_ALAC.wav

 

Step
2
【compare hash】ツールを使ってハッシュ値を比較する

ダイアログの表示内容

ファイルAとファイルBのハッシュ値は一致しました。

ファイルA&B:ハッシュ値5cced0055c6cd106a1657a51706df7619fd6e084ba42775ea70d0b12e42731b3

【compare hash】ツールで確認すると、各々のファイルの組み合わせで、ハッシュ値が一致したので、FLAC又はALACファイルは元のwavに復元されることが確認できました。

 

ハッシュ値の比較が正しいか?念の為「WaveCompare」ソフトで確認

「WaveCompare」ソフトは、WAVファイル同士のサンプルレート単位でデジタルデータを比較できるefuさんが開発されたWindowsソフトです。

WaveCompareのDL先:https://efu.sub.jp/soft/wc/wc.html

確認結果

前記のStep1で作成したWAVファイル(3種類)を「WaveCompare」で確認したところ、全ての組み合わせで一致しました(下記スクリーンショット参照)。 この結果から、ハッシュ値による確認結果と一致し、ハッシュ値による比較であっても正しく判定できることが裏付けられました。

 

以上、FLACとALACはデコードすると元のWAVファイルに復元されることが、ハッシュ値の比較で分かりました。

 

スポンサーリンク

 

スポンサーリンク