音圧のノーマライズ (複数ファイル一括処理)

複数のファイルに一括して同じ操作を行いたい場合があります。そのときは、dir命令と繰り返しを使うことでファイルをひとつひとつ開き、操作をし、ファイルへ書き込むことで対応します。

複数のWAVファイルのノーマライズ(振幅の正規化)をしたい時はけっこうあります。ただし、それら複数ファイルの相対的な音圧関係は変化させたくないものとします。そのためには、すべてのWAVファイルの中での音圧ピーク値の最大値を求めます。次に、それぞれのWAVファイルをその最大値にしたがって増幅することでノーマライズができます。具体的には以下のようなプログラムになります。

files = dir('*.wav');
maxpeak = 0;
for n=1:length(files)
  [dir, name, ext, ver] = fileparts(files(n).name);
  [x, fs, nbits] = wavread([name ext]);
  if maxpeak < max(max(abs(x)))
    maxpeak = max(max(abs(x)));
  end
end
for n=1:length(files)
  [dir, name, ext, ver] = fileparts(files(n).name);
  [x, fs, nbits] = wavread([name ext]);
  y = x / maxpeak * 0.9;
  wavwrite(y, fs, nbits, [name '_normalized' ext]);
end



MARUI Atsushi
2024-04-24