ときに音声データにランダムなノイズを加えたい時がある。例えば機械学習の学習用データを何パターンか作りたい時とか。
SoXを使って音声データにノイズを加える方法について。
Add noise to an audio file
に書かれている方法そのまま。
SoXの2つのコマンドを組み合わせてノイズ入りの音声データを作る。
sox input.wav -p synth whitenoise vol 0.02 | sox -m input.wav - addednoise.wav
1つ目のコマンド
sox input.wav -p synth whitenoise vol 0.02
はinput..wavの長さとサンプリング周波数に合わせてホワイトノイズを生成する。
-pはアウトプットファイルの指定をパイプから引き継ぐオプション。
ノイズの種類は次のものが選べるはず。(全部は試していない)
- sine(正弦波)
- square(矩形波)
- triangle(三角波)
- sawtooth(のこぎり波)
- trapezium(台形波)
- noise/whitenoise(ホワイトノイズ)
- tpdfnoise(三角形確率密度関数ノイズ)
- pinknoise(ピンクノイズ)
- brownnoise(ブラウニアンノイズ)
- pluck(撥弦)
2つ目のコマンド
sox -m input.wav - addednoise.wav
はinput.wavと生成されたノイズをミックスして新しい音声ファイルを作っている。
注意事項として、上記のコマンドは単純に2つの音を合成しているシンプルなミックスで、出力ファイルにクリッピングが入る危険性をもたらすということがある。
クリッピング※1は入力ファイルの振幅幅にノイズを加えるのに充分な余裕がある場合には問題にならない。
例えば、入力ファイルの振幅値の最大/最小が+-0.6ならば振幅値+-0.4のノイズをクリッピングの心配なく加えることが出来る。
もしもそれ以上のノイズを加えたいなら’vol’※2でノイズを増強し、’norm’※3で歪みを防止することになる。
※1.クリッピング・・・クリッピングとは、音声信号レベルが表現し得る範囲を超えたときに生じる歪みである。 ほとんどの場合クリッピングは望ましいものではなく、それが生じる前の所でレベル調整により修正されるべきである。
※2. vol・・・SoXの音量調整エフェクト
※3.norm・・・SoXの音声正規化エフェクト