(57)【要約】【課題】音声信号の時間軸圧伸処理において、入力音声信号の特性に適した最適な削除／繰返し区間を決定し、これに基づき音声データの削除／繰返しを行ない、違和感やノイズの少ない音声出力を得られるようにする。【解決手段】音声信号中の一部の区間を削除または挿入することにより音声信号の時間軸を圧縮または伸長するに際し、音声信号の周期を検出し（Ｓ４、Ｓ５）、検出した音声信号の周期に基づき、該周期に相当する長さを有する区間を選択し（Ｓ７）、圧伸区間選択過程で選択された区間を削除または挿入の単位として、音声信号を圧縮または伸長する（Ｓ９）。前回の処理過程において圧伸単位時間に対する過不足量が生じた場合、次回の処理過程において入力する音声信号のデータ量を前記過不足量を補償すべく調節する（Ｓ１、Ｓ２）。【選択図】図１
2007094004.tif 000002
【特許請求の範囲】
【請求項１】
音声信号中の一部の区間を削除または挿入することにより音声信号の時間軸を圧縮または伸長する音声信号の時間軸圧伸方法において、
音声信号の周期を検出する周期検出過程と、
周期検出過程で検出した前記音声信号の周期に基づき、該周期に相当する長さを有する区間を選択する圧伸区間選択過程と、
前記圧伸区間選択過程で選択された区間を削除または挿入の単位として、前記音声信号を圧縮または伸長する圧伸処理過程を含むことを特徴とする音声信号の時間軸圧伸方法。
【請求項２】
所定の圧伸単位時間および圧伸率に基づき定まるデータ量づつ音声信号を入力し、前記周期検出過程、前記圧伸区間選択過程、および前記圧伸処理過程を繰り返し実行することにより音声信号の時間軸圧伸を行なうとともに、前回の圧伸処理過程において前記圧伸単位時間に対する過不足量が生じた場合、後続の前記周期検出過程、前記圧伸区間選択過程、および前記圧伸処理過程に入力する音声信号のデータ量を、前記過不足量を補償すべく調節することを特徴とする請求項１に記載の音声信号の時間軸圧伸方法。
【請求項３】
前記周期検出過程において、音声信号の自己相関関数を演算することにより音声信号の周期を検出することを特徴とする請求項１に記載の音声信号の時間軸圧伸方法。
【請求項４】
前記音声信号の自己相関関数を演算する過程において、自己相関関数の値が正であるような区間のそれぞれについて、前記圧伸単位時間の１．５倍を超える長さの区間以外の区間で最も値が大きくなるピーク群のうち、短周期側半分を捨て、残ったピークのうち、自己相関関数の値が最も大きいピークを選択し、当該ピークのタイミングに基づき音声信号の周期を検出することを特徴とする請求項３に記載の音声信号の時間軸圧伸方法。
【請求項５】
前記圧伸区間選択過程において、音声信号の極性が正から負、または負から正に変化するゼロクロス点から構成される区間につき、周期検出過程で検出した前記音声信号の周期に近い程高得点となるようなスコアを付与し、各区間のスコアに基づき最適な区間を選択することを特徴とする請求項１に記載の音声信号の時間軸圧伸方法。
【請求項６】
前記圧縮処理過程において、時間軸伸長処理においては音声信号中で前記圧伸区間選択過程で選択された区間の直後に該区間の音声データを挿入し、時間軸圧縮処理においては音声信号中で前記圧伸区間選択過程で選択された区間を削除し、音声信号の該挿入／削除した境界部分をクロスフェード処理で接続することを特徴とする請求項１に記載の音声信号の時間軸圧伸方法。
【請求項７】
音声信号に含まれる無音部分を検出し、伸長の場合は該無音部分の一部を所定回数繰り返し、圧縮の場合は該無音部分の一部を所定回数削除する無音区間圧伸過程を含むことを特徴とする請求項１に記載の音声信号の時間軸圧伸方法。
【請求項８】
前記圧伸処理過程において圧伸時間が所定の圧伸単位時間に達せず、未補正の圧伸時間が所定以上ある場合、前記周期検出に依存せずに圧伸区間を選択し圧伸を行なう代替圧伸処理過程を実行することを特徴とする請求項１に記載の音声信号の時間軸圧伸方法。
【請求項９】
請求項１〜８のいずれか１項に記載の音声信号の時間軸圧伸方法を実施するハードウェアを含むことを特徴とする音声信号の時間軸圧伸装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、音声信号中の一部の区間を削除または挿入することにより音声信号の時間軸を圧縮または伸長する音声信号の時間軸圧伸方法および該方法を実施する音声信号の時間軸圧伸装置に関する。
【背景技術】
【０００２】
音声信号の時間軸の圧縮や伸張処理（以下では圧伸処理とも記す）、特にピッチ（音程）変化を伴なわずに行なわれる時間軸の圧縮や伸張処理には、カラオケのような音楽ソースの（キー変更をともなわない）テンポの調整、録音テープの速聞き（あるいは遅聞き）、ＣＭ、ビデオ、テレビジョン番組などの制作現場における音楽ソースと映像ソースの時間合せなど多種多様な用途、需要が存在する。
【０００３】
特にピッチ（音程）変化を伴なわない時間軸の圧縮や伸張処理の基本技術は、下記の非特許文献１のような基本技術が知られている。
【０００４】
非特許文献１の技術は、時間軸の伸張においては、音声信号の一部の区間を繰返し、圧縮においては、音声信号の一部の区間を削除するとともに、各削除／繰返し区間をクロスフェードで繋ぐものである。
【０００５】
音声信号の削除／繰返し区間を決定する周期は固定的に定める他、音声信号の削除／繰返し区間を決定する周期を決定するにあたっては下記の特許文献１〜４に示されるように種々の構成が提案されている。
【特許文献１】特開２００２−２９７２００号公報
【特許文献２】特開２００４−３０９８９３号公報
【特許文献３】特開２００４−３１７５３３号公報
【特許文献４】特開２００５−３１１６９号公報
【非特許文献１】ＰＩＣＯＬＡ (http://keizai.yokkaichi-u.ac.jp/~ikeda/research/picola-jp.html)
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら従来の技術では、周期検出および周期検出結果に基づく信号の繰り返し／削除を、原信号の特性を考慮することなく（たとえば実際にその区間の原信号が周期的かどうかを考慮することなく）機械的に実行していた。このため、実際には非周期的な信号区間を繰り返し／削除する圧伸処理を行なう結果となる場合があり、聴こえ方に違和感を生じることがあった。
【０００７】
本発明の課題は、上記の問題に鑑み、音声信号の時間軸圧伸処理において、入力音声信号の特性に適した最適な削除／繰返し区間を決定し、これに基づき音声データの削除／繰返しを行ない、違和感やノイズの少ない音声出力を得られるようにすることにある。
【課題を解決するための手段】
【０００８】
以上の課題を解決するため、本発明においては、音声信号中の一部の区間を削除または挿入することにより音声信号の時間軸を圧縮または伸長する音声信号の時間軸圧伸方法、および該方法を実施する音声信号の時間軸圧伸装置において、音声信号の周期を検出する周期検出過程と、周期検出過程で検出した前記音声信号の周期に基づき、該周期に相当する長さを有する区間を選択する圧伸区間選択過程と、前記圧伸区間選択過程で選択された区間を削除または挿入の単位として、前記音声信号を圧縮または伸長する圧伸処理過程を実施する構成を採用した。
【発明の効果】
【０００９】
上記構成によれば、入力音声信号から検出した該音声信号の周期に相当する長さを有する区間を選択し、この区間を削除または挿入の単位として、音声信号を圧縮または伸長するようにしているので、入力音声信号の特性に適した最適な削除／繰返し区間を決定し、これに基づき音声データの削除／繰返しを行なえ、違和感やノイズの少ない音声出力を得られる、という優れた効果がある。
【発明を実施するための最良の形態】
【００１０】
以下、図面に示す実施例に基づき本発明を実施するための最良の形態につき説明する。
【００１１】
図９に、本発明の音声信号の時間軸圧伸処理を行なうのに必要なハードウェア構成を例示する。
【００１２】
図９において、符号８１はプロセッサで、ＤＳＰ、または汎用のＣＰＵにより構成される。プロセッサ８１には、後述の信号処理手順をプロセッサ８１の制御プログラムとして格納したプログラムメモリ（たとえばＲＯＭなど）８４、および音声信号処理のためのワークエリアとして用いられるメモリ（たとえばＲＡＭなど）８５が接続されている。
【００１３】
プロセッサ８１は、入力部８２から入力した音声信号の時間軸を圧伸して得た音声信号を出力部８３に出力する。
【００１４】
本実施例では、説明を容易にするため、プロセッサ８１は入力部８２からデジタル音声信号、たとえば、以下の例では１６ビット量子化の所定形式（たとえばＷＡＶフォーマット）のデジタル音声データを入力し、時間軸圧伸を行なったデジタル音声信号を出力部８３に出力するよう制御するものとする。もし、入力部８２からアナログ音声信号を入力したり、出力部８３からアナログ音声信号を出力したりする必要があれば、入力部８２および出力部８３にはＡ／ＤないしＤ／Ａ変換回路を含めておくか、あるいは外部のＡ／ＤないしＤ／Ａ変換回路により必要な信号フォーマット変換を行なえばよい。
【００１５】
上記のように、本発明の音声信号の時間軸圧伸処理を行なうのに必要なハードウェアはごく一般的なものであり、専用のハードウェアを用いて構成する他、ＰＣなどのハードウェアを利用して構成することもできる。
【００１６】
次に本発明の音声信号の時間軸圧伸処理の概要を説明する。なお、時間軸圧伸はストレッチなどと呼ばれることがあるが、この用語「ストレッチ」は狭義では伸長を意味する他、圧縮の場合も含めた圧伸処理全体を指して使われる場合がある。本実施例でも必要に応じて、上記の用法で用語「ストレッチ」を用いる。
【００１７】
本発明の目的とする音声信号の時間軸圧伸処理は、音声信号のピッチ（音高）を変化させることなく、加工前の原音Ａの（時間的な）長さを圧縮したり伸長する処理である。たとえば、１０％圧縮の場合は加工前の入力信号Ａ（３０ｓ：秒。以下同様）から圧縮処理により出力信号Ｂ（２７ｓ）を得、１０％伸長の場合は加工前の入力信号Ａ（３０ｓ）から伸長処理により出力信号Ｂ（３３ｓ）を得る。
【００１８】
圧縮処理では、入力音声信号の一部を削除し、伸長処理では、入力音声信号の一部をリピート（繰返し）する処理を行なうことにより時間軸の圧伸を行なう。
【００１９】
この削除／繰返しを行う区間は、両端がゼロクロス点となるように選択する。これにより、継ぎ目の前後で波形が極端には変化しなくなり、ノイズを感じにくくなる。加えて、信号の継ぎ目にクロスフェード処理を施すことで、さらにノイズを抑えるようにしている。
【００２０】
図９のプロセッサ８１は、入力信号と圧伸後の出力信号との時間的長さの差が所定の値に達するまで、入力部８２から音声データを入力する。この所定の時間差は圧伸単位時間Ｔｄである。プロセッサ８１は入力音声データに対して、出力部８３に出力される圧伸後の音声データとの時間差が圧伸単位時間Ｔｄとなるように圧伸処理を行う（後述の図１ではステップＳ１〜Ｓ１１の１ループに対応）。
【００２１】
本実施例では、圧伸単位時間Ｔｄを２０ｍｓとする。例えば圧伸率ｓｆ（ストレッチファクタ）＝０．１（１０％）の場合、理想的には２００ｍｓの信号を入力するごとに時間差が圧伸単位時間Ｔｄに達する。こうして入力した信号区間毎に圧伸処理を行い、圧縮であれば１８０ｍｓ、伸張であれば２２０ｍｓに加工して出力することになる。
【００２２】
なお、圧伸単位時間Ｔｄは必ずしも２０ｍｓである必要はないが、次のような理由から、入力として一般の音声信号を想定する場合にはこの程度が適切であると考えられる。
【００２３】
本手法は、「音声信号は、数十ｍｓ程度の区間内においては、定常な周期信号とみなすことができる」という性質を利用し、この周期を検出して削除／繰返しの単位とすることで高音質な出力を計っている。圧伸単位時間Ｔｄが大きくなりすぎると、周期検出にあたって、このような性質が成立しないほど長い区間の信号を処理する必要が生じ、望ましい結果が得られない。その一方、圧伸単位時間Ｔｄは、削除／繰返しに利用できる周期の長さを制限するパラメータでもある。圧伸単位時間Ｔｄが大きいほど周期の長い信号に対する補正能力が増すため、周期検出で上記のような悪影響を生じない範囲で、できるだけ大きくとることが望ましい。
【００２４】
また、１回の補正処理において、毎回圧伸単位時間Ｔｄきっかりの圧伸を行なえるとは限らないので、多少の過補正（“行き過ぎ”）を許容する。本実施例では、最大で５０％の過補正（“行き過ぎ”）を許容するものとする。
【００２５】
また、１回の補正処理において、圧伸単位時間Ｔｄを達成できなかった場合のうち、未補正時間ｒが圧伸単位時間Ｔｄに対して小さい、たとえば圧伸単位時間Ｔｄの８０％未満の場合（圧伸単位時間Ｔｄの８０％以上の圧伸時間を得られた場合）は、次回の補正処理で調整する（対象区間の長さを調節する：後述）ものとする。また、たとえば圧伸単位時間Ｔｄの８０％以上あり、未補正時間ｒが圧伸単位時間Ｔｄに対してかなり大きい場合には、後述の代替圧伸処理を行なうものとする。
【００２６】
次に、本発明における時間軸圧伸処理の概要につき、図２〜図５を参照してさらに詳細に説明する。
【００２７】
本発明においては、１回の補正処理の対象区間の長さは、上記の圧伸率ｓｆおよび、圧伸単位時間Ｔｄにより決定される。圧伸単位時間Ｔｄ＝２０ｍｓ、圧伸率ｓｆ＝０．１（１０％）の場合、対象区間の長さは２００ｍｓとなる。ただし、前回の補正処理における圧伸の過不足量（後述の未補正時間ｒ）に応じて、この圧伸の過不足を補償すべく、この対象区間の長さは調整される。
【００２８】
対象区間の長さを上記の２００ｍｓとすると、入力部８２から２００ｍｓの入力音声信号を入力し、まず無音区間の圧伸を行なう。
【００２９】
無音かどうかの判定基準は、所定レベル以下の音声データ、たとえば、量子化ビット16のＷＡＶファイルの信号値換算で±50以内のサンプルが５ｍｓ以上続く区間を無音区間とみなす、といった方法が考えられる。これらの無音区間のそれぞれについて、伸張の場合は一部を繰り返（リピート）し、圧縮の場合は一部を削除する。
【００３０】
無音区間の削除／繰返しの長さは、たとえば（１回の補正開始時点での未補正時間差×（無音区間の長さ÷対象区間の長さ））とする。すなわち、今回の対象区間の演算で補正されずに残っている累積時間差（入力信号の末尾に達している場合を除けば、Ｔｄに等しい）のうち、（無音区間の長さ÷対象区間の長さ）つまり今回の対象区間中で無音区間が占める比率の分だけ圧伸する。こうして、有音区間と無音区間の比率を保つことで、出力信号にリズムの乱れ等の生じることを防いでいる。
【００３１】
続いて、入力した対象区間の音声データから周期検出を行ない、検出した周期に基づき、入力音声信号の一部を削除／繰返しする区間を決定する。
【００３２】
周期検出の手法にはさまざまなものがあるが、ここではＦＦＴによる自己相関関数の計算を利用する。自己相関関数を計算するには、対象区間の一部と、巡回的相関の影響を除去するための零信号とを連結したものに対してＦＦＴを行う。続いて、ＦＦＴの結果とその複素共役との積を計算し、逆ＦＦＴを行う。数学的には、さらにサンプル数で除算する必要があるが、本実施例のような用途では値のオーダは重要ではないので省略する。
【００３３】
自己相関関数の計算区間の長さは、圧伸単位時間Ｔｄから決めればよい。本例では、Ｔｄ＝２０ｍｓで、かつ、最大５０％の過補正を許容しているため、３０ｍｓがあり得べき最長の圧伸時間となる。従って、最大３０ｍｓまでの周期を検出対象とすればよい。自己相関関数は、その性質上、計算結果の半分は負の遅れ時間に相当し、情報を持たないため、３０ｍｓまでの周期検出には、最低６０ｍｓの信号が必要になる。この周期検出は、音声信号の局所的な周期性に着目したものであるので、このような周期性が仮定できないほど長い信号から自己相関関数を計算しては望ましい結果が得られない。従って、計算区間の長さは必要最小限に留めるのが得策と考えられる。
【００３４】
入力区間のうちどの範囲について自己相関関数を計算するかは任意に選ぶことができるが、本例では入力区間の末尾を使用している。
【００３５】
ＦＦＴを使用した自己相関関数は、取り出した信号を周期信号として扱うため、そのままでは信号の先頭部分と末尾部分の巡回的な相関（＝物理的にはあり得ないもの）が出力されるので、これを防ぐために、対象区間（の終端部）から取り出した音声データに、その半分の長さ（上の例では３０ｍｓ）の零信号を連結してからＦＦＴ演算を開始する。これにより、演算結果に現れる巡回的な相関は「零信号との相関」になり、周期検出対象の最大値３０ｍｓまでの範囲は巡回的な相関の影響を受けずに済む。
【００３６】
上記のようにして、自己相関関数を求めると、たとえば図２のような波形が得られるので、この波形から周期を検出する。
【００３７】
自己相関関数には、一般に遅れ時間０の自明なピーク以外に複数のピークが存在する。これらのいずれを周期として検出するかについては、本実施例では次の基準を採用した。
【００３８】
（ａ１）計算区間の長さの半分までの時間のうち、自己相関関数の値が正であるような区間のそれぞれについて、その区間で最も値が大きくなる点を列挙する。ただし、このとき圧伸単位時間の１．５倍を超える長さについては、対象としない。
【００３９】
（ａ２）（ａ１）で列挙したピーク群のうち、短周期側半分を捨てる。たとえば、（ａ１）で１４個のピークが見つかったなら、遅れ時間の短いものから順に７つを捨てる。
【００４０】
（ａ３）残ったピークのうち、自己相関関数の値が最も大きいものを選び、周期検出対象のピークとして検出する。
【００４１】
なお手順（ａ１）は、負の遅れ時間を除外することと、過補正を考慮に入れてもＴｄの１．５倍以上の周期を使用することはあり得ないことに対応している。
【００４２】
また、手順（ａ２）でピークの半分を捨ててしまうのは、特に複数音源からなる入力信号の場合に、より長い周期で補正した方がノイズが少ないという結果が得られたためである。これは入力信号が複数パートからなる楽音であった場合、多くの場合、主旋律を担当するパートの周期に対応するパワースペクトル密度（ＰＳＤ）が最も高くなる。この周期を用いてストレッチを行うと、主旋律については滑らかなストレッチ結果が得られると期待できるが、その他のパートに対しても同様に滑らかになるとは限らない。他のパートの周波数が主旋律の周波数の整数倍と異なっていれば、振幅は小さいにせよ、ノイズの原因となり得る。
【００４３】
手順（ａ２）で短周期側のピークを捨てる結果、主旋律の周期がある程度以上短い場合には、その数倍の周期が選ばれるようになる。このような長めの周期を採用することで、主旋律と四度、五度、オクターブ下、等の和音をなすパートについても滑らかなストレッチ結果が得られる可能性が高くなり、最悪の場合でも削除／繰り返しの回数を抑えることでノイズの抑制が計れる。入力が単一パートからなる楽音や、その他一般の音声信号では、単にＰＳＤ最高の周期を採用した方が良い結果になることが十分あり得る。が、そのような場合に手順（ａ２）があっても聴感上問題になるほどには悪化しない一方、複数パートからなる楽音については上記の改善が見られるという効果が得られたことから、入力信号が楽音か否かについては特段の仮定を設けていない。
【００４４】
そして手順（ａ３）で残ったピークのうち、自己相関関数の値が最も大きいものを選び、そのピークに対応する遅れ時間を周期として採用する。
【００４５】
すなわち、図２の自己相関関数（ピークＰ０、Ｐ１、Ｐ２…）の場合、自己相関関数の前半部分の遅れ時間０の自明なピークＰ０以外の最もＰＳＤが高いピークＰ４に対応する遅れ時間が主要な周期であるが、本実施例では、上記のような周期検出によりピークＰ４に続いてＰＳＤが高いピークＰ８のタイミングに対応する遅れ時間を圧伸区間を決定するために用いるべき周期として検出する（以下では、上記の周期検出処理により、たとえば１５ｍｓの周期が検出されたものとする）。
【００４６】
以上のようにして、対象区間の周期を検出できれば、入力音声データの一部を検出した周期の長さを単位として、削除／繰返しすることにより時間軸圧伸を行なう。
【００４７】
この削除／繰返しの開始点としては、信号が正から負（または負から正）へ変化するゼロクロス点を選ぶ。削除／繰返しの“継ぎ目”での信号ギャップが小さくなるのでノイズ低減を期待できる。なお、ここでは信号の半波だけを区間として取り出してしまうような事態を防止するため、ゼロクロス点としては、正から負へのゼロクロス点、または負から正へのゼロクロス点のみのいずれか一方のみを用いる。
【００４８】
たとえば、入力音声信号が図３のような波形であった場合、信号が正から負へと変化するゼロクロス点（Ｃｎ、Ｃｎ＋１、Ｃｎ＋２…）が削除／繰返しの開始点の候補となる。
【００４９】
削除／繰返し区間を決定するには、まず、これら信号が正から負へと変化するゼロクロス点（Ｃｎ、Ｃｎ＋１、Ｃｎ＋２…）の各々について、以降のゼロクロス点の中から、間隔が自己相関関数から検出した周期（たとえば１５ｍｓ）に最も近いものを探し、このようにして選んだ零交差点対の間隔を、そのゼロクロス点から始まる周期の長さとみなす。
【００５０】
さらに、ゼロクロス点ごとの周期が、自己相関関数に基づき計算した周期に近いほど高得点となるように、スコア付けを行なう。スコア付けを行った後、スコアの高いゼロクロス点から順に、補正対象区間の始点となるゼロクロス点を選択する。このスコア付け処理（図６）および補正対象区間の選択処理（図７）に関しては後でより詳細に説明する。
【００５１】
選ぶゼロクロス点の数は、圧伸すべき時間差と自己相関関数から求めた周期から、補正後の時間差の過不足が０に最も近くなるように決定する。
【００５２】
以上のようにして削除／繰返し区間を選択することによって、入力信号の特性に応じて、自己相関関数から求めた周期に近いゼロクロス区間を選択し、これらの区間を対象として圧伸処理を行なうことができる。
【００５３】
たとえば、上記の圧伸単位時間がＴｄ＝２０ｍｓ、無音区間の処理で２ｍｓの補正が行なえている場合、残りの時間差（ｒ）は１８ｍｓとなる。そして、自己相関関数から計算した周期が１５ｍｓであるので、選ぶべきゼロクロス点は１つだけとなる。このとき、時間軸伸長を行なうものとし、たとえば、図４のようにゼロクロス点Ｃｎが上記のスコア付けに基づく選択処理により選択されたとすれば、ゼロクロス点Ｃｎ〜Ｃｎ＋１までの区間をゼロクロス点Ｃｎ＋１からリピートして（約）１５ｍｓの時間軸伸長が行なわれる。この例では、１回の補正処理で、無音区間で２ｍｓ、有音区間で（約）１５ｍｓの補正が行なえたことになる。
【００５４】
この場合、圧伸補正時間は１７ｍｓ、未補正期間の長さｒは３ｍｓとなり、圧伸単位時間Ｔｄ＝２０ｍｓに対して充分小さいので、この（過）不足分は次回の圧伸処理サイクルで補償する。この処理の細部については後述するが、たとえば、次のような処理を行なう。
【００５５】
上記のように圧伸単位時間Ｔｄ＝２０ｍｓに対して圧伸補正時間は１７ｍｓを得た場合、３ｍｓの時間差ｒが補正されないまま残っている。このような過不足は、次回メモリに読み込む長さを変更することで調整する。この例では、３ｍｓを含めて時間差が２０ｍｓとなるよう、次回の圧伸処理では１７０ｍｓの信号を入力部８２から読み込む。これにより１７ｍｓの時間差が生じ、前回の不足分３ｍｓと合わせて時間差が２０ｍｓに達し、再度補正を開始する条件を満たすことになる。
【００５６】
また、未補正期間の長さｒが極めて大きい場合（たとえば、未補正期間の長さｒが圧伸単位時間Ｔｄ＝２０ｍｓの８０％以上あるような場合）は、周期検出による補正が不可能であるものと判断して後述のような代替補正処理（図８）を行なう。
【００５７】
また、信号の削除／繰返し（挿入）の際、図５に示すようなクロスフェード処理を行なう。図５は時間軸伸長において、タイミングｔｓ〜ｔｅの区間をリピートする場合に、タイミングｔｅまでの区間にタイミングｔｓからの区間を接続する処理を示している。接続点であるタイミングｔｅに近づくにつれて振幅値を漸減させ（フェードアウト）、一方、タイミングｔｓからの信号は振幅値を漸増させ（フェードイン）るように調整した上で、データを重畳する。フェードアウトおよびフェードインの量は、重畳後の振幅が他の区間と著しく（たとえば聴感上）異ならないように制御される。
【００５８】
以上の処理を繰り返すことにより、１回の時間軸圧伸処理を完了する。
【００５９】
次に、上記の時間軸圧伸処理の制御アルゴリズムの１例を図６〜図８に示す。図示の制御手順は、たとえば図９のプロセッサ８１のプログラムとして実装し、プログラムメモリ８４に格納しておくことができる。
【００６０】
図１のステップＳ１〜Ｓ１１の１ループは、上述の「１回」の時間軸圧伸処理に相当するものである。
【００６１】
図１のステップＳ１〜Ｓ２では入力部８２から原信号をメモリ８５に転送する。ここでは、ステップＳ２で目標の転送量の転送を確認できるまでステップＳ１で少量づつ音声データの転送処理を繰り返す。
【００６２】
ステップＳ２で判定される転送量Ｓｉは、上記の圧伸単位時間Ｔｄ、圧伸率ｓｆ（ストレッチファクタ）、および前回のループにおける未補正時間ｒ（後述）により次式により決定される。
【００６３】
Ｓｉ＝（Ｔｄ−ｒ）／ｓｆ                    （１）
初回のループでは、未補正時間ｒは０であるから、たとえば、圧伸単位時間Ｔｄ＝２０ｍｓ、圧伸率ｓｆ＝０．１（１０％）の場合転送量Ｓｉは２００ｍｓとなる。
【００６４】
続いて、ステップＳ３において、無音区間の圧伸を行なう。ステップＳ３では、前述の通り、（無音区間の長さ÷対象区間の長さ）すなわち今回の対象区間中で無音区間が占める比率の分だけ無音区間の削除／繰返しを行う。
【００６５】
次にステップＳ４およびＳ５において、前述の通り、自己相関関数演算に基づき、入力音声データの周期Ｆを検出する処理を行なう。ステップＳ６では、周期Ｆを検出できたか否かを判定し、周期Ｆを検出できなかった場合は、後述の圧伸結果判定処理（ステップＳ１０）に移行する。
【００６６】
周期Ｆを検出できた場合には、ステップＳ７において、圧伸（削除／繰返し）処理の対象となる圧伸区間を選択する処理を行なう。
【００６７】
ステップＳ７の圧伸区間選択処理は図６に示してある。この図６の処理は、入力音声データ中の全てのゼロクロス点に対して検出した周期Ｆに近い程高得点となるようなスコア付けを行なう処理である。
【００６８】
図６の処理は、音声信号が実際に周期的であれば、多少の変動はあれそれに近い周期でゼロクロス点が繰り返し現れるはず、という予測に基づくもので、ゼロクロス点間の長さが検出した周期とどれだけ近いかを示すスコアを区間の始点側のゼロクロス点に付与していくものである。
【００６９】
本実施例では、後述のように周期スコアＰｎ（予測した周期にどれだけ近いか）、および繰り返しスコアＲｎ（そのような周期がいくつ連続しているか）の２つのスコアを用いる。
【００７０】
後述の圧伸処理においては、図６の処理で付与されたスコアの高いものからゼロクロス点が圧伸区間の始点として選択されることになる。
【００７１】
図６のステップＳ７１では、入力音声データ中の自己相関関数の計算区間（上記の例では、自己相関関数演算に用いた入力音声信号末尾の６０ｍｓの区間）のみを検索対象としゼロクロス点を探す。ここでは、前述の通り、正から負（または負から正）へ変化するゼロクロス点を列挙する。通常、入力音声データは振幅値が時間軸に対応した順序でメモリのアドレス空間に格納されているから、実際の演算処理ではこのゼロクロス点の列挙処理は、たとえばゼロクロス点の音声データが格納されているアドレスへのポインタを作業用のテーブルに集めるような処理となる。
【００７２】
続いて、ステップＳ７２以降のループにおいて、列挙した全ゼロクロス点について、入力音声データの末尾から時間軸を遡行する順序で、順次スコア付けの処理を行なう。
【００７３】
ステップＳ７２では、図６の右側に示したように、着目したゼロクロス点Ｃｎと、検出した周期Ｆに近い（２Ｆ範囲内の）次のゼロクロス点Ｃｎｆを同定する（図６の右側はしばらく処理が進んだ状態を示している）。
【００７４】
次にステップＳ７３では、周期Ｆと、区間Ｃｎ〜Ｃｎｆの長さＤから、区間Ｃｎ〜Ｃｎｆの周期スコアＰｎを次式により算出する。
【００７５】
Ｐｎ＝１００−（１００＊｜Ｆ−Ｄ｜／Ｆ）    （２）
この周期スコアは、ＤがＦに一致していれば式（２）の第二項が０になり、１００点満点になる。また、最悪の場合（たとえば着目している点が末尾のゼロクロス点か、または、着目している点から間隔２Ｆ以内にはゼロクロス点が見つからない場合）、着目しているゼロクロス点自身を区間終点として選択し、周期スコアＰｎは０点になる。
【００７６】
ここで算出された周期スコアＰｎは、区間Ｃｎ〜Ｃｎｆのスコアであるが、区間Ｃｎ〜Ｃｎｆを代表するものとしてゼロクロス点Ｃｎに関連付けてメモリ８５上のスコア記憶領域に格納する。
【００７７】
次に、ステップＳ７４、Ｓ７５、Ｓ７７では、周期スコアＰｎに基づき繰り返しスコアを算出する。この繰り返しスコアに基づき、ゼロクロス点が圧伸区間の始点として選択される。
【００７８】
ステップＳ７４では、周期スコアＰｎが所定の閾値以上か否かを判定する。ステップＳ７４が肯定された場合にはステップＳ７７へ、否定された場合には、ステップＳ７５に移行する。この閾値による判定は、たとえば周期スコア９０以上かどうかを判定するものとする。
【００７９】
周期スコアＰｎが所定の閾値以上であればステップＳ７７で繰り返しスコアＲｎを次式により求める。ここで、Ｒｎｆは、区間の末尾であるゼロクロス点Ｃｎｆについて計算した繰り返しスコアである。
【００８０】
Ｒｎ＝Ｒｎｆ＋１          （３）
一方、周期スコアＰｎが所定の閾値に満たない場合には、ステップＳ７５で、繰り返しスコアＲｎは０とする。
【００８１】
ステップＳ７７またはＳ７５で計算された区間Ｃｎ〜Ｃｎｆの繰り返しスコアＲｎは、ゼロクロス点Ｃｎに関連付けてメモリ８５上のスコア記憶領域に格納する。
【００８２】
なお、本実施例のように末尾のゼロクロス点から順にスコア計算を行なうようにすれば、着目している点以降のゼロクロス点については既に繰り返しスコアが計算済みなので、１回のループで周期スコアと繰り返しスコアを計算することができ、再帰的な処理も不要となる利点がある。
【００８３】
次に、ステップＳ７６では、列挙したゼロクロス点を全て処理したか否かを判定し、ゼロクロス点を全て処理した場合にはスコア付け処理を終了し、処理すべきゼロクロス点が残っている場合にはステップＳ７２にループする。
【００８４】
ここで、図６の圧伸区間選択処理（スコア付け処理）の実例を示しておく。
【００８５】
たとえば、検出した入力音声信号の周期が１０ｍｓであったものとし、正から負へのゼロクロス点が（自己相関関数の計算区間先頭を時刻０として）１０ｍｓ、１５ｍｓ、２０ｍｓ、２５ｍｓ、３０ｍｓ、３５ｍｓ、４０ｍｓの各時刻に見つかったとする。このとき、（ゼロクロス点の時刻，間隔が周期と最も近いゼロクロス点の時刻，周期スコア，繰り返しスコア）を末尾から順に計算していくと、次のようになる（末尾から計算順で示す）：
（４０ｍｓ，４０ｍｓ，    ０，０）＊
（３５ｍｓ，４０ｍｓ，  ５０，０）＊
（３０ｍｓ，４０ｍｓ，１００，１）
（２５ｍｓ，３５ｍｓ，１００，１）
（２０ｍｓ，３０ｍｓ，１００，２）
（１５ｍｓ，２５ｍｓ，１００，２）
（１０ｍｓ，２０ｍｓ，１００，３）
ここで、＊を付したゼロクロス点は周期スコアが基準を満たさないので、繰り返しスコアは０になる。それ以外は、周期スコアが１００点満点になるので、「対になるゼロクロス点の繰り返しスコアよりも１大きい値」が繰り返しスコアとなる。なお、実際には、全てのゼロクロス点を処理対象とするため、必ずしも隣接するゼロクロス点同士が対になるとは限らず、このため、区間同士の重なり合いもあり得る。
【００８６】
以上のようにして、入力音声データ中の全てのゼロクロス点に対して検出した周期Ｆに近い程高得点となるようなスコア付けが行なわれる。
【００８７】
再び図１において、上記のステップＳ７の圧伸区間選択処理が終了すると、ステップＳ８において、圧伸区間選択処理で有意な圧伸区間が得られたか否かを判定する。たとえば、ゼロクロス点が１つも検出できないなど、何らかの異常が発生している場合はステップＳ９の圧伸処理を実行することなくステップＳ１０に移行する。
【００８８】
一方、ステップＳ７の圧伸区間選択が正常に行なえた場合は、ステップＳ９の圧伸処理を行なう。ステップＳ９の圧伸処理は図７に示してある。
【００８９】
図７の圧伸処理は、図１ステップＳ７（図６）の圧伸区間選択処理で付与したスコア（繰り返しスコア／周期スコア）の高い候補区間から順に用いて区間の削除またはリピート処理を行なうものである。
【００９０】
図７の圧伸処理に入る段階では、今回の補正処理であとどれだけの圧伸時間すなわち、未補正時間ｒをとれれば圧伸単位時間Ｔｄ（２０ｍｓ）に達するかは判明している（無音区間の処理によりそのうちいくらかの圧伸時間は既に達成している場合がある）ので、図７の処理で実行すべき圧伸処理の回数はあらかじめ計算でき、本実施例では、未補正時間ｒと検出周期Ｆから求められる補正回数（ｒ／Ｆ）だけ、区間の削除またはリピート処理を行なうものとする（ただし、計算通りの圧伸時間が取れるかどうかは判らないので後述の圧伸時間のチェックは行なう）。
【００９１】
補正回数（ｒ／Ｆ）は図７の圧伸処理開始時点でダウンカウンタ（メモリ８５の所定領域あるいはプロセッサ８１のレジスタなどに確保される）に初期値として設定しておき、削除またはリピート処理ごとに当該カウンタをカウントダウンすればよい。
【００９２】
図７のステップＳ９１では、区間開始点であるゼロクロス点Ｃｎに関連付けてメモリ８５上のスコア記憶領域に格納されている繰り返しスコアから最高の繰り返しスコアを有する候補区間を選択する。
【００９３】
ステップＳ９２では、同点の繰り返しスコアを有する区間がスコア記憶領域に格納されているか否か判定する。ここで同点区間があった場合は、周期スコアを用い、周期スコアの高い方の区間を選択する（ステップＳ９６）。
【００９４】
ステップＳ９３では、上記のようにして選択された区間が処理済み区間か否かを判定し、選択された区間が処理済み区間である場合はステップＳ９１に復帰する。
【００９５】
ステップＳ９４では、上記のようにして選択された区間の削除（時間軸圧縮の場合）またはリピート（時間軸伸長の場合）処理、および上述のクロスフェード処理を行なう。
【００９６】
ステップＳ９５では、あらかじめ設定した補正回数（ｒ／Ｆ）、削除またはリピート処理を実行したか否かを判定する。所定の補正回数（ｒ／Ｆ）を実行済みの場合は処理を終了し、まだ補正回数、削除またはリピート処理を実行していない場合はステップＳ９７に移行する。
【００９７】
ステップＳ９７では、圧伸候補区間が残っているか否か判定する。もう圧伸候補区間が残っていなければ処理を終了し、圧伸候補区間が残っていればステップＳ９１に復帰する。
【００９８】
ここで、図７の圧伸処理の実例を示しておく。図６の圧伸区間選択処理で示した例のように、検出周期が１０ｍｓで
（４０ｍｓ，４０ｍｓ，    ０，０）＊
（３５ｍｓ，４０ｍｓ，  ５０，０）＊
（３０ｍｓ，４０ｍｓ，１００，１）
（２５ｍｓ，３５ｍｓ，１００，１）
（２０ｍｓ，３０ｍｓ，１００，２）
（１５ｍｓ，２５ｍｓ，１００，２）
（１０ｍｓ，２０ｍｓ，１００，３）
の各スコアが得られている場合で、かつ無音補正がなく、圧伸単位時間Ｔｄ＝２０ｍの全部が未補正時間ｒとして残っているとすれば、２０ｍｓ÷１０ｍｓ＝２周期分の補正が必要になる。
【００９９】
この場合、最初の候補として、繰り返しスコアの最も高い、時刻１０ｍｓのゼロクロス点から始まる区間を対象として補正を行なうことになる。続いて２番目の候補区間を選ぶが、繰り返しスコアが２のゼロクロス点のうち、１５ｍｓのゼロクロス点から始まる区間は選ぶことができない。この区間の前半、１５〜２０ｍｓが、既に補正した１０〜２０ｍｓの区間と重複するためであるが、１番目の区間の圧伸処理の際に上記の周期Ｆ以内に存在する区間（ゼロクロス点）を全て候補から削除する処理を行なうことにより、除外される。このため、この例では２番目の候補区間は、２０ｍｓから始まる区間となる。
【０１００】
以上のようにして、区間の削除またはリピートによる圧伸処理が行なわれる。
【０１０１】
再び図１のステップＳ１０において、圧伸処理（ステップＳ９、図７）の後、圧伸結果が許容範囲内にあるか否かを判定する。この段階で、未補正時間ｒは圧伸処理（ステップＳ９、図７）で達成した圧伸時間分だけ減少しており、許容範囲内か否かの判定は、たとえばこの現在の未補正時間ｒが圧伸単位時間Ｔｄの８０％未満なら許容、いいかえれば達成した圧伸時間が圧伸単位時間Ｔｄの２０％以上なら許容するものとする。なお、この閾値は本実施例における一例であり、用途によって任意に決定できる。
【０１０２】
圧伸結果が許容範囲内であればステップＳ１１において、圧伸された処理済みの信号を出力部８３に出力する。
【０１０３】
一方、圧伸結果が許容範囲内になければ、ステップＳ１４で代替圧伸処理を行なう。ステップＳ１４の代替圧伸処理は図８に示してある。この処理は、ステップＳ８で圧伸区間が得られていない場合にも行なわれ、繰り返しスコア／周期スコアなどを用いずに行なう、いわば力ずくの処理である。
【０１０４】
図８のステップＳ１４１では、今回入力部８２から読み込んだ区間内の、全ての正から負（または負から正）へ変化するゼロクロス点を列挙する。
【０１０５】
ステップＳ１４２では、２つのゼロクロス点ペアからなる全区間から未補正時間ｒに近い区間を検索する。ここでは、未補正時間ｒきっかりの区間ではなく、未補正時間ｒの所定割合（たとえば少なくとも５０％）を補正できる区間を検索する。
【０１０６】
ステップＳ１４３では、上記条件にみあう補正区間を発見したか否かを判定する。補正区間を発見した場合には、ステップＳ１４４で該当の区間に対して、上述の削除またはリピートおよびクロスフェード処理を実行する。未補正時間ｒは、この削除またはリピート処理で達成された圧伸時間分だけ減じられる。
【０１０７】
一方、ステップＳ１４３で条件にみあう補正区間を発見できなかった場合には、ステップＳ１４６でさらに別の処理を行なう。このステップＳ１４６では、入力信号末尾の長さｒの部分に対して上述の削除またはリピートおよびクロスフェード処理を実行する。
【０１０８】
以上のようにして、実際に達成した圧伸時間が所定の圧伸単位時間に達せず、未補正の圧伸時間が所定以上ある場合、周期検出に依存せずに圧伸区間を選択し圧伸を行なう代替圧伸処理を行なうことによって、毎回、できるだけ圧伸単位時間Ｔｄに近い圧伸時間を達成していくことができる。最終的な未補正時間ｒは、前述のように、次回の処理ループで入力部８２から取り込む信号の長さＳｉを決定するのに用いられる（ステップＳ２）。
【０１０９】
なお、以上の各フローチャートの説明では、削除（時間軸圧縮の場合）またはリピート（時間軸伸長の場合）をまとめて説明しているが、当然ながら時間軸圧縮を行なうのか、あるいは時間軸伸長を行なうのかに応じて削除またはリピートのいずれか一方のみが行なわれるのはいうまでもない。
【０１１０】
上述のように、本実施例によれば、入力音声信号から検出した該音声信号の周期に相当する長さを有する区間を選択し、この区間を削除または挿入の単位として、音声信号を圧縮または伸長するようにしているので、入力音声信号の特性に適した最適な削除／繰返し区間を決定し、これに基づき音声データの削除／繰返しを行なえ、違和感やノイズの少ない音声出力を得られる、という優れた効果がある。
【０１１１】
特に、本実施例では、入力音声信号の周期検出を行ない、この検出周期に最も近い時間的長さを有するゼロクロス区間をスコア演算により選択し、削除／繰返し対象区間とするようにしているので、結果として入力音声信号の特性に適した最適な削除／繰返し区間を選択することができる。
【０１１２】
これにより、人の話し声が音声信号として入力された場合、比較的自然な聞こえ方の出力音声信号を期待できる。一般に、人の話し声は、白色雑音に近い子音と繰り返し波形に近い母音からなり、人が話す速さを変えるときには、母音の長さは変わるが、子音の長さはほとんど変わらないことが知られているが、本実施例の圧伸処理は、周期検出および検出周期に基づく圧伸区間選択処理を行なうようになっているので、専ら母音の区間だけを加工する傾向があり、この結果、人が速度を変えて話したのに近い出力信号を得られる。
【０１１３】
また、前回の圧伸処理において圧伸単位時間に対する過不足量が生じた場合、次回の圧伸処理において入力する音声信号のデータ量を、前記過不足量を補償すべく調節する、という簡略な構成により、効率よく確実に所期の圧伸単位時間を達成できる。
【０１１４】
また、音声信号の削除または挿入の単位として、音声信号のゼロクロス点からゼロクロス点までの区間を用い、検出した周期に近い程高得点となるようなスコアを付与し、各区間のスコアに基づき最適な区間を削除または挿入の対象として選択することにより、効率よく確実に所期の圧伸単位時間を達成でき、出力音声信号のつながりもよくなり、違和感のない音声信号を出力できる。
【０１１５】
また、無音区間の補正を併せて行ない、また、無音区間と有音区間の圧伸補正を所定の割合でバランスよく行なうようにしているので、入力信号のリズムが圧伸によって損なわれることがないという効果もある。
【０１１６】
さらに、実際に達成した圧伸時間が所定の圧伸単位時間に達せず、未補正の圧伸時間が所定以上ある場合、周期検出に依存せずに圧伸区間を選択し圧伸を行なう代替圧伸処理を行なうことによって、毎回、圧伸単位時間に近い圧伸時間を達成でき、効率よく確実に目標の圧伸単位時間を達成できる。
【産業上の利用可能性】
【０１１７】
本発明の方法は、本発明方法を実施するプログラムとしてＲＯＭなどのプログラムメモリに格納して専用の時間軸圧伸装置ハードウェアに組み込んでおくことができる。また、本発明の方法は、ＰＣやワークステーションなどの汎用のハードウェアにおいても実施でき、その場合、本発明方法を実施するプログラムとしてＣＤ−ＲＯＭや、ＭＯ、各種メモリカードなどの記憶媒体を経由して当該ハードウェアにインストール（あるいはさらにアップデート）することができ、また、ネットワーク経由などによりインストール（あるいはさらにアップデート）するような構成も可能である。
【図面の簡単な説明】
【０１１８】
【図１】本発明の音声信号の時間軸圧伸処理全体の流れを示したフローチャート図である。
【図２】本発明の音声信号の時間軸圧伸処理において計算される自己相関関数の例を示した説明図である。
【図３】本発明の音声信号の時間軸圧伸処理の対象となる音声信号の説明図である。
【図４】本発明の音声信号の時間軸圧伸処理の様子（伸長の場合）を示した説明図である。
【図５】本発明の音声信号の時間軸圧伸処理で行なわれるクロスフェード処理を示した説明図である。
【図６】本発明の音声信号の時間軸圧伸処理で行なわれる圧伸区間選択処理を示したフローチャート図である。
【図７】本発明の音声信号の時間軸圧伸処理で行なわれる圧伸処理を示したフローチャート図である。
【図８】本発明の音声信号の時間軸圧伸処理で行なわれる代替圧伸処理を示したフローチャート図である。
【図９】本発明の時間軸圧伸処理を行なうのに必要なハードウェア構成を示すブロック図である。
【符号の説明】
【０１１９】
８１  プロセッサ
８２  入力部
８３  出力部
８４  プログラムメモリ
８５  メモリ
【図１】
2007094004.tif 000003
【図２】
2007094004.tif 000004
【図３】
2007094004.tif 000005
【図４】
2007094004.tif 000006
【図５】
2007094004.tif 000007
【図６】
2007094004.tif 000008
【図７】
2007094004.tif 000009
【図８】
2007094004.tif 000010
【図９】
2007094004.tif 000011