(57)【特許請求の範囲】
【請求項１】
複数の区間からなる元のオーディオ波形信号の前記区間の境界となる時間軸上の位置を示す１つ以上のマーク情報と、前記元のオーディオ波形信号を複数の周波数帯域に分割した分割帯域ごとの波形信号の周波数情報及び振幅値情報とを、元のオーディオ波形信号の時間軸上の位置と対応して記憶し、前記分割帯域ごとの波形信号には、互いに異なるループ区間が設定されている波形データ記憶手段と、
前記元のオーディオ波形信号の時間軸上の位置を表わし、所望の速度で時間的に変化する第１の再生位置情報を発生する第１の再生位置情報発生手段と、
前記周波数情報及び振幅値情報の時間軸上の位置を表わし、前記所望の速度と異なる速度で時間的に変化する第２の再生位置情報を、前記分割帯域の波形信号ごとに異ならせて発生する第２の再生位置情報発生手段と、
第２の再生位置情報に従って、前記波形データ記憶手段から前記周波数情報及び振幅値情報を読み出し、その読み出された周波数情報及び振幅値情報に従って再生オーディオ波形信号を合成する波形信号合成手段と、
前記第１の再生位置情報が表わす位置が、前記波形データ記憶手段の前記マーク情報の表わす位置に達する前に、前記第２の再生位置情報が前記ループ区間の終端に達した分割帯域についてそのループ区間を繰り返し読み出すように前記第２の再生位置情報を制御し、前記第１の再生位置情報が表わす位置が、前記波形データ記憶手段の前記マーク情報の表わす位置に達したとき、このマーク情報の表わす位置に対応する第２の再生位置情報に変更するように、前記第２の再生位置情報を制御する制御手段とを、
具備する波形再生装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、いわゆる位相ボコーダを使用して時間軸の圧縮伸長を行う波形再生装置に関する。
【０００２】
【従来の技術】
一般に、位相ボコーダでは、オーディオ波形信号を、この信号の概略基本周期を帯域幅に持つ複数の周波数帯域に分割し、各帯域の信号をそれぞれの帯域の中心の複素周波数で乗算して、振幅値と瞬間周波数とに分析し、これをメモリに記憶させる。各帯域ごとに、分析された瞬間周波数と、対応する帯域の中心周波数との和の周波数で発振した正弦または余弦発振波を、分析された振幅値で振幅変調する。このようにして各帯域ごとに発生した信号を全部混合することによって元のオーディオ波形信号を再現する。
【０００３】
このような位相ボコーダを使用して、元のオーディオ波形信号の時間軸を圧縮及び伸長することが提案されている。例えば、上記振幅値情報と瞬間周波数情報を時間軸上で圧縮または伸長し、この圧縮または伸長された振幅値情報と瞬間周波数情報とを用いて、元のオーディオ波形信号を再合成することによって、元のオーディオ波形信号を時間軸上で圧縮または伸長することが提案されている。
【０００４】
このような圧縮及び伸長では、オーディオ波形信号全体を時間軸上で一様に圧縮または伸長している。従って、元のオーディオ波形信号が、例えば楽音信号であるとすると、それのアタック部も圧縮伸長されることになる。この場合、楽音としては非常に不自然なものとなることがあった。
【０００５】
これを防止するために、各帯域の振幅値情報と瞬間周波数情報自体の圧縮伸長は行わずに、通常通りに振幅値情報と瞬間周波数情報に基づいて波形再生をおこない、時間軸圧縮する場合には、オーディオ波形信号が音声の場合、或る音節に対して、設定された圧縮時間が経過した段階で、次の音節の波形再合成に移行し、伸長する場合には、各帯域ごとに振幅値情報と瞬間周波数情報との繰り返し期間を予め定めておき、振幅値情報と瞬間周波数情報との或る音節の繰り返し期間の読み出しが終了した後、その繰り返し期間の振幅値と瞬間周波数情報とを繰り返し使用して、波形再合成を行い、設定された伸長時間が経過するまで或る音節の波形再合成を行うことが考えられる。
【０００６】
【発明が解決しようとする課題】
しかし、このような繰り返し再生を行う場合、各帯域での繰り返し期間の周期や、繰り返し期間の位置が一致するとは限らず、次の音節に進むタイミングが一致せず、再合成音が不自然になる。
【０００７】
本発明は、位相ボコーダを利用してオーディオ波形信号の時間軸圧縮伸長を行う場合で、かつ各帯域の波形データの再生位置に誤差が生じるような再生を行う場合に、波形データの所定位置での誤差を補正するようにして、合成波形の音質を改善する波形再生装置を提供することを目的とする。
【０００８】
【課題を解決するための手段】
本発明の波形再生装置は、複数の区間からなる元のオーディオ波形信号の前記区間の境界となる時間軸上の位置を示す１つ以上のマーク情報と、前記元のオーディオ波形信号を複数の周波数帯域に分割し、これら分割帯域ごとの波形信号の周波数情報（瞬間周波数情報）及び振幅値情報とを、記憶する波形データ記憶手段を有している。マーク情報は、例えば元のオーディオ波形信号が音声の場合、各音節の先頭に設けることができる。また、元のオーディオ波形信号が楽音信号の場合、アタック部、定常部、減衰部及び無音部等の各境界に設けることができる。各帯域の周波数情報及び振幅値情報は、元のオーディオ波形信号を適切なサンプリング周波数でサンプリングして得た各サンプリング値ごとに取得されている。即ち、元のオーディオ波形信号の時間軸上の位置に対応して取得されている。前記元のオーディオ波形信号の時間軸上の位置、例えば上記の各サンプリング値の位置を表わし、所望の速度で時間的に変化する第１の再生位置情報を発生する第１の再生位置情報発生手段が設けられている。この速度は、時間圧縮する場合には元のオーディオ波形信号を時間軸の圧縮伸長を行わない場合よりも速くなり、時間伸長する場合には遅くなる。前記各帯域の周波数情報及び振幅値情報の時間軸上の位置を表わし、前記所望の速度と異なる速度で時間的に変化する第２の再生位置情報を発生する第２の再生位置情報発生手段も設けられている。第２の再生位置情報の速度は、一定の速度とすることができ、例えば、元のオーディオ波形信号の時間軸の圧縮伸長を行わない場合の速度とすることができる。第２の再生位置情報に従って、前記波形データ記憶手段から前記周波数情報及び振幅値情報を読み出し、その読み出された周波数情報及び振幅値情報に従って再生オーディオ波形信号を合成する波形信号合成手段が設けられている。第２の再生位置情報は、各帯域毎にそれぞれ独立して設けるようにしている。前記第１の再生位置情報が表わす位置が、前記波形データ記憶手段の前記マーク情報の表わす位置に達する前に、前記第２の再生位置情報が前記ループ区間の終端に達した分割帯域についてそのループ区間を繰り返し読み出すように前記第２の再生位置情報を制御し、前記第１の再生位置情報が表わす位置が、前記波形データ記憶手段の前記マーク情報の表わす位置に達したとき、このマーク情報の表わす位置に対応する第２の再生位置情報に変更するように前記第２の再生位置情報を制御する制御手段が、設けられている。
【０００９】
本発明の波形再生装置では、第１の再生位置情報は、時間軸の圧縮を行う場合には、元の波形信号をそのまま再生する場合よりも速い速度で変化し、伸長を行う場合には、遅い速度で変化する。一方、第２の再生位置情報は、第１の再生位置情報と異なる速度で各帯域の振幅値情報及び周波数情報を読み出しているので、第１の再生位置情報が指定している時間軸上の位置と、第２の再生位置情報が指定している振幅値情報及び周波数情報に対応する波形の時間軸の位置とには、ずれ（偏差）が生じる。そして、第１の再生位置情報がマーク情報が表わす位置に到達したとき、即ち、所定の時間軸圧縮または伸長が行われた時点で、第１の再生位置情報と第２の再生位置情報との偏差が零になるように、制御手段が第２の再生位置情報を制御しているので、第２の再生位置情報は、マーク情報に対応する各帯域の周波数情報と振幅値情報とに対応する位置に修正され、以後の波形再生は、マーク情報に対応する位置以降の各帯域の周波数情報と振幅値情報とに基づいて行われる。
【００１０】
なお、時間軸の伸長を行う場合、第１の再生位置情報が、まだマーク情報の位置に到達する前に、第２の位置情報によって、マーク情報の位置に対応する周波数情報及び振幅値情報まで読み出してしまうことがある。そこで、マーク情報の位置に対応する周波数情報及び振幅値情報の記憶されている位置よりも前に第２の再生位置情報に対して繰り返し期間を定めておき、第１の再生位置情報がマーク情報の位置に到達する前には、この繰り返し期間の周波数情報と振幅値情報とを繰り返し読み出すことを行うことができる。この場合、第１の再生位置情報がマーク情報の位置に到達すると、即座に第２の再生位置情報がマーク情報に対応する位置に修正される。また、時間軸の圧縮を行う場合、第１の再生位置情報がマーク情報の位置に到達したとき、第２の再生位置情報がマーク情報の位置に対応する周波数情報及び振幅値情報の記憶位置を指定していないことがある。この場合にも、直ちに第２の再生位置情報は、マーク情報の位置に対応する周波数情報と振幅値情報の記憶位置に修正される。
【００１１】
【発明の実施の形態】
本発明の１実施の形態の波形再生装置は、図１に示すように、波形メモリ２、ＤＳＰ４とを有し、これらが位相ボコーダとして機能する。この位相ボコーダは、波形メモリ２に記憶されている波形データに基づいて再生オーディオ波形信号を合成して、Ｄ／Ａ変換器５に供給する。ＤＳＰ４は、ＲＯＭ８に記憶されたプログラムに従って動作する。このプログラムは、ＣＰＵ６を介してＤＳＰ２に転送される。
【００１２】
ＣＰＵ６は、ＲＯＭ８に記憶されているプログラムに従って、操作子１０の操作状態を検出し、検出結果に従ってＤＳＰ４を制御する。検出した操作子１０の操作状態や、操作子１０の操作状態に基づくＤＳＰ４の制御状態を、表示装置１２にＣＰＵ６は表示する。操作子１０には、再生モードを設定する再生モードスイッチ、圧縮または伸長とその程度を表すパラメータを設定する圧縮伸長操作子、発音開始及び終了を指示する発音開始操作子等が設けられている。また、ＲＡＭ１４は、ＣＰＵ６のワーキングメモリとして使用され、後述する各種レジスタやフラグが設定される。
【００１３】
波形メモリ２には、振幅値情報と瞬間周波数（以下、周波数と称する）情報とが、記憶されている。これら情報は、或る波形データ信号、例えば楽音の１フレーズを所定のサンプリング周波数でサンプリングした各サンプリング値を、この波形データ信号の概略基本周期を帯域幅に持つ複数、例えばｍ個の周波数帯域に分割し、各帯域の信号をそれぞれの帯域の中心の複素周波数で乗算して得たものである。
【００１４】
ＤＳＰ４は、図２に示すように、各帯域ごとにそれぞれ設けられた時間軸変換部４ａ−１乃至４ａ−ｍと、余弦発振器４ｂ−１乃至４ｂ−ｍと、乗算器４ｃ−１乃至４ｃ−ｍとして機能する。さらに、ＤＳＰ４は、各乗算器４ｃ−１乃至４ｃ−ｍの各出力を加算する加算器４ｄと、この加算器４ｄの加算出力にゲート信号を乗算する乗算器４ｅとしても機能する。加算器４ｄが合成器として、乗算器４ｅがゲートとして機能する。
【００１５】
各時間軸変換部４ａ−１乃至４ａ−ｍは、これらがそれぞれ対応する帯域の振幅値情報と周波数情報とを、波形メモリ２から制御部４ｆを介して入力し、対応する帯域の中心周波数と入力された周波数情報が表す周波数との和の周波数で、対応する余弦発振器４ｂ−１乃至４ｂ−ｍを発振させる。この余弦発振器４ｂ−１乃至４ｂ−ｍからの余弦発振波を、対応する乗算器４ｃ−１乃至４ｃ−ｍにおいて、対応する時間軸変換部４ａ−１乃至４ａ−ｍからの振幅値によって振幅変調する。このようにして、各帯域ごとに発生した信号を加算器４ｄで合成することによって、元のオーディオ波形信号を再現できる。なお、ゲート４ｅの開閉状態を制御するゲート信号は、制御部４ｆに含まれているゲート信号発生部４ｇから供給される。ゲート信号は、例えば０から１の間の値をとり、立上のときには、０から直ちに１となるが、立ち下げのときには１から徐々に０に向かって減少する。
【００１６】
波形メモリ２には、上述した各振幅値情報及び周波数情報を含めて、各種パラメータが記憶されている。即ち、図４（ａ）に示すように、波形メモリ２は、波形情報領域、バンド波形情報領域及びバンド波形データ領域を有している。
【００１７】
同図（ｂ）に示すように、波形情報領域には、ＷａｖｅＳｔａｒｔ、ＷａｖｅＥｎｄ、Ｍａｒｋ（１）、Ｍａｒｋ（２）、Ｍａｒｋ（３）、Ｍａｒｋ（４）が記憶されている。Ｗａｖｅｓｔａｒｔは、図３の上部に示す原オーディオ波形信号を所定の周波数でサンプリングして、波形メモリ２に記憶させたとしたなら（実際には波形メモリ２には記憶させていない）、そのスタートアドレスとなるアドレスであり、ＷａｖｅＥｎｄは、同じくエンドアドレスとなるアドレスである。
【００１８】
Ｍａｒｋ（１）乃至Ｍａｒｋ（４）は、同じく原オーディオ波形信号の各サンプリング値を記憶させたとしたなら、例えば楽音の場合、アタック部、定常部、減衰部、無音部のような各区間の境界、音声信号の場合、各音節のような各区間の境界となる部分のアドレスである。これらＭａｒｋ（１）乃至Ｍａｒｋ（４）がマーク情報に相当する。なお、この実施の形態では、原オーディオ波形信号が３つの区間からなる例を示したので、マーク情報は４つであるが、実際には原オーディオ波形信号の区間数に応じてマーク情報の数は増減する。
【００１９】
図４（ｃ）に示すように、バンド波形データ領域は、原オーディオ波形信号の概略基本周期を帯域幅に持つｍ個の周波数帯域ごとに設けられており、同図（ｄ）に示すように、各帯域ごとに、上述した振幅値情報と周波数情報とが記憶されている。これら振幅値情報と周波数情報とは、同図（ｅ）に示すように、原オーディオ波形信号の各サンプリング値ごとに記憶されている。
【００２０】
バンド波形情報領域も、同図（ｆ）に示すようにｍ個の帯域に対応して設けられており、各帯域ごとに同図（ｇ）に示すようにｗａｖｅ＿ｓｔａｒｔ、ｗａｖｅ＿ｅｎｄ、ｍａｒｋ（１）、ａｌｔＳ（１）、ａｌｔＥ（１）、ｍａｒｋ（２）、ａｌｔＳ（２）、ａｌｔＥ（２）、ｍａｒｋ（３）、ａｌｔＳ（３）、ａｌｔＥ（３）、ｍａｒｋ（４）が記憶されている。
【００２１】
ｗａｖｅ＿ｓｔａｒｔは、各サンプリング値の各帯域における振幅値情報と周波数情報が記憶されているアドレスのうちスタートアドレスを表し、ｗａｖｅ＿ｅｎｄは、エンドアドレスを表している。ｍａｒｋ（１）乃至ｍａｒｋ（４）は、上述した各区間の境界Ｍａｒｋ（１）乃至Ｍａｒｋ（４）に対応し、これらの位置にあるサンプリング値の振幅値情報と周波数情報とが記憶されているアドレスを表している。
【００２２】
ａｌｔＳ（１）乃至ａｌｔＳ（３）は、各区間におけるループ期間の開始点における振幅値情報と周波数情報とが記憶されているアドレスを表し、ａｌｔＥ（１）乃至ａｌｔＥ（３）は、ループ期間の終了点における振幅値情報と周波数情報とが記憶されているアドレスを表す。ループ期間は、後述するように時間軸の伸長を行った場合、例えばループ期間の最終アドレスａｌｔＥ（１）乃至ａｌｔＥ（３）の振幅値情報と周波数情報まで読み出して、波形合成を行ってもまだ伸長が終了しない場合に、このループ期間の振幅値情報と周波数情報とによって波形合成を行うためのものである。
【００２３】
なお、この実施の形態では、区間数を３としたので、ｍａｒｋの数が４、ａｌｔＳの数が３、ａｌｔＥの数が３であるが、区間数が３とは異なった場合には、これらの数も区間数に応じて変化する。また、ループ期間の位置及び長さ（周期）は、図３から明らかなように、各帯域ごとに異なっている。
【００２４】
次に、図３を参照しながら、この波形再生装置の概略の動作について、説明する。この波形再生装置では、ＤＳＰ２において原オーディオ波形信号の各サンプリング点のアドレス（第１の再生位置情報）を発生するアドレスカウンタＳＰＨＡＳＥと、各帯域の周波数情報及び振幅値情報が記憶されているアドレス（第２の再生位置情報）を発生するｍ個のアドレスカウンタａｄｄｒとを使用する。
【００２５】
ＳＰＨＡＳＥの値は、ＷａｖｅＳｔａｒｔから増加していく。その増分ｔｃｏｍｐは、操作子１０に含まれている圧縮伸長操作子によって設定された圧縮または伸長の程度に応じて設定される。例えば圧縮する場合には、増分ｔｃｏｍｐは、圧縮伸長を行わない場合の増分、例えば１よりも大きな値とされ、伸長する場合には、圧縮伸長を行わない場合の増分１よりも小さな値とされる。また、各ａｄｄｒは、ｍａｒｋ（１）から増加していくが、その増分ｒａｔｅは、ＳＰＨＡＳＥの増分ｔｃｏｍｐと異なり、例えば圧縮伸長を行わない通常の再生の場合の増分である１である。なお、増分ｒａｔｅは、操作子によって任意に設定することができるようにしてもよい。
【００２６】
各ａｄｄｒの値に従って、波形メモリ２から各帯域の周波数情報及び振幅値情報が読み出され、対応する時間軸変換部４ａ−１乃至４ａ−ｍに供給され、波形の再合成が行われる。
【００２７】
原オーディオ波形信号のサンプリング周期と同じ周期ごとに、ＳＰＨＡＳＥと各ａｄｄｒとが、アドレスの発生を行うと、例えば、ｔｃｏｍｐが１より大きく、即ち、時間圧縮の場合、ＳＰＨＡＳＥがＭａｒｋ（２）を指定したとき、各ａｄｄｒは、まだＭａｒｋ（２）に対応するｍａｒｋ（２）の位置には到達していない。この時、各ａｄｄｒとＳＰＨＡＳＥとの値には偏差が生じている。この偏差を０にするように、各ａｄｄｒの値がｍａｒｋ（２）に強制的に修正される。これによって、Ｍａｒｋ（２）から始まる区間について、これらに対応した各帯域の周波数情報及び振幅値情報に基づいて時間圧縮されたオーディオ波形信号が再合成され、再合成音が不自然になることはない。以下、同様にＭａｒｋ（２）以降の区間についても時間軸の圧縮された波形の再合成が行われる。
【００２８】
同様にｔｃｏｍｐが１よりも小さい場合、即ち時間軸の伸長が行われた場合、仮に各ａｄｄｒがｍａｒｋ（２）に到達しても、ＳＰＨＡＳＥはＭａｒｋ（２）には到達していない。そこで、各帯域ごとにループ期間を設け、各ａｄｄｒの値が各ループ期間の終端部のアドレスａｌｔ＿Ｅ（各帯域のループ期間の終了点を総称して、ａｌｔ＿Ｅと記載する。）に到達すると、ここからａｌｔ＿Ｓ（各帯域のループ期間の始端部を総称して、ａｌｔ＿Ｓと記載する。）まで、逆方向に周波数情報と振幅値情報とを読み出し、波形の再生を行う。ａｌｔ＿Ｓまで戻っても、ＳＰＨＡＳＥがＭａｒｋ（２）に到達していない場合、ａｌｔ＿Ｅに向かって順方向に周波数情報と振幅値情報とを読み出し、波形の再合成を行う。
【００２９】
このようなループ期間での読み出しを行っている間に、ＳＰＨＡＳＥがＭａｒｋ（２）に到達すると、このときもＳＰＨＡＳＥの値と各ａｄｄｒの値との間には偏差が存在する。そこで、この偏差を０にするように、各ａｄｄｒの値がＭａｒｋ（２）に対応するｍａｒｋ（２）に強制的に修正される。これによって、Ｍａｒｋ（２）から始まる区間の時間伸長された波形の再合成が、Ｍａｒｋ（２）に対応する各帯域のｍａｒｋ（２）の周波数情報及び振幅値情報に基づいて開始される。従って、Ｍａｒｋ（２）から始まる区間の開始のタイミングが、各帯域とも一致しており、再合成音が不自然になることはない。Ｍａｒｋ（２）以降の区間でも同様に時間軸の伸長が行われる。
【００３０】
このような圧縮伸長の場合、各ａｄｄｒの増分ｒａｔｅが１であるので、オーディオ波形信号の再合成は、このオーディオ波形信号の各サンプリング値をサンプリング周波数で読み出すことによって行われている。従って、例えば、元のオーディオ波形信号が楽音信号の場合、アタック部が圧縮伸長されず、不自然な楽音となることはない。
【００３１】
以下、ＤＳＰ２及びＣＰＵ６の動作を詳細に説明する。図５は、ＣＰＵ６のメインルーチンを示したものである。ＣＰＵ６は、主に操作子１０の状態を検出し、この検出状態に応じて各種設定を行うと共に、表示装置１２に検出状態及び設定状態を表示する。
【００３２】
まず、操作子１０に含まれている再生モードスイッチが変化しているか否かを判断する（ステップＳ２）。再生モードはモード１とモード２とがある。モード２は、上述したような原オーディオ波形信号の新たな区間の再合成を開始するとき、各帯域の周波数情報及び振幅値情報のタイミングを一致させるモードであり、モード１は、このようなタイミングの修正を行わないモードである。
【００３３】
再生モードスイッチに変化があると判断されると、変化した再生モードスイッチはモード１であるかモード２であるかを判断する（ステップＳ４）。再生モードスイッチがモード１であると、再生モードを１に設定し（ステップＳ６）、再生モードスイッチがモード２であると、再生モードを２に設定し（ステップＳ８）、表示装置１２における再生モードの表示を、設定されたモードに変更する（ステップＳ１０）。
【００３４】
ステップＳ１０に続いて、或いはステップＳ２において再生モードスイッチに変化がないと判断されたとき、操作子１０に含まれている圧縮伸長操作子が変化しているか判断する（ステップＳ１２）。圧縮伸長操作子に変化があると判断されると、圧縮伸長操作子の操作量に対応して圧縮伸長パラメータ値ｔｃｏｍｐを設定する（ステップＳ１４）。次に、表示装置１２におけるｔｃｏｍｐの値の表示を更新する（ステップＳ１６）。
【００３５】
ステップＳ１６に続いて、或いはステップＳ１２において圧縮伸長操作子に変化が無いと判断されると、操作子１０に含まれている発音開始操作子が変化しているか否かを判断する（ステップＳ１８）。この操作子が変化していると判断されると、発音開始操作子の変化がオフからオンか（発音の開始か）或いはオンからオフか（発音の停止か）の判断が行われる（ステップＳ２０）。オフからオンの変化であると判断されると、ＤＳＰ発音開始処理を実行するように、ＤＳＰ２に指示を送る（ステップＳ２２）。同様にオンからオフの変化であると判断されると、ＤＳＰ発音停止処理を実行するように、ＤＳＰ２に指示を送る（ステップＳ２４）。これによって、メインルーチンが終了する。なお、メインルーチンは、所定周期ごとに繰返し実行される。
【００３６】
ＤＳＰ発音開始処理では、初期設定を行う（ステップＳ２６）。即ち、図６に示すように、原オーディオ波形信号の各サンプル値のアドレスを指定するアドレスカウンタＳＰＨＡＳＥの値を、スタートアドレスであるＷａｖｅＳｔａｒｔに設定する。次に、現在ＳＰＨＡＳＥが表しているアドレスが属する区間の先頭のマーク情報を記憶するレジスタｍｋの値をＭａｒｋ（１）にする。そして、初期設定以後にはアドレスカウンタＳＰＨＡＳＥが現在発生しているアドレスが属する区間の１つ前の区間の先頭を表すマーク情報を記憶するレジスタｍｋ＿ｏｌｄの値をＭａｒｋ（１）とする。次に各マーク情報を指定するためのカウンタｎの値を１とする。発音が開始されているか否かを表すフラグｋｅｙ＿ｏｎを１に設定し、発音が開始されていることを示す。そして、ループ期間の振幅値情報と周波数情報を読み出すときの方向を指定するフラグｄｉｒを順方向に設定する。
【００３７】
そして、ＤＳＰ２の割込みを許可する（ステップＳ２８）。これによって、ＤＳＰ発音開始処理ルーチンは終了する。
【００３８】
ＤＳＰ発音停止処理ルーチンは、図７に示すように、発音を停止させるために、ｋｅｙ＿ｏｎを０に設定する（ステップＳ３０）。次に、ゲート信号発生部４ｆにゲート信号の立ち下げを指示する（ステップＳ３２）。これによって、ゲート４ｅの出力が徐々に小さくなり、消音される。
【００３９】
ＤＳＰの割り込み処理ルーチンは、原オーディオ波形信号のサンプリング周波数に等しい周波数のクロック信号が、図示しないクロック発生器によって発生されるごとに実行される。このルーチンでは、図８に示すように、まず制御メイン処理を実行する（ステップＳ３４）。制御メイン処理については、後述する。
【００４０】
次に各帯域を指定するためのカウンタｊの値を１とし（ステップＳ３６）、後述するように、このカウンタｊによって指定された帯域の時間軸変換処理を行う（ステップＳ３８）。この時間軸変換処理についても後述する。カウンタｊの値がｍより大きいか判断し（ステップＳ４０）、ｍより大きければ、割込み処理を終了し、ｍより大きくなければ、カウンタｊの値を１つ増加させ、ステップＳ３８を実行する。
【００４１】
ＤＳＰ制御メイン処理は、クロック信号が発生するごとに、主にＳＰＨＡＳＥの値をｔｃｏｍｐずつ進めるためのものである。図９に示すように、ＤＳＰ制御メイン処理では、アドレスカウンタＳＰＨＡＳＥがＭａｒｋ（１）乃至（４）のいずれかに到達したとき、即ち各区間の先頭に到達したときのみに、１とされるフラグｓｙｌｌ＿ｆｌａｇが０以外であるか、まず判断する（ステップＳ４２）。０以外であれば、これを０とする（ステップＳ４４）。これに続いて、またはステップＳ４２においてｓｙｌｌ＿ｆｌａｇが０以外でないと、即ち０であると判断された場合、アドレスカウンタＳＰＨＡＳＥの値が、ｍｋ以上であるか判断する（ステップＳ４６）。当初、ＤＳＰ発音開始処理において、ＳＰＨＡＳＥをＷａｖｅＳｔａｒｔに、ｍｋをＭａｒｋ（１）に設定しているので、始めてステップＳ４６が実行されたときには、アドレスカウンタＳＰＨＡＳＥの値が、ｍｋ以上であると判断される。
【００４２】
アドレスカウンタＳＰＨＡＳＥの値が、ｍｋ以上であると、ＳＰＨＡＳＥがＷａｖｅＥｎｄ以上であるか、即ち区間の最終アドレスを指定したか判断する。最終アドレスを指定していない場合、ｓｙｌｌ＿ｆｌａｇを１とし、カウンタｎの値を１つ増加させる（ステップＳ５０）。即ち、ＳＰＨＡＳＥが或る区間の先頭に位置していることを表す。
【００４３】
次に、ｍｋをＭａｒｋ（ｎ）に更新する（ステップＳ５２）。これによって、ｍｋの値は、次の区間の先頭を表す。ゲート信号発生部４ｇにゲート信号の立上を指示する（ステップＳ５４）。これによって、ゲート４ｅから再生波形の出力が可能となる。
【００４４】
そして、ｋｅｙ＿ｏｎが０であるか判断する（ステップＳ５６）。ｋｅｙ＿ｏｎは上述したＤＳＰ発音停止処理が実行されたときのみに０となる。ｋｅｙ＿ｏｎが０でないと、アドレスカウンタＳＰＨＡＳＥの値をｔｃｏｍｐだけ増加させ（ステップＳ５８）、この制御メイン処理を終了する。
【００４５】
ｋｅｙ＿ｏｎが０であると、ゲート信号が０になっているか判断する（ステップＳ６０）。ゲート信号は立ち下げを指示された後、徐々に低下していくので、実際にゲート信号が０となってゲート４ｅから出力が発生していないかどうか判断している。ゲート信号が０でないと判断されると、ステップＳ５８が実行される。ゲート信号が０であると、ＤＳＰの割り込み処理を停止させ（ステップＳ６２）、リターンする。従って、以後、再び割込みが許可されるまで、クロック信号が発生しても、割込み処理は実行されない。
【００４６】
ステップＳ４８において、ＳＰＨＡＳＥがＷａｖｅＥｎｄ以上であると判断されると、直ちにステップＳ６２が実行される。
【００４７】
ステップＳ４６において、ＳＰＨＡＳＥがｍｋ以上でないと判断されると、即ち次の区間の先頭に到達していないと判断されると、ＳＰＨＡＳＥの値がｍｋ−α以上か判断される。即ち、次の区間の先頭から予め定めたアドレス距離αだけ手前のアドレスにＳＰＨＡＳＥが到達しているか判断する（ステップＳ６４）。αは、各区間の終了間際に、再生合成音の消音を開始する位置を決定するためのものである。ＳＰＨＡＳＥの値がｍｋ−α以上でないと、ステップＳ５６、Ｓ６０、Ｓ５８またはＳ５６、Ｓ６０、Ｓ６２が実行される。
【００４８】
ＳＰＨＡＳＥの値がｍｋ−α以上であると、ｍｋの値がｍｋ＿ｏｌｄに等しくないか判断する（ステップＳ６６）。或る区間の先頭のアドレスをＳＰＨＡＳＥが指定したとき、ステップＳ５２によってｍｋは次の区間の先頭のアドレスに更新されているので、初めてステップＳ６６が実行されるときには、ｍｋはｍｋ＿ｏｌｄと不一致である。従って、ゲート信号発生部４ｇにゲート信号の立ち下げを指示する（ステップＳ６８）。そしてｍｋ＿ｏｌｄをｍｋの値に更新し（ステップＳ７０）、ステップＳ５６以降を実行する。従って、二度目以降にステップＳ６６が実行される場合、ステップＳ６６から直ちにステップＳ５６以降が実行される。
【００４９】
このようにＤＳＰ制御メインルーチンでは、クロック信号が発生するごとにＳＰＨＡＳＥをｔｃｏｍｐずつ増加させ、ＳＰＨＡＳＥが各区間の先頭のアドレスを指定したときだけ、ｓｙｌｌ＿ｆｌａｇを１とし、ゲート４ｅから出力可能とし、ＳＰＨＡＳＥがｍｋ−α以上のアドレスを初めて指定したとき、ゲート信号の立ち下げを開始している。
【００５０】
図１０に示すように、ＤＳＰ時間軸変換処理では、設定されている再生モードが１であるか２であるかを判断する（ステップＳ７２）。再生モード１である場合には、ｊカウンタによって指定された帯域のａｄｄｒをｔｃｏｍｐだけ増加させ（ステップＳ７４）、ａｄｄｒに従って振幅値情報と周波数情報とを読み出し、対応する時間軸変換部に供給する（ステップＳ７６）。
【００５１】
再生モード２が設定されている場合には、ｓｙｌｌ＿ｆｌａｇが１であるか、即ち、いずれかの区間の先頭のアドレスを指定しているか判断する（ステップＳ７８）。いずれかの区間の先頭のアドレスを指定している場合、その区間の先頭のアドレスをａｄｄｒに設定するため、ａｄｄｒをｍａｒｋ（ｎ−１）に設定する（ステップＳ８０）。
【００５２】
これは、ＤＳＰ制御メイン処理のステップＳ５０においてｓｙｌｌ＿ｆｌａｇを１としたときに（ＳＰＨＡＳＥが原オーディオ波形信号のいずれかの区間の先頭に到達したとき）、ｎを１進めているので、ａｄｄｒをｍａｒｋ（ｎ）とすると、ＳＰＨＡＳＥが指定している区間の次の区間の先頭の振幅値情報と周波数情報とが記憶されているアドレスを指定することになる。従って、ｍａｒｋ（ｎ−１）として、ＳＰＨＡＳＥが指定している原オーディオ波形信号の区間の先頭に振幅値情報と周波数情報とが記憶されているアドレスを指定させている。
【００５３】
このようにＳＰＨＡＳＥが或る区間の先頭を指定したとき、ａｄｄｒもその区間の先頭の振幅値情報と周波数情報とが記憶されているアドレスに強制的に修正されているので、時間軸の圧縮、伸長いずれが行われている場合でも、新しい区間の再生合成は、その区間の先頭のサンプリング値の各帯域の周波数情報と振幅値情報とによって開始される。
【００５４】
次に、ループ期間の先頭のアドレスを記憶するａｌｔ＿ｓｔａｒｔの値をｊカウンタが指定する帯域のａｌｔＳ（ｎ−１）に、ループ期間の終了端のアドレスを記憶するａｌｔ＿ｅｎｄの値をｊカウンタが指定する帯域のａｌｔＥ（ｎ−１）に更新する（ステップＳ８２）。これもａｄｄｒが指定するアドレスが属する区間のループ期間の先頭と終了点とを記憶するためである。次に、ｄｉｒを順方向に設定し（ステップＳ８４）、ステップＳ７６を実行する。
【００５５】
ステップＳ７８において、ｓｙｌｌ＿ｆｌａｇが１でないと判断されると、ＳＰＨＡＳＥは区間の先頭を指定していないので、ｄｉｒが順方向であるか判断する（ステップＳ８６）。順方向の場合、ａｄｄｒを予め定めたｒａｔｅだけ増加させる（ステップＳ８８）。ｒａｔｅとしては、上述したように例えば１が使用される。従って、ステップＳ７６における振幅値情報と周波数情報との読み出しは、通常の速度で行われる。
【００５６】
ａｄｄｒがａｌｔ＿ｅｎｄ以上であるか判断され（ステップＳ９０）、ａｌｔ＿ｅｎｄ以上でなければ、ステップＳ７６が実行される。ａｄｄｒがａｌｔ＿ｅｎｄ以上であれば、ループ期間の終了点を超えたアドレスを指定しているので、ａｄｄｒの値を、現在のａｄｄｒの値とａｌｔ＿ｅｎｄとの偏差（ａｄｄｒ−ａｌｔ＿ｅｎｄ）だけａｌｔ＿ｅｎｄから減算した値に修正する（ステップＳ９２）。次に、ｄｉｒを逆方向に設定し（ステップＳ９４）、ステップＳ７６を実行する。
【００５７】
ステップＳ９２の演算は、ステップＳ９４において逆方向にａｄｄｒの読み出し方向を変更するが、このとき順方向のときに、ａｌｔ＿ｅｎｄを超えてａｄｄｒが進んだ量だけ、ａｌｅ＿ｅｎｄから戻したアドレスから逆方向では、周波数情報と振幅値情報を読み出すためである。
【００５８】
ステップＳ８６において、逆方向であると判断されると、ａｄｄｒをｒａｔｅだけ減少させる（ステップＳ９６）。ａｄｄｒがａｌｔ＿ｓｔａｒｔ以下であるか判断され（ステップＳ９８）、ａｌｔ＿ｓｔａｒｔ以下でなければ、ステップＳ７６が実行される。ａｄｄｒがａｌｔ＿ｓｔａｒｔ以下であれば、ループ期間の先頭を超えたアドレスを指定しているので、ａｄｄｒの値を、現在のａｄｄｒの値とａｌｔ＿ｓｔａｒｔとの偏差（ａｄｄｒ＋ａｌｔ＿ｓｔａｒｔ）だけａｌｔ＿ｓｔａｒｔを増加させた値に修正する（ステップＳ１００）。次に、ｄｉｒを順方向に設定し（ステップＳ１０２）、ステップＳ７６を実行する。
【００５９】
ステップＳ１００の演算は、ステップＳ１０２において順方向にａｄｄｒの読み出し方向を変更するが、逆方向においてａｌｔ＿ｓｔａｒｔを超えてａｄｄｒが進んだ量だけ、順方向ではａｌｅ＿ｓｔａｒｔから戻したアドレスから周波数情報と振幅値情報を読み出すためである。
【００６０】
このようにして、波形の再生が行われるので、原オーディオ波形信号の時間軸の圧縮伸長を行う場合に、原オーディオ波形信号の各区間の先頭部分を再合成するとき、当該区間の先頭部分の周波数情報及び振幅値情報に基づいて波形再生が行われるので、合成波形の音質を改善できる。
【００６１】
上記の実施の形態では、操作子１０に含まれる発音開始操作子の操作に応じて発音を開始、停止させるようにだけしたので、再合成される楽音のピッチは、原オーディオ波形信号のままであるが、例えば鍵盤を設け、この鍵盤からのノートナンバー情報に基づいてピッチを変更するようにすることもできる。また、この実施の形態では、再生モード１と再生モード２とを設けたが、場合によっては、再生モード１は不要である。再生モード１を設けない場合、波形メモリ２には、各区間におけるαの期間について振幅値情報及び周波数情報を記憶させる必要はない。
【００６２】
【発明の効果】
以上のように、本発明によれば、第１の再生位置情報がマーク情報の位置に到達したとき、第２の再生位置情報を第１の再生位置情報に修正しているので、マーク情報のオーディオ波形信号の時間軸の圧縮伸長が、マーク情報に対応する周波数情報及び振幅値情報によって行われ、これ以降のオーディオ波形信号の時間軸の圧縮伸長も同様に対応する周波数情報及び振幅値情報によって行われるので、音質が改善される。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態の波形再生装置のブロック図である。
【図２】図１の波形再生装置におけるＤＳＰが実現する位相ボコーダのブロック図である。
【図３】図１の波形再生装置の波形メモリ２に記憶されている各帯域の周波数情報と振幅値情報とこれらを発生する元になるオーディオ波形信号を示す図である。
【図４】波形メモリ２に記憶されている各種データを示す図である。
【図５】図１のＣＰＵが実行するメインルーチンのフローチャートである。
【図６】ＤＳＰが実行するＤＳＰ発音開始処理ルーチンのフローチャートである。
【図７】ＤＳＰが実行するＤＳＰ発音停止処理ルーチンのフローチャートである。
【図８】ＤＳＰが実行する割込み処理ルーチンのフローチャートである。
【図９】図８の割り込み処理ルーチン中の制御メイン処理のフローチャートである。
【図１０】図８の割り込み処理ルーチン中の時間軸変換処理のフローチャートである。
【符号の説明】
２  波形メモリ（波形データ記憶手段）
４  ＤＳＰ（第１の再生位置情報発生手段と、第２の再生位置情報発生手段、波形信号合成手段、制御手段）。
【図１】
0004087964.tif 000002
【図２】
0004087964.tif 000003
【図３】
0004087964.tif 000004
【図４】
0004087964.tif 000005
【図５】
0004087964.tif 000006
【図６】
0004087964.tif 000007
【図７】
0004087964.tif 000008
【図８】
0004087964.tif 000009
【図９】
0004087964.tif 000010
【図１０】
0004087964.tif 000011