以下、本発明の実施の形態に係る音声合成辞書構築装置について詳細に説明する。実施形態としては、実施形態1と実施形態2とに分けて説明する。このうち実施形態1については、さらに細かく、編集の具体例1と、編集の具体例1の変形例と、編集の具体例2と、編集の具体例2の変形例と、に言及する。
(実施形態1)
図2〜図4に、本発明の実施形態1に係る音声合成辞書構築装置の機能構成を示す。
本発明の実施形態1に係る音声合成辞書構築装置は、第1学習部111(図2)と、第1音声合成辞書223(図2)と、合成部113(図3)と、第2学習部117(図4)と、から構成される装置である。
該音声合成辞書構築装置は、第1音声データベース221(図2)に基づいて第2音声合成辞書227(図4)を構築するための装置である。
第1音声データベース221(図2)は、よく知られた音声データベースである。ここには、所定の文章を読み上げた人の声を録音した音声データとモノフォンラベルデータとトライフォンラベルデータとが組になったものが、多数組、格納されている。カウンタmにより識別される個々の音声データ毎に、該音声データに対応したモノフォンラベルデータとトライフォンラベルデータとが存在する。この様子の理解を容易にするために、音声データベースに音声データのみが格納されている状態から、ラベルデータが作成され音声データベースの完成へと至る手順を、図1を参照しつつ説明する。
ラベルデータの作成及び音声データベースの完成のためには、例えば、後に図5を参照して説明するような、一般的なコンピュータ装置が用いられる。つまり、例えばリムーバブルハードディスクとして存在する音声データベースにアクセスするためのインターフェースを有し、該リムーバブルハードディスク内からデータをロードして所定の処理を行う機能や、該処理の結果を一時的に保持したり該リムーバブルハードディスク内に格納したりする機能等を有する装置が用いられる。
未完成の音声データベースには、NSp個の音声データSpm(1≦m≦NSp)が格納されているものとする。
なお、以下に説明する音声データからのピッチ抽出やメルケプストラム分析においては、音声データに一定長の時間枠が設定され、この時間枠が重複するように所定の周期(フレーム周期)で当該時間枠をずらしながら処理することで、それぞれの時点でのピッチ系列データやメルケプストラム係数系列データが算出されるが、記号fm(0≦fm≦Nfm[m])はこのフレーム周期が何番目であるかを示す番号を表すものである。
まず、上述のコンピュータ装置は、内部に音声データ識別用のカウンタmを設け、m=1に初期化設定する(図1のステップS11)。
該コンピュータ装置は、未完成の音声データベースから音声データSpmをロードし、該音声データから任意の既知の手法により、モノフォンラベルデータMLabDatam[ml](1≦ml≦MLSp[m])を生成する(ステップS13)。ここで、MLSp[m]は、音声データSpmに含まれるモノフォンラベルの数である。
モノフォンラベルデータMLabDatam[ml]は、モノフォンラベルMLabm[ml]と、音声データSpmの継続時間のうち該モノフォンラベルの始点及び終点に該当する時刻をフレーム周期の番号で指し示すポインタである開始フレームMFrameSm[ml]及び終了フレームMFrameEm[ml]と、から構成される。
モノフォンラベルデータMLabDatam[ml]は、音声データベースに格納される(ステップS15)。
続いて、該コンピュータ装置は、ロードされたままになっている音声データSpmから、任意の既知の手法により、トライフォンラベルデータTLabDatam[tl](1≦tl≦TLSp[m])を生成する(ステップS17)。ここで、トライフォンラベルデータとは、トライフォンラベルそのものであり、また、TLSp[m]は、音声データSpmに含まれるトライフォンラベルの数である。
トライフォンラベルデータTLabDatam[tl]は、音声データベースに格納される(ステップS19)。
続いて、mがNSpに達したか否かが判別される(ステップS21)。達していないと判別された場合(ステップS21;No)、mを1増加してから(ステップS23)、ステップS13に戻り、達したと判別された場合(ステップS21;Yes)、終了する。
終了すれば、音声データベースには、全ての音声データSpmについてのモノフォンラベルデータMLabDatam[ml]及びトライフォンラベルデータTLabDatam[tl]が格納されたことになる。このようにして、音声データベースは完成する。
本発明の実施形態1に係る音声合成辞書構築装置の第1学習部111(図2)は、上述のように完成された音声データベースである第1音声データベース221から、音声データSpm(1≦m≦NSp)と、モノフォンラベルデータMLabDatam[ml](1≦ml≦MLSp[m])と、トライフォンラベルデータTLabDatam[tl](1≦tl≦TLSp[m])と、を取得する。そして、第1学習部111は、合成音声を生成するために用いられる音声合成辞書である第1音声合成辞書223を、既知の手法である音素HMM学習により、構築する。第1音声合成辞書223に格納された内容を、第1学習結果と呼ぶことにする。
第1学習部111は、第1ピッチ抽出部311と、メルケプストラム分析部313と、第1音素HMM学習部315と、を備える。
第1ピッチ抽出部311は、第1音声データベース221から音声データSpm(1≦m≦NSp)を受け取り、任意の既知の手法により、m番目の音声データからピッチ系列データPitm[fm]を生成し、第1音素HMM学習部315及び後述の第2学習部117(図4)に引き渡す。
メルケプストラム分析部313(図2)は、第1音声データベース221から音声データSpm(1≦m≦NSp)を受け取り、該音声データに対して、既知の手法であるD次のメルケプストラム分析を施す。その結果、メルケプストラム分析部313は、m番目の音声データの全てのフレームfm(0≦fm≦Nfm[m])について、0次〜D次までのメルケプストラム係数系列データMCm d[fm](0≦d≦D)を生成し、第1音素HMM学習部315及び後述の第2学習部117(図4)に引き渡す。
第1音素HMM学習部315(図2)は、第1音声データベース221からモノフォンラベルデータMLabDatam[ml](1≦m≦NSp、1≦ml≦MLSp[m])及びトライフォンラベルデータTLabDatam[tl](1≦m≦NSp、1≦tl≦TLSp[m])を受け取る。第1音素HMM学習部315はまた、第1ピッチ抽出部311からピッチ系列データPitm[fm](1≦m≦NSp、0≦fm≦Nfm[m])を受け取り、メルケプストラム分析部313からメルケプストラム係数系列データMCm d[fm](1≦m≦NSp、0≦d≦D、0≦fm≦Nfm[m])を受け取る。第1音素HMM学習部315は、受け取ったこれらのデータから、既知の手法である音素HMM学習により、学習結果である第1学習結果を生成し、第1音声合成辞書223に格納する。より正確には、空のデータベースに第1学習結果が格納されることにより、該空のデータベースが第1音声合成辞書223として完成される。
図3に示される合成部113は、音素HMM列生成部321と、時系列データ生成部323と、励起音源生成部325と、MLSA合成フィルタ部327と、を備える。
合成部113は、第1音声データベース221(図2)からトライフォンラベルデータTLabDatam[tl]を取得し、第1音声合成辞書223から第1学習結果を取得し、合成音声データSynSpm(1≦m≦NSp)を出力する。出力された合成音声データSynSpmは、後述の第2学習部117(図4)に引き渡される。
トライフォンラベルデータTLabDatam[tl]が第1音声データベース221から取得されているから、合成部113は、いわば、第1音声データベース221に格納されている音声データと同じセリフを合成音声という態様にて発していることになる。したがって当然のことながら、個々の合成音声データは元の音声データと同じく符号mにより識別されるし、合成音声データの個数は元の音声データの個数と同じくNSpである。
ここでの合成音声は、図2に示したように、従来からよく知られた音素HMM学習の結果に基づいて生成されたものである。かかる合成音声は、元の音声である人間の自然な音声に比べて、平坦な印象を与える不自然なものとなることが知られている。合成音声のピッチ変動は、一般に、元の音声のピッチ変動に比べて小さいためである。
図3の音素HMM列生成部321は、図2の第1音声データベース221からトライフォンラベルデータTLabDatam[tl]を受け取り、図2の第1音声合成辞書223から第1学習結果を受け取る。そして、図3の音素HMM列生成部321は、受け取った第1学習結果に基づいて、既知の手法により、受け取ったトライフォンラベルデータTLabDatam[tl]から、ピッチに関する音素HMM系列データと、メルケプストラムに関する音素HMM系列データと、を生成し、それらを時系列データ生成部323に引き渡す。
時系列データ生成部323は、引き渡されたピッチに関する音素HMM系列データ及びメルケプストラムに関する音素HMM系列データから、既知の手法により、ピッチ時系列データ及びメルケプストラム時系列データを生成し、ピッチ時系列データは励起音源生成部325に、メルケプストラム時系列データはMLSA合成フィルタ部327に、それぞれ引き渡す。
励起音源生成部325は、引き渡されたピッチ時系列データから、既知の手法により、励起音源データを生成し、MLSA合成フィルタ部327に引き渡す。
MLSA合成フィルタ部327は、時系列データ生成部323から引き渡されたメルケプストラム時系列データに基づいて、既知の手法により、MLSA(Mel Log Spectrum Approximation)フィルタとしての自らの仕様を定義する。かかる定義が済んだMLSA合成フィルタ部327に、励起音源生成部325が生成した励起音源データが入力されると、合成音声データSynSpmが出力される。出力された合成音声データSynSpmは、図4の第2学習部117に送られる。
図4に示す第2学習部117は、第2ピッチ抽出部341と、方針決定部343と、編集部345と、第2音素HMM学習部347と、を備える。
第2学習部117は、第1音声データベース221(図2)からトライフォンラベルデータTLabDatam[tl]及びモノフォンラベルデータMLabDatam[ml]を取得し、第1学習部111(図2)からピッチ系列データPitm[fm]及びメルケプストラム係数系列データMCm d[fm]を受け取り、合成部113(図3)から合成音声データSynSpmを受け取り、以下で説明するようにこれらのデータに基づいて音素HMM学習を行い、学習結果を第2学習結果として出力する。
図4の第2ピッチ抽出部341は、図2の第1ピッチ抽出部311と同じ機能を有し、ほぼ同様のことを行う。相違点は、入力されるデータが音声データSpmではなく合成音声データSynSpmであること及びfmの上限がNfm[m]とは必ずしも一致しないMfm[m]であることである。かかる相違ゆえ、第2ピッチ抽出部341が生成するデータを、合成音声ピッチ系列データSynPitm[fm]( 0≦fm≦Mfm[m])と呼ぶことにする。該データは、方針決定部343に引き渡される。
方針決定部343には、ピッチ系列データPitm[fm]と、合成音声ピッチ系列データSynPitm[fm]と、が集められる。前者は人間の自然な発話から収集された音声データに基づいて生成されたものである一方、後者はいったん音声合成辞書を経て発せられた合成音声データに基づいて生成されたものである。方針決定部343は、これら2種のデータを集めるので、これらを比較検討することができる。そこで、方針決定部343は、かかる比較検討により、合成音声が元の音声に比べて平坦で不自然なものとならないようにするには、元の音声に対して、そもそもあらかじめいかなる処理を施しておくべきだったのかを検討する。具体的には、方針決定部343は、ピッチ系列データPitm[fm]を、音素HMM学習の前にどのように編集しておくべきか、という編集方針を決定する。少なくとも定性的には、元の音声のピッチ変動が大きくなるように、ピッチ系列データPitm[fm]をあらかじめ編集しておけば、合成音声がより自然なものとなる。
なお、編集方針の詳細については、後に例を挙げて説明する。
方針決定部343は、かかる比較検討の結果決定したピッチ系列データPitm[fm]の編集方針を、編集部345に伝達する。
編集部345は、伝達された編集方針に従って、ピッチ系列データPitm[fm]を編集し、編集ピッチ系列データEdPitm[fm]を生成し、第2音素HMM学習部347に引き渡す。
第2音素HMM学習部347は、図2の第1音素HMM学習部315と同じ機能を有しており、ほぼ同じ処理を行う。相違点は、ピッチ系列データPitm[fm]の代わりに、編集ピッチ系列データEdPitm[fm]を用いる点である。すなわち、第2音素HMM学習部347(図4)は、モノフォンラベルデータMLabDatam[ml]と、トライフォンラベルデータTLabDatam[tl]と、編集ピッチ系列データEdPitm[fm]と、メルケプストラム係数系列データMCm d[fm]と、を受け取り、受け取ったこれらのデータから、音素HMM学習により、学習結果である第2学習結果を生成し、第2音声合成辞書227に格納する。より正確には、空のデータベースに第2学習結果が格納されることにより、該空のデータベースが第2音声合成辞書227として完成される。
この第2音声合成辞書227こそが、本実施形態に係る音声合成辞書構築装置がその構築を目標とした音声合成辞書である。従来の技術により構築された第1音声合成辞書223(図2)に基づいて生成された合成音声に比べて、第2音声合成辞書227に基づいて生成された合成音声は、ピッチ変動が十分に大きい自然なものとなる。上述のように、方針決定部343(図4)において、合成音声が平坦で不自然な音声にならないようするために元の音声データに施すべき処理、すなわち、元の音声データのピッチ変動を大きくするためのピッチ系列データPitm[fm]の編集方針、を決定し、該編集方針に従って編集部345により生成された編集ピッチ系列データEdPitm[fm]を用いて、音素HMM学習が行われるためである。
ここまで図2〜図4を参照して説明してきた音声合成辞書構築装置は、物理的には、図5に示すような一般的なコンピュータ装置511により、構成される。
CPU(Central Processing Unit、中央演算装置)521、ROM(Read Only Memory)523、記憶部525、操作キー入力処理部533、及び、データ入出力インタフェース(以下、I/Fと書く。)555は、システムバス541で相互に接続されている。システムバス541は、命令やデータを転送するための伝送経路である。
CPU521は、カウンタ用レジスタや汎用レジスタ等の各種のレジスタ(図示せず)を内蔵しており、ROM523から読み出した動作プログラムに従って、処理対象である数値列等を適宜記憶部525から前記レジスタにロードし、ロードされた数値列に所定の演算を施し、その結果を記憶部525等に格納する。
ROM523は、音素HMM学習のための既知の動作プログラムの他に、特に、本実施形態においては、ピッチ系列データPitm[fm]の編集方針を決定し編集ピッチ系列データEdPitm[fm]を生成するための動作プログラムを記憶する。
記憶部525は、RAM(Random Access Memory)527や内蔵ハードディスク529から構成されて、音声データ、ラベルデータ、ピッチ系列データ、メルケプストラム係数系列データ、音素HMM等を、一時的に記憶する。これらのデータ等は、CPU521の内蔵レジスタから伝達されたり、後述のリムーバブルハードディスクから伝達されたりする。
また、特に、本実施形態においては、内蔵ハードディスク529は、第1音声合成辞書223(図2)として機能することが想定されている。第1音声合成辞書223は、本実施形態に係る音声合成辞書構築装置にとっては、中間生成物に過ぎず、外部から与えられるものでもないし最終的に該装置から取り外して利用するものでもなく、一時的に記憶されればよいものだからである。
操作キー入力処理部533は、ユーザI/Fである操作キー531からの操作信号を受け付けて、操作信号に対応するキーコード信号をCPU521に入力する。CPU521は、入力されたキーコード信号に基づいて操作内容を決定する。
ユーザが操作キー531を介して、本実施形態に係る音声合成辞書構築装置の動作設定を所望のものに変更することができるようにすることが好ましい。例えば、後述の、編集ピッチ系列データEdPitm[fm]をピッチ系列データPitm[fm]から生成する手順においては、編集方針として、後述の編集の具体例のうちのひとつがROM523にあらかじめ選択設定されているものとし、希望する場合にはユーザ自身が操作キー531を介して該設定を変更できるようにしてもよい。
データ入出力I/F555は、元データの入った第1リムーバブルハードディスク551等及び処理済データ記録用の第2リムーバブルハードディスク553等に接続するためのインタフェースである。該I/Fは、作業の効率化のため、かかる2個のリムーバブルハードディスクを同時に接続できるものとする。該I/Fは、第1及び第2リムーバブルハードディスク551及び553のいずれともデータの双方向通信ができる、一般的な仕様のものであり、その意味で双方向の白抜き矢印が図示されている。もっとも、第1リムーバブルハードディスク551との通信においては、主に該ディスクから元データの読み込みが行われる一方、第2リムーバブルハードディスク553との通信においては、主に該ディスクへ処理済データが書き込まれるため、情報の伝達は主に実線の矢印で表される向きになされる。
元データとしては、図2の第1音声データベース221に格納されたデータが想定され、処理済データとしては、図4の第2音声合成辞書227に格納された第2学習結果が想定される。つまり、第1リムーバブルハードディスク551は図2の第1音声データベース221に、第2リムーバブルハードディスク553は図4の第2音声合成辞書227に、それぞれ対応する。
ユーザは、本実施形態に係る音声合成辞書構築装置を用いて音声合成辞書を構築したいときには、与えられた第1音声データベース221すなわち第1リムーバブルハードディスク551と、空の第2リムーバブルハードディスク553と、を、それぞれデータ入出力I/F555の所定の位置に接続する。その後、ユーザは、操作キー531を操作する等して音声合成辞書構築装置を動作させる。すると、CPU521の制御下に、各種処理が行われる。例えば、データ入出力I/F555を介して、コンピュータ装置511と、第1及び第2リムーバブルハードディスク551及び553と、の間で、データの入出力が行われる。かかる動作が終了したときには、第2リムーバブルハードディスク553には、図4に示した第2学習結果が書き込まれている。つまり、該ディスクは図4の第2音声合成辞書227として機能するのにあたり必要なデータが全て書き込まれた状態になっている。この後、ユーザが合成音声の発生を希望する場合には、該ディスクをユーザI/F555から取り外して、該ディスクを音声合成辞書として接続することができる音声合成装置に取り付け、該音声合成装置を動作させることにより、合成音声を発生させることができる。
図4に示すように、本実施形態に係る音声合成辞書構築装置の特徴は、方針決定部343においてピッチ系列データPitm[fm]の編集方針を決定するとともに、かかる編集方針に従い編集部345においてピッチ系列データPitm[fm]を編集して編集ピッチ系列データEdPitm[fm]を生成することである。
編集部345が実行する編集処理は、音声データSpmのピッチ変動を適度に大きくする処理であれば、いかなる処理でもよい。ただし、特に本実施形態の場合には、かかる処理の指針を、方針決定部343に集められたピッチ系列データPitm[fm]と、合成音声ピッチ系列データSynPitm[fm]と、に基づいて、効率的に、かつ的確に、そして簡易に、決定することが重要である。
(編集の具体例について)
以下に、かかる編集処理の典型的な手順について説明する。
なお、少なくとも定性的には、個々のピッチ系列データPitm[fm]とその平均値との差を大きくしたものを編集ピッチ系列データEdPitm[fm]とすれば、音声データSpmのピッチ変動は大きくなる。そこで、以下の編集の具体例についての説明は、前記平均値と個々の値との差を具体的にはどのように大きくするかについての説明に重点が置かれたものになるとともに、基本的には、該差に編集用の1より大きいなんらかの値を乗じることにより該差を拡大して編集ピッチ系列データEdPitm[fm]を求めることを念頭においたものになる。
ただし、上述の差を拡大し過ぎた音声データに基づいて生成された合成音声は、平坦さの程度が小さすぎるためにかえって不自然になると考えられる。したがって、上述の編集用の1より大きいなんらかの値は、大き過ぎてはならないのであって、適度な大きさであることが望ましい。かかる適度な大きさは、元の音声データと、それに基づいて生成された従来技術による合成音声データとの比較により決めるのが妥当であると考えられる。なぜなら、前者のデータと後者のデータとの差が、音素HMM学習の過程で生じる平坦さの程度に対応しているのであるから、該差に基づいて編集方針を立てあらかじめ前者のデータを平坦さの程度を小さくしたデータに編集しておけば、かかる編集が施されたデータに基づいて生成された合成音声データにおける平坦さは適度に平坦さの程度が小さく聴く者に自然な印象を与えると考えられるからである。以下の説明からも明らかなように、図4の方針決定部343が決定する編集方針は、このような考察に沿ったものである。
以下で説明する複数の手順のうち、どれを採用するのが最適であるかは、第1音声データベース221(図2)に収録されたサンプルデータの性質や、本実施形態に係る音声合成辞書構築装置として用いられるコンピュータ装置511(図5)のCPU521の処理能力や、合成音声として発話させたい内容や、あるいは合成音声の聴き手の感じ方等、様々な要素によって左右されるので、一概には結論づけられない。いくつかの手順を試行してみて、与えられた各種条件下で最適な手順がどれであるかを決定するのが妥当である。
様々な手順が考えられるものの、これらの手順は、上述のように、図4の方針決定部343による編集方針の決定とそれに応じたピッチ系列データの編集の実行という点では、一貫している。すなわち、以下に示す様々な手順は、かかる技術的思想の範囲内におけるバリエーションである。
図5に示したとおり、本実施形態に係る音声合成辞書構築装置として機能するコンピュータ装置511は、記憶装置として、CPU521の内蔵レジスタと、記憶部525の中のRAM527及び内蔵ハードディスク529と、を有する他にも、音声合成辞書構築中にはデータ入出力I/F555に接続され続けているため事実上前記コンピュータ装置511の一部ともいえる第1リムーバブルハードディスク551及び第2リムーバブルハードディスク553と、を有する。以下では、理解を容易にするために、各種演算が行われる場である前記レジスタ以外の記憶装置を総称して、単に記憶部525と呼ぶことにする。すると、記憶部525には、音声データSpmと、モノフォンラベルデータMLabDatam[ml]と、トライフォンラベルデータTLabDatam[tl]と、が初めから格納されていることになる。以下ではさらに、ピッチ系列データPitm[fm]、メルケプストラム係数系列データMCm d[fm]、及び、合成音声ピッチ系列データSynPitm[fm]が既に求められ記憶部525に格納されているものとする。
なお、フレームは、有声音のフレームと無声音のフレームとに分類される。どのフレームが有声音のフレームでどのフレームが無声音のフレームであるかは、既に任意の既知の手法によって求められ、その結果も記憶部525に格納済みであるものとする。そして、以下では、「Pitm[fm]」又は「SynPitm[fm]」と記した場合、それはピッチの具体的な値を意味するとともに、特に明示しなくても、それに対応するフレームfmが有声音のフレームであるかそれとも無声音のフレームであるかの区別が既についていることも意味するものとする。
(編集の具体例1)
図6〜図12に示すフローチャートを参照しつつ、編集の具体例1について説明する。
まず、図6のように、編集用録音平均値AvePitmを算出する。そのためには、図5のCPU521の内部のカウンタレジスタ(図示せず。)にカウンタmの初期値として1が格納される(ステップS111)。このmは、着目しているピッチ系列データがどの音声データに属しているかを識別するための変数である。
次に、CPU521は、内部の汎用レジスタ(図示せず。)に編集用録音平均値AvePitmを格納する領域を設けるとともに、編集用録音平均値AvePitmを0に設定する。そして、CPU521は、前記mを格納するカウンタレジスタとは別のカウンタレジスタにフレーム識別用カウンタfmを格納することとして、その初期値を0に設定する。そして、CPU521は、さらに別のカウンタレジスタにカウンタNVfm[m]を格納することとして、その初期値を0に設定する(ステップS113)。
前記NVfm[m]はm番目の音声データのうちにいくつの有声音のフレームが存在するかを数えるための変数である。
続いて、CPU521は、fmで特定されるフレームが有声音のフレームであるか否かを判別する(ステップS115)。
fmで特定されるフレームが有声音のフレームであると判別された場合(ステップS115;Yes)は、CPU521は、記憶部525からピッチ系列データPitm[fm]をロードする(ステップS117)。そして、CPU521は、かかるPitm[fm]をAvePitmに加えて新たなAvePitmとするとともに、NVfm[m]に1を加えて新たなNVfm[m]とする(ステップS119)。すなわち、AvePitmはAvePitm+ Pitm[fm]に、NVfm[m]はNVfm[m]+1に、それぞれ更新される。その後、ステップS121に進む。
fmで特定されるフレームが有声音のフレームではないと判別された場合(ステップS115;No)は、すぐにステップS121に進む。
ステップS121では、CPU521は、m番目の音声データの全てのフレームについての処理が完了したか否かを判別する。つまり、CPU521は、fm≧Nfm[m]であるか否かを判別する。
fm≧Nfm[m]ではないと判別された場合(ステップS121;No)は、CPU521は、次のフレームについての処理を行うために、fmを1増加する(ステップS123)。そして、ステップS115に戻る。一方、fm≧Nfm[m]であると判別された場合(ステップS121;Yes)は、ステップS125に進む。
ステップS125に進んだ時点では、AvePitmの値は、m番目の音声データのうちの有声音のフレームにおけるピッチ系列データPitm[fm]の合計値となっている。そこで、ステップS125では、CPU521は、AvePitmを有声音のフレームの数であるNVfmで除して、m番目の音声データのうちの有声音のフレームにおけるピッチ系列データの平均値としてのAvePitmを求める。すなわち、AvePitmは、AvePitm /NVfmに更新される。CPU521は、更新されたAvePitmを、記憶部525に格納する(ステップS127)。
CPU521は、全ての音声データについての処理が完了したか否かを判別する(ステップS129)。つまり、CPU521は、m≧NSpであるか否かを判別する。
m≧NSpではないと判別された場合(ステップS129;No)は、CPU521は、次の音声データについての処理を行うために、mを1増加する(ステップS131)。そして、ステップS113に戻る。一方、m≧NSpであると判別された場合(ステップS129;Yes)は、CPU521は、処理を終了する。
続いて、図7のように、編集用合成平均値AveSynPitmを算出する(ステップS161〜S181)。かかる算出の手順は、図6に示した編集用録音平均値AvePitmを算出する手順とほぼ同じである。主な相違点は、ピッチ系列データPitm[fm]についての平均値ではなく合成音声ピッチ系列データSynPitm[fm]についての平均値を求めること(ステップS167、ステップS169、ステップS175)や、m番目の音声データに対応するフレームの番号の上限は必ずしもNfm[m]と一致しないため別の変数Mfm[m]が用いられていること(ステップS171)である。
続いて、図8のように、編集用録音音声別最大絶対値mxAbsDiffPitmを算出する。
CPU521は、音声データ識別用カウンタmをm=1に設定する(ステップS211)。CPU521はさらに、mxAbsDiffPitmを例えば0といった十分小さな値に設定するとともに、フレーム識別用カウンタfmをfm=0に設定する(ステップS213)。
CPU521は、fmで特定されるフレームが有声音のフレームであるか否かを判別する(ステップS215)。
fmで特定されるフレームが有声音のフレームではないと判別された場合(ステップS215;No)は、ステップS225に進む。
fmで特定されるフレームが有声音のフレームであると判別された場合(ステップS215;Yes)は、CPU521は、記憶部525から、ピッチ系列データPitm[fm]と、上述のとおり図6に示された手順により求められたAvePitmと、をロードする(ステップS217)。そして、CPU521は、TmpmxAbsDiffPitm=| Pitm[fm]-AvePitm|を算出し(ステップS219)、TmpmxAbsDiffPitm≧mxAbsDiffPitmであるか否かを判別する(ステップS221)。TmpmxAbsDiffPitm≧mxAbsDiffPitmではないと判別された場合(ステップS221;No)は、すぐにステップS225に進み、TmpmxAbsDiffPitm≧mxAbsDiffPitmであると判別された場合(ステップS221;Yes)は、mxAbsDiffPitmをmxAbsDiffPitm=TmpmxAbsDiffPitmのように更新してから(ステップS223)、ステップS225に進む。
ステップS225では、CPU521は、fm≧Nfm[m]であるか否かを判別する。
fm≧Nfm[m]ではないと判別された場合(ステップS225;No)は、fmを1増加してから(ステップS227)、ステップS215に戻る。一方、fm≧Nfm[m]であると判別された場合(ステップS225;Yes)は、ステップS229に進む。
ステップS229では、CPU521は、mxAbsDiffPitmを記憶部525に格納する。
ステップS231では、CPU521は、m≧NSpであるか否かを判別する。
m≧NSpではないと判別された場合(ステップS231;No)は、mを1増加してから(ステップS233)、ステップS213に戻る。一方、m≧NSpであると判別された場合(ステップS231;Yes)は、処理を終了する。
続いて、図9のように、編集用合成音声別最大絶対値mxAbsDiffSynPitmを算出する(ステップS261〜S283)。かかる算出の手順は、図8に示した編集用録音音声別最大絶対値mxAbsDiffPitmを算出する手順とほぼ同じである。主な相違点は、ピッチ系列データPitm[fm]ではなく合成音声ピッチ系列データSynPitm[fm]を扱う点(ステップS267、ステップS269)や、図6に示した手順により求められた編集用録音平均値AvePitmではなく図7に示した手順により求められた編集用合成平均値AveSynPitmを用いる点(ステップS267、ステップS269)や、m番目の音声データに対応するフレームの番号の上限としてNfm[m]ではなくMfm[m]を用いる点(ステップS275)である。
続いて、図10のように、編集用録音総合最大絶対値MaxAbsDiffPitを算出する。
CPU521は、MaxAbsDiffPitを例えば0といった十分小さな値に設定するとともに、音声データ識別用カウンタmをm=1に設定する(ステップS311)。
CPU521は、記憶部525から、図8に示した手順により求められたmxAbsDiffPitmをロードし(ステップS313)、TmpMaxAbsDiffPit=mxAbsDiffPitmとする(ステップS315)。
CPU521は、TmpMaxAbsDiffPit≧MaxAbsDiffPitであるか否かを判別する(ステップS317)。TmpMaxAbsDiffPit≧MaxAbsDiffPitではないと判別された場合(ステップS317;No)は、すぐにステップS321に進む。一方、TmpMaxAbsDiffPit≧MaxAbsDiffPitであると判別された場合(ステップS317;Yes)は、MaxAbsDiffPitをMaxAbsDiffPit=TmpMaxAbsDiffPitのように更新してから(ステップS319)、ステップS321に進む。
ステップS321では、CPU521は、m≧NSpであるか否かを判別する。
m≧NSpではないと判別された場合(ステップS321;No)は、mを1増加してから(ステップS323)、ステップS313に戻る。一方、m≧NSpであると判別された場合(ステップS321;Yes)は、MaxAbsDiffPitを記憶部525に格納してから(ステップS325)、処理を終了する。
続いて、図11のように、編集用合成総合最大絶対値MaxAbsDiffSynPitを算出する(ステップS361〜S375)。かかる算出の手順は、図10に示した編集用録音総合最大絶対値MaxAbsDiffPitを算出する手順とほぼ同じである。主な相違点は、図8に示した手順により求められた編集用録音音声別最大絶対値mxAbsDiffPitmではなく図9に示した手順により求められた編集用合成音声別最大絶対値mxAbsDiffSynPitmを用いること(ステップS363、ステップS365)である。
このように、図6と図7、図8と図9、図10と図11、は、それぞれ、第1音声データベース221(図2)に格納されている元の音声のピッチ系列データについての手順と第1音声合成辞書223(図2)に基づく合成音声のピッチ系列データについての手順との対になっている。
本編集の具体例において最終的に編集ピッチ系列データEdPitm[fm]を求める手順を、図12のフローチャートに示す。
なお、図12においては、本実施形態における編集ピッチ系列データEdPitm[fm]を、第1編集ピッチ系列データEdPitm[fm]と表記してあるが、記号EdPitm[fm]自体は、後述の他の例においても、編集部345(図4)が生成する編集ピッチ系列データを指すものとする。
第1編集ピッチ系列データEdPitm[fm]を求めるためには、まず、CPU521は、図10に示した手順により求められた編集用録音総合最大絶対値MaxAbsDiffPitと、図11に示した手順により求められた編集用合成総合最大絶対値MaxAbsDiffSynPitと、を記憶部525からロードする(ステップS411)。
続いて、CPU521は、音声データ識別用カウンタmを、m=1に設定し(ステップS413)、フレーム識別用カウンタfmをfm=0に設定する(ステップS415)。
CPU521は、ピッチ系列データPitm[fm]をロードし(ステップS417)、fmで特定されるフレームが有声音のフレームであるか否かを判別する(ステップS419)。
fmで特定されるフレームが有声音のフレームであると判別された場合(ステップS419;Yes)は、CPU521は、図6に示した手順により求められた編集用録音平均値AvePitmを記憶部525からロードする(ステップS421)。そして、CPU521は、第1編集ピッチ系列データEdpitm[fm]を、
Edpitm[fm]=(Pitm[fm]- AvePitm)×(MaxAbsDiffPit/MaxAbsDiffSynPit)+AvePitm
により算出し(ステップS423)、記憶部525に格納する(ステップS427)。
一方、fmで特定されるフレームが有声音のフレームではないと判別された場合(ステップS419;No)は、CPU521は、Pitm[fm]をそのまま第1編集ピッチ系列データEdpitm[fm]とし(ステップS425)、記憶部525に格納する(ステップS427)。
CPU521は、fm≧Nfm[m]であるか否かを判別する(ステップS429)。
fm≧Nfm[m]ではないと判別された場合(ステップS429;No)は、fmを1増加してから(ステップS431)、ステップS417に戻る。一方、fm≧Nfm[m]であると判別された場合(ステップS429;Yes)は、ステップS433に進む。
ステップS433では、CPU521は、m≧NSpであるか否かを判別する。
m≧NSpではないと判別された場合(ステップS433;No)は、mを1増加してから(ステップS435)、ステップS415に戻る。一方、m≧NSpであると判別された場合(ステップS433;Yes)は、処理を終了する。
既に述べたとおり、一般に、従来の方法によれば、合成音声は平坦な印象を与える不自然な音声となるのであり、その理由は、合成音声のピッチ変動が元の自然な音声のピッチ変動に比べて小さくなってしまうためである。
ところで、図10に示した手順から明らかなように、編集用録音総合最大絶対値MaxAbsDiffPitは、元の音声データ全部のうちの、ピッチ平均からのズレの最大値を示している。一方、図11に示した手順から明らかなように、編集用合成総合最大絶対値MaxAbsDiffSynPitは、合成音声データ全部のうちの、ピッチ平均からのズレの最大値を示している。
よって、編集用録音総合最大絶対値MaxAbsDiffPitは元の自然な音声におけるピッチ変動の程度を表す指標であり、編集用合成総合最大絶対値MaxAbsDiffSynPitは合成音声におけるピッチ変動の程度を表す指標である、と考えることができる。
合成音声が上述のように平坦であるということから、ほぼ確実に、MaxAbsDiffSynPit<MaxAbsDiffPitとなることが期待される。そして、合成音声のピッチ変動を元の自然な音声のピッチ変動と同程度にするためには、元の自然な音声におけるピッチ変動を、あらかじめ、1より適度に大きい値であると期待される(MaxAbsDiffPit/MaxAbsDiffSynPit)倍に拡大しておくのが適切であると考えられる。図12のステップS423において、ピッチ系列データとその平均値との差に(MaxAbsDiffPit/MaxAbsDiffSynPit)なる値を乗じているのは、このような理由による。
こうしてあらかじめピッチ変動を大きくしておいたピッチ系列データを用いて第2音素HMM学習部347(図4)による音素HMM学習がなされるので、かかる学習結果が格納された第2音声合成辞書227(図4)は、自然な印象を与える音声を合成することに役立つ。
(編集の具体例1の変形例)
図13〜図21と、既に説明した図6及び図7と、に示すフローチャートを参照しつつ、編集の具体例1の変形例について説明する。
図13のように、編集用録音音声別最大値mxDiffPitmを算出する。CPU521は、音声データ識別用カウンタmをm=1に設定する(ステップS9111)。CPU521はさらに、mxDiffPitmを0等の十分小さな値に設定するとともに、フレーム識別用カウンタfmをfm=0に設定する(ステップS9113)。
CPU521は、フレームfmが有声音のフレームであるか否かを判別する(ステップS9115)。
フレームfmが有声音のフレームではないと判別された場合(ステップS9115;No)は、すぐにステップS9125に進む。
フレームfmが有声音のフレームであると判別された場合(ステップS9115;Yes)は、CPU521は、ピッチ系列データPitm[fm]と、図6に示す手順により求められた編集用録音平均値AvePitmと、を記憶部525からロードする(ステップS9117)。そして、CPU521は、TmpmxDiffPitm=Pitm[fm]-AvePitmを算出し(ステップS9119)、TmpmxDiffPitm≧mxDiffPitmであるか否かを判別する(ステップS9121)。TmpmxDiffPitm≧mxDiffPitmではないと判別された場合(ステップS9121;No)は、すぐにステップS9125に進み、TmpmxDiffPitm≧mxDiffPitmであると判別された場合(ステップS9121;Yes)は、mxDiffPitmをmxDiffPitm=TmpmxDiffPitmのように更新してから(ステップS9123)、ステップS9125に進む。
ステップS9125では、CPU521は、fm≧Nfm[m]であるか否かを判別する。fm≧Nfm[m]ではないと判別された場合(ステップS9125;No)は、fmを1増加してから(ステップS9127)、ステップS9115に戻る。一方、fm≧Nfm[m]であると判別された場合(ステップS9125;Yes)は、CPU521はmxDiffPitmを記憶部525に格納してから(ステップS9129)、ステップS9131に進む。
ステップS9131では、CPU521は、m≧NSpであるか否かを判別する。m≧NSpではないと判別された場合(ステップS9131;No)は、mを1増加してから(ステップS9133)、ステップS9113に戻る。一方、m≧NSpであると判別された場合(ステップS9131;Yes)は、処理を終了する。
続いて、図14のように、編集用録音音声別最小値mnDiffPitmを算出する。CPU521は、音声データ識別用カウンタmをm=1に設定する(ステップS9161)。CPU521はさらに、mnDiffPitmを0等の十分大きな値に設定するとともに、フレーム識別用カウンタfmをfm=0に設定する(ステップS9163)。
なお、編集用録音音声別最小値mnDiffPitmは、この後の手順から明らかなように、最終的には0以下の値になる。よって、上述のようにステップS9163では、mnDiffPitmの初期値を例えば0とすれば、mnDiffPitmの初期値を十分大きな値に設定したといえる。
CPU521は、フレームfmが有声音のフレームであるか否かを判別する(ステップS9165)。
フレームfmが有声音のフレームではないと判別された場合(ステップS9165;No)は、すぐにステップS9175に進む。
フレームfmが有声音のフレームであると判別された場合(ステップS9165;Yes)は、CPU521は、ピッチ系列データPitm[fm]と、図6に示す手順により求められた編集用録音平均値AvePitmと、を記憶部525からロードする(ステップS9167)。そして、CPU521は、TmpmnDiffPitm=Pitm[fm]-AvePitmを算出し(ステップS9169)、TmpmnDiffPitm≦mnDiffPitmであるか否かを判別する(ステップS9171)。TmpmnDiffPitm≦mnDiffPitmではないと判別された場合(ステップS9171;No)は、すぐにステップS9175に進み、TmpmnDiffPitm≦mnDiffPitmであると判別された場合(ステップS9171;Yes)は、mnDiffPitmをmnDiffPitm=TmpmnDiffPitmのように更新してから(ステップS9173)、ステップS9175に進む。
ステップS9175では、CPU521は、fm≧Nfm[m]であるか否かを判別する。fm≧Nfm[m]ではないと判別された場合(ステップS9175;No)は、fmを1増加してから(ステップS9177)、ステップS9165に戻る。一方、fm≧Nfm[m]であると判別された場合(ステップS9175;Yes)は、CPU521はmnDiffPitmを記憶部525に格納してから(ステップS9179)、ステップS9181に進む。
ステップS9181では、CPU521は、m≧NSpであるか否かを判別する。m≧NSpではないと判別された場合(ステップS9181;No)は、mを1増加してから(ステップS9183)、ステップS9163に戻る。一方、m≧NSpであると判別された場合(ステップS9181;Yes)は、処理を終了する。
続いて、図15のように、編集用録音総合最大値MaxDiffPitを算出する。CPU521は、MaxDiffPitを0等の十分小さな値に設定するとともに、音声データ識別用カウンタmをm=1に設定する(ステップS9211)。
CPU521は、図13に示す手順により求められた編集用録音音声別最大値mxDiffPitmを記憶部525からロードし(ステップS9213)、TmpMaxDiffPit= mxDiffPitmとし(ステップS9215)、TmpMaxDiffPit≧MaxDiffPitであるか否かを判別する(ステップS9217)。
TmpMaxDiffPit≧MaxDiffPitではないと判別された場合(ステップS9217;No)は、すぐにステップS9221に進み、TmpMaxDiffPit≧MaxDiffPitであると判別された場合(ステップS9217;Yes)は、MaxDiffPitをMaxDiffPit =TmpMaxDiffPitのように更新してから(ステップS9219)、ステップS9221に進む。
ステップS9221では、CPU521は、m≧NSpであるか否かを判別する。m≧NSpではないと判別された場合(ステップS9221;No)は、mを1増加してから(ステップS9223)、ステップS9213に戻る。一方、m≧NSpであると判別された場合(ステップS9221;Yes)は、CPU521は、MaxDiffPitを記憶部525に格納してから(ステップS9225)、処理を終了する。
続いて、図16のように、編集用録音総合最小値MinDiffPitを算出する。CPU521は、MinDiffPitを0等の十分大きな値に設定するとともに、音声データ識別用カウンタmをm=1に設定する(ステップS9261)。
なお、編集用録音総合最小値MinDiffPitは、この後の手順から明らかなように、最終的には0以下の値になる。よって、上述のようにステップS9261では、MinDiffPitの初期値を例えば0とすれば、MinDiffPitの初期値を十分大きな値に設定したといえる。
CPU521は、図14に示す手順により求められた編集用録音音声別最小値mnDiffPitmを記憶部525からロードし(ステップS9263)、TmpMinDiffPit= mnDiffPitmとし(ステップS9265)、TmpMinDiffPit≦MinDiffPitであるか否かを判別する(ステップS9267)。
TmpMinDiffPit≦MinDiffPitではないと判別された場合(ステップS9267;No)は、すぐにステップS9271に進み、TmpMinDiffPit≦MinDiffPitであると判別された場合(ステップS9267;Yes)は、MinDiffPitをMinDiffPit =TmpMinDiffPitのように更新してから(ステップS9269)、ステップS9271に進む。
ステップS9271では、CPU521は、m≧NSpであるか否かを判別する。m≧NSpではないと判別された場合(ステップS9271;No)は、mを1増加してから(ステップS9273)、ステップS9263に戻る。一方、m≧NSpであると判別された場合(ステップS9271;Yes)は、CPU521は、MinDiffPitを記憶部525に格納してから(ステップS9275)、処理を終了する。
続いて、合成音声についての様々な編集用係数を求める。その手順を示したフローチャートが図17〜図20であるが、これらの図に示された手順は、上述の元の音声についての図13〜図16に示された手順とほぼ並行した手順となっている。そこで、説明が煩雑になるのを避けるために、以下では、各ステップの詳細な説明は省略し、主な注意点についてのみ説明する。
図17に示す手順に従って、編集用合成音声別最大値mxDiffSynPitmを算出する(ステップS9311〜S9333)。この手順は、図13に示した、編集用録音音声別最大値mxDiffPitmを算出する手順と酷似している。主な相違点は、ピッチ系列データPitm[fm]ではなく合成音声ピッチ系列データSynPitm[fm]を扱う点(ステップS9317、ステップS9319)や、図6に示した手順により求めた編集用録音平均値AvePitmではなく図7に示した手順により求めた編集用合成平均値AveSynPitmを用いる点(ステップS9317、ステップS9319)や、m番目の音声データに対応するフレームの番号の上限としてNfm[m]ではなくMfm[m]を用いる点(ステップS9325)である。
図18に示す手順に従って、編集用合成音声別最小値mnDiffSynPitmを算出する(ステップS9361〜S9383)。この手順は、図14に示した、編集用録音音声別最小値mnDiffPitmを算出する手順と酷似している。主な相違点は、ピッチ系列データPitm[fm]ではなく合成音声ピッチ系列データSynPitm[fm]を扱う点(ステップS9367、ステップS9369)や、図6に示した手順により求めた編集用録音平均値AvePitmではなく図7に示した手順により求めた編集用合成平均値AveSynPitmを用いる点(ステップS9367、ステップS9369)や、m番目の音声データに対応するフレームの番号の上限としてNfm[m]ではなくMfm[m]を用いる点(ステップS9375)である。
図19に示す手順に従って、編集用合成総合最大値MaxDiffSynPitを算出する(ステップS9411〜S9425)。この手順は、図15に示した、編集用録音総合最大値MaxDiffPitを算出する手順と酷似している。主な相違点は、図13に示した手順により求めた編集用録音音声別最大値mxDiffPitmではなく図17に示した手順により求めた編集用合成音声別最大値mxDiffSynPitmを用いること(ステップS9413、ステップS9415)である。
図20に示す手順に従って、編集用合成総合最小値MinDiffSynPitを算出する(ステップS9461〜S9475)。この手順は、図16に示した、編集用録音総合最小値MinDiffPitを算出する手順と酷似している。主な相違点は、図14に示した手順により求めた編集用録音音声別最小値mnDiffPitmではなく図18に示した手順により求めた編集用合成音声別最小値mnDiffSynPitmを用いること(ステップS9463、ステップS9465)である。
本変形例において最終的に編集ピッチ系列データEdPitm[fm]を求める手順を、図21のフローチャートに示す。本変形例における編集ピッチ系列データを、第1変形編集ピッチ系列データと呼ぶことにする。
第1変形編集ピッチ系列データEdPitm[fm]を求めるためには、まず、CPU521は、図15に示した手順により求められた編集用録音総合最大値MaxDiffPitと、図19に示した手順により求められた編集用合成総合最大値MaxDiffSynPitと、図16に示した手順により求められた編集用録音総合最小値MinDiffPitと、図20に示した手順により求められた編集用合成総合最小値MinDiffSynPitと、を記憶部525からロードする(ステップS9511)。
続いて、CPU521は、音声データ識別用カウンタmを、m=1に設定し(ステップS9513)、フレーム識別用カウンタfmをfm=0に設定する(ステップS9515)。
CPU521は、ピッチ系列データPitm[fm]をロードし(ステップS9517)、フレームfmが有声音のフレームであるか否かを判別する(ステップS9519)。
フレームfmが有声音のフレームであると判別された場合(ステップS9519;Yes)は、CPU521は、図6に示した手順により求められた編集用録音平均値AvePitmを記憶部525からロードする(ステップS9521)。そして、CPU521は、Pitm[fm]-AvePitm[fm]≧0であるか否かを判別する(ステップS9523)。
Pitm[fm]-AvePitm≧0であると判別された場合(ステップS9523;Yes)は、第1変形編集ピッチ系列データEdpitm[fm]を、
Edpitm[fm]=(Pitm[fm]- AvePitm)×(MaxDiffPit/MaxDiffSynPit)+AvePitm
により算出し(ステップS9525)、記憶部525に格納する(ステップS9531)。
Pitm[fm]-AvePitm[fm]≧0ではないと判別された場合(ステップS9523;No)は、第1変形編集ピッチ系列データEdpitm[fm]を、
Edpitm[fm]=(Pitm[fm]- AvePitm)×(MinDiffPit/MinDiffSynPit)+AvePitm
により算出し(ステップS9527)、記憶部525に格納する(ステップS9531)。
ステップS9519でフレームfmが有声音のフレームではないと判別された場合(ステップS9519;No)は、CPU521は、Pitm[fm]をそのまま第1編集ピッチ系列データEdpitm[fm]とし(ステップS9529)、記憶部525に格納する(ステップS9531)。
CPU521は、fm≧Nfm[m]であるか否かを判別する(ステップS9533)。fm≧Nfm[m]ではないと判別された場合(ステップS9533;No)は、fmを1増加してから(ステップS9535)、ステップS9517に戻る。一方、fm≧Nfm[m]であると判別された場合(ステップS9533;Yes)は、ステップS9537に進む。
ステップS9537では、CPU521は、m≧NSpであるか否かを判別する。m≧NSpではないと判別された場合(ステップS9537;No)は、mを1増加してから(ステップS9539)、ステップS9515に戻る。一方、m≧NSpであると判別された場合(ステップS9537;Yes)は、処理を終了する。
編集の具体例1においては、ピッチ変動を拡大するための乗数として、一律に(MaxAbsDiffPit/MaxAbsDiffSynPit)という値を用いた。それに対して、本変形例においては、図21のステップS9523〜ステップS9527に示すように、ピッチ係数系列データがその平均値を上回っている場合と下回っている場合とで別の乗数を用いる。これにより、計算はわずかに複雑になるものの、より適切にピッチ変動を拡大することができると期待される。
上記の上回っている場合の乗数としては、元の音声データ全部を走査して求めた、ピッチ平均からの上側へのズレの最大値であるMaxDiffPitを、ほぼ確実にそれよりも小さな値である、合成音声データ全部を走査して同様に求めたMaxDiffSynPitにより除した値を用いるのが最も簡易かつ確実であると考えられる。同様に、上記の下回っている場合の乗数としては、元の音声データ全部を走査して求めた、ピッチ平均からの下側へのズレの最大値であるMinDiffPitを、ほぼ確実にそれよりも絶対値としては小さな値である、合成音声データ全部を走査して同様に求めたMinDiffSynPitにより除した値を用いるのが最も簡易かつ確実であると考えられる。図13〜図21に示した手順は、かかる考察結果を、具体的な処理手順に反映させた結果である。
なお、MinDiffPit及びMinDiffSynPitは、計算処理の過程ではいずれもほぼ確実に負の値となるが、上述の乗数として用いられるのは除算(MinDiffPit÷MinDiffSynPit)の結果であり、これはほぼ確実に正の値となる。
また、既に述べたとおり、従来の合成音声は元の音声に比べてピッチ変動が小さいため、上述の2種類の乗数(MaxDiffPit/MaxDiffSynPit)、(MinDiffPit/MinDiffSynPit)は、ほぼ確実に、いずれも1より大きくなり、ピッチ変動を拡大するための乗数として適切である。
(編集の具体例2)
図22は、本編集の具体例における編集ピッチ系列データである第2編集ピッチ系列データEdPitm[fm]を算出する手順を示すフローチャートである。以下、このフローチャートを参照しつつ説明する。
CPU521は、音声データ識別用カウンタmをm=1に設定し(ステップS511)、編集用録音音声別最大絶対値mxAbsDiffPitmと編集用合成音声別最大絶対値mxAbsDiffSynPitmとを記憶部525からロードし(ステップS513)、フレーム識別用カウンタfmをfm=0に設定し(ステップS515)、ピッチ系列データPitm[fm]を記憶部525からロードし(ステップS517)、フレームfmが有声音のフレームであるか否かを判別する(ステップS519)。
なお、ここで、編集用録音音声別最大絶対値mxAbsDiffPitmと編集用合成音声別最大絶対値mxAbsDiffSynPitmとは、それぞれ、既に述べた、図8と図9とに示す手順により、求められる。
フレームfmが有声音のフレームであると判別された場合(ステップS519;Yes)は、CPU521は、図6に示す手順により求められた編集用録音平均値AvePitmをロードし(ステップS521)、編集ピッチ系列データEdPitm[fm]を、
Ed Pitm[fm]= (Pitm[fm]- AvePitm)×(mxAbsDiffPitm/mxAbsDiffSynPitm)+AvePitm
により算出し(ステップS523)、記憶部525に格納する(ステップS527)。
フレームfmが有声音のフレームではないと判別された場合(ステップS519;No)は、CPU521は、ピッチ系列データPitm[fm]をそのまま編集ピッチ系列データEdPitm[fm]とし(ステップS525)、記憶部525に格納する(ステップS527)。
ステップS529では、CPU521は、fm≧Nfm[m]であるか否かを判別する。fm≧Nfm[m]ではないと判別された場合(ステップS529;No)は、fmを1増加してから(ステップS531)、ステップS517に戻る。一方、fm≧Nfm[m]であると判別された場合(ステップS529;Yes)は、ステップS533に進む。
ステップS533では、CPU521は、m≧NSpであるか否かを判別する。m≧NSpではないと判別された場合(ステップS533;No)は、mを1増加してから(ステップS535)、ステップS513に戻る。一方、m≧NSpであると判別された場合(ステップS533;Yes)は、処理を終了する。
本編集の具体例においては、編集の具体例1と同様に、ピッチ系列データをその平均値を基準として上下に拡大することにより、ピッチ変動を大きくする。そして、そのために、ピッチ系列データとその平均値との差にある係数を乗じる。ただし、編集の具体例1においては、該係数として音声データに依存しない値(すなわち音声データ識別用カウンタmに依存しない値)である(MaxAbsDiffPit/MaxAbsDiffSynPit)を一律に採用するのに対して、本編集の具体例においては、該係数として音声データ毎に求められる値(すなわち音声データ識別用カウンタmに依存する値)である(mxAbsDiffPitm/mxAbsDiffSynPitm)を採用する点が異なる。つまり、本編集の具体例においては、あるピッチ系列データを編集して編集ピッチ系列データを生成するにあたり、該ピッチ系列データの算出に用いられるフレームが属する音声データに対応するひとかたまりのピッチ系列データだけが参照される。換言すれば、音声データ毎に編集処理が完結しているといえる。
このようにすると、編集の具体例1の場合よりも、上述の係数が多くなるため処理が煩雑になるが、各音声データの特性に応じて編集用係数を変化させるため、より適切な編集が達成される。例えば、編集の具体例1の場合、特異的な音声データが1つ存在しただけでも、上述の係数がそれに影響され、全ての音声データについてのピッチ系列データの編集が適切に行われない可能性があるが、本編集の具体例においては、かかる特異なデータの存在が編集処理全体に対して悪影響を及ぼすことはない。
(編集の具体例2の変形例)
図23は、編集の具体例2の変形例における編集ピッチ系列データである第2変形編集ピッチ系列データEdPitm[fm]を算出する手順を示すフローチャートである。以下、このフローチャートを参照しつつ説明する。
CPU521は、音声データ識別用カウンタmをm=1に設定し(ステップS9611)、編集用録音音声別最大値mxDiffPitmと編集用合成音声別最大値mxDiffSynPitmと編集用録音音声別最小値mnDiffPitmと編集用合成音声別最小値mnDiffSynPitmとを記憶部525からロードし(ステップS9613)、フレーム識別用カウンタfmをfm=0に設定し(ステップS9615)、ピッチ系列データPitm[fm]を記憶部525からロードし(ステップS9617)、フレームfmが有声音のフレームであるか否かを判別する(ステップS9619)。
なお、ここで、編集用録音音声別最大値mxDiffPitmと編集用合成音声別最大値mxDiffSynPitmと編集用録音音声別最小値mnDiffPitmと編集用合成音声別最小値mnDiffSynPitmとは、それぞれ、既に述べた、図13と図17と図14と図18とに示す手順により、求められる。
フレームfmが有声音のフレームであると判別された場合(ステップS9619;Yes)は、CPU521は、図6に示す手順により求められた編集用録音平均値AvePitmをロードし(ステップS9621)、Pitm[fm]- AvePitm≧0であるか否かを判別する(ステップS9623)。
Pitm[fm]- AvePitm≧0であると判別された場合(ステップS9623;Yes)は、CPU521は、編集ピッチ系列データEdPitm[fm]を、
Ed Pitm[fm]= (Pitm[fm]- AvePitm)×(mxDiffPitm/mxDiffSynPitm)+AvePitm
により算出し(ステップS9625)、記憶部525に格納する(ステップS9631)。一方、Pitm[fm]- AvePitm≧0ではないと判別された場合(ステップS9623;No)は、CPU521は、編集ピッチ系列データEdPitm[fm]を、
Ed Pitm[fm]= (Pitm[fm]- AvePitm)×(mnDiffPitm/mnDiffSynPitm)+AvePitm
により算出し(ステップS9627)、記憶部525に格納する(ステップS9631)。
フレームfmが有声音のフレームではないと判別された場合(ステップS9619;No)は、CPU521は、ピッチ系列データPitm[fm]をそのまま編集ピッチ系列データEdPitm[fm]とし(ステップS9629)、記憶部525に格納する(ステップS9631)。
ステップS9633では、CPU521は、fm≧Nfm[m]であるか否かを判別する。fm≧Nfm[m]ではないと判別された場合(ステップS9633;No)は、fmを1増加してから(ステップS9635)、ステップS9617に戻る。一方、fm≧Nfm[m]であると判別された場合(ステップS9633;Yes)は、ステップS9637に進む。
ステップS9637では、CPU521は、m≧NSpであるか否かを判別する。m≧NSpではないと判別された場合(ステップS9637;No)は、mを1増加してから(ステップS9639)、ステップS9613に戻る。一方、m≧NSpであると判別された場合(ステップS9637;Yes)は、処理を終了する。
本変形例は、既に述べた編集の具体例1の変形例における、ピッチ系列データがその平均値を上回っているか否かによりピッチ変動拡大用の係数を変化させることによる長所と、既に述べた編集の具体例2における、音声データ毎に処理を完結させることによる長所と、を併せ持っている。
(実施形態2)
本発明の実施形態2に係る音声合成辞書構築装置は、図2〜図4に示した実施形態1に係る音声合成辞書構築装置の機能ブロックのうち、図4に示す第2学習部117を、図24に示す音素ラベルデータ比較機能付第2学習部119に置換したものである。
音素ラベルデータ比較機能付第2学習部119(図24)は、第2学習部117(図4)の中に、モノフォン用音素ラベルデータ生成部331を付加したものである。
モノフォン用音素ラベルデータ生成部331は、合成部113(図3)から出力された合成音声データSynSpmを受け取り、合成音声のモノフォンラベルデータである合成音声モノフォンラベルデータmLabDatam[ml](1≦ml≦MLSynSp[m]、ただし、MLSynSp[m]は合成音声SynSpmにおけるモノフォンラベルの数である。)を生成して出力する。
合成音声モノフォンラベルデータmLabDatam[ml]は、合成音声モノフォンラベルmLabm[ml]と、合成音声データSynSpmの継続時間のうち該合成音声モノフォンラベルの始点に該当する時刻を指し示すポインタである合成音声開始フレームmFrameSm[ml]と、終点に該当する時刻を指し示すポインタである合成音声終了フレームmFrameEm[ml]と、から構成される。
また、第2学習部117の中の方針決定部343には、ピッチ系列データPitm[fm]と合成音声ピッチ系列データSynPitm[fm]とが集められるのに対し、音素ラベルデータ比較機能付第2学習部119の中の方針決定部343には、それらに加えて、第1音声データベース221(図2)に格納されているモノフォンラベルデータMLabDatam[ml]とモノフォン用音素ラベルデータ生成部331から出力された合成音声モノフォンラベルデータmLabDatam[ml]とが集められる。
音素ラベルデータ比較機能付第2学習部119の中の方針決定部343は、第2学習部117の中の方針決定部343と異なり、ピッチ系列データPitm[fm]と合成音声ピッチ系列データSynPitm[fm]とだけからピッチ系列データPitm[fm]の編集方針を決定するのではなく、それらに加えてモノフォンラベルデータMLabDatam[ml]と合成音声モノフォンラベルデータmLabDatam[ml]とを総合的に比較検討してピッチ系列データPitm[fm]の編集方針を決定する。
すなわち、音素ラベルデータ比較機能付第2学習部119の中の方針決定部343に引き渡されるのは、人間の自然な発話から収集された音声データに基づいて生成されたものであるモノフォンラベルデータMLabDatam[ml]及びピッチ系列データPitm[fm]と、いったん音声合成辞書を経て生成された合成音声データに基づいて生成されたものである合成音声モノフォンラベルデータmLabDatam[ml]及び合成音声ピッチ系列データSynPitm[fm]と、が集められる。方針決定部343は、これら4種のデータを集めるので、これらを比較検討することができる。
以下に、音素ラベルデータ比較機能付第2学習部119の中の方針決定部343により決定された編集方針に従い音素ラベルデータ比較機能付第2学習部119の中の編集部345が実行する編集処理の手順について、図25に示すフローチャートを参照しつつ、説明する。図25では、本実施形態における編集ピッチ系列データを、第3編集ピッチ系列データEdPitm[fm]と表記した。
なお、既に実施形態1における編集の具体例について触れた箇所で説明したとおり、少なくとも定性的には、個々のピッチ系列データPitm[fm]とその平均値との差を大きくしたものを編集ピッチ系列データPitm[fm]とすれば、音声データSpmのピッチ変動は大きくなる。ところで、特に前記平均値に拘泥しなくても、ピッチ系列データPitm[fm]全体を拡大したものを編集ピッチ系列データPitm[fm]とすることによっても、音声データSpmのピッチ変動は大きくなる。換言すれば、平均値を基準にするかわりに、ゼロレベルを基準にして全体を拡大することによっても、ピッチ変動を大きくすることができる。本実施形態においては、編集方針として、ピッチ系列データPitm[fm]全体を拡大する方針を採ることとする。
もっとも、本実施形態においても、実施形態1における編集の具体例と同様な編集方針を採ってもよい。例えば、後述のステップS619において、フレームfmが有声音の場合は
EdPitm[fm]=( Pitm[fm]-AvePitm)×(AvePitLabm[ml]/AveSynPitLabm[ml])+ AvePitm
とし、フレームfmが無声音の場合は
EdPitm[fm]= Pitm[fm]
としてもよい。
音声データSpm、モノフォンラベルデータMLabDatam[ml]、トライフォンラベルデータTLabDatam[tl]、ピッチ系列データPitm[fm]、メルケプストラム係数系列データMCm d[fm]、合成音声ピッチ系列データSynPitm[fm]、及び、合成音声モノフォンラベルデータmLabDatam[ml]は、既に求められ、記憶部525に格納されているものとする。
まず、CPU521は、音声データ識別用カウンタmをm=1に設定し(ステップS611)、フレーム識別用カウンタfmをfm=0に設定する(ステップS613)。
次に、CPU521は、フレームfmがどのモノフォンラベルデータMLabDatam[ml]に対応しているかを調査する。具体的には、CPU521は、記憶部525の中を検索して、MFrameSm[ml']≦fm≦MFrameEm[ml']を満たすようなモノフォン番号ml'を求め、モノフォンラベルデータ識別用カウンタmlをml=ml'に設定する(ステップS615)。
続いて、CPU521は、元の音声と合成音声とについてそれぞれモノフォン単位でピッチ系列データを平均した結果であるAvePitLabm[ml]とAveSynPitLabm[ml]とを算出する(ステップS617)。かかる算出の具体的な手順については、後に図26を参照しつつ説明する。
続いて、CPU521は、本実施形態における編集ピッチ系列データである第3編集ピッチ系列データEdPitm[fm]を、
EdPitm[fm]= Pitm[fm]×(AvePitLabm[ml]/AveSynPitLabm[ml])
により算出し(ステップS619)、記憶部525に格納する(ステップS621)。
続いて、CPU521は、fm≧Nfm[m]であるか否かを判別する(ステップS623)。fm≧Nfm[m]ではないと判別された場合(ステップS623;No)は、fmを1増加してから(ステップS625)、ステップS615に戻る。一方、fm≧Nfm[m]であると判別された場合(ステップS623;Yes)は、ステップS627に進む。
ステップS627では、CPU521は、m≧NSpであるか否かを判別する。m≧NSpではないと判別された場合(ステップS627;No)は、mを1増加してから(ステップS629)、ステップS613に戻る。一方、m≧NSpであると判別された場合(ステップS627;Yes)は、処理を終了する。
上述の、ステップS617におけるAvePitLabm[ml]とAveSynPitLabm[ml]とを算出する手順は、図26に示すとおりである。
CPU521は、開始フレームMFrameSm[ml]、終了フレームMFrameEm[ml]、合成音声開始フレームmFrameSm[ml]、及び、合成音声終了フレームmFrameEm[ml]を記憶部525からロードし(ステップS661)、さらに、ピッチ系列データPitm[MFrameSm[ml]]、Pitm[MFrameSm[ml]+1]、・・・、Pitm[MFrameEm[ml]-1]、Pitm[MFrameEm[ml]]と、合成音声メルケプストラム係数系列データSynPitm[mFrameSm[ml]]、SynPitm[mFrameSm[ml]+1]、・・・、SynPitm[mFrameEm[ml]-1]、SynPitm[mFrameEm[ml]]と、をロードし(ステップS663)、AvePitLabm[ml]とAveSynPitLabm[ml]とを、次の式に従って算出する(ステップS665)。
AvePitLabm[ml]
= (Pitm[MFrameSm[ml]]+Pitm[MFrameSm[ml]+1]+・・・
+Pitm[MFrameEm[ml]-1]+Pitm[MFrameEm[ml]])
÷(MFrameEm[ml]-MFrameSm[ml]+1)、
AveSynPitLabm[ml]
= (SynPitm[mFrameSm[ml]]+SynPitm[mFrameSm[ml]+1]+・・・
+SynPitm[mFrameEm[ml]-1]+SynPitm[mFrameEm[ml]])
÷(mFrameEm[ml]-mFrameSm[ml]+1)
上述のとおり、AvePitLabm[ml]とAveSynPitLabm[ml]とは、それぞれ、元の音声と合成音声とについてそれぞれモノフォン単位でピッチ系列データを平均した結果である。このことは、上の式から明らかである。
音声データよりも小さい単位であるモノフォン単位では、各単位に対応する時間帯には、その時間帯の短さゆえに、概ね、ピッチの山の部分だけ又は谷の部分だけが含まれる。
既に述べたように、一般に、元の音声に比べ、合成音声は、平坦な印象を与える不自然な音声となることが知られている。これは、ピッチの山の部分が低くなるとともに、ピッチの谷の部分が高くなることに相当する。さて、本実施形態においては、元のピッチに乗じられる値である拡大率AvePitLabm[ml]/AveSynPitLabm[ml]はモノフォンラベル単位で決定される。ピッチの山の部分に対応するモノフォンラベル単位では、山の部分が上述のように低くなることに対応して、AvePitLabm[ml]>AveSynPitLabm[ml]となる。すると、前記拡大率は1より大きくなる。これは、元の音声において、音声合成後は低くなるであろうことを見越してピッチの山をあらかじめ盛り上げるようピッチ編集を施しておいて、音声合成後のピッチの山が元に比べて低くならないようにしていることを意味する。一方、ピッチの谷の部分に対応するモノフォンラベル単位では、谷の部分が上述のように高くなることに対応して、AvePitLabm[ml]<AveSynPitLabm[ml]となる。すると、前記拡大率は1より小さくなる。これは、元の音声において、音声合成後は高くなるであろうことを見越してピッチの谷をあらかじめ掘り下げるようピッチ編集を施しておいて、音声合成後のピッチの谷が元に比べて高くならないようにしていることを意味する。このように、本実施例においては、拡大率は1より大きかったり小さかったりするが、ピッチ編集によりピッチ変動が拡大されることが期待される点では、実施形態1の場合と同じである。
なお、この発明は、上述の実施形態や具体例や変形例に限定されず、さらなる種々の変形及び応用が可能である。上述のハードウェア構成やブロック構成、フローチャートは説明のための例示であって、本願発明の範囲を限定するものではない。
例えば、図2〜図4に示した実施形態1に係る音声合成辞書構築装置において、時系列データ生成部323(図3)が生成したピッチ時系列データ(これは合成音声ピッチ系列データSynPitm[fm]と同じものである。)を、方針決定部343(図4)に直接に入力する変形例も考えられる。この変形例においては、励起音源生成部325(図3)、MLSA合成フィルタ部327(図3)、及び、第2ピッチ抽出部341(図4)を、省略することができる。
図2、図3、図24に示した実施形態2に係る音声合成辞書構築装置においても、同様な変形例が考えられる。ただしその際は、各モノフォンラベルのピッチ時系列データに相当する範囲を示す情報が方針決定部343(図24)に共に送られるようにする必要がある。
あるいは例えば、有声音のフレームにおける編集にあたって、ピッチ系列データのその平均からのズレが大きいほどかかるズレの拡大率を大きくするような方針を採用してピッチ変動を大きくするようにしてもよい。
111・・・第1学習部、113・・・合成部、117・・・第2学習部、119・・・音声ラベルデータ比較機能付第2学習部、221・・・第1音声データベース、223・・・第1音声合成辞書、227・・・第2音声合成辞書、311・・・第1ピッチ抽出部、313・・・メルケプストラム分析部、315・・・第1音素HMM学習部、321・・・音素HMM列生成部、323・・・時系列データ生成部、325・・・励起音源生成部、327・・・MLSA合成フィルタ部、331・・・モノフォン用音素ラベルデータ生成部、341・・・第2ピッチ抽出部、343・・・方針決定部、345・・・編集部、347・・・第2音素HMM学習部、511・・・コンピュータ装置、521・・・CPU、523・・・ROM、525・・・記憶部、527・・・RAM、529・・・内蔵ハードディスク、531・・・操作キー、533・・・操作キー入力処理部、541・・・システムバス、551・・・第1リムーバブルハードディスク、553・・・第2リムーバブルハードディスク、555・・・データ入出力I/F