(57)【要約】【課題】音声波形を接続又は繰り返し再生して合成音を生成する合成音生成技術に関し、音声波形を繰り返し再生することによる周期性を軽減でき、品質の劣化を抑えることのできる合成音を合成する。【解決手段】記憶部に記憶される素片データ２００をピッチ周期毎に分割して得られる複数の基本波データのうちから、最初の１つの基本波データを選択して読み出した後に現在読み出した基本波データに類似する（相関の高い）基本波データを次に選択して読み出すようにして、順次読み出された基本波データを接続することにより所望の時間長を有する合成音３００を生成する。【選択図】図４
2019168620.tif 000002
【特許請求の範囲】
【請求項１】
音素片データを記憶する記憶部と、
前記記憶部に記憶される前記音素片データをピッチ周期毎に分割して得られる複数の基本波データのうちから、１つの基本波データを選択して読み出した後に、当該読み出した基本波データである先の基本波データの次の基本波データとして、前記先の基本波データに類似する基本波データを選択して読み出すようにして、順次読み出された前記基本波データを接続することにより合成音を生成する生成部と、
を有する合成音生成装置。
【請求項２】
前記記憶部は更に、前記複数の基本波データの夫々について、当該基本波データと相関の高い他の基本波データの前記記憶部内での記憶位置を示す記憶位置情報を、前記相関の高い順に並べて登録した基本波相関テーブルを記憶し、
前記生成部は、前記次の基本波データを選択して読み出すときに、前記基本波相関テーブル上で前記先の基本波データについて登録されている前記記憶位置情報のうち前記相関が高い記憶位置情報を優先的に選択し、前記選択した記憶位置情報に対応する記憶位置に記憶されている基本波データを前記次の基本波データとして前記記憶部から読み出す、請求項１に記載の合成音生成装置。
【請求項３】
前記生成部は、前記次の基本波データを選択して読み出すときに、前記基本波相関テーブル上で前記先の基本波データについて登録されている前記記憶位置情報のうち、当該先の基本波データに関していままで選択されておらず、かつ直前の前記先の基本波データ以外の基本波データに対応する前記相関が高い記憶位置情報を選択する、請求項２に記載の合成音生成装置。
【請求項４】
前記記憶部は、複数の音高をそれぞれ有する複数の前記音素片データを記憶し、
指定された音高に基づいて前記複数の音素片データのうちの１つを指定する音素片データ指定部を更に有し、
前記生成部は、前記記憶部が記憶する前記複数の音素片データのうち前記音素片データ指定部が指定した音素片データを用いて、前記合成音を生成する、請求項１乃至３の何れかに記載の合成音生成装置。
【請求項５】
前記音素片データ指定部は、
入力音声を取得する音声取得部と、
前記入力音声を分析する時間単位であるフレーム毎に、前記入力音声からピッチ周波数を取得し、前記ピッチ周波数に基づいて目標ピッチを決定する目標ピッチ決定部と、
前記フレーム毎の目標ピッチに基づいて、前記入力音声をそれぞれが同じ前記音素片データを連続して割り当てることが可能な期間であるセグメントにセグメンテーションするセグメンテーション部と、を有し、
前記生成部は、前記セグメンテーション部がセグメンテーションした前記セグメント毎に、該セグメントに対応する前記音素片データを前記記憶部から読み出して、前記合成音を生成する、請求項４に記載の合成音生成装置。
【請求項６】
音素片データを記憶する記憶ステップと、
前記記憶される前記音素片データをピッチ周期毎に分割して得られる複数の基本波データのうちから、１つの基本波データを選択して読み出した後に、当該読み出した基本波データである先の基本波データの次の基本波データとして、前記先の基本波データに類似する基本波データを選択して読み出すようにして、順次読み出された前記基本波データを接続することにより合成音を生成する生成ステップと、
を含むことを特徴とする合成音生成方法。
【請求項７】
合成音を生成する合成音生成装置のコンピュータに、
音素片データを記憶する記憶機能と、
前記記憶される前記音素片データをピッチ周期毎に分割して得られる複数の基本波データのうちから、１つの基本波データを選択して読み出した後に、当該読み出した基本波データである先の基本波データの次の基本波データとして、前記先の基本波データに類似する基本波データを選択して読み出すようにして、順次読み出された前記基本波データを接続することにより合成音を生成する生成機能と、
を実現させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、音声波形を接続して合成音を生成する合成音生成装置、方法、及びプログラムに関する。
【背景技術】
【０００２】
従来、複数の音素片データ（以下「素片データ」と記する）を接続して合成音を生成する合成音生成装置が知られている。素片接続型の音声合成において、より自然な聴感を得るためには、指定されたピッチ遷移に忠実であること、かつ、素片同士の接続部が滑らかに連続していることなどが必須である。これらを同時に実現するためには、なるべく連続する区間を採用できるような、元音声情報を大量に搭載する音素片辞書、あるいは、音素の切れ目が正確に定義されている音素片辞書が必要となる。
【０００３】
しかしながら、例えば、「あ」「い」「う」「え」「お」などの母音を使って、歌声の入力や楽器の演奏に合わせてハミング音声を合成して発声するような合成音生成装置を実現しようとする場合に、歌声や楽器演奏により入力される音高（音階）毎に素片データを記憶させる必要がある。このため、あまり長い素片データを記憶させることはコスト的に難しく、５００〜１０００ｍｓｅｃ（ミリ秒）程度の長さの素片データが用いられることが多い。この場合に、上記時間長以上の長さの音符長のハミング音声を合成する場合には、上記時間長の素片データが繰り返し再生されることになる。上記時間長の素片データは、例えば母音「あ」が安定したピッチで発声される音声データから作成されるが、このような素片データの開始位置と終了位置とでは、微妙なピッチや声質の差がある。このため、このような素片データが繰り返し再生されると、上記５００〜１０００ｍｓｅｃの時間長の周期を有する、うなりのような周期音が聞こえてしまう。
【０００４】
このような課題を解決するために、次のような従来技術が知られている（例えば特許文献１）。この従来技術では、時間軸上の異なる位置から抽出され、記憶された複数の単位波形がランダムに選択されるとともに、選択された複数の単位波形をクロスフェードすることによって合成音が生成される。この場合、複数の単位波形の各々の位相が、隣り合う各々の単位波形間の相互相関関数が最大となるように、調整される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第５９１５２６４号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、上述した従来の合成音生成装置では、ランダムに選択された複数の単位波形を互いに接続することによって合成音が生成されるので、相関の低い単位波形同士が接続される場合があり、その場合には、それにより合成音が劣化してしまう。
【０００７】
そこで、本発明は、品質の劣化を抑えることのできる合成音を合成することを目的とする。
【課題を解決するための手段】
【０００８】
態様の一例合成音生成装置では、音素片データを記憶する記憶部と、記憶部に記憶される音素片データをピッチ周期毎に分割して得られる複数の基本波データのうちから、１つの基本波データを選択して読み出した後に、その読み出した基本波データである先の基本波データの次の基本波データとして、先の基本波データに類似する基本波データを選択して読み出すようにして、順次読み出された基本波データを接続することにより合成音を生成する生成部と、を有する。
【発明の効果】
【０００９】
本発明によれば、品質の劣化を抑えることのできる合成音を合成することが可能となる。
【図面の簡単な説明】
【００１０】
【図１】合成音生成装置の実施形態のハードウェア構成例を示す図である。
【図２】基本波相関テーブルの説明図である。
【図３】基本波相関テーブルを用いた本実施形態の動作説明図（その１）である。
【図４】基本波相関テーブルを用いた本実施形態の動作説明図（その２）である。
【図５】合成用音声データベースのデータ構成例を示す図である。
【図６】セグメントデータのデータ構成例を示す図である。
【図７】本実施形態の制御処理を示すメインフローチャートである。
【図８】セグメンテーション処理の詳細例を示すフローチャートである。
【図９】合成処理の詳細例を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明を実施するための形態について図面を参照しながら詳細に説明する。図１は、合成音生成装置の実施形態のハードウェア構成例を示す図である。
【００１２】
図１に示す合成音生成装置１００は、ＣＰＵ（セントラルプロセッシングユニット：中央演算処理装置）１０１、ＲＯＭ（リードオンリーメモリ）１０２、ＲＡＭ（ランダムアクセスメモリ）１０３、外部記憶装置１０４、入力装置１０５、表示装置１０６、通信インタフェース１０７、および可搬記録媒体１０８ａが挿入される可搬記録媒体駆動装置１０８、歌唱者の音声を入力するマイクロフォン及びＡ／Ｄコンバータ等を含む音声取得部１１０、及び合成音を放音するためのＤ／Ａコンバータ、アンプ、及びスピーカ等を含む音声出力部１１１を有し、これらがシステムバス１０９によって相互に接続された構成を有する。同図に示される構成は上記制御装置１００を実現できるコンピュータの一例であり、そのようなコンピュータはこの構成に限定されるものではない。
【００１３】
ＣＰＵ１０１は、当該合成音生成装置１００全体の制御を行う。ＲＯＭ１０２は、制御処理プログラム及びそのプログラムの実行時に必要な定数データ等を記憶する読出し専用メモリである。ＲＡＭ１０３は、上記プログラムまたはデータを一時的に格納する読み書き可能メモリである。ＣＰＵ１０１は、上記制御処理プログラム等をＲＯＭ１０２からＲＡＭ１０３に読み出して実行することにより、全体の制御を行う。
【００１４】
外部記憶装置１０４は、例えばＳＳＤなどの半導体ディスク記憶装置である。主に後述する素片データや基本波相関テーブルの保存に用いられる。
【００１５】
入力装置１０５は、ユーザによるキーボードやマウス等による入力操作を検出し、その検出結果をＣＰＵ１０１に通知する。
【００１６】
表示装置１０６は、ＣＰＵ１０１の制御によって送られてくる各種表示データを表示するディスプレイ装置である。
【００１７】
通信インタフェース１０７は、例えばＬＡＮ（ローカルエリアネットワーク）またはＷＡＮ（ワイドエリアネットワーク）の通信回線を接続するための装置である。
【００１８】
可搬記録媒体駆動装置１０８は、ＵＳＢメモリ、ＳＤカードメモリ、コンパクトフラッシュ（登録商標）メモリや、ＣＤ−ＲＯＭ、ＤＶＤ、光ディスク等の可搬記録媒体１０８ａを収容するもので、外部記憶装置１０４の補助の役割を有する。
【００１９】
本実施形態の合成音生成装置１００は、後述する図６から図８のフローチャート等で実現される制御処理プログラムをＣＰＵ１０１が実行する。このプログラムは、例えば外部記憶装置１０４や可搬記録媒体１０８ａに記録して配布してもよく、或いは通信インタフェース１０７によりネットワークから取得できるようにしてもよい。
【００２０】
図１に示される合成音生成装置１００の実施形態の動作について、以下に詳細に説明する。本実施形態は例えば、歌唱者が歌う歌声に合わせて、ハミング音声を合成音として合成して歌唱演奏を行う歌唱装置などとして実現される。このような合成音生成装置１００は例えば、発話可能なロボットに組み込まれて使用される。これにより例えば、ロボットの近くにいる歌唱者が歌を歌うと、ロボットがそれに合わせてハミングをするというような効果を奏することが実現される。
【００２１】
このような機能を有する合成音生成装置１００においては、まず、記憶部として機能する外部記憶装置１０４は、複数の音高をそれぞれ有する複数の素片データ（音素片データ）を記憶する。なお、素片データ２００は、後述する制御処理の開始時に、外部記憶装置１０４からＲＡＭ１０３にロードされてもよい。このような素片データは例えば、歌手が様々な音高で口ずさんだ５００〜数千ｍｓｅｃ程度の長さのハミング音声を録音してデジタル化したものである。ハミング音声はそれぞれ例えば、所定の音高に対応するピッチ周期を有する母音（「あ」「い」「う」「え」「お」の何れか）のみからなる有声音である。
【００２２】
ここで、図１の音声取得部１１０は、例えば、マイクロフォンなどで構成されており、例えば合成音生成装置１００がロボットに搭載される場合、ロボットのユーザが歌った入力音声を取得する。これに対して、ＣＰＵ１０１は、入力音声を分析する例えば数ｍｓｅｃの時間単位であるフレーム毎に、入力音声からピッチ周波数を取得し、各ピッチ周波数に対して所定の変換（例えば半音アップ又はダウン等）を行った上で目標ピッチを決定する（目標ピッチ決定部）。次に、ＣＰＵ１０１は、フレーム毎に決定された目標ピッチに基づいて、入力音声に対して、それぞれが同じ素片データを連続して割り当てることが可能な期間であるセグメントにセグメンテーションする（セグメンテーション部）。そして、ＣＰＵ１０１は、上記セグメント毎に、そのセグメントに対応する素片データを外部記憶装置１０４等から読み出して、合成音を生成する（生成部）。
【００２３】
ここで、各セグメントの時間長が、そのセグメントに対して読み出される素片データの時間長よりも長い場合に、なんらかの制御処理によりその素片データからそのセグメントの時間長分のデータを合成する必要がある。このとき、「背景技術」において説明したように、単純に、素片データを先頭から末尾まで再生した後に再び先頭から再生してセグメントに対応する時間長を有するデータを合成した場合には、素片データの時間長に対応する周期音が発生してしまう。
【００２４】
そこで、本実施形態では、生成部として動作するＣＰＵ１０１が、セグメントに対応する素片データを外部記憶装置１０４等に対して指定するときに、その素片データをピッチ周期毎に分割して得られる複数の基本波データのうちから、最初の１つの基本波データを選択して読み出した後に現在読み出した基本波データに類似する基本波データを次に選択して読み出すようにして、順次読み出された基本波データを接続することにより、セグメントに対応する所望の時間長を有する合成音を生成する。
【００２５】
より具体的には、素片データ毎に、その素片データをピッチ周期毎に分割して得られる複数の基本波データの夫々について、その基本波データと相関の高い他の基本波データの記憶位置を示す記憶位置情報を、相関の高い順に並べて登録した基本波相関テーブルが、予め作成されて図１の外部記憶装置１０４等に記憶される。
【００２６】
図２は、基本波相関テーブルの説明図である。まず、図２の２００は、素片データの時間域波形の例を示す図である。本実施形態で使用される素片データ２００は、ピッチ周期で周期的に繰り返す２０１（＃０）、２０１（＃１）、２０１（＃２）、２０１（＃３）、・・・として示される波形セット、即ち上述した基本波データ２０１が接続されたものである。
【００２７】
上述のような素片データ２００に対して、予め、図２に示される基本波相関テーブル２０２が作成される。この基本波相関テーブル２０２は、後述する制御処理の実行開始時に、例えば外部記憶装置１０４（又はＲＯＭ１０２）からＲＡＭ１０３にロードされる。基本波相関テーブル２０２において、左端上から下方向に０から１８までの数字で示される基本波インデックスは、図２の＃０から＃３の４本の破線矢印２０３で示されるように、素片データ２００の先頭の基本波データ２０１（＃０）のインデックスを０番目として、それ以降順次、１番目、２番目、３番目、・・・の各基本波データ２０１（＃１）、２０１（＃２）、２０１（＃３）のインデックスに対応している。図２では、１８番目までしか示されていないが、実際には、素片データ２００に含まれる基本波データ２０１の数をｐｉｔｃｈＷａｖｅＣｏｕｎｔとすれば、末尾の基本波データ２０１（ｐｉｔｃｈＷａｖｅＣｏｕｎｔ−１）に対応するインデックスｐｉｔｃｈＷａｖｅＣｏｕｎｔ−１まで登録されている。
【００２８】
次に、基本波相関テーブル２０２上の左端上から下方向のインデックス毎に、そのインデックスを有する基本波データ２０１（これを「接続元基本波データ２０１」と呼ぶ）と他の各基本波データ２０１との相関が計算される。そして、相関の高い例えば１位から１０位までの他の基本波データ２０１の各インデックスが、基本波相関テーブル２０２上の上記接続元基本波データ２０１のインデックスに対応する横方向の行と、基本波相関テーブル２０２の上端左横から右横方向の０から９までの数字で示される相関順位に対応する縦方向の各列との交差部分に対応する記憶位置に登録される。
【００２９】
例えば、図２の基本波データ２０１（＃０）に対応する破線矢印２０３（＃０）で示されるインデックス０の行において、相関順位０の列には、基本波データ２０１（＃０）と最も相関が高い基本波データ２０１（＃１）を示すインデックス値１が登録される。同様に、インデックス０の行において、相関順位１の列には、基本波データ２０１（＃０）と２番目に相関が高い基本波データ２０１（＃１６）に対応するインデックス値１６が登録される。以下同様に、相関順位２〜９の各列には、基本波データ２０１（＃０）と３〜１０番目に相関が高い各基本波データ２０１に対応するインデックス値が登録される。
【００３０】
図２の＃１〜＃３の各基本波データ２０１に対応する＃１〜＃３の各破線矢印２０３で示される各インデックス１、２、３の各行において、相関順位０〜９の各列には、＃１〜＃３の基本波データ２０１とそれぞれ１〜１０番目に相関が高い他の各基本波データ２０１に対応するインデックス値が登録される。以下、左端上から下方向の値が４以降の各基本波データ２０１のインデックスについても、同様である。
【００３１】
素片データ２００から合成音を生成するときに、発声されるべきセグメントの時間長が素片データ２００の時間長よりも短ければ、素片データ２００を、その先頭サンプルから順に、上記セグメントの時間長分だけ読み出して合成音を生成すれば、素片データ２００を作成したときの原音に最も忠実な高音質の合成音を発声させることができる。
【００３２】
しかし、セグメントの時間長が、そのセグメントに対して読み出される素片データの時間長よりも長い場合には、前述したように、単純に素片データを先頭から末尾まで再生した後に再び先頭から再生してセグメントに対応する時間長を有するデータを合成した場合には、素片データの時間長に対応する周期音が発生してしまう。そこで、本実施形態では、ＣＰＵ１０１は、前述したように、現在読み出した基本波データ２０１に類似する基本波データ２０１を次に選択して読み出すときに、図２の基本波相関テーブル２０２上で現在読み出した基本波データ２０１のインデックス（左端上から下方向の数値）に関して例えば相関順位０〜９に対応して登録されているインデックスのうち、相関が高いインデックスを優先的に選択し、その選択したインデックスに対応する基本波データ２０１を次に読み出す。
【００３３】
図３及び図４は、基本波相関テーブル２０２を用いた上述の本実施形態の動作の説明図である。図３は、生成される合成音の基本波データ２０１の連番である「合成音＃」と、各合成音＃に対して読み出される素片データ２００中の基本波データ２０１のインデックスである「基本波＃」と、読み出された基本波＃に対して次に参照される基本波相関テーブル２０２上の「相関順位」（図２参照）と、上記基本波＃と相関順位とに対応する基本波相関テーブル２０２上の登録位置から読み出されるインデックスであって、上記基本波＃の基本波データ２０１の次に読み出される基本波データ２０１のインデックスである「次基本波＃」との関係を説明するテーブルである。図４は、図３のテーブルに対応して順次読み出される素片データ２００中の各基本波データ２０１のインデックスと、それに対応して順次生成される合成音３００中の各基本波データ２０１のインデックスとの関係例を示す図である。
【００３４】
ＣＰＵ１０１は、図３に示されるように、合成音＃＝０の基本波データ２０１として、素片データ２００中の基本波＃＝０の基本波データ２０１を選択して図１の外部記憶装置１０４等から読み出す（図４の４０１（＃０））。次に、ＣＰＵ１０１は、基本波相関テーブル２０２において、基本波＃＝０に対応する行と相関順位＝０に対応する列の交差位置に対応する記憶位置から、次基本波＃＝１のインデックスを選択する。なお、ＣＰＵ１０１は、基本波＃＝０については最高の相関順位＝０の列を優先的に参照する。
【００３５】
この結果、ＣＰＵ１０１は、図３に示されるように、合成音＃＝１の基本波データ２０１として、素片データ２００中の基本波＃＝１の基本波データ２０１を選択して図１の外部記憶装置１０４等から読み出す（図４の４０１（＃１））。次に、ＣＰＵ１０１は、基本波相関テーブル２０２において、基本波＃＝１に対応する行と相関順位＝１に対応する列の交差位置に対応する記憶位置から、次基本波＃＝１６のインデックスを選択する。なお、基本波＃＝０以外の基本波＃についてはデフォルトでは２番目の相関順位＝１の列を参照する。２番目の相関順位が参照される理由は、１番目の相関順位だと基本波＃を参照した元の基本波データ２０１のインデックスが次基本波＃として選択されてしまう可能性が高く、選択が２つの基本波データ２０１の間で循環してしまう可能性があるので、それを回避するためである。
【００３６】
この結果、ＣＰＵ１０１は、図３に示されるように、合成音＃＝２の基本波データ２０１として、素片データ２００中の基本波＃＝１６の基本波データ２０１を選択して図１の外部記憶装置１０４等から読み出す（図４の４０１（＃２））。次に、ＣＰＵ１０１は、基本波相関テーブル２０２において、基本波＃＝１６に対応する行と相関順位＝１に対応する列の交差位置に対応する記憶位置から、次基本波＃＝１５のインデックスを選択する。
【００３７】
この結果、ＣＰＵ１０１は、図３に示されるように、合成音＃＝３の基本波データ２０１として、素片データ２００中の基本波＃＝１５の基本波データ２０１を選択して図１の外部記憶装置１０４等から読み出す（図４の４０１（＃３））。次に、ＣＰＵ１０１は、基本波相関テーブル２０２において、基本波＃＝１５に対応する行と相関順位＝１に対応する列の交差位置に対応する記憶位置から、次基本波＃＝１７のインデックスを選択する。
【００３８】
この結果、ＣＰＵ１０１は、図３に示されるように、合成音＃＝４の基本波データ２０１として、素片データ２００中の基本波＃＝１７の基本波データ２０１を選択して図１の外部記憶装置１０４等から読み出す（図４の４０１（＃４））。次に、ＣＰＵ１０１は、基本波相関テーブル２０２において、基本波＃＝１７に対応する行と相関順位＝１に対応する列の交差位置に対応する記憶位置から、次基本波＃＝１６のインデックスを選択する。
【００３９】
この結果、ＣＰＵ１０１は、図３に示されるように、合成音＃＝５の基本波データ２０１として、素片データ２００中の基本波＃＝１６の基本波データ２０１を選択して図１の外部記憶装置１０４等から読み出す（図４の４０１（＃５））。次に、ＣＰＵ１０１は、基本波相関テーブル２０２において、基本波＃＝１６に対応する行と相関順位＝２に対応する列の交差位置に対応する記憶位置から、次基本波＃＝１７のインデックスを選択する。デフォルトの相関順位＝１ではなく相関順位＝２の列が参照されるのは、図３に示されるように、基本波＃＝１６に関しては、ＣＰＵ１０１は、合成音＃＝２の生成時に一度基本波相関テーブル２０２の相関順位＝１の列を参照しているため、基本波＃の選択に関して循環が発生するのを回避するためであり、そのためにＣＰＵ１０１は、合成音＃＝２の生成時の相関順位とは異なる相関順位（例えば＋１された相関順位）の列を参照する。
【００４０】
以下同様にして、ＣＰＵ１０１は、基本波相関テーブル２０２を参照しながら、合成音の生成時に、素片データ２００中の基本波データ２０１を順次接続してゆくときに、隣り合う基本波データ２０１の相関が高くなるように基本波データ２０１を並び替えて接続してゆく。このようにして本実施形態によれば、素片データ２００の時間長に起因する周期音の発生を抑制できると同時に、基本波データ２０１をランダムに接続する場合に比較して、異なる位置の基本波データ２０１の接続によるノイズの発生を抑制し、高音質の合成音を生成することが可能となる。
【００４１】
図５は、図１の外部記憶装置１０４等に記憶される複数の素片データ２００を含む合成用音声データベースのデータ構成例を示す図である。本実施形態は、前述したように、ハミング音声を合成音として合成するため、この音声データベースを例えばＨｕｍｍｉｎｇＤａｔａｂａｓｅと称する。このＨｕｍｍｉｎｇＤａｔａｂａｓｅは、基本情報として、解析フレームの時間長を示すｆｒａｍｅ  ｐｅｒｉｏｄ、サンプリングレートを示すｆｓ、及び最初の素片データ２００へのポインタであるｗａｖｅｄａｔａの各データを有する。
【００４２】
図５において、外部記憶装置１０４等に記憶されるＮ個の素片データ２００の各先頭アドレスは、ＤａｔａＷａｖｅ［０］、ＤａｔａＷａｖｅ［１］、・・・ＤａｔａＷａｖｅ［Ｎ−１］で示される。ＤａｔａＷａｖｅ［ｉ］（０≦ｉ≦Ｎ−１）で指示される各素片データ２００は、次のデータ群からなる。ｐｃｍは、素片データ２００のＰＣＭ（Ｐｕｌｓｅ  Ｃｏｄｅ  Ｍｏｄｕｌａｔｉｏｎ）形式の実体データへのポインタを示す。ｐｃｍ  ｓａｍｐｌｅｓは、上記ＰＣＭ形式の実体データのサンプル数を示す。ｆ０  ａｖｅｒａｇｅは、素片データ２００のＦ０周波数（ピッチ周波数）の平均値を示す。ｐｉｔｃｈＷａｖｅＣｏｕｎｔは、素片データ２００中の基本波データ２０１（図２参照）の数を示す。ｐｉｔｃｈＷａｖｅｓ［０］〜ｐｉｔｃｈＷａｖｅｓ［ｐｉｔｃｈＷａｖｅＣｏｕｎｔ−１］（図５中ではｐｉｔｃｈＷａｖｅｓ［ｐｉｔｃｈＷａｖｅＣｏｕｎｔ−１］と記載）は、各基本波データ２０１の先頭位置（サンプル）を示す配列データである。ｐｉｔｃｈＣｏｎｎｅｃｔＴａｂ［０］［０］〜ｐｉｔｃｈＣｏｎｎｅｃｔＴａｂ［０］［９］、・・・ｐｉｔｃｈＣｏｎｎｅｃｔＴａｂ［ｐｉｔｃｈＷａｖｅＣｏｕｎｔ−１］［０］〜ｐｉｔｃｈＣｏｎｎｅｃｔＴａｂ［ｐｉｔｃｈＷａｖｅＣｏｕｎｔ−１］［９］（図５中ではｐｉｔｃｈＣｏｎｎｅｃｔＴａｂ［ｐｉｔｃｈＷａｖｅＣｏｕｎｔ−１］［］と記載）は、図２に例示した基本波相関テーブル２０２を示す２次元配列データである。この２次元配列データの第１番目の配列番号は図２に例示した基本波相関テーブル２０２の縦方向のインデックス値（０〜ｐｉｔｃｈＷａｖｅＣｏｕｎｔ−１）を示し、第２番目の配列番号は図２に例示した基本波相関テーブル２０２の横方向の相関順位（０〜９）を示す。ｐｉｔｃｈＣｏｎｎｅｃｔＩｎｄｅｘ［０］〜ｐｉｔｃｈＣｏｎｎｅｃｔＩｎｄｅｘ［ｐｉｔｃｈＷａｖｅＣｏｕｎｔ−１］（図５中ではｐｉｔｃｈＣｏｎｎｅｃｔＩｎｄｅｘ［ｐｉｔｃｈＷａｖｅＣｏｕｎｔ−１］と記載）は、基本波相関テーブル２０２において基本波データ２０１のインデックス毎に次に参照される相関順位を示す。ｐｒｅｖは、外部記憶装置１０４等上で記憶されている現在の素片データ２００の前の素片データ２００へのポインタを示す。ｎｅｘｔは、外部記憶装置１０４等上で記憶されている現在の素片データ２００の次の素片データ２００へのポインタを示す。
【００４３】
図６は、後述するセグメンテーション処理により生成されるセグメントデータのデータ構成例を示す図である。セグメンテーションの結果、ＲＡＭ１０３上に得られるＭ個のセグメントデータは、その先頭アドレスがＷａｖｅＰｉｅｃｅ［０］〜ＷａｖｅＰｉｅｃｅ［Ｍ−１］によって示される。ＷａｖｅＰｉｅｃｅ［ｊ］（０≦ｊ≦Ｍ−１）で指示される各セグメントデータは、次のデータ群からなる。ｄｗは、そのセグメントを構成する素片データ２００の先頭アドレス（図５のＤａｔａＷａｖｅ［０］〜ＤａｔａＷａｖｅ［Ｎ−１］の何れか）へのポインタである。ｆｒａｍｅ＿ｓｔａｒｔは、そのセグメントの入力音声上での先頭フレーム位置（サンプル）である。ｆｒａｍｅ＿ｄｕｒａｔｉｏｎは、そのセグメントの入力音声上でのフレーム長である。ｐｒｅｖは、外部記憶装置１０４等上で記憶されている現在のセグメントデータの前に接続するセグメントデータへのポインタを示す。ｎｅｘｔは、外部記憶装置１０４等上で記憶されている現在のセグメントデータの次に接続するセグメントデータへのポインタを示す。
【００４４】
図７は、本実施形態の制御処理を示すメインフローチャートである。この制御処理は、図１のＣＰＵ１０１が、ＲＯＭ１０２又は外部記憶装置１０４から制御処理プログラムをＲＡＭ１０３にロードし、実行する処理を示すものである。
【００４５】
ユーザが入力装置１０５等から電源をオンすると、図７のメインフローチャートによる制御処理が起動する。この結果、ＣＰＵ１０１はまず、ＲＡＭ１０３上の各種変数を初期化するほか、図５のデータ構成例を有する合成用音声データベース（ＨｕｍｍｉｎｇＤａｔａｂａｓｅ）と、図２のデータ構成例を有する基本波相関テーブル２０２を、例えば外部記憶装置１０４からＲＡＭ１０３にロードする（ステップＳ７０１）。なお、例えば合成用音声データベースのデータサイズが大きい場合には、ＣＰＵ１０１は、ＲＡＭ１０３にはロードせずに、外部記憶装置１０４上の合成用音声データベースに対して直接アクセスしてもよい。
【００４６】
ステップＳ７０１の処理の後、ＣＰＵ１０１は、待機状態となり、以下の２つの入力待ちとなる（ステップＳ７０２の判定がＮＯ→ステップＳ７０３の判定がＮＯ→ステップＳ７０２の判定がＮＯの繰返し）。
【００４７】
上記待機処理において、ユーザが入力装置１０５等から終了指示を行うと、ステップＳ７０２の判定がＹＥＳとなって、図７のフローチャートで示される制御処理が終了し、電源オフする。
【００４８】
上記待機処理において、ユーザが図１の音声取得部１１０の特には図示しないマイクロフォンから歌唱音声の入力（以下「入力音声」と呼ぶ）を行うと、ステップＳ７０３の判定がＹＥＳとなる。
【００４９】
この結果、ＣＰＵ１０１はまず、入力音声のフレーム単位で、Ｆ０周波数（ピッチ周波数）の抽出を行うＦ０抽出処理を実行する（ステップＳ７０４）。ＣＰＵ１０１は、Ｆ０抽出処理において、例えばフレーム単位の入力音声に対して、パワー判定により無声音又は有声音の判別を行い、有声音と判別したフレームに対して、例えば自己相関分析又はケプストラム分析等によってＦ０周波数の抽出を行う。
【００５０】
次に、ＣＰＵ１０１は、目標ピッチの決定処理を実行する（ステップＳ７０５）。この処理において、ＣＰＵ１０１は、合成用音声データベースで保有するピッチ周波数範囲や、ｌｏｇ軸上での平行移動の有無など、目的に応じて、ステップＳ７０４で抽出したＦ０周波数を変換し、フレーム毎に目標ピッチを決定する。
【００５１】
続いて、ＣＰＵ１０１は、セグメンテーション処理を実行する（ステップＳ７０６）。この処理において、ＣＰＵ１０１は、入力音声を、同じ音素が連続する区間であるセグメントに分割する処理を実行する。この処理の詳細例は、図８のフローチャートを用いて後述する。
【００５２】
最後に、ＣＰＵ１０１は、合成処理を実行する（ステップＳ７０７）。この処理において、ＣＰＵ１０１は、ステップＳ７０６で決定されたセグメント毎に、前述した図２〜図４の動作原理に基づく合成音の生成処理を実行する。この処理の詳細例は、図９のフローチャートを用いて後述する。その後、ＣＰＵ１０１は、ステップＳ７０２の待機処理に戻る。
【００５３】
図８は、図７のステップＳ７０６のセグメンテーション処理の詳細例を示すフローチャートである。ＣＰＵ１０１はまず、有声音区間のフレーム毎に、そのフレームに対して図７のステップＳ７０５で決定された目標ピッチに対して、外部記憶装置１０４又はＲＡＭ１０３上の合成用音声データベース上で、最も近いＦ０平均値（図５のｆ０  ａｖｅｒａｇｅの値）を持つ素片データ２００（図５のＤａｔａＷａｖｅ［０］からＤａｔａＷａｖｅ［Ｎ−１］の何れか）を抽出し、上記フレームにアサインする（ステップＳ８０１）。
【００５４】
次に、ＣＰＵ１０１は、有声音区間のフレーム毎に、Ｆ０平均値（図５のｆ０  ａｖｅｒａｇｅ）の揺らぎを吸収しながら、そのフレームの前後一定フレーム範囲内でステップＳ８０１でアサインされた素片データ２００のうち最も出現頻度が多い素片データ２００を、そのフレームの新素片データに変更する（ステップＳ８０２）。
【００５５】
その後、ＣＰＵ１０１は、ステップＳ８０２の処理を所定回数繰り返したか、又は前回のステップＳ８０２の結果から変化がなくなったか否かを判定する（ステップＳ８０３）。
【００５６】
ステップＳ８０３の判定がＮＯならば、ＣＰＵ１０１は、ステップＳ８０２の処理を繰返し実行する。
【００５７】
ステップＳ８０３の判定がＹＥＳになったら、ＣＰＵ１０１は、有声音区間内のフレームにおいて、アサインされた素片データ２００が同じものが連続する１つ以上の連続するフレーム区間を１つのセグメントとするセグメントデータを、例えば図６のデータフォーマットで図１のＲＡＭ１０３上に生成する（ステップＳ８０４）。その後、ＣＰＵ１０１は、図８のフローチャートで例示される図７のステップＳ７０６のセグメンテーション処理を終了する。
【００５８】
以上のセグメンテーション処理により、例えば入力音声の歌唱を構成する各音符毎にそれぞれセグメントが割り当てられたセグメントデータが生成される。各セグメントにはそれぞれ、外部記憶装置１０４又はＲＡＭ１０３上の合成用音声データベース内の１つの素片データ２００が対応付けられる。
【００５９】
図９は、図７のステップＳ７０７の合成処理の詳細例を示すフローチャートである。ＣＰＵ１０１はまず、図７のステップＳ７０６のセグメンテーション処理で得られた入力音声に対応する各セグメントのうち、最初のセグメントを図６のデータ構成から選択する（ステップＳ９０１）。
【００６０】
次に、ＣＰＵ１０１は、全てのセグメントデータの検索が終了したか否かを判定する（ステップＳ９０２）。
【００６１】
ステップＳ９０２の判定がＮＯならば、ＣＰＵ１０１は、現在のセグメントデータのｆｒａｍｅ＿ｓｔａｒｔ及びｆｒａｍｅ＿ｄｕｒａｔｉｏｎのデータ（図６参照）から、合成音３００（図３参照）として合成範囲（サンプル数）を決定する（ステップＳ９０３）。なお、セグメントの接続部分のオーバーラップなどを考慮して、合成範囲を前後伸長させてもよい。
【００６２】
次に、ＣＰＵ１０１は、現在のセグメントデータのｄｗポインタ（図６参照）から参照される素片データ２００（図５のＤａｔａＷａｖｅ［０］からＤａｔａＷａｖｅ［Ｎ−１］の何れか）において、ｐｉｔｃｈＣｏｎｎｅｃｔＩｎｄｅｘ［］配列（ｐｉｔｃｈＣｏｎｎｅｃｔＩｎｄｅｘ［０］〜ｐｉｔｃｈＣｏｎｎｅｃｔＩｎｄｅｘ［ｐｉｔｃｈＷａｖｅＣｏｕｎｔ−１］）の内容を初期化する。図３で説明したように、ＣＰＵ１０１は、例えばｐｉｔｃｈＣｏｎｎｅｃｔＩｎｄｅｘ［０］は相関順位０に初期化し、ｐｉｔｃｈＣｏｎｎｅｃｔＩｎｄｅｘ［１］〜ｐｉｔｃｈＣｏｎｎｅｃｔＩｎｄｅｘ［ｐｉｔｃｈＷａｖｅＣｏｕｎｔ−１］はそれぞれ相関順位１に初期化する。
【００６３】
次に、ＣＰＵ１０１は、素片データ２００中の基本波データ２０１群から選択される基本波データ２０１のインデックス値が格納されるＲＡＭ１０３上の変数ｗａｖｅＩｎｄｅｘに、最初の基本波データ２０１（＃０）のインデックス値０を格納する（ステップＳ９０５）。これは、図３の合成音＃＝０に対する基本波＃＝０（図４の４０１（＃０））に対応する。
【００６４】
その後、ＣＰＵ１０１は、ステップＳ９０３で決定した現在の合成範囲内について、以下のステップＳ９０８〜Ｓ９１２の一連の処理による基本波データ２０１の全てのアサインが終了したか否かを判定する（ステップＳ９０６）。
【００６５】
ステップＳ９０６の判定がＮＯならば、ＣＰＵ１０１は、ＲＡＭ１０３上のｗａｖｅＩｎｄｅｘ変数を用いて参照される、セグメントデータ内のｄｗポインタから参照される素片データ２００内のｄｗ−＞ｐｉｔｃｈＷａｖｅｓ［ｗａｖｅＩｎｄｅｘ］からｄｗ−＞ｐｉｔｃｈＷａｖｅｓ［ｗａｖｅＩｎｄｅｘ＋１］−１までのサンプル範囲を取得し、更に、ｄｗ−＞ｐｃｍ（図５）を参照し、ＰＣＭ実体上の上記サンプル範囲から基本波データ２０１を取得する（ステップＳ９０８）。この際、接続時の滑らかなピッチ変更を行いたい、ビブラート処理を行いたい等の条件があれば、この基本波データ２０１を取得する際に、ＰＳＯＬＡ法又はリサンプリング法等によってピッチ変更を行ってもよい。
【００６６】
次に、ＣＰＵ１０１は、接続部分のオーバーラップなどの必要があるならば、振幅収縮係数をＲＯＭ１０２から取得し、この係数をステップＳ９０８で取得した基本波データ２０１に乗算してもよい（ステップＳ９０９）。
【００６７】
ＣＰＵ１０１は、ステップＳ９０８及びＳ９０９で得た基本波データ２０１を、ＲＡＭ１０３上の合成音３００用の出力バッファ領域に加算する（ステップＳ９１０）。
【００６８】
続いて、ＣＰＵ１０１は、現在の基本波データ２０１のインデックス（図３の基本波＃に対応）を示すｗａｖｅＩｎｄｅｘ変数を第１配列要素に指定し、このインデックスに対応する現在の相関順位（図３の相関順位に対応）を示すセグメントデータ内のｄｗポインタから参照される素片データ２００内のｄｗ−＞ｐｉｔｃｈＣｏｎｎｅｃｔＩｎｄｅｘ［ｗａｖｅＩｎｄｅｘ］を第２配列要素に指定して、セグメントデータ内のｄｗポインタから参照される素片データ２００内のｄｗ−＞ｐｉｔｃｈＣｏｎｎｅｃｔＴａｂ［ｗａｖｅＩｎｄｅｘ］［ｄｗ−＞ｐｉｔｃｈＣｏｎｎｅｃｔＩｎｄｅｘ［ｗａｖｅＩｎｄｅｘ］］、即ち基本波相関テーブル２０２を参照することにより、次に参照される基本波データ２０１のインデックス（図３の次基本波＃に対応）を取得し、その値を新たにｗａｖｅＩｎｄｅｘ変数に格納する（ステップＳ９１１）。これにより、基本波相関テーブル２０２から次に参照されるべき基本波データ２０１のインデックスが決定される。
【００６９】
最後に、ＣＰＵ１０１は、現在の基本波データ２０１のインデックスに対応する相関順位（図３の相関順位に対応）を示すセグメントデータ内のｄｗポインタから参照される素片データ２００内のｄｗ−＞ｐｉｔｃｈＣｏｎｎｅｃｔＩｎｄｅｘ［ｗａｖｅＩｎｄｅｘ］に＋１した値を、新たにｄｗ−＞ｐｉｔｃｈＣｏｎｎｅｃｔＩｎｄｅｘ［ｗａｖｅＩｎｄｅｘ］に格納する（ステップＳ９１２）。これにより、基本波相関テーブル２０２上で次にその基本波データ２０１のインデックスからその次の基本波データ２０１のインデックスが参照されるときの相関順位が、１つ下げられ、基本波データ２０１の循環的な参照が回避される。
【００７０】
ステップＳ９１２の処理の後、ＣＰＵ１０１は、ステップＳ９０６の処理に戻る。
【００７１】
以上の現在の基本波データ２０１の読出しと、その次の基本波データ２０１の検索の処理が繰り返されることにより、現在の合成範囲内で全ての合成音３００のサンプルが生成されると、ステップＳ９０６の判定がＹＥＳとなる。この結果、ＣＰＵ１０１は、ＲＡＭ１０３上の図６のデータ構成上でｎｅｘｔポインタを辿ることにより次のセグメントデータへ制御を移動させた後（ステップＳ９０７）、ステップＳ９０２の処理に戻り、次のセグメントデータに関して、対応する合成音３００の生成処理を繰返し実行する。
【００７２】
全てのセグメントデータの検索が終了すると、ステップＳ９０２の判定がＹＥＳとなって、ＣＰＵ１０１は、図９のフローチャートで示される図７のステップＳ７０７の処理を終了する。
【００７３】
以上説明した実施形態により、素片接続方式の音声合成において、連続する音声区間に依存することはないが、相関の高い基本波形を合成していくことで、合成音声の音質を担保するとともに、目標継続長に対して素片継続長が短い場合であっても、ループバックを行う必要がないため、繰り返しによる周期感を与えることなく継続長の伸長を行うことが可能となる。
【００７４】
また、本実施形態によれば、歌詞込みの歌唱音声を合成するのではなく、入力の歌唱音声に合ったハミング音声を合成することが可能となり、歌詞を考慮しない合成なので、合成用として保持する素片データ２００のデータ量が少なくなり、また、時間軸での処理であるので、解析・合成にかかる処理も軽量となるという特徴を有する。
【００７５】
以上説明した実施形態は、歌唱された入力音声に基づいてハミング音声の合成音が生成され発声されるが、本発明はこれに限られるものではなく、例えば電子鍵盤楽器の鍵盤の鍵の押鍵や自動演奏により指定された音高に基づいて、ハミング音声の合成音が生成され発声されるようにしてもよい。
【００７６】
また、本発明は、ハミング音声の合成に限られるものではなく、例えば波形読出し方式の電子楽器において、ループ再生を行う代わりに、ピッチ周期単位で分割した楽音波形の基本波データを隣り合う基本波データの相関が高くなるように接続して楽音波形データの時間長以上の時間長の再生を行う技術に、本発明による合成音生成方法を実施してもよい。
【００７７】
以上、開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができる。
【００７８】
その他、本発明は上述した実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。また、上述した実施形態で実行される機能は可能な限り適宜組み合わせて実施しても良い。上述した実施形態には種々の段階が含まれており、開示される複数の構成要件による適宜の組み合せにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、効果が得られるのであれば、この構成要件が削除された構成が発明として抽出され得る。
【００７９】
以上の実施形態に関して、更に以下の付記を開示する。
（付記１）
音素片データを記憶する記憶部と、
前記記憶部に記憶される前記音素片データをピッチ周期毎に分割して得られる複数の基本波データのうちから、１つの基本波データを選択して読み出した後に、当該読み出した基本波データである先の基本波データの次の基本波データとして、前記先の基本波データに類似する基本波データを選択して読み出すようにして、順次読み出された前記基本波データを接続することにより合成音を生成する生成部と、
を有する合成音生成装置。
（付記２）
前記記憶部は更に、前記複数の基本波データの夫々について、当該基本波データと相関の高い他の基本波データの前記記憶部内での記憶位置を示す記憶位置情報を、前記相関の高い順に並べて登録した基本波相関テーブルを記憶し、
前記生成部は、前記次の基本波データを選択して読み出すときに、前記基本波相関テーブル上で前記先の基本波データについて登録されている前記記憶位置情報のうち前記相関が高い記憶位置情報を優先的に選択し、前記選択した記憶位置情報に対応する記憶位置に記憶されている基本波データを前記次の基本波データとして前記記憶部から読み出す、付記１に記載の合成音生成装置。
（付記３）
前記生成部は、前記次の基本波データを選択して読み出すときに、前記基本波相関テーブル上で前記先の基本波データについて登録されている前記記憶位置情報のうち、当該先の基本波データに関していままで選択されておらず、かつ直前の前記先の基本波データ以外の基本波データに対応する前記相関が高い記憶位置情報を選択する、付記２に記載の合成音生成装置。
（付記４）
前記記憶部は、複数の音高をそれぞれ有する複数の前記音素片データを記憶し、
指定された音高に基づいて前記複数の音素片データのうちの１つを指定する音素片データ指定部を更に有し、
前記生成部は、前記記憶部が記憶する前記複数の音素片データのうち前記音素片データ指定部が指定した音素片データを用いて、前記合成音を生成する、付記１乃至３の何れかに記載の合成音生成装置。
（付記５）
前記音素片データ指定部は、
入力音声を取得する音声取得部と、
前記入力音声を分析する時間単位であるフレーム毎に、前記入力音声からピッチ周波数を取得し、前記ピッチ周波数に基づいて目標ピッチを決定する目標ピッチ決定部と、
前記フレーム毎の目標ピッチに基づいて、前記入力音声をそれぞれが同じ前記音素片データを連続して割り当てることが可能な期間であるセグメントにセグメンテーションするセグメンテーション部と、を有し、
前記生成部は、前記セグメンテーション部がセグメンテーションした前記セグメント毎に、該セグメントに対応する前記音素片データを前記記憶部から読み出して、前記合成音を生成する、付記４に記載の合成音生成装置。
（付記６）
音素片データを記憶する記憶ステップと、
前記記憶される前記音素片データをピッチ周期毎に分割して得られる複数の基本波データのうちから、の１つの基本波データを選択して読み出した後に、当該読み出した基本波データである先の基本波データの次の基本波データとして、前記先の基本波データに類似する基本波データを選択して読み出すようにして、順次読み出された前記基本波データを接続することにより合成音を生成する生成ステップと、
を含むことを特徴とする合成音生成方法。
（付記７）
合成音を生成する合成音生成装置のコンピュータに、
音素片データを記憶する記憶機能と、
前記記憶される前記音素片データをピッチ周期毎に分割して得られる複数の基本波データのうちから、１つの基本波データを選択して読み出した後に、当該読み出した基本波データである先の基本波データの次の基本波データとして、前記先の基本波データに類似する基本波データを選択して読み出すようにして、順次読み出された前記基本波データを接続することにより合成音を生成する生成機能と、
を実現させるプログラム。
【符号の説明】
【００８０】
１０１  ＣＰＵ
１０２  ＲＯＭ
１０３  ＲＡＭ
１０４  外部記憶装置
１０５  入力装置
１０６  表示装置
１０７  通信インタフェース
１０８  可搬記録媒体駆動装置
１０８ａ  可搬記録媒体
１０９  システムバス
１１０  音声取得部
１１１  音声出力部
２００  素片データ
２０１  基本波データ
２０２  基本波相関テーブル
３００  合成音
【図１】
2019168620.tif 000003
【図２】
2019168620.tif 000004
【図３】
2019168620.tif 000005
【図４】
2019168620.tif 000006
【図５】
2019168620.tif 000007
【図６】
2019168620.tif 000008
【図７】
2019168620.tif 000009
【図８】
2019168620.tif 000010
【図９】
2019168620.tif 000011