統計的声質変換 (1) ロードマップ
Pythonで音声信号処理(2011/5/14)のつづき。
@r9y9さんの以下のチュートリアル記事をきっかけに興味をもった統計的声質変換の実験をしてみたい。統計的声質変換とはAさんの声を別のBさんの声に変換する技術のこと。
統計的声質変換クッソムズすぎワロタ(チュートリアル編) - LESS IS MORE
「統計的」という名前からわかるように今回対象としているのはデータに基づいた声質変換である。簡単に手順をまとめると、
- 変換元のAさんと変換先のBさんの音声データを用意する
- この音声データを学習データとしてAさんの声をBさんの声に変換する統計モデルを学習する
- Aさんの任意の音声を統計モデルに入力するとBさんの声になって出てくる
という感じ。コナンの声が毛利小五郎の声になって出てくるという例の蝶ネクタイ型マイクの背景技術である。あのマイクの中にはコナンの声を毛利小五郎の声に変換する何らかの統計モデルが含まれてるんじゃないかな?
少し混乱していたのだが、テキストを入力すると合成音が出てくるいわゆるTTS(Text-to-Speech)とは少し違う。TTSで入力するのはテキストだが、声質変換で入力するのは音声になる。そのため、TTSで必要となる自然言語処理は声質変換では行わない。純粋に音声信号処理の問題のようだ。
先のチュートリアル記事ではJulia(2015/1/13)というプログラミング言語を使っている。このプロジェクトはPythonで音声信号処理(2011/5/14)の一環としてやっているため言語はPythonを使っていきたい。
大ざっぱなロードマップを書いておこう。
ロードマップ(これ)- 統計的じゃない声質変換(音声の分析合成について)
- 音声データのダウンロード
- SPTKによるメルケプストラムの抽出と可視化
- Pythonのdtwライブラリの使い方
- パラレルデータの作成
- scikit-learnのGMMライブラリの使い方
- 声質変換モデルの学習
- GMMによるメルケプストラムの変換
- MLSAフィルタによる音声の再合成
- 音声分析合成システムWORLDの使い方
- WORLDを使った声質変換
基本的に先のチュートリアル記事をなぞる形で進める予定。声質変換の統計モデルとしてメジャーな混合ガウスモデル(GMM)を使う方法を実験してみたい。GMMは前に実装した(2010/5/21)が今回は機械学習のPythonライブラリとして有名なscikit-learnを使ってみる予定。
先のチュートリアルではWORLDという音声分析合成システムが使われているが、今回は前に使ったことがあるSPTK(2012/7/1)という音声信号処理ツールを使っていく。WORLDの方ができあがる音声の品質が優れているようだがSPTKのほうが手軽そうだったので。余力があったらSPTKとWORLDで比較してみたい。
追記(2016/2/25)
- Pythonで実装している人を見つけた。すごい情報量!⇛SunPro C89 特設ページ