SoX を使い音声ファイルの無音部分を起点にして分割する

  • 0
    いいね
  • 0
    コメント

    SoX を使い無音部分を起点にし音声を分割する

    大まかな手順

    1. Global Voice English 3で音声吐き出し
      1. 英単語を1語ずつ6秒間隔で読み上げさせて,それを1つの WAV ファイルとして保存
    2. SoXのインストール
    3. sox で音声の分割
    4. sox で音声の MP3 形式への変換
    5. mv でファイル名の一括変換(リネーム)

    1. 読み上げファイルの作成

    単語を1行に1つ並べたテキストファイルを用意しておく。

    adverb
    alternative
    ancestor
    

    \r を対象に,</r><VTML_PAUSE time="6000"/></r> に置換して,以下のようにする。やっていることは,Global Voice English 3 の読み上げオプションのタグを入れて,6秒のポーズを入れて読み上げるようにしている。

    adverb
    <VTML_PAUSE time="6000"/>
    alternative
    <VTML_PAUSE time="6000"/>
    ancestor
    <VTML_PAUSE time="6000"/>
    

    上のファイル(TXT 形式)をソフトで読み上げさせて,WAV 形式(input.wav)で保存する。

    2. SoX のインストール

    input.wav に含まれる無音部分を起点に分割するために,SoX を使う。まずは,インストール(macOS 10.11)。

     brew install sox
    

    これを先にやると,lame が入っておらず,MP3 に変換できなくなるので,オプションを付けて再インストール。。。

     brew reinstall sox --with-lame
    

    3. sox で音声の分割

    そして,音声を無音部分を起点に区切る。

    sox -V3 input.wav out.wav silence -l 1 0.2 0.1%  1 0.2 0.1%: newfile : restart
    

    ひたすら分割されていき,(自分の場合は)3600個の WAV ファイル(3600単語)ができる。

    ここで気をつけるべきは,無音の持続時間を 0.2 にするか,0.1 にするか,0.5 にするかで区切れ方が違うこと。極めて短い時間で発音される単語は,そのまま無音扱いで削除されてしまうことがある(生成されてたファイル数が,3600より少ないので気付ける)。

    4. sox で音声の MP3 への変換

    Excel で sox のコマンドを生成。

    列A 列B 列C 列D 列E
    1 sox out001.wav out001.mp3 sox out001.wav out001.mp3
    2 sox out002.wav out002.mp3 sox out002.wav out002.mp3

    列E で,=CONCATENATE(B2," ",C2, " ",D2) を実行してあとはひたすら3600行(3600単語)をコピー。
    これをテキストエディタに貼り付けて,FileConvert2MP3.sh として保存し実行。以下のようなただのコマンドの羅列。

    sox out001.wav out001.mp3
    sox out002.wav out002.mp3
    ...
    

    5. mv でファイル名の一括変換(リネーム)

    Excel で mv のコマンドを生成。ファイル名は,連番でなく,読み上げられている単語と同じにするので,以下のような行列を作っておく。

    列A 列B 列C 列D 列E 列F
    1 mv out001.mp3 adverb .mp3 sox out001.wav adverb.mp3
    2 mv out002.mp3 alternative .mp3 sox out002.wav alternative.mp3

    列F で,=CONCATENATE(B2, " ", C2, " ", D2, E2)を実行してあとはひたすら3600行(3600単語)をコピー。
    これをテキストエディタに貼り付けて,FileNameChange.sh として保存し,実行。以下のようなただのコマンドの羅列。

    mv out001.mp3 adverb.mp3
    mv out002.mp3 alternative.mp3
    ...
    

    ここで気をつけるべきは,同じ単語が混ざっていた場合,MV をすると,上書きされていくので,ファイル数が一致しなくなる(消えていく)。今回,3つの単語に重複があり,最終的な生成ファイルは,3597 個になった。