それ find で!! 楽曲ファイルのノーマライズとアップコンバート SoX

楽曲ファイルのノーマライズとアップコンバート SoX

オーディオに関わることなので、意図や意味については議論しませんが、楽曲ファイルを音楽ファイルのアーミーナイフといわれるSoXというツールで、ノーマライズとアップコンバート(アップサンプリング)してみます。改稿 2018/08/06

Sound eXchange SoX http://sox.sourceforge.net/
SoXは、音声ファイルに対してできない処理はありません。たぶんなんでもできます。万能ツールです。Win/Linux/OSXで使えるので一回覚えると一生モノかも。Audacityとあわせればほぼ一般ユーザーのしたいことはぜんぶカバーされていると思います。作曲は別だけど。音も鳴らせるので数秒のメロディとかコマンドで設定できますね。気力のある人なら作曲もできる。

一般ユーザーでは、アップサンプリングしたいなどという例が多いと思うので、それを想定したケースワークを示します。
  • 大きすぎる音を少し小さめに、
  • サンプリングレートを44.1kから96kに、
  • ビット深度を24bitに、
してみます。

音割れがCD収録レベルで存在すると確信するCD、これクリッピング発生してるんじゃないのと思った場合などにどうぞ。主たる目的はそれです。この手のツールはWindowsにはいろいろありますね。いろいろ演算して「何か」を作り出すツールとか。※音割れが消えるわけではないですよ。(気のせいか違う気がするかもしれませんが、私は知りません)

印象的にざらついた感じがするのなら、jack+低遅延カーネル+DeadBeefで聴いて見るのもおすすめです。プレイヤーでけっこう違いますよね。いかん、こういう話は禁句だった。

余談、14.04LTSにソース落としてきて最新バージョンをコンパイルしてみて、依存関係を無視して強制インストールしたらシステムが変になりました。(汗) やらないほうがいいです。メンテナーの皆さんのバージョンがいいと思います。

実験開始です。新規にターミナル(端末)を開きます。ubuntu系は以下を同時押し。CTRL+ALT+T

soxを使って楽曲ファイルをアップコンバートする。Windowsでも同じ。OSXでも同じ。以下、対象ファイルは仮に10.flacとしています。

標準リポジトリですから、

sudo apt install sox # ubuntu


sudo pacman -S sox  # archLinux(Manjaro) 

以上でインストール可能です。

実行例

sox -S -G --norm 10.flac -r 96000 -b 24 10.flac_96k24b.flac

----
こんなかんじでノーマライズとアップコンバートが進行していきます。

sox -S -G --norm ./10.flac -r 96000 -b 24 ./10_96k24bit.flac

Input File     : './10.flac'
Channels       : 2
Sample Rate    : 44100
Precision      : 16-bit
Duration       : 00:04:35.05 = 12129852 samples = 20629 CDDA sectors
File Size      : 30.1M
Bit Rate       : 876k
Sample Encoding: 16-bit FLAC
......
In:100%  00:04:35.05 [00:00:00.00] Out:26.4M [      |      ]        Clip:0   
Done.

-----------
だいたいこんなふうになります。例
Audio
Format                                   : FLAC
Format/Info                              : Free Lossless Audio Codec
Duration                                 : 5mn 9s
Bit rate mode                            : Variable
Bit rate                                 : 3 419 Kbps
Channel(s)                               : 2 channels
Channel positions                        : Front: L R
Sampling rate                            : 96.0 KHz
Bit depth                                : 24 bits
Stream size                              : 126 MiB (98%)
Writing library                          : libFLAC 1.3.0 (UTC 2013-05-26)


効果については、個々人の心の中に。

ディレクトリまるごと。find で。全部のflacを処理。

 find . -name \*.flac -type f -exec sox.96k24bit {} \;

 sox.96k24bit は最後に示すスクリプトです。

ディレクトリ内flacまるごと。だけど、5番目の曲は変換しない。

find . -name \*.flac -not -name 5\* -type f -exec sox.96k24bit {} \;

※5でファイル名がはじまっている前提。"5 - わたしの愛のうたを聴いて❤.flac"みたいに。

楽曲管理ソフトの振り分け条件で違いますが、同一アーティストの同一アルバムなら同じディレクトリに全部あるのが普通なので、こういうのだけ覚えておけばいいかな、と。コンピアルバムとかけっこう面倒。検索すればいいだけですが。

Windows10は、2ヶ月後には、こうしたコマンドが使えるようになりますね(たぶん)。それまでは、forfiles でどうぞ。Win7/Win8は、forefilesで。 使いやすい良いコマンドです(本当の気持ち)。

sox.96k24bit いつもの適当スクリプト gedit ~/bin/sox.96k24bit


soxのオプションは英語のmanでは音関連の基礎知識がないと英語ができても厳しいと思うので、ググってみてください。いろいろ試した結果自分の場合こういうシンプルなオプションで落ち着きました。要はおまかせっていうことです。いろいろ考えても仕方がなかったです。世界ではいろんな試みがあるんだなと実感させられました。

#!/bin/bash
# -x
#@ sox でアップコンバートしてみる。ノーマライズ込。
#
#微妙な問題点、タグは引き継がれるが、カバーアートは埋め込みが必要。
#オリジナルからカバーを抜いて、格納するルーティンがあると楽かも。
#滅多に実行しないので、easyTAGでいいか。
#
#
#
#$1 の拡張子をとって変数に格納
if [ "$1" = "" ]; then echo nono; exit 0 ;fi #$1 が指定されてなかったら終了
basename=$1 ; targetname="${basename%.*}_96k24bit.flac" ; #echo "$filename"
if [ -f "$1" ]; then
# echo "$1 ファイルが存在します"
#echo "96k 24bit に変換。⇢ $targetname 生成。"
#echo soxsox変換するよ。
echo    sox -S -G --norm "$1" -r 96000 -b 24 "$targetname"
time    sox -S -G --norm "$1" -r 96000 -b 24 "$targetname"

else
  echo "ファイルが存在しません"
  exit 0

fi #$1 が存在してなかったら終了
echo genarated. ⇢ $targetname
echo "done"
echo "   "
exit 0
exit

前後のファイルをaudacityに読み込んでクリッピングチェック、スペクトラム表示を眺めてみるとよいです。

bit深度だけなら、SoX掛けなくても、deadbeef のオプションでリアルタイム変換してプレイできます。

余談ですが、EasyTAGであまりにでかいpngを埋め込むと再生不能ファイルになりました。以前はうまくいっていたんですけどね。

それ、マウス操作で:

複数指定ならこのスクリプトを一部書き換える必要がありますが、1曲づつならそのままでもscriptsにおけばいいでしょうね。nemo/nautilus/cajaで。

(日本に限らず、ヨーロッパの方(特に北のほうの国)とかもお好きだなぁという印象。アメリカ人はおおざっぱっぽい)