3
3

More than 3 years have passed since last update.

SoXでノイズ入りの音声データを作成

Posted at

機械学習で音声データのサンプル数がが少なかったので、ノイズデータを入れて音声データを量産しました。
その際の手順を紹介します。

基本的に扱う音声ファイルは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文を回してあげると良さそうかなと思いコードを書きました。
ディレクトリ構成などによってコードが変わると思うので、あくまで一例ですが、ざっくり以下のような感じかと。

sox.py
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

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3