(57)【要約】  【課題】予め波形の特定のアドレスを多数記憶する必要がなく、自然な楽音を再生することができる波形再生装置を提供すること。【解決手段】実ポインタが示すアドレスとクロス長に対応するアドレスを加算したアドレスが次のアタックアドレスに達するか否かを判断する（Ｓ２６）。実ポインタが示すアドレスとクロス長に対応するアドレスを加算したアドレスが次のアタックアドレスに達する場合は（Ｓ２６：Ｙｅｓ）、スキップ長を式（３）に示す演算により求め（Ｓ２８）、その演算により求められたスキップ長がグレイン長より大きいか否かを判断する（Ｓ３０）。スキップ長がグレイン長より大きい場合は（Ｓ３０：Ｙｅｓ）、スキップ長をグレイン長とし（Ｓ３２）、スキップ長がグレイン長より大きくない場合はそのままＳ３６の処理へ進む。  【選択図】    図７
2005173423.tif 000002
【特許請求の範囲】
【請求項１】
タイムレートおよびピッチレートを設定する設定手段と、
波形を記憶する波形記憶手段と、
前記波形記憶手段に記憶されている波形のアタック位置に対応するアタックアドレスを記憶するアタックアドレス記憶手段と、
前記設定手段により設定されたピッチレートで歩進する実アドレスを発生する実アドレス発生手段と、
前記設定手段により設定されたタイムレートで歩進する仮想アドレスを発生する仮想アドレス発生手段と、
前記実アドレス発生手段が発生した実アドレスと前記仮想アドレス発生手段が発生した仮想アドレスとに基づいて、前記実アドレス発生手段が発生した実アドレスを所定のスキップ値だけ変更するアドレス変更手段と、
そのアドレス変更手段により変更される変更前のアドレスと変更後のアドレスとの範囲に前記アタックアドレス記憶手段に記憶されたアタックアドレスが含まれないように制御する制御手段と、
前記実アドレス発生手段により発生された実アドレスに基づいて前記波形記憶手段に記憶されている波形を読み出す波形読出し手段とを備えていることを特徴とする波形再生装置。
【請求項２】
前記アドレス変更手段は、ピッチレートがタイムレートより大きい場合に、実アドレスをより小さいアドレスに変更するものであることを特徴とする請求項１記載の波形再生装置。
【請求項３】
前記アドレス変更手段は、ピッチレートがタイムレートより小さい場合に、実アドレスをより大きいアドレスに変更するものであることを特徴とする請求項１記載の波形再生装置。
【請求項４】
前記波形記憶手段に記憶される波形のアタック位置を検出するアタックアドレス検出手段を備え、前記アタックアドレス記憶手段は、そのアタックアドレス検出手段により検出されたアドレスを記憶するものであることを特徴とする請求項１から３のいずれかに記載の波形再生装置。
【請求項５】
前記制御手段は、仮想アドレスがアタックアドレスに達する時刻に実アドレスがほぼアタックアドレスに達するように前記スキップ値を設定するものであることを特徴とする請求項１から４のいずれかに記載の波形再生装置。
【請求項６】
前記アタックアドレス記憶手段は、波形のアタック位置およびそのアタック位置から所定の区間に対応するアドレスを記憶するものであり、前記制御手段は、前記アドレス変更手段により変更される変更前のアドレスと変更後のアドレスとの範囲に前記アタックアドレス記憶手段に記憶された波形のアタック位置およびそのアタック位置から所定の区間に対応するアドレスが含まれないように制御するものであることを特徴とする請求項１から５のいずれかに記載の波形再生装置。
【請求項７】
波形を記憶する波形記憶手段とその波形のアタックアドレスを記憶するアタックアドレス記憶手段とを備えたコンピュータにより実行される波形再生プログラムであって、
タイムレートおよびピッチレートを設定する設定ステップと、
その設定ステップにより設定されたピッチレートで歩進する実アドレスを発生する実アドレス発生ステップと、
その設定ステップにより設定されたタイムレートで歩進する仮想アドレスを発生する仮想アドレス発生ステップと、
前記実アドレス発生ステップにより発生された実アドレスと前記仮想アドレス発生ステップにより発生された仮想アドレスとに基づいて、前記実アドレス発生ステップにより発生された実アドレスを所定のスキップ値だけ変更するアドレス変更ステップと、
そのアドレス変更ステップにより変更される変更前のアドレスと変更後のアドレスとの範囲に前記アタックアドレス記憶手段に記憶されたアタックアドレスが含まれないように制御する制御ステップと、
前記実アドレス発生ステップにより発生された実アドレスに基づいて前記波形記憶手段に記憶されている波形を読み出す波形読出しステップとを有することを特徴とする波形再生プログラム。
【請求項８】
前記アドレス変更ステップは、ピッチレートがタイムレートより大きい場合に、実アドレスをより小さいアドレスに変更するものであることを特徴とする請求項７記載の波形再生プログラム。
【請求項９】
前記アドレス変更ステップは、ピッチレートがタイムレートより小さい場合に、実アドレスをより大きいアドレスに変更するものであることを特徴とする請求項７記載の波形再生プログラム。
【請求項１０】
前記波形記憶手段に記憶される波形のアタック位置を検出するアタックアドレス検出ステップを有し、前記アタックアドレス記憶手段は、そのアタックアドレス検出ステップにより検出されたアタックアドレスを記憶するものであることを特徴とする請求項７から９のいずれかに記載の波形再生プログラム。
【請求項１１】
前記制御手段は、仮想アドレスがアタックアドレスに達する時刻に実アドレスがほぼアタックアドレスに達するように前記スキップ値を設定するものであることを特徴とする請求項７から１０のいずれかに記載の波形再生プログラム。
【請求項１２】
前記アタックアドレス記憶手段は、波形のアタック位置およびそのアタック位置から所定の区間に対応するアドレスを記憶するものであり、前記制御ステップは、前記アドレス変更ステップにより変更される変更前のアドレスと変更後のアドレスとの範囲に前記アタックアドレス記憶手段に記憶された波形のアタック位置およびそのアタック位置から所定の区間に対応するアドレスが含まれないように制御するものであることを特徴とする請求項７から１１のいずれかに記載の波形再生プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、波形再生装置に関し、特に、記憶されている波形をピッチまたはタイムを変更して再生することができる波形再生装置に関する。
【背景技術】
【０００２】
従来、記憶手段に記憶されている波形を読出す速度を変えることにより再生される波形のピッチを変更する波形再生装置が知られている。また、記憶手段に記憶されている波形を読出す際に、ピッチを変更せずに、波形を読出す位置の進行を遅くする場合には、波形の一部を繰り返し再生し、波形を読出す位置の進行を速くする場合には、波形の一部を読み飛ばしたりすることにより再生する時間（タイム）を制御すること（いわゆる時間軸圧縮伸張あるいはタイムストレッチ）ができる波形再生装置が知られている。
【０００３】
これらの波形再生装置では、波形の立ちあがり（アタック）部分は、波形の振幅やピッチが大きく変動しているため、繰り返し読み出すと不自然な楽音が形成されるので、アタックから所定の区間は、繰り返し読み出さないようにする必要がある。
【０００４】
また、タイムを変更する場合には、アタックの位置をタイムに比例したタイミングで発生しないと、タイミングがずれるので、アタックを読み出すタイミングを設定されるタイムに応じた時刻にする必要がある。
【０００５】
特開２０００−５６７７１号公報（特許文献１）には、楽音の波形を表す波形データをメモリに記憶するとともに、その波形上の繰り返し読出す位置や読み飛ばす位置に対応するアドレスを予めメモリに記憶しておき、任意に設定されるピッチとタイムに応じて、波形を読出す速度を変えるとともに、アドレス間の波形を繰り返し読出したり、飛び越して読出したりする波形再生装置が開示されている。
【特許文献１】特開２０００−５６７７１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に開示されている波形再生装置では、予め繰り返し読み出すアドレスや、飛び越して読み出すためのアドレスなどの波形上の特定の位置に対応するアドレスを多数記憶しておく必要があるという問題点があった。
【０００７】
本発明は、上述した問題点を解決するためになされたものであり、予め波形の特定のアドレスを多数記憶する必要がなく、自然な楽音を再生することができる波形再生装置を提供することを目的としている。
【課題を解決するための手段】
【０００８】
この目的を達成するために、請求項１記載の波形再生装置は、タイムレートおよびピッチレートを設定する設定手段と、波形を記憶する波形記憶手段と、前記波形記憶手段に記憶されている波形のアタック位置に対応するアタックアドレスを記憶するアタックアドレス記憶手段と、前記設定手段により設定されたピッチレートで歩進する実アドレスを発生する実アドレス発生手段と、前記設定手段により設定されたタイムレートで歩進する仮想アドレスを発生する仮想アドレス発生手段と、前記実アドレス発生手段が発生した実アドレスと前記仮想アドレス発生手段が発生した仮想アドレスとに基づいて、前記実アドレス発生手段が発生した実アドレスを所定のスキップ値だけ変更するアドレス変更手段と、そのアドレス変更手段により変更される変更前のアドレスと変更後のアドレスとの範囲に前記アタックアドレス記憶手段に記憶されたアタックアドレスが含まれないように制御する制御手段と、前記実アドレス発生手段により発生された実アドレスに基づいて前記波形記憶手段に記憶されている波形を読み出す波形読出し手段とを備えている。
【０００９】
この請求項１記載の波形再生装置によれば、設定されたピッチレートに応じて実アドレスを、タイムレートに応じて仮想アドレスをそれぞれ発生し、実アドレスを実アドレスと仮想アドレスとに基づいてスキップ値だけ変更する際、その変更されるアドレス範囲に波形のアタック位置に対応するアタックアドレスが含まれないように制御される。
【００１０】
請求項２記載の波形再生装置は、請求項１記載の波形再生装置において、前記アドレス変更手段は、ピッチレートがタイムレートより大きい場合に、実アドレスをより小さいアドレスに変更するものである。
【００１１】
請求項３記載の波形再生装置は、請求項１記載の波形再生装置において、前記アドレス変更手段は、ピッチレートがタイムレートより小さい場合に、実アドレスをより大きいアドレスに変更するものである。
【００１２】
請求項４記載の波形再生装置は、請求項１から３のいずれかに記載の波形再生装置において、前記波形記憶手段に記憶される波形のアタック位置を検出するアタックアドレス検出手段を備え、前記アタックアドレス記憶手段は、そのアタックアドレス検出手段により検出されたアドレスを記憶するものである。
【００１３】
請求項５記載の波形再生装置は、請求項１から４のいずれかに記載の波形再生装置において、前記アドレス変更手段は、仮想アドレスがアタックアドレスに達する時刻に実アドレスがほぼアタックアドレスに達するように前記スキップ値を設定するものである。
【００１４】
請求項６記載の波形再生装置は、請求項１から５のいずれかに記載の波形再生装置において、前記アタックアドレス記憶手段は、波形のアタック位置およびそのアタック位置から所定の区間に対応するアドレスを記憶するものであり、前記制御手段は、前記アドレス変更手段により変更される変更前のアドレスと変更後のアドレスとの範囲に前記アタックアドレス記憶手段に記憶された波形のアタック位置およびそのアタック位置から所定の区間に対応するアドレスが含まれないように制御するものである。
【００１５】
請求項７記載の波形再生プログラムは、波形を記憶する波形記憶手段とその波形のアタックアドレスを記憶するアタックアドレス記憶手段とを備えたコンピュータにより実行される波形再生プログラムであって、タイムレートおよびピッチレートを設定する設定ステップと、その設定ステップにより設定されたピッチレートで歩進する実アドレスを発生する実アドレス発生ステップと、その設定ステップにより設定されたタイムレートで歩進する仮想アドレスを発生する仮想アドレス発生ステップと、実アドレス発生ステップにより発生されたた実アドレスと前記仮想アドレス発生ステップにより発生された仮想アドレスとに基づいて、前記実アドレス発生ステップにより発生された実アドレスを所定のスキップ値だけ変更するアドレス変更ステップと、そのアドレス変更手段により変更される変更前のアドレスと変更後のアドレスとの範囲に前記アタックアドレス記憶手段に記憶されたアタックアドレスが含まれないように制御する制御ステップと、前記実アドレス発生ステップにより発生された実アドレスに基づいて前記波形記憶手段に記憶されている波形を読み出す波形読出しステップとを有する。
【００１６】
請求項８記載の波形再生プログラムは、請求項７記載の波形再生プログラムにおいて、前記アドレス変更ステップは、ピッチレートがタイムレートより大きい場合に、実アドレスをより小さいアドレスに変更するものである。
【００１７】
請求項９記載の波形再生プログラムは、請求項７記載の波形再生プログラムにおいて、前記アドレス変更ステップは、ピッチレートがタイムレートより小さい場合に、実アドレスをより大きいアドレスに変更するものである。
【００１８】
請求項１０記載の波形再生プログラムは、請求項７から９のいずれかに記載の波形再生プログラムにおいて、前記波形記憶手段に記憶される波形のアタック位置を検出するアタックアドレス検出ステップを有し、前記アタックアドレス記憶手段は、そのアタックアドレス検出ステップにより検出されたアタックアドレスを記憶するものである。
【００１９】
請求項１１記載の波形再生プログラムは、請求項７から１０のいずれかに記載の波形再生プログラムにおいて、前記制御手段は、仮想アドレスがアタックアドレスに達する時刻に実アドレスがほぼアタックアドレスに達するように前記スキップ値を設定するものである。
【００２０】
請求項１２記載の波形再生プログラムは、請求項７から１０のいずれかに記載の波形再生プログラムにおいて、前記アタックアドレス記憶手段は、波形のアタック位置およびそのアタック位置から所定の区間に対応するアドレスを記憶するものであり、前記制御ステップは、前記アドレス変更ステップにより変更される変更前のアドレスと変更後のアドレスとの範囲に前記アタックアドレス記憶手段に記憶された波形のアタック位置およびそのアタック位置から所定の区間に対応するアドレスが含まれないように制御するものである。
【発明の効果】
【００２１】
請求項１から３に記載の波形再生装置および請求項７から９に記載の波形再生プログラムによれば、実アドレスを実アドレスと仮想アドレスとに基づいてスキップ値だけ変更する際、その変更されるアドレス範囲に波形のアタック位置に対応するアタックアドレスが含まれないように制御されるので、波形のアタックが繰り返し読出されることがなく、設定されたピッチレートまたはタイムレートで自然な楽音を発生することができるという効果がある。また、実アドレスと仮想アドレスを順次歩進させ、つぎのアタックアドレスをスキップしないように制御されるので、予め時間伸張するためのループ区間を設定しておいたり、時間圧縮を行うためのスキップ区間を設定しておく必要がないという効果もある。また、実アドレスと仮想アドレスを順次歩進させ、つぎのアタックアドレスをスキップしないように制御されるので、予め複数のアタック位置がある場合に、アタック間の長さを求めておいて、その長さに応じて時間軸を伸張したり圧縮する方法に比べ、予めアタック間の長さを求めておく必要がないという効果もある。
【００２２】
請求項４記載の波形再生装置および請求項１０記載の波形再生プログラムによれば、請求項１から３に記載の波形再生装置および請求項７から９に記載の波形再生プログラムの奏する効果に加え、波形のアタック位置を検出するアタックアドレス検出手段を備え、その検出されたアドレスを記憶するので、予めアタック位置に対応するアドレスを記憶していなくてもよいという効果がある。
【００２３】
請求項５記載の波形再生装置および請求項１１記載の波形再生プログラムによれば、請求項１から４に記載の波形再生装置および請求項７から１０に記載の波形再生プログラムの奏する効果に加え、アドレス変更手段は、実アドレスが、ほぼ仮想アドレスとアタックアドレスの交点を通過するようにスキップ値を設定するので、再生される波形のアタックの時刻が、タイムで設定される時刻に合致した時刻になるという効果がある。
【００２４】
請求項６記載の波形再生装置および請求項１２記載の波形再生プログラムによれば、請求項１から５に記載の波形再生装置および請求項７から１１に記載の波形再生プログラムの奏する効果に加え、アタックアドレス記憶手段は、波形のアタック位置およびそのアタック位置から所定の区間に対応するアドレスを記憶し、制御手段は、スキップ値により変更するアドレス範囲に、アタック位置から所定の区間が含まれないように制御するので、アタック位置から所定の範囲の波形は繰り返し再生されることがないとともに、アタック位置から所定の範囲が読み飛ばされることがなく、設定されたピッチレートまたはタイムレートに応じて自然な楽音を発生することができるという効果がある。
【発明を実施するための最良の形態】
【００２５】
以下、本発明の好ましい実施例について、添付図面を参照して説明する。図１は、本発明による波形再生装置１の電気的構成を示すブロック図である。同図において、ＣＰＵ１０と、ＲＯＭ２０と、ＲＡＭ３０と、ユーザ入力される演奏データや設定データなどを、この波形発生装置を動作させるために操作される操作子群４０と、ストレージ５０と、Ｄ／Ａ変換器６０とはバスラインで相互に接続され、Ｄ／Ａ変換器から出力された信号はローパスフィルタ７０により処理されて出力される。
【００２６】
ＣＰＵ１０は、中央演算処理装置であり、ＲＯＭ２０は、このＣＰＵ１０により実行される各種の制御プログラムや、そのプログラムを実行する際に参照される固定値データが格納されている。後述する図６〜図９に示すフローチャートを実行するプログラムは、このＲＯＭ２０に記憶されている。ＲＡＭ３０は、ＣＰＵ１０が制御プログラムを実行する際に必要な各種レジスタ群などが設定されたワーキングエリアや、処理中のデータを一時的に格納するテンポラリエリア等を有しランダムにアクセスできる書き換え可能なメモリである。また、この実施例では、ストレージ５０に記憶されている各種波形のうち、選択された波形がこのＲＡＭ３０に形成されたリングバッファに順次書込まれ、このリングバッファに書込まれた波形が順次読出されるものである。
【００２７】
また、ストレージ５０から順次波形がＲＡＭ３０のリングバッファに書込まれる際には、波形のエンベロープレベルやピッチが検出され、エンベロープレベルが急激に大きくなった位置や、ピッチが変化した位置をアタック位置とし、ＲＡＭ３０に設定されたアタックアドレス記憶領域に、そのアタック位置に対応するリングバッファのアドレスをアタックアドレスとして順次記憶している。
【００２８】
また、アタックアドレスからの所定の区間をαとして設定するが、この区間αは、予め所定値として設定しておいてもよいし、エンベロープレベルが急激に大きくなり、最大値から所定の割合に至った時までを設定するなどとしてもよい。また、音声の場合は、発音が開始され、子音から母音に変わる区間としてもよい。
【００２９】
これらのアタックアドレスや区間αの長さ、または区間αの終了アドレスは、エンベロープレベルやピッチを検出する手段により検出されたものでもよいし、予め、波形を表示し、その波形からアタック位置や区間αを指定するようにしてもよい。
【００３０】
ストレージ５０は、ハードディスクなどの大容量記憶装置であって、複数の波形を記憶している。これらの波形は、楽器の演奏や音声などを所定のサンプリング周期でサンプリングしたＰＣＭデータであり、例えば４小節の長さのフレーズと呼ばれる音楽のひとかたまりのデータである。
【００３１】
操作子群４０は、各種電子楽器のパラメータを設定する操作子群であり、図２を参照して後述する。
【００３２】
Ｄ／Ａ変換器６０は、ＣＰＵ１０から送られてくるデジタル振幅値を順次アナログ値に変換するもので、変換されたアナログ値は、ローパスフィルタ７０により平滑されて出力される。なお、この実施例では、ＣＰＵ１０がサンプリング周期毎に振幅値をＤ／Ａ変換器６０へ出力するものとしたが、ＣＰＵ１０により波形振幅値が順次形成され、形成された振幅値は、一時バッファに記憶されて、専用回路によりサンプリング周期に従ってＤ／Ａ変換器６０へ出力されるようにしてもよい。
【００３３】
図２は、上記操作子群を表す図であり、ピッチノブ４２は、ピッチレートをユーザが設定する操作子であり、タイムノブ４４は、タイムレートをユーザが設定する操作子である。ここで、ピッチレートとは、波形を読出す速度であって、この速度を変えることにより再生される波形のピッチを変更する。このピッチレートが「１」の場合は、録音された時のサンプリング周波数と同じサンプリング周波数で、１アドレスずつ歩進して読出されるので、録音した波形のピッチと同じピッチで再生される。このピッチレートが「１」より大きい場合は、録音した速度より速い速度で再生され、ピッチを高くすることができる。逆にピッチレートが「１」より小さい場合は、録音した速度より遅い速度で再生され、ピッチを低くすることができる。この速度とは、アドレスが進行する速さであって、サンプリング周波数を変える方法とサンプリング周波数は一定で、サンプリング周期毎に歩進するアドレスの数値を変える方法が知られている。サンプリン周期が一定である方が、多チャンネル化が容易である。以下の説明では、この後者の方法を使用しているものとし、ピッチレートに応じて、アドレスが歩進される。アドレスの値が小数点以下を含む場合はその小数点以下の数値に応じた振幅値が補間により求めることができる。補間の方法に付いては、公知であるので説明を省く。
【００３４】
タイムレートは、波形を読出す読出し位置の進行速度である。例えば、記憶手段に１０秒の波形録音したとし、これを、タイムレートを「１」として再生すると、やはり１０秒で再生され、タイムレート「２」で再生すると５秒で再生され、タイムレートが「０．５」の場合には、再生時間は２０秒となる。
【００３５】
次に、スタート／ストップスイッチ４６は、記憶されている波形の再生の開始および停止を指示する操作子であり、再生が停止されているときにこのスイッチを押すと、再生が開始され、波形が再生されているときにこのスイッチを押すと、再生が停止される。
【００３６】
これら操作子以外に、ボリュウムを設定する操作子や、ストレージ５０に記憶されている複数の波形の中から所望の波形を選択するための操作子が備えられているが、本発明の趣旨ではないので省略する。
【００３７】
図３および図４は、本発明の概略を説明するための図であり、図３は、ピッチレートがタイムレートより大きい場合、図４は、ピッチレートがタイムレートより小さい場合、それぞれにおいて、アタックアドレスと、実ポインタおよび仮想ポインタの関係を示している。ピッチレートにより設定されるアドレスを実ポインタと呼び、実線で表す。また、タイムレートにより設定されるアドレスを仮想ポインタと呼び、一点鎖線で表す。従って、
ピッチレートは、実線で示される直線の傾きに、タイムレートは、一点鎖線で示される直線の傾きにそれぞれ該当する。
【００３８】
ピッチレートとタイムレートとがそれぞれ歩進し、実ポインタの値と仮想ポインタの値との差が、所定値（グレイン長）に達した場合には、実ポインタを仮想ポインタに強制的に変更し、再び、実ポインタは、ピッチレートで増加する。一方、仮想ポインタは、常にタイムレートで増加する。ここで、グレイン長は、例えば波形の１周期または数周期などとするのが良く、予め定められた値である。
【００３９】
図３（ａ）は、ピッチレートがタイムレートより大きい場合を示すもので、時刻ｔ１では、実ポインタの示すアドレスと仮想ポインタの示すアドレスとの差がグレイン長に達し、実ポインタは、強制的に仮想ポインタとされる。しかし、読出される波形が不連続となってノイズが発生するので、この実ポインタが強制的に仮想ポインタとされた時からクロス長により設定される期間は、実ポインタにより読出される波形振幅値と強制的に変更されて増加する新たな実アドレスにより読み出される波形振幅値をクロスフェードさせる。このクロスフェード処理の詳細については、図５を参照しながら後述する。
【００４０】
なお、このピッチレートがタイムレートより大きい場合のクロスフェードする期間のステータスをＲＥＷ（rewind）とし、ピッチレートがタイムレートより大きい場合もピッチレートがタイムレートより小さい場合も、実ポインタのみにより波形が読み出される状態のステータスをＧＯとする。
次に、時刻ｔ２において、実ポインタの示すアドレスと仮想ポインタの示すアドレスとの差がグレイン長には達していないが、実ポインタの示すアドレスにクロス長に対応するアドレスを加算したアドレスが、アタックアドレスに達している。
【００４１】
このまま実ポインタを進めると、アタックアドレスを越えることになり、アタックを二度発音する、または、アタックを発音するタイミングが本来発音するタイミングより早くなる。そこで、アタックを読出すべきタイミングである仮想ポインタがアタックアドレスと交差する時刻に実ポインタがアタックアドレスを越えるように制御する必要がある。したがって、時刻ｔ２と、仮想ポインタがアタックアドレスと交差する点を通る実ポインタの直線との交点であるアドレスＡ１に実ポインタを変更すればよいことになる。しかしながら、アドレスＡ１は、現在の実ポインタの示すアドレスと大きく離れているので、波形の変動が大きく、不自然になる場合があるので、この場合は現在の実ポインタをグレイン長だけ戻したアドレスＡ２とする。
【００４２】
次に、時刻ｔ３において、再び実ポインタの示すアドレスと仮想ポインタの示すアドレスとの差がグレイン長には達していないが、実ポインタの示すアドレスにクロス長に対応するアドレスを加算したアドレスが、アタックアドレスに達する。この場合の、仮想ポインタがアタックアドレスと交差する点を通る実ポインタの直線との交点のアドレスＡ３は、実ポインタの示すアドレスからグレイン長を引いたアドレスより後に位置するので、実ポインタをＡ３とし、ピッチレートに従ってアドレスを歩進する。
【００４３】
アタックアドレスから所定の区間αは、波形が安定していないので、この区間では、実ポインタと仮想ポインタとの差がグレイン長に達していても、実ポインタを仮想ポインタに強制的に変更しないものとする。同図において、時刻ｔ４では、実ポインタと仮想ポインタとの差がグレイン長に達し、仮想ポインタが区間αより後に位置しているので、実ポインタを強制的に仮想ポインタに変更し、以後同様に実ポインタはピッチレートで増加する。
【００４４】
図３（ｂ）は、実ポインタがクロス長に対応するアドレスだけ進むとアタックアドレスに達する場合に、実ポインタを戻すスキップ長を求める演算式を説明するための図である。
【００４５】
クロス長をＣＬ、ピッチレートをＰＲ，タイムレートをＴＲ、アタックアドレスをＡＴとし、実ポインタがアタックアドレスからクロス長×ピッチレートのアドレスに達したときの実ポインタのアドレスをＲＰ、その時の仮想ポインタのアドレスをＩＰ、その時から実ポインタがアタックアドレスに達するべき時間をＴ、そしてスキップ長をＳＬとすると、
ＲＰ−ＳＬ＋Ｔ×ＰＲ＝ＡＴ        （１）
ＩＰ＋Ｔ×ＴＲ＝ＡＴ              （２）
（２）式からＴを求め（１）式に代入してＳＬを求めると、
ＳＬ＝（ＡＴ−ＩＰ）×ＰＲ／ＴＲ−（ＡＴ−ＲＰ）  （３）
となる。
【００４６】
図４（ａ）は、ピッチレートがタイムレートより小さい場合を示すもので、時刻ｔ１では、実ポインタの示すアドレスと仮想ポインタの示すアドレスとの差がグレイン長に達し、実ポインタは、強制的に仮想ポインタに変更される。ピッチレートがタイムレートより大きい場合と異なり、この場合は、仮想ポインタの方が実ポインタより先のアドレスを示している。同様に、この実ポインタが強制的に仮想ポインタに変更された時からクロス長により設定される期間は、実ポインタにより読出される波形振幅値と強制的に変更されて増加する新たな実アドレスにより読み出される波形振幅値をクロスフェードさせる。
【００４７】
なお、このピッチレートがタイムレートより小さい場合のクロスフェードする期間のステータスをＦＷＤ（forward）とする。
次に、時刻ｔ２において、実ポインタの示すアドレスと仮想ポインタの示すアドレスとの差がグレイン長には達していないが、仮想ポインタの示すアドレスに、仮想ポインタのクロス長に対応するアドレスを加算したアドレスが、アタックアドレスに達している。
【００４８】
このまま実ポインタを進めると、仮想アドレスがアタックアドレスに一致する時刻に実ポインタがアタックアドレスに達しないことになる。つまり、アタックを発音するタイミングが本来発音するタイミングより遅くなる。そこで、アタックを読出すべきタイミングである仮想ポインタがアタックアドレスと交差する時刻に実ポインタがアタックアドレスを越えるように制御する必要がある。そのために、時刻ｔ２と、仮想ポインタがアタックアドレスと交差する点を通る実ポインタの直線との交点であるアドレスＡ１に実ポインタを変更する。
【００４９】
アタックアドレスから所定の区間αは、波形が安定していないので、この区間では、実ポインタと仮想ポインタとの差がグレイン長に達していても、実ポインタを仮想ポインタに強制的に変更しないものとする。同図において、時刻ｔ３では、実ポインタと仮想ポインタとの差がグレイン長に達し、実ポインタが区間αより後に位置しているので、実ポインタを強制的に仮想ポインタに変更し、以後同様に実ポインタはピッチレートで増加する。
【００５０】
図４（ｂ）は、仮想ポインタのクロス長に対応するアドレスを加算した仮想ポインタがアタックアドレスに達する場合に、実ポインタを先のアドレスへ進めるスキップ長を演算により求める式を説明するための図である。
【００５１】
図３（ｂ）の場合と同様に、クロス長をＣＬ、ピッチレートをＰＲ、アタックアドレスをＡＴ、実ポインタがアタックアドレスに達するべき時刻からクロス長を引いた時刻における実ポインタのアドレスをＲＰ、そしてスキップ長をＳＬとすると、
ＲＰ＋ＳＬ＋ＣＬ×ＰＲ＝ＡＴ          （４）
よって、ＳＬ＝ＡＴ−ＲＰ−ＣＬ×ＰＲ  （５）
となる。
【００５２】
図５は、図３および図４において説明したクロス長の区間におけるクロスフェード処理を説明するための図である。ピッチレートの方がタイムレートより大きい場合に、実ポインタがアドレスＡ１に至ったとき仮想ポインタとの差がグレイン長に達したことなどによりステータスがＧＯからＲＥＷに変更され、実ポインタにより読出される波形の振幅値に乗算されるスロープ値を（ａ）に、実ポインタからスキップ長を引いたアドレスにより読出される振幅値に乗算されるスロープ値を（ｂ）に示す。（ａ）、（ｂ）は、横軸を同じアドレスとし、縦軸をスロープ値として表している。（ａ）では、アドレスＡ１以降は、アドレスの進行に従って、スロープレートに従ってスロープ値が減少し、クロス長に対応するアドレスに至ると「０」になる。一方、（ｂ）では、アドレスＡ２以降は、アドレスの進行に従って、スロープレートに従ってスロープ値が増加し、クロス長に対応するアドレスに至ると「１．０」になり、以降「１．０」の値が維持される。
【００５３】
図５は、ステータスがＲＥＷの場合についてのものであるが、ステータスがＦＷＤの場合は、先のアドレスにスキップされる点が異なるだけであるので、説明を省く。
【００５４】
図６〜図９は、図３から図５を用いて説明した処理をフローチャートで表したものである。
【００５５】
まず、図６は、ＣＰＵ１０が実行するメイン処理を表すフローチャートで、この装置の電源が投入されると起動されるものである。この処理で使用されるスタートフラグは、「１」のとき波形の再生が行われ、「０」のとき再生が行われないことを示す。
【００５６】
まず、初期設定として、スタートフラグを「０」に、ピッチレートおよびタイムレートを「１．０」に設定する（Ｓ１）。次にスタート／ストップスイッチ４６が押されたか否かを判断する（Ｓ２）。スタート／ストップスイッチ４６が押されたと判断した場合は（Ｓ２：Ｙｅｓ）スタートフラグが、「１」に設定されているか否かを判断する（Ｓ３）。
スタートフラグが「１」に設定されている場合は（Ｓ３：Ｙｅｓ）、スタートフラグを「０」に設定し（Ｓ４）、スタートフラグが「０」に設定されている場合は（Ｓ３：Ｎｏ）、スタートフラグを「１」に設定し（Ｓ５）、ステータスをＧＯに設定して（Ｓ６）Ｓ７の処理へ進む。
【００５７】
Ｓ２のスタート／ストップスイッチ４６が押されたか否かの判断処理で、スタート／ストップスイッチ４６が押されていないと判断した場合は、Ｓ７の処理へ進む。
【００５８】
Ｓ７の処理では、ピッチノブ４２が操作されてピッチレートが変更されたか否かを判断する。ピッチレートが変更された場合は（Ｓ７：Ｙｅｓ）、ＲＡＭ３０に記憶されているピッチレートを変更し（Ｓ８）、Ｓ９の処理へ進む。Ｓ７の処理でピッチノブ４２が操作されていないと判断した場合は、Ｓ９の処理へ進む。
【００５９】
Ｓ９の処理では、タイムノブ４４が操作されてタイムレートが変更されたか否かを判断する。タイムレートが変更された場合は（Ｓ９：Ｙｅｓ）、ＲＡＭ３０に記憶されているタイムレートを変更し（Ｓ１０）、Ｓ１２の処理へ進む。Ｓ９の処理でタイムノブ４４が操作されていないと判断した場合は、Ｓ１２の処理へ進む。
【００６０】
Ｓ１２の処理では、スタートフラグが「１」に設定されているか否かを判断する。スタートフラグが「１」に設定されている場合は（Ｓ１２：Ｙｅｓ）、時刻がサンプリング時刻に達しているか否かを判断する（Ｓ１４）。ここで、サンプリング時刻とは、波形の振幅値を出力すべき時刻であって、図示しないカウンタが計時する時刻が、サンプリング周期（例えばサンプリング周波数を４４．１ｋＨｚとした場合の周期）に達しているか否かを判断するものである。
【００６１】
時刻が、サンプリング時刻に達している場合は（Ｓ１４：Ｙｅｓ）、波形再生処理を実行（Ｓ１６）する。Ｓ１２の処理において、スタートフラグが「１」に設定されていないと判断した場合（Ｓ１２：Ｎｏ）と、Ｓ１４の処理において、時刻がサンプリング時刻に達していないと判断した場合（Ｓ１４：Ｎｏ）は、Ｓ１８のその他の処理へ進む。
【００６２】
Ｓ１６の波形再生処理については、図７〜図９のフローチャートを用いて後述する。Ｓ１８のその他処理では、図示しない波形を選択する操作子が操作されたか否かを判断し、複数記憶されている波形の中から、所望の波形を選択したり、図示しない鍵盤が操作されたか否かを検出し、押鍵された鍵があればその鍵に対応する楽音を形成するよう制御を行うなどの処理が行われる。その他の処理の後、Ｓ２の処理へ進み、この装置の電源が切断されるまで上記一連の処理が実行される。
【００６３】
次に図７〜図９のフローチャートに従って、波形再生処理について説明する。図７は、ピッチレートがタイムレートより大きい場合の、ステータスを決定する処理であり、図８は、ピッチレートがタイムレートより大きくない場合のステータスを決定する処理であり、図９は、決定されたステータスに従って波形を読出して出力する波形読出し処理である。
【００６４】
図７の処理では、まず、ステータスはＧＯか否かを判断する（Ｓ２２）。ステータスがＧＯでない場合は（Ｓ２２：Ｎｏ）、図９に示すＢの波形読出し処理へ進む。これは、図７の以下の処理では、ステータスをＧＯからＲＥＷへ、またはＧＯからＦＷＤへ変更するか否かを判断する処理を行っているからであって、ステータスがＧＯ以外のＲＥＷまたはＦＷＤの場合には、ステータスの変更を行わないようにしているからである。
【００６５】
ステータスがＧＯの場合は（Ｓ２２：Ｙｅｓ）は、ピッチレートがタイムレートより大きいか否かを判断する（Ｓ２４）。ピッチレートがタイムレートより大きくない場合は（Ｓ２４：Ｎｏ）、図８に示すフローチャートの処理に進む。ピッチレートがタイムレートより大きい場合は（Ｓ２４：Ｙｅｓ）、実ポインタが示すアドレスとクロス長に対応するアドレスを加算したアドレスが次のアタックアドレスに達するか否かを判断する（Ｓ２６）。実ポインタが示すアドレスとクロス長に対応するアドレスを加算したアドレスが次のアタックアドレスに達する場合は（Ｓ２６：Ｙｅｓ）、スキップ長を式（３）に示す演算により求め（Ｓ２８）、その演算により求められたスキップ長がグレイン長より大きいか否かを判断する（Ｓ３０）。
【００６６】
スキップ長がグレイン長より大きい場合は（Ｓ３０：Ｙｅｓ）、スキップ長をグレイン長とし（Ｓ３２）、スキップ長がグレイン長より大きくない場合は（Ｓ３０：Ｎｏ）、そのままＳ３６の処理へ進む。Ｓ３６の処理では、実ポインタの示すアドレスからスキップ長を引いたアドレスが、直前のアタックアドレスにαを加えたアドレスより大きいか否かを判断する。実ポインタの示すアドレスからスキップ長を引いたアドレスが、直前のアタックアドレスにαを加えたアドレスより大きい場合は（Ｓ３６：Ｙｅｓ）、ステータスをＲＥＷに設定し（Ｓ３８）、スロープ値を１．０に設定して（Ｓ４０）図９に示すフローチャートの処理へ進む。実ポインタの示すアドレスからスキップ長を引いたアドレスが、直前のアタックアドレスにαを加えたアドレスより大きくない場合は（Ｓ３６：Ｎｏ）、図９に示すフローチャートの処理へ進む。
【００６７】
Ｓ２６の処理で、実ポインタが示すアドレスとクロス長に対応するアドレスを加算したアドレスが次のアタックアドレスに達していないと判断した場合は（Ｓ２６：Ｎｏ）、実ポインタが示すアドレスから仮想ポインタが示すアドレスを引いた値がグレイン長より大きいか否かを判断する（Ｓ３４）。実ポインタが示すアドレスから仮想ポインタが示すアドレスを引いた値がグレイン長より大きい場合は（Ｓ３４：Ｙｅｓ）、Ｓ３２の処理へ進み、実ポインタが示すアドレスから仮想ポインタが示すアドレスを引いた値がグレイン長より大きくない場合は（Ｓ３４：Ｎｏ）、図９に示すフローチャートの処理へ進む。
【００６８】
図８は、ピッチレートがタイムレートより大きくない場合であって、まず、仮想ポインタが示すアドレスにクロス長に対応するアドレスを加算したアドレスが次のアタックアドレスに達するか否かを判断する（Ｓ４２）。仮想ポインタが示すアドレスにクロス長に対応するアドレスを加算したアドレスが次のアタックアドレスに達する場合は（Ｓ４２：Ｙｅｓ）、式（５）によりスキップ長を演算して（Ｓ４４）、Ｓ５２の処理へ進む。
【００６９】
一方、Ｓ４２の処理で、仮想ポインタが示すアドレスにクロス長に対応するアドレスを加算したアドレスが次のアタックアドレスに達しない場合は（Ｓ４２：Ｎｏ）、仮想ポインタから実ポインタを引いた値がグレイン長より大きいか否かを判断する（Ｓ４８）。仮想ポインタから実ポインタを引いた値がグレイン長より大きくない場合は（Ｓ４８：Ｎｏ）、図９に示すフローチャートの処理へ進み、仮想ポインタから実ポインタを引いた値がグレイン長より大きい場合は（Ｓ４８：Ｙｅｓ）、スキップ長をグレイン長として（Ｓ５０）、Ｓ５２の処理へ進む。
【００７０】
Ｓ５２の処理では、実ポインタの示すアドレスが直前のアタックアドレス＋αより大きいか否かを判断する（Ｓ５２）。実ポインタの示すアドレスが直前のアタックアドレス＋αより大きい場合は（Ｓ５２：Ｙｅｓ）、ステータスをＦＷＤに設定し（Ｓ５４）、スロープ値を「１．０」に設定し（Ｓ５６）図９のフローチャートへ進む。Ｓ５２の処理で実ポインタの示すアドレスが直前のアタックアドレス＋αより大きくない場合は（Ｓ５２：Ｎｏ）、アタックアドレスからαの区間内の波形を読出しているので、この区間ではスキップせず、図９のフローチャートへ進む。
【００７１】
次に図９のフローチャートに従って波形読出し処理について説明する。まず、実ポインタの示すアドレスをＡとし（Ｓ６０）、ステータスがＲＥＷか否かを判断する（Ｓ６２）。ステータスがＲＥＷの場合は（Ｓ６２：Ｙｅｓ）実ポインタからスキップ長を引いたアドレスをＢとし（Ｓ６４）、アドレスＡから読出した振幅値にスロープ値を掛けた値とアドレスＢから読出した振幅値に１．０からスロープ値を引いた値を掛けた値とを加算し、Ｄ／Ａ変換器へ出力する（Ｓ６６）。スロープ値からスロープレートを引いた値をスロープ値とし（Ｓ６８）スロープ値が「０」より小さくなったか否かを判断する（Ｓ７０）。スロープ値が「０」より小さくなった場合は（Ｓ７０：Ｙｅｓ）、実ポインタを実ポインタ−スキップ長とし（Ｓ７２）、ステータスをＧＯに変更する（Ｓ９２）。このことにより、ステータスＲＥＷのクロス長の処理が終了し、ステータスがＧＯへ戻される。
【００７２】
Ｓ７０の処理で、スロープ値が「０」より大きい場合は（Ｓ７０：Ｎｏ）、まだステータスＲＥＷの区間を終了していない状態であり、Ｓ９４の処理へ進む。
【００７３】
一方、Ｓ６２の処理で、ステータスがＲＥＷではないと判断した場合は（Ｓ６２：Ｎｏ）、ステータスがＦＷＤか否かを判断する（Ｓ８０）。ステータスがＦＷＤである場合は（Ｓ８０：Ｙｅｓ）実ポインタにスキップ長を加えたアドレスをＢとし（Ｓ８２）、アドレスＡから読出した振幅値にスロープ値を掛けた値とアドレスＢから読出した振幅値に１．０からスロープ値を引いた値を掛けた値とを加算し、Ｄ／Ａ変換器へ出力する（Ｓ８４）。次に、スロープ値からスロープレートを引いた値をスロープ値とし（Ｓ８６）スロープ値が「０」より小さくなったか否かを判断する（Ｓ８８）。スロープ値が「０」より小さくなった場合は（Ｓ８８：Ｙｅｓ）、実ポインタを実ポインタにスキップ長を加えた値とし（Ｓ９０）、ステータスをＧＯに変更する（Ｓ９２）。このことにより、ステータスＦＷＤのクロス長の処理が終了し、ステータスがＧＯへ戻される。Ｓ８８の処理で、スロープ値が「０」より大きい場合は（Ｓ８８：Ｎｏ）Ｓ９４の処理へ進む。
【００７４】
Ｓ８０の処理で、ステータスがＦＷＤではないと判断した場合は（Ｓ８０：Ｎｏ）、ステータスがＧＯであり、実ポインタの示すアドレスＡの波形振幅値を読出して、Ｄ／Ａ変換器へ出力し（Ｓ９８）、Ｓ９４の処理へ進む。
【００７５】
Ｓ９４の処理では、実ポインタを実ポインタにピッチレートを加算した値とし、次に
仮想ポインタを仮想ポインタにタイムレートを加算した値として（Ｓ９６）この処理を終了する。
【００７６】
以上説明したように、本発明によれば、記憶手段に記憶された波形を設定されたピッチあるいはタイムに応じて再生する場合に、アタック位置を繰り返し再生せずに自然な楽音を再生することができる。
【００７７】
なお、請求項１記載の実アドレス発生手段および請求項７記載の実アドレス発生ステップは、図９のフローチャートのＳ９４の処理が該当し、請求項１記載の仮想アドレス発生手段および請求項７記載の仮想アドレス発生ステップは、図９のフローチャートのＳ９６の処理が該当し、請求項１記載のアドレス変更手段および請求項７記載のアドレス変更ステップは、図９のフローチャートのＳ６４およびＳ８２の処理が該当し、請求項１記載の制御手段および請求項７記載の制御ステップは、図７および図８のフローチャートの処理が該当し、請求項１記載の波形読出し手段および請求項７記載の波形読出しステップは図９のフローチャートのＳ６６、Ｓ８４およびＳ９８の処理が該当する。
【００７８】
以上、実施例に基づき本発明を説明したが、本発明は上述した実施例に何ら限定されるものではなく、本発明の趣旨を逸脱しない範囲内で種々の改良変更が可能であることは容易に推察できるものである。
【００７９】
例えば、上記実施例では、ピッチレートを任意に設定するピッチノブとタイムレートを任意に設定するタイムノブとをそれぞれ設けたが、いずれか一方を備え、備えられていない方のパラメータについては、値を例えば「１」などの所定値に固定してもよい。
【００８０】
また、上記実施例では、回転式のピッチノブによりピッチレートが任意に設定されるものとしたが、鍵盤などの演奏操作子により、音高を指定し、その音高によりピッチレートが設定される、あるいは楽器等の規格であるＭＩＤＩ情報により指定されるノート情報により指定される音高によりピッチレートが設定されるようにしてもよい。この場合、鍵盤等により指定されて再生される波形の音高と、その鍵盤等により指定された音高との比がピッチレートとして設定される。
【００８１】
また、上記実施例では、スタート／ストップスイッチを操作することにより、再生が開始または停止されるようにしたが、鍵盤などの演奏操作子が操作されることにより、ピッチが指定されると共に、再生が開始または停止されるようにしてもよい。
【００８２】
また、上記実施例では、実ポインタが仮想ポインタからグレイン長だけ離れた場合に、実ポインタを仮想ポインタに強制的に変更したが、これに変えて例えば、実ポインタが仮想ポインタからグレイン長の半分だけ離れた場合に、実ポインタをグレイン長だけ変更するようにしてもよい。
【００８３】
また、上記実施例では、実ポインタが仮想ポインタからグレイン長だけ離れた場合に、実ポインタを仮想ポインタに強制的に変更したが、これに変えて例えば、実ポインタがグレイン長の整数倍進んだ場合に、実ポインタを仮想ポインタに変更するようにしてもよい。
【００８４】
また、上記実施例では、実ポインタが、仮想ポインタがアタックアドレスに達する時刻にアタックアドレスを通るようにしたが、アタックアドレスは、人が聞いた場合にタイミングを感じる位置であって、波形のエンベロープレベルが急激に増加したタイミング、あるいはピッチが明らかに変化したタイミングではない場合もあるので、実ポインタは、仮想ポインタがアタックアドレスに達する時刻付近でアタックアドレスを通ればよい。換言すれば、仮想アドレスがアタックアドレスに達する時刻に、実アドレスが、ほぼアタックアドレスに達するように制御すればよい。
【００８５】
また、上記実施例では、実ポインタが、仮想ポインタとアタックアドレスの交点を通るようにスキップ長を演算し、その演算により求めたスキップ長がグレイン長より大きい場合は、スキップ長をグレイン長としたが、その演算により求めたスキップ長がグレイン長より大きい場合であっても、それほど大きくなければ、その演算で求めたスキップ長をスキップ長としてもよい。これは、実施例では、アドレスのスキップ長が大きいと音質の変化が大きく、不自然になる恐れがあるので、スキップ長がグレイン長を越えないようにしたが、スキップ長をグレイン長以下にしたために、スキップする回数が増えることにより
不自然になる場合には、スキップ長をグレイン長より大きく設定してもよい。
【図面の簡単な説明】
【００８６】
【図１】本発明の波形再生装置の電気的構成を示したブロック図である。
【図２】操作子を説明するための図である。
【図３】ピッチレートがタイムレートより大きい場合の処理を説明するための図である。
【図４】ピッチレートがタイムレートより大きくない場合の処理を説明するための図である。
【図５】クロスフェード処理を説明するための図である。
【図６】ＣＰＵにより実行されるメイン処理を表すフローチャートである。
【図７】ピッチレートがタイムレートより大きい場合のステータスを設定する処理を表すフローチャートである。
【図８】ピッチレートがタイムレートより大きくない場合のステータスを設定する処理を表すフローチャートである。
【図９】波形読出し処理を表すフローチャートである。
【符号の説明】
【００８７】
１０                    ＣＰＵ
２０                    ＲＯＭ
３０                    ＲＡＭ
４２                    ピッチノブ
４４                    タイムノブ
４６                    スタート／ストップスイッチ
【図１】
2005173423.tif 000003
【図２】
2005173423.tif 000004
【図３】
2005173423.tif 000005
【図４】
2005173423.tif 000006
【図５】
2005173423.tif 000007
【図６】
2005173423.tif 000008
【図７】
2005173423.tif 000009
【図８】
2005173423.tif 000010
【図９】
2005173423.tif 000011