(57)【特許請求の範囲】
【請求項１】
音声波形データを時間軸上の予め定められた位置でセグメンテーションして得られた複数の素片データ夫々において、音響特徴量が安定する前記素片データ内の位置を、前記素片データに対応する中心位置と推定する推定処理と、
前記素片データごとに、前記素片データの前記中心位置に対応する音響特徴量と、前記中心位置以外の位置に対応する音響特徴量とに基づいて、前記素片データのセグメンテーション位置を補正する補正処理と、
を実行する処理部を有する、セグメンテーション装置。
【請求項２】
前記処理部は、前記補正処理において、前記素片データの前記中心位置に対応する音響特徴量と、前記中心位置以外の位置に対応する音響特徴量との差分に基づいて、前記素片データのセグメンテーション位置を補正する処理を実行する、請求項１に記載のセグメンテーション装置。
【請求項３】
前記処理部は、前記推定処理において、前記素片データごとに、前記素片データにおける時間軸上の中央値を、前記素片データに対応する前記中心位置と推定する、請求項１または２に記載のセグメンテーション装置。
【請求項４】
前記処理部は、前記推定処理において、
前記素片データごとに、前記時間軸上おける予め定められたセグメンテーション位置により決定された範囲に基づいた拡張範囲を取得する拡張範囲取得処理と、
前記取得された拡張範囲内の各時間軸上の位置ごとに、前記時間軸上の位置に対応する前記音響特徴量と前記拡張範囲内の他の時間軸上の位置に対応する各音響特徴量との差分の総和または平均値を取得し、前記総和または平均値が最小となる時間軸上の位置を、前記素片データに対応する前記中心位置と推定する処理を実行する、請求項１または２に記載のセグメンテーション装置。
【請求項５】
前記処理部は、前記拡張範囲取得処理として、前記時間軸上における予め定められたセグメンテーション位置により決定された範囲と、前記範囲に対して予め定められた時間あるいは予め定められた割合だけ拡張した範囲とを、前記拡張範囲として取得する処理を実行する、請求項４に記載のセグメンテーション装置。
【請求項６】
前記処理部は、前記素片データごとに、前記素片データの前記中心位置に対応する音響特徴量と前記素片データに隣接する素片データの前記中心位置に対応する音響特徴量との特徴量距離である中心位置間特徴量距離を算出し、前記素片データと前記素片データに隣接する素片データとの間の時刻内の各時刻の音響特徴量と当該素片データの前記中心位置に対応する音響特徴量との特徴量距離が、前記中心位置間特徴量距離に対して所定の割合以下となる位置を、前記素片データのセグメンテーション位置として決定する処理を実行する、請求項１乃至５の何れかに記載のセグメンテーション装置。
【請求項７】
前記処理部はさらに、
前記補正したセグメンテーション位置と補正前の前記セグメンテーション位置との差分を取得する取得処理と、
前記取得された差分が予め定められた閾値より大きい場合は、前記補正したセグメンテーション位置に基づき、前記推定処理において中心位置を再度推定する処理を実行するように制御するとともに、前記補正処理において、前記再度推定された中心位置に対応する音響特徴量と、前記再度推定された中心位置以外の位置に対応する音響特徴量とに基づいて、前記素片データのセグメンテーション位置を補正するように制御する制御処理を実行する、請求項１乃至６の何れかに記載のセグメンテーション装置。
【請求項８】
セグメンテーション装置に用いられるセグメンテーション方法であって、前記セグメンテーション装置が、
音声波形データを時間軸上の予め定められた位置でセグメンテーションして得られた複数の素片データ夫々において、音響特徴量が安定する前記素片データ内の位置を、前記素片データに対応する中心位置と推定し、
前記素片データごとに、前記素片データの前記中心位置に対応する音響特徴量と、前記中心位置以外の位置に対応する音響特徴量とに基づいて、前記素片データのセグメンテーション位置を補正する、セグメンテーション方法。
【請求項９】
セグメンテーション装置として用いられるコンピュータに、
音声波形データを時間軸上の予め定められた位置でセグメンテーションして得られた複数の素片データ夫々において、音響特徴量が安定する前記素片データ内の位置を、前記素片データに対応する中心位置と推定する推定ステップと、
前記素片データごとに、前記素片データの前記中心位置に対応する音響特徴量と、前記中心位置以外の位置に対応する音響特徴量とに基づいて、前記素片データのセグメンテーション位置を補正する補正ステップと、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、素片接続型の音声合成等に用いられる音素片を生成するために、音声のセグメンテーションを行うセグメンテーション装置、方法、およびプログラムに関する。
【背景技術】
【０００２】
素片接続型の音声合成において、より自然な聴感を得られるためには、指定された韻律遷移に忠実であること、かつ、素片同士の接続部が滑らかに連続していることなどが必須である。これらを同時に実現するためには、なるべく連続する区間を採用できるような、元音声情報を大量に搭載する辞書、あるいは、音素の切れ目が正確に定義されている辞書が必要となる。即ち、辞書となる品質の良い音素片データ（以下、「素片データ」と記載する）を生成するためには、連続音声を精度高く分割するセグメンテーションの技術が必要となる。しかし一般に、自動的にセグメンテーションを行う技術は精度が低いため、人間が実際に録音音声を聞いたうえでセグメンテーションを行うなど、高いコストを要求される。
【０００３】
音声のセグメンテーションを行うための第１の従来技術として、次のような技術が知られている（例えば特許文献１に記載の技術）。この技術では、入力音声から無音区間と無声音区間を抽出し、予め与えられている文字列情報を、時間長モデルを用いて無音区間・無声音区間で分けられる単位区間に割り当る。また、予め定められた評価基準を最も満たすマッチングパタンを特定して音声ブロックを設定した後に音節境界を設定してセグメンテーションを行う。
【０００４】
音声のセグメンテーションを行うための第２の従来技術として、次のような技術が知られている（例えば特許文献２に記載の技術）。この技術では、セグメンテーション対象音声と同じ発声内容の合成音声と、この合成音声の音韻継続時間長情報とを音声合成部により生成する。合成音声とセグメンテーション対象音声との特徴パラメータを、特徴パラメータ抽出部で抽出し、マッチング部においてＤＰマッチングを行い、セグメンテーション対象音声に対し継続時間長情報の対応付けを行う。
【０００５】
音声のセグメンテーションを行うための第３の従来技術として、次のような技術が知られている（例えば特許文献３に記載の技術）。この技術では、音声データが表す音声を構成する各音声素片の境界時間の推定値である素片境界によって区分された各区分時間区間をそれぞれ１以上の状態境界で区分した複数の状態時間区間を求め、隣接する２つの区分時間区間からなる処理時間区間ごとに、当該処理時間区間に含まれる隣接した状態時間区間からなる組の集合の中から、当該組をなす隣接した状態時間区間それぞれの音声データの代表値の距離が最大となる組を選択し、選択した当該組をなす隣接した状態時間区間の状態境界または素片境界を、当該処理時間区間での修正された素片境界とする。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平９−２４４６８１号公報
【特許文献２】特開２００２−２８７７８５号公報
【特許文献３】特開２０１１−２４２４９７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
精度の高いセグメンテーションを行って品質の良い素片データを生成するためには、音素片内で音響特徴量（例えば、周波数成分情報）が安定していることが重要であると考えられる。しかし、上述の従来技術では、音響特徴量の安定性は考慮されておらず、必ずしも品質の良い素片データを得ることができないという課題があった。
【０００８】
そこで、本発明は、安定した音響特徴量を有する素片データを得ることのできるセグメンテーションを可能とすることを目的とする。
【課題を解決するための手段】
【０００９】
態様の一例では、時間軸上で推移する音声波形データを、前記時間軸上の予め定められた位置でセグメンテーションして得られた複数の素片データ夫々において、音響特徴量が安定する前記素片データ内の位置を、前記素片データに対応する中心位置と推定する推定処理と、前記素片データごとに、前記素片データの前記中心位置に対応する音響特徴量と、前記中心位置以外の位置に対応する音響特徴量とに基づいて、前記素片データのセグメンテーション位置を補正する補正処理と、を実行する処理部を有する、セグメンテーション装置である。
【発明の効果】
【００１０】
本発明によれば、安定した音響特徴量を有する素片データを得ることのできるセグメンテーションが可能となる。
【図面の簡単な説明】
【００１１】
【図１】セグメンテーション装置の実施形態のハードウェア構成例を示す図である。
【図２】素片データの構成例を示す図である。
【図３】特徴量データの構成例を示す図である。
【図４】セグメンテーション補正処理の例を示すメインフローチャートである。
【図５】セグメンテーション補正処理の説明図である。
【図６】中心位置の決定処理の第１の実施形態を示すフローチャートである。
【図７】境界の決定処理の例を示すフローチャート（その１）である。
【図８】境界の決定処理の例を示すフローチャート（その２）である。
【図９】境界の決定処理の例を示すフローチャート（その３）である。
【図１０】中心位置の決定処理の第２の実施形態を示すフローチャート（その１）である。
【図１１】中心位置の決定処理の第２の実施形態を示すフローチャート（その２）である。
【図１２】中心位置の決定処理の第２の実施形態を示すフローチャート（その３）である。
【図１３】中心位置の決定処理の第２の実施形態の説明図である。
【図１４】セグメンテーション補正された波形例を示す図である。
【発明を実施するための形態】
【００１２】
以下、本発明を実施するための形態について図面を参照しながら詳細に説明する。図１は、セグメンテーション装置の実施形態のハードウェア構成例を示す図である。
【００１３】
図１に示すセグメンテーション装置１００は、ＣＰＵ（セントラルプロセッシングユニット：中央演算処理装置）１０１、ＲＯＭ（リードオンリーメモリ）１０２、ＲＡＭ（ランダムアクセスメモリ）１０３、外部記憶装置１０４、入力装置１０５、表示装置１０６、通信インタフェース１０７、および可搬記録媒体１０８ａが挿入される可搬記録媒体駆動装置１０８を有し、これらがシステムバス１０９によって相互に接続された構成を有する。同図に示される構成は上記制御装置１００を実現できるコンピュータの一例であり、そのようなコンピュータはこの構成に限定されるものではない。
【００１４】
ＣＰＵ１０１は、当該セグメンテーション装置１００全体の制御を行う。ＲＯＭ１０２は、セグメンテーション補正処理プログラムおよびそのプログラムの実行時に必要な定数等を記憶する読出し専用メモリである。ＲＡＭ１０３は、上記プログラムまたはデータを一時的に格納する読み書き可能メモリである。ＣＵＰ１０１は、上記プログラムをＲＯＭ１０２からＲＡＭ１０３に読み出して実行することにより、全体の制御を行う。
【００１５】
外部記憶装置１０４は、例えばハードディスク記憶装置である。主に後述する素片データや特徴量データの保存に用いられる。
【００１６】
入力装置１０５は、ユーザによるキーボードやマウス等による入力操作を検出し、その検出結果をＣＰＵ１０１に通知する。
【００１７】
表示装置１０６は、ＣＰＵ１０１の制御によって送られてくるセグメンテーションの結果データなどを表示するディスプレイ装置である。
【００１８】
通信インタフェース１０７は、例えばＬＡＮ（ローカルエリアネットワーク）またはＷＡＮ（ワイドエリアネットワーク）の通信回線を接続するための装置である。
【００１９】
可搬記録媒体駆動装置１０８は、ＵＳＢメモリ、ＳＤカードメモリ、コンパクトフラッシュメモリや、ＣＤ−ＲＯＭ、ＤＶＤ、光ディスク等の可搬記録媒体１０８ａを収容するもので、外部記憶装置１０４の補助の役割を有する。
【００２０】
本実施形態のセグメンテーション装置１００は、図４および図６〜図１２のフローチャート等で実現されるセグメンテーション補正処理プログラムをＣＰＵ１０１が実行する。このプログラムは、例えば外部記憶装置１０４や可搬記録媒体１０８ａに記録して配布してもよく、或いは通信インタフェース１０７によりネットワークから取得できるようにしてもよい。
【００２１】
図１のＣＰＵ１０１がセグメンテーション補正処理プログラムを実行することにより、音声認識器などで自動分割して得られる初期的にセグメンテーションされた素片データおよび特徴量データに対してセグメンテーションの補正処理が実施され、この結果、より精度高くセグメンテーションされた素片データを生成することが可能となる。
【００２２】
図２は、図１の外部記憶装置１０４に記憶された後ＲＡＭ１０３にロードされる素片データの構成例を示す図である。学習用の音声波形データに対して例えば音声認識処理が実行されることにより、音素毎に初期的に時間軸上の定められた位置夫々でセグメンテーションされたｕｎｉｔ＿ｃｏｕｎｔ個の素片データｕｎｉｔ［０］〜ｕｎｉｔ［ｕｎｉｔ＿ｃｏｕｎｔ］が得られる。なお、ｕｎｉｔ＿ｃｏｕｎｔは、ＲＡＭ１０３に記憶される変数値である。各素片データは構造体データであり、ｕｎｉｔ＿ｉｄ、ｐｈｏｎｅ＿ｉｄ、ｓｔａｒｔ、ｄｕｒａｔｉｏｎ、ｃｅｎｔｅｒ、ｌｅｆｔ＿ｂｏｒｄｅｒ、ｌｅｆｔ＿ｄｉｓｔ、ｒｉｇｈｔ＿ｂｏｒｄｅｒ、ｒｉｇｈｔ＿ｄｉｓｔ、ｐｒｅｖ、およびｎｅｘｔの各メンバ変数を有する。ｕｎｉｔ＿ｉｄは、素片データを識別するための素片ＩＤ（識別子）である。ｐｈｏｎｅ＿ｉｄは、その素片データに対する音素認識の結果得られる音素を識別するための音素ＩＤである。ｓｔａｒｔは、初期的なセグメンテーションの結果得られるその素片データの開始時刻である。ｄｕｒａｔｉｏｎは、初期的なセグメンテーションの結果得られるその素片データの継続長（サンプルまたは時間）である。ｃｅｎｔｅｒは、中心位置となる位置の特徴量データへのポインタである。ｌｅｆｔ＿ｂｏｒｄｅｒは、暫定格納用素片開始時刻である。ｌｅｆｔ＿ｄｉｓｔは、前の素片中心位置との特徴量距離である。ｒｉｇｈｔ＿ｂｏｒｄｅｒは、暫定格納用素片終了時刻である。ｒｉｇｈｔ＿ｄｉｓｔは、後ろの素片中心位置との特徴量距離である。ｐｒｅｖは、前の素片データへのポインタであり、ＮＵＬＬ値ならばこのポインタが設定されている素片データは先頭データである。ｎｅｘｔは、次の素片データへのポインタであり、ＮＵＬＬ値ならばこのポインタが設定されている素片データは末端データである。
【００２３】
図３は、図１の外部記憶装置１０４に記憶された後ＲＡＭ１０３にロードされる特徴量データの構成例を示す図である。この特徴量データは、図２のデータ構成例を有する素片データが生成されたのと同じ学習音声データに対して、特徴量抽出処理が実行されることにより、Ｎ個の特徴量データｆｅａｔｖａｌｕｅ［０］〜ｆｅａｔｖａｌｕｅ［Ｎ−１］が得られる。各特徴量データは構造体データであり、ｔｉｍｅ、ｄｉｍｅｎｓｉｏｎ、ｖａｌｕｅ［０］〜ｖａｌｕｅ［ｄｉｍｅｎｓｉｏｎ−１］、ｐｒｅｖ、およびｎｅｘｔの各メンバ変数を有する。ｔｉｍｅは、特徴量データの分析時刻である。ｄｉｍｅｎｓｉｏｎは、特徴量データの次元数である。ｖａｌｕｅ［０］〜ｖａｌｕｅ［ｄｉｍｅｎｓｉｏｎ−１］はそれぞれ、０次元目からｄｉｍｅｎｓｉｏｎ−１次元目までの特徴量データである。ｐｒｅｖは、前の特徴量データへのポインタであり、ＮＵＬＬ値ならばこのポインタが設定されている特徴量データは先頭データである。ｎｅｘｔは、次の特徴量データへのポインタであり、ＮＵＬＬ値ならばこのポインタが設定されている特徴量データは末端データである。
【００２４】
本実施形態における特徴量は、任意の適切な音響特徴量であってよいが、例えばメル周波数ケプストラム係数（ＭＦＣＣ）である。この係数は、音声の音素に関係する声道特性を良く表す音響特徴量である。
【００２５】
図４は、図１のハードウェア構成と、図２および図３のデータ構成を有するセグメンテーション装置１００が実行するセグメンテーション補正処理の例を示すメインフローチャートである。この処理は、図１のＣＰＵ１０１が、例えばＲＯＭ１０２（外部記憶装置１０４でもよい）からＲＡＭ１０３にロードされたセグメンテーション補正処理プログラムを実行する処理である。また、図５は、上記セグメンテーション補正処理の説明図である。
【００２６】
まず、ＣＰＵ１０１は、外部記憶装置１０４からＲＡＭ１０３に、図２に例示されるデータ構成を有する素片データｕｎｉｔ［０］〜ｕｎｉｔ［ｕｎｉｔ＿ｃｏｕｎｔ］と、図３に例示されるデータ構成を有する特徴量データｆｅａｔｖａｌｕｅ［０］〜ｆｅａｔｖａｌｕｅ［Ｎ−１］を読み込む（ステップＳ４０１）。
【００２７】
次に、ＣＰＵ１０１は、中心位置の決定処理を実行する（ステップＳ４０２）。この処理は、ステップＳ４０１でＲＡＭ１０３に読み込んだ素片データごとに、その素片データにおいて特徴量データ（音響特徴量）が安定する箇所をその素片データに対応する中心位置として推定する処理である。具体的には、初期的にセグメンテーションされた結果図２のデータ構成としてＲＡＭ１０３に読み込まれている各素片データの開始時刻（図２のｓｔａｒｔ）と継続長（図２のｄｕｒａｔｉｏｎ）とに基づいて、各素片データの中心位置の特徴量データが推定される。図５に例示されるｕｎｉｔ［０］−＞ｃｅｎｔｅｒ、ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｃｅｎｔｅｒ、ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｎｅｘｔ−＞ｃｅｎｔｅｒが、各素片データの中心位置の特徴量データの例であり、ｕｎｉｔ［０］−＞ｃｅｎｔｅｒ−＞ｔｉｍｅ、ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｃｅｎｔｅｒ−＞ｔｉｍｅ、ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｎｅｘｔ−＞ｃｅｎｔｅｒ−＞ｔｉｍｅが、各中心位置の特徴量データの分析時刻（分析フレームの中心時刻）である。中心位置の決定処理の詳細は、図６のフローチャートによる中心位置の決定処理の第１の実施形態、または図１０から図１２のフローチャートによる中心位置の決定処理の第２の実施形態として後述する。
【００２８】
次に、ＣＰＵ１０１は、境界の決定処理を実行する（ステップＳ４０３）。この処理は、ステップＳ４０１でＲＡＭ１０３に読み込んだ素片データごとに、ステップＳ４０１でＲＡＭ１０３に読み込んだ各時刻の特徴量データ（音響特徴量）とステップＳ４０２で推定したその素片データの中心位置に対応する特徴量データとの各特徴量距離の推移に基づいて、その素片データのセグメント境界を補正する処理である。境界の決定処理においては、次のような処理が実行される。
【００２９】
まず、ステップＳ４０２で推定された隣り合う各素片データの中心位置の特徴量データ間で、それぞれ図５に例示される特徴量距離５０１、５０２、５０３が算出される。特徴量距離５０２は、最初の素片データの中心位置の特徴量データｕｎｉｔ［０］−＞ｃｅｎｔｅｒと、次の素片データの中心位置の特徴量データｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｃｅｎｔｅｒとの間の中心位置間特徴量距離の値を示している。そして、この算出結果は、最初の素片データの中心位置の特徴量データのメンバ変数ｕｎｉｔ［０］−＞ｒｉｇｈｔ＿ｄｉｓｔと、次の素片データの中心位置の特徴量データのメンバ変数ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｌｅｆｔ＿ｄｉｓｔに同じ値として格納される（ｒｉｇｈｔ＿ｄｉｓｔとｌｅｆｔ＿ｄｉｓｔは図２参照）。特徴量距離５０３は、次の素片データの中心位置の特徴量データｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｃｅｎｔｅｒと、さらに次の素片データの中心位置の特徴量データｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｎｅｘｔ−＞ｃｅｎｔｅｒとの間の中心位置間特徴量距離の値を示している。そして、この算出結果は、次の素片データの中心位置の特徴量データのメンバ変数ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｒｉｇｈｔ＿ｄｉｓｔと、さらに次の素片データの中心位置の特徴量データのメンバ変数ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｎｅｘｔ−＞ｌｅｆｔ＿ｄｉｓｔに同じ値として格納される。なお、図５に示される横軸の時間経過において、開始時刻ｔ０は例えば無音であり、その場合には、特徴量距離５０１は、特には図示しない無音の特徴量データと最初の素片データの中心位置の特徴量データｕｎｉｔ［０］−＞ｃｅｎｔｅｒとの間の中心位置間特徴量距離の値となる。そして、この算出結果は、最初の素片データの中心位置の特徴量データのメンバ変数ｕｎｉｔ［０］−＞ｌｅｆｔ＿ｄｉｓｔに格納される。
【００３０】
ここで、特徴量距離は例えば、各特徴量データの次元ごとのパラメータの差の２乗和の平方根として算出される。
【００３１】
次に、素片データごとに、ステップＳ４０１でＲＡＭ１０３に読み込んだ各時刻の特徴量データとステップＳ４０２で推定したその素片データの中心位置に対応する特徴量データとの各特徴量距離が計算される。図５において、例えば５０４は、最初の素片データの中心位置の特徴量データｕｎｉｔ［０］−＞ｃｅｎｔｅｒと、図３の各時刻の特徴量データｆｅａｔｖａｌｕｅ［０］〜ｆｅａｔｖａｌｕｅ［Ｎ−１］のうち横軸の各時刻に対応する特徴量データとの間の各特徴量距離の値の推移を示すグラフである。また、５０５は、次の素片データの中心位置の特徴量データｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｃｅｎｔｅｒと、各時刻の特徴量データｆｅａｔｖａｌｕｅ［０］〜ｆｅａｔｖａｌｕｅ［Ｎ−１］のうち横軸の各時刻に対応する特徴量データとの間の各特徴量距離の値の推移を示すグラフである。さらに、５０６は、さらに次の素片データの中心位置の特徴量データｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｎｅｘｔ−＞ｃｅｎｔｅｒと、各時刻の特徴量データｆｅａｔｖａｌｕｅ［０］〜ｆｅａｔｖａｌｕｅ［Ｎ−１］のうち横軸の各時刻に対応する特徴量データとの間の各特徴量距離の値の推移を示すグラフである。例えば特徴量距離の推移５０４では、最初の素片データの中心位置の特徴量データの時刻ｕｎｉｔ［０］−＞ｃｅｎｔｅｒ−＞ｔｉｍｅ（図３参照）において、特徴量データｆｅａｔｖａｌｕｅ［０］〜ｆｅａｔｖａｌｕｅ［Ｎ−１］のうちこれと同じ時刻を有する特徴量データは同じデータとなるため、特徴量距離の推移５０４の値は０となる。そして、開始時刻ｔ０から時刻ｕｎｉｔ［０］−＞ｃｅｎｔｅｒ−＞ｔｉｍｅまでの期間では、特徴量距離の推移５０４は例外はあるが、ほぼ単調減少の特性を有する。一方、最初の素片データの中心位置の特徴量データの時刻ｕｎｉｔ［０］−＞ｃｅｎｔｅｒ−＞ｔｉｍｅから次の素片データの中心位置の特徴量データの時刻ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｃｅｎｔｅｒ−＞ｔｉｍｅまでの期間では、特徴量のグラフ５０４はやはり例外はあるがほぼ単調増加の特性を有する。特徴量距離の推移５０５と次の素片データの中心位置の特徴量データｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｃｅｎｔｅｒとの関係、および特徴量距離の推移５０６とさらに次の素片データの中心位置の特徴量データｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｎｅｘｔ−＞ｃｅｎｔｅｒとの関係も、上記特徴量距離の推移５０４と最初の素片データの中心位置の特徴量データｕｎｉｔ［０］−＞ｃｅｎｔｅｒとの関係と同様である。
【００３２】
そこで、本実施形態では、例えば最初の素片データの中心位置の特徴量データｕｎｉｔ［０］−＞ｃｅｎｔｅｒに対して計算される特徴量距離の推移５０４において、その直前の素片データの中心位置の時刻（最初はｔ０）から最初の素片データの中心位置の特徴量データの時刻ｕｎｉｔ［０］−＞ｃｅｎｔｅｒ−＞ｔｉｍｅまでの期間の特徴量距離の推移５０４の値が、時間経過に沿って隣接する中心位置間特徴量距離５０１に対して所定の割合の閾値５０１′を最初に下回ったときの時刻ｔ１が、最初の素片データの左側のセグメント境界候補（開始時刻候補）として算出される。そして、この算出結果が、最初の素片データの中心位置の特徴量データのメンバ変数ｕｎｉｔ［０］−＞ｌｅｆｔ＿ｂｏｒｄｅｒ（ｌｅｆｔ＿ｂｏｒｄｅｒは図２参照）に格納される。一方、特徴量距離の推移５０４において、最初の素片データの中心位置の特徴量データの時刻ｕｎｉｔ［０］−＞ｃｅｎｔｅｒ−＞ｔｉｍｅからその直後（最初の次）の素片データの中心位置の時刻ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｃｅｎｔｅｒ−＞ｔｉｍｅまでの期間の特徴量距離の推移５０４の値が、時間経過に沿って隣接する中心位置間特徴量距離５０２に対して所定の割合の閾値５０２′を最初に上回ったときの時刻ｔ３が、最初の素片データの右側のセグメント境界候補（終了時刻候補）として算出される。そして、この算出結果が、最初の素片データの中心位置の特徴量データのメンバ変数ｕｎｉｔ［０］−＞ｒｉｇｈｔ＿ｂｏｒｄｅｒ（ｒｉｇｈｔ＿ｂｏｒｄｅｒは図２参照）に格納される。ここで、上記所定の割合は例えば０．２（２０％）であり、５０１′の値＝中心位置間特徴量距離５０１×０．２、５０２′の値＝中心位置間特徴量距離５０２×０．２などとして算出される。なお、上記左側期間ｔ０からｕｎｉｔ［０］−＞ｃｅｎｔｅｒ−＞ｔｉｍｅまでと、右側期間ｕｎｉｔ［０］−＞ｃｅｎｔｅｒ−＞ｔｉｍｅからｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｃｅｎｔｅｒ−＞ｔｉｍｅ以外の期間については、特徴量距離の推移５０４の値を判定する必要はない。
【００３３】
同様に、最初の次の素片データの中心位置の特徴量データｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｃｅｎｔｅｒに対して計算される特徴量距離の推移５０５において、その直前（最初）の素片データの中心位置の時刻ｕｎｉｔ［０］−＞ｃｅｎｔｅｒ−＞ｔｉｍｅから現在（最初の次）の素片データの中心位置の特徴量データの時刻ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｃｅｎｔｅｒ−＞ｔｉｍｅまでの期間の特徴量距離の推移５０５の値が、時間経過に沿って隣接する中心位置間特徴量距離５０２に対して所定の割合の閾値５０２′を最初に下回ったときの時刻ｔ２が、現在の素片データの左側のセグメント境界候補（開始時刻候補）として算出される。そして、この算出結果が、現在の素片データの中心位置の特徴量データのメンバ変数ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｌｅｆｔ＿ｂｏｒｄｅｒに格納される。ただし、例外として、この時刻ｔ２の後に、特徴量距離の推移５０５の値が閾値５０２′を上回った場合には、特徴量距離の推移５０５においてローカルなピークがあると判定し、いったんメンバ変数ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｌｅｆｔ＿ｂｏｒｄｅｒの値をクリアする。そして、その後に再度、特徴量距離の推移５０５の値が閾値５０２′を再び下回ったときの時刻ｔ４が、現在の素片データの新たな左側のセグメント境界候補（開始時刻候補）として算出され、この算出結果がメンバ変数ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｌｅｆｔ＿ｂｏｒｄｅｒに格納される。一方、特徴量距離の推移５０５において、現在の素片データの中心位置の特徴量データの時刻ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｃｅｎｔｅｒ−＞ｔｉｍｅからその直後（最初の次の次）の素片データの中心位置の時刻ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｎｅｘｔ−＞ｔｉｍｅまでの期間の特徴量距離が、時間経過に沿って隣接する中心位置間特徴量距離５０３に対して所定の割合の閾値５０３′を最初に上回ったときの時刻ｔ５が、現在の素片データの右側のセグメント境界候補（終了時刻候補）として算出される。そして、この算出結果が、現在の素片データの中心位置の特徴量データのメンバ変数ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｒｉｇｈｔ＿ｂｏｒｄｅｒに格納される。ただし、この場合も例外として、この時刻ｔ５の後に、特徴量距離の推移５０５の値が閾値５０３′を下回った場合には、特徴量距離の推移５０５においてローカルなピークがあると判定し、いったんメンバ変数ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｒｉｇｈｔ＿ｂｏｒｄｅｒの値をクリアする。そして、その後に再度、特徴量距離の推移５０５の値が閾値５０３′を再び上回ったときの時刻ｔ７が、現在の素片データの新たな右側のセグメント境界候補（開始時刻候補）として算出され、この算出結果がメンバ変数ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｒｉｇｈｔ＿ｂｏｒｄｅｒに格納される。なお、上記左側期間ｕｎｉｔ［０］−＞ｃｅｎｔｅｒ−＞ｔｉｍｅからｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｃｅｎｔｅｒ−＞ｔｉｍｅまでと、右側期間ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｃｅｎｔｅｒ−＞ｔｉｍｅからｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｎｅｘｔ−＞ｃｅｎｔｅｒ−＞ｔｉｍｅ以外の期間については、特徴量距離の推移５０４の値を判定する必要はない。
【００３４】
さらに同様に、最初の次の次の素片データの中心位置の特徴量データｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｎｅｘｔ−＞ｃｅｎｔｅｒに対して計算される特徴量距離の推移５０６において、その直前（最初の次）の素片データの中心位置の時刻ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｃｅｎｔｅｒ−＞ｔｉｍｅから現在（最初の次の次）の素片データの中心位置の特徴量データの時刻ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｎｅｘｔ−＞ｃｅｎｔｅｒ−＞ｔｉｍｅまでの期間の特徴量距離の推移５０６の値が、時間経過に沿って隣接する中心位置間特徴量距離５０３に対して所定の割合の閾値５０３′を最初に下回ったときの時刻ｔ６が、現在の素片データの左側のセグメント境界候補（開始時刻候補）として算出される。そして、この算出結果が、現在の素片データの中心位置の特徴量データのメンバ変数ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｎｅｘｔ−＞ｌｅｆｔ＿ｂｏｒｄｅｒに格納される。
【００３５】
以上のようにして、各素片データについて、開始時刻候補と終了時刻候補が算出された後、まず最初の素片データｕｎｉｔ［０］に関しては、メンバ変数ｕｎｉｔ［０］−＞ｌｅｆｔ＿ｂｏｒｄｅｒに格納されている開始時刻候補ｔ１がそのまま正式な開始時刻として算出され、メンバ変数ｕｎｉｔ［０］−＞ｓｔａｒｔ（ｓｔａｒｔは図２参照）の値が上記ｔ１に書き換えられる。次に、最初の素片データｕｎｉｔ［０］と次の素片データｕｎｉｔ［０］−＞ｎｅｘｔの境界に関しては、メンバ変数ｕｎｉｔ［０］−＞ｒｉｇｈｔ＿ｂｏｒｄｅｒに格納されている終了時刻候補ｔ３と、メンバ変数ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｌｅｆｔ＿ｂｏｒｄｅｒに格納されている開始時刻候補ｔ４の平均値「（ｔ３＋ｔ４）／２」が正式な境界時刻として算出される。そして、メンバ変数ｕｎｉｔ［０］−＞ｄｕｒａｔｉｏｎ（ｄｕｒａｔｉｏｎは図２参照）の値が「（ｔ３＋ｔ４）／２−ｔ１」に書き換えられる。また、メンバ変数ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｓｔａｒｔの値が「（ｔ３＋ｔ４）／２」に書き換えられる。さらに、最初の次の素片データｕｎｉｔ［０］−＞ｎｅｘｔとさらにその次の素片データｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｎｅｘｔの境界に関しては、メンバ変数ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｒｉｇｈｔ＿ｂｏｒｄｅｒに格納されている終了時刻候補ｔ７と、メンバ変数ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｎｅｘｔ−＞ｌｅｆｔ＿ｂｏｒｄｅｒに格納されている開始時刻候補ｔ６の平均値「（ｔ７＋ｔ６）／２」が正式な境界時刻として算出される。そして、メンバ変数ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｄｕｒａｔｉｏｎの値が「（ｔ７＋ｔ６）／２−（ｔ３＋ｔ４）／２」に書き換えられる。また、メンバ変数ｕｎｉｔ［０］−＞ｎｅｘｔ−＞ｎｅｘｔ−＞ｓｔａｒｔの値が「（ｔ７＋ｔ６）／２」に書き換えられる。
【００３６】
上述の動作が実行される図４のステップＳ４０３の境界の決定処理により、各素片データ間のセグメント境界が補正されるが、セグメント境界が変動することにより各素片データの中心位置も変動することになる。そこでまず、ＣＰＵ１０１は、ステップＳ４０３の境界の決定処理において、セグメント境界を補正した後に、素片データごとに補正前のセグメント境界と補正後のセグメント境界との誤差（差の２乗和）を算出する。素片データ全体でのこの誤差の総和をｄｉｆｆとする。
【００３７】
上述した図４のステップＳ４０３の境界の決定処理の後、ＣＰＵ１０１はまず、所定の繰返し回数が超過したか否かを判定する（ステップＳ４０４）。
【００３８】
ステップＳ４０４の判定がＮＯならば、ＣＰＵ１０１は、誤差の総和ｄｉｆｆの値が、所定の値以下であるか否かを判定する（ステップＳ４０５）。
【００３９】
ステップＳ４０５の判定がＮＯならば、ＣＰＵ１０１は、ステップＳ４０２の中心位置の決定処理に戻ることにより、補正されたセグメント境界に基づいて素片データごとの中心位置を再度推定する処理を実行する。そして、ＣＰＵ１０１は、ステップＳ４０３の境界の決定処理を再度実行することにより、素片データごとのセグメント境界をさらに補正する。
【００４０】
以上のステップＳ４０２からＳ４０５の一連の処理が繰り返される結果、誤差の総和ｄｉｆｆの値が所定の値以下となることによりステップＳ４０５の判定がＹＥＳになると、ＣＰＵ１０１は、図１のメインフローのセグメンテーション補正処理を終了する。
【００４１】
なお、ステップＳ４０５の判定がＹＥＳになる前に、上記繰返し処理が所定回数を超過することによりステップＳ４０４の判定がＹＥＳになった場合も、ＣＰＵ１０１は、図１のメインフローのセグメンテーション補正処理を終了する。
【００４２】
図４のステップＳ４０３の境界の決定処理の詳細は、図７から図９のフローチャートによる処理として後述する。
【００４３】
以上説明したように、本実施形態においては、例えば図５の下部に示される各音素「ａ」「ｒ」「ａ」に対応する素片データごとに、当該素片データの中心位置の特徴量データとその周囲の各時刻の特徴量データとの特徴量距離が、中心位置間特徴量距離に対する所定の割合の閾値よりも小さくなる範囲を、当該素片データの中心位置の特徴量データに対して安定した特徴量データを有する範囲即ちセグメントとして抽出することができる。このように本実施形態では、安定した音響特徴量を有する素片データを得ることのできるセグメンテーションが可能となる。
【００４４】
図６は、図４のステップＳ４０２の中心位置の決定処理の第１の実施形態を示すフローチャートである。
【００４５】
まず、ＣＰＵ１０１は、ステップＳ６０１でＲＡＭ１０３上の変数ｕｎｉｔに、図４のステップＳ４０１でＲＡＭ１０３に読み込んだ素片データｕｎｉｔ［０］〜ｕｎｉｔ［ｕｎｉｔ＿ｃｏｕｎｔ］の先頭の素片データへのポインタをセットし、その後、ステップＳ６０９で変数ｕｎｉｔが指す素片データ構造体内の次素片データポインタｕｎｉｔ−＞ｎｅｘｔ（ｎｅｘｔは図２参照）を順次たどりながら、ステップＳ６０２で全ての素片データに対する検索が終了したと判定するまで、素片データごとに、ステップＳ６０３からＳ６０８の一連の処理を繰り返し実行する。
【００４６】
上述の繰返し処理において、ＣＰＵ１０１はまず、変数ｕｎｉｔが指す素片データ構造体内のメンバ変数ｕｎｉｔ−＞ｓｔａｒｔに格納されている開始時刻に、メンバ変数ｕｎｉｔ−＞ｄｕｒａｔｉｏｎに格納されている継続長を２で除算した値を加算して得られる時刻を、ＲＡＭ１０３上の変数ｔｉｍｅにセットする（ステップＳ６０３）。この変数ｔｉｍｅの値は、変数ｕｎｉｔに対応する素片データが存在する期間のちょうど中央の時刻に対応することになる。
【００４７】
次に、ＣＰＵ１０１は、ステップＳ６０４でＲＡＭ１０３上の変数ｆｅａｔに、図４のステップＳ４０１でＲＡＭ１０３に読み込んだ特徴量データｆｅａｔｖａｌｕｅ［０］〜ｆｅａｔｖａｌｕｅ［Ｎ−１］の先頭の特徴量データへのポインタをセットし、その後、ステップＳ６０７で変数ｆｅａｔが指す特徴量データ構造体内の次特徴量データポインタｆｅａｔ−＞ｎｅｘｔ（ｎｅｘｔは図２参照）を順次たどりながら、ステップＳ６０５で全ての特徴量データに対する検索が終了したと判定するまで、特徴量データごとに、ステップＳ６０６とＳ６０８の処理を繰り返し実行する。
【００４８】
上述の繰返し処理において、ＣＰＵ１０１は、変数ｆｅａｔが指す特徴量データ構造体内のメンバ変数ｆｅａｔ−＞ｔｉｍｅの特徴量時刻値が、ステップＳ６０３でＲＡＭ１０３上の変数ｔｉｍｅにセットされた変数ｕｎｉｔの値に対応する現在の素片データの時刻中央値以上であるか否か、即ち、上記特徴量データが上記時刻中央値付近のものであるか否かを判定する（ステップＳ６０６）。
【００４９】
ステップＳ６０６の判定がＮＯであるならば、ＣＰＵ１０１は、ステップＳ６０７の処理に移行して変数ｆｅａｔの値を次の特徴量データへのポインタｆｅａｔ−＞ｎｅｘｔの値に変更した上でステップＳ６０５からステップＳ６０６へ進み、次の特徴量データの特徴量時刻値と現在の素片データの時刻中央値との比較処理を実行する。なお、このポインタ値がＮＵＬＬ値のときには、ステップＳ６０５の判定がＹＥＳとなって、末端までの特徴量データに対する処理が終了する。このときＣＰＵ１０１は、ステップＳ６０９に移行する。
【００５０】
ステップＳ６０６の判定がＹＥＳになると、ＣＰＵ１０１は、変数ｕｎｉｔが示すメンバ変数ｕｎｉｔ−＞ｃｅｎｔｅｒ（ｃｅｎｔｅｒは図２参照）に、変数ｆｅａｔにセットされている特徴量データ構造体へのポインタをセットする（ステップＳ６０８）。これにより、現在の変数ｕｎｉｔに対応する素片データにおいて、その中心位置の特徴量データがメンバ変数ｆｅａｔ−＞ｃｅｎｔｅｒによって特定される（確定する）ことになる。その後、ＣＰＵ１０１は、ステップＳ６０９の処理に移行する。
【００５１】
ステップＳ６０９において、ＣＰＵ１０１は、変数ｕｎｉｔの値を次の素片データへのポインタｕｎｉｔ−＞ｎｅｘｔの値に変更して、次の素片データに対する中心位置の決定処理を実行する。なお、このポインタ値がＮＵＬＬ値のときには、ステップＳ６０２の判定がＹＥＳとなって、末端までの素片データに対する処理が終了し、ＣＰＵ１０１は、図６のフローチャートで示される中心位置の決定処理を終了する。
【００５２】
以上のようにして、中心位置の決定処理の第１の実施形態では、素片データに対してＲＡＭ１０３に得られている初期的なセグメンテーションによる境界の中央値が中心位置と推定されて、その中心位置に対応する特徴量データが算出され、各素片データのメンバ変数ｃｅｎｔｅｒにセットされる。
【００５３】
図７から図９は、図４のステップＳ４０３の境界の決定処理の例を示すフローチャートである。
【００５４】
まず、ＣＰＵ１０１は、ステップＳ７０１でＲＡＭ１０３上の変数ｕｎｉｔに、図４のステップＳ４０１でＲＡＭ１０３に読み込んだ素片データｕｎｉｔ［０］〜ｕｎｉｔ［ｕｎｉｔ＿ｃｏｕｎｔ］の先頭の素片データへのポインタをセットし、その後、ステップＳ７０５で変数ｕｎｉｔが指す素片データ構造体内の次素片データポインタｕｎｉｔ−＞ｎｅｘｔ（ｎｅｘｔは図２参照）を順次たどりながら、ステップＳ７０２で全ての素片データに対する検索が終了したと判定するまで、素片データごとに、ステップＳ７０３とＳ７０４の処理を繰り返し実行する。
【００５５】
上述の繰返し処理において、ＣＰＵ１０１はまず、現在の素片データの中心位置の特徴量データｕｎｉｔ−＞ｃｅｎｔｅｒと、直前の素片データの中心位置の特徴量データｕｎｉｔ−＞ｐｒｅｖ−＞ｃｅｎｔｅｒとの特徴量距離を計算し、その計算結果を現在の素片データのメンバ変数ｕｎｉｔ−＞ｌｅｆｔ＿ｄｉｓｔ（ｐｒｅｖおよびｌｅｆｔ＿ｄｉｓｔは図２参照）に格納する。同様に、ＣＰＵ１０１はまず、現在の素片データの中心位置の特徴量データｕｎｉｔ−＞ｃｅｎｔｅｒと、直後の素片データの中心位置の特徴量データｕｎｉｔ−＞ｎｅｘｔ−＞ｃｅｎｔｅｒとの特徴量距離を計算し、その計算結果を現在の素片データのメンバ変数ｕｎｉｔ−＞ｒｉｇｈｔ＿ｄｉｓｔ（ｒｉｇｈｔ＿ｄｉｓｔは図２参照）に格納する（以上、ステップＳ７０３）。
【００５６】
次に、ＣＰＵ１０１は、現在の素片データにおける左側のセグメント境界候補（開始時刻候補）ｕｎｉｔ−＞ｌｅｆｔ＿ｂｏｒｄｅｒと、右側のセグメント境界候補（終了時刻候補）ｕｎｉｔ−＞ｒｉｇｈｔ＿ｂｏｒｄｅｒに、それぞれまだ値が設定されていないことを示す初期値「−１」をセットする（ステップＳ７０４）。
【００５７】
以上のステップＳ７０１からＳ７０５の一連の処理により、図５で５０１、５０２、５０３として例示した素片データごとの中心位置間特徴量距離が算出される。
【００５８】
次に、ＣＰＵ１０１は、図８のステップＳ７０６からＳ７２２の一連の処理を実行する。ここでは、図５で説明した、素片データごとの左側のセグメント境界候補（開始時刻候補）と右側のセグメント境界候補（終了時刻候補）を算出する処理が実行される。
【００５９】
次に、ＣＰＵ１０１は、ステップＳ７０６でＲＡＭ１０３上の変数ｕｎｉｔに、図４のステップＳ４０１でＲＡＭ１０３に読み込んだ素片データｕｎｉｔ［０］〜ｕｎｉｔ［ｕｎｉｔ＿ｃｏｕｎｔ］の先頭の素片データへのポインタをセットし、その後、ステップＳ７２２で変数ｕｎｉｔが指す素片データ構造体内の次素片データポインタｕｎｉｔ−＞ｎｅｘｔ（ｎｅｘｔは図２参照）を順次たどりながら、ステップＳ７０７で全ての素片データに対する検索が終了したと判定するまで、素片データごとに、ステップＳ７０８からＳ７２１の処理を繰り返し実行する。
【００６０】
上述の素片データごとの繰返し処理において、ＣＰＵ１０１はさらに、ステップＳ７０８でＲＡＭ１０３上の変数ｆｅａｔに、図４のステップＳ４０１でＲＡＭ１０３に読み込んだ特徴量データｆｅａｔｖａｌｕｅ［０］〜ｆｅａｔｖａｌｕｅ［Ｎ−１］の先頭の特徴量データへのポインタをセットし、その後、ステップＳ７２１で変数ｆｅａｔが指す特徴量データ構造体内の次特徴量データポインタｆｅａｔ−＞ｎｅｘｔ（ｎｅｘｔは図２参照）を順次たどりながら、ステップＳ７０９で全ての特徴量データに対する検索が終了したと判定するまで、特徴量データごとに、ステップＳ７１０からＳ７２０の一連処理を繰り返し実行する。
【００６１】
上述の特徴量データごとの繰返し処理において、ＣＰＵ１０１は、変数ｕｎｉｔが指す処理対象となっている現在の素片データの中心位置の特徴量データｕｎｉｔ−＞ｃｅｎｔｅｒと、変数ｆｅａｔが指す現在の特徴量データとの特徴量距離を計算し、その計算結果をＲＡＭ１０３上の変数ｄｉｓｔに格納する（ステップＳ７１０）。このステップＳ７１０の処理が特徴量データごとに繰り返されることにより、図５の５０４、５０５、または５０６として例示した特徴量データごとの中心位置の特徴量データとの特徴量距離の推移が得られる。
【００６２】
次に、ＣＰＵ１０１は、変数ｆｅａｔが指す現在の特徴量データの時刻ｆｅａｔ−＞ｔｉｍｅ（ｔｉｍｅは図３参照）が、直前の素片データの中心位置の時刻ｕｎｉｔ−＞ｐｒｅｆ−＞ｃｅｎｔｅｒ−＞ｔｉｍｅと現在の素片データの中心位置の時刻ｕｎｉｔ−＞ｃｅｎｔｅｒ−＞ｔｉｍｅの間にあるか否かを判定する（ステップＳ７１１）。
【００６３】
ステップＳ７１１の判定がＮＯならば、ＣＰＵ１０１は、ステップＳ７１６に移行する。
【００６４】
ステップＳ７１１の判定がＹＥＳならば、ＣＰＵ１０１は、ステップＳ７１２からＳ７１５の一連の処理を実行する。これらの処理は、図５で説明した左側のセグメント境界候補（開始時刻候補）を探索する処理である。
【００６５】
ＣＰＵ１０１はまず、現在の素片データのメンバ変数ｕｎｉｔ−＞ｌｅｆｔ＿ｂｏｒｄｅｒの値が「−１」で（まだ左側のセグメント境界候補が検出されておらず）、かつステップＳ７１０で変数ｄｉｓｔに得た特徴量距離が、図７のステップＳ７０３で算出し現在の素片データのメンバ変数ｕｎｉｔ−＞ｌｅｆｔ＿ｄｉｓｔに格納されている直前の素片データとの中心位置間特徴量距離に所定の割合ｒａｉｏ（ｒａｉｏは例えばＲＯＭ１０２に記憶されている定数で例えば０．２）を乗算して得られる値以下であるか否かを判定する（ステップＳ７１２）。
【００６６】
ステップＳ７１２の判定がＹＥＳになると、図５で説明したｔ１、ｔ２、ｔ６に相当する時刻が見つかったことになるので、ＣＰＵ１０１は、変数ｆｅａｔが指す特徴量データの時刻ｆｅａｔ−＞ｔｉｍｅ（ｔｉｍｅは図３参照）を、変数ｕｎｉｔが示す現在の素片データのメンバ変数ｕｎｉｔ−＞ｌｅｆｔ＿ｂｏｒｄｅｒに格納する（ステップＳ７１３）。その後、ＣＰＵ１０１は、ステップＳ７１６の処理に移行する。
【００６７】
ステップＳ７１２の判定がＮＯならば、ＣＰＵ１０１は、現在の素片データのメンバ変数ｕｎｉｔ−＞ｌｅｆｔ＿ｂｏｒｄｅｒの値が「−１」ではなく（図５の時刻ｔ２に相当する左側のセグメント境界候補が検出されており）、かつステップＳ７１０で変数ｄｉｓｔに得た特徴量距離が、図７のステップＳ７０３で算出し現在の素片データのメンバ変数ｕｎｉｔ−＞ｌｅｆｔ＿ｄｉｓｔに格納されている直前の素片データとの中心位置間特徴量距離に所定の割合ｒａｉｏを乗算して得られる値よりも大きいか否かを判定する（ステップＳ７１４）。なお、図８のステップＳ７１４中の「！＝」は、その両端の値が等しくないことをチェックするための演算子である。
【００６８】
ステップＳ７１３の判定がＹＥＳになると、図５で説明した時刻ｔ２以降の状態となるため、ＣＰＵ１０１は、変数ｕｎｉｔが示す現在の素片データのメンバ変数ｕｎｉｔ−＞ｌｅｆｔ＿ｂｏｒｄｅｒに無効値「−１」を格納してその内容をいったん初期化する（ステップＳ７１５）。その後、ＣＰＵ１０１は、ステップＳ７１６の処理に移行する。ステップＳ７１５の処理が実行された後、次の処理タイミング以降で再びステップＳ７１３の判定がＹＥＳになることにより、図５で説明したｔ４に相当する時刻が見つかったことになるので、ＣＰＵ１０１は、変数ｆｅａｔが指す特徴量データの時刻ｆｅａｔ−＞ｔｉｍｅを、変数ｕｎｉｔが示す現在の素片データのメンバ変数ｕｎｉｔ−＞ｌｅｆｔ＿ｂｏｒｄｅｒに再び格納することになる（ステップＳ７１３）。
【００６９】
ステップＳ７１３の判定がＮＯならば、ＣＰＵ１０１は、ステップＳ７１６の処理に移行する。
【００７０】
ステップＳ７１６で、ＣＰＵ１０１は、変数ｆｅａｔが指す現在の特徴量データの時刻ｆｅａｔ−＞ｔｉｍｅが、現在の素片データの中心位置の時刻ｕｎｉｔ−＞ｃｅｎｔｅｒ−＞ｔｉｍｅと直後の素片データの中心位置の時刻ｕｎｉｔ−＞ｎｅｘｔ−＞ｃｅｎｔｅｒ−＞ｔｉｍｅとの間にあるか否かを判定する。
【００７１】
ステップＳ７１６の判定がＮＯならば、ＣＰＵ１０１は、ステップＳ７２１に移行して、次の時刻の特徴量データに対する処理に移る。
【００７２】
ステップＳ７１６の判定がＹＥＳならば、ＣＰＵ１０１は、ステップＳ７１７からＳ７２０の一連の処理を実行する。これらの処理は、図５で説明した右側のセグメント境界候補（終了時刻候補）を探索する処理である。
【００７３】
ＣＰＵ１０１はまず、現在の素片データのメンバ変数ｕｎｉｔ−＞ｒｉｇｈｔ＿ｂｏｒｄｅｒの値が「−１」で（まだ右側のセグメント境界候補が検出されておらず）、かつステップＳ７１０で変数ｄｉｓｔに得た特徴量距離が、図７のステップＳ７０３で算出し現在の素片データのメンバ変数ｕｎｉｔ−＞ｒｉｇｈｔ＿ｄｉｓｔに格納されている北後の素片データとの中心位置間特徴量距離に所定の割合ｒａｉｏを乗算して得られる値よりも大きくなったか否かを判定する（ステップＳ７１７）。
【００７４】
ステップＳ７１７の判定がＹＥＳになると、図５で説明したｔ３、ｔ５に相当する時刻が見つかったことになるので、ＣＰＵ１０１は、変数ｆｅａｔが指す特徴量データの時刻ｆｅａｔ−＞ｔｉｍｅを、変数ｕｎｉｔが示す現在の素片データのメンバ変数ｕｎｉｔ−＞ｒｉｇｈｔ＿ｂｏｒｄｅｒに格納する（ステップＳ７１８）。その後、ＣＰＵ１０１は、ステップＳ７２１の処理に移行して、次の時刻の特徴量データの処理に移る。
【００７５】
ステップＳ７１７の判定がＮＯならば、ＣＰＵ１０１は、現在の素片データのメンバ変数ｕｎｉｔ−＞ｒｉｇｈｔ＿ｂｏｒｄｅｒの値が「−１」ではなく（図５の時刻ｔ５に相当する右側のセグメント境界候補が検出されており）、かつステップＳ７１０で変数ｄｉｓｔに得た特徴量距離が、図７のステップＳ７０３で算出し現在の素片データのメンバ変数ｕｎｉｔ−＞ｒｉｇｈｔ＿ｄｉｓｔに格納されている直後の素片データとの中心位置間特徴量距離に所定の割合ｒａｉｏを乗算して得られる値以下であるか否かを判定する（ステップＳ７１９）。
【００７６】
ステップＳ７１９の判定がＹＥＳになると、図５で説明した時刻ｔ５以降の状態となるため、ＣＰＵ１０１は、変数ｕｎｉｔが示す現在の素片データのメンバ変数ｕｎｉｔ−＞ｒｉｇｈｔ＿ｂｏｒｄｅｒに無効値「−１」を格納してその内容をいったん初期化する（ステップＳ７２０）。その後、ＣＰＵ１０１は、ステップＳ７２１の処理に移行する。ステップＳ７２０の処理が実行された後、次の処理タイミング以降で再びステップＳ７１７の判定がＹＥＳになることにより、図５で説明したｔ７に相当する時刻が見つかったことになるので、ＣＰＵ１０１は、変数ｆｅａｔが指す特徴量データの時刻ｆｅａｔ−＞ｔｉｍｅを、変数ｕｎｉｔが示す現在の素片データのメンバ変数ｕｎｉｔ−＞ｒｉｇｈｔ＿ｂｏｒｄｅｒに再び格納することになる（ステップＳ７１８）。
【００７７】
ステップＳ７１９の判定がＮＯならば、ＣＰＵ１０１は、ステップＳ７２１の処理に移行して次の時刻の特徴量データに対する処理に移る。
【００７８】
以上のステップＳ７０６からＳ７２２の一連の処理により、図５で説明した、素片データごとに左側のセグメント境界候補（開始時刻候補）と右側のセグメント境界候補（終了時刻候補）が算出され、各素片データのメンバ変数ｌｅｆｔ＿ｂｏｒｄｅｒとｒｉｇｈｔ＿ｂｏｒｄｅｒに格納される。
【００７９】
次に、ＣＰＵ１０１は、図９のステップ７２３からＳ７３２の一連の処理を実行する。ここでは、図５で説明したように、現在の素片データの右側のセグメント境界候補（終了時刻候補）とその直後の素片データの左側のセグメント境界候補（開始時刻候補）の平均値を計算してセグメント境界を補正する処理と、そのときの補正前後のセグメント境界の誤差を算出する処理とが実行される。
【００８０】
まず、ＣＰＵ１０１は、開始時刻を暫定的に格納するＲＡＭ１０３上の変数ｓｔと、誤差の総和を格納するＲＡＭ１０３上の変数ｄｉｆｆを、それぞれ０にリセットする（ステップＳ７２３）。
【００８１】
次に、ＣＰＵ１０１は、ステップＳ７２４でＲＡＭ１０３上の変数ｕｎｉｔに、図４のステップＳ４０１でＲＡＭ１０３に読み込んだ素片データｕｎｉｔ［０］〜ｕｎｉｔ［ｕｎｉｔ＿ｃｏｕｎｔ］の先頭の素片データへのポインタをセットし、その後、ステップＳ７３２で変数ｕｎｉｔが指す素片データ構造体内の次素片データポインタｕｎｉｔ−＞ｎｅｘｔ（ｎｅｘｔは図２参照）を順次たどりながら、ステップＳ７２５で全ての素片データに対する検索が終了したと判定するまで、素片データごとに、ステップＳ７２６からＳ７３１の処理を繰り返し実行する。
【００８２】
上述の素片データごとの繰返し処理において、ＣＰＵ１０１はまず、補正前のセグメント境界情報として、変数ｕｎｉｔが指す現在の素片データの補正前の開始時刻ｕｎｉｔ−＞ｓｔａｒｔに、同じく補正前の継続長ｕｎｉｔ−＞ｄｕｒａｔｉｏｎを加算することにより、現在の素片データの補正前の終了時刻を算出し、それをＲＡＭ１０３上の変数ｄに格納する（ステップＳ７２６）。
【００８３】
次に、ＣＰＵ１０１は、変数ｓｔの値（初期値は０）を、変数ｕｎｉｔが指す現在の素片データの開始時刻メンバ変数ｕｎｉｔ−＞ｓｔａｒｔに格納する（ステップＳ７２７）。
【００８４】
次に、ＣＰＵ１０１は、変数ｕｎｉｔが指す現在の素片データの右側のセグメント境界候補（開始時刻候補）ｕｎｉｔ−＞ｒｉｇｈｔ＿ｂｏｒｄｅｒとその直後の素片データの左側のセグメント境界候補（終了時刻候補）ｕｎｉｔ−＞ｎｅｘｔ−＞ｌｅｆｔ＿ｂｏｒｄｅｒの平均値「（ｕｎｉｔ−＞ｒｉｇｈｔ＿ｂｏｒｄｅｒ＋ｕｎｉｔ−＞ｎｅｘｔ−＞ｌｅｆｔ＿ｂｏｒｄｅｒ）／２」を計算し、その計算結果をＲＡＭ１０３上の変数ｔｍに格納する（ステップＳ７２８）。この結果、変数ｔｍに、現在の素片データの補正後の終了時刻が確定する。
【００８５】
続いて、ＣＰＵ１０１は、変数ｔｍの値から変数ｓｔの値を減算し、その減算結果を変数ｕｎｉｔが指す現在の素片データの継続長ｕｎｉｔ−＞ｄｕｒａｔｉｏｎに格納する（ステップＳ７２９）。この結果、現在の素片データの継続長が補正されたことになる。
【００８６】
その後、ＣＰＵ１０１は、次の素片データのために、変数ｔｍの値を変数ｓｔに格納する（ステップＳ７３０）。
【００８７】
さらに、ＣＰＵ１０１は、ステップＳ７２６で変数ｄに得た現在の素片データの補正前の終了時刻から、ステップＳ７２８で変数ｔｍに得た現在の素片データの補正後の終了時刻を減算して、その減算結果を再び変数ｄに格納する。そして、ＣＰＵ１０１は、この変数ｄの値を２乗することにより、現在の素片データの補正前後の終了時刻の誤差を算出する。さらに、ＣＰＵ１０１は、その２乗演算の結果を変数ｄｉｆｆに累算する（以上、ステップＳ７３１）。なお、図９のステップＳ７３１中で、「−＝」は左辺の変数値から右辺の変数値を減算してその減算結果を左辺の変数に格納する演算子であり、「＋＝」は右辺の変数値を左辺の変数値に累算する演算子である。
【００８８】
その後、ＣＰＵ１０１は、ステップＳ７３２に移行して、次の素片データに対する処理に移る。
【００８９】
以上のステップＳ７２３からＳ７３２の一連の処理により、各素片データのセグメント境界（開始時刻ｓｔａｒｔと継続長ｄｕｒａｔｉｏｎ、図２参照）が補正され、セグメント境界の誤差の総和が変数ｄｉｆｆに得られる。
【００９０】
前述したように、この変数ｄｉｆｆの値が、図４のステップＳ４０５で判定されることにより、図４のステップＳ４０２の中心位置の決定処理とステップＳ４０３の境界の決定処理の繰返しが制御される。
【００９１】
図１０から図１２は、図４のステップＳ４０２の中心位置の決定処理の第２の実施形態を示すフローチャートである。中心位置の決定処理の第２の実施形態では、素片データごとに、初期セグメンテーション時の範囲から少し広げた拡張範囲内の時刻ごとに、当該時刻に対応する特徴量データ（音響特徴量）と拡張範囲内の他の各時刻に対応する各特徴量データとの各特徴量距離の総和（平均値でもよい）が算出され、その総和（または平均値）が最小となる時刻が、当該素片データに対応する中心位置として推定される。
【００９２】
まず、ＣＰＵ１０１は、図１０のステップＳ１００１でＲＡＭ１０３上の変数ｕｎｉｔに、図４のステップＳ４０１でＲＡＭ１０３に読み込んだ素片データｕｎｉｔ［０］〜ｕｎｉｔ［ｕｎｉｔ＿ｃｏｕｎｔ］の先頭の素片データへのポインタをセットし、その後、図１２のステップＳ１０３１で変数ｕｎｉｔが指す素片データ構造体内の次素片データポインタｕｎｉｔ−＞ｎｅｘｔ（ｎｅｘｔは図２参照）を順次たどりながら、図１０のステップＳ１００２で全ての素片データに対する検索が終了したと判定するまで、素片データごとに、図１０のステップＳ１００３からＳ１０１０、図１１のステップＳ１０１１からＳ１０２２、および図１２のステップＳ１０２３からＳ１０３０までの一連処理を繰り返し実行する。
【００９３】
上述の繰返し処理において、ＣＰＵ１０１は始めに、ステップＳ１００３からＳ１０１０までの一連の処理を実行する。ここでは、図４のステップＳ４０１でＲＡＭ１０３に読み込まれている特徴量データのうち、現在の素片データに対して、その素片データに対する初期セグメンテーション時の範囲から少し広げた拡張範囲に属する先頭の特徴量データと末尾の特徴量データとが抽出される。
【００９４】
ＣＰＵ１０１はまず、先頭および末尾の特徴量データを指すＲＡＭ１０３上の変数ｆｓｔおよびｆｔｍにそれぞれ、ＮＵＬＬ値を格納する（ステップＳ１００３）。
【００９５】
次に、ＣＰＵ１０１は、ステップＳ１００４でＲＡＭ１０３上の変数ｆｅａｔに、図４のステップＳ４０１でＲＡＭ１０３に読み込んだ特徴量データｆｅａｔｖａｌｕｅ［０］〜ｆｅａｔｖａｌｕｅ［Ｎ−１］の先頭の特徴量データへのポインタをセットし、その後、ステップＳ１０１０で変数ｆｅａｔが指す特徴量データ構造体内の次特徴量データポインタｆｅａｔ−＞ｎｅｘｔ（ｎｅｘｔは図２参照）を順次たどりながら、ステップＳ１００５で全ての特徴量データに対する検索が終了したと判定するまで、特徴量データごとに、ステップＳ１００６からＳ１００９の一連処理を繰り返し実行する。
【００９６】
上述の特徴量データごとの繰返し処理において、ＣＰＵ１０１はまず、変数ｆｅａｔが指す現在選択されている特徴量データの時刻ｆｅａｔ−＞ｔｉｍｅ（ｔｉｍｅは図３参照）が、変数ｕｎｉｔが指す現在の素片データの時間範囲ｕｎｉｔ−＞ｓｔａｒｔ〜ｕｎｉｔ−＞ｓｔａｒｔ＋ｕｎｉｔ−＞ｄｕｒａｔｉｏｎ（ｓｔａｒｔとｄｕｒａｔｉｏｎは図２参照）から、前後に所定時間αだけ拡張した範囲ｕｎｉｔ−＞ｓｔａｒｔ−α〜ｕｎｉｔ−＞ｓｔａｒｔ＋ｕｎｉｔ−＞ｄｕｒａｔｉｏｎ＋αの内に入るか否かを判定する（ステップＳ１００６）。
【００９７】
ステップＳ１００６の判定がＮＯならば、ＣＰＵ１０１は、ステップＳ１０１０の処理に移行して、次の時刻の特徴量データに対する処理に移る。
【００９８】
ステップＳ１００６の判定がＹＥＳならば、ＣＰＵ１０１は、変数ｆｓｔの値がＮＵＬＬ値であるか否かを判定し（ステップＳ１００７）、この判定がＹＥＳならば、変数ｆｅａｔの値を変数ｆｓｔに格納する（ステップＳ１００８）。この結果、変数ｆｓｔに、上記拡張範囲に属する先頭の特徴量データへのポインタがセットされる。ステップＳ１００７の判定がＮＯならば、変数ｆｓｔには既に上記拡張範囲に属する先頭の特徴量データへのポインタがセットされているため、ＣＰＵ１０１は、ステップＳ１００８はスキップする。
【００９９】
次に、ＣＰＵ１０１は、変数ｆｅａｔの値を変数ｆｔｍに格納する（ステップＳ１００９）。この結果、変数ｆｔｍに、上記拡張範囲に属する特徴量データへのポインタが、暫定的にセットされる。
【０１００】
その後、ＣＰＵ１０１は、ステップＳ１０１０に移行して、次の特徴量データに対する処理に移る。
【０１０１】
以上の図１０のステップＳ１００３からＳ１０１０までの一連の処理により、変数ｕｎｉｔが指す現在の素片データに対する初期セグメンテーション時の範囲から所定時間だけ広げた拡張範囲に属する先頭の特徴量データと末尾の特徴量データとが、変数ｆｓｔおよびｆｔｍにそれぞれ抽出される。
【０１０２】
次に、ＣＰＵ１０１は、図１１のステップＳ１０１１からＳ１０２２までの一連の処理を実行する。ここでは、上記拡張範囲内の時刻ごとに、当該時刻に対応する特徴量データと上記拡張範囲内の他の各時刻に対応する各特徴量データとの各特徴量距離の総和が算出される。図１３は、その演算処理の説明図である。今、特徴量距離を算出する第１および第２の特徴量データのうち、第１の特徴量データへのポインタがＲＡＭ１０３上の変数ｆｅａｔ１に格納され、第２の特徴量データへのポインタが同じく変数ｆｅａｔ２に格納されるとする。そして、説明を簡単にするために、上記拡張範囲に属する特徴量データが時間順に０番目から３番目までの４つのデータから構成されているとする。即ち、０、１、２、３をそれぞれ、上記拡張範囲上の時間順に並ぶ各特徴量データのインデックスとすれば、ｆｓｔ＝０であり、ｆｔｍ＝３である。図１３において、ｆｅａｔ１を含む背景が濃い左端１列目の番号０、１、２、３は変数ｆｅａｔ１が指す特徴量データの時間順を表し、同様に、ｆｅａｔ２を含む背景が濃い行の上端１行目の番号０、１、２、３は変数ｆｅａｔ２が指す特徴量データの時間順を表すものとする。さらに、ｆｅａｔ１の時間順０、１、２、３の各行をＲＡＭ１０３上の変数ｒの値０、１、２、３によって表し、同様に、ｆｅａｔ２の時間順０、１、２、３の各列をＲＡＭ１０３上の変数ｃの値０、１、２、３によって表す。そして、ｒ＝０の行とｃ＝１〜３の各列とが交わる枠の番号０１、０２、および０３はそれぞれ、ｆｅａｔ１が指す特徴量データの０番目と、ｆｅａｔ２が指す特徴量データの１番目、２番目、および３番目との各特徴量距離のインデックスを表すものとする。同様に、ｒ＝１の行とｃ＝２および３の各列とが交わる枠の番号１２および１３はそれぞれ、ｆｅａｔ１が指す特徴量データの１番目と、ｆｅａｔ２が指す特徴量データの２番目および３番目との各特徴量距離のインデックスを表すものとする。さらに、ｒ＝２の行とｃ＝３の各列とが交わる枠の番号２３は、ｆｅａｔ１が指す特徴量データの２番目と、ｆｅａｔ２が指す特徴量データの３番目との特徴量距離のインデックスを表すものとする。
【０１０３】
図１３の例において、ＣＰＵ１０１は、変数ｆｅａｔ１の値を変数ｆｓｔの値から変数ｆｔｍ−＞ｐｒｅｖ（ｐｒｅｖは図３参照）の値まで順次変化させながらｒの値を０から＋１ずつインクリメントさせ、さらに変数ｆｅａｔ１の値ごとに変数ｆｅａｔ２の値を変数ｆｅａｔ１−＞ｎｅｘｔ（ｎｅｘｔは図３参照）の値から変数ｆｔｍの値まで順次変化させながらｃの値をｒ＋１から＋１ずつインクリメントさせる。そして、ＣＰＵ１０１は、変数ｆｅａｔ１が指す特徴量データと変数ｆｅａｔ２が指す特徴量データとの特徴量距離を、ＲＡＭ１０３上の総和格納配列のｒ番目の要素ｄｉｓｔＴａｂ［ｒ］とｃ番目の要素ｄｉｓｔＴａｂ［ｃ］にそれぞれ累算する。
【０１０４】
この結果、図１３の例では、ｒ＝０における演算が終了した時点で、総和格納配列の状態は、ｄｉｓｔＴａｂ［０］＝インデックス０１の特徴量距離＋インデックス０２の特徴量距離＋インデックス０３の特徴量距離、ｄｉｓｔＴａｂ［１］＝インデックス０１の特徴量距離、ｄｉｓｔＴａｂ［２］＝インデックス０２の特徴量距離、ｄｉｓｔＴａｂ［３］＝インデックス０３の特徴量距離となる。また、ｒ＝１における演算が終了した時点で、総和格納配列の状態は、ｄｉｓｔＴａｂ［１］＝インデックス０１の特徴量距離＋インデックス１２の特徴量距離＋インデックス１３の特徴量距離、ｄｉｓｔＴａｂ［２］＝インデックス０２の特徴量距離＋インデックス１２の特徴量距離、ｄｉｓｔＴａｂ［３］＝インデックス０３の特徴量距離＋インデックス１３の特徴量距離となる。さらに、ｒ＝２における演算が終了した時点で、総和格納配列の状態は、ｄｉｓｔＴａｂ［２］＝インデックス０２の特徴量距離＋インデックス１２の特徴量距離＋インデックス２３の特徴量距離、ｄｉｓｔＴａｂ［３］＝インデックス０３の特徴量距離＋インデックス１３の特徴量距離＋インデックス２３の特徴量距離となる。即ち、図１３の４本の太線で示されるように、それぞれ累算が行われる。
【０１０５】
このようにして、全ての繰返しが終了した時点において、総和格納配列の要素ｄｉｓｔＴａｂ［０］に、拡張範囲内の０番目の特徴量データと拡張範囲内の他の１〜３番目の各特徴量データとの各特徴量距離の総和が格納される。同様に、総和格納配列の要素ｄｉｓｔＴａｂ［１］に、拡張範囲内の１番目の特徴量データと拡張範囲内の他の０、２、３番目の各特徴量データとの各特徴量距離の総和が格納される。さらに、総和格納配列の要素ｄｉｓｔＴａｂ［２］に、拡張範囲内の２番目の特徴量データと拡張範囲内の他の０、１、３番目の各特徴量データとの各特徴量距離の総和が格納される。そして、総和格納配列の要素ｄｉｓｔＴａｂ［３］に、拡張範囲内の３番目の特徴量データと拡張範囲内の他の０〜２番目の各特徴量データとの各特徴量距離の総和が格納される。
【０１０６】
以上の動作を実現するのが、図１１のステップＳ１０１１からＳ１０２２までの一連の処理である。
【０１０７】
即ち、ＣＰＵ１０１はまず、ＲＡＭ１０３上の変数ｒに初期値０を格納する（ステップＳ１０１１）。
【０１０８】
次に、ＣＰＵ１０１は、第１の特徴量データを指す変数ｆｅａｔ１に、変数ｆｓｔに格納されている拡張領域に属する最初の特徴量データへのポインタ値を格納する（ステップＳ１０１２）。
【０１０９】
次に、ＣＰＵ１０１は、第２の特徴量データを指す変数ｆｅａｔ２に、変数ｆｅａｔ１が指す特徴量データの次の特徴量データへのポインタ値ｆｅａｔ１−＞ｎｅｘｔを格納する（ステップＳ１０１３）。
【０１１０】
次に、ＣＰＵ１０１は、ＲＡＭ１０３上の変数ｃに、変数ｒの値＋１を格納する（ステップＳ１０１４）。
【０１１１】
次に、ＣＰＵ１０１は、ステップＳ１０１８で変数ｆｅａｔ２が指す第２の特徴量データ構造体内の次素片データポインタｆｅａｔ２−＞ｎｅｘｔを順次たどりながら、また、ステップＳ１０１９で変数ｃの値を＋１ずつインクリメントしながら、ステップＳ１０１７で変数ｆｅａｔ２の値が、変数ｆｔｍが指す拡張領域内の最後の特徴量データへのポインタに達したと判定するまで、ステップＳ１０１５とＳ１０１６の処理を繰り返し実行する。
【０１１２】
即ち、ＣＰＵ１０１はまず、変数ｆｅａｔ１が指す第１の特徴量データと変数ｆｅａｔ２が指す第２の特徴量データの特徴量距離を算出し、その算出結果をＲＡＭ１０３上の変数ｄｉｓｔに格納する（ステップＳ１０１５）。
【０１１３】
そして、図１３の説明で前述したように、ＣＰＵ１０１は、変数ｄｉｓｔに得られた特徴量距離を、ＲＡＭ１０３上の総和格納配列のｒ番目の要素ｄｉｓｔＴａｂ［ｒ］とｃ番目の要素ｄｉｓｔＴａｂ［ｃ］にそれぞれ累算する（ステップＳ１０１６）。
【０１１４】
以上の繰返し処理の結果、ステップＳ１０１７の判定がＹＥＳになると、変数ｒの１つの値、即ち図１３で例示した１行分の特徴量距離の計算が終わる。ＣＰＵ１０１は、変数ｆｅａｔ１の値が、変数ｆｔｍが指す拡張領域内の最後の特徴量データの１つ手前の特徴量データへのポインタ値ｆｔｍ−＞ｐｒｅｖになっているか否かを判定する（ステップＳ１０２０）。図１３に例示されるように、変数ｒの値は、拡張領域内の最後の特徴量データに対応する値（ｒ＝３）では計算は行われないため、０から拡張領域内の最後の特徴量データの１つ手前の特徴量データ（図１３の例ではｒ＝２）までを指すように変化する。
【０１１５】
ステップＳ１０２０の判定がＮＯならば、ＣＰＵ１０１は、ステップＳ１０２１に移行し、変数ｆｅａｔ１が指す第１の特徴量データへのポインタ値を、ｆｅａｔ１が指す構造体内の次素片データポインタｆｅａｔ１−＞ｎｅｘｔの値に更新する。
【０１１６】
さらに、ＣＰＵ１０１は、変数ｒの値を＋１インクリメントする（ステップＳ１０２２）。その後、ＣＰＵ１０１は、ステップＳ１０１３の処理に戻る。
【０１１７】
以上説明した図１１のステップＳ１０１１からＳ１０２２の一連の処理により、拡張範囲内の時刻ごとに、当該時刻に対応する特徴量データと上記拡張範囲内の他の各時刻に対応する各特徴量データとの各特徴量距離の総和が、総和格納配列ｄｉｓｔＴａｂ［］に得られる。
【０１１８】
続いて、ＣＰＵ１０１は、図１２のステップＳ１０２３からＳ１０３０までの一連の処理を実行する。ここでは、変数ｕｎｉｔが指す現在の素片データについて、上記拡張領域に属する変数ｆｓｔが指す特徴量データから変数ｆｔｍが指す特徴量データまでのうち、上記拡張領域内の他の各時刻に対応する各特徴量データとの各特徴量距離の総和が最も小さくなる特徴量データが、その素片データの中心位置の特徴量データとして算出される。
【０１１９】
ＣＰＵ１０１はまず、上記拡張領域の最初の特徴量データを指す変数ｆｓｔの値をＲＡＭ１０３上の変数ｆｅａｔに格納する（ステップＳ１０２３）。
【０１２０】
次にＣＰＵ１０１は、変数ｆｅａｔのポインタ値を、変数ｕｎｉｔが指す現在の素片データの中心位置の特徴量データへのポインタを格納するメンバ変数ｕｎｉｔ−＞ｃｅｎｔｅｒ（ｃｅｎｔｅｒは図２参照）に、暫定的に格納する。また、ＣＰＵ１０１は、上記拡張領域の最初の特徴量データに対応する総和格納配列ｄｉｓｔＴａｂ［０］の値を、現時点での最小値を保持するＲＡＭ１０３上の変数ｍｉｎに格納する（以上、ステップＳ１０２４）。
【０１２１】
その後、ＣＰＵ１０１は、ステップＳ１０２５でＲＡＭ１０３上の変数ｉの値を初期値０にセットした後、ステップＳ１０２９で変数ｆｅａｔが指す特徴量データ構造体内の次素片データポインタｆｅａｔ−＞ｎｅｘｔを順次たどりながら、また、ステップＳ１０３０で変数ｉの値を＋１ずつインクリメントしながら、ステップＳ１０２８で変数ｆｅａｔの値が変数ｆｔｍが指す拡張領域内の最後の特徴量データへのポインタに達したと判定するまで、ステップＳ１０２６とＳ１０２７の処理を繰り返し実行する。
【０１２２】
即ち、ＣＰＵ１０１はまず、変数ｍｉｎの値が変数ｉに対応する総和格納配列ｄｉｓｔＴａｂ［ｉ］の値よりも大きいか否かを判定する（ステップＳ１０２６）。
【０１２３】
ステップＳ１０２６の判定がＹＥＳならば、ＣＰＵ１０１は、変数ｆｅａｔのポインタ値を、変数ｕｎｉｔが指す現在の素片データの中心位置の特徴量データへのポインタを格納するメンバ変数ｕｎｉｔ−＞ｃｅｎｔｅｒに格納する。また、ＣＰＵ１０１は、変数ｉに対応する総和格納配列ｄｉｓｔＴａｂ［ｉ］の値を、現時点での最小値を保持するＲＡＭ１０３上の変数ｍｉｎに格納する（以上、ステップＳ１０２７）。
【０１２４】
ステップＳ１０２６の判定がＮＯならば、ＣＰＵ１０１は、ステップＳ１０２７の処理はスキップする。
【０１２５】
変数ｆｅａｔの値が変数ｆｔｍが指す拡張領域内の最後の特徴量データへのポインタに達することによりステップＳ１０２８の判定がＹＥＳになると、ＣＰＵ１０１は、ステップＳ１０３１に移行して、変数ｕｎｉｔに、次の素片データへのポインタ値ｕｎｉｔ−＞ｎｅｘｔを格納して、図１０のステップＳ１００２の処理に戻り、次の素片データに対応する処理に移る。
【０１２６】
以上のようにして、中心位置の決定処理の第２の実施形態によれば、他の特徴量データとの関係で変動が最も少ない安定している特徴量データの時刻を、素片データの中心位置として算出することが可能となる。
【０１２７】
図１３は、以上説明した本実施形態によるセグメンテーション補正処理によって補正された波形例（図１３（ｂ））と、それに対応する補正前の波形例（図１３（ａ））を示す図である。各音素「ａ」「ｒ」「ａ」「ｙ」「ｕ」「ｒ」「ｕ」に対応する各素片データにおいて、特徴量データ（音響特徴量）がそれぞれ安定する箇所が各素片データに対応する中心位置として推定された上で、その中心位置の特徴量データとの関係で各時刻の特徴量データが安定して推移する範囲として、各素片データのセグメント境界が補正される。
【０１２８】
以上説明した実施形態によれば、高いコストを要さずに、安定した特徴量データ（音響特徴量）を有する素片データを得ることのできるセグメンテーションが可能となる。
【０１２９】
以上の実施形態に関して、さらに以下の付記を開示する。
（付記１)
音声波形データを時間軸上の予め定められた位置でセグメンテーションして得られた複数の素片データ夫々において、音響特徴量が安定する前記音素片データ内の位置を、前記素片データに対応する中心位置と推定する推定処理と、
前記素片データごとに、前記素片データの前記中心位置に対応する音響特徴量と、前記中心位置以外の位置に対応する音響特徴量とに基づいて、前記素片データのセグメンテーション位置を補正する補正処理と、
を実行する処理部を有する、セグメンテーション装置。
（付記２）
前記処理部は、前記補正処理において、前記素片データの前記中心位置に対応する音響特徴量と、前記中心位置以外の位置に対応する音響特徴量との差分に基づいて、前記素片データのセグメンテーション位置を補正する処理を実行する、付記１に記載のセグメンテーション装置。
（付記３）
前記処理部は、前記推定処理において、前記素片データごとに、前記素片データにおける時間軸上の中央値を、前記素片データに対応する前記中心位置と推定する、付記１または２に記載のセグメンテーション装置。
（付記４）
前記処理部は、前記推定処理において、
前記素片データごとに、前記時間軸上おける予め定められたセグメンテーション位置により決定された範囲に基づいた拡張範囲を取得する拡張範囲取得処理と、
前記取得された拡張範囲内の各時間軸上の位置ごとに、前記時間軸上の位置に対応する前記音響特徴量と前記拡張範囲内の他の時間軸上の位置に対応する各音響特徴量との差分の総和または平均値を取得し、前記総和または平均値が最小となる時間軸上の位置を、前記素片データに対応する前記中心位置と推定する処理を実行する、付記１または２に記載のセグメンテーション装置。
（付記５）
前記処理部は、前記拡張範囲取得処理として、前記時間軸上における予め定められたセグメンテーション位置により決定された範囲と、前記範囲に対して予め定められた時間あるいは予め定められた割合だけ拡張した範囲とを、前記拡張範囲として取得する処理を実行する、付記４に記載のセグメンテーション装置。
（付記６）
前記処理部は、前記素片データごとに、前記素片データの前記中心位置に対応する音響特徴量と前記素片データに隣接する素片データの前記中心位置に対応する音響特徴量との差分を算出し、前記素片データと前記素片データに隣接する素片データとの間の時刻内の各時刻の音響特徴量と当該素片データの前記中心位置に対応する音響特徴量との特徴量距離が、前記中心位置間特徴量距離に対して所定の割合以下となる位置を、前記素片データのセグメンテーション位置として決定する処理を実行する、付記１乃至５の何れかに記載のセグメンテーション装置。
（付記７）
前記処理部はさらに、
前記補正したセグメンテーション位置と補正前の前記セグメンテーション位置との差分を取得する取得処理と、
前記取得された差分が予め定められた閾値より大きい場合は、前記補正したセグメンテーション位置に基づき、前記推定処理において中心位置を再度推定する処理を実行するように制御するとともに、前記補正処理において、前記再度推定された中心位置に対応する音響特徴量と、前記再度推定された中心位置以外の位置に対応する音響特徴量とに基づいて、前記素片データのセグメンテーション位置を補正するように制御する制御処理を実行する、付記１乃至６の何れかに記載のセグメンテーション装置。
（付記８）
セグメンテーション装置に用いられるセグメンテーション方法であって、前記セグメンテーション装置が、
音声波形データを時間軸上の予め定められた位置でセグメンテーションして得られた複数の素片データ夫々において、音響特徴量が安定する前記音素片データ内の位置を、前記素片データに対応する中心位置と推定し、
前記素片データごとに、前記素片データの前記中心位置に対応する音響特徴量と、前記中心位置以外の位置に対応する音響特徴量とに基づいて、前記素片データのセグメンテーション位置を補正する、セグメンテーション方法。
（付記９）
セグメンテーション装置として用いられるコンピュータに、
音声波形データを時間軸上の予め定められた位置でセグメンテーションして得られた複数の素片データ夫々において、音響特徴量が安定する前記音素片データ内の位置を、前記素片データに対応する中心位置と推定する推定ステップと、
前記素片データごとに、前記素片データの前記中心位置に対応する音響特徴量と、前記中心位置以外の位置に対応する音響特徴量とに基づいて、前記素片データのセグメンテーション位置を補正する補正ステップと、
を実行させるプログラム。
【符号の説明】
【０１３０】
１０１  ＣＰＵ
１０２  ＲＯＭ
１０３  ＲＡＭ
１０４  外部記憶装置
１０５  入力装置
１０６  表示装置
１０７  通信インタフェース
１０８  可搬記録媒体駆動装置
１０８ａ  可搬記録媒体
１０９  システムバス
【図１】
0006720619.tif 000002
【図２】
0006720619.tif 000003
【図３】
0006720619.tif 000004
【図４】
0006720619.tif 000005
【図５】
0006720619.tif 000006
【図６】
0006720619.tif 000007
【図７】
0006720619.tif 000008
【図８】
0006720619.tif 000009
【図９】
0006720619.tif 000010
【図１０】
0006720619.tif 000011
【図１１】
0006720619.tif 000012
【図１２】
0006720619.tif 000013
【図１３】
0006720619.tif 000014
【図１４】
0006720619.tif 000015