(57)【特許請求の範囲】
【請求項１】
複数周期波形の波形データを記憶した波形メモリと、
楽音の発生、および楽音の音高を指定する発音指示手段と、
指定された音高に応じた速さで進行するアドレスを発生するアドレス発生手段と、
前記アドレスに基づいて前記波形メモリから前記波形データを読み出す読み出し手段と、
前記読み出し手段の読み出した波形データに基づいて波形を再生する再生手段と、
前記複数周期波形の時間伸縮比を供給する伸縮比供給手段であって、前記複数周期波形のうちの一部に対し、同複数周期波形の他の部分と異なる伸縮比を供給する伸縮比供給手段と、
所定期間ごとに、前記伸縮比供給手段の供給する伸縮比に従って再生時間の伸縮を行ったとしたときの仮想的な読み出し位置の進行と、前記アドレス発生手段により発生したアドレスの位置とを比較し、該比較の結果に基づいて前記複数周期波形の中の次に読み出すべき次アドレスを決定することにより、前記読み出し手段により読み出される前記複数周期波形の波形データの時間軸を圧縮伸張する圧縮伸張手段と
を備え、前記複数周期波形のうちの前記一部の波形の波形再生時間を、前記指定された音高、および、前記他の部分の波形再生時間とは独立に制御可能であることを特徴とする波形再生装置。
【請求項２】
前記波形メモリに記憶される波形は、音の特性を時間変化させる奏法により演奏された楽器音であることを特徴とする請求項１に記載の波形再生装置。
【請求項３】
前記波形再生時間が変更される波形は、波形の立ち上がり部、定常部、立ち下がり部のうちのいずれかであることを特徴とする請求項１乃至２に記載の波形再生装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、波形メモリ音源において、発生する波形データのピッチの制御とは独立に、当該波形データの時間軸上の長さ（再生時間）を圧縮および伸張する技術に関する。
【０００２】
【従来の技術】
従来より、電子楽器などに用いられている波形メモリ読み出し方式の音源では、波形メモリからの波形データ（波形サンプル）の読み出し速度を調整することにより、発生する楽音波形の音高（ピッチ）を制御していた。具体的には、いわゆるＦナンバを累算した読み出しアドレスで波形データを順次読み出していく際、そのＦナンバを大きい値にすればピッチは高くなり、Ｆナンバを小さい値にすればピッチは低くなる。この場合、読み出す波形データの時間長、すなわち再生時間を圧縮したり伸張したりすることはできない。
【０００３】
一方、音声処理の分野では、話速変換技術としてＰＩＣＯＬＡ方式が知られている。ＰＩＣＯＬＡ方式は、例えば、５周期分の波形ブロックＡ，Ｂ，Ｃ，Ｄ，Ｅをこの順に読み出して音声波形を出力するものにおいて、第１周期目としてブロックＡをフェードアウトする波形とブロックＢをフェードインする波形を加算した波形を用い、引き続く第２〜第４周期目としてＣ，Ｄ，Ｅを出力するような方式である。これにより、５周期分の時間長さがあった波形を４周期分に圧縮して出力できる。時間的に伸張する場合は、例えば、３周期分の波形ブロックＡ，Ｂ，Ｃをこの順に読み出して音声波形を出力するものにおいて、第１周期目としてブロックＡの波形を用い、第２周期目としてブロックＡをフェードアウトする波形とブロックＢをフェードインする波形を加算した波形を用い、引き続く第３、４周期目としてＣ，Ｄを出力するようにする。これにより３周期分の時間長さの波形を４周期分に伸張して出力できる。
【０００４】
【発明が解決しようとする課題】
従来の電子楽器の波形メモリ音源では、読み出された波形データの時間長は、読み出し速度に応じて一意的に決定され、自由に伸縮することはできないという不都合があった。また、音声処理技術では、電子楽器のようなセント単位の精密なピッチ制御は考えられていない。したがって、そのまま波形メモリ音源に適用するのは難しい。
【０００５】
この発明は、波形メモリ読み出し方式の音源において、読み出す波形データの時間軸上の圧縮伸張を行なうことができるようにすることを目的とする。
【０００６】
【課題を解決するための手段】
この目的を達成するため、請求項１に係る波形再生装置は、複数周期波形の波形データを記憶した波形メモリと、楽音の発生、および楽音の音高を指定する発音指示手段と、指定された音高に応じた速さで進行するアドレスを発生するアドレス発生手段と、前記アドレスに基づいて前記波形メモリから前記波形データを読み出す読み出し手段と、前記読み出し手段の読み出した波形データに基づいて波形を再生する再生手段と、前記複数周期波形の時間伸縮比を供給する伸縮比供給手段であって、前記複数周期波形のうちの一部に対し、同複数周期波形の他の部分と異なる伸縮比を供給する伸縮比供給手段と、所定期間ごとに、前記伸縮比供給手段の供給する伸縮比に従って再生時間の伸縮を行ったとしたときの仮想的な読み出し位置の進行と、前記アドレス発生手段により発生したアドレスの位置とを比較し、該比較の結果に基づいて前記複数周期波形の中の次に読み出すべき次アドレスを決定することにより、前記読み出し手段により読み出される前記複数周期波形の波形データの時間軸を圧縮伸張する圧縮伸張手段とを備え、前記複数周期波形のうちの前記一部の波形の波形再生時間を、前記指定された音高、および、前記他の部分の波形再生時間とは独立に制御可能であることを特徴とする。
【０００７】
請求項２に係る波形再生装置は、請求項１において、前記波形メモリに記憶される波形は、音の特性を時間変化させる奏法により演奏された楽器音であることを特徴とするものである。請求項３に係る波形再生装置は、請求項１乃至２において、前記波形再生時間が変更される波形は、波形の立ち上がり部、定常部、立ち下がり部のうちのいずれかであることを特徴とするものである。
【０００８】
【発明の実施の形態】
以下、図面を用いてこの発明の実施の形態を説明する。
【０００９】
図１は、本発明に係る波形再生装置を適用した電子楽器の全体構成を示す。この電子楽器は、ＭＩＤＩインターフェース１０１、制御部１０２、音源部１０３、ディジタル・アナログ変換器（ＤＡＣ）１０４、およびサウンドシステム１０５を備えている。音源部１０３は、波形発生部１１１、音量制御部１１２、制御レジスタ１１３、およびチャンネル累算部１１４を備えている。音源部１０３は、所定のサンプリング周期ごとに、時分割動作で複数チャンネル分の楽音波形を生成し、それらを累算した楽音波形データをＤＡＣ１０４に出力する。
【００１０】
ＭＩＤＩインターフェース１０１は、各種のＭＩＤＩ機器を接続するためのインターフェースである。ＭＩＤＩインターフェース１０１から入力したＭＩＤＩメッセージは、制御部１０２で解析される。制御部１０２は、入力したＭＩＤＩメッセージにしたがって音源部１０３に楽音発生の指示を出す。具体的には、入力したＭＩＤＩメッセージに応じて、発音割り当てや楽音パラメータの作成を行ない、制御レジスタ１１３の発音割り当てをされたチャンネルに楽音パラメータを設定して、楽音発生の制御を行なう。音源部１０３では、制御レジスタ１１３に設定されたデータに基づいて、波形発生部１１１で複数チャンネル分の楽音波形を時分割で発生し、発生した楽音波形に音量制御部１１２で各チャンネル別に音量制御を施し、チャンネル累算部１１４で、音量制御された複数チャンネル分の楽音波形を累算して累算結果をＤＡＣ１０４に出力する。ＤＡＣ１０４は、チャンネル累算部１１４から出力されたディジタル楽音波形データをアナログ楽音信号に変換する。該アナログ信号に基づいて、実際の楽音がサウンドシステム１０５により放音される。
【００１１】
図２は、図１の波形発生部１１１の詳細図を示す。波形発生部１１１は、波形メモリ読み出し部（タイム伸縮機能付き）２０１、およびＣＲａｔｅ発生部２０２を備えている。波形発生部１１１は、制御レジスタ１１３経由で、波形発生指示であるノートオンと発生すべき楽音の音高を示すピッチ情報を入力するとともに、その他データとして音色情報などを入力し、それらの入力した情報に基づいて波形データを発生する。
【００１２】
特に、この装置の波形発生部１１１は、標準の再生時間に対する伸縮比を入力して、その伸縮比に応じて波形データの時間軸上の長さを伸縮することができるようになっている。
【００１３】
図１４および図１５は、本波形発生部１１１で実現できる波形の時間軸上での伸縮の様子を示す例である。図１４および図１５において、黒く塗りつぶした図形１４０１および１５０１は、波形メモリに記憶されている元の波形（例えば、所定のサンプリング周期で録音（サンプリング）したもの）を示す。なお、図１４および図１５の各波形は、横方向が再生時間、縦方向が振幅を表し、波形の包絡線内を黒く塗りつぶして模擬的に図示した。
【００１４】
１４０１および１５０１のように波形メモリに格納されている波形を所定のサンプリング周期で順次累算されていくアドレスによって読み出して出力波形を生成する。アドレスに順次累算していく値であるＦ（周波数）ナンバにより出力波形の音高（ピッチ）が定まる。この値を大きくすればピッチアップ（音高が高くなる）し、この値を小さくすればピッチダウン（音高が低くなる）する。１４０２および１４０３は、元波形１４０１をピッチアップおよびピッチダウンした波形を示す。ピッチアップするというのは元波形１４０１を大きなストライドで読み出しアドレスを速く進めて読むということであるから波形の時間軸上の長さは短くなり、ピッチダウンするというのは元波形１４０１を小さなストライドで読み出しアドレスを遅く進めて読むということであるから波形の時間軸上の長さは長くなる。図１４では、ピッチアップした波形１４０２の時間長さ（再生時間）は元波形１４０１の時間長さ（標準の再生時間）より短くなり、ピッチダウンした波形１４０３の時間長さは元波形１４０１の時間長さより長くなっている。
【００１５】
特に、この装置の波形発生部１１１では、波形メモリ読み出し方式で波形を発生する際、上述のピッチ制御に加えて、このピッチ制御とは独立に、出力波形の時間軸上の長さを伸縮するタイム伸縮機能を備えている。波形１４０４は、ピッチアップした波形１４０２やピッチダウンした波形１４０３の時間長さを元波形の長さより縮めた例を示す。波形１４０５は、波形１４０２や波形１４０３の時間長さを元波形の長さに戻した例を示す。波形１４０６は、波形１４０２や波形１４０３の時間長さを元波形の長さより伸ばした例を示す。このように再生時間を伸縮するタイム伸縮制御を行なう際の波形発生部１１１に対する指示は、パラメータとして標準の再生時間に対する伸縮比を与えることにより行なう。「標準の再生時間」とは元波形の時間長さ（すなわち、時間軸伸縮なしで、ピッチアップ、ピッチダウンしないときの再生時間長）である。
【００１６】
さらに、上記パラメータ「標準の再生時間に対する伸縮比」をリアルタイムに変更制御することにより、局所的あるいは部分的に上述した時間長さの変更制御を行なうことができる。図１５の波形１５０２は元波形１５０１の立ち上がり部（アタック部）のみの時間長さを縮めた例、波形１５０３は元波形１５０１の定常部（ループ部）のみの時間長さを縮めた例、波形１５０４は元波形１５０１の立ち下がり部（リリース部）のみの時間長さを縮めた例、波形１５０５は元波形１５０１の立ち上がり部のみの時間長さを伸ばした例、波形１５０６は元波形１５０１の定常部のみの時間長さを伸ばした例、波形１５０７は元波形１５０１の立ち下がり部のみの時間長さを伸ばした例を、それぞれ示す。このような部分的な時間長さの変更制御も、ピッチ制御とは独立に行なうことができる。
【００１７】
図２に戻って、波形発生部１１１の説明を続ける。波形発生部１１１には、上述のパラメータ「標準の再生時間に対する伸縮比」が入力する。このパラメータは「標準の再生時間」に対する伸縮比を指定するが、実際にタイム伸縮機能を実現する波形メモリ読み出し部２０１は、指定されたピッチで読み出した場合の時間長さ（ピッチに応じて図１４の波形１４０２，１４０３のように時間長さが変化する）を基準とした伸縮比（時間圧縮比）ＣＲａｔｅに基づいてタイム伸縮制御を行なうので、パラメータを変換するためのＣＲａｔｅ発生部２０２が設けられている。すなわち、ＣＲａｔｅ発生部２０２は、「ピッチ」および「標準の再生時間に対する伸縮比」を入力し、ピッチに応じて変化した再生時間を基準とした時間圧縮比ＣＲａｔｅを算出して波形メモリ読み出し部２０１に出力する。
【００１８】
図３は、図２の波形メモリ読み出し部２０１の詳細を示す。波形メモリ読み出し部２０１を説明する前に、本実施の形態におけるタイム伸縮機能の基本概念を説明する。
【００１９】
まず、上述の時間圧縮比ＣＲａｔｅについて説明する。時間圧縮比ＣＲａｔｅは、タイム伸縮機能を実現するために新たに導入したパラメータである。時間圧縮比ＣＲａｔｅは、「出力波形の再生時間（時間長さ）を、元の波形（ピッチ制御されたもの）の再生時間（時間長さ）の１／ＣＲａｔｅとすること」を意味するパラメータである。もちろん、ＣＲａｔｅは一定値とは限らず、波形読み出しの途中（生成する楽音の立ち上がりから立ち下がりの途中）でもリアルタイムに変更可能であるので、局所的に見て上記の意味があるということである。出力波形は、ＣＲａｔｅ＝１．０なら等倍、ＣＲａｔｅ＞１．０なら圧縮、ＣＲａｔｅ＜１．０なら伸張されることになる。
【００２０】
次に、波形メモリ読み出し部２０１内の波形メモリ（後述する図３の３０１）に記憶されている波形データについて説明する。波形メモリに記憶された波形データはあらかじめ複数の「波形周期」に分けられている。波形データは複数周期からなるが、この複数周期の波形データはあらかじめ分析され、複数周期のなかで位相が互いに同じになるポイント（同位相ポイント）が各波形周期のスタート位置として決定されている。逆に言えば、そのような同位相ポイントを幾つか見つけ、その位置で区切って複数の「波形周期」を定義する。１つの「波形周期」中に、波形データの複数の周期が含まれていてよい。要するに、「波形周期」の境界位置は上記の同位相ポイントであり、どの「波形周期」も別の「波形周期」に滑らかにつなげることができるように「波形周期」を定義すればよい。上記同位相ポイントとは、波形振幅値が一致し、その位置での傾きが一致するポイントである。なお、波形周期は、波形データの基本ピッチに対応したピッチ周期とは必ずしも一致しない。あるいは、一致させなくてよい。
【００２１】
具体的に説明する。上記同位相ポイントのアドレスをＡi（整数部(Integer)＋小数部(Fraction)からなる）とする。ｉは波形周期の番号、Ａiはｉ番目の波形周期のスタートポイントのアドレスである。後述するインデックスカウントＩＣは、この波形周期の番号ｉをカウントしている。各ポイントは互いに位相が同じであるため、１つの波形周期を終わりのポイントまで読み出し、引き続きそれとは別のポイントから始まる任意の波形周期の読み出しを行なったとしても、波形が比較的滑らかにつながる。この発明の実施の形態では、後述するように、２つの波形周期をつなげるのに、さらにクロスフェードを行なうので、波形間の接続が大変スムーズである。
【００２２】
さらに、波形メモリには、波形周期の周期長データとして、Ｔi＝Ａi+1−Ａiを記憶する。すなわち、ｉ＋１番目の波形周期のスタートポイントから、ｉ番目の波形周期のスタートポイントを減算した値がＴｉである。このようにして周期長を記憶すれば、Ａiをそのまま記憶するのに比べ、記憶容量を削減することができる。波形周期の周期長は、上述のＴiで表されるから、当然にサンプル数単位（ただし、整数部＋小数部で表される）で示されることになる。
【００２３】
各波形周期のスタート位置のアドレスＡiは、以下の式で算出される。
Ａi＝Ａ0＋ΣＴ
ここで、Ａ0は波形データのスタートアドレス（０番目の波形周期のスタートポイントのアドレス）、ΣＴはＴjをｊ＝０，１，２，…，i-1について累算したものである。
【００２４】
タイム伸縮制御の基本を簡単に説明する。タイム伸縮の処理の時間的な単位となるのは「再生周期」である。「再生周期」は、波形メモリ上の波形データのタイム伸縮処理の時間単位長であり、サンプル数では表されない。「再生周期」は「波形周期」とは異なる概念である。タイム伸縮制御の基本は、時間圧縮比ＣＲａｔｅの値による理想的な読み出しポイントと実際の読み出しポイントの差分を演算し、その差分量にしたがい、再生周期ごとに所定の処理を実行し、逐次追従させるということである。所定の処理とは、集約すると、再生時間を伸ばすためのストレッチ処理（以下、Ｓ処理と呼ぶ）、再生時間をそのままとするノーマル処理（以下、Ｎ処理と呼ぶ）、再生時間を圧縮するコンプレス処理（以下、Ｃ処理と呼ぶ）のうちのどれかを行なうかを決定し、各再生周期でその決定した処理を行なっていくものである。このようなタイム伸縮制御（以下、ＴＳＣ制御と呼ぶ）の詳細は後述する。なお、周期性の無い部分のデータについてはＴＳＣ制御を無効化するのが有効であるので、ＴＳＣ制御のイネーブル（Ｅｎａｂｌｅ）／ディスエーブル（Ｄｉｓａｂｌｅ）をコントロールできるようにするとよい。
【００２５】
図４は、ＴＳＣ制御の基本概念を説明するための図である。４１１は波形メモリに記憶されている波形データ、４１２〜４１６はその読み出し例を示す。波形データ４１１は、Ａ〜Ｆの６つの波形周期からなる。縦に何本か引かれた点線４０１は、所定のピッチで再生したとした場合の各再生周期の区切れ目を示す。したがって、横軸は、サンプル長ではなく、伸縮処理の時間経過を示す。波形データ４１１の各波形周期Ａ〜Ｆの下に付された数字は、立ち上りより順に各再生周期にふった順序を示す番号である。なお図４では、各再生周期の区切れ目を示す点線４０１が等間隔に並べてあるが、これは説明の便宜のためであり、各周期の時間長さは区々である。さらに、４１１〜４１６の縦の比較でも一般的には長さが互いに異なっている。
【００２６】
４１２〜４１６の各ブロックは、時間軸伸縮の処理の単位であり、各ブロック（再生周期）ごとにＳ処理、Ｎ処理、Ｃ処理の何れかを実行する。４１２〜４１６は、６周期の波形データ４１１を時間圧縮比ＣＲａｔｅに応じて圧縮伸張した例である。図４の各再生周期では、波形メモリに記憶されている波形データ（例えば、６周期の波形４１１）から、２系列でそれぞれ所定の波形周期のの波形を読み出すことができる。２系列でそれぞれ読み出す波形周期は、同じであってもよいし、異なっていてもよい。このように、本例では、各再生周期において、Ｓ処理、Ｎ処理、Ｃ処理の何れが実行されるかにかかわらず絶えず２系列（以下、第１系列および第２系列と呼ぶ）のクロスフェードにより出力波形を生成する。圧縮伸張した各波形４１２〜４１６の各再生周期を示す矩形中に右上がりの対角線を記載し、その対角線で分けられた３角形の領域に波形周期を示すＡ〜Ｆの記号を記載したが、これはその２つの波形周期を用いて２系列のクロスフェードを行なうことを示している。特に、対角線の上側３角形内に記載した波形周期（第１系列）はフェードアウトし、対角線の下側３角形内に記載した波形周期（第２系列）はフェードインすることを示す。また、各周期の矩形の上側に記載した「Ｓ」、「Ｎ」、「Ｃ」の記号は、その周期でＳ処理、Ｎ処理、Ｃ処理を、それぞれ行なうことを示す。第１系列のフェードアウト、第２系列のフェードインによるクロスフェードは、各再生周期の中で終了する。
【００２７】
４１２はＣＲａｔｅ＝２．０の圧縮の場合である。第１周期目は、圧縮のためのＣ処理、すなわち第１系列で波形周期Ａを読み出し、第２系列で波形周期Ｂを読み出し、これらをクロスフェードして出力波形を生成する処理を行なう。第２周期目は、第１系列で波形周期Ｃを読み出し、第２系列で波形周期Ｄを読み出し、これらをクロスフェードして出力波形を生成するＣ処理を行なう。第３周期目は、第１系列で波形周期Ｅを読み出し、第２系列で波形周期Ｆを読み出し、これらをクロスフェードして出力波形を生成するＣ処理を行なう。クロスフェードする再生周期の時間長さは、第２系列の波形周期が読み出される時間としている。したがって、４１２の例では、波形周期Ｂ，Ｄ，Ｆが所定ピッチで読み出される時間長さが各再生周期の長さになる。各波形周期は同程度の長さになるように設定されているので、以上より、生成出力される波形４１２の再生時間は、元の波形４１１の再生時間のほぼ１／ＣＲａｔｅ、すなわちほぼ１／２倍になる。
【００２８】
なお、上記４１２の例、および後述の４１３〜４１６の例では、直前の再生周期で第２系列により読み出されフェードインした波形周期に続く波形周期が、次の再生周期で第１系列により読み出されフェードアウトするようになっている。例えば、４１２の第１周期目で、第２系列により波形周期Ｂがフェードインし、次の第２周期目で、それに続く波形周期Ｃが第１系列によりフェードアウトしている。このようにしないと滑らかな接続ができないからである。
【００２９】
４１３はＣＲａｔｅ＝１．５の圧縮の場合である。第１周期目は、元の再生時間をそのままとするＮ処理、すなわち第１系列で波形周期Ａを読み出し、第２系列でも同じ波形周期Ａを読み出し、これらをクロスフェードして出力波形を生成する処理を行なう。第２周期目は、第１系列で波形周期Ｂを読み出し、第２系列で波形周期Ｃを読み出し、これらをクロスフェードして出力波形を生成するＣ処理を行なう。第３周期目は波形周期Ｄを用いたＮ処理、第４周期目は波形周期Ｅ，Ｆを用いたＣ処理を行なう。以上により、生成出力される波形４１３の再生時間は、元の波形４１１の再生時間のほぼ１／ＣＲａｔｅ、すなわちほぼ１／１．５＝２／３倍になる。
【００３０】
４１４はＣＲａｔｅ＝１．０の等倍の場合である。第１周期目〜第６周期目のそれぞれで波形周期Ａ〜Ｆを用いたＮ処理を行なう。これにより、生成出力される波形４１４の再生時間は、元の波形４１１の再生時間の１／ＣＲａｔｅ、すなわち１／１＝等倍になる。
【００３１】
４１５はＣＲａｔｅ＝０．７５の伸張の場合である。第１，２，４，５，６，８周期目は、それぞれ、波形周期Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆを用いたＮ処理を行なう。第３周期目は、伸張のためのＳ処理、すなわち第１系列で波形周期Ｃを読み出し、第２系列で波形周期Ｂを読み出し、これらをクロスフェードして出力波形を生成する処理を行なう。第７周期目は、第１系列で波形周期Ｆを読み出し、第２系列で波形周期Ｅを読み出し、これらをクロスフェードして出力波形を生成するＳ処理を行なう。以上により、生成出力される波形４１５の再生時間は、元の波形４１１の再生時間のほぼ１／ＣＲａｔｅ、すなわちほぼ１／０．７５＝１．５倍になる。
【００３２】
４１６はＣＲａｔｅ＝０．５の伸張の場合である。第１，３，５，７，９，１１周期目では、それぞれ、波形周期Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆを用いたＮ処理を行なう。第２，４，６，８，１０，１２周期目では、それぞれ、波形周期ＢとＡ，ＣとＢ，ＤとＣ，ＥとＤ，ＦとＥ，ＧとＦ（ＧはＦの次に続く周期とする）を用いたＳ処理を行なう。これにより、生成出力される波形４１６の再生時間は、元の波形４１１の再生時間の１／ＣＲａｔｅ、すなわち１／０．５＝２倍になる。
【００３３】
図５は、図４における各再生周期の処理を詳細に説明するための図である。５０１は、波形メモリに格納されている３周期分の連続する波形周期Ｚ，Ａ，Ｂを示す。波形周期Ｚ，Ａ，Ｂの周期長は、それぞれ、ＴZ，ＴA，ＴBとする。いま、第１系列目で読み出される波形周期をＡとする。このとき第２系列で読み出す波形周期は、Ｓ処理、Ｎ処理、およびＣ処理の各場合で異なる。
【００３４】
５１１は１つの再生周期で伸張のためのＳ処理を行なう場合の例を示す。５１１に示すように、第１系列で波形周期Ａを読み出すとすると、第２系列ではその波形周期Ａの１つ前の波形周期Ｚを読み出すことになる。すなわち、５２１に示すように、第１系列では矢印５３１のように波形周期Ａを読み出し、第２系列では矢印５３２のように波形周期Ｚを読み出し、クロスフェードする。５１２は１つの再生周期で再生時間を変えないＮ処理を行なう場合の例を示す。５１２に示すように、第１系列で波形周期Ａを読み出すとすると、第２系列でも同じ波形周期Ａを読み出すことになる。すなわち、５２２に示すように、第１系列および第２系列ともに矢印５４１のように波形周期Ａを読み出し、クロスフェードする。５１３は１つの再生周期で圧縮のためのＣ処理を行なう場合の例を示す。５１３に示すように、第１系列で波形周期Ａを読み出すとすると、第２系列ではその波形周期Ａの次の波形周期Ｂを読み出すことになる。すなわち、５２３に示すように、第１系列では矢印５５１のように波形周期Ａを読み出し、第２系列では矢印５５２のように波形周期Ｂを読み出し、クロスフェードする。
【００３５】
上述の２つの系列では、所定のサンプリング周波数に基づいて、パラメータで指定されたピッチに応じたＦナンバを累算したアドレスで読み出しを行なう。したがって、発生する波形のピッチは指定されたとおりのものとなる。一方、図２と図４で概要を説明したように、周期単位のタイムストレッチ制御処理によりその周期でＳ処理、Ｎ処理、およびＣ処理の何れかを選択して（選択の仕方は後述する）実行することにより、図４の４１２〜４１６に例示したように再生時間を伸縮できる。
【００３６】
図５において、ｒｐは、各再生周期において、第１系列目で読み出す波形周期の先頭アドレスを示す読み出しポインタ（図７で詳述する）である。ｒｐ_nowは図５の各処理を行なう再生周期における現ｒｐの値を表し、ｒｐ_nextは該再生周期の次の再生周期におけるｒｐの値を表す。各再生周期の終了時点で第２系列目が読み出しているアドレスが、その次の再生周期における第１系列目の読み出す波形周期の先頭アドレスになるようにしている。これは再生周期が切り替わるところでは、連続する波形周期に移行するようにするためである。例えば、図４の伸縮例４１２〜４１６の各再生周期が切り替わる部分を参照すると分かるように、周期の切り替わるところでは波形周期がＡ→Ｂ、Ｂ→Ｃ、…というように連続する波形周期に切り替わるようになっている。図５に示すように、現在の再生周期のｒｐの値から、次の再生周期のｒｐの値が求められる。すなわち、Ｓ処理の場合は現ｒｐの値がｒｐ_nextとなり、Ｎ処理の場合は現ｒｐにＴAを加算したｒｐ＋ＴAがｒｐ_nextとなり、Ｃ処理の場合は現ｒｐにＴA＋ＴBを加算したｒｐ＋ＴA＋ＴBがｒｐ_nextとなる。
【００３７】
図６は、アタック部およびループ部を有する波形データの例である。波形データ６０１は、５つの波形周期Ａ〜Ｅからなる。インデックスカウント（Ｉｎｄｅｘ  Ｃｏｕｎｔ）は波形周期の波形メモリ上の位置（順番）を示す。サイクルレングス（Ｃｙｃｌｅ  Ｌｅｎｇｔｈ）は各波形周期の周期長ＴA〜ＴEを示す。アタック部とループ部との境界が波形周期の切れ目になるようにするものとする。波形データ６０１では、波形先頭位置からＴLpstの位置までの波形周期、すなわち波形周期Ａ，Ｂが、アタック部である。また、ＴLpstの位置がループ部のスタートポイントであり、この位置からＴLpendの位置までの波形周期、すなわち波形周期Ｃ，Ｄ，Ｅが、ループ部である。
【００３８】
このようなアタック部およびループ部を有する波形データの場合は、６０２に示すような波形データであるものとして処理する。すなわち、ループ部のエンドポイントまで読み出したら、次には再びループ部のスタートポイントに戻ってループ部読み出しを繰り返す。
【００３９】
なお、処理の基本が１周期単位であるため、ループ部のスタートポイントおよびエンドポイントは制限が必要である。すなわち、通常の波形メモリ音源のループ部と同じく、ループエンドポイント（波形周期Ｅの最後アドレス）の補間サンプル値と、ループスタートポイント（波形周期Ｃの先頭アドレス）の補間サンプル値が同じ値になるように、両ポイントの位置を設定する必要がある。
【００４０】
次に図３を参照して、波形メモリ読み出し部２０１の構成および動作（特にＴＳＣ制御動作）を詳しく説明する。
【００４１】
図３において、波形メモリ読み出し部２０１は、波形メモリ３０１、演算部３０２、サイクル内カウンタ３０３、インデックスカウンタ３０４、周期長格納レジスタ３０５，３０６、累積差分格納レジスタ３０７、読み出しレジスタ（以下、ｒｐレジスタと呼ぶ）３０８、ピッチ補間部３０９，３１０、乗算器３１１，３１２、補正部３１３、および加算器３１４を備えている。以下、各構成要素について説明する。
【００４２】
波形メモリ３０１は、上述したように、複数の波形周期からなる波形データを記憶するとともに、その波形データの各周期の周期長情報Ｔを記憶している。波形データは、演算部３０２からのアドレスで２系列独立に読み出される。周期長情報Ｔ（Ｉｎｔｅｇｅｒ（整数部）＋Ｆｒａｃｔｉｏｎ（小数部）からなる）は、インデックスカウンタ３０４の値であるインデックスカウントＩＣをアドレスとして読み出される。
【００４３】
インデックスカウンタ３０４が保持するインデックスカウントＩＣは、現在読み出している第１系列の波形周期の周期番号である。このインデックスカウントＩＣを読み出しアドレス（相対アドレス）として、波形メモリ３０１から第１系列の波形周期の周期長情報Ｔを読み出し、Ｔ１レジスタ３０５に記憶させる。Ｔ１レジスタ３０５は、第１系列で読み出す波形周期の周期長情報Ｔを記憶する。同時に、Ｔ２レジスタ３０６に、第２系列目で読み出されている波形周期の周期長情報Ｔを記憶する。第１系列の波形周期の周期番号であるインデックスカウントＩＣと、現在実行しているのがＳ処理、Ｎ処理、Ｃ処理の何れであるかに基づいて、Ｔ２レジスタ３０６に記憶すべき周期長情報が、第１系列で読み出す波形周期の前の波形周期の周期長情報か、第１系列で読み出す波形周期の周期長情報か、第１系列で読み出す波形周期の次の波形周期の周期長情報かが、分かる。なお、インデックスカウントＩＣを相対アドレスにしたのは、複数の複数周期波形データを記憶する場合に対応するためである。すなわち、相対アドレスとしておけば、ベースアドレスを変えることにより、複数組の周期長データから読み出す波形データに対応する組を選択し、インデックスカウントＩＣに基づいてその中から各周期長データを読み出すことができる。
【００４４】
演算部３０２は、波形発生を開始するときインデックスカウンタ３０４の値を０に初期化する。その後、１周期の再生周期が終わるごとに演算部３０２からトリガ信号（周期更新情報）が出力され、インデックスカウンタ３０４はこのトリガ信号を受けて更新される。具体的には、いま終わった周期で行なったのがＳ処理のときは、いま終わった周期の第１系列で読み出していた波形周期を次の周期の第１系列で読み出すことになるはずだから、インデックスカウンタ３０４の値はそのままとする。いま終わった周期で行なったのがＮ処理のときは、いま終わった周期の第１系列で読み出していた波形周期の次の波形周期を次の周期の第１系列で読み出すことになるはずだから、インデックスカウンタ３０４の値を１カウントアップする。いま終わった周期で行なったのがＣ処理のときは、いま終わった周期の第１系列で読み出していた波形周期の次の次の波形周期を次の周期の第１系列で読み出すことになるはずだから、インデックスカウンタ３０４の値を２カウントアップする。
【００４５】
ｒｐレジスタ３０８は、図５で簡単に説明したように、波形メモリ３０１からの波形データの２系列読み出しのうち、第１系列目の読み出しが行なわれている波形周期の先頭アドレスｒｐを保持するレジスタである。
【００４６】
サイクル内カウンタ３０３は、波形発生部１１１の出力する波形データのサンプリング周期ごとに、再生ピッチ情報Δｐｈ（Ｆナンバ）を累算するカウンタである。サイクル内カウンタ３０３は、ｒｐポインタ３０８の指す波形データの波形周期の中の、各波形サンプル値を読み出すための位相ＣＣ（サイクルカウント：整数部＋小数部からなる）を発生する。サイクル内カウンタ３０３で発生したサイクルカウントＣＣは演算部３０２に入力する。演算部３０２は、先頭アドレスｒｐとサイクルカウントＣＣとを用いて、第１および第２系列の読み出しアドレスを算出し波形メモリ３０１に出力する。具体的には、（ｒｐ＋ＣＣ）が第１系列目の読み出しアドレスとなり、（ｒｐ＋ＣＣ＋ＯＦＳＴ）が第２系列目の読み出しアドレスとなる。ＯＦＳＴは、現在の再生周期において実行しているのがＳ処理であるときは、第１系列で読み出している波形周期の前の波形周期を第２系列で読み出すということであるから、ＯＦＳＴ＝−「第１系列で読み出している波形周期の前の波形周期の周期長」（この値はＴ２レジスタ３０６に読み出されている）となる。いま実行しているのがＮ処理であるときは、第１系列で読み出している波形周期を第２系列でも読み出すということであるから、ＯＦＳＴ＝０となる。いま実行しているのがＣ処理であるときは、第１系列で読み出している波形周期の次の波形周期を第２系列で読み出すということであるから、ＯＦＳＴ＝「第１系列で読み出している波形周期の周期長」（この値はＴ１レジスタ３０６に読み出されている）となる。
【００４７】
また、演算部３０２は、サイクルカウント（Ｃｙｃｌｅ  Ｃｏｕｎｔ）ＣＣとサイクルレングス（Ｃｙｃｌｅ  Ｌｅｎｇｔｈ）ＣＬとを、Ｃｙｃｌｅ  Ｃｏｕｎｔ＞Ｃｙｃｌｅ  Ｌｅｎｇｔｈの条件にて常時比較している。比較に用いるサイクルレングスＣＬは、現処理がＳ処理なら第１系列で読み出している波形周期の前の波形周期の周期長、現処理がＮ処理なら第１系列で読み出している波形周期の周期長、現処理がＣ処理なら第１系列で読み出している波形周期の次の波形周期の周期長である。すなわち、サイクルレングスＣＬは第２系列で読み出している波形周期の周期長と同じであり、該周期長を基準として現在の再生周期の終わりを判別するようになっている（ＣＣがＣＬを超えたときが現在の再生周期の終わりである）。現在の再生周期の終わりに至ったとき、演算部３０２からトリガ信号（周期更新情報）が出力され、インデックスカウンタ３０４はこのトリガ信号を受けて更新される。すなわち、サイクルカウントＣＣの累算値は、第２系列目で読み出されている波形周期の周期長情報Ｔを越えたら（ＣＣ−Ｔ）の値に戻されるとともに、同タイミングで演算部３０２は前記トリガ信号を発生する。
【００４８】
第１系列目の読み出しアドレス（ｒｐ＋ＣＣ）、第２系列目の読み出しアドレス（ｒｐ＋ＣＣ＋ＯＦＳＴ）とも、ピッチ非同期（すなわち、サンプリング周波数が一定）動作で正確な楽音ピッチを実現するため、アドレス小数部に応じたサンプル間補間をする必要がある。そのため、各系列ごとにピッチ補間部３０９，３１０が設けられており、上記第１系列目、第２系列目で異なる小数部に応じて独立に直線補間が行なわれる。
【００４９】
乗算器３１１，３１２、補正部３１３、および加算器３１４は、クロスフェード回路を構成している。このクロスフェード回路は、各再生周期で、Ｓ処理、Ｎ処理、Ｃ処理の何れが行なわれるかにかかわらず、第１系列目の読み出し波形データから第２系列目の読み出し波形データへのクロスフェードを実行する。演算部３０２は、第２系列目の重み係数（サイクルカウント値ＣＣ÷サイクルレングスＣＬ）を発生し、補正部３１３は、該係数の補数（１−ＣＣ÷ＣＬ）を発生する。クロスフェードは、第２系列目で読み出される波形周期の周期長Ｔ２の時間をかけて行なう。
【００５０】
ｄｉｆレジスタ３０７は、理想ポイント（仮想アドレス）と実ポイント（実アドレス）との累積差分を記憶するレジスタである。理想ポイントとは、時間圧縮情報ＣＲａｔｅにしたがって再生時間の伸縮を行なったとしたときの読み出しポインタの値に相当する。ある再生周期の処理が終わった時点で、その周期における理想ポイントの進み分は、基準となる第２系列の周期長Ｔ２に時間圧縮比ＣＲａｔｅを乗算した値（Ｔ２×ＣＲａｔｅ）となる。一方、ある再生周期の処理が終わった時点で、その周期における実アドレスの進み分（すなわちｒｐレジスタの進み分）は、いま終わったのがＳ処理なら０、Ｎ処理ならＴ１、Ｃ処理ならＴ１＋Ｔ２となる。この「実アドレスの進み分」は、再生周期の終わりの時点における第２系列目の読み出しアドレスとｒｐとの差分である。なぜなら、該第２系列目のアドレスが、次の再生周期におけるｒｐとなるからである。当該再生周期における「理想ポイント（仮想アドレス）の進み分」と「実アドレスの進み分」との差分をΔｄｉｆとすると、いま終わった処理がＳ処理か、Ｎ処理か、Ｃ処理かの別で、以下のようにΔｄｉｆが演算部３０２によって算出される。
・Ｓ処理のとき  …  Δｄｉｆ＝（Ｔ２×ＣＲａｔｅ）
・Ｎ処理のとき  …  Δｄｉｆ＝（Ｔ２×ＣＲａｔｅ）−Ｔ１
・Ｃ処理のとき  …  Δｄｉｆ＝（Ｔ２×ＣＲａｔｅ）−（Ｔ１＋Ｔ２）
演算部３０２では、このように算出したΔｄｉｆを現ｄｉｆに加算して、いま終わった再生周期の終了時点（すなわち、次の再生周期の先頭）におけるｄｉｆを求める。
【００５１】
さらに、演算部３０２では、上記のように再生周期の終了時に算出された累積差分ｄｉｆに基づいて、次の再生周期でＳ処理、Ｎ処理、Ｃ処理のどれを行なうかを決定する。具体的には、以下の条件（１）（２）に基づいて決定する。なお、累積差分ｄｉｆに基づく次の再生周期の処理判定時には、次の再生周期で第１系列の波形周期長を、前もってレジスタＴ１に読み出しておく。このとき、レジスタＴ２には直前の再生周期における記憶値がそのまま保持されている。
【００５２】
（１）ｄｉｆ≧０（ｄｉｆが正値）ならば、Ｔ１（次の再生周期で第１系列において読み出される波形周期の周期長）とｄｉｆとを比較し、
（１−１）｜ｄｉｆ｜／Ｔ１≧０．５（言い替えると、周期長Ｔ１の半分よりも累積差分ｄｉｆが大きいとき）なら、Ｃ処理とし、
（１−２）そうでないなら（言い替えると、周期長Ｔ１の半分よりも累積差分ｄｉｆが大きくないとき）、Ｎ処理とする。
（２）ｄｉｆ＜０（ｄｉｆが負値）ならば、Ｔ２（いま終了した再生周期で第２系列において読み出されていた波形周期の周期長）とｄｉｆとを比較し、
（２−１）｜ｄｉｆ｜／Ｔ２≧０．５（言い替えると、周期長Ｔ２の半分よりも累積差分ｄｉｆが大きいとき）なら、Ｓ処理とし、
（２−２）そうでないなら（言い替えると、周期長Ｔ２の半分よりも累積差分ｄｉｆが大きくないとき）、Ｎ処理とする。
【００５３】
上記の条件（１）は、要するに、所望の再生時間にするために現時点で読んでいるべき理想的な位置に対し、実際に読んでいる位置が遅れているので、その遅れ量が前記周期長Ｔ１の半分より大きいなら圧縮を行なうということである。また、上記の条件（２）は、要するに、所望の再生時間にするために現時点で読んでいるべき理想的な位置に対し、実際に読んでいる位置が進みすぎているので、その進み過ぎている量が前記周期長Ｔ２の半分より大きいなら伸張を行なうということである。
【００５４】
図７は、上記の演算部３０２の処理内容をＳ処理、Ｎ処理、Ｃ処理別にまとめた表７０２を示す。７０１は、波形メモリに格納されている３周期分の連続する波形周期Ｚ，Ａ，Ｂを示し、いま第１系列目で読み出される波形周期をＡとする。波形周期Ｚ，Ａ，Ｂの周期長は、それぞれ、Ｔbefore，Ｔnow，Ｔnextとする。このとき第２系列で読み出す波形周期は、現再生周期の処理がＳ処理ならＺ、Ｎ処理ならＡ、Ｃ処理ならＢである。ｒｐ_nowは、現再生周期におけるｒｐレジスタの値である。現再生周期において適用されるサイクルレングスＣＬを「適用されるＣｙｃｌｅ  Ｌｅｎｇｔｈ」の欄に示す。現再生周期において適用される第２系列のＯＦＳＴを「２系列目のＯＦＳＴ」の欄に示す。第１系列で（ｒｐ）を先頭アドレスとする波形周期が読み出され、第２系列で（ｒｐ＋ＯＦＳＴ）を先頭アドレスとする波形周期の読み出しが行なわれる。「ｒｐの更新」の欄は、現再生周期の処理が終わった時点で、ｒｐの値は第２系列の波形周期の読み出しを継続する読み出しアドレスに更新され、次の再生周期において第１系列で読み出す波形周期の先頭アドレスとなることを示している。「ｄｉｆの更新」の欄は、現再生周期の処理が終わった時点のｄｉｆの値を示している。このｄｉｆは、演算部３０２が、次の再生周期において、Ｓ処理、Ｎ処理、Ｃ処理の何れを行なうかを決定するのに使用される。「Ｉｎｄｅｘ  Ｃｏｕｎｔｅｒの更新」の欄は、インデックスカウンタが第２系列で読み出される波形周期の次の波形周期の周期番号に更新されることを示している。これは、次の再生周期において第１系列で読み出す波形周期の周期番号である。適用されるサイクルレングスＣＬは、第２系列で読み出している波形周期の周期長情報Ｔ２の値となっており、その再生周期においてサイクルレングスＣＬの時間にわたりクロスフェードが実行される。
【００５５】
図８は、上述の演算部３０２によるＳ処理、Ｎ処理、およびＣ処理の選択決定の仕方を示す説明図である。８０１の各矩形は波形周期を示す。図８の横軸方向は、「時間」ではなく「アドレス」である。（ａ）は第１系列の読み出し、（ｂ）は第２系列の読み出しを示す。
【００５６】
８３１が前回の理想ポインタ（仮想アドレス）の位置であり、８１１が実ポインタ（ｒｐレジスタ）の位置とする。このとき、ｄｉｆは矢印８２１に示すｄｉｆ_oldになるから、上記の条件（２−１）が成立し、次の周期ではＳ処理を行なうと決定する。このＳ処理では、第１系列はフェードアウトする波形を示す３角形８０１のように読み出しを行ない、第２系列はフェードインする波形を示す３角形８０４のように読み出しを行なう。
【００５７】
８３２が前回の理想ポインタの位置であり、８１２が実ポインタの位置とする。このとき、ｄｉｆは矢印８２２に示すｄｉｆ_oldになるから、上記の条件（２−２）が成立し、次の周期ではＮ処理を行なうと決定する。このＮ処理では、第１系列はフェードアウトする波形を示す３角形８０２のように読み出しを行ない、第２系列はフェードインする波形を示す３角形８０４のように読み出しを行なう。
【００５８】
８３３が前回の理想ポインタの位置であり、８１３が実ポインタの位置とする。このとき、ｄｉｆは矢印８２３に示すｄｉｆ_oldになるから、上記の条件（１−１）が成立し、次の周期ではＣ処理を行なうと決定する。このＣ処理では、第１系列はフェードアウトする波形を示す３角形８０３のように読み出しを行ない、第２系列はフェードインする波形を示す３角形８０４のように読み出しを行なう。
【００５９】
さらに、前再生周期における理想ポインタ（仮想アドレス）の位置８５１から矢印８５２だけ仮想アドレスが進んだとすると、ｄｉｆは矢印８５３に示すようになるので、条件（２−１）が成立しＳ処理を選択決定する。前再生周期における理想ポインタの位置８５１から矢印８５４だけ仮想アドレスが進んだとすると、ｄｉｆは矢印８５５に示すようになるので、条件（２−２）が成立しＮ処理を選択決定する。前再生周期における理想ポインタの位置８５１から矢印８５６だけ仮想アドレスが進んだとすると、ｄｉｆは矢印８５７に示すようになるので、条件（１−１）が成立しＣ処理を選択決定する。
【００６０】
図８では、連続した波形の周期を一つ戻る処理（Ｓ処理）、そのまま進む処理（Ｎ処理）、一つ飛び越して先に進む処理（Ｃ処理）の３つの処理から１つを選択するようになっていた。しかしながら、２つ以上前に戻ったり、２つ以上先に飛び越すことができるようにしてもよい。図９は、前に２つ飛び越して進む場合を示している。
【００６１】
以下、図９の説明をする。この例では、直前の再生周期の終わり時点における理想ポインタの位置が、次の再生周期において第２系列の読み出す波形周期を決定する。具体的には、理想ポインタの位置に最も近いスタートポイントを持つ波形周期が、次の再生周期において第２系列で読み出す波形周期として選択される。
【００６２】
例えば、図９のように、前々回の再生周期において、理想ポインタ（仮想アドレス）が９０２の位置にあったとすると、その位置は領域９０５の範囲内であり、前回の再生周期では第２系列でフェードインする波形９０９が読み出されていた。そのため、現再生周期では、ｒｐは９０７の位置にあり、第１系列ではフェードアウトする波形９１０が読み出される。
【００６３】
一方、前回の再生周期において、理想ポインタはＴ２_old×ＣＲａｔｅだけ進み、９０４の位置に来ている。このとき、ｄｉｆは矢印９１２の示すｄｉｆ_old1であり、理想ポインタが領域９０６の範囲内にあるため、現再生周期では第２系列でフェードインする波形９１１が読み出される。
【００６４】
結局、現再生周期において、第１系列の波形９１０と第２系列の波形９１１によるクロスフェードが行なわれ、その再生周期で９０７の位置にあった読み出しポインタｒｐは２周期分飛び越した位置９０８のｒｐ_nextまで進行する。
【００６５】
各再生周期において仮想アドレスの進む量は、ＣＲａｔｅの設定により図９の例より大きくも小さくもでき、また、値を負にすれば逆方向に進行させることもできる。上記例の方法にしたがえば、その進行する仮想アドレスに応じて、各再生周期で第２系列において読み出す波形周期を正方向あるいは逆方向に自由にジャンプさせることができる。
【００６６】
図１０は、ＣＲａｔｅ＝１．５のとき（図４の４１３の例）の制御例を示す。１００１は第１系列の読み出しアドレスの進み方を示す。横軸が時間であり、再生周期ごとにＮ処理、Ｃ処理、Ｎ処理、Ｃ処理という順で処理する。縦軸は読み出しアドレスを示す。６つの波形周期Ａ〜Ｆのどの辺りをポイントするかが分かるように縦軸に並べて波形データを示す線分１００５をおいてある。１００２は第２系列の読み出しアドレスの進み方を示す。１００３は読み出しポインタｒｐの値の変化を示し、１００４はサイクルカウントＣＣの値の変化を示す。サイクルカウントＣＣは、各再生周期ごとに、累算により徐々に増加していくように変化する。ｒｐは上述したようにＡ，Ｂ，Ｄ，Ｅをポイントするように進む。ｒｐとＣＣとを加算して第１系列のアドレスが１００１に示すように生成される。第２系列のアドレスは、１００２に示すようにＡ，Ｃ，Ｄ，Ｆを読み出すように進む。このようなアドレスでそれぞれ読み出された波形がクロスフェードされる。これにより、４周期分の再生時間で、指定されたピッチで、楽音波形が出力される。
【００６７】
図１１は等倍（ＣＲ＝１．０）のときの例、図１２は伸張（ＣＲ＝０．７５）のときの例を示す。
【００６８】
図１３（ａ）および（ｂ）は、ＴＳＣ制御でピッチ一定で再生時間のみを圧縮伸張した場合の時間とアドレスの時間変化を示す。点線１３０１〜１３０４は、指定した再生時間でアドレスが進むと仮定したときのアドレス、すなわち理想ポインタ（仮想アドレス）の進み方を示す。これに対し、実線１３１１〜１３２４は、実ポインタの進み方を示す。平行な２本の点線で挟まれた範囲はクロスフェードする範囲である。
【００６９】
本発明は、以下のように応用することができる。ビブラート、トレモロ等の奏法により演奏された楽器音を、その変調周期の長さ分録音しておく。発音指示に応じて、録音された変調波形データをループ読みする。その際、実読み出しポインタは指示された楽音ピッチに応じた速度で進め、仮想読み出しポインタは元の変調周期と指示された変調周期との比に基づく速度で進めれば、１つの変調波形データから、任意のピッチ、任意の変調周期を有する楽音を生成することができる。
【００７０】
ギター等のピッチベンド奏法に基づく波形を１つ録音する。録音されたベンド波形データの読み出し時、所望のピッチに応じて実読み出しポインタの速度を、所望のベンド速度で仮想読み出しポインタの速度を、それぞれ制御すれば、１つのベンド波形データから、任意のピッチで任意のベンド速度のベンド波形が再生される。
【００７１】
録音された発音開始から終了の波形データの、立ち上がり部の長さ、立ち下がり部の長さを、それぞれ独立に、しかも再生ピッチに関係なく、制御できる。図１６の１６０１は、立ち上がり部や立ち下がり部のみの再生時間を伸縮するために用いるパラメータの変化の一例を示す。
【００７２】
仮想読み出しポインタの変化をノイズ、カオス波形などの揺らぎ波形により制御すれば、ＰＣＭ音源の波形音色に変化を付けられる。図１６の１６０２は、時間的に伸縮比を揺らがせて、音色変化を得る例である。
【００７３】
特に、揺らぎ波形により波形データのループ部の単調性を回避できる。そのためには、複数周期のループ波形を用意しておく必要がある。まず管楽器、ギター等におけるスラー演奏の波形を録音しておく。スラー波形データの再生時、前の音高から次の音高に移動する長さ（スラー時間）を、楽音ピッチに関係なく自由に制御することができる。
【００７４】
弦楽器、管楽器などの前打音を伴う演奏音の波形を録音しておく。前打音付き波形データの再生時、前打音の時間長を楽音ピッチに関係なく制御できる。ＰＣＭ音源において、１つの複数周期波形データを再生ピッチに応じて読み出しても、波形の再生時間を一定にすることができる。または、再生ピッチと独立に再生時間を制御できる。ＰＣＭ音源において、１つの複数周期波形データから、再生時間の異なる複数の音色波形を作成できる。ＰＣＭ音源において、１つの複数周期波形データの再生時間長を、指定された音符長に揃えることができる。ループ読出による再生時間長では、ループ部で音色が単調になるが、本発明の方法ではその間も徐々に音色を変化させられるので、その単調性を回避できる。このほかにも広く応用できる。
【００７５】
なお、リサンプリング技術を使用して、予め、複数周期波形の各周期の長さを所定長に加工して波形メモリに書き込むようにしても良い。上記実施の形態では「Ｎ処理（ノーマル処理）」の場合にもクロスフェードを行なっているが、Ｎ処理の場合にはクロスフェードの必要が無いことは自明であるので、そのように作り変えても良い。
【００７６】
実施例では１つの波形周期に１周期の波形データを記憶する、としたが、１つの波形周期の中に複数周期の波形データが入るようにしても良い。さらに、各波形周期毎に、異なる周期数の波形データが入るようになっていても良い。要は、波形周期の切れ目同士が互いに滑らかにつながるようになっていれば良い。
【００７７】
上記実施の形態では、１再生周期ごとに仮想アドレスと実アドレスによる進行制御を行なっていたが、該進行制御をもっと短い周期、あるいは長い周期で行なうようにしても良い。さらに、１波形の再生の途中において、比較制御を行う周期を変更するようにしても良い。
【００７８】
上記実施の形態では、累積差分ｄｉｆを波形メモリのアドレスと同じ単位上で扱っていたが、波形周期を単位とするように変更することもできる。その場合の条件式は、次のようになる。
ｄｉｆ＝ｄｉｆ＋Δｄｉｆ
Ｓ処理、Ｎ処理、Ｃ処理の選択
・ｄｉｆ≧  ０．５（周期の半分より差が大きい）    Ｃ処理
・ｄｉｆ≦−０．５（周期の半分より差が大きい）    Ｓ処理
その他  （周期の半分より差が小さい）    Ｎ処理
Δｄｉｆ演算
・Ｓ処理    Δｄｉｆ＝ＣＲ
・Ｎ処理    Δｄｉｆ＝ＣＲ−１
・Ｃ処理    Δｄｉｆ＝ＣＲ−２
【００７９】
図１７は、本発明の他の実施の形態を示す。この波形発生部１７０１は、波形メモリ１７１１、波形周期情報メモリ１７１２、実読み出しアドレスカウンタ１７１３、仮想読み出しアドレスカウンタ１７１４、制御回路１７１５、補間部１７１６，１７１７、およびクロスフェード合成部１７１８を備えている。
【００８０】
この波形発生部１７０１の基本的な動作は、上述の波形発生部１１１と同様である。上記実施の形態の波形発生部１１１では仮想アドレスを逐次進める代わりに、Δｄｉｆを累算していって、直接、ｄｉｆを求めていた。この波形発生部１７０１では、仮想読み出しアドレスカウンタ１７１４で仮想アドレスを求め、制御回路１７１５で実アドレスと仮想アドレスのずれ分を算出する点が異なる。
【００８１】
なお、上記の発明の実施の形態では、各波形周期のスタート位置が１種類の位相値（振幅値と傾き）で同位相となるようにしているが、これに限らず、２種類（あるいはそれ以上）の位相値で同位相となるポイントで区切ってもよい。この場合、再生周期の終了時点で、何れかの位相値のポイントで次の波形周期につなげていけばよい。
【００８２】
【発明の効果】
以上説明したように、この発明によれば、波形メモリ読み出し方式の音源において、複数周期波形のうちの一部の波形の波形再生時間を、指定された音高とは独立に変更するように制御しているので、読み出す波形データの時間軸上の圧縮伸張を行なうことができる。
【図面の簡単な説明】
【図１】  本発明に係る波形再生装置を適用した電子楽器の全体構成図
【図２】  波形発生部の詳細図
【図３】  波形メモリ読み出し部の詳細図
【図４】  ＴＳＣ制御の基本概念を説明するための図
【図５】  第１系列目で読み出す波形周期と第２系列目で読み出す波形周期のクロスフェードの様子を示す図
【図６】  アタック部およびループ部を有する波形データの例を示す図
【図７】  演算部の処理内容をＳ処理、Ｎ処理、Ｃ処理別にまとめた図
【図８】  Ｓ処理、Ｎ処理、およびＣ処理の選択決定の仕方を示す説明図
【図９】  図８をさらに一般化した図
【図１０】  ＣＲａｔｅ＝１．５のときの制御例を示す図
【図１１】  ＣＲａｔｅ＝１のときの制御例を示す図
【図１２】  ＣＲａｔｅ＝０．７５のときの制御例を示す図
【図１３】  ＴＳＣ制御でピッチ一定で再生時間のみを圧縮伸張した場合の時間とアドレスの時間変化を示す図
【図１４】  波形伸縮の様子を示す図
【図１５】  波形伸縮の様子を示す図
【図１６】  伸縮比の変化例を示す図
【図１７】  本発明の他の実施の形態を示す図
【符号の説明】
１０１…ＭＩＤＩインターフェース、１０２…制御部、１０３…音源部、１０４…ディジタル・アナログ変換器（ＤＡＣ）、１０５…サウンドシステム１１１…波形発生部、１１２…音量制御部、１１３…制御レジスタ、１１４…チャンネル累算部、３０１…波形メモリ、３０２…演算部、３０３…サイクル内カウンタ、３０４…インデックスカウンタ、３０５，３０６…周期長格納レジスタ、３０７…累積差分格納レジスタ、３０８…読み出しレジスタ（ｒｐレジスタ）、３０９，３１０…ピッチ補間部、３１１，３１２…乗算器、３１３…補正部、３１４…加算器。
【図１】
0003873268.tif 000002
【図２】
0003873268.tif 000003
【図３】
0003873268.tif 000004
【図４】
0003873268.tif 000005
【図５】
0003873268.tif 000006
【図６】
0003873268.tif 000007
【図７】
0003873268.tif 000008
【図８】
0003873268.tif 000009
【図９】
0003873268.tif 000010
【図１０】
0003873268.tif 000011
【図１１】
0003873268.tif 000012
【図１２】
0003873268.tif 000013
【図１３】
0003873268.tif 000014
【図１４】
0003873268.tif 000015
【図１５】
0003873268.tif 000016
【図１６】
0003873268.tif 000017
【図１７】
0003873268.tif 000018