機械学習で音声データのサンプル数がが少なかったので、ノイズデータを入れて音声データを量産しました。
その際の手順を紹介します。
基本的に扱う音声ファイルはwavファイル前提で話を進めていきますので、ご容赦を...
SoX(Sound eXchange)
これを使うと色々な音声処理できます。
今回はこの中の機能の一部を使ってノイズ入りの音声データを量産してみます。
まずはインストールする。
brew install sox --with-lame
音声データにノイズを混ぜる
早速ですが、ノイズを混ぜてみましょう。
ノイズ用データをフリー素材などから拾ってきましょう。「フリー素材 音声」で調べると生活音などのノイズにできそうなデータが出てくるかと思います。
sox -m sound.wav -v 0.1 noise.wav noise_mix.wav trim 0 3
上記コマンドでsound.wavとnoise.wavを混ぜて、noise_mix.wavを作成できる。
-m は 2つの音声ファイルを混ぜることを意味します。
-v はノイズ(2つめの音声データ)の音の大きさの調整、1が元の音量。
trim はトリミング、今回だと0秒目から3秒目までをトリミングしている。
pythonでshellを叩いて量産
実際量産するとなるとfor文など使い実行することになると思います。
pythonではsubprocessモジュールを使うとコマンドを実行できるので、この中でfor文を回してあげると良さそうかなと思いコードを書きました。
ディレクトリ構成などによってコードが変わると思うので、あくまで一例ですが、ざっくり以下のような感じかと。
import subprocess
for sound_idx in range(1,11):
for volume in range(1,11):
for noise_idx in range(1,11):
s_idx = str(sound_idx)
noise_volume = str(float(volume) / 10)
v = str(volume)
n = str(noise_idx)
cmd = f'sox -m sound_{s_idx}.wav -v{noise_volume} noise_{n}.wav {s_idx}_{v}_{n}.wav trim 0 3'
subprocess.check_output(cmd, shell=True)
もうちょっと綺麗に書けるはずなので、参考程度に...
注意
混ぜるデータ同士、サンプルレート数等が異なるとエラーが発生するので、今回は書きませんがこの辺もSoXなど使って調整の必要が出てくる可能性があるかと思います。
参考: http://webdatareport.hatenablog.com/entry/2016/11/06/161304