LoginSignup
7
6

More than 1 year has passed since last update.

Audacity,SoXで音声合成に使うデータの録音、加工【Windows10】【Ubuntu20.04】

Last updated at Posted at 2022-01-02

はじめに

音声合成モデルを学習させるための音声データを録音、加工するのに便利なソフトとその使い方を簡単にまとめた記事です。自分で音声合成を作ってみたい方の一助になればと思います。

音声合成モデルの作り方はRRR_troisRさんの記事で紹介されているのでそちらをご参照ください。

Audacity

Windows10

インストール

Audacityを公式サイトからダウンロードします。
ページに飛ぶと画像のようにダウンロードボタンがあるのでクリックしてダウンロードして下さい。
windows_auda_download.png

ダウンロードしたファイルをダブルクリックして実行するとインストーラが起動するので、指示された内容に従って進めてください。
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
これでAudacityのインストールは完了です。

 
 
 

使い方

基本的な設定項目

作業に関連する部分だけをピックアップします。
windows_auda_top.png

(1) PCに接続されている録音デバイスを指定します。(画像は何も接続されていない状態のものです)
 複数接続されている場合は、クリックするとプルダウンメニューが表示されるので、使用したいデバイスを選んでください。

(2) 録音する音声のチャンネル数を指定します。
  音声合成ではモノラルの音声を使用しますので、モノラルを指定しましょう。

(3) 音声の再生デバイスを指定します。
 複数接続されている場合は、プルダウンメニューから使用したいデバイスを選択してください。

(4) 音声のサンプリングレートを指定します。
 音声合成で使用するデータは24000Hzや、22050Hzのものが多いのですが、これは後で変換できるので特に変える必要はありません。

録音

録音は、動画のように

  • 録音ボタンを押す
  • しゃべる
  • 停止ボタンを押す
  • 再生ボタンで確認

という簡単な操作でできます。
 

 
これを繰り返して、1文ずつ録音してファイルに出力してもいいですが、手間なので
一気に録音する方法を紹介します。

無音区間で分割

Audacityには無音区間で区切って、音声部分をラベル付けする機能が備わっています。
なので、録音する際に1秒以上間をおいて次の文を読み上げるようにするなど、無音区間で区切れるように発音すると便利です。

録音

  • 録音開始
  • 一文読み上げ
  • 1秒くらい待つ
  • 次の文読み上げ
  • 終わったら停止ボタン

ラベル付け

  • トラックを選択する
  • 画面の真ん中上らへんの「解析」メニューを開く
  • 「音声から自動ラベル付け」を選択
  • OKをクリックする

 
 
出力
「ファイル → 書き出し → 複数ファイルの書き出し」
をクリック。
image.png

左下の「ファイル分割基準」の項目で「ラベル」を選択。
audacity_output.png

「フォルダー」に書き出したいフォルダを指定して「書き出し」
audacity_output2.png
audacity_output3.png

音声ファイルごとにこのウィンドウが出てくるので、ここにチェックを入れておくと楽です。
audacity_output4.png

このように、分割されたファイルが作成されます
image.png

PCの音を録音

PCの音を録音する場合は、「音声ホスト」を「Windows WASAPI」に設定し、
録音デバイスにヘッドホンやスピーカーを指定します。
image.png
image.png

この状態で録音ボタンを押すと、PCの音を録音できます。

アニメやゲームのボイスを収集したいときはこれで録音できます。
アニメや音声作品などでは、効果音やBGMが入っており、純粋なボイスを抽出するのは困難です。
一方、ゲーム内のボイスであれば、設定でBGMと効果音をミュートにできるので、ノイズのない
きれいな音声データが取れます。
しかし、これらの作品の音声を利用したことで生じるいかなる問題についても
私は一切責任を負いませんので、すべて自己責任で行ってください。

 
 
 

補足

「音声から自動ラベル付け」の設定項目

audacity_label_setting.png

(1) どれくらいの音量以下を無音と判断するかを指定します。

 この数値はdBなので、0が最大値です。
 Audacityでは、最小値は-60dBです。

(2) 何秒以上無音が続いたら区切るのか、を指定します。

 短すぎると、文章の句読点で切られてしまい、
 大きすぎると、二つの文章がつながってしまいます。
 デフォルトの値で問題ないです。

(3) どれだけ短いラベルまで許容するのか、を指定します。

 短すぎると、マイクをちょっとぶつけたときなどのバーストノイズを拾ってしまう可能性があります。
 大きすぎると、短い文章の時に無音時間が多く含まれたり、二つの文章がつながってしまったりします。
 デフォルトの値で問題ないです。

(4) 音声を区切るとき、最初と最後に入れる無音時間を指定します。

  デフォルトの値で問題ないと思いますが、指定するとしたら0.1~0.5秒ほどです。

(5) ラベルの命名規則を指定します。

 「#」は、何桁で番号付けするかを指定します。
 画像の場合は「#」が2つありますので、2桁で
01
02
03
...
のように2桁になるようにゼロ埋めされます。
「#」が3つなら
001
002
003
...
となります。

例:TEST####0

TEST0000
TEST0001
TEST0002
...
 

メモリをdB表記にする

トラックのメモリのところを右クリックして、メニューから「dB」を選択すると、dB表記で波形が見れます。
image.png

音声を正規化する

選択した範囲の音声を、最大値が-1dBになるように音量を調整します。
動画のように、正規化した範囲を選択して、「エフェクト → ノーマライズ」を適用します。
最大値は、設定で変えることができます(最大0)
image.png

 
連続録音した場合、それぞれの発音に音量差が出てしまうと思います。
それを丸ごと正規化しても、音量差が残ったままなので、
一つ一つ正規化する必要があります。
これは大変手間なので、後述するsoxコマンドでの正規化を推奨します。

ノイズ低減

Audacityの機能で、多少のノイズならば消すことができます。
以下に手順を示します。

  • ノイズ(無音)部分を選択する
  • 「エフェクト → ノイズ低減」を選択
  • 「ノイズのプロファイルを取得」をクリック

この操作をしないと、ノイズ低減を実行できません。
動画では、OKボタンが押せるようになっていますが、前回のプロファイルが残っているためです。
ノイズのプロファイルがない状態でノイズ低減の項目を開くと、OKが押せないようになっています。

  • トラック全体を選択
  • 再度「エフェクト → ノイズ低減」を選択
  • OKをクリック

image.png
audacity_noize_decreasing.png

 
 
 
 
 
 
 
 

Ubuntu20.04

インストール

同様に公式サイトからダウンロードします。
audacity_download.png
ダウンロードフォルダを開いて、ダウンロードしたファイルを選択し、右クリックメニューからプロパティをクリックします。
Screenshot from 2021-12-30 18-02-21.png
プロパティのアクセス権のタブを開き、「プログラムとして実行可能」にチェックを入れます。
アクセス権.png

プロパティを閉じて、ファイルをダブルクリックすると、Audacityが起動します。
このファイルがAudacity本体ですので、デスクトップに移動するなり、使いやすい場所においてください。
Screenshot from 2021-12-30 18-12-56.png

 
 

使い方

基本的な設定項目

windows版と同様ですので、省略します。
チャンネルはモノラルを指定しましょう。
基本設定.png

音声の録音から書き出しまで

wondows版と同様なので、一通りの作業を動画に収めたので、こちらで確認してください。
動画の音声はありません。仕様です。

補足

wondows版と同様ですので省略します。
 
 
 
 

SoXで音声を加工する(Ubuntu)

SoX(Sound eXchenge)はクロスプラットフォームのコマンドラインユーティリティで、さまざまな形式のオーディオファイルを他の形式に変換できます。
このコマンドを利用して、複数の音声ファイルを一気に変換します。

Ubuntuについてのみ解説します。

SoXのインストール

端末を開いて以下のコマンドを実行します。

$ sudo apt install sox

インストールされたかどうか以下のコマンドで確認します。

$ sox --version
sox:      SoX v14.4.2

このようにバージョンが表示されればインストールできています。

使い方

soxの使い方は以下のとおりです。

sox  [global-options] [format-options] infile1 [[format-options] infile2] ... [format-options] outfile
   [effect [effect-options]] ...

global-options:バッファサイズの指定や、警告、エラーメッセージの表示非表示などを指定できます。

        本記事で取り扱うのは正規化する際に指定する--norm=[dB]です。

format-options:音声ファイルの形式を指定します。主なオプションを以下に示します。

-r,--rate
 サンプリングレートを指定します。

-c,−−channels
 チャンネル数を指定します。ステレオの場合は2、モノラルの場合は1を指定します。

-b,--bits
 量子化ビット数を指定します。

量子化ビット数量子化ビット数とは、音の大きさを何段階で表現するかを表す数値です。
16bitなら、
$2^{16}=65536$
段階で音の大きさを表現することになります。

-t,--type
 wavやmp3など、音声ファイルの形式を指定します。
-e,--encoding
 音声を記録する数値の型を指定します。(unsigned-integerなど)

infile1:変換元の音声ファイルを指定します。
outfile:変換後のファイルを指定します。
[effect [effect-options]] ...:イコライザやフランジャーなどのエフェクトを指定できます。

本記事で扱うのはsilenceという無音区間で区切るためのエフェクトです。

サンプリングレートの変更

サンプリングレートを変換するコマンドの例を示します。

$ sox hoge.wav -r 16k hoge_16k.wav

infileのフォーマットは指定しなくても指定したファイルの形式にしたがって処理されます。
outfileのフォーマットは、ファイル名の手前にオプションを指定することに注意してください。

音声を無音部分で分割

無音区間で区切るコマンドの例を示します。

$ sox hoge.wav out.wav silence 1 1 -30d 1 0.5 -30d : newfile : restart

silenceの使い方は以下のとおりです
silence [−l] above-periods [duration threshold[d|%] [below-periods duration threshold[d|%]]

-lオプション

切り出した音声の前後に、無音を設けるかどうかを表します。
このオプションをつけると前後に無音区間が設けられます。

above-periods

何回目の音声検出まで切り捨てるか、を指定します。
1を指定すると、先頭から音声が検出されるまでの無音区間が切り捨てられます。※後述する補足の図1

below-periods

無音区間が何回検出されて以降を切り捨てるか、を指定します。(多分)※後述する補足の図1
通常1を指定します。

duration

最短継続時間を指定します。先述したAudacityの「音声から自動ラベル付」の(2),(3)に相当します。

threshold

しきい値を指定します。先述したAudacityの「音声から自動ラベル付」の(1)に相当します。
数値にdをつけるとdBとして扱われ、%をつけると、音声内の最大値に対する割合で扱われます。


より詳しい内容については、こちらのサイトをご参照ください。

音声を正規化する。

音声を正規化するコマンドの例を示します。

$ sox --norm hoge.wav hoge_norm.wav

--norm=-3のように指定すると、-3dBを最大値として正規化します。

複数ファイルの一括変換

複数ファイルのサンプリングレートを16kHzに一括で変換するコマンドの例を示します。

$ file_list=`find [音声ファイルがあるフォルダのPath] -name "*.wav" `
$ for f in $file_list; do sox $f -r 16k [出力先のフォルダのPath]/${f##*/}; done

一行目は、対象となるファイルのリストを変数に入れています。
バッククォーテーション(`)でコマンドを括ることによって、コマンドの実行結果が代入できます。
findコマンドで、指定したフォルダにの中で(任意の文字).wavに当てはまるファイルを取得しています。

二行目はforループで、ファイルを一つづつ処理しています。
${変数名##*/}は変数に格納されたPathからファイル名だけを取り出す書き方です。

出力先のフォルダは、コマンドを実行する前に作っておいてください。

補足

silenceエフェクトについてのイメージ画像です。

図1

silenceの説明1.png


図2

silenceの説明2.png


図3

silenceの説明3.png


図4

silenceの説明4.png
 
 
 
 
 
 

おわりに

本記事で説明しきれていない部分は各自で調べていただけると幸いです。

7
6
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
7
6