(57)【特許請求の範囲】
【請求項１】
複数の波形データを記憶した記憶手段と、
前記記憶手段に記憶された複数の波形データの中から編集対象となる第１の波形データと基準となる第２の波形データとを指定する指定手段と、
前記第１の波形データの再生部分を指定する第１の再生部分指定手段と、
前記第１の波形データの前記第１の再生部分指定手段により指定された再生部分の拍数を指定する第１の拍数指定手段と、
前記第１の再生部分指定手段によって指定された再生部分と前記第１の拍数指定手段によって指定された拍数とに基づいて、前記第１の波形データの１拍の長さを演算する第１の波形データ演算手段と、
前記第２の波形データの再生部分を指定する第２の再生部分指定手段と、
前記第２の波形データの前記第２の再生部分指定手段により指定された再生部分の拍数を指定する第２の拍数指定手段と、
前記第２の再生部分指定手段によって指定された再生部分と前記第２の拍数指定手段によって指定された拍数とに基づいて、前記第２の波形データの１拍の長さを演算する第２の波形データ演算手段と、
前記第１の波形データ演算手段によって演算された前記第１の波形データの１拍の長さが、前記第２の波形データ演算手段によって演算された前記第２の波形データの１拍の長さと一致するように、前記第１の波形データを圧縮または伸長する編集手段と
を有する波形データ編集装置。
【請求項２】
請求項１に記載の波形データ編集装置において、
前記編集手段は、前記第１の波形データの１拍の整数分の１の長さを単位として前記第１の波形データを分割し、前記分割された第１の波形データが前記第２の波形データの１拍の前記整数分の１の長さと一致するように前記分割された第１の波形データを圧縮または伸長する
ものである波形データ編集装置。
【請求項３】
複数の波形データを記憶した記憶手段と、
前記記憶手段に記憶された複数の波形データの中から編集対象となる第１の波形データと基準となる第２の波形データとを指定する指定手段と、
前記第１の波形データの再生部分を指定する第１の再生部分指定手段と、
前記第２の波形データの再生部分を指定する第２の再生部分指定手段と、
前記第１の再生部分指定手段によって指定された再生部分の長さが、前記第２の再生部分指定手段によって指定された再生部分の長さと一致するように、前記第１の波形データを圧縮または伸長する編集手段と
を有する波形データ編集装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、波形データ編集装置に関し、さらに詳細には、複数の波形データを同時に再生する際の編集に用いて好適な波形データ編集装置に関する。
【０００２】
【従来の技術】
一般に、電子楽器においては、例えば、複数の波形データを予め記憶しておき、これら複数の波形データの中から２つ以上の波形データを選択し、選択した２つ以上の波形データを同時に再生することができるようになされている。
【０００３】
ところで、２つ以上の波形データを同時に再生する場合には、各波形データのテンポや長さが一致している方が、これら波形データを同時に再生した際に得られる楽音としては聴感上心地よいことが知られている。
【０００４】
ところが、一般に、任意の２つ以上の波形データのテンポや長さが一致していることは稀であり、一致していないことの方が遥かに多い。
【０００５】
このため、従来の電子楽器においては、２つ以上の波形データを同時に再生する場合には、各波形データを再生した際の長さが一致するように、使用者が電卓やストップウオッチを用いて各波形データ間におけるテンポや長さの割合の計算を行い、この計算に従って各波形データを再生する際の長さを変更するようにしていた。
【０００６】
しかしながら、複数の波形データを再生する度毎に、これら波形データを再生する際の長さを一致させるために、上記した各波形データ間におけるテンポや長さの割合の計算をおこなうということは、非常に煩雑であり、かつ、時間がかかるという問題点があった。
【０００７】
【発明が解決しようとする課題】
本発明は、上記したような従来の技術の有する種々の問題点に鑑みてなされたものであり、その目的とするところは、複数の波形データを同時に再生する際に、各波形データを再生する際の長さが一致するように、波形データを自動的に編集することができる波形データ編集装置を提供しようとするものである。
【０００８】
【課題を解決するための手段】
上記目的を達成するために、本発明のうち請求項１に記載の発明は、複数の波形データを記憶した記憶手段と、上記記憶手段に記憶された複数の波形データの中から編集対象となる第１の波形データと基準となる第２の波形データとを指定する指定手段と、上記第１の波形データの再生部分を指定する第１の再生部分指定手段と、上記第１の波形データの上記第１の再生部分指定手段により指定された再生部分の拍数を指定する第１の拍数指定手段と、上記第１の再生部分指定手段によって指定された再生部分と上記第１の拍数指定手段によって指定された拍数とに基づいて、上記第１の波形データの１拍の長さを演算する第１の波形データ演算手段と、上記第２の波形データの再生部分を指定する第２の再生部分指定手段と、上記第２の波形データの上記第２の再生部分指定手段により指定された再生部分の拍数を指定する第２の拍数指定手段と、上記第２の再生部分指定手段によって指定された再生部分と上記第２の拍数指定手段によって指定された拍数とに基づいて、上記第２の波形データの１拍の長さを演算する第２の波形データ演算手段と、上記第１の波形データ演算手段によって演算された上記第１の波形データの１拍の長さが、上記第２の波形データ演算手段によって演算された上記第２の波形データの１拍の長さと一致するように、上記第１の波形データを圧縮または伸長する編集手段とを有するようにしたものである。
【００１１】
従って、本発明のうち請求項１に記載の発明によれば、１拍の長さを単位として第１の波形データの長さが圧縮または伸長されることになる。
【００１２】
また、本発明のうち請求項２に記載の発明は、本発明のうち請求項１に記載の発明において、上記編集手段が、上記第１の波形データの１拍の整数分の１の長さを単位として上記第１の波形データを分割し、上記分割された第１の波形データが上記第２の波形データの１拍の上記整数分の１の長さと一致するように上記分割された第１の波形データを圧縮または伸長するものである。
【００１３】
従って、本発明のうち請求項２に記載の発明によれば、１拍の長さの整数分の１の長さを単位として第１の波形データの長さが圧縮または伸長されることになる。
【００１４】
また、本発明のうち請求項３に記載の発明は、複数の波形データを記憶した記憶手段と、上記記憶手段に記憶された複数の波形データの中から編集対象となる第１の波形データと基準となる第２の波形データとを指定する指定手段と、上記第１の波形データの再生部分を指定する第１の再生部分指定手段と、上記第２の波形データの再生部分を指定する第２の再生部分指定手段と、上記第１の再生部分指定手段によって指定された再生部分の長さが、上記第２の再生部分指定手段によって指定された再生部分の長さと一致するように、上記第１の波形データを圧縮または伸長する編集手段とを有するようにしたものである。
【００１５】
従って、本発明のうち請求項３に記載の発明によれば、第１の波形データの再生部分の長さが圧縮または伸長されて、第１の波形データの再生部分の長さと第２の波形データの再生部分の長さとが一致することになる。
【００１６】
【発明の実施の形態】
以下、添付の図面を参照しながら、本発明による波形データ編集装置の実施の形態の一例を詳細に説明する。
【００１７】
図１には、本発明による波形データ編集装置の実施の形態の一例を備えた電子楽器の全体構成を表すブロック構成図が示されている。
【００１８】
この電子楽器は、その全体の動作の制御を中央処理装置（ＣＰＵ）１０を用いて制御するように構成されており、このＣＰＵ１０には、バス１２を介して、予め複数の音声（楽音）をあるサンプリング周波数によりサンプリングすることによって得た複数の波形データを記憶した波形メモリ１４と、この電子楽器の動作を制御するためのプログラムなどが記憶されたリードオンリメモリ（ＲＯＭ）１６と、ワーキング用の領域などが設定されたランダム・アクセス・メモリ（ＲＡＭ）１８と、波形データの再生を行う再生器２０と、後述する各種の設定を行うための操作子群ならびに表示器などが設けられた操作パネル２２とを有して構成されている。
【００１９】
即ち、図１に示す電子楽器においては、ＣＰＵ１０によって全体の動作の制御が行われるものであり、再生器２０はＣＰＵ１０の制御の下に波形メモリ１４に記憶された波形データを再生し、再生された波形データはデジタル／アナログ変換器やスピーカーなどから構成されるサウンドシステム（図示せず）を経て、音声（楽音）として出力されることになる。
【００２０】
図２には、操作パネル２２の構成が示されており、操作パネル２２には、表示器としての液晶ディスプレイ装置（ＬＣＤ）３０と、ＬＣＤ３０に表示されるカーソルをＬＣＤ３０において右方向に移動するためのカーソル右方向移動操作子３２と、ＬＣＤ３０に表示されるカーソルをＬＣＤ３０において左方向に移動するためのカーソル左方向移動操作子３４と、パラメータを増加（プラス：＋）させる場合およびある操作を肯定（Ｙｅｓ）的に確認をする場合に操作する＋／Ｙｅｓ操作子３６と、パラメータを減少（マイナス：−）させる場合およびある操作を否定（Ｎｏ）的に確認をする場合に操作する−／Ｎｏ操作子３８と、波形データの長さを変換するモード（以下、「タイムストレッチモード」と称する。）に入る際に操作するタイムストレッチ（Ｔｉｍｅ  Ｓｔｒｅｃｈ）操作子４０と、後述する波形パラメータなどの各種パラメータのパラメータ値を設定するためのモード（以下、「サンプルエディットモード」と称する。）に入る際に操作するサンプルエディット（Ｓａｍｐｌｅ  Ｅｄｉｔ）操作子４２と、サンプルエディットモードにおいて波形パラメータなどの各種パラメータのパラメータ値を設定する際に使用するテン・キー４４と、図２上において符号ａ〜ｄにより示す４個のパッド操作子４６とが設けられている。
【００２１】
ここで、各パッド操作子４６には、波形メモリ１４に記憶された波形データがそれぞれ割り当てられているものであり、図２上における符号ａ〜ｄに対応してパッド番号ａ〜ｄがふられて管理されている。そして、各パッド操作子４６の操作に応じて、操作されたパッド操作子４６に割り当てられている波形データが波形メモリ１４から読み出されて、再生器２０により再生されることになる。
【００２２】
図３には、波形メモリ１４のフォーマットが概念的に示されており、波形メモリ１４には、パッド番号ａのパッド操作子４６に割り当てられる波形データを記憶する領域たる波形ａエリアと、パッド番号ｂのパッド操作子４６に割り当てられる波形データを記憶する領域たる波形ｂエリアと、パッド番号ｃのパッド操作子４６に割り当てられる波形データを記憶する領域たる波形ｃエリアと、パッド番号ｄのパッド操作子４６に割り当てられる波形データを記憶する領域たる波形ｄエリアとが設けられており、これら波形ａエリア〜波形ｄエリアに、あるサンプリング周波数でサンプリングされた音声（楽音）の波形データがそれぞれ記憶されている。なお、各波形エリアは、同じ大きさになっている。
【００２３】
図４には、ＲＡＭ１８の本発明に関わる記憶領域のフォーマットが概念的に示されており、ＲＡＭ１８には、後述するシステムパラメータを記憶したシステムエリアと、波形パラメータを記憶した波形パラメータエリアと、タイムストレッチモードにおいて使用するタイムストレッチパラメータを記憶するタイムストレッチパラメータエリアと、タイムストレッチモードにおいて使用するタイムストレッチバッファのためのタイムストレッチバッファエリアとが設けられている。
なお、タイムストレッチバッファエリアは、長さの変更された波形データを一時記憶するためのものであり、波形メモリ１４の各波形エリアと同じ大きさとなされている。
【００２４】
次に、図５に示す波形パラメータの概念説明図を参照しながら、ＲＡＭ１８の波形パラメータエリアに記憶される波形パラメータについて説明するが、波形パラメータエリアに記憶される波形パラメータとしては、以下の（１）〜（７）に示すものがある。
【００２５】
なお、本明細書において、「ブロック」とは、タイムストレッチモードにおいて波形データを伸張または圧縮する際の処理単位を意味するものとする。
【００２６】
また、各波形パラメータを示す符号の添字「ｎ」は、「ａ」、「ｂ」、「ｃ」あるいは「ｄ」のいずれかをとるものであり、「ｎ＝ａ」の場合にはその波形パラメータは波形メモリ１４の波形ａエリアに記憶された波形データに関するものであることを示し、「ｎ＝ｂ」の場合にはその波形パラメータは波形メモリ１４の波形ｂエリアに記憶された波形データに関するものであることを示し、「ｎ＝ｃ」の場合にはその波形パラメータは波形メモリ１４の波形ｃエリアに記憶された波形データに関するものであることを示し、「ｎ＝ｄ」の場合にはその波形パラメータは波形メモリ１４の波形ｄエリアに記憶された波形データに関するものであることを示している。また、本明細書において、波形データを記憶するメモリの１つのアドレスには、波形データの１つのサンプルが記憶されているものとする。
【００２７】
（１）Ｓｎ：フレーズ（本明細書においては、波形ａエリア〜波形ｄエリアにそれぞれ記憶される波形データの中で、再生対象として指定される領域を意味するものとする。）の開始点（フレーズ再生開始点）を示す波形パラメータである。Ｓｎは、使用者がサンプルエディットモードにおいてテン・キー４４を用いて任意に設定可能なようになされている。
【００２８】
（２）Ｌｎ：フレーズをループ（繰り返し）再生する際のループ部分の開始点（フレーズループ点）を示す波形パラメータである。Ｌｎは、使用者がサンプルエディットモードにおいてテン・キー４４を用いて任意に設定可能なようになされている。
【００２９】
（３）Ｅｎ：フレーズの終了点（フレーズ再生終了点）を示す波形パラメータである。Ｅｎは、使用者がサンプルエディットモードにおいてテン・キー４４を用いて任意に設定可能なようになされている。
【００３０】
（４）Ｕｎ：波形ａエリア〜波形ｄエリアにそれぞれ記憶される波形データの長さに１ブロック分の長さを加えた値を示す波形パラメータであり、波形データの記憶されるメモリのアドレスを単位としている。Ｕｎは、波形エリアに設定されている波形データの長さに基づいて自動的に設定される。
【００３１】
（５）Ｎｎ：「Ｅｎ−Ｌｎ」の長さ、即ち、ループ部分の長さを基準となる音符の何拍分とするかを示す波形パラメータである。Ｎｎは、使用者がサンプルエディットモードにおいてテン・キー４４を用いて任意に設定可能なようになされている。
【００３２】
（６）Ｏｎ：Ｎｎ設定のための基準となる音符を示す波形パラメータである。
Ｏｎは、使用者がサンプルエディットモードにおいてテン・キー４４を用いて任意に設定可能なようになされている。
【００３３】
（７）△Ｍｎ：「ブロックの長さ＝Ｏｎ×（Ｅｎ−Ｌｎ）／Ｎｎ／４／Ｍｓ」を示す波形パラメータである。△Ｍｎは、波形データの記憶されるメモリのアドレスを単位としており、Ｏｎ、Ｅｎ、Ｌｎ、Ｎｎ、Ｍｓ（Ｍｓについては後述する。）に基づいて自動的に設定される。
【００３４】
図６には、ＲＡＭ１８の波形パラメータエリアのフォーマットが概念的に示されており、波形メモリ１４の波形ａエリア〜波形ｄエリアにそれぞれ記憶された波形データに関して、各波形データ毎に上記した波形パラメータがそれぞれ記憶されている。
【００３５】
次に、ＲＡＭ１８のシステムエリアに記憶されるシステムパラメータについて説明する。
【００３６】
システムパラメータとしては、以下の（１）〜（２）に示すものがある。
【００３７】
（１）Ｍｓ：４分音符の何分の１をブロックの長さにするかを示すシステムパラメータである。取り得る値は１〜１６であり、使用者がサンプルエディットモードにおいてテン・キー４４を用いて任意に設定可能なようになされているが、デフォルト値としては「４」が設定されている。従って、デフォルト値の４においては、４分音符の４分の１をブロックの長さとすることになる。
【００３８】
（２）Ｆｌ：後述するタイムストレッチモードにおいてクロスフェードさせる際のサンプル数であるフェードサンプル数の半分の値を示すシステムパラメータである。取り得る値は、０〜１００であり、使用者がサンプルエディットモードにおいてテン・キー４４を用いて任意に設定可能なようになされているが、デフォルト値は２０に設定されている。
【００３９】
以上の構成において、この電子楽器によって実行される処理について説明するが、再生器１８による波形データの再生処理やサンプルエディットモードにおけるテン・キー４４を用いた各種パラメータの設定処理に関しては、従来より公知の技術を転用すればよいので、以下の説明においては、この電子楽器を構成する本発明による波形データ編集装置の実施に関連する点のみを説明するものとする。
【００４０】
即ち、この電子楽器においては、操作パネル２２のタイムストレッチ操作子４０を操作すると、タイムストレッチモードに入り、ＬＣＤ３０が図７に示す画面表示に切り換わる。
【００４１】
ＬＣＤ３０において、カーソルＣは、カーソル右方向移動操作子３２とカーソル左方向移動操作子３４との操作により、「ｆｒｏｍ  Ｐａｄ［  ］」の領域と「ｔｏ  Ｐａｄ［  ］」の領域との２箇所に移動可能とされており、所望の領域にカーソルＣを移動し、所望のパッド操作子４６を押すと、押されたパッド操作子４６に割り当てられている波形データが波形メモリ１４から読み出されて再生器１８により再生されるとともに、カーソルＣがある位置の「［  ］内に、押されたパッド操作子４６のパッド番号が入る。図７においては、「ｆｒｏｍ  Ｐａｄ［  ］」の領域にはパッド番号ａが入れられており、「ｔｏ  Ｐａｄ［  ］」の領域にはパッド番号ｂが入れられている場合が示されている。
【００４２】
また、ＬＣＤ３０には、
△：「ｆｒｏｍ  Ｐａｄ［  ］」の領域と「ｔｏ  Ｐａｄ［  ］」の領域とに入れられたパッド番号にそれぞれ対応する波形データに設定されたブロックの長さ△Ｍｎ（ｎ＝ａ，ｂ，ｃ，ｄ）
％：「ｆｒｏｍ  Ｐａｄ［  ］」の領域と「ｔｏ  Ｐａｄ［  ］」の領域とに入れられたパッド番号にそれぞれ対応する波形データに設定されたブロックの長さの割合
を表示するようになされている。
【００４３】
従って、図７に示す表示画面には、パッド番号ａの波形データたる「ブロックの長さ△＝５５１２．５」の波形データを、パッド番号ｂの波形データたる「ブロックの長さ△＝４７２５．０」の波形データに合うように、「長さの割合％＝８５．７１」の割合で変換（この場合に「変換」は、パッド番号ａの波形データの長さを、パッド番号ｂの波形データの長さに一致するように、「８５．７１％」に圧縮することを意味する。）される状態であることが示されている。
【００４４】
この図７に示すＬＣＤ３０の表示状態において、＋／Ｙｅｓ操作子３６を操作するとタイムストレッチイベントが発生し、後述する図８乃至図１０に示すフローチャートのタイムストレッチ処理のルーチンが起動されて実行が開始される。
一方、この図７に示すＬＣＤ３０の表示状態において、−／Ｎｏ操作子３８を操作すると、タイムストレッチモードがキャンセルされて、ＬＣＤ３０の画面表示が従前に表示されていた画面に切り替わる。
【００４５】
次ぎに、図８乃至図１０に示すタイムストレッチ処理のルーチンのフローチャートを参照しながら、タイムストレッチ処理を説明するが、このフローチャートは、パッド番号ａの波形データを、パッド番号ｂの波形データに合わせるように圧縮または伸長する場合について示しているが、他の場合についても同様な処理を行えばよいことは勿論である。
【００４６】
なお、このタイムストレッチ処理のルーチンのフローチャートにおいて使用されるデータとしては、以下の（１）乃至（４）に示すものがある。
【００４７】
（１）Ａ（ｘ）：パッド番号ａの波形データたるフレーズＡのアドレスｘに対する波形データである。
【００４８】
（２）Ｔ（ｘ）：タイムストレッチバッファの波形データのアドレスｘに対するデータである。
【００４９】
（３）商（ｘ／ｙ）：割り算ｘ／ｙの解の実数部分を示すデータである。
【００５０】
（４）余（ｘ／ｙ）：割り算ｘ／ｙの解の実数部分を示すデータである。
【００５１】
また、このタイムストレッチ処理のルーチンのフローチャートにおいて使用されるレジスタまたはフラグとしては、以下の（１）乃至（８）に示すものがある。
【００５２】
（１）ｎ：タイムストレッチバッファのアドレスを記憶するレジスタである。
（２）Ｚ：レジスタｎの値より算出されるフレーズＡのアドレスを記憶するレジスタである
（３）Ｆ：最終ブロックであるかを示すフラグであり、「Ｆ＝０」のときはまだ最終ブロックでないと判断しクロスフェードをすることを示し、「Ｆ＝１」のときは最終ブロックであると判断しクロスフェードをしないことを示す。
【００５３】
（４）Ｘ：レジスタｎの値をパッド番号ｂの波形データたるフレーズＢのブロックの長さ△Ｍｂで分割した時の番号（自然数）を記憶するレジスタである。
【００５４】
（５）Ｙ：Ｘ番目のブロックの中でのアドレスを記憶するレジスタである。
【００５５】
（６）Ｙ’：Ｙの値が転送されるレジスタである。
【００５６】
（７）Ｊ：クロスフェード部分の重みを記憶しておくレジスタである。
【００５７】
（８）Ｋ：クロスフェード部分の重みを記憶しておくレジスタである。
【００５８】
なお、レジスタＹの値がフレーズＢのブロックの中点△Ｍｂ／２を越えたときに、「（Ｘ＋１）×△Ｍａ＋Ｆｌ」と「Ｘ×△Ｍａ＋△Ｍｂ＋Ｆｌ」とのどちらかがパラメータＵａ（フレーズＡの波形データの長さ＋１）よりも大きくなった場合にＦに「１」をセットし、以後のブロックが複数ブロックあってもこれを単一ブロックと見なして、レジスタＺの値のみをインクリメントするようにしている。
【００５９】
また、Ｓｔ、Ｌｔ、Ｅｔ、Ｕｔは、タイムストレッチバッファ（以下、タイムストレッチバッファをＴにより示す。）のアドレスを示すタイムストレッチパラメータである。
【００６０】
そして、タイムストレッチイベントが発生されて、図８に示すタイムストレッチ処理のメインルーチンが起動されると、まず、ステップＳ８０２において、タイムストレッチパラメータＳｔ、Ｌｔ、Ｅｔ、Ｕｔに最大値をセットし、レジスタｎに０をセットし、レジスタＹに０をセットし、フラグＦに０をセットするという初期設定の処理を行う。
【００６１】
そして、ステップＳ８０２の処理を終了すると、ステップＳ８０４へ進み、タイムストレッチ処理のサブルーチンである読み出しアドレス算出処理ルーチン（図９）を実行する。
【００６２】
この図９に示す読み出しアドレス算出処理ルーチンにおいては、フラグＦに０がセットされているか否かを判断し（ステップＳ９０２）、フラグＦに０がセットされていないと判断された場合、即ち、フラグＦに１がセットされていると判断された場合には、レジスタＺを１だけインクリメントして（ステップＳ９０４）、タイムストレッチ処理のメインルーチンにリターンする。
【００６３】
一方、フラグＦに０がセットされている場合には、現在のレジスタＹの値をレジスタＹ’に転送して保存し（ステップＳ９０６）、データ「商（ｎ／△Ｍｂ）」の値（ｎを長さ△Ｍｂで分割した時の番号（自然数））をレジスタＸに代入し、データ「余（ｎ／Ｍｂ）」の値（フレーズＢのＸ番目のブロックの中でのアドレス）をレジスタＹに代入し、「Ｘ×△Ｍａ＋Ｙ」の演算結果（ｎより算出されるフレーズＡのアドレス）をレジスタＺに代入する（ステップＳ９０８）。
【００６４】
それから、前回のレジスタＹの値を記憶したレジスタＹ’の値がフレーズＢのブロックの中点△Ｍｂ／２より小さく、かつ、フレーズＢのブロックの中点△Ｍｂ／２がレジスタＹの値（フレーズＢのＸ番目のブロックの中でのアドレス）以下であるか否かを判断する（ステップＳ９１０）。
【００６５】
ここで、前回のレジスタＹの値を記憶したレジスタＹ’の値がフレーズＢのブロックの中点△Ｍｂ／２より小さく、かつ、フレーズＢのブロックの中点△Ｍｂ／２がレジスタＹの値（フレーズＢのＸ番目のブロックの中でのアドレス）以下であるとは判断されなかった場合には、タイムストレッチ処理のメインルーチンにリターンする。
【００６６】
一方、前回のレジスタＹの値を記憶したレジスタＹ’の値がフレーズＢのブロックの中点△Ｍｂ／２より小さく、かつ、フレーズＢのブロックの中点△Ｍｂ／２がレジスタＹの値（フレーズＢのＸ番目のブロックの中でのアドレス）以下である場合には、パラメータＵａの値（フレーズＡの波形データの長さ＋１）が「Ｘ×△Ｍａ＋△Ｍｂ＋Ｆｌ」以下であるか、または、パラメータＵａの値（フレーズＡの波形データの長さ＋１）が「（Ｘ＋１）×△Ｍａ＋Ｆｌ」以下であるか否かを判断する（ステップＳ９１２）。
【００６７】
ここで、パラメータＵａの値（フレーズＡの波形データの長さ＋１）が「Ｘ×△Ｍａ＋△Ｍｂ＋Ｆｌ」以下であるか、または、パラメータＵａの値（フレーズＡの波形データの長さ＋１）が「（Ｘ＋１）×△Ｍａ＋Ｆｌ」以下であるとは判断されなかった場合には、タイムストレッチ処理のメインルーチンにリターンする。
【００６８】
一方、パラメータＵａの値（フレーズＡの波形データの長さ＋１）が「Ｘ×△Ｍａ＋△Ｍｂ＋Ｆｌ」以下であるか、または、パラメータＵａの値（フレーズＡの波形データの長さ＋１）が「（Ｘ＋１）×△Ｍａ＋Ｆｌ」以下であると判断された場合には、フラグＦに１をセットしてから（ステップＳ９１４）、タイムストレッチ処理のメインルーチンにリターンする。
【００６９】
上記したステップＳ８０４の読み出しアドレス算出処理ルーチンを終了すると、ステップＳ８０６へ進む。
【００７０】
そして、ステップＳ８０６では、Ｓ点の判定を行うものであり、レジスタＺの値（レジスタｎより算出されるフレーズＡのアドレス）がフレーズＡのフレーズ再生開始点Ｓａの値以上であり、かつ、タイムストレッチパラメータＳｔが最大値であるか否かを判断する。
【００７１】
ここで、レジスタＺの値（レジスタｎより算出されるフレーズＡのアドレス）がフレーズＡのフレーズ再生開始点Ｓａの値以上であり、かつ、タイムストレッチパラメータＳｔが最大値であると判断された場合には、タイムストレッチパラメータＳｔにレジスタｎの値を代入し（ステップＳ８０８）、それからステップＳ８１０へ進む。
【００７２】
一方、レジスタＺの値（レジスタｎより算出されるフレーズＡのアドレス）がフレーズＡのフレーズ再生開始点Ｓａの値以上であり、かつ、タイムストレッチパラメータＳｔが最大値であるとは判断されなかった場合には、そのままステップＳ８１０へ進む。
【００７３】
そして、ステップＳ８１０では、Ｌ点の判定を行うものであり、レジスタＺの値（レジスタｎより算出されるフレーズＡのアドレス）がフレーズＡのフレーズループ点Ｌａの値以上であり、かつ、タイムストレッチパラメータＬｔが最大値であるか否かを判断する。
【００７４】
ここで、レジスタＺの値（レジスタｎより算出されるフレーズＡのアドレス）がフレーズＡのフレーズループ点Ｌａの値以上であり、かつ、タイムストレッチパラメータＬｔが最大値であると判断された場合には、タイムストレッチパラメーＬｔにレジスタｎの値を代入し（ステップＳ８１２）、それからステップＳ８１４へ進む。
【００７５】
一方、レジスタＺの値（レジスタｎより算出されるフレーズＡのアドレス）がフレーズＡのフレーズループ点Ｌａの値以上であり、かつ、タイムストレッチパラメータＬｔが最大値であるとは判断されなかった場合には、そのままステップＳ８１４へ進む。
【００７６】
そして、ステップＳ８１４では、Ｅ点の判定を行うものであり、レジスタＺの値（レジスタｎより算出されるフレーズＡのアドレス）がフレーズＡのフレーズ再生終了点Ｅａの値以上であり、かつ、タイムストレッチパラメータＥｔが最大値であるか否かを判断する。
【００７７】
ここで、レジスタＺの値（レジスタｎより算出されるフレーズＡのアドレス）がフレーズＡのフレーズ再生終了点Ｅａの値以上であり、かつ、タイムストレッチパラメータＥｔが最大値であると判断された場合には、タイムストレッチパラメーＥｔにレジスタｎの値を代入し（ステップＳ８１６）、それからステップＳ８１８へ進む。
【００７８】
一方、レジスタＺの値（レジスタｎより算出されるフレーズＡのアドレス）がフレーズＡのフレーズ再生終了点Ｅａの値以上であり、かつ、タイムストレッチパラメータＥｔが最大値であるとは判断されなかった場合には、そのままステップＳ８１８へ進む。
【００７９】
そして、ステップＳ８１８では、終了判定を行うものであり、レジスタＺの値（レジスタｎより算出されるフレーズＡのアドレス）がパラメータＵａの値（フレーズＡの波形データの長さ＋１）よりも小さいか否かを判断する。
【００８０】
ここで、レジスタＺの値（レジスタｎより算出されるフレーズＡのアドレス）がパラメータＵａの値（フレーズＡの波形データの長さ＋１）よりも小さいと判断された場合には、ステップＳ８２０へ進み、タイムストレッチ処理のサブルーチンであるデータ処理ルーチン（図１０）を実行する。
【００８１】
この図１０に示すデータ処理ルーチンにおいては、ステップＳ１００２において、レジスタＹの値がＦｌ（フェードサンプル数の半分の値）よりも小さく、かつ、レジスタＸの値が１より大きく、かつ、フラグＦが０にセットされているか否かを判断する。
【００８２】
そして、ステップＳ１００２において、レジスタＹの値がＦｌ（フェードサンプル数の半分の値）よりも小さく、かつ、レジスタＸの値が１より大きく、かつ、フラグＦが０にセットされていると判断された場合には、「１／２＋Ｙ／Ｆｌ」の演算結果をレジスタＪに代入し、「１／２−Ｙ／Ｆｌ」の演算結果をレジスタＫに代入し、「Ｊ×Ａ（Ｚ）＋Ｋ×Ａ（Ｚ−△Ｍａ＋△Ｍｂ）」の演算によりデータＴ（ｎ）を得て（ステップＳ１００４）、タイムストレッチ処理のメインルーチンにリターンする。
【００８３】
一方、ステップＳ１００２において、レジスタＹの値がＦｌ（フェードサンプル数の半分の値）よりも小さく、かつ、レジスタＸの値が１より大きく、かつ、フラグＦが０にセットされているとは判断されなかった場合には、ステップＳ１００６へ進み、レジスタＹの値が「△Ｍｂ−Ｆｌ」の値よりも大きく、かつ、フラグＦが０にセットされているか否かを判断する。
【００８４】
そして、ステップＳ１００６において、レジスタＹの値が「△Ｍｂ−Ｆｌ」の値よりも大きく、かつ、フラグＦが０にセットされていると判断された場合には、「１／２＋（△Ｍｂ−Ｙ）／Ｆｌ」の演算結果をレジスタＪに代入し、「１／２−（△Ｍｂ−Ｙ）／Ｆｌ」の演算結果をレジスタＫに代入し、「Ｊ×Ａ（Ｚ）＋Ｋ×Ａ（Ｚ＋△Ｍａ−△Ｍｂ）」の演算によりデータＴ（ｎ）を得て（ステップＳ１００８）、タイムストレッチ処理のメインルーチンにリターンする。
【００８５】
一方、ステップＳ１００６において、レジスタＹの値が「△Ｍｂ−Ｆｌ」の値よりも大きく、かつ、フラグＦが０にセットされているとは判断されなかった場合には、データＡ（Ｚ）をデータＴ（ｎ）として得て（ステップＳ１０１０）、タイムストレッチ処理のメインルーチンにリターンする。
【００８６】
上記したステップＳ８２０のデータ処理ルーチンを終了すると、ステップＳ８２２へ進んでレジスタｎを１だけインクリメントしてから、ステップＳ８０４へ戻る。
【００８７】
また、ステップＳ８１８において、レジスタＺの値（レジスタｎより算出されるフレーズＡのアドレス）がパラメータＵａの値（フレーズＡの波形データの長さ＋１）よりも小さくない、即ち、レジスタＺの値（レジスタｎより算出されるフレーズＡのアドレス）がパラメータＵａの値（フレーズＡの波形データの長さ＋１）以上であると判断された場合には、タイムストレッチパラメータＵｔにレジスタｎの値を代入する（ステップＳ８２４）。
【００８８】
それから、タイムストレッチバッファＴの波形データを波形メモリ１４の波形ａエリアに書き込み（ステップＳ８２６）、タイムストレッチパラメータＳｔ、Ｌｔ、ＥＴ、Ｕｔを波形パラメータＳａ、Ｌａ、Ｅａ、Ｕａに書き込んで（ステップＳ８２８）このタイムストレッチ処理のメインルーチンを終了する。
【００８９】
従って、上記したタイムストレッチ処理によれば、図１１に示すように、システムパラメータＦ１が設定され、フレーズＡのブロック長さ△Ｍａが「Ｏａ×（Ｅａ−Ｌａ）／Ｎａ／４／Ｍｓ」であり、フレーズＢのブロック長さ△Ｍｂが「Ｏｂ×（Ｅｂ−Ｌｂ）／Ｎｂ／４／Ｍｓ」であり、タイムストレッチバッファＴのアドレスを示すタイムストレッチパラメータがＳｔ、Ｌｔ、Ｅｔ、Ｕｔであるとき、次のようなフレーズＡの波形データを変換する処理が行われる。
【００９０】
即ち、まず、タイムストレッチバッファＴのアドレスを０からカウントアップして行く。
【００９１】
そして、各カウント値をアドレスに持つタイムストレッチバッファＴの値を求めて格納して行くが、このときに、図１２に示すように、求める値が波形パラメータＳａ（フレーズ再生開始点）よりも後ろのアドレスを参照するようになったときタイムストレッチパラメータＳｔをマークし、求める値が波形パラメータＬａ（フレーズループ点）よりも後ろのアドレスを参照するようになったときタイムストレッチパラメータＬｔをマークし、求める値が波形パラメータＥａ（フレーズ再生終了点）よりも後ろのアドレスを参照するようになったときタイムストレッチパラメータＥｔをマークし、求める値が波形パラメータＵａ（フレーズＡの波形データの長さ＋１）よりも後ろのアドレスを参照するようになったときタイムストレッチパラメータＵｔをマークする。
【００９２】
こうしてタイムストレッチパラメータＵｔをマークすると、タイムストレッチバッファＴおよびタイムストレッチパラメータＳｔ、Ｌｔ、Ｅｔ、Ｕｔを、フレーズＡの波形データにコピーするものである。
【００９３】
ここで、図１３（ａ）（ｂ）を参照しながら、フレーズＡの波形データをフレーズＢの波形データの長さに圧縮する場合（△Ｍａが△Ｍｂよりも大きい場合）について説明すると、この場合には、フレーズＡの波形データをフレーズＡにおけるブロック長さ△Ｍａで区切り、ブロック長さ△Ｍａで区切った各ブロックの中で、フレーズＢのブロック長さ△Ｍｂを越える部分（図１３の「注」に示す模様の部分である。）については使わないようにして、フレーズＡの波形データの各ブロックの長さをフレーズＢのブロック長さ△Ｍｂに圧縮するものである。そして、図１３（ｂ）に示すように、フレーズＢのブロック長さ△ＭｂとされたフレーズＡの波形データの各ブロックを、ブロック長さ△Ｍｂの幅で配置して、各ブロック間をクロスフェードで接続するものである。
【００９４】
また、図１４（ａ）（ｂ）を参照しながら、フレーズＡの波形データをフレーズＢの波形データの長さに伸長（△Ｍａが△Ｍｂよりも小さい場合）について説明すると、この場合には、フレーズＡの波形データをフレーズＡにおけるブロック長さ△Ｍａで区切り、ブロック長さ△Ｍａで区切った各ブロックに関して、フレーズＢのブロック長さ△Ｍｂに足りない部分（図１４の「注」に示す模様の部分である。）については重複して使うようにして、フレーズＡの波形データの各ブロックの長さをフレーズＢのブロック長さ△Ｍｂに伸長するものである。そして、図１４（ｂ）に示すように、フレーズＢのブロック長さ△ＭｂとされたフレーズＡの波形データの各ブロックを、ブロック長さ△Ｍｂの幅で配置して、各ブロック間をクロスフェードで接続するものである。
【００９５】
また、図１５を参照しながら、レジスタＹの値が△Ｍｂ／２を越えたときの処理について説明すると、この場合、レジスタＹの値がタイムストレッチデータを△Ｍｂの幅で配置する中点を越えたとき（即ち、レジスタＹの値が△Ｍｂ／２より大きく、レジスタＹ’の値（前回の値）が△Ｍｂ／２より小さいとき）、次回クロスフェードの終了点でのクロスフェードに使う２つのデータを示す２つのアドレス「（Ｘ＋１）×△Ｍａ＋Ｆｌ」、「Ｘ×△Ｍａ＋△Ｍｂ＋Ｆｌ」がパラメータＵａの値以上でないかを判断し、２つのアドレスのうちどちらか一方でもパラメータＵａの値以上であればタイムストレッチの終了が近く、次回のクロスフェード区間でクロスフェードがきれいに行えないということを判断して、以後はレジスタｎとレジスタＺとが１づつ同時にインクリメントされるようにフラグＦに「１」をセットするものである。
【００９６】
従って、以後のブロックは単一のブロックとして変換され、タイムストレッチデータが不連続になることを防ぐものである。
【００９７】
なお、上記した実施の形態においては、タイムストレッチの変換を「１拍の長さ」を基準に変換したが、システムパラメータなどにより「再生部分の長さ」を基準にタイムストレッチの変換を行うようにしてもよい。この場合には、フレーズＡ、フレーズＢに対して、ＮｎやＯｎは適当な値（例えば、Ｎａ＝Ｎｂ＝８、Ｏａ＝Ｏｂ＝４）が共通に代入されたものとして変換を行えばよい。
【００９８】
【発明の効果】
本発明は、以上説明したように構成されているので、複数の波形データを同時に再生する際に、各波形データを再生する際のテンポや長さが一致するように、波形データを自動的に編集することができるという優れた効果を奏する。
【００９９】
また、本発明は、以上説明したように構成されているので、１拍の整数分の１単位でタイムストレッチの変換を行うことにより、聴覚上自然な圧縮伸長が行われるという優れた効果を奏する。
【図面の簡単な説明】
【図１】本発明による波形データ編集装置の実施の形態の一例を備えた電子楽器の全体構成を表すブロック構成図である。
【図２】操作パネルの構成を示す説明図である。
【図３】波形メモリのフォーマットを概念的に示す説明図である。
【図４】ＲＡＭのフォーマットを概念的に示す説明図である。
【図５】波形パラメータの概念説明図である。
【図６】ＲＡＭの波形パラメータエリアのフォーマットを概念的に示す説明図である。
【図７】タイムストレッチモードにおけるＬＣＤの画面表示を示す説明図である。
【図８】タイムストレッチ処理のメインルーチンのフローチャートである。
【図９】タイムストレッチ処理のサブルーチンである読み出しアドレス算出処理ルーチンのフローチャートである。
【図１０】タイムストレッチ処理のサブルーチンであるデータ処理ルーチンのフローチャートである。
【図１１】タイムストレッチ処理の説明図である。
【図１２】タイムストレッチ処理の説明図である。
【図１３】（ａ）（ｂ）はフレーズＡの波形データをフレーズＢの波形データの長さに圧縮する場合のタイムストレッチ処理の説明図である。
【図１４】（ａ）（ｂ）はフレーズＡの波形データをフレーズＢの波形データの長さに伸長する場合のタイムストレッチ処理の説明図である。
【図１５】レジスタＹの値が△Ｍｂ／２を越えたときの処理の説明図である。
【符号の説明】
１０          中央処理装置（ＣＰＵ）
１２          バス
１４          波形メモリ
１６          ＲＯＭ
１８          ＲＡＭ
２０          再生器
２２          操作パネル
３０          液晶ディスプレイ装置（ＬＣＤ）
３２          カーソル右方向移動操作子
３４          カーソル左方向移動操作子
３６          ＋／Ｙｅｓ操作子
３８          −／Ｎｏ操作子
４０          タイムストレッチ（Ｔｉｍｅ  Ｓｔｒｅｃｈ）操作子
４２          サンプルエディット（Ｓａｍｐｌｅ  Ｅｄｉｔ）操作子
４４          テン・キー
４６          パッド操作子
【図１】
0003942719.tif 000002
【図２】
0003942719.tif 000003
【図３】
0003942719.tif 000004
【図４】
0003942719.tif 000005
【図５】
0003942719.tif 000006
【図６】
0003942719.tif 000007
【図７】
0003942719.tif 000008
【図８】
0003942719.tif 000009
【図９】
0003942719.tif 000010
【図１０】
0003942719.tif 000011
【図１１】
0003942719.tif 000012
【図１２】
0003942719.tif 000013
【図１３】
0003942719.tif 000014
【図１４】
0003942719.tif 000015
【図１５】
0003942719.tif 000016