De-limiterで海苔音源の改善

音源復元ツールDe-limiterを用いてGUIアプリを作りました。

入力ファイルはWAV/FLAC/MP3などが指定できるようにするため、pydubで一旦44.1kHz WAVに変換し、推論処理後に元の拡張子に戻して出力しています。

# 入力を44.1kHz WAVに変換
audio = AudioSegment.from_file(self.infile)
if audio.frame_rate != TARGET_SR:
audio = audio.set_frame_rate(TARGET_SR)
audio.export(tmp_in.name, format=”wav”)
# 推論後に元形式で保存
if input_ext == ‘.wav’:
shutil.move(delim_path, out_path)
else:
audio = AudioSegment.from_wav(delim_path)
audio.export(out_path, format=input_ext[1:])

面倒だったのはDe-limiterがライブラリ呼び出しに対応していないので、inference.pyを内部で呼ぶ形になることでした。
このままだとアプリ化した際にPython本体が必要になって面倒なので、あらかじめinference.py_toolとして別途アプリ化しておくことにしました。
これによりinference_toolはPythonから独立したネイティブバイナリとして呼べるので、アプリ本体に同梱できます。

そのinference_toolのsubprocess呼び出しも若干工夫が必要です。
開発環境では普通にPythonスクリプト(inference.py)を直接呼び出し、配布時はビルド済みバイナリ(inference_tool)を同梱して呼び出すようにしました。
「sys._MEIPASS」を使ってPyInstallerバンドル内のパスを動的に解決しています。

if getattr(sys, ‘frozen’, False):
inference_exe = os.path.join(base_path, ‘inference_tool’)
cmd = [inference_exe, …]
else:
python_exe = sys.executable
inference_script = os.path.join(BASE_DIR, ‘De-limiter’, ‘inference.py’)
cmd = [python_exe, inference_script, …]

あとはPyInstallerの”–add-binary”やspecファイルの”datas”でffmpeg/ffprobeを同梱し、バンドル先パスを明示的に指定するくらいです。

実際の波形はこんな感じでかなりクリップしてそうな部分が修正されています。
単純にゲイン調整やラウドネスノーマライズなだけでなく、クリップ気味な部分の波形も補われているのが分かります。
そもそも歪んでしまった部分まで完全再現してくれるわけではないですけど、多少でもマシになるならありがたいです。

残念ながらハイレゾは前述のように44.1kHzになってしまいますが、周波数特性はほとんど変わらず維持できているようですし、不自然な部分も少ないのが良いですね。

[ 元音源 ]

[ De-limiter後の音源 ]

特に配布の予定はないですけど、こうしたソフトウェアでの音質向上も今後はキーポイントになってくるのではないでしょうか。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)