リッピングの効果について

リッピングとは

オーディオ界隈ではCDの取り込みでのやり方で音に違いが出るとまことしやかに言われています。

その理由としては、通常の取り込みでは、特定ビットがドライブの不調などで読み取れなかった場合にそのデータを前後のデータから類推して補うといった処理が行われます。

この時に、補間されたデータは元のデータとはなんら関係のないものとなるため、よくないとされてます。

私も最近Exact Audio Copy(EAC)というツールを使ってCDを取り直していたので、友人から「ほんとに違うならRMSE取ってみろよ~~」と言われたのでやってみました。

 

対象とするデータ

今回は手元にあった「ゾンビランドサガ フランシュシュ The Best」をもちいて実施しました。

 

コード

今回は機械学習でも用いられるRMSEを出すため、pythonを用いてコードを作成しました。

import sys
import glob
import wave
from sklearn.metrics import mean_squared_error
import numpy as np
import datetime

def get_file_list(directory):
    files = glob.glob(directory+"/*.wav")
    return files

def file2data(file_name):
    wav = wave.open(file_name)
    data = wav.readframes(wav.getnframes())
    data_array = np.frombuffer(data,dtype="int16") // 32768.0
    duration = wav.getnframes()//wav.getframerate()
    wav.close()
    return data_array,duration

args = sys.argv
if len(args)!=3:
    print("Usage")

before = get_file_list(args[1])
after = get_file_list(args[2])

for i in range(len(before)):
    print(before[i])
    true_data,time = file2data(before[i])
    pred_data,time = file2data(after[i])
    print(datetime.timedelta(seconds=time))
    print(mean_squared_error(true_data,pred_data,squared=False))
    print()

 15行目の除算を入れないとMSEの導出でなぜか負数がでてくるため、こちらのサイトを参考に除算を入れました。

結果

結果としてそれなりに誤差が出てくるのがわかりました。

最初に負数が出てきてもとりあえず無理やり絶対値にしてから平方根を取るなどした場合の考察としては、波形が大きく変化しそうな曲が誤差が大きかったため、波形が大きく変わる際にリッピングのツール次第では勝手に補正を入れてしまうことがあるのではという推察になりました。

 

また、波形が大きく変わるというのをしっかりと残すようになるため、きれいにリッピングした場合は「かっちりした音になる」といったような意見が多くみられるような効果が出るのもなんとなく理解できました。

 

もし、pythonでwavファイルを扱う場合はこういうやり方のほうが良いなどの知見をお持ちの方はコメントください。それをもとにやり直します。