(57)【要約】      （修正有）【課題】データベースからの音素片の選択によって音合成を行う技術に関し、アクセント位置の相違も加味してデータベースから最適な音素片を正しく選択可能とする音合成装置、方法及びプログラムを提供する。【解決手段】処理対象素片データ（音素片）と処理対象セグメントデータの目標韻律データの韻律遷移が比較され、韻律コストが算出されるＳ１７０１。次に、処理対象セグメントデータ処理対象素片データのアクセント位置の相違数が算出され、この相違数の値が、アクセント位置の相違に関するコストとして、Ｓ１７０１で算出された韻律コストに乗算され、韻律コストの値が修正されるＳ１７０２。その後、別途算出されている音素列コストとＳ１７０１及びＳ１７０２で算出された韻律コストとを重み付け加算して得られるコスト値が、素片コストとして算出されるＳ１７０３。【選択図】図１７
2017062346.tif 000002
【特許請求の範囲】
【請求項１】
テキストデータから音素が対応付けられたセグメントデータの列を抽出する抽出処理と、
前記抽出されたセグメントデータの列を含むセグメントデータごとに、データベースから取得した複数個の音素片夫々のアクセント位置と前記抽出されたセグメントデータのアクセント位置との相違を含む不一致度を表す素片コストを取得する素片コスト取得処理と、
前記取得された各素片コストに基づき、前記セグメントデータの列を構成するセグメントデータごとに、前記複数個の音素片の中から生成用音素片を選択する音素片選択処理と、
前記選択された生成用音素片に基づいて合成音を生成する音生成処理と、
を実行する処理部を有する音合成装置。
【請求項２】
前記処理部は、前記音素片選択処理において、前記取得された各素片コストに基づき前記取得した複数個の音素片夫々から前記セグメントデータの列を構成するセグメントデータごとにセグメントデータに対する音素片候補データとなる音素片をリストアップする処理を実行する、請求項１に記載の音合成装置。
【請求項３】
前記処理部は、前記音素片選択処理において、前記抽出されたセグメントデータの列を構成する前記セグメントデータごとに、前記セグメントデータに対応する前記音素片候補データと、前記セグメントデータに隣接するセグメントデータに対応する前記音素片候補データとの間の不連続性を示す接続コストを取得し、前記取得された接続コスト及び前記隣接する音素片候補データ夫々の素片コストに基づいて、前記音素片候補データとしてリストアップされた音素片のいずれかを選択して前記音素片データ列を生成する処理を実行する、請求項２に記載の音合成装置。
【請求項４】
前記セグメントデータおよび前記音素片は音素データと韻律データとアクセント位置に関するデータを含み、
前記処理部は、前記素片コスト取得処理において、処理対象の前記セグメントデータの音素と前記セグメントデータの前後所定数セグメントずつの各セグメントデータの音素とから構成される音素列と、処理対象の前記音素片候補データの音素と前記音素片候補データの前後の前記所定数ずつの各音素片データの音素とから構成される音素列とを比較することにより取得される音素列コストと、処理対象の前記セグメントデータの韻律データと処理対象の前記音素片候補データの韻律データの差及びアクセント位置の相違に基づいて取得される韻律コストとの、重み付け和を前記音素片コストとして取得する処理を実行する、請求項２に記載の音合成装置。
【請求項５】
前記処理部は、前記音素列選択処理において、処理対象の前記セグメントデータに対応する処理対象の前記音素片候補データと当該セグメントデータの１つ前の前記セグメントデータに対応する前記音素片候補データとの間の音素接続点での各特徴量ベクトルデータ間の距離として前記接続コストを取得する処理を実行する、請求項３に記載の音合成装置。
【請求項６】
音素片を記憶するデータベースを有する音合成装置で音を合成するための方法であって、前記音合成装置は、
入力テキストデータから音素が対応付けられたセグメントデータの列を抽出し、
前記抽出されたセグメントデータの列を構成するセグメントデータごとに、データベースから取得した複数個の音素片夫々と前記セグメントデータとについて、前記複数個の音素片夫々のアクセント位置と前記セグメントデータのアクセント位置との相違を含む不一致度を表す素片コストを取得し、
前記取得された各素片コストに基づき、前記セグメントデータの列を構成するセグメントデータごとに、前記セグメントデータに対応する音素片を選択し、
前記選択された音素片に基づいて合成音を生成する、音合成方法。
【請求項７】
音素片を記憶するデータベースを有する音合成装置として用いられるコンピュータに、
入力テキストデータから音素が対応付けられたセグメントデータの列を抽出するステップと、
前記抽出されたセグメントデータの列を構成するセグメントデータごとに、データベースから取得した複数個の音素片夫々と前記セグメントデータとについて、前記複数個の音素片夫々のアクセント位置と前記セグメントデータのアクセント位置との相違を含む不一致度を表す素片コストを取得する素片コスト取得ステップと、
前記取得された各素片コストに基づき、前記セグメントデータの列を構成するセグメントデータごとに、前記セグメントデータに対応する音素片を選択する音素片選択ステップと、
前記選択された音素片に基づいて合成音を生成する音生成ステップと、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースからの音素片の選択によって音合成を行う技術に関する。
【背景技術】
【０００２】
入力テキストデータから生成される合成目標に対して、電子化された大規模な言語・音声データである音声コーパス（データベース）を参照することにより音素片を選択し、当該音素片を接続することにより合成音声を出力する音声合成技術が知られている（例えば非特許文献１に記載の技術）。
【０００３】
このような音声合成技術において、データベースから合成目標に最も適合する音素片列を選択するための手法として従来、次のような技術が知られている（例えば非特許文献１に記載の技術）。まず、入力テキストデータから抽出される音素セグメントごとに、その音素と同じ音素を有する音素片のデータ（以下、「素片データ」と記載する）が、素片候補データとしてデータベースから抽出される。次に、ＤＰ（Ｄｙｎａｍｉｃ  Ｐｒｏｇｒａｍｍｉｎｇ：動的計画法）アルゴリズムによって、入力テキストデータ全体に渡ってコストが最小となる最良の素片候補データの組（最良の素片データ列）が決定される。コストとしては、入力テキストデータとデータベース内の各素片データ間の音素列および韻律の差異、素片候補データである隣接する素片データ間のスペクトラム包絡などの音響パラメータ（特徴量ベクトルデータ）の不連続性などが用いられる。
【０００４】
上述のような素片接続型の音声合成において、より自然な聴感を得られるためには、指定された韻律遷移に忠実であること、素片同士の接続部が滑らかに連続していることなどが必須である。
【０００５】
これらを同時に実現するためには、なるべく連続する区間を採用できるような、元音声情報を大量に搭載する辞書、あるいは、音素の切れ目が正確に定義されている辞書が必要となる。一般に、辞書制作のための音素片分割には、自動分割の精度が低く、人間が実際に録音音声を聞いたうえで切り出しを行うなど、高いコストを要求される。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】河井  恒、“知識ベース  3-4 コーパスベース音声合成”、［online］、ver.1/2011.1.7、電子情報通信学会、［平成２５年１２月２５日検索］、インターネット＜ＵＲＬ：http://27.34.144.197/files/02/02gun_07hen_03.pdf#page=6＞
【発明の概要】
【発明が解決しようとする課題】
【０００７】
指定韻律に合う音声にするため、合成部などで波形の変形（音高・強度・継続長の変更）を行うことが考えられるが、特にアクセント(強勢)位置に変形による音質劣化のリスクが課題となる。
【０００８】
本発明は、アクセント位置の相違も加味してデータベースから最適な音素片を正しく選択可能とすることを目的とする。
【課題を解決するための手段】
【０００９】
態様の一例では、テキストデータから音素が対応付けられたセグメントデータの列を抽出する抽出処理と、抽出されたセグメントデータの列を含むセグメントデータごとに、データベースから取得した複数個の音素片夫々のアクセント位置と抽出されたセグメントデータのアクセント位置との相違を含む不一致度を表す素片コストを取得する素片コスト取得処理と、取得された各素片コストに基づき、セグメントデータの列を構成するセグメントデータごとに、複数個の音素片の中から生成用音素片を選択する音素片選択処理と、選択された生成用音素片に基づいて合成音を生成する音生成処理と、を実行する処理部を備える。
【発明の効果】
【００１０】
本発明によれば、アクセント位置の相違も加味してデータベースから最適な音素片を正しく選択可能とすることが可能となる。
【図面の簡単な説明】
【００１１】
【図１】本発明による音声合成装置の実施形態のブロック図である。
【図２】波形選択部のブロック図である。
【図３】音素列コスト、韻律コスト、および接続コストの説明図である。
【図４】音声合成装置をソフトウェア処理として実現できるコンピュータのハードウェア構成例を示す図である。
【図５】制御変数のデータ構成例を示す図である。
【図６】セグメントデータのデータ構成例を示す図である。
【図７】韻律データのデータ構成例を示す図である。
【図８】素片候補データのデータ構成例を示す図である。
【図９】音声辞書データのデータ構成例を示す図である。
【図１０】素片データのデータ構成例を示す図である。
【図１１】音素データのデータ構成例を示す図である。
【図１２】特徴量ベクトルデータのデータ構成例を示す図である。
【図１３】波形選択処理の例を示すフローチャートである。
【図１４】素片選定処理の例を示すフローチャートである。
【図１５】最良の素片候補データの選択動作の説明図である。
【図１６】素片リストアップ処理の例を示すフローチャートである。
【図１７】素片コスト計算＆候補追加処理の例を示すフローチャートである。
【図１８】音素列選択処理の例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、本発明を実施するための形態について図面を参照しながら詳細に説明する。本実施形態は、音声の変形(音高・強度・継続長の変更)において、アクセント(強勢)位置に変形による音質劣化のリスクを含むことが多いであろうという仮説の下、選択素片の持つ情報に、「アクセント位置」を加え、この情報を加味して韻律評価をすることにより、アクセントの相対位置が優勢で、かつ、その他の評価指標も有意である音素片が選択されるため、目標韻律に近く、かつ、音質劣化の少ない合成音声を生成することを可能にするものである。
【００１３】
図１は、本発明による音声合成装置１００の実施形態のブロック図であり、テキスト入力部１０１、形態素解析部１０２、韻律予測部１０３、韻律辞書１０４、波形選択部１０５、音声辞書１０６、および波形合成部１０７を備える。
【００１４】
テキスト入力部１０１は、入力テキストデータを入力する。
【００１５】
形態素解析部１０２は、テキスト入力部１０１が入力した入力テキストデータに対して形態素解析処理を実行することにより、入力テキストデータに対応する音素列を抽出する。入力テキストデータは、音素列中の音素ごとにセグメント分けされ、各音素を示す音素データが、そのセグメント分けにより得られる合成目標を構成するセグメントデータに登録される。
【００１６】
韻律予測部１０３は、形態素解析部１０２で得られる言語情報をもとに、実際の音声データに基づく韻律に関する統計的なモデルを記憶した韻律辞書１０４を参照することにより、合成目標の音素列中の音素ごとに、声帯の基本周波数であるピッチの高さ、持続時間長、および強度（振幅）によって表される韻律を予測する。この結果、韻律予測部１０３は、音素セグメント毎に、韻律情報である目標韻律データを生成し、合成目標を構成する上記セグメントデータに登録する。
【００１７】
すなわち、入力テキストデータから合成目標として生成されるセグメントデータ列において、各セグメントデータは、音素データと目標韻律データを有する。
【００１８】
波形選択部１０５は、目標韻律データと音素データを含むセグメントデータごとに、素片コストを評価することにより、素片候補データを音声辞書１０６中のデータベースからリストアップする。そして、波形選択部１０５は、セグメントデータごとに、接続コストおよび素片コストを評価することにより、最良の素片候補データを、リストアップした素片候補データから選択する。
【００１９】
波形合成部１０７は、波形選択部１０５がセグメントデータごとに音声辞書１０６から選択した素片データ列に基づいて、合成音声を生成し出力する。
【００２０】
図２は、図１の波形選択部１０５の詳細な構成を示すブロック図であり、波形選択部１０５は、図１の韻律予測部１０３から出力された目標韻律データ２０１、韻律入力部２０２、素片選定部２０７、および評価部２０８を備える。素片選定部２０７は、素片リストアップ部２０７ａとそこから出力された素片候補データ２０９、および音素列選択部２０７ｂを備える。評価部２０８は、素片評価部２０８ａおよび接続評価部２０８ｂを備える。
【００２１】
韻律入力部２０２は、図１の韻律予測部１０３が出力した目標韻律データ２０１を入力する。
【００２２】
素片選定部２０７において、素片リストアップ部２０７ａは、図１の韻律予測部１０３から出力されるセグメントデータごとに（以下これを「処理対象セグメントデータ」と記載する）、その処理対象セグメントデータに含まれる音素と一致する音素を有する１つ以上の素片データ（音素片）を、音声辞書１０６中のデータベースから選択する（以下、この素片データを「処理対象素片データ」と記載する）。
【００２３】
図２の評価部２０８内の素片評価部２０８ａは、処理対象セグメントデータの音素とその前後２セグメントずつの各セグメントデータの音素とから構成される音素列と、処理対象素片データの音素とその前後の２つずつの各素片データの音素とから構成される音素列とを比較することにより、音素列コストを取得（算出）する。この音素列コストは、音素列の不一致度を示す。隣接するセグメントデータ間の音素列と隣接する素片データ間の音素列の一致度が高いほど音素列コストが低くなるように、音素列コストが算出される。前後の音素列が一致する素片データを選択したほうが、自然な合成音声が得られるからである。
【００２４】
図３は、音素列コスト、韻律コスト、および接続コストの説明図である。図３に示されるctxt_distanceが、音素列コストを示している。図３において、segmentk-2, segmentk-1, segmentk, segmentk+1, segmentk+2は、入力テキストデータに対応する合成目標を構成するセグメントデータの離散時系列を示しており、segmentkが処理対象セグメントデータであるとする。unitu-2, unitu-1, unitu, unitu+1, unitu+2は、音声辞書１０６のデータベース中のある位置から切り出された素片データの離散時系列を示しており、unituが処理対象素片データであるとする。処理対象セグメントデータsegmentkにおける処理対象素片データunituに対する音素列コストctxt_distanceは、処理対象セグメントデータsegmentkと処理対象素片データunituのそれぞれを中心とする、前後２つずつと自身を含む計５つの連続する音素列同士（図３の「●」で示される）の不一致度として、算出される。
【００２５】
図２において、素片リストアップ部２０７ａは、素片評価部２０８ａに対して、処理対象素片データの韻律データ（以下「素片韻律データ」と記載する）と処理対象セグメントデータの目標韻律データ２０１との間の韻律コストを算出させ評価させる。具体的には、素片評価部２０８ａは、処理対象セグメントデータの目標韻律データ２０１と処理対象素片データの素片韻律データとの差に基づいて、韻律コストを算出する。韻律コストは、目標韻律データ２０１と素片韻律データの距離を示す。図３に示されるpros_distanceが、韻律コストを示しており、処理対象セグメントデータsegmentkの目標韻律データ２０１と、処理対象素片データunitkの素片韻律データとの差に基づいて算出される。
【００２６】
ここで、本実施形態では、処理対象セグメントデータと処理対象素片データにそれぞれ、アクセント位置の情報が付加されている（後述する図６のセグメントデータのデータ構成例及び図１０の素片データのデータ構成例を参照）。本実施形態では、処理対象セグメントデータと処理対象素片データとでアクセント位置が異なった相違数を、アクセント位置の相違に関するコストとして、上述のように算出された韻律コストに乗算して韻律コストを修正する（後述する図１７のステップＳ１７０２参照）。このように、本実施形態では、アクセント(強勢)位置に変形による音質劣化のリスクを含むことが多いであろうという仮説の下、アクセント位置の相違を韻律コストに加えて、素片のリストアップにおける韻律評価を行う。これにより、本実施形態では、アクセントの相対位置が優勢で、かつ、その他の評価指標も有意である音素片が選択されるため、目標韻律に近く、かつ、音質劣化の少ない合成音声を生成することを可能にするものである。処理対象セグメントデータのアクセント位置は、例えば形態素解析部１０２や韻律予測部１０３で認識される文法ルールに基づいて決定される。処理対象素片データのアクセント位置は、例えば次のような手法で決定される。まず、言語ルールにより定義される情報を仮の状態として採用し、次に、基本周波数データを参照しながら、アクセント位置の修正を行う。各音素ラベル区間での基本周波数の平均値をとり、アクセントブロック(一息で言い切る範囲)での基本周波数が最大値を示す音素を、そのアクセント位置とする。
【００２７】
素片評価部２０８ａは、音素列コストと韻律コストとの重み付け和のコスト値を、現在の切り出し区間に対応する素片コストとして算出する。このようにして得られる音素列コスト、韻律コスト、および素片コストの値は、素片候補データ２０９（後述する図８のcandidate[0]等）としてメモリに記録される。
【００２８】
素片リストアップ部２０７ａは、素片評価部２０８ａが評価した素片コストが低い順に、素片候補データ２０９を並び替えて、処理対象セグメントデータとリンクさせて出力する。
【００２９】
音素列選択部２０７ｂは、セグメントデータごとに（処理対象セグメントデータに対して）リストアップされている各素片候補データ２０９と、そのセグメントデータの１つ前のセグメントデータ（以下「前方セグメントデータ」と記載する）に対してリストアップされている各素片候補データ２０９（以下「前方素片候補データ２０９」と記載する）の２つの素片候補データ間の音響パラメータの不連続性を示す接続コスト（図３のcont_distance）を算出し、２つの素片候補データの素片コストを再度算出して評価し、最良の素片候補データを選択して素片データ列を生成し、波形合成部１０７へ出力する。
【００３０】
図４は、図１の音声合成装置１００をソフトウェア処理として実現できるコンピュータのハードウェア構成例を示す図である。図４に示されるコンピュータは、ＣＰＵ４０１、ＲＯＭ（リードオンリーメモリ：読出し専用メモリ）４０２、ＲＡＭ（ランダムアクセスメモリ）４０３、入力装置４０４、出力装置４０５、外部記憶装置４０６、可搬記録媒体４１０が挿入される可搬記録媒体駆動装置４０７、及び通信インタフェース４０８を有し、これらがバス４０９によって相互に接続された構成を有する。同図に示される構成は上記システムを実現できるコンピュータの一例であり、そのようなコンピュータはこの構成に限定されるものではない。
【００３１】
ＲＯＭ４０２は、コンピュータを制御する音声合成プログラムを含む各プログラムを記憶するメモリである。ＲＡＭ４０３は、各プログラムの実行時に、ＲＯＭ４０２に記憶されているプログラム又はデータを一時的に格納するメモリである。
【００３２】
外部記憶装置４０６は、例えばＳＳＤ（ソリッドステートドライブ）記憶装置またはハードディスク記憶装置であり、入力テキストデータや合成音声データの保存に用いられる。
【００３３】
ＣＰＵ４０１は、各プログラムを、ＲＯＭ４０２からＲＡＭ４０３に読み出して実行することにより、当該コンピュータ全体の制御を行う。
【００３４】
入力装置４０４は、ユーザによるキーボードやマウス等による入力操作を検出し、その検出結果をＣＰＵ４０１に通知する。また、入力装置４０４は、図１のテキスト入力部１０１の機能を実行して入力テキストデータを外部から入力し、ＲＡＭ４０３または外部記憶装置４０６に記憶させる。
【００３５】
出力装置４０５は、ＣＰＵ４０１の制御によって送られてくるデータを表示装置や印刷装置に出力する。また、出力装置４０５は、図１の波形合成部１０７が外部記憶装置４０６またはＲＡＭ４０３に出力した合成音声データを、音声として放音する。
【００３６】
可搬記録媒体駆動装置４０７は、光ディスクやＳＤＲＡＭ、コンパクトフラッシュ等の可搬記録媒体４１０を収容するもので、外部記憶装置４０６の補助の役割を有する。
【００３７】
通信インターフェース４０８は、例えばＬＡＮ（ローカルエリアネットワーク）又はＷＡＮ（ワイドエリアネットワーク）の通信回線を接続するための装置である。
【００３８】
本実施形態によるシステムは、図１および図２の各処理部の機能を搭載した音声合成プログラムを、ＲＯＭ４０２からＲＡＭ４０３に読み出してＣＰＵ４０１が実行することで実現される。そのプログラムは、例えば外部記憶装置４０６や可搬記録媒体４１０に記録して配布してもよく、或いはネットワーク接続装置４０８によりネットワークから取得できるようにしてもよい。
【００３９】
次に、図４のコンピュータが、図１および図２の機能を有する音声合成装置１００として動作するために、ＲＡＭ４０３または外部記憶装置４０６上に保持する各種データについて説明する。
【００４０】
図５は、ＲＡＭ４０３に保持される制御変数WavSelのデータ構成例を示す図である。制御変数WavSelは、unitdb、seg_count、segmentの各変数データを保持する。unitdbは、外部記憶装置４０６上の音声辞書１０６に記憶される音声辞書データへのポインタを保持する。seg_countは、セグメントデータの総数を保持する。segmentは、最初のセグメントデータ（後述する図６のsegment[0]の先頭アドレス）へのポインタを保持する。
【００４１】
図６は、図５の制御変数WavSel内のsegmentポインタから参照されＲＡＭ４０３または外部記憶装置４０６に保持されるセグメントデータsegment[0]〜segment[seg_count]のデータ構成例を示す図である。各セグメントデータは、入力テキストデータを図１の形態素解析部１０２で形態素解析して得られる合計seg_count個（制御変数WavSelのseg_countに保持される個数）の音素ごとに、図１の韻律予測部１０３によって、segment[0],segment[1],・・・,segment[seg_count-1]として得られる。セグメントデータの記憶アドレスは、制御変数WavSelのsegmentによって示される。各セグメントデータsegment[i]（i=0,・・・,seg_count-1）は、seg_id、phone_id、accent_pos、target_prosody、candidate、best_cand、prev、nextの各変数データを保持する。seg_idは、セグメントＩＤ（識別子）を保持する。phone_idは、音素ＩＤを保持する。accent_posは、アクセント位置（音素）からの相対位置を保持し、値「０」はアクセント音素であることを示し、マイナス値は前方にアクセント位置があることを示し、プラス値は後方にアクセント位置があることを示す。target_prosodyは、ＲＡＭ４０３または外部記憶装置４０６に保持される目標韻律データ２０１の先頭へのポインタを保持する。candidateは、最初の素片候補データ２０９（後述する図８のcandidate[0]の先頭アドレス）へのポインタを保持する。best_candは、図２の音素列選択部２０７ｂに対応する処理によって現在のセグメントデータに対応してする選択される最良の素片候補データ２０９（後述する図８のcandidate[0]〜candidate[N]、・・・のいずれかの先頭アドレス）へのポインタを保持する。prevは１つ手前のセグメントデータへのポインタ、nextは１つ後ろのセグメントデータへのポインタを保持する。現在のセグメントデータが例えばsegmen[1]であれば、prevはsegment[0]の先頭アドレスを保持し、nextはsegment[2]の先頭アドレスを保持する。また、現在のセグメントデータが例えば先頭データsegment[0]であれば、prevは未定義値であるNULL値を保持する。現在のセグメントデータが例えば末端データsegment[seg_count]であれば、nextはNULL値を保持する。
【００４２】
図７は、図６の各セグメントデータ内のtarget_prosodyポインタまたは後述する図１０の各素片データ内のprosodyポインタから参照されＲＡＭ４０３または外部記憶装置４０６に記憶される韻律データprosody[0],prosody[1],・・・,prosody[N],・・・のデータ構成例を示す図である。各韻律データprosody[i]（i=0,・・・,N,・・・）は、time,pitch,power,prev,nextの各変数データを保持する。timeは、韻律が発生する時刻を保持する。pitchは、韻律の音高（ピッチ周波数）を保持する。powerは、韻律の強度を保持する。prevは１つ手前の韻律データへのポインタ、nextは１つ後ろの韻律データへのポインタを保持する。現在の韻律データが、先頭データであればprevはNULL値を保持し、末端データであればnextはNULL値を保持する。
【００４３】
図８は、図６のセグメントデータ内のtarget_prosodyポインタから参照されＲＡＭ４０３または外部記憶装置４０６に記憶される図２の素片候補データ２０９である素片候補データcandidate[0],candidate[1],・・・,candidate[N],・・・のデータ構成例を示す図である。各素片候補データcandidate[i]（i=0,・・・,N,・・・）は、図２のリストアップ部で生成され、unit_id,ctxt_distance,pros_distance,unit_distance,cont_distance,prev_total_cost,total_cost,best_cand,top_shift,tail_shift,prev,nextの各変数データを保持する。unit_idは、音声辞書１０６内の素片データを識別するための素片ＩＤ（図１１参照）を保持し、図２の素片リストアップ部２０７ａによりセットされる。ctxt_distanceは、前述した音素列コスト(音素列の不一致度)を保持し、図２の素片評価部２０８ａによって算出されセットされる。pros_distanceは、前述した韻律コスト(目標韻律データ２０１と素片韻律データの距離)を保持し、図２の素片評価部２０８ａによって算出されセットされる。unit_distanceは、音素列コストと韻律コストの重み付け和である前述した素片コストを保持し、図２の素片評価部２０８ａによって算出されセットされる。cont_distanceは、前述した接続コスト(音素接続点での特徴量距離)を保持し、図２の接続評価部２０８ｂによって算出されセットされる。prev_total_costは、先頭のセグメントデータからこの素片候補データが属するセグメントデータの１つ前のセグメントデータ（前方セグメントデータ）までに確定している、コスト合計を保持する。total_costは、先頭のセグメントデータからこの素片候補データが属するセグメントデータまでに確定したトータルコストを保持し、前述したように図２の音素列選択部２０７ｂにより算出されセットされる。best_candは、この素片候補データと接続する最良の前方素片候補データへのポインタを保持し、前述した音素列選択部２０７ｂによって算出されセットされる。ここで、最良の前方素片候補データは、best_candが含まれる素片候補データ（処理対象素片候補データ）が属するセグメントデータ（処理対象セグメントデータ）の１つ手前のセグメントデータ（前方セグメントデータ）に属する素片候補データ（前方素片候補データ）であって、その前方素片候補データで確定しているトータルコストと、処理対象素片候補データとの間の接続コストとの、重み付き和のコスト値が、最も小さい（最良の）前方素片候補データである。prevは１つ手前の素片候補データへのポインタ、nextは１つ後ろの素片候補データへのポインタを保持する。現在の素片候補データが、先頭データであればprevはNULL値を保持し、末端データであればnextはNULL値を保持する。
【００４４】
図９は、図１の音声辞書１０６を構成するＲＡＭ４０３または外部記憶装置４０６に記憶される音声辞書データunitdbのデータ構成例を示す図であり、図５の制御変数WavSelのunitdbポインタから参照される。音声辞書データunitdbは、phone_count、phoneme、unit_count、unit、fval_countの各変数データを保持する。phone_countは、この音声辞書データunitdbで定義されている音素数を保持する。phonemeは、先頭の音素データ（図１１のphoneme[0]の先頭アドレス）へのポインタを保持する。unit_countは、この音声辞書データunitdbが搭載する素片データの数を保持する。unitは、この音声辞書データunitdbが搭載する先頭の素片データ（図１１のunit[0]の先頭アドレス）へのポインタを保持する。fval_countは、特徴量ベクトル数を保持する。
【００４５】
図１０は、図１の音声辞書１０６を構成するＲＡＭ４０３または外部記憶装置４０６に記憶される素片データunit[0]〜unit[unit_count-1]のデータ構成例を示す図であり、図９の音声辞書データunitdbのunitポインタから参照される。音声辞書１０６への搭載素片数unit_countは、図９の音声辞書データunitdbのunit_countデータとして登録される。各素片データunit[i]（i=0,・・・,unit_count-1）は、unit_id, phone_id,accent_pos,duration,prosody,prev,nextの各変数データと、featvalue[0]〜featvalue[fval_count-1]の各配列変数データを保持する。unit_idは、素片データを識別するための素片ＩＤを保持する。phone_idは、この素片データに対応付けられる音素を図１１で後述する音素データから特定するための音素ＩＤを保持する。accent_posは、アクセント位置（音素）からの相対位置を保持し、値「０」はアクセント音素であることを示し、マイナス値は前方にアクセント位置があることを示し、プラス値は後方にアクセント位置があることを示す。durationはこの素片データがどれだけの時間長だけ継続しているかを示す継続長を保持する。prosodyは、図６のデータ構成例を有する、ＲＡＭ４０３または外部記憶装置４０６に保持される素片韻律データの先頭へのポインタを保持する。featvalue[0]〜featvalue[fval_count-1]は、１番目からfval_count番目までの後述する図１２に示されるデータ構成例を有する特徴量ベクトルデータの先頭データへのポインタを保持する。prevは１つ手前の素片データへのポインタ、nextは１つ後ろの素片データへのポインタを保持する。現在の素片データが、先頭データであればprevはNULL値を保持し、末端データであればnextはNULL値を保持する。
【００４６】
図１１は、図９の音声辞書データunitdb内のphonemeポインタから参照されＲＡＭ４０３または外部記憶装置４０６に記憶される音素データphoneme[0]〜phoneme[phone_count-1]のデータ構成例を示す図である。音素データの数は、音声辞書データunitdbのphone_countデータにセットされている。各音素データphoneme[i] （i=0,・・・,phone_count-1）は、phone_id,phomene,prev,nextの各変数データを保持する。phone_idは、音素を識別するための音素ＩＤを保持する。前述した図６のセグメントデータまたは前述した図１０の素片データは、その中のphone_idデータによって、図５の制御変数WavSel内のunitdb→図９の音声辞書データunitdb内のphoneme→図１１の音素データphoneme[0]〜phoneme[phone_count-1]のうち上記phone_idの値が格納されている音素データとたどって、その音素データ内の音素名phomeneと関連付けられる。phomeneは音素名を保持する。prevは１つ手前の音素データへのポインタ、nextは１つ後ろの音素データへのポインタを保持する。現在の音素データが、先頭データであればprevはNULL値を保持し、末端データであればnextはNULL値を保持する。
【００４７】
図１２は、図１１の各素片データ内のfeatvalue[i] （i=0,・・・,fval_count-1）ポインタから参照されＲＡＭ４０３または外部記憶装置４０６に記憶される特徴量ベクトルデータfeatvalue[0],featvalue[1],・・・,featvalue[N],・・・のデータ構成例を示す図である。各特徴量ベクトルデータfeatvalue[i](i=0,・・・,N,・・・)は、time,dimension,prev,nextの各変数データと、value[0]〜value[dimension-1]の各配列変数データを保持する。timeは、その特徴量ベクトルデータに対応する時刻を保持する。dimensionは、この特徴量ベクトルデータの次元数を保持する。value[0]〜value[dimension-1]は、１番目からdimension番目までの特徴量を保持する。prevは１つ手前の特徴量ベクトルデータへのポインタ、nextは１つ後ろの特徴量ベクトルデータへのポインタを保持する。現在の特徴量ベクトルデータが、先頭データであればprevはNULL値を保持し、末端データであればnextはNULL値を保持する。この特徴量ベクトルデータは、前述したように、図２の接続評価部２０８ｂが、処理対象素片候補データ２０９と前方素片候補データ２０９との間の音素接続点での各素片データの各スペクトル包絡の距離を算出するために使用される。
【００４８】
図１３は、図２の素片選定部２０７に対応する機能を、図４のハードウェア構成例を有するコンピュータのＣＰＵ４０１が、ソフトウェアプログラムの処理により実現する場合の、波形選択処理の例を示すフローチャートである。以下に説明する処理はすべてＣＰＵ４０１が実行する処理である。図１３に示されるように、波形選択処理では、韻律データの読込みの処理（ステップＳ１３０１）と、素片選定処理（ステップＳ１３０２）が実行される。
【００４９】
図１４は、図１３のステップＳ１３０２の素片選定処理の詳細例を示すフローチャートである。まず、ＲＡＭ４０３上の変数データsegprevに、未定義値NULLが格納され、変数データsegに、前述した図５のデータ構成例を有する制御変数WavSel内のsegmentデータの値が格納される（ステップＳ１４０１）。この値は、図６のデータ構成例を有するセグメントデータの最初のセグメントデータsegmen[0]の先頭アドレスへのポインタである。変数データsegは処理対象セグメントデータを示し、変数データsegprevは前方セグメントデータを示す。
【００５０】
次に、seg変数の値が未定義値NULLでないか否か、すなわち図６の全てのセグメントデータsegment[0]〜segment[seg_count]が処理されたか否かが判定される（ステップＳ１４０２）。
【００５１】
全てのセグメントデータの処理が完了しておらずseg変数の値が未定義値NULLではなくてステップＳ１４０２の判定がＹＥＳとなる間は、ステップＳ１４０５でsegprev変数にseg変数の値が格納され、seg変数が示すセグメントデータ内のnextポインタ（図６参照）が示す次のセグメントデータへのポインタ値が新たにseg変数にセットされながら、ステップＳ１４０３の素片リストアップ処理と、ステップＳ１４０４の音素列選択処理が繰り返し実行される。
【００５２】
全てのセグメントデータの処理が完了してseg変数の値が未定義値NULLとなってステップＳ１４０２の判定がＮＯとなると、segprev変数が最後に示しているセグメントデータ全体の中の後方から先頭に向かって、決定されている最良候補をたどりながら、各セグメントデータの素片データの最終選択候補を指定してゆき、素片データ列として出力される（ステップＳ１４０６）。
【００５３】
図１５は、図１４のフローチャートによって実現される最良の素片候補データの選択動作の説明図である。この図において、・・・,segmentk-2, segmentk-1, segmentk, segmentk+1, segmentk+2,・・・は、入力テキストデータに対応する合成目標を構成するセグメントデータの離散時系列を示しており、segmentkが処理対象セグメントデータであるとする。図６のセグメントデータの形式で表せば、・・・,segment[k-2],segment[k-1],segment[k],segment[k+1],segment[k+2],・・・となる。また、例えばsegment k-2に実線で接続されている・・・,candidatek-2,0, candidatek-2,1, candidatek-2,2, candidatek-2,3, candidatek-2,4,・・・は、セグメントデータsegment k-2に対してリストアップされる素片候補データ２０９を示している。同様に、例えばsegment k-1に実線で接続されているcandidatek-1,0, candidatek-1,1, candidatek-1,2, candidatek-1,3, candidatek-1,4,・・・は、セグメントデータsegment k-1に対してリストアップされる素片候補データ２０９を示している。同様に、例えばsegment kに実線で接続されているcandidatek,0, candidatek,1, candidatek,2, candidatek,3, candidatek,4,・・・は、セグメントデータsegment kに対してリストアップされる素片候補データ２０９を示している。
【００５４】
上述の各素片候補データ２０９は、図１４のステップＳ１４０３の素片リストアップ処理によって生成される。この素片リストアップ処理は、図２の素片リストアップ部２０７ａの機能を実現している。このとき、素片リストアップ部２０７ａの説明において前述したように、例えば素片候補データcandidatek,0, candidatek,1, candidatek,2, candidatek,3, candidatek,4,・・・がリストアップされるときに、それに対応するセグメントデータsegment kとの間で素片コストが算出され、その算出された素片コストに基づいて、上記素片候補データの並び順が決定される。
【００５５】
次に、セグメントデータsegment k-2内の濃い色の素片候補データcandidatek-2,4は、その次のセグメントデータsegmentk-1内の濃い色の素片候補データcandidatek-1,1が処理対象素片候補データ２０９として実行されるときに検出される最良の素片候補データ２０９を示している。同様に、セグメントデータsegment k-1内の濃い色の素片候補データcandidatek-2,1は、その次のセグメントデータsegment k内の濃い色の素片候補データcandidatek,2が処理対象素片候補データ２０９として実行されるときに検出される最良の素片候補データ２０９を示している。いま、処理対象セグメントデータをsegment kとし、処理対象素片候補データ２０９をcandidatek,2とすれば、前方セグメントデータsegment k-1内の各素片候補データ（前方素片候補データ）candidatek-1,0, candidatek-1,1, candidatek-1,2, candidatek-1,3, candidatek-1,4,・・・との間で、接続コストが計算される。そして、そのように計算された接続コストと２つの素片コストと、前方素片候補データ２０９に対して確定しているさらにその１つ前方の最良の素片候補データ２０９までのトータルコストの重み付け和が計算され、その結果値が処理対象素片候補データcandidatek,2に対するトータルコストとされる。この計算が、処理対象素片候補データcandidatek,2において、すべての前方素片候補データcandidatek-1,0, candidatek-1,1, candidatek-1,2, candidatek-1,3, candidatek-1,4に対して実行され、トータルコストが最も小さい前方素片候補データ２０９が、処理対象素片候補データcandidatek,2に対する最良の前方素片候補データ２０９として決定される。例えば、前方セグメントデータsegment k-1内の濃い色の前方素片候補データcandidatek-1,1が、処理対象素片候補データcandidatek,2に対する最良の前方素片候補データ２０９として決定される。また、処理対象素片候補データcandidatek,2と最良の前方素片候補データcandidatek-1,1間の接続コスト１５０２kが計算される。そして、各素片コスト１５０１kと１５０１k-1と接続コスト１５０２kの重み付け和と、最良の前方素片候補データcandidatek-1,1に対して確定しているトータルコストの和が、処理対象素片候補データcandidatek,2に対するトータルコストとして計算される。
【００５６】
以上のように、本実施形態では、処理対象セグメントデータと前方セグメントデータの組が、セグメントデータの先頭から末尾に向かって順次進められながら、処理対象セグメントデータ内でリストアップされた素片候補データ２０９（処理対象素片候補データ２０９）ごとに、先頭から現在の処理対象セグメントデータ内の現在の処理対象素片候補データ２０９に至るセグメントデータごとの最良の素片候補データ２０９の経路が探索される（ステップＳ１４０２からＳ１４０５の繰返し処理）。また、現在の処理対象セグメントデータ内でそのように探索された素片候補データ２０９ごとのトータルコストが比較され、処理対象セグメントデータ内での最良の素片候補データ２０９が決定される。そして、末尾のセグメントデータまで処理が完了すると（ステップＳ１４０２の判定がＮＯ）、末尾のセグメントデータから先頭のセグメントデータに向かって最良の前方素片候補データ２０９を順次たどる探索処理が実行され、各素片データが決定されてゆく。最後に探索処理が先頭のセグメントデータに到達すると、全てのセグメントデータに対応する素片データが決定されるので、それらが素片データ列として図２の波形合成部１０７に出力される。このようにして、本実施形態では、いわゆるビタビアルゴリズムにより、最適な素片データ列を出力することができる。
【００５７】
図１６は、図１５のステップＳ１４０３の素片リストアップ処理の詳細例を示すフローチャートであり、図２の素片リストアップ部２０７ａの機能を実現している。
【００５８】
まず、ＲＡＭ４０３上の変数uに、音声辞書１０６内のデータベースから先頭の素片データへのポインタが格納される（ステップＳ１６０１）。このポインタ値は、図９の音声辞書データunitdbのunitポインタ値として得ることができる。
【００５９】
次に、ステップＳ１６０２で末尾の素片データの検索が終わっていないと判定される間（判定がＹＥＳの間）、ステップＳ１６０７で次の素片データへのポインタが変数uに格納されながら、各素片データごとに、以下のステップＳ１６０３からＳ１６２０までの一連の処理が実行される。ここで、次の素片データへのポインタは、変数uが示す図１０の素片データ内のnextポインタとして得られる。また、ステップＳ１６０２の判定は、ステップＳ１６０７でセットされたnextポインタの値がNULLであるか否かを判定することにより実現できる。
【００６０】
変数uによって参照される素片データとその前後２つずつの素片データの音素ラベル列と、変数segによって参照されるセグメントデータとその前後２つずつのセグメントデータの音素ラベル列とが比較され、音素列コストが算出され、ＲＡＭ４０３上の変数contextに格納される（ステップＳ１６０３）。この算出方法については、図３の説明で前述した通りである。なお、変数uによって参照される素片データの音素ラベルは、変数uによって参照される図８の素片データ中の音素ＩＤデータphone_idから図１１の音素データ中の音素名データphomeneを参照することにより得られる。また、その前後２つずつの素片データの音素ラベル列は、変数uによって参照される図８の素片データ中のprevポインタおよびnextポインタを順次２つずつたどった先の素片データから、上記と同様にして得られる。変数segによって参照されるセグメントデータの音素ラベルは、変数segによって参照される図６のセグメントデータ中の音素ＩＤデータphone_idから図１１の音素データ中の音素名データphomeneを参照することにより得られる。また、その前後２つずつのセグメントデータの音素ラベル列は、変数segによって参照される図６のセグメントデータ中のprevポインタおよびnextポインタを順次２つずつたどった先のセグメントデータから、上記と同様にして得られる。
【００６１】
次に、ＲＡＭ４０３上の図８の素片候補データ２０９の末尾に新規選択候補のエントリcandidate[i]（iは末尾の次に追加されるエントリの番号）が生成され、そのエントリに素片ID unit_id が新規に付与され、ステップＳ１６０３でセットされたＲＡＭ４０３上の変数contextの値が音素列コストctxt_distanceとして代入される（ステップＳ１６０４）。
【００６２】
次に、ステップＳ１６０３〜Ｓ１６０５で生成された素片候補データ２０９のエントリに対して、さらに韻律コストおよび素片コストが計算され、図１４のステップＳ１４０５でＲＡＭ４０３上の変数segに格納されている処理対象セグメントのエントリに登録される（ステップＳ１６０５）。この処理の詳細については、図１７のフローチャートを用いて後述する。
【００６３】
その後、次の素片データへのポインタが変数uに格納されて（ステップＳ１６０６）、ステップＳ１６０２の処理に戻る。
【００６４】
図１７は、図１６のステップＳ１６０５で実行される素片コスト計算＆候補追加処理の詳細を示すフローチャートである。
【００６５】
まず、処理対象素片データ（音素片）と処理対象セグメントデータの目標韻律データ２０１の韻律遷移が比較され、韻律コストが算出される（ステップＳ１７０１）。具体的な処理については、図２の素片リストアップ部２０７ａの説明で前述した。
【００６６】
次に、処理対象セグメントデータに付加されているアクセント位置の相対位置accent_pos（図６参照）と処理対象素片データに付加されているアクセント位置の相対位置accent_pos（図１０参照）が比較されることにより、アクセント位置の相違数が算出される。そして、この相違数の値が、アクセント位置の相違に関するコストとして、ステップＳ１７０１で算出された韻律コストに乗算され、韻律コストの値が修正される。そして、この韻律コストの値が、ステップＳ１６０４でＲＡＭ４０３上に生成された図８の素片候補データ２０９のエントリの韻律コストpros_distanceとして登録される。このように、本実施形態では、アクセント(強勢)位置に変形による音質劣化のリスクを含むことが多いであろうという仮説の下、アクセント位置の相違を韻律コストに加えて、素片のリストアップにおける韻律評価が行われる。これにより、本実施形態では、アクセントの相対位置が優勢で、かつ、その他の評価指標も有意である音素片が選択されるため、目標韻律に近く、かつ、音質劣化の少ない合成音声を生成することを可能にするものである。
【００６７】
次に、ステップＳ１６０３で算出された音素列コストとステップＳ１７０１及びＳ１７０２で算出された韻律コストとを重み付け加算して得られるコスト値が、素片コストとして算出される。そして、その素片コストの値が、ステップＳ１６０４でＲＡＭ４０３上に生成された図８の素片候補データ２０９のエントリの素片コストunit_distanceとして登録される（ステップＳ１７０３）。
【００６８】
最後に、図１４のステップＳ１４０５でＲＡＭ４０３上の変数segに格納されている処理対象セグメントのエントリに、ステップＳ１６０４でＲＡＭ４０３上に生成された図８の素片候補データ２０９のエントリがリンクされて登録される（ステップＳ１７０４）。このリンクは、図６のセグメントデータのエントリのcandidateポインタから、図８の素片候補データ２０９のエントリのunit_idがリンクされ、さらにその素片候補データ２０９のエントリのnextポインタによって、次の素片候補データ２０９のエントリのunit_idがリンクされる。このとき、ステップＳ１６０５で算出された素片コストの低い順にリンクが張られる。なおこのとき、候補数や素片コスト値などで、追加の可否に制限をかけてもよい。
【００６９】
図１６において、変数uの値が更新されていった結果、末尾の音素片の検索が終了しステップＳ１６０２の判定がＮＯになると、図１６のフローチャートの処理が終了して図１４のステップＳ１４０３の１回の素片リストアップ処理が終了する。
【００７０】
図１８は、図１４のステップＳ１４０４の音素列選択処理の詳細例を示すフローチャートであり、図２の音素列選択部２０７ｂの機能を実現している。
【００７１】
まず、変数segが参照する図６のセグメントデータ中の最良の素片候補データ２０９へのポインタseg.best_candが初期化（クリア）される（ステップＳ１８０１）。
【００７２】
次に、ＲＡＭ４０３上の変数ctに、変数segが示す現在のセグメントデータ（処理対象セグメントデータ）に対してリストアップされている素片候補データ２０９の先頭データのアドレスがセットされる（ステップＳ１８０２）。具体的には、このアドレスは、変数segが参照する図６のセグメントデータ中の最初の素片候補データへのポインタcandidateの値として得られる。
【００７３】
次に、ステップＳ１８０３で素片候補データ２０９の検索が終わっていないと判定される間（判定がＹＥＳの間）、ステップＳ１８１５で次の素片候補データ２０９へのポインタが変数ctに格納されながら、各素片候補データ２０９（処理対象素片候補データ２０９）ごとに、以下のステップＳ１８０４からＳ１８１４までの一連の処理が実行される。ここで、次の処理対象素片候補データ２０９へのポインタは、変数ctが示す図８の素片候補データ２０９内のnextポインタとして得られる。また、ステップＳ１８０３の判定は、ステップＳ１８１５でセットされたnextポインタの値がNULLであるか否かを判定することにより実現できる。
【００７４】
まず、ＲＡＭ４０３上の変数cpに、処理対象セグメントデータの前方セグメントデータに対してリストアップされている素片候補データ２０９（前方素片候補データ２０９）の先頭データのアドレスがセットされる（ステップＳ１８０４）。具体的には、このアドレスは、変数segが参照する図６のセグメントデータ中のprevポインタによって参照される図６のセグメントデータ中の最初の素片候補データへのポインタcandidateの値として得られる。
【００７５】
続いて、変数ctによって参照される構造体データ中のbest_candポインタ（図８の処理対象素片候補データ２０９を参照）が初期化（クリア）される（ステップＳ１８０５）。best_candは、処理対象素片候補データ２０９と接続する最良の前方素片候補データ２０９を参照するポインタである。
【００７６】
その後、ステップＳ１８０６で前方素片候補データ２０９の検索が終わっていないと判定される間（判定がＹＥＳの間）、ステップＳ１８１１で次の前方素片候補データ２０９へのポインタが変数cpに格納されながら、各前方素片候補データ２０９ごとに、以下のステップＳ１８０７からＳ１８１０までの一連の処理が実行される。ここで、次の前方素片候補データ２０９へのポインタは、変数cpが示す図８の素片候補データ２０９内のnextポインタとして得られる。また、ステップＳ１８０６の判定は、ステップＳ１８１１でセットされたnextポインタの値がNULLであるか否かを判定することにより実現できる。
【００７７】
まず、変数ctが示す処理対象素片候補データ２０９と変数cpが示す前方素片候補データ２０９の接続コストが算出される（ステップＳ１８０７）。具体的には、上記各素片候補データ２０９に対応する特徴量ベクトルデータが、図８のunit_idデータ→図１０のfeatvalue[0]〜featvalue[fval_count-1]とたどられて参照され、切り出し先頭位置および切り出し終了位置に対応する特徴量ベクトルデータが抽出される。切り出し先頭位置および切り出し終了位置は、図８のエントリのtop_shiftおよびtail_shiftのデータとして得られる。そして、これらの特徴量ベクトルデータの組によって算出される各素片データの各スペクトル包絡の距離（例えばメルケプストラムのユークリッド距離）が接続コストとして算出される。
【００７８】
次に、図８に示される前方素片候補データ２０９中の確定している前方までのコスト合計cp.total_costと、ステップＳ１８０７で算出された接続コストに重み付け係数を乗じた結果の和が算出される。そして、その加算結果が、ＲＡＭ４０３上の変数ctが示す処理対象素片候補データ２０９の構造体内のtotal_cost値（ct.total_cost）として保存される（以上、ステップＳ１８０８）。
【００７９】
続いて、上述のct.total_cost値が、変数ctが示す元のＲＡＭ４０３上の処理対象素片候補データ２０９内の図８に示されるtotal_cost値よりも小さいか否か、すなわち今回のct.total_cost値が最良であるか否かが判定される（ステップＳ１８０９）。ステップＳ１８０９の判定がＹＥＳの場合には、変数ctが示す元の処理対象素片候補データ２０９内の図８に示される全てのメンバー変数値が、変数ctが示す構造体の全てのメンバー変数値で置き換えられる（ステップＳ１８１０）。ステップＳ１８０９の判定がＮＯの場合には、ステップＳ１８１０の置換えは実行されない。
【００８０】
その後、次の前方素片候補データ２０９へのポインタnextが変数cpに格納され、ステップＳ１８０６の処理に戻り、ステップＳ１８０６での判定の後、上述したステップＳ１８０７からＳ１８１０までの一連の処理が繰り返し実行される。
【００８１】
変数cpの値が更新されていった結果、末尾の前方素片候補データ２０９の検索が終了しステップＳ１８０６の判定がＮＯになると、まず、変数ctが示す前方最良情報が、ステップＳ１８１０でセットされている最良情報保存用変数のデータに書き換えられる（ステップＳ１８１２）。
【００８２】
その後、変数ctが示す処理対象素片候補データ２０９に新たにセットされたtotal_cost値が、変数segが示す図６のセグメントデータ中のbest_candポインタが示す図８の素片候補データ２０９中のtotal_cost値よりも小さいか否かが判定される（ステップＳ１８１３）。ステップＳ１８１３の判定がＹＥＳならば、変数segが示す図６のセグメントデータ中のbest_candポインタに、変数ctの値がセットされる（ステップＳ１８１４）。ステップＳ１８１３の判定がＮＯならばステップＳ１７２４は実行されない。
【００８３】
その後、次の処理対象素片候補データ２０９へのポインタが変数ctに格納されて（ステップＳ１８１５）、ステップＳ１８０３の処理に戻る。
【００８４】
変数ctの値が更新されていった結果、末尾の処理対象素片候補データ２０９の検索が終了しステップＳ１８０３の判定がＮＯになると、図１８のフローチャートの処理が終了し、図１４のステップＳ１４０４の１回の音素列選択処理が終了する。
【００８５】
以上一連の処理により、全てのセグメントデータの処理が完了してseg変数の値が未定義値NULLとなって図１４のステップＳ１４０２の判定がＮＯとなると、segprev変数が最後に示しているセグメントデータ中の図６のbest_candポインタが参照されることにより図８のデータが参照され、unit_idデータによって１つの素片データが決定される。その後、図８のbest_candポインタを末尾のセグメントデータから先頭のセグメントデータに向かって順次たどる探索処理が実行され、各前方セグメントデータごとに最良の前方素片候補データ中のunit_idデータが参照されて、各素片データが決定されてゆく。最後に探索処理が先頭のセグメントデータに到達すると、全てのセグメントデータに対応する素片データが決定されるので、それらが素片データ列として図２の波形合成部１０７に出力される。
【００８６】
以上の実施形態により、指定された韻律遷移に忠実であり、かつ素片同士の接続部が滑らかに連続する素片を、データベースから選択することが可能となる。
【００８７】
以上の実施形態に関して、更に以下の付記を開示する。
（付記１）
テキストデータから音素が対応付けられたセグメントデータの列を抽出する抽出処理と、
前記抽出されたセグメントデータの列を含むセグメントデータごとに、データベースから取得した複数個の音素片夫々のアクセント位置と前記抽出されたセグメントデータのアクセント位置との相違を含む不一致度を表す素片コストを取得する素片コスト取得処理と、
前記取得された各素片コストに基づき、前記セグメントデータの列を構成するセグメントデータごとに、前記複数個の音素片の中から生成用音素片を選択する音素片選択処理と、
前記選択された生成用音素片に基づいて合成音を生成する音生成処理と、
を実行する処理部を有する音合成装置。
（付記２）
前記処理部は、前記音素片選択処理において、前記取得された各素片コストに基づき前記取得した複数個の音素片夫々から前記セグメントデータの列を構成するセグメントデータごとにセグメントデータに対する音素片候補データとなる音素片をリストアップする処理を実行する、付記１に記載の音合成装置。
（付記３）
前記処理部は、前記音素片選択処理において、前記抽出されたセグメントデータの列を構成する前記セグメントデータごとに、前記セグメントデータに対応する前記音素片候補データと、前記セグメントデータに隣接するセグメントデータに対応する前記音素片候補データとの間の不連続性を示す接続コストを取得し、前記取得された接続コスト及び前記隣接する音素片候補データ夫々の素片コストに基づいて、前記音素片候補データとしてリストアップされた音素片のいずれかを選択して前記音素片データ列を生成する処理を実行する、付記２に記載の音合成装置。
（付記４）
前記セグメントデータおよび前記音素片は音素データと韻律データとアクセント位置に関するデータを含み、
前記処理部は、前記素片コスト取得処理において、処理対象の前記セグメントデータの音素と前記セグメントデータの前後所定数セグメントずつの各セグメントデータの音素とから構成される音素列と、処理対象の前記音素片候補データの音素と前記音素片候補データの前後の前記所定数ずつの各音素片データの音素とから構成される音素列とを比較することにより取得される音素列コストと、処理対象の前記セグメントデータの韻律データと処理対象の前記音素片候補データの韻律データの差及びアクセント位置の相違に基づいて取得される韻律コストとの、重み付け和を前記音素片コストとして取得する処理を実行する、付記２に記載の音合成装置。
（付記５）
前記処理部は、前記音素列選択処理において、処理対象の前記セグメントデータに対応する処理対象の前記音素片候補データと当該セグメントデータの１つ前の前記セグメントデータに対応する前記音素片候補データとの間の音素接続点での各特徴量ベクトルデータ間の距離として前記接続コストを取得する処理を実行する、付記３に記載の音合成装置。
（付記６）
音素片を記憶するデータベースを有する音合成装置で音を合成するための方法であって、前記音合成装置は、
入力テキストデータから音素が対応付けられたセグメントデータの列を抽出し、
前記抽出されたセグメントデータの列を構成するセグメントデータごとに、データベースから取得した複数個の音素片夫々と前記セグメントデータとについて、前記複数個の音素片夫々のアクセント位置と前記セグメントデータのアクセント位置との相違を含む不一致度を表す素片コストを取得し、
前記取得された各素片コストに基づき、前記セグメントデータの列を構成するセグメントデータごとに、前記セグメントデータに対応する音素片を選択し、
前記選択された音素片に基づいて合成音を生成する、音合成方法。
（付記７）
音素片を記憶するデータベースを有する音合成装置として用いられるコンピュータに、
入力テキストデータから音素が対応付けられたセグメントデータの列を抽出するステップと、
前記抽出されたセグメントデータの列を構成するセグメントデータごとに、データベースから取得した複数個の音素片夫々と前記セグメントデータとについて、前記複数個の音素片夫々のアクセント位置と前記セグメントデータのアクセント位置との相違を含む不一致度を表す素片コストを取得する素片コスト取得ステップと、
前記取得された各素片コストに基づき、前記セグメントデータの列を構成するセグメントデータごとに、前記セグメントデータに対応する音素片を選択する音素片選択ステップと、
前記選択された音素片に基づいて合成音を生成する音生成ステップと、
を実行させるプログラム。
【符号の説明】
【００８８】
１００  音声合成装置
１０１  テキスト入力部
１０２  形態素解析部
１０３  韻律予測部
１０４  韻律辞書
１０５  波形選択部
１０６  音声辞書
１０７  波形合成部
２０１  目標韻律データ
２０２  韻律入力部
２０７  素片選定部
２０７ａ  素片リストアップ部
２０７ｂ  音素列選択部
２０８  評価部
２０８ａ  素片評価部
２０８ｂ  接続評価部
２０９  素片候補データ
２１０  合成部
４０１  ＣＰＵ
４０２  ＲＯＭ（リードオンリーメモリ）
４０３  ＲＡＭ（ランダムアクセスメモリ）
４０４  入力装置
４０５  出力装置
４０６  外部記憶装置
４０７  可搬記録媒体駆動装置
４０８  通信インタフェース
４０９  バス
４１０  可搬記録媒体
【図１】
2017062346.tif 000003
【図２】
2017062346.tif 000004
【図３】
2017062346.tif 000005
【図４】
2017062346.tif 000006
【図５】
2017062346.tif 000007
【図６】
2017062346.tif 000008
【図７】
2017062346.tif 000009
【図８】
2017062346.tif 000010
【図９】
2017062346.tif 000011
【図１０】
2017062346.tif 000012
【図１１】
2017062346.tif 000013
【図１２】
2017062346.tif 000014
【図１３】
2017062346.tif 000015
【図１４】
2017062346.tif 000016
【図１５】
2017062346.tif 000017
【図１６】
2017062346.tif 000018
【図１７】
2017062346.tif 000019
【図１８】
2017062346.tif 000020