JP4057700B2 - 波形再生装置 - Google Patents
波形再生装置 Download PDFInfo
- Publication number
- JP4057700B2 JP4057700B2 JP14318598A JP14318598A JP4057700B2 JP 4057700 B2 JP4057700 B2 JP 4057700B2 JP 14318598 A JP14318598 A JP 14318598A JP 14318598 A JP14318598 A JP 14318598A JP 4057700 B2 JP4057700 B2 JP 4057700B2
- Authority
- JP
- Japan
- Prior art keywords
- waveform
- loop section
- loop
- waveform data
- time axis
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Electrophonic Musical Instruments (AREA)
Description
【発明の属する技術分野】
本発明は電子楽器のサンプラなどに用いられる波形再生装置に関するものである。
【0002】
【従来の技術】
複数の音の波形を時間軸に沿って一連に並べた波形列を表す波形データを記憶装置に記憶しておき、その波形データを読み出して再生するものとしてサンプラがある。このサンプラには、通常、波形データを再生する際の時間軸(従って再生時間)を圧縮または伸張する時間軸圧縮伸張機能(いわゆるタイムストレッチ機能)が設けられている。
【0003】
【発明が解決しようとする課題】
この時間軸圧縮伸張機能は、その時間軸上を順方向に辿りつつその時間軸を圧縮または伸張して波形データを再生するものである。
一方、この時間軸を逆方向に辿るようにする場合、通常は波形データ中の各波形を表すサンプル値(振幅値)データの列を単純に後側から前側に向かって読み出して再生するだけであるので、再生される音色は元の波形データの波形に基づく音色とは全く異なったもの(すなわら波形が前後逆の波形になる)となってしまう。この結果、例えば波形データが人の声のものであれば、何を言っているのか判別できない音になってしまう。したがって、通常はこのような逆方向の再生は音楽的には意味が少なく、音楽表現を豊かにする表現手法としては用いられていない。
【0004】
また、通常、サンプラはループ再生機能を備えており、このループ再生は、ループ区間を指定して、そのループ区間を開始点から終了点に向かって時間軸上を順方向に再生し、終了点に達したら再び開始点にジャンプして当該開始点から再び終了点に向かって再生を繰り返すものであるが、時間軸上を逆方向に向かって再生するものもある。しかしながら、ループ区間において時間軸を逆方向に辿りながら再生を行った場合には、上述と同様の理由により、再生される音色は元の波形データの波形に基づく音色とは全く異なったもの(すなわら波形が前後逆の波形になる)となってしまい、音楽的には違和感がある。
【0005】
本発明はかかる事情に鑑みてなされたものであり、波形データをその時間軸を逆方向に辿りつつ再生するも、音楽的などに意味のある音の再生を可能にして、演奏の表現を一層豊かにすることを目的とする。
【0006】
【課題を解決するための手段および作用】
上述の課題を解決するために、本発明に係る波形再生装置は、第1の形態の一部として、複数の周期波形を含む音の波形を時間軸に沿って一連に並べた波形列を表す波形データを記憶する記憶手段と、該波形データを再生する際の時間軸の圧縮または伸張をその大きさとともに指示する圧縮伸張情報を入力する入力手段と、該入力手段により入力した圧縮伸張情報に基づいて、前記波形データの時間軸上を順方向または逆方向に辿りながら該波形列のうちから逐次に1以上の周期波形からなる波形区間を適宜抽出して、圧縮時には該波形区間以外の波形を適宜間引き、伸張時には該抽出した波形区間を適宜繰り返すことで波形列を再配列して再生波形データを生成する再生手段とを備え、さらに後述するループ手段を具備したものである。この第1の形態では、この波形列には、似たパターンが周期的に繰り返される周期波形が複数含まれ、波形区間としてこのパターンを1以上含むことが好ましい。この第1の形態では、入力手段により入力された圧縮伸張情報に基づいて波形データの時間軸を順方向または逆方向に辿りながら波形区間を逐次に抽出していく。圧縮時には、この抽出した波形区間以外の波形を間引きつつ、抽出した波形区間を再生のための時間軸上に順方向に並べる。これにより時間軸(再生時間)を短縮することができる。また伸張時には、この抽出した波形区間を適宜繰り返しつつ、抽出した波形区間を再生のための時間軸上に順方向に並べる。これにより時間軸(再生時間)を延長することができる。元の波形の波形データは通常、サンプル値データを時間軸上に順方向に(すなわち時系列に)並べたものからなるが、再生時には、上記で抽出した波形区間は元の波形列と同様に、時間軸を順方向に進んでサンプル値データを読み出していくので、再生される波形区間の波形が元の波形と前後逆になることはない。
【0007】
本発明に係る波形再生装置は、第2の形態の一部として、
複数の周期波形を含む音の波形を時間軸に沿って一連に並べた波形列を表す波形データを記憶する記憶手段と、該波形データを再生する際の時間軸の圧縮または伸張をその大きさとともに指示する圧縮伸張情報を入力する入力手段と、該入力手段により入力した圧縮伸張情報に基づく変化量で該波形データの時間軸上を変化して該時間軸上の位置を逐次に指定する指定手段と、該指定手段が該波形データの時間軸上を順方向または逆方向に辿りながら逐次に指定する位置に応じた波形データから1以上の周期波形からなる波形区間を逐次に抽出して再配列し、その際に該位置指定手段が指定する位置が新たな波形区間を抽出できる位置まで達していなければ既に抽出した波形区間を繰り返すようにして、再生波形データを生成する再生手段とを備え、さらに後述するループ手段を具備したものである。この第2の形態では、入力手段により入力された圧縮伸張情報に基づいて指定手段で時間軸上の位置を逐次に指定していく。そして、この指定した位置に応じて波形データから波形区間を抽出する。つまり、波形区間は1以上の周期波形からなる区間で構成されているので、指定手段の指定位置が波形データの時間軸における1波長の波形の先頭部分の近傍位置を指定したときに、その波形を含む波形区間が抽出されることになる。圧縮伸張情報により圧縮が指示されている時には、この指定手段で指定される位置が時間軸上を逆方向に進む速度がはやくなる。すると、指定手段で逐次に指定する位置は、新たに指定した位置が前回指定した位置よりも大きく進んだものになり、その間の位置に対応する波形区間は飛び越される(間引かれる)ことになる。このように波形を圧縮伸張情報に応じて適宜間引くことで、再生時間を短縮することができる。また、圧縮伸張情報により伸張が指示されている時には、指定手段で指定される位置が時間軸上を逆方向にゆっくり進むので、現在抽出した波形区間を再配列し終えた後でも、指定手段の位置はまだ次の新たな波形区間を抽出できる位置にまで達していない場合が生じる。この場合には、既に抽出した同じ波形区間を繰り返し使用して再配列する。これにより、再生時間を延長することができる。
【0008】
このように、上記第1、第2の形態では、波形データの時間軸上を順方向または逆方向に辿りながら、波形区間を抽出し再配列しつつ、その波形区間のサンプル値データを通常の方向(順方向)から読み出して再生することができる。それにより新たな演奏効果を実現することができる。この第1、第2の形態では、抽出する波形区間は1つ以上の周期の音の波形をその特徴を損なわずに含むようにしているから、音が例えば人の声などであれば、再生した波形においてもその声のホルマント特性を保持することができる。またこの波形区間の再生音高(再生ピッチ)を変化させる場合でも、例えば本実施例のようにその再生の仕方によってホルマント特性を同じに保持することもできる。なお、上記第1、第2の形態では、1以上の周期波形からなる波形区間を抽出するためには、波形の1周期を認識する必要があるが、この周期情報は予め検出して記憶手段に記憶しておいてそれを使用すればよい。例えば、後述の本実施例では、予め検出したピッチ情報を波形メモリに記憶しておいて、その情報を使用している。
【0009】
本発明に係る波形再生装置は、第3の形態の一部として、音の波形を時間軸に沿って一連に並べた波形列を表す波形データを記憶する記憶手段と、該波形データを再生する際の時間軸の圧縮または伸張をその大きさとともに指示する圧縮伸張情報を入力する入力手段と、該入力手段により入力した圧縮伸張情報に基づいて前記波形データの時間軸上を順方向または逆方向に辿りながら該波形列のうちから所定長の波形区間を逐次に抽出して再配列することで再生波形データを生成する再生手段とを備えた時間軸圧縮伸張機能を有する波形再生装置とを備え、さらに後述するループ手段を具備したものである。この第3の形態は、上記の所定長の波形区間を所定の時間長あるいは所定のデータ長(サンプル数)とすることで、ピッチ検出ができない打楽器音や複数の楽音が同時に発音されている場合のような、同じパターンの波形が連続して繰り返されないような音の波形列に対して、より適したものとなる。上記の第3の形態では、入力手段により入力された圧縮伸張情報に基づいて波形データの時間軸を順方向または逆方向に辿りながら波形区間を逐次に抽出して、これを再配列していく。ここで、波形区間を、時間軸上で長い間隔毎に抽出していけば再生の際の時間軸を圧縮することになり、短い間隔毎に抽出していけば再生の際の時間軸を伸張することになる。これにより、時間軸を逆に辿りつつ抽出した各波形区間を順方向に再生するという新たな演奏効果を実現することができる。
【0010】
本発明に係る波形再生装置は、第4の形態の一部として、音の波形を時間軸に沿って一連に並べた波形列を表す波形データを記憶する記憶手段と、該波形データを再生する際の時間軸の圧縮または伸張をその大きさとともに指示する圧縮伸張情報を入力する入力手段と、該入力手段により入力した圧縮伸張情報に基づく変化量で該波形データの時間軸上を変化して該時間軸上の位置を逐次に指定する指定手段と、該指定手段が該波形データの時間軸上を順方向または逆方向に辿りながら逐次に指定する位置に応じた波形データから所定長の波形区間を逐次に抽出して再配列することで再生波形データを生成する再生手段とを備え、さらに後述するループ手段を具備したものである。この第4の形態は、上記の所定長の波形区間を所定の時間長あるいは所定のデータ長(サンプル数)とすることで、ピッチ検出ができない打楽器音や複数の楽音が同時に発音されている場合のような、同じパターンの波形が連続して繰り返されないような音の波形列に対して、より適したものとなる。この第4の形態では、入力手段により入力された圧縮伸張情報に基づいて指定手段で時間軸上の位置を逐次に指定していく。そして、この指定された位置に応じて波形データから所定長の波形区間が逐次に抽出される。この波形区間は指定した位置からみて所定の長さの区間であるので、指定手段で逐次に指定する全ての位置からそれぞれ波形区間が抽出されることになる。この所定の長さとしては所定の時間長あるいは所定のデータ長(サンプル数)とすることができる。圧縮伸張情報により圧縮が指示されている時には、この指定手段で指定される位置が時間軸上を逆方向に進む速度がはやくなる。すると、指定手段で逐次に指定する位置は、新たに指定した位置が前回指定した位置よりも大きく進んだものになり、その間の位置に対応する波形区間は飛び越される(間引かれる)ことになる。このように波形を圧縮伸張情報に応じて適宜間引くことで、再生時間を短縮することができる。また、圧縮伸張情報により伸張が指示されている時には、指定手段で指定される位置が時間軸上を逆方向にゆっくり進むことになる。このゆっくり進んでいる全ての位置に対応して波形区間を抽出して、その抽出した各波形区間が連なるように、すなわち一つの波形区間の終端に次の波形区間の始端が繋がるようにして、再配列していく。これにより、再生時間を延長することができる。ここで、抽出した個々の波形区間の波形データの波形読出し速度を変化させることでその再生ピッチを変化させることができるが、波形区間として所定の時間長のものを抽出するようにした場合には、この再生ピッチの変化にもかかわらず、再生時間は一定とすることができる。これにより、時間軸を逆に辿りつつ抽出した各波形区間を順方向に再生するという新たな演奏効果を実現することができる。
【0011】
本発明に係る上述の第1〜4の形態の波形再生装置は、それぞれさらに、前記記憶手段は、前記波形データの他に、該波形データの波形列におけるループ区間を示すループ区間情報を記憶しており、前記再生手段が、該ループ区間情報で示されたループ区間において時間軸上を順方向に辿ってループ区間の終了点に達したら方向を反転して該ループ区間の開始点に向かって逆方向に辿り、開始点に達したら方向を反転して該ループ区間の終了点に向かって順方向に辿るというように、該ループ区間の開始点と終了点の間をその進行方向を反転させつつ辿って前記波形区間を逐次に抽出するように制御するループ手段を具備したものである。従って、前述の第1〜4のそれぞれの形態において、ループ区間を設定し、そのループ区間内において、波形を順方向に辿って抽出しつつ再生したり、逆方向に辿って抽出しつつ再生したりすることを交互に繰り返すことができ、それにより新たな演奏効果を実現することができる。この場合、このループ区間として例えばビブラートがかかっている元の波形列の区間を設定すれば、ループ区間の繰返し再生をした波形列にも自然な感じでビブラートをかけることができる。
【0012】
本発明に係る波形再生装置は、第5の形態として、複数の周期波形を含む音の波形を時間軸に沿って一連に並べた波形列を表す波形データと、該波形データの波形列におけるループ区間を示すループ区間情報とを記憶する記憶手段と、前記波形データの時間軸上を順方向または逆方向に辿りながら、該波形データの波形列のうちから逐次に1以上の周期波形からなる波形区間を適宜抽出して、圧縮時には該波形区間以外の波形を適宜間引き、伸張時には該抽出した波形区間を適宜繰り返すことで波形列を再配列して再生波形データを生成する再生手段と、該再生手段が、該ループ区間情報で示されたループ区間において時間軸上を順方向に辿ってループ区間の終了点に達したら方向を反転して該ループ区間の開始点に向かって逆方向に辿り、開始点に達したら方向を反転して該ループ区間の終了点に向かって順方向に辿るというように、該ループ区間の開始点と終了点の間をその進行方向を反転させつつ辿って該波形区間を逐次に抽出するように制御するループ手段とを備えたものである。また本発明に係る波形再生装置は、第6の形態として、音の波形を時間軸に沿って一連に並べた波形列を表す波形データと、該波形データの波形列におけるループ区間を示すループ区間情報とを記憶する記憶手段と、前記波形データの時間軸上を順方向または逆方向に辿りながら、該波形データの波形列のうちから逐次に所定長の波形区間を抽出して再配列することで再生波形データを生成する再生手段と該再生手段が、該ループ区間情報で示されたループ区間において時間軸上を順方向に辿ってループ区間の終了点に達したら方向を反転して該ループ区間の開始点に向かって逆方向に辿り、開始点に達したら方向を反転して該ループ区間の終了点に向かって順方向に辿るというように、該ループ区間の開始点と終了点の間をその進行方向を反転させつつ辿って該波形区間を逐次に抽出するように制御するループ手段とを備えたものである。なお、上記の所定長の波形区間とは、所定の時間長の波形区間、所定のデータ長(サンプル数)の波形区間などとすることができる。この第5または第6の形態では、上記ループ手段は、上記ループ区間を少なくとも1往復以上繰り返し再生することで、波形データを再生する際の時間軸を伸張することができる。このように、ループ区間を順方向、逆方向に繰り返して再生することで、逆方向再生による新たな演奏効果を得つつ、再生時間を延長(時間軸を伸張)することが可能となる。
【0013】
上述したそれぞれの形態においては、上記波形区間の再配列は、波形データの時間軸上で順方向に配列されたサンプル値データが同じく順方向に読みだされるように配列されるものである。
【0014】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態を説明する。
図1は本発明に係る一実施例としての電子楽器の波形発生装置が示される。図1において、12は再生する波形データを記憶しておくRAMからなる波形メモリである。8は波形メモリ12の波形データの再生処理等をディジタル処理により行うDSP(ディジタル信号プロセッサ)である。14はDSP8から再生出力されるディジタル波形信号をアナログ波形信号にD/A変換して出力するD/A変換器、4は入力したアナログ波形信号をディジタル波形信号にA/D変換してDSP8に入力するA/D変換器である。このA/D変換器4から入力されたディジタル波形信号はDSP8から波形メモリ12に波形データとして格納することができる。
【0015】
22はCPU(中央処理装置)であって、DSP8の制御、操作子群20やキーボード30の状態検出と処理など装置の全体的な制御を行う。20は操作子群であって、モードスイッチMODE.SW 、再生モードスイッチPLAYMODE.SW 、ループモードスイッチLOOPMODE.SW 、オリジナルキー設定スイッチORGKEY.SW 、バンクスイッチBANK.SW 、アサインスイッチASSIGN.SW 、ホルマント設定操作子F.VR、時間圧伸量設定操作子TCOMP 等の複数の操作子からなる。
【0016】
30は演奏操作を行うキーボードであり、操作したキーに対応する種々の楽音情報を演奏のために発生する、例えば波形メモリ12の波形データの再生にあたってキーのオン/オフにより再生の音高と再生の開始/終了を指示するためにも用いられる。また、このキーボード30はアフタータッチ機能も備えており、キーを押鍵した後にさらに押下を続けるとその押下の強さに対応した大きさのアフタータッチ信号after.touch が継続して発生されるようになっている。本実施例ではアフタータッチ機能の一つとして、キーを押した状態でさらにキーを押し込んだ場合にその押下の強さに対応して波形信号の再生に要する時間(すなわち再生速度)が変わるようになっている。このアフタータッチ信号after.touch は押下の強さに応じて$00〜$7Fの範囲の値をとり得る。なお、以降の説明では$7F等の先頭に付けた「$」は16進表示を意味するものとする。
【0017】
33は多くの波形データ等を記憶しておく大容量のハードディスク装置であり、その波形データは必要に応じて波形メモリ12に転送される。31はCPU22の演算処理等に使用されるワーキングメモリとしてのRAM、32はCPU22やDSP8のプログラムやパラメータ等を記憶しておくメモリとしてのROMである。
【0018】
以下に、操作子群20の各操作子の機能について説明する。
モードスイッチMODE.SW は、録音モード、編集モード、再生モードの一つを選択するためのスイッチである。ここで、録音モード (RECモード) は外部から入力された楽音信号を録音(サンプリング) するモード、編集モード (EDITモード) は録音モードでサンプリングした波形を編集するモード、再生モード(PLAYモード) は波形メモリ12に記憶した波形データをキーボードの演奏操作に応じて再生するモードである。
【0019】
再生モードスイッチPLAYMODE.SW は、波形形成のアルゴリズムが異なる第1の再生モードplay1と第2の再生モードplay2とを選択するためのスイッチである。第1の再生モードplay1と第2の再生モードplay2については後述する。
【0020】
ループモードスイッチLOOPMODE.SW は、前記第1と第2のそれぞれの再生モードにおいて、波形データをループ再生しないモードoff 、ループ再生する場合のノーマル・ループモードnormとオルタネート・ループモードalt との3つのうち一つを設定するスイッチである。
【0021】
オリジナルキー設定スイッチORGKEY.SW は基準となるキーを設定するときに操作するスイッチである。
バンクスイッチBANK.SW は、波形メモリ12に記憶されている複数の波形データのうちから一つを選択するためのスイッチである。
【0022】
アサインスイッチASSIGN.SW は、発音モードを設定するためのスイッチであり、以下の4つのモードを設定できる。
〔モノフォニック1:MONO1〕 1ボイスのみを発音するモードであり、レガート奏法がされても、後の押鍵によってリトリガを行うモードである。
〔モノフォニック2:MONO2〕 1ボイスのみを発音するモードであり、レガート奏法がされたら、リトリガを行なわないモードである。
〔ポリフォニック1:POLY1〕 複数ボイスを発音可能なモードであり、レガート奏法がされても、後の押鍵によってリトリガを行うモードである。
〔ポリフォニック2:POLY2〕 複数ボイスを発音可能なモードであり、レガート奏法がされたら、リトリガを行なわないモードである。
ここで、「レガート奏法」とはキーボードの1番目のキーを押したままの状態で2番目のキーを押す奏法であり、「リトリガ」とは波形メモリ12の波形データの再生を当該波形データの先頭部分からやり直す処理をいう。
【0023】
ホルマント設定操作子F.VRは、ホルマントの原波形データからのシフト量を設定する操作子であり、ホルマント移動量f.vr(ホルマント変更係数とも称する)を設定する。このホルマント移動量f.vrについては後述する。
【0024】
時間圧伸量設定操作子TCOMP は、再生波形データの時間軸上の時間圧伸量tcomp を設定する操作子である。この時間圧伸量tcomp については後述する。
【0025】
上記のDSP8は操作子設定テーブル、キー情報レジスタ、変調情報レジスタ、オリジナルピッチ情報レジスタ、ループ情報レジスタを備えている。以下、これらについて説明する。
【0026】
〔操作子設定テーブル〕
図2には操作子設定テーブルの例が示される。この操作子設定テーブルはDSP8に備えられており、後述するCPU22の「再生処理」において、操作子群20の操作状態を検出し、その操作状態に対応してこの操作子設定テーブルの内容が設定される。操作子設定テーブルの内容の項目としては、バンク番号bank、リンクモードlink.mode 、ホルマント移動量f.vr、時間圧縮/伸長伸量tcomp (以下、時間圧伸量と記す) 、再生モードplaymode 、ループモードloopmode がある。
【0027】
ここで、バンク番号bankは、操作子群20のバンクスイッチBANK.SW で設定 されたバンク番号が設定され、そのバンク番号bankに従って、再生する波形データ(波形領域番号)の選択が行われる。
【0028】
リンクモードlink.mode は、操作子群20のアサインスイッチASSIGN.SW がモノフォニック2またはポリフォニック2のモード(すなわちリトリガしないモード)を設定した時には「1」(ONを意味する)に設定され、モノフォニック1またはポリフォニック1のモード(すなわちリトリガするモード)を設定した時には「0」(OFFを意味する)に設定される。すなわち、前に発音していた楽音に連結するか否かを設定するレジスタであるが、リトリガを行うか否かを設定するレジスタでもある。
【0029】
ホルマント移動量f.vrは、波形メモリ12から読み出して再生する波形データのホルマントの移動量(シフト量)が設定されるもので、波形メモリ12中の波形データは、このホルマント移動量f.vrが「1」である時は、原波形と同じホルマントで再生され、「1」より大きい値であると、ホルマントを原波形よりも高域側にシフトして再生され、「1」よりも小さい値であると、ホルマントを原波形よりも低域側にシフトして再生される。
【0030】
時間圧伸量tcomp は、波形メモリ12に記憶された波形データを再生する時における時間圧縮/伸長の大きさ(すなわち波形再生速度)を数値設定するものである。この時間圧伸量tcomp が「1」であると、原波形の時間変化と同じ速さで時間変化し、「1」より大きい値であると、原波形よりも速い時間変化をして再生時間が短くなり、「1」よりも小さい値であると、原波形よりも遅い時間変化をして再生時間が長くなる。
【0031】
再生モードplaymode は、再生モードスイッチPLAYMODE.SW が第1の再生モードplaylを設定したときは「0」に設定され、第2の再生モードplay2を設定したときは「1」に設定される。ここで、この第1の再生モードplaylは再生波形のピッチを変えるにあたり元波形のホルマントを変化させないで再生できるモードであり、また第2の再生モードplay2は再生波形のピッチを変えるにあたり元波形のホルマントも共に変化するが、元波形のピッチが検出できなくとも波形再生できるモードである。
【0032】
ループモードloopmode は、ループモードスイッチLOOPMODE.SW がループ再生をしないモードoff を設定したときは「0」に設定され、ループ再生する場合のノーマル・ループモードnormを設定したときは「1」に設定され、ループ再生する場合のオルタネート・ループモードalt を設定したときは「2」に設定される。
【0033】
このノーマル・ループモードnormは、ループ再生区間をループ再生する際に、時間軸を順方向に波形再生してループ再生区間の終点(ループエンド)に達したら、当該ループ再生区間の開始点(ループスタート)に飛び戻って、そこから再びループエンドに向かって波形再生を行うことを繰り返すモードである。一方、オルタネート・ループモードalt は、ループ再生区間をループ再生する際に、ループ再生区間の開始点(ループスタート)から時間軸を順方向に進んで波形再生し、ループ再生区間の終点(ループエンド)に達したら、今度はそのループエンドから当該ループ再生区間の開始点(ループスタート)に向かって時間軸を逆方向に順次戻りながら波形再生を行い、ループスタート点に達したらそこで方向を再び逆転して順方向にループエンドに向かって波形再生を行うことを繰り返すモードである。なお、上述の逆方向での波形再生とは、波形データ自体を後ろ側から読み出すという意味ではなく、所定長の波形区間の取出しを、時間軸上で逆方向に進みながら行うという意味であり、その所定長の波形区間では波形データは常に順方向に読みだされる。
【0034】
〔キー情報レジスタ〕
DSP8はキー情報レジスタを備えており、後述するCPU22の「再生処理」において、キーボード30の操作が検出され、割当処理によってキー情報がDSP8に転送されて、このキー情報レジスタに一時的に記憶される。図3(1)にこのキー情報レジスタの構成例が示される。キー情報は、キーオン/キーオフ情報key.on/off、音高情報(操作キー情報)kpitch、ボイスモジュール情報voice.No、レベル情報level からなる。例えば、
キーオン情報:「key.on/kpitch/voice.No/level 」
キーオフ情報:「key.off /kpitch/voice.No/level 」
の構成からなる。
【0035】
なお、このキー情報レジスタは、DSP8での受取り処理の前に、CPU22から新たなキー情報が転送されることがある場合には、複数のキー情報を一時記憶することが可能な、シフトレジスタのような構成で、さらに先に入力した情報を先に出力する構成にすればよい。すなわち、MIDI信号の受信処理と同様な処理とする。
【0036】
〔ループ情報レジスタ]
図3(2)にはループ情報レジスタが示される。このループ情報レジスタには波形データを選択するバンクbankが更新される毎に、その選択した波形データに対応したループスタートマークloopstart 、ループエンドマークloopend 、ループスタートアドレスloopsa、ループエンドアドレスloopeaが記憶される。
【0037】
〔変調情報レジスタ〕
図3(3)には変調情報レジスタが示される。この変調情報レジスタには変調値情報lfo.mod が格納される。後述の「LFO.MODの演算処理」においては、変調信号であることを識別する変調情報識別情報mod.inf と、演算によって得られた変調値情報lfo.mod とが組み合わされて転送される。
【0038】
〔オリジナルピッチ情報レジスタ〕
図3(4)にはオリジナルピッチ情報レジスタが示される。このオリジナルピッチ情報レジスタには、波形データの音高をどれくらいシフトするかを指定するときの基準となる音高の情報(オリジナルピッチ情報)が記憶されている。なお、オリジナルピッチ情報を設定しないときのために、電源投入時の初期設定において、予め「C4」の音階に対応するオリジナルピッチ情報が記憶されている。
【0039】
波形メモリ12はパラメータ記憶部とマーク記憶部と波形データ記憶部とで構成される。これらの記憶部のデータ構成を図4〜図6に示す。図4はパラメータ記憶部のデータ構成、図5は波形データ記憶部のデータ構成、図6はマーク記憶部のデータ構成である。パラメータ記憶部は$800番地毎に、また波形データ記憶部は$8000番地毎に、マーク記憶部は$2番地毎に各々セグメントで区切られており、各々のセグメントはアドレスの若い方から順番にwave0領域、wave1領域 、wave2領域 ・・・のように波形領域番号が付けられる。例えばある一つの波形についてそのパラメータをパラメータ記憶部のwave0領域に格納したら、その波形の波形データはそのパラメータに対応して波形データ記憶部の同じ番号のwave0領域に格納する。なお、図4、図5、図6におけるアドレスは16進数で表わされており、前述したように以降$800のように数値の先頭に$を付して16進数であることを示す。
【0040】
まず、パラメータ記憶部のデータ構成を図4に従って説明する。例えばwave0領域において、アドレス$0000に格納されているものはヘッダheaderであり、そのデータ内容としてそのwave0領域における波形データの末尾アドレスendadrs が格納され、アドレス$0001以降には開始アドレス/ピッチ情報sadrs/spitchが格納される。開始アドレス/ピッチ情報のうちのピッチ情報である波形ピッチspitchは波形データ記憶部に格納された波形の1周期分のアドレス幅のことであり、開始アドレスsadrs は前記波形ピッチspitchで表されるアドレス幅の波形が1周期から複数周期続く波形区間の開始アドレスである(以下、この1周期から複数周期続く波形区間を単に波形区間という) 。開始アドレス/ピッチ情報としては、一つの波形区間の開始アドレスsadrs と波形ピッチspitchとを一対として、波形全体にわたるこれらの対が時系列にパラメータ記憶部に格納される。例えば波形データの最初の波形区間が開始アドレス sadrs0で波形ピッチspitch0であり、次に続く波形区間が開始アドレス sadrs1で波形ピッチspitch1である場合、最初の開始アドレス sadrs0と波形ピッチspitch0はそれぞれアドレス$0001 、$0002に格納され、続く開始アドレス sadrs1と波形ピッチspitch1はそれぞれアドレス$0003、$0004に格納される。
【0041】
次に波形データ記憶部のデータ構成を図5に従って説明すると、これは各wave領域にシーケンシャルなアドレス順序でサンプリング値wave data が格納されるものである。
【0042】
次にマーク記憶部のデータ構成を図6に従って説明する。これはwave0、wave1・・・の各wave領域毎に、ループ再生する場合のループスタートマークloopstart とループエンドマークloopend が格納されるものである。図6において、ループスタートマークloopstart はループ再生する区間の小さいアドレス側の端を、ループエンドマークloopend はループ再生する区間の大きいアドレス側の端を特定するマークであり、これらのマークはパラメータ記憶部のピッチ変化時点を表すデータ(波形データの開始アドレス sadrs0、 sadrs1・・・)が格納されているパラメータ記憶部のアドレスで表される。例えば波形データの開始アドレス sadrs0をループスタートに、開始アドレス sadrs1をループエンドとする場合、マーク記憶部の最初のアドレス$0000にはループスタートマークloopstart として$0001が格納され、マーク記憶部の次のアドレス$0001にはループエンドマークloopend として$0003が格納される。
【0043】
以下、この実施例装置の動作をフローチャートを参照して説明する。なお、以下に説明する各フローチャートにおいては、原則的には、各種のパラメータは英小文字で表し、そのパラメータを記憶するレジスタ等は同じスペルからなる英大文字で表すこととする。また、フローチャートの表記法として、例えば、
A=B+C
となっていた場合、これは、レジスタBから読み出した値bとレジスタCから読み出した値cとを加算して、その結果を値aとしてレジスタAに格納することを意味するが、以下の説明では表現を簡単にするため、例えば単に値bと値cを加算して値aとする(あるいはレジスタAに格納する)などの表現を用いることにする。
【0044】
図7には、CPU22が行う処理として、メインルーチンのフローチャートが示される。メインルーチンがスタートすると、操作子群20のモードスイッチ(MODE.SW) が録音モード、編集モード、再生モードの何れに操作されたか監視され(ステップA)、操作がされると、その操作が録音モード、編集モード、再生モードの何れであるかが判定される(ステップB)。録音モードであれば、録音(REC)処理が行われ(ステップC)、編集モードであれば編集(EDIT)処理が行われ(ステップD)、再生モードであれば再生(PLAY)処理が行われる(ステップE)。
【0045】
図8には録音モードにおける録音処理ルーチンのフローチャートが示される。録音処理は外部から入力された楽音信号を録音(サンプリング)する処理であり、モードスイッチMODE.SW により録音モードに設定した後、サンプリングスタートの操作子を操作することによって(ステップC3)、サンプリングスタートして録音(サンプリング処理)が行われる(ステップC4)。サンプリングされる楽音信号のデータは波形メモリ12に記憶される。この録音処理ルーチンから抜け出てメインルーチンにリターンするにはEXIT操作子を操作する(ステップC2)。
【0046】
図9(1)には編集モードにおける編集処理ルーチンのフローチャートが示される。編集処理は、録音モードでサンプリングした波形を変更したり、再生可能な波形データに変更する編集処理や、それらの波形データをハードディスク装置33に転送したり、ハードディスク装置33から波形メモリ12に転送したりする処理を行う(ステップD3)。また、波形データのピッチ変化を抽出してそれに基づいてループ再生区間(ループポイント)を設定する。この抽出方法とループポイント設定方法は後述する。この編集処理ルーチンから抜け出るにはEXIT操作子を操作する(ステップD2)。
【0047】
「波形データのピッチ変化抽出方法」
まず、図47に示したフローチャートによって波形データのピッチ変化抽出方法を説明する。前述の録音モード(RECモード)において波形信号をサンプリングし、波形メモリ12に波形データとして記憶する。次に、編集モード(EDITモード)において波形データのピッチ検出を行い、図4に示されるパラメータ記憶部に記憶する開始アドレスsadrs と波形ピッチspitchのデータを作成し、記憶する。
【0048】
次に、図47の処理を、その波形メモリに記憶されている波形データに対して、図47のピッチ変化抽出処理を施し、図50のようなピッチデータ列を生成する。すなわち、波形データに対してピッチ検出処理を施し、時間経過に対応してピッチデータ列x(n) を作成する(ステップSl)。このステップS1で作成したピッチデータ列x(n) は、図48に示すように、所々、抽出ミスを起こし、パルス性ノイズが乗っている。
【0049】
カウンタnに初期値aを設定する(ステップS2)。この初期値aは平均値処理の対象とするピッチデータx(n) のデータ個数を決めるもので、この実施例ではa=8とする。次に、
X(n) ={x(n-a) +x(n-a+1)+・・・+x(n-1) }/a
の演算を行い、ピッチデータ列n個の平均を演算する(ステップS3)。例えば、図49のようなピッチデータ列x(1) 〜x(9) ・・・であれば、
X(8) ={x(0) +x(1) +x(2) +・・・+x(7) }/8
の演算をすることになる。
【0050】
次に、その平均X(n) と次のピッチデータx(n) を比較し、
(l/α)X(n) <x(n) <αX(n)
を満足するかを判断する(ステップS4)。この判断処理は、誤って抽出されたノイズ的なピッチデータを取り除く処理であり、判断結果がYesの場合は何もせずに次のステップヘ進み、判断結果がNoの場合はピッチデータx(n) を平均X(n) に変更する(ステップS5)。このように、ステップS4とS5は、次のピッチデータx(n) がそのデータの前の8個のデータの平均値X(n) に対して所定の範囲内であるかを判断し、所定範囲内であればそのまま、所定範囲をはみ出していればピッチデータx(n) を平均X(n) に変更する処理をして、ピッチ検出の抽出ミスを補正している。なお、αは目的に応じて適宜、適当な値とすることができるが、この実施例では例えばα=2.0としておく。
なお、ピッチデータ列の最初のn個(8個)のデータについては、この実施例では使用しないため、上記ステップS4とS5の処理を施していないが、必要であれば抽出ミスを補正する処理を適宜、施してもよい。
【0051】
以上の処理がピッチデータ列の最後まで行われたかを判断し(ステップS6)、終了したなら次のステップS7ヘ、終了していないのであれば前記ステップS3へ戻って、ピッチデータ列の最後まで処理を続ける。以上の補正が終わったピッチデータ列x(n) に対してさらにローパスフィルタリング処理を施し、ピッチデータ列x(n) の不規則な変化を取り除き、図50のような滑らかに変化するピッチデータ列x(n) を得る。
以上が波形データのピッチ変化抽出方法で、ビブラート効果の変化を検出する場合に有効である。
【0052】
「ループポイントの設定」
図47のピッチ変化抽出方法で抽出されたピッチデータ列に対して、ピッチデータ列のピークとピーク(図50の矢印の部分)を検出し、それぞれループスタートloopstart とループエンドloopend とし、対応する波形データの開始アドレスsadrs の記憶されたパラメータ記憶部のアドレスをマーク記憶部にそれぞれ記憶する。この矢印の部分は演算によりピークを検出することにより自動的に検出するようにしても良い。
【0053】
以上のようにループポイントを設定する場合、オルタネートループ再生の場合は不連続部は生じないため、かなり適当なポイントを設定しても不都合は発生しないが、ノーマルループ再生をする場合はループエンドポイントからループスタートポイントにジャンプするため、音色や音量の違いがある場合には不連続部が生じてしまう。この場合には、より注意して音色や音量の違いが少ないループポイントを設定する必要がある。
【0054】
図9(2)には再生モードにおける再生処理ルーチンのフローチャートが示される。この再生処理ルーチンの初期設定(ステップE1)においては、操作子群の状態を操作するレジスタ等をリセットし、操作子群を操作可能な状態にすると共に、各操作子の初期状態を設定しておく。初期状態とは、「再生処理」で、各操作子に変化があった時だけ操作子の操作に対応した処理を行うため、その最初の基準となる状態である。
【0055】
再生処理ルーチンは、モードスイッチMODE.SW により再生モードに設定した 後、再生スタートの操作子を操作することによってスタートする。再生処理(ステップE3)は、波形メモリ12の波形データを、キーボード30からの演奏情報に対応して再生する処理であり、この再生処理ルーチンから抜け出るにはEXIT操作子を操作する(ステップE2)。
【0056】
図10〜図12にはこの再生モードにおける再生処理(ステップE3)の詳細な処理手順が示される。この再生処理はCPU22で実行される。この再生処理では、操作子群20による設定とキーボード30による演奏操作を検出してそれらの操作情報をDSP8に転送して記憶させる処理を行う。
【0057】
再生処理が開始されると、操作子群20の操作状態を走査して、バンクスイッチBANK.SW 、再生モードスイッチPLAYMODE.SW 、ループモードスイッチLOOPMODE.SW 、オリジナルキー設定スイッチORGKEY.SW 、アサインスイッチASSIGN.SW 、ホルマント設定操作子F.VR、時間圧伸量設定操作子TCOMP の操作状態を検出する(ステップE300)。これらの操作状態に変化があったときには、以下のように、それらのスイッチ操作に対応して操作子設定テーブル等への設定処理を行う。
【0058】
まず、再生モードスイッチPLAYMODE.SW の操作に変化が有るか否かを見て(ステップE301)、変化が有る場合に、再生モードスイッチPLAYMODE.SW で設定された再生モードが第1の再生モードplay1であればDSP8の操作子設定テーブルの再生モードplaymode に「0」を、また第2の再生モードplay2であれば「1」をそれぞれ設定する(ステップE302)。
【0059】
次に、ループモードスイッチLOOPMODE.SW の操作に変化が有るか否かを見て(ステップE303)、変化が有る場合に、ループモードスイッチLOOPMODE.SW で設定されたループモードがオフoff であればDSP8の操作子設定テーブルのループモードloopmode に「0」を、ノーマルnormであれば「1」を、オルタネートalt であれば「2」をそれぞれ設定する(E304)。
【0060】
そして、バンクスイッチBANK.SW の操作に変化が有るか否かを見て(ステップE305)、変化が有る場合には、バンクスイッチBANK.SW で設定されたバンク番号bankを、DSP8の操作子設定テーブルのバンク番号bankに設定する(ステップE306)。
【0061】
次に、オリジナルキースイッチORGKEY.SW の操作に変化が有るか否かを見て(ステップE307)、変化が有る場合にはキーボード30の操作鍵情報を検出し(ステップE308)、その検出結果により押鍵情報が有るか否かを見て(ステップE309)、押鍵情報が有る場合にはその押鍵情報に対応したピッチ情報をオリジナルピッチ情報org.pitch としてDSP8のオリジナルピッチ情報レジスタorg.pitch に設定する(ステップE310)。なお、押鍵情報がない場合にはステップE308に戻り、押鍵情報が有るまでこの処理を繰り返す。
【0062】
次に、アサインスイッチASSIGN.SW の操作に変化が有るか否かを見て(ステップE311)、変化が有る場合には、アサインスイッチASSIGN.SW で設定されたモードがモノフォニック2またはポリフォニック2か否かを判定する(ステップE312)。肯定判定(モノフォニック2またはポリフォニック2と判定)である場合は「リトリガ」を行わないモードが設定されたものであり、この場合には、DSP8の操作子設定テーブルのリンクモードlink.mode に「1」を設定する。否定判定である場合は「リトリガ」を行うモードが設定されたものであり、この場合には、DSP8の操作子設定テーブルのリンクモードlink.mode に「0」を設定する。さらに、アサインスイッチASSIGN.SW で設定されたモードがモノフォニック(1または 2)であるかポリフォニック(1または2)であるかを判定し(ステップE315)、モノフォニック1または2である場合にはアサインフラグAS.FLGをモノフォニックMONOにセットし(ステップE316)、ポリフォニック1または2である場合にはポリフォニックPOLYにセットする(ステップE317)。このアサインフラグAS.FLGにより、ボイスモジュール(楽音発生チャネル)への割当処理が1ボイス(モノフォニックの場合)か複数ボイス(ポリフォニックの場合)かを知ることができる。
【0063】
次に、ホルマント設定操作子F.VRに変化が有るか否かを見て(ステップE318)、変化が有る場合には、その検出値を、DSP8の操作子設定テーブルのホルマント移動量f.vrに設定する(ステップE319)。同様に、時間圧伸量設定操作子TCOMP に変化が有るか否かを見て(ステップE320)、変化がある場合には、その検出値を、CPU22側に用意されたレジスタMTCOMPに設定する(ステップE321)。
【0064】
次に、キーボード30からの操作鍵情報(キー情報)を検出する(ステップE322)。そして、その検出結果から操作鍵に変化があるか否かを見て(ステップE323)、変化がある場合には先に設定されたAS.FLGの状態を判定する(ステップE324)。上記アサインフラグAS.FLGの状態の判定結果がモノフォニックMONOである場合には、操作鍵を1ボイスモジュールに割り当てて、検出したキー情報をDSP8に転送する(ステップE325)。ポリフォニックPOLYである場合には、操作鍵を複数ボイスモジュールへの割当て処理を行い、検出したキー情報をDSP8に転送する(ステップE326)。DSP8では受信したキー情報をキー情報レジスタに一時記憶する。
【0065】
これらステップE325またはE326の処理をした後、あるいはステップE323での判定の結果押鍵操作に変化がないと判定された場合には、アフタータッチ操作が有るか否かを判定する(ステップE327)。ここでは、アフタータッチ操作の有無はキーボード30からのアフタータッチ信号after.touch の大きさに基づいて判定される。すなわち、アフタータッチ信号after.touch の大きさが$20未満であった場合にはアフタータッチ無しと見なすこととし、$20以上の場合にアフタータッチ有りとする。
【0066】
アフタータッチ有りと判定された場合には、時間圧伸量設定操作子TCOMP による設定値をアフタータッチ信号after.touch に基づいて変更して前述のCPU側のレジスタMTCOMPに設定する(ステップE328)。この時間圧伸量設定操作子TCOMP による設定値の修正は次の演算式、
MTCOMP= TCOMP*〔1−(after.touch −$20)/$60〕
に従って行う。ここで TCOMPは時間圧伸量設定操作子TCOMP による設定値とする。この演算式は、アフタータッチ有りと判定された$20〜$7Fの範囲のアフタータッチ信号after.touch を、
(after.touch −$20)/$60
という演算により0〜1の範囲の値に正規化し、この正規化した値を1から減じて時間圧伸量設定操作子TCOMP の設定値に乗算してレジスタMTCOMPに設定するもので、この演算の結果、アフタータッチ信号after.touch が$20を少し超える程度の弱いアフタータッチであった場合には時間圧伸量設定操作子TCOMP による設定値は大きくは変更されないが、アフタータッチ信号after.touch が大きくなるに従って時間圧伸量設定操作子TCOMP の設定値は減少する方向に大きく修正され、アフタータッチが最も強い$7Fでは時間圧伸量設定操作子TCOMP の設定値はその値の如何にかかわらずゼロとされてレジスタMTCOMPに設定される。
【0067】
そして、このステップE328あるいは前述のステップE321で設定されたMTCOMPの値をDSPの操作子設定テーブルのtcomp に設定する(ステップE329)。なお、アフタータッチ信号after.touch が$20未満の場合にはステップE327でアフタータッチ無しと判定されてステップE328は実行されない。この場合には、先に設定されているレジスタMTCOMPの値は変更されず、本ステップE329によってDSPの操作子設定テーブルのtcomp に設定される値は、先のステップE321において操作子TCOMP によって設定される値となる。
【0068】
これらの設定操作の後、変調値lfo.mod の演算処理を行う (ステップE330) 。この演算処理は、ステップE321またはE328でレジスタMTCOMPに設定した時間圧伸量の絶対値が小であるときに、再生波形にビブラートに似た変調を行うための変調値lfo.mod を発生するものである。このステップで演算される変調値情報は、変調情報であることを識別する変調情報識別情報mod.inf とともにキー情報の一種としてDSPに転送され、変調値情報は変調情報レジスタに格納される。
【0069】
図13は上述のステップE330における変調値情報の演算処理の詳細な内容を示すフローチャートである。図14はこの演算処理で生成される波形のタイムチャートである。まず、レジスタMTCOMPの絶対値が「0. 1」により大きいか否か判定し(ステップE3301)、大きければ、ゲート信号lfo.gateを「0」にして、以降のステップにて発生される変調値lfo.mod が常に「1」となるようにする(ステップE3303)。
【0070】
レジスタMTCOMPの絶対値が「0. 1」以下であれば、ゲート信号lfo.gateを「1」にして(ステップE3302)、「1」を中心に低周波周期で変動する変調値lfo.mod を発生して、その変調値lfo.mod で再生波形信号に変調をかけて波形信号にビブラート効果を付加する。すなわち、次のステップE3304において、変調エンベロープlfo.env を、
LFO.ENV =LFO.ENV +(LFO.GATE−LFO.ENV )*SLOPE
で演算して求める。ここで、SLOPE はエンベロープの傾きを決定する係数である。このエンベロープlfo.env は、図14に示すように、ゲート信号lfo.gateの 「0」から「1」への立上りに同期して漸増して「1」になる波形となる。また、低周波信号lfo を、
LFO = SIN(2*3. 14*LFO.RATE/32000*LFO.COUNT )
を演算することで発生する。ここで、LFO.RATEは係数(単位Hz )、LFO.COUNT はカウンタであって、このカウンタLFO.COUNT はステップE3304が行われる毎にインクリメントされる。低周波信号lfo は、図14に示すような正弦波となる。
【0071】
次に、変調度lfo.mod を、
LFO.MOD =POW(0. 5,LFO *LFO.ENV *LFO.DEPTH /1200)
を演算して求める(ステップE3305)。ここで、LFO.DEPTH は変調の深さであり、単位はcents である。この演算で求められた変調度lfo.mod は、図14に示すように、ゲート波形lfo.gateの「0」から「1」への立上りに同期して「1」を中心に上下に低周波lfo の周期で振れる波形となる。なお、関数POW(a,b)は、aの値をb乗することを表しており、上記演算式は、0.5を(LFO *LFO.ENV *LFO.DEPTH /1200)乗することを表している。
【0072】
次に、前記の1ボイスモジュールまたは複数ボイスモジュールへの割当て処理について説明する。
「1ボイスモジュールへの割当処理」
単音(1ボイス)のみを発音するモードの割当処理である。キーボード30のキー情報の検出の結果、操作鍵のうち、最後に押鍵した鍵を優先的に1つのボイスモジュール(楽音発生チャンネル)に割り当てる。なお、この割当処理では1ボイスモジュールへの割当なので、ボイスモジュール情報voice.Noの値は常に「No1」になる。
【0073】
「複数ボイスモジュールへの割当処理」
複数音が発音可能なモードの割当処理である。キーボード30のキー情報の検出の結果、操作鍵のうち、予め決められた数の押鍵だけを所定の数のボイスモジュールに割り当てる。この実施例では複数ボイスの数を2ボイスとしている。所定のボイス数(実施例では2)以上操作されても受け付けない。キーオン情報が入力されたとき、空きボイスがあるときのみに割当処理を行う。
【0074】
なお、キーオン情報を転送し、楽音が発音中にアサインスイッチASSIGN.SW を変更すると、発音中の楽音が止まらないなどの動作の不都合が起こる可能性がある。よって、かかる動作の不都合を防止するため、楽音が発音中にアサインスイッチASSIGN.SW を操作して動作モードが変更された場合には、発音中の楽音の全てに対してキーオフ情報を転送するようにしている。そして、新たな動作モードで発音中(押鍵中)のキーオン情報を転送するようにしている。
【0075】
以上の割当て処理は、鍵数よりも少ない数の音源を備えた電子楽器において、押鍵を音源に割り当てる公知のジェネレータアサインの技術を使用するので、詳細は省略する。
【0076】
次に、DSP8の処理を図15を参照して説明する。図15はDSP8のメインルーチンを示すフローチャートであり、サンプリング周期で繰り返し実行されるものである。なお、操作子設定テーブルの再生モードplaymode に設定されたモードが第1再生モードplay1か第2再生モードplay2かに応じて、後述の「読出し処理サブルーチン」「ループモード処理サブルーチン」「順方向再生処理サブルーチン」「逆方向再生処理サブルーチン」「ボイス1の発音開始処理」「ボイス2の発音開始処理」「ボイスlからボイス2へのリンク発音処理」「ボイス2からボイス1へのリンク発音処理」は異なるように設定されるものであるが、まず、再生モードが第1の再生モードplay1の場合について説明する。
【0077】
このメインルーチンでは、操作子設定テーブルのバンク番号bankの更新があったか否かを監視しており(ステップF1)、バンクスイッチBANK.SW の操作に対応してCPU22が操作子設定テーブルのバンク番号bankを更新すると「ループ情報の処理」(ステップF2)を行う。この「ループ情報の処理」の詳細は後述する。更新されない場合にはこのステップF1を飛び越す。
【0078】
またメインルーチンでは、CPU22から新たなキー情報の転送があったか否かをキー情報レジスタを見て監視しており(ステップF3)、キー情報の転送があればその内容に基づいて「キー情報の処理」を行う(ステップF4)。この「キー情報の処理」は転送されたキー情報に応じて各種レジスタの値を変更する処理であるが、詳細な内容は後述する。キー情報の転送がなければこのステップF4を飛び越す。
【0079】
以上のキー情報の処理(ステップF4)が終了した場合またはステップF3で新たなキー情報がないと判断された場合、ボイスモジュール番号nを「1」に設定し(ステップF5)、ボイスモジュール(n) の「読出し処理」を行う(ステップF6)。この「読出し処理」は波形メモリの波形データを操作子等による各種の設定状態に応じた態様で読み出していく処理であるが、その詳細な内容は後述する。その後、ボイスモジュール番号nが最終番号(この実施例ではボイス数の2)か判定し(ステップF8)、最終番号に達していなかったら、ボイスモジュール番号nを一つインクリメントして(ステップF7)、その番号のボイスモジュールの読出し処理を繰り返す。ボイスモジュール番号が最終番号になったら、各ボイス1、2の出力out(1)、out(2)を足し合わせて合成出力out とし(ステップF9)、この合成出力out を出力する(ステップF10)。
【0080】
「ループ情報の処理」
ステップF2の「ループ情報の処理」の具体的な内容は、図16に示されるように、
loopstart =@(bank*$0002)
loopend =@(bank*$0002+1)
の演算を行う(ステップF201)。ここで、「*」は乗算を、「@」は括弧内に示されたアドレスからデータを読み出すことを表す。したがって、上記の処理は、バンク番号bank*$0002の読出しポインタが示すマーク記憶部からループスタートマークloopstart と、バンク番号bank*$0002+1の読出しポインタが示すマーク記憶部からループエンドマークloopend を読み出し、ループ情報レジスタにそれぞれ記憶する処理である。次に、そのループスタートマークloopstart が示す読出しポインタによってパラメータ記憶部からループスタートアドレスloopsaを、ループエンドマークloopend が示す読出しポインタによってパラメータ記憶部からループエンドアドレスloopeaを読み出し、ループ情報レジスタにそれぞれ記憶する(ステップF202)。
【0081】
「キー情報の処理」
ステップF4の「キー情報の処理」の具体的な内容は、図17に示されている。この「キー情報の処理」では、キー情報の転送があると、そのキー情報のボイスモジュール情報voice.Noを調べる(ステップF300)。この実施例では、ボイスモジュールの数は二つであり、従ってボイスモジュール情報voice.NoもVoice.No1とvoice.No2の二つである。ここで、ボイス2への割当はポリフォニック1または2のときだけ行われる。したがってボイスモジュール情報がvoice.No1である場合は、モードとしてはモノフォニックとポリフォニックの双方の場合があり、voice.No2の場合はモードはポリフォニックとなる。
【0082】
ボイスモジュール情報voice.No1であった場合、更にそのキー情報がキーオン情報key.onかキーオフ情報key.off かを判定し(ステップF301)、キーオフ情報key.off であれば、それまで発音を行っていたボイス1(ボイスモジュールNo1) の消音処理を行う(ステップF302)。この消音処理の詳細な内容は、図18に示すように、
SCNT(1) =0
LEVEL(1)=0
とすることである。
【0083】
ここで、括弧付きの数字はボイスモジュールの番号である。SCNT(n) はボイスnの発音の進行を管理するカウンタであり、波形データ記憶部から読み出す波形区間情報を更新(すなわち波形ピッチspitchと開始アドレスsadrs を更新)するためのカウント値をカウントするものである。LEVEL(n)はキー情報レジスタ中のレベルlevel を記憶するレジスタである。従って、上記の図18の消音処理は、ボイス1について、カウンタSCNT(1) を0にリセットし、音量レベルレジスタLEVEL(1)を0にするものである。
【0084】
ステップF301においてキー情報がキーオン情報key.onであった場合、操作子設定テーブルのリンクモードlink.mode を調べる(ステップF303)。リンクモードlink.mode が「0」の場合には「リトリガ」を行うモード、すなわち新たなキーオン情報key.onを受信したら波形データを再生中であってもその波形データの先頭から再生し直すモードであり、よって「ボイス1の発音開始処理」を行う(ステップF308)。この「ボイス1の発音開始処理」は要するに、波形メモリ12から該当する波形のパラメータおよび波形データをその先頭から読み出す処理である。
【0085】
この「ボイス1の発音開始処理」が実行される条件は以下のようになる。
▲1▼モノフォニック1のモードで、ボイス1に対するキーオン情報が入力されたとき・
▲2▼モノフォニック2のモードで、ボイス1が発音されていないときに、ボイス1に対するキーオン情報が入力されたとき.
▲3▼ポリフォニック1のモードで、ボイス1に対するキーオン情報が入力されたとき.
▲4▼ポリフォニック2のモードで、ボイス2が発音されていないときに、ボイス1に対するキーオン情報が入力されたとき.
(このモードのとき、ボイス1は割当処理で発音されていないことを確認して割り当てられる)
【0086】
この「ボイス1発音開始処理」の具体的な内容は、図20に示されるように、
PITCH(1)=kpitch/org.pitch
LEVEL(1)=level
SCNT(1) =0
ENDADRS(1)=@(bank*$800)
STARTADRS(1)=@(bank*$800 +SCNT(1) +1)
SPHASE(1) =STARTADRS(1)
SADRSR(1) =STARTADRS(1)
SPITCH(1) =@(bank*$800 +SCNT(1) +2)
SADRS(1)=@ (bank*$800 +SCNT(1) +3)
START(1)=STARTADRS(1)
WIDTH(1)=0
S.FLG 1(1) =0
S.FLG 2(1) =0
ALT.FLG(1)=0
SCNT(1) =1
を行うことである。
【0087】
ここで、SPHASEは進行位置sphaseを記憶する進行位置レジスタ、ENDADRS は波形データの末尾アドレスendadrs を記憶する末尾アドレスレジスタ、STARTADRS は波形データの先頭アドレスstartadrs を記憶する先頭アドレスレジスタである。SADRS は波形区間の開始アドレスsadrs を記憶するレジスタであり、順方向に波形データを読み出すときの次の波形区間の開始アドレスが記憶される。SADRSRも波形区間の開始アドレスsadrs を記憶するレジスタであるが、現在読み出している波形区間の開始アドレスを記憶するもので、リバース開始アドレスレジスタと称し、進行位置sphaseを逆方向に進めて波形区間を読み出すときの波形区間の移動を認識するときに使用する。START は後述の音素片を切り出すための基準アドレスとなる切出先頭アドレスstart を格納する切出先頭アドレスレジスタである。また前述したように「*」は乗算を、「@」は括弧内に示されたアドレスからデータを読み出すことを表す。例えば、ENDADRS (1)=@(bank*$800)は、パラメータ記憶部の読出しポインタが示すアドレス(bank*$800 )から内容dataを読み出し、レジスタENDADRS (l)に設定することを意味している。
【0088】
上記のボイス1発音開始処理は、ボイス1について、キー入力された音高情報kpitchを先に設定された基準ピッチ情報org.pitch で割算した結果をPITCH(1)に書き込み、レベル情報level をLEVEL(1)に転記し、カウンタSCNT(1) を初期値「0」にリセットし、該当するバンク番号bank (波形領域番号) の波形データの末尾アドレスendadrs を波形パラメータ記憶部における当該バンク番号bankの波形領域の先頭番地$0000から読み出して末尾アドレスレジスタENDADRS(1)にセットし、先頭の波形区間の開始アドレス sadrs0を波形パラメータ記憶部における上記先頭から2番目の番地$0001(最初の波形区間の開始アドレスが格納されている) から読み出して先頭アドレスレジスタSTARTADRS(1)にセットし、その先頭アドレスstartadrs を進行位置sphaseの初期値として進行位置レジスタSPHASE(1) にセットするとともに、その先頭アドレスstartadrs の値を切出先頭アドレスレジスタSTART(1)にセットし、上記波形データの先頭の波形区間の波形ピッチspitch0を上記先頭番地から2番目の番地$0002から読み出して波形ピッチレジスタSPITCH(1) にセットし、上記波形データの先頭から2番目の波形区間の開始アドレス sadrs1を上記先頭から3番目の番地$0003から読み出して開始アドレスSADRS(1)にセットし、レジスタWIDTH(1)、フラグS.FLG1(1) 、S.FLG2(1) 、ALT.FLG(1)に「0」をセットするなどの処理を行った後に、カウンタSCNT(1) を一つ更新して1にするものである。
【0089】
ステップF303においてリンクモードlink.mode が「1」の場合には「リトリガ」を行わないモード、すなわち新たなキーオン情報key.onを受信したら、波形データを再生中であれば、その時点以降の波形データを当該キーオン情報key.onで指定されたピッチに変更して再生するモードである。この場合、まず開始カウンタSCNT(1) が「0」か否かを判定する(ステップF304)。ここで開始カウンタSCNT(n) はボイスnの発音の進行を管理するカウンタであり、この値が「0」の場合にはボイスnがまだ未発音であることを示し、何らかの値となっていれば既に発音開始されたことを示す。
【0090】
開始カウンタSCNT(1) が「0」以外の値すなわちボイス1が既に発音中であれば、ステップF305に移行して「ボイス1からボイス1へのリンク発音処理」を行う(ステップF304)。この経路を辿るのは、モードはモノフォニックであり、ボイス1が既に発音中であり、かつ「リトリガ」をしない場合であるから、ボイス1で発音中の波形を、キーオン情報の入力時点から以降、同じボイス1において当該キーオン情報中の音高情報pitch に変更して再生する。上記リンク発音処理はこのための処理であり、キー情報レジスタの音高情報レジスタPITCH(1)とレベル情報レジスタLEVEL(1)を、受信したキーオン情報中の音高情報kpitchとレベル情報level で書き換える処理、すなわち、図22に示されるように、
PITCH(1)=kpitch/org.pitch
LEVEL(1)=level
とする処理である。
【0091】
この「ボイス1からボイス1へのリンク発音処理」が実行される条件は、モノフォニック2のモードで、ボイス1が発音中にボイス1に対するキーオン情報が入力されたときであり、このモードのときにのみ、割当処理でボイス1が発音中にボイス1に対するキーオン情報が割り当てられる。
【0092】
ステップF304においてカウンタSCNT(1) が「0」すなわちボイス1がまだ未発音であれば、さらにボイス2のカウンタSCNT(2) が「0」か否かを判定する(ステップF306)。カウンタSCNT(2) が「0」でない場合はボイス2が発音中であることを意味し、よってモードはポリフォニックであり、入力したキーオン情報はレガート奏法における2番目の押鍵のキーオン情報である。この場合、ボイス2での波形の発音再生を継続するとともに、そのキーオン情報の入力時点以降の波形に対して、その新たに入力したキーオン情報に応じた音高での再生をボイス1でも行う。このための処理がステップF307の「ボイス2からボイス1へのリンク発音処理」であり、ボイス2に保持していた再生中の波形の各種データをボイス1に渡すとともに、そのデータを新たに入力したキーオン情報に基づいて変更する。
【0093】
この「ボイス2からボイス1へのリンク発音処理」が実行される条件は、ポリフォニック2のモードで、ボイス2が発音中にボイス1に対するキーオン情報が入力されたときである。このモードのとき、ボイス1は割当処理で発音されていないことを確認して割り当てられる。
【0094】
「ボイス2からボイス1へのリンク発音処理」の具体的内容は、図24に示されるように、
PITCH(1)=kpitch/org.pitch
LEVEC(1)=level
SCNT(1) =SCNT(2)
ENDADRS(1)=ENDADRS(2)
STARTADRS(1)=STARTADRS(2)
SPHASE(1) =SPHASE(2)
SPITCH(1)=SPITCH(2)
SADRSR(1) =SADRSR(2)
SADRS(1)=SADRS(2)
START(1)=START(2)
WIDTH(1)=0
S.FLG1(1) =0
S.FLG2(1) =0
ALT.FLG(1)=ALT.FLG(2)
とする処理である。
【0095】
すなわち、このリンク発音処理は、ボイス2での発音をその音高とレベルを変更してボイス1で受け継ぐために、キー入力された音高情報pitch を先に設定された基準ピッチ情報org.pitch で割算した結果をPITCH(1)に書き込み、レベル情報level をキー情報LEVEL(1)に転記するとともに、ボイス2における、レジスタSCNT(2) 、ENDADRS(2)、STARTADRS(2)、SPHASE(2) 、SPITCH(2) 、SADRSR(2) 、SADRS(2)、START(2)の各値をボイス1におけるレジスタSCNT(1) 、ENDADRS(1)、STARTADRS(1)、SPHASE(1) 、SPITCH(1) 、SADRSR(1) 、SADRS(1)、START(1)にそれぞれ書き写し、レジスタWIDTH(1)、フラグS.FLG1(1) 、S.FLG2(1) に「0」をセットし、ALT.FLG(1)にALT.FLG(2)を書き写すものである。
【0096】
ステップF306において、カウンタSCNT(2) が「0」の場合は、ボイス2がまだ未発音であることを意味し、よってモードはモノフォニックまたはポリフォニックである。この経路を辿る場合はボイス1もボイス2も未発音であるので、新たに入力したキーオン情報はレガート奏法における2番目の押鍵ではなく、よってこのキーオン情報はボイス1に割り当てられて、波形データは先頭から再生される。この場合、前述のステップF308の「ボイス1の発音開始処理」を行う。
【0097】
一方、ステップF300の判定において、ボイスモジュール情報voice.Noがvoice.No2であった場合は、モードはポリフォニックとなる。この場合、更にそのキー情報がキーオン情報key.onかキーオフ情報key.off かを判定し(ステップF309)、キーオフ情報key.off であれば、それまで発音を行っていたボイス2(No.2のボイスモジュール) の消音処理を行う(ステップF314)。この消音処理の詳細な内容は、図19に示すように、
SCNT(2) =0
LEVEL(2)=0
とする処理である。
【0098】
ステップF300において、キー情報がキーオン情報key.onであった場合、操作子設定テーブルのリンクモードlind.mode を調べる。リンクモードlink.mode が「0」の場合には「リトリガ」を行うモード、すなわち新たなキーオン情報key.onを受信したら波形データを再生中であってもその波形データの先頭から再生し直すモードであり、よって「ボイス2の発音開始処理」を行う(ステップF311)。この「ボイス2の発音開始処理」は要するに、波形メモリ12から該当する波形のパラメータおよび波形データをその先頭から読み出してボイス2で発音する処理である。
【0099】
この「ボイス2の発音開始処理」が実行される条件は、
▲1▼ポリフォニック1のモードで、ボイス2に対するキーオン情報が入力されたとき、
▲2▼ポリフォニック2のモードで、ボイス1が発音されていないときに、ボイス2に対するキーオン情報が入力されたとき、
である。
なお、ボイス2への割当はポリフォニック1、ポリフォニック2のときだけ行われる。
【0100】
この「ボイス2発音開始処理」の具体的な内容は、図21に示されるように、
PITCH(2)=kpitch/org.pitch
LEVEL(2)=level
SCNT(2) =0
ENDADRS(2)=@ (bank*$800)
STARTADRS(2)=@ (bank*$800 +SCNT(2) +1)
SPTASE(2) =STARTADRS(2)
SADRSR(2) =STARTADRS(2)
SPITCH(2) =@ (bank*$800 +SCNT(2) +2)
SADRS(2)=@ (bank*$800 +SCNT(2) +3)
START(2)=STARTADRS(2)
WIDTH(2)=0
S.FLG1(2) =0
S.FLG2(2) =0
ALT.FLG(2)=0
SCNT(2) =1
を行うことである。
【0101】
ステップF310の判断で、リンクモードlink.mode が「1」の場合には「リトリガ」を行わないモード、すなわち新たなキーオン情報key.onを受信したら、波形データを再生中であれば、その時点以降の波形データを当該キーオン情報key.onで指定されたピッチに変更して再生するモードである。この場合、まずカウンタSCNT(1) が「0」か否かを判定する(ステップF312)。
【0102】
カウンタSCNT(1) が「0」の場合、すなわちボイス1が未だ未発音であれば、前述のステップF311の「ボイス2の発音開始処理」を行う。
【0103】
カウンタSCNT(1) が「0」以外の値の場合、すなわちボイス1が既に発音中であれば、ステップF313に移行し「ボイス1からボイス2へのリンク発音処理」を行う。この経路を辿るのは、モードはポリフォニックであり、ボイス1が既に発音中であり、かつ「リトリガ」をしない場合であるから、ボイス1で発音中の波形を、キーオン情報の入力時点から以降、ボイス1で継続して発音するとともに、それと並行して、ボイス2においても当該キーオン情報中の音高情報pitch に対応して再生する。上記「ボイス1からボイス2へのリンク発音処理」はこのための処理である。
【0104】
この「ボイス1からボイス2へのリンク発音処理」が実行される条件は、ポリフォニック2のモードで、ボイス1が発音中にボイス2に対するキーオン情報が入力されたときである。
【0105】
「ボイス1からボイス2へのリンク発音処理」の具体的内容は、図23に示されるように、
PITCH(2)=kpitch/org.pitch
LEVEC(2)=level
SCNT(2) =SCNT(1)
ENDADRS(2)=ENDADRS(1)
STARTADRS(2)=STARTADRS(1)
SPHASE(2) =SPHASE(1)
SPITCH(2)=SPITCH(1)
SADRSR(2) =SADRSR(1)
SADRS(2)=SADRS(1)
START(2)=START(1)
WIDTH(2)=0
S.FLG1(2) =0
S.FLG2(2) =0
ALT.FLG(2)=ALT.FLG(1)
とする処理である。
以上、キー情報の処理が終了したらメインルーチンに戻る。
【0106】
「読出し処理」
前述のステップF6の「読出し処理」は、サンプル波形(音声)から音素片を切り出し、その音素片のホルマントの特徴をほぼ保ったまま、所望の再生音高に対応した周期でその音素片を再生することによって、サンプル波形のホルマント特性を保ったままピッチを変換するものである。
【0107】
この読出し処理では、同じ波形データを読み出す場合、再生される波形のピッチは鍵盤で押下したキーの音高に応じて変更されるが、再生時間は再生ピッチの大きさ(すなわちどのキーが押下されたか)によらず一定である。すなわち、ポリフォニックの場合、レガート奏法の2番目の押鍵により、1番目の押鍵の音高に応じた波形再生と並行して2番目の押鍵の音高に応じた波形再生が行われたとき、1番目の波形再生の終了と2番目の波形再生の終了は同時となる。一方、従来のように単に読出し速度を変えることでピッチシフトを行っている場合には、上記のようなときには1番目と2番目の波形再生の終了はタイミングがずれてしまい違和感が生じるが、本実施例によれば、かかる違和感を無くすことができる。
【0108】
この読出し処理動作の概要を説明すると、波形メモリ12に記憶されている波形データからパラメータデータに基づいて所望の区間(この実施例では基本的には2ピッチ分の波形区間で、場合によってはそれよりも短い波形区間)を音素片として時間経過に従って順次に切り出して、その切り出した音素片を、元の波形とは異なるピッチおよびホルマントで再生するものである。その際、この音素片の再生を二つの処理経路で並行して行い、それぞれの処理経路では再生しようとするピッチ周期の2倍の周期でかつ互いが半周期(再生しようとするピッチ周期)ずれるようにして音素片を再生し、これらを合成して、再生しようとするピッチ周期にするようにしている。
【0109】
図25、図26はこのピッチ変換処理を説明する図である。ホルマント移動量f.vrは「1」であれば変更なし、「1」以外であればホルマントを若干変更する。ここでは、ホルマント移動量f.vrが「1」、すなわちホルマント変更無しでかつ再生ピッチを波形メモリ12の元の波形データより高くする場合を図25で説明し、ホルマント移動量f.vrが「1」よりも大きい、すなわちホルマント変更有りでかつ再生ピッチを波形メモリ12の元の波形データと同じにする場合を図26で説明する。
【0110】
まず、図25を参照して、鍵盤のキー押下で音高を指定することにより、元の波形データより高域側にピッチをシフトし、かつホルマント特性の変更は行わない(ホルマント移動量f.vr=1)場合について説明する。
【0111】
図25の(a)はwave0領域の波形データを示しており、波形パラメータで示されるピッチspitch0、spitch1・・・を有する。そして、基本的には、このピッチspitchに対応して音素片が順次に切り出される。なお、この図25(a)には開始アドレス sadrs0から始まる波形ピッチspitch0のwave0領域の複数周期の波形のうちのP0〜P4の5周期分の波形を示している。
【0112】
また、再生ピッチwidth は後述の「読出し処理サブルーチン」のステップF70において再生ピッチレジスタWIDTH に設定されており、基本的には(波形ピッチレジスタSPITCH *キー比レジスタPITCH )の演算によって決定されている。なお、lfo.mod は再生ピッチを変調する信号に対応するものであるので、ここでは無視する。この演算処理において使われるキー比レジスタPITCH の情報(キー比pitch )は、前述の各発音処理において演算された「操作キー情報pitch /基準キー情報org.pitch 」の割算の結果であり、鍵盤でキー操作されたキー情報kpitchと先に設定された基準キー情報org.pitch との比である。従って、再生ピッチwidth は、鍵盤のキー操作による再生音高の指定にあたって、オリジナルキー設定時に予め設定された基準キーが操作されると、波形ピッチspitchと同じピッチで再生され、その他のキーが操作されると、基準キーとその操作されたキーとの比に対応して波形ピッチspitchをシフトして再生するようにされている。つまり、基準キーを基準に操作キーで波形ピッチspitchのシフト量を設定している。
【0113】
この再生ピッチwidth を周期長とする再生位相phase を図25 (b) のように作成し、この再生位相pahse から2つの処理経路の位相、すなわち図25 (d) に示す第1の処理経路の第1位相ph1、図25 (e) に示す第2の処理経路の第2位相ph2を作成する。なお、これら第1、第2の位相ph1、ph2はサンプリング周期毎にインクリメントされて増加する
【0114】
そして、第1の処理経路は、後述の「波形読出し処理サブルーチン」のステップF7706で行う読出しアドレス演算の「第1位相ph1×ホルマント移動量f.vr」の部分で決まる読出し速度で、また、第2の処理経路は、後述の「波形読出し処理サブルーチン」のステップF7715で行う読出しアドレス演算の「第2位相ph2×ホルマント移動f.vr」の読出し速度で、それぞれの音素片を順次に読み出す。この読出し速度がホルマント特性の変更に関係する。ただし、今の場合はホルマント移動量f.vr=1であるから、第1、第2の位相ph1、ph2の変化と等しく、結果的にホルマント特性は変更されない。
【0115】
さらに、第1、第2の位相ph1、ph2にそれぞれ同期して、ホルマント処理のために波形データを切り取る切出し窓としてのエンベロープ env1、 env2を第1、第2の処理経路について作成する。第1の処理経路は図25 (f) に示すエンベロープ env1の波形を持ち、第2の処理経路は図25 (g) に示すエンベロープ env2の波形を持つ。エンベロープ env1、 env2は「0〜1」の範囲の値であり、エンベロープ窓長lenghtを半周期とし、前半の周期では「0」から逐次に増加して「1」になり、後半の周期では「1」から逐次に減少して「0」になる三角形をしている。エンベロープ env1、 env2の半周期であるエンベロープ窓長lengthは、後述の「読出し処理のサブルーチン」のステップF70において、
「エンベロープ長length=元波形のピッチspitch/ホルマント移動量f.vr」で求める。但し、エンペロープ窓長lengthは後述するように再生ピッチwidth を超えないように最大でも再生ピッチwidth の値に制限される。図25はかかる制限がされた場合の例である。
【0116】
第1の処理経路では、後述の「読出し処理サブルーチン」のステップF75において設定されている第1切出先頭アドレス START1から波形データの約2ピッチ分の音素片にエンベロープ env1を乗算し、図25 (h) に示す波形を得る。同様に、第2の処理経路では、後述の「読出し処理サブルーチン」のステップF76において設定されている第2切出先頭アドレス START2から波形データの2ピッチ分の音素片にエンベロープ env2を乗算し、図25(i) に示す波形を得る。なお、図25の場合は、前述のように、エンベロープ窓長lengthが再生ピッチwidth の値に制限されているため、音素片は波形データの2ピッチ分より短くなっている。このような処理の仕方によれば、これらの波形は元の波形データの音素片のホルマント特性をそのまま保持したものとなる。この図25 (h) 、 (i) の波形は再生ピッチwidth の周期長の2倍の長さであるが、両者の波形を足し合わせると再生ピッチwidth の周期長となる。従って、鍵盤からの操作キー情報kpitchによって元のサンプリングデータを高域側にピッチシフトしつつ、そのホルマント特性はそのまま維持できる。
【0117】
図26はホルマント移動量f.vrを1より大きくして再生波形のホルマントを元波形のホルマントより高域側にシフトする場合を示すものである。ここでは理解しやすくするために、操作キー情報kpitchが元波形のピッチspitchとほぼ等しいものとして示している。
【0118】
音素片の読出し速度は、第1の処理経路が、「第1位相ph1×ホルマント移動量f.vr」、第2の処理経路が、「第2位相ph2×ホルマント移動量f.vr」であるから、第1、第2の位相ph1、ph2の変化より速く、結果的にホルマント特性は高域側にシフトされ、変更が付与されることになる。
【0119】
そして、読出し速度を速くすることによって音素片は短くなる。従って、エンベロープenv1、env2のエンプロープ窓長lengthも、
「エンプロープ窓長length=元波形のピッチspitch/ホルマント移動量f.vr」として、音素片が短くなったことに合わせて短くしている。
【0120】
「読出し処理のサブルーチン」
上記の効果付加を含む読出し処理の動作を図27、図28のフローチャートに基づいて説明する。なお、図27、図28中の括弧書きの添字(n) はボイスモジュール番号nのパラメータ等であることを意味するものであるが、以下の説明では特に必要がない場合は記述を省略する。
【0121】
DSP8は、処理のため着目している1ピッチ分の波形ピッチspitchを記憶する波形ピッチレジスタSPITCHを備えている。更に、後述する再生ピッチ周期長width に達したかをカウントするための再生位相カウンタPHASE 、第1の波形の位相ph1をカウントするための第1位相カウンタPH1、第2の波形の位相ph2をカウントするための第2位相カウンタPH2も設けられている。
【0122】
また、再生ピッチ(=再生ピッチ周期長width )を記憶するための再生ピッチレジスタWIDTH 、波形ピッチspitchとホルマント移動量f.vrから定めたエンベロープの窓長lengthを記憶するエンベロープ窓長レジスタLENGTH、第1の波形のエンベロープ env1を記憶するための第1エンベロープ波形レジスタ ENV1、および第2の波形のエンベロープ env2を記憶するための第2エンベロープ波形レジスタ ENV2が設けられている。
【0123】
更に、第1の波形のエンベロープの形状を決定するためのカウンタを構成するレジスタWINDOW1、第2の波形のエンベロープの形状を決定するためのカウンタを構成するWINDOW2、エンベロープ窓長lengthの値に基づいて定めたレジスタWINDOW1、WINDOW2の値の歩進率w.rateを記憶する歩進率レジスタW.RATE、第1の波形の切出先頭アドレス start1を記憶する第1切出先頭アドレスレジスタ START1、第2の波形の切出先頭アドレス start2を記憶する第2切出先頭アドレスレジスタ START2、第1および第2の波形の読出しの先頭アドレスを設定する処理を決定するために使用する相識別フラグF等も設けられている。
【0124】
以下、全体的な動作を図27、図28のフローチャートに従って説明する。このフローチャートは図25、図26の動作に対応したものである。上述の各レジスタは、電源の投入の際に、初期化が行われる。即ち、相識別フラグF(1) 、F(2) を「1」に、他のもの例えばレジスタSCNT(2) 、SCNT(1) 、WIDTH(1)、WIDTH(2)、PITCH(1)、PITCH(2)、LEVEL(1)、LEVEL(2)、ENDADRS(1)、ENDADRS(2)等を「0」に初期設定する。
【0125】
なお、以下の説明では、電源投入後少し時間が経過し、前記フローチャートの処理によって、各レジスタや各カウンタには、既に適当な値が記憶されているとして説明する。また、このフローチャートの処理は、DSP8においてサンプリング周期毎に実行される。
【0126】
まず、発音の進行を管理するためのカウンタSCNT(n) が「0」であるか否かを判断する。「0」であれば発音指示がされていないキーオフ中、「0」でなければキーオン中(発音指示中) である。「0」でない(すなわちキーオン中)と判断した場合には進行位置sphaseの更新処理を行い(ステップF62)、「0」すなわちキーオフ中と判断した場合には進行位置sphaseの更新を停止するためにステップF62を飛び越す。
【0127】
進行位置sphaseの更新処理を以下に説明すると、発音開始時においては、進行位置レジスタSPHASE(n) には、前述のボイスの発音開始処理によって、波形メモリ12のパラメータ記憶部におけるバンク番号bankで示される波形領域の先頭の波形区間の開始アドレス sadrs0が格納されている。進行位置sphaseはこれを基準点にして時間の進行を管理する。1サンプル周期毎に、進行位置sphaseを時間圧伸量tcomp だけインクリメントする(ステップF62)。すなわち、
SPHASE(n) =SPHASE(n) +tcomp
とする。このような更新をする結果、時間圧伸量tcomp が大きければ、進行位置sphaseは速く進んで波形全体を再生するに要する時間が短くなり、反対に時間圧伸量tcomp が小さければ進行位置sphaseは遅く進むので波形全体を再生するに要する時間は長くなる。
【0128】
次に、先のループモードスイッチLOOPMODE.SW によって設定されたループモードloopmode に対応して「ループモード処理」を行う(ステップF63)。図29はこの「ループモード処理」のフローチャートである。以下にこの「ループモード処理」について詳細に説明する。
【0129】
まず、操作子設定テーブルに設定されているループモードloopmode が、ループ再生をしないループオフ“off ”であるか否かを判断する(ステップF6301)。ループモードloopmode が“off ”である場合には何も処理をせずに「読出し処理サブルーチン」に戻る。ループモードloopmode が“off ”でなければ、さらにノーマルループ“norm”か、またはオルタネートループ“alt ”かを判定する(ステップF6302)。つまり、ステップF6302とF6308とで3つのループモードloopmode の設定に対応してそれぞれ分岐する処理をしている。
【0130】
ステップF6302においてループモードloopmode がノーマルループ“norm”であった場合には、時間圧伸量tcomp が「0」以上であるか否か、すなわち正か負かを判断する(ステップF6303)。時間圧伸量tcomp が「0」以上でない(時間圧伸量tcomp が負)とは後述の「逆方向再生処理」をすることを意味するが、ノーマルループ“norm”では「逆方向再生処理」はしないので、時間圧伸量tcomp が「0」以上でない場合には、ループ再生をしないようにするために、以下の進行位置sphaseの変更処理をしないように何も処理をせずに「読出し処理サブルーチン」に戻る。
【0131】
ステップF6303で時間圧伸量tcomp が「0」以上であると判断されると、進行位置sphaseがループエンドアドレスloopeaを超えたかか否かを判断する(ステップF6304)。進行位置sphaseがループエンドアドレスloopeaを超えていない場合には「読出し処理サブルーチン」に戻り、ループエンドアドレスloopeaを超えた場合には、ループ再生の区間の先頭に戻って再生を行うための各レジスタの値の再設定処理を行う(ステップF6305〜F6307)。
【0132】
すなわち、まず、
SPHASE(n) =loopsa+(SPHASE(n) −loopea)
を実行する(ステップF6305)。この処理は進行位置sphaseがループエンドアドレスloopeaを超えると、進行位置sphaseをループスタートアドレスloopsaに戻すとともにその超えた長さ(SPHASE(n) −loopea)だけループスタートアドレスloopsaから進める演算を行っている。そして、
SADRS (n) =loopsa、
START (n) =loopsa
を行い(ステップF6306)、開始アドレスsadrs と切出先頭アドレスstart もループスタートアドレスloopsaに戻している。また、
SCNT(n) =(loopstart −1−bank*$800 )/2
を行い(ステップF6307)、カウンタSCNTもループスタートアドレスloopsaに対応して戻し、「読出し処理サブルーチン」に戻っている。
【0133】
以上のステップF6304〜F6307の処理によってノーマルループ再生に対応した進行位置sphaseの変化が得られる。なお、以上の説明から分るように、ノーマルループ再生とは、進行位置sphaseが順方向に変化し、ループエンドアドレスloopeaに達するとループスタートアドレスloopsaに戻って、その間を繰り返す再生のことである。
【0134】
次に、ステップF6302でループモードloopmode がオルタネートループ“alt ”と判断された場合の処理を説明する。ここで、オルタネートループ再生とは、進行位置sphaseが順方向に変化しループエンドアドレスloopeaに達すると進行位置sphaseの変化がループスタートアドレスloopsaへ向かう逆方向へと変化するようになり、そして進行位置sphaseがループスタートアドレスloopsaに達すると進行位置sphaseの変化がループエンドアドレスloopeaへ向かう順方向へと変化するというように、進行位置sphaseの変化方向がループスタートアドレスloopsaとループエンドアドレスloopeaとで交互に反転してその間を繰り返し再生する再生の仕方である。
【0135】
したがって、オルタネートループ“alt ”と判断された場合には、さらに時間圧伸量tcomp が「0」以上であるか否か(正か負か)を判断する(ステップF6308)。これは進行位置sphaseの変化方向を判断していることになり、時間圧伸量tcomp が「0」以上である場合は順方向に再生を行っており、「0」より小さい場合は逆方向に再生を行っていることになる。
【0136】
順方向再生(時間圧伸量tcomp が「0」以上)を行っている場合、まず、次のステップP6309からステップF6311を実行して、進行位置sphaseがループスタートアドレスloopsaを超えるとオルタネートフラグALT.FLG を「1」にセットする処理を行っている。つまり、フラグALT.FLT (n) =0であるか否かを判断し(ステップF6309)、「0」であれば進行位置sphaseがループスタートアドレスloopsa以上か否かを判断して(ステップF6310)、進行位置sphaseがループスタートアドレスloopsa以上であると判断されたときには、進行位置sphaseがループスタートアドレスloopsaに達したことになるためフラグALT.FLG (n) を「l」にセット(ステップF6311)し、ループスタートアドレスloopsaより小さいと判断されたときには、進行位置sphaseがまだループスタートアドレスloopsaに達していないため次のステップF6311をジャンプしている。また、前記ステップF6309でフラグALT.FLG(n)が「0」でないと判断された場合には、既に進行位置sphaseがループスタートアドレスloopsaに達してフラグALT.FLG (n) が「l」にセットされているため、ステップF6310とF6311をジャンプしている。
なお、このフラグALT.FLG (n) は後述のステップF6315で使用している。
【0137】
次のステップF6312からF6314の処理では、進行位置sphaseが順方向においてループエンドアドレスloopeaを超えたかを判断し、超えていれば進行位置sphaseの変化方向を逆方向に変える処理を行っている。具体的には、進行位置sphaseがループエンドアドレスloopea以上かを判断し(ステップF6312)、以上と判断された場合には
SPHASE(n) =loopea−(SPHASE(n) −loopea)
の演算を行い(ステップF6313)、これにより進行位置sphaseを、上記ループエンドアドレスloopeaから順方向に超過した分(SPHASE(n) −loopea)だけループエンドアドレスloopeaから逆方向に戻した位置に設定する。そして時間圧伸量tcomp に「−1」を乗算し(ステップF6314)、時間圧伸量tcomp の符号を反転して進行位置sphaseの進行方向を反転している。
【0138】
また、前記ステップF6312において、進行位置sphaseがループエンドアドレスloopea以上でないと判断された場合には、前記ステップF6313とF6314を飛び越して、読出しサブルーチンに戻る。
【0139】
次に前記ステップF6308で時間圧伸量tcomp が「0」以上でない(逆方向再生を行っている)と判断された場合には、フラグALT.FLG (n) が「1」であるか否かを判断する(ステップF6315)。このフラグALT.FLG (n) の判断は、進行位置sphaseがループスタートアドレスloopsaを超えるまでは次のループスタートアドレスloopsaとの比較判断で誤った判断を行うため、それを防ぐためである。ALT.FLG (n) =lでない、すなわち順方向再生して進行位置sphaseがループスタートアドレスを超えていないと判断された場合には「読出し処理サブルーチン」ヘ戻る。
【0140】
一方、ALT.FLG (n) =1である、すなわち順方向再生して進行位置sphaseがループスタートアドレスを超えたと判断された場合には、現在の状態が、進行位置spahseがループスタートアドレスに達し、逆方向再生処理の状態であるため、進行位置sphaseがループスタートアドレスloopsa以下であるか否か、すなわち逆方向に変化した進行位置sphaseがループスタートアドレスloopsaに達したか否かを判断する(ステップF6316)。進行位置sphaseがループスタートアドレスloopsa以下であると判断された場合、すなわち進行位置sphaseがループスタートアドレスloopsaを逆方向に超えたと判断された場合には、
SPHASE(n) =loopsa+(SPHASE(n) −loopsa)
の演算を行い(ステップF6317)、これにより進行位置sphaseを、上記ループスタートアドレスloopsaから逆方向に超過した分(SPHASE(n) −loopsa)だけループスタートアドレスloopsaから順方向に進めた位置に設定する。そして、前記したように、時間圧伸量tcomp に「−1」を乗算し(ステップF6314)、時間圧伸量tcomp の符号を反転して進行位置sphaseの進行方向を反転している。
【0141】
また、前記ステップF6316において、進行位置sphaseがループスタートアドレスloopsa以下でないと判断された場合には前記ステップF6317とF6314を飛び越して、「読出し処理のサブルーチン」に戻る。
【0142】
以上のようにして「ループモード処理サブルーチン」が終了して「読出し処理サブルーチン」に戻ると、「読出し処理サブルーチン」では、次に時間圧伸量tcomp が「0」以上か否かを判断する(ステップF64)。時間圧伸量tcomp が「0」以上であると判断された場合には「順方向再生処理」(ステップF65)を、時間圧伸量tcomp が「0」以上でないと判断された場合には「逆方向再生処理」(ステップF66)を実行する。
【0143】
「順方向再生処理」
図30はこの「順方向再生処理」の手順を示すフローチャートであり、以下にこの「順方向再生処理」について詳細に説明する。まず進行位置sphaseと末尾アドレスレジスタendadrs を比較し(ステップF6501)、進行位置spase が末尾アドレスendadrs 以上であれば、進行位置sphaseが末尾まで処理を終えていることを意味しているため、進行位置sphaseを末尾アドレスendadrs にして(ステップF6502)、進行位置sphaseが末尾アドレスendadrs を超えないようにしている。なお、ステップF6501で進行位置sphaseが末尾アドレスendadrs 以上でなければ、まだその波形全体の末尾まで処理を終えていないことを意味するため、前記ステップF6502は飛び越す。
【0144】
次に切出先頭アドレスレジスタSRART(n)を更新するか否かを判定するために、( START(n) +SPITCH(n) )と進行位置レジスタSPHASE(n) の値とを比較する(ステップF6503)。(START (n) +SPITCH(n) )よりも進行位置レジスタSPHASE(n) の値の方が大きければ、進行位置sphaseが、切出先頭アドレスstart から順方向に波形ピッチspitch分だけ進んだ位置を超えたことを意味し、この場合には切出先頭アドレスレジスタSTART を次の切出先頭アドレスの値に更新する。この更新は切出先頭アドレスレジスタSTART(n)を波形ピッチspitchでインクリメントして行う(ステップF6504)。すなわち、
START(n)= START(n) +SPITCH(n)
とする。進行位置spitchが(START +SPITCH)以下である場合には、この切出先頭アドレスstart の更新は行わない。
【0145】
進行位置sphaseと開始アドレスレジスタsadrs を比較する(ステップF6505)。この開始アドレスsadrs は前述した図20、図21の発音開始処理からも分かるように、次に続く波形区間の開始アドレスである。よって進行位置sphaseが開始アドレスsadrs 以上であれば、それまで処理していた波形区間が終了したので、この波形区間から次の波形区間に処理を移行するために波形区間の更新を行う。この波形区間の更新は次のようにして行う。
SADRSR(n) =@ (bank*$800 +1+SCNT(n) *2)
SPITCH(n) =@(bank*$800 +2+SCNT(n) *2)
SADRS(n) =@(bank*$800 +3+SCNT(n) *2)
SCNT(n) =SCNT(n) +1
【0146】
すなわち、波形メモリ12のパラメータ記憶部からパラメータデータ(次に続く波形区間の開始アドレスsadrs と波形ピッチspitchと更にその後の波形区間の開始アドレスsadrs)を読み出してきて、それぞれ、現在の波形区間のリバース開始アドレスsadrsr、波形ピッチspitch、次の波形区間の開始アドレスsadrs とし、カウンタSCNTを一つインクリメントする(ステップF6506)。
【0147】
ステップF6505において、進行位置sphaseが次の波形区間の開始アドレスsadrs より小さければ、まだ現在の波形区間の途中であるから、波形区間の更新は行わないので、ステップF6506の処理は飛び越す。
【0148】
「逆方向再生処理」
図31は前述のステップF66の「逆方向再生処理」の手順を示すフローチャートであり、以下にこの「逆方向再生処理」について詳細に説明する。まず、進行位置sphaseと先頭アドレスsraradrsを比較し(ステップF6601)、進行位置sphaseが先頭アドレスレジスタstartadrs 以下であれば、進行位置sphaseが逆方向に進んで先頭アドレスstartadrs に達していることを意味しているため、進行位置sphaseを先頭アドレスstartadrs にして(ステップF6602)、進行位置sphaseが先頭アドレスstartadrs を超えて逆方向に進まないようにしている。なお、ステップF6601で進行位置sphaseが先頭アドレスstartadrs 以下でなければ、まだその波形全体の末尾まで処理を終えていないことを意味するため、前記ステップF6602を飛び越す。
【0149】
次に、進行位置sphaseとリバース開始アドレスsadrsrを比較する(ステップF6603)。このリバース開始アドレスsasrsrは前述したように、現在読み出している波形区間の開始アドレスである。よって進行位置sphaseがリバース開始アドレスsadrsrより小さければ、進行位置sphaseが逆方向に進んで現在処理している波形区間の開始アドレスに達したことになるので、この波形区間から前の波形区間に処理を移行するために波形区間の更新を行う。この波形区間の更新は、
SCNT(n) =SCNT(n) −1
SADRSR (n)=@〔bank*$800 +1+(SCNT(n) −1)*2〕
SPITCH(n) =@〔bank*$800 +2+(SCNT(n) −1)*2〕
SADRS (n) =@〔bank*$800 +3+(SCNT(n) −1)*2〕
のようにして行う(ステップF6604)。すなわち、カウンタSCNTを一つディクリメントし、波形メモリ12のパラメータ記憶部からパラメータデータ(次に続く前の波形区間の開始アドレスsadrsr と波形ピッチspitchと更に前記前の波形区間の後に続く波形区間の開始アドレスsadrs )を読み出してきて、それぞれ、現在の波形区間のリバース開始アドレスsadrsr、波形ピッチspitch、次の波形区間の開始アドレスsadrs とする。
【0150】
ステップF6603において、進行位置sphaseが現在の波形区間の開始アドレスであるリバース開始アドレスsadrsr以上であれば、まだ現在の波形区間の途中であるから、波形区間の更新は行わないで、ステップF6604の処理は飛び越す。
【0151】
次に切出先頭アドレスstart を更新するか否かを判定するために、切出先頭アドレスstart と進行位置sphaseとを比較する(ステップF6605)。切出先頭アドレスstart の方が進行位置sphaseより大きければ、進行位置sphaseが切出先頭アドレスstart を逆方向へ超えて進んだことを意味し、この場合には切出先頭アドレスstart を次の切出先頭アドレスの値に更新する。この更新は切出先頭アドレスレジスタSTART の値を波形ピッチspitchでディクリメントして行う(ステップF6606)。すなわち、
START(n)=START(n)−SPITCH(n)
とする。
【0152】
さらに、切出先頭アドレスstart が波形の先頭アドレスstartadrs を逆方向へ超えて進まないように制限を加えている。具体的には、切出先頭アドレスstart と先頭アドレスstartadrs を比較(ステップF6607)し、切出先頭アドレスstart が先頭アドレスstartadrs より小さいと判断された場合は、切出先頭アドレスstart が波形の先頭アドレスstartadrs を逆方向に超えて進んだことになるため、切出先頭アドレスstart を先頭アドレスstartadrs とする(ステップF6608)。ステップF6607において、切出先頭アドレスstart が先頭アドレスstartadrs 以上と判断された場合は、切出先頭アドレスstart が波形の先頭アドレスstartadrs に達していないため、ステップF6608を飛び越す。
【0153】
なお、先のステップF6605において進行位置sphaseが切出先頭アドレスstart 以上である場合には、進行位置sphaseが切出先頭アドレスstart を逆方向に超えていないため、切出先頭アドレスstart の更新は行わない。
【0154】
以上のステップF61〜F66の処理により、DSPの操作子設定テーブルに絶対値が大きな時間圧伸量tcomp が設定された場合には進行位置sphaseが速く進んで切出先頭アドレスstart の更新が早く行われ、よって波形再生時間が短くなる。反対に時間圧伸量tcomp の絶対値が小さい場合には進行位置shase が遅く進んで切出先頭アドレスstart の更新が遅く行われ、よって波形再生時間が長くなる。
【0155】
なお、この時間圧伸量tcomp の絶対値をかなり小さな値に設定した場合には、同じ波形区間が複数回繰り返して再生されつつ、遅い速度で波形再生が進行するようになる。これは、進行位置sphaseの進行がゆっくりしているためステップF6505、F6503、F6605の判断で進行位置sphaseがなかなか比較している値よりも大きく又は小さくならず、よって波形区間の更新がなかなか行われないで同じ波形区間からの読出し処理が繰り返し行われるためである。反対に、時間圧伸量tcomp の絶対値をかなり大きな値にすると、波形区間の更新において、次に続く波形区間を飛び越してしまいその波形区間の再生が行われないような場合も生じる。
【0156】
ここで、アフタータッチがあった場合には、DSPの操作子設定テーブルの時間圧伸量tcomp は、前述の再生処理のステップE328においてそのアフタータッチの強さに応じて変更されるので、波形再生時間はアフタータッチにより次のように調整される。
▲1▼アフタータッチ無しの場合
アフタータッチがごく弱いためアフタータッチ無しと判定された場合、つまりアフタータッチ信号after.touch の大きさが$00〜$19の場合は、時間圧伸量設定操作子TCOMP で設定した時間圧伸量tcomp の速さで再生され、アフタータッチにより変化しない。
▲2▼アフタータッチ有りの場合
アフタータッチが有りと判定された場合には、アフタータッチ信号after.touch の大きさが$20以上、$7F未満では、アフタータッチ信号after.touch の値が大きくなるほど、つまりアフタータッチが強くなるほど、波形再生の速さが遅くなる。アフタータッチ信号after.touch が$7F、つまりアフタータッチが最も強い場合には、再生速度はほぼ停止状態となり、同じ波形が繰り返して再生され続けるようになる。
【0157】
上記のように進行位置sphaseを時間基準として用いて波形区間の更新を行いつつ波形データを再生すると、波形再生に要する時間長は、再生する波形の音高によらず、ユーザが時間圧伸量設定操作子TCOMP とキーボードのアフタータッチで設定する時間圧伸量tcomp で決めることができるようになる。この結果、ポリフォニックモード2で2つのボイスモジュールを並行して発音させる場合でも、その発音の終了時間は2つのボイスモジュールで同時とすることができる。
【0158】
次に「読出し処理のサブルーチン」において、ステップF67では、再生位相phase 、第1位相ph1、第2位相ph2の値をそれぞれ1つ歩進させる(ステップF67)。次に、再生位相phase と再生ピッチwidth を比較する(ステップF68)。この再生ピッチwidth が再生されるピッチに対応する。再生位相phase が再生ピッチwidth に達していなければ、後述するステップF77の「波形読出し処理」へ進む。なお、再生ピッチwidth は後述のステップF70で算出される。
【0159】
再生位相phase が再生ピッチwidth に達している時にはステップF69〜F76を行う。このステップF69〜F76ではレジスタPHASE(n)の初期化、各レジスタWIDTH(n)、LENGTH(n) 、W.RATE(n) の更新、相識別フラグF(n) の反転を行うとともに、相識別フラグF(n) の値に応じた側の第1、第2の処理経路について各パラメータの設定を行う。
【0160】
まず、再生位相phase を「0」とする(ステップF69)。次いで、新たな再生ピッチwidth を、波形ピッチspitchと、鍵盤の押鍵で音高指定された操作キー情報kpithcと基準ピッチorg.pitch との割算結果のキー比pitch と、前述の再生処理におけるステップE330の演算処理で求めた変調度lfo.mod とを乗算することで求め、これを再生ピッチレジスタWIDTH に記憶させる(ステップF70)。この処理を行うことにより、レジスタMTCOMPの設定値が「0. 1」より大きい場合には変調度lfo.mod は「1」に固定されるので、再生ピッチwidth は操作キー情報kpitchに一致する。一方、レジスタMTCOMPの絶対値が「0.1」以下になると、変調度lfo.mod は「1」を中心に低周波数で振動する波形となり、したがって再生ピッチwidth はこのステップF70の演算をする毎に値が変動することになる。
【0161】
レジスタMTCOMPの絶対値が時間圧伸量操作子 TCOMPの設定により、さらにはキーボードのアフタータッチ操作により「0.1」以下の小さな値になると、前述したように波形再生速度がかなり遅くなって同じ波形区間が繰り返して読み出される。このように、同じ特質を持った再生波形の繰返しは、それが規則正しく繰り返されるものであるため、その繰返し部分の再生波形に揺らぎ成分がなくなり、このためかかる再生波形により発音される音は美しくはあるが単調で不自然な感じのものになるが、上記の変調度lfo.mod を乗じる処理を行うことで、同じ波形区間が繰り返して読み出される場合でも、前記演算をする毎に再生ピッチwidth は変化し、時間的に変化する変調を受けることになるので、同じ波形区間の繰返し再生であっても再生波形にビブラートに似た効果を付与することができ、単調な感じを無くすことができる。この効果は押鍵後にアフタータッチ操作により波形再生速度が遅くなった場合も同様に得られる。
【0162】
次いで、ホルマント移動量f.vrを入力し、第1の波形のエンベロープ env1、第2の波形のエンベロープ env2の窓長lengthを、波形ピッチspitchをホルマント移動量f.vrで割算して求めて、エンベロープ窓長レジスタLENGTHに記憶させる(ステップF70)。
【0163】
次に、エンベロープの窓長lengthを再生ピッチwidth 以内に制限する(ステップF71、F72)。エンベロープ窓長lengthと再生ピッチwidth とを比較し(ステップF71)、エンベロープ窓長lengthが再生ピッチwidth よりも大きい場合には、エンベロープ窓長lengthを再生ピッチwidth とする(ステップF72)。一方、エンベロープ窓長lengthが再生ピッチwidth 以下である場合には、このステップS72の処理は行わない。これにより、エンベロープ窓長lengthが再生ピッチwidth より大きくならないように制限をかける。
【0164】
次いで、エンベロープ窓長lengthの逆数を求め、これを歩進率w.rateとして歩進率レジスタW.RATEに記憶させる (ステップF73)。この歩進率w.rateはカウンタWINDOW1、WINDOW2の値を歩進させるために使用する。また、相識別フラグFの極性を反転させる。このステップF73の処理は、ステップF68おいて再生位相phase が再生ピッチwidth 以上になったときに行われるので、相識別フラグFの反転も、再生位相phase が再生ピッチwidth 以上になったときに行われることになり、例えば図25、図26の(c)に示されるように、再生位相phase の周期で「1」と「−1」に反転する波形が得られる。
【0165】
次に、相識別フラグFの値を「0」と比較し、相識別フラグFが「1」であるか、「−1」であるかを判断する(ステップF74)。相識別フラグFの値が「1」であることは相識別フラグFが「−1」から「1」に立ち上がったときを意味しており、この場合には、第1の処理経路に相当するレジスタPH1とカウンタWINDOW1の値をそれぞれ「0」とし、切出先頭アドレスstart を第1切出先頭アドレス start1とし、フラグ S.FlG1を「1」にする(ステップF75)。
【0166】
また、相識別フラグFの値が「−1」であることは相識別フラグFが「1」から「−1」に立ち下がったことを意味しており、この場合には、第2の処理経路に相当するレジスタPH2とカウンタWINDOW2をそれぞれ「0」とし、切出先頭アドレスstart を第2切出先頭アドレス start2とし、第2のフラグ S.FLG2を「1」 にする(ステップF76)。
【0167】
この場合、前述のステップF75とこのステップF76は、ステップF68で再生位相phase が再生ピッチwidth を超えたと判定される毎に交互に実行されるものであるから、第1位相ph1と第2位相ph2は、図25の(d)、(e)のように再生ピッチwidth の2倍の周期で、かつ、お互いに再生ピッチwidth だけ位相の異なる変化をするものとなる。また、第1切出先頭アドレス start1は第1位相ph1の立下り部分で、第2切出先頭アドレス start2は第2位相ph2の立下り部分の、それぞれ再生ピッチwidth だけ時間差を持ったタイミングで更新されることになる。
【0168】
なお、上述のフラグS.FLG 1 =1 、S.FLG 2 =1 の処理により、発音開始後、レジスタPH1(n) 、PH2(n) がリセットされて初めて発音が開始されるようにして、発音開始後すぐの不要な発音を防止している。
【0169】
このステップF75またはF76の処理に続いて、あるいはステップF68において再生位相phase が再生ピッチwidth に達していないと判断されたときには、波形読出し処理を行う(ステップF77)
【0170】
「波形読出し処理」
図32、図33はこの波形読出し処理を示すフローチャートである。以下にこの波形読出し処理について詳細に説明する。
図32は波形読出し処理のフローチャートであり、同図中のステップF7701〜F7709は第1の処理経路のための処理、次の図33のステップF7710〜F7718は第2の処理経路のための処理であり、この二つの処理は時系列に行われるが、処理の内容は実質的に同様な内容となっている。
【0171】
図32に示すように、波形読出し処理では、まずカウンタWINDOW1(n) の値を歩進率w.rateだけ歩進させる(ステップF7701)。そして、歩進させたカウンタWINDOW1(n) の値が「1」より小さいか、「1」以上であって「2」より小さいか、あるいは「2」以上であるかを判定する(ステップF7702)。「1」より小さい場合には、カウンタWINDOW1(n) の値を第1エンベロープ env1とし(ステップF7703)、「1」以上であって「2」より小さい場合には、「2」からカウンタWINDOW1(n) の値を減算した値を第1エンベロープ env1とし(ステップF7704) 、「2」以上のとき、第1エンベロープレジスタ env1を0とする(ステップF7705)。
【0172】
ステップF7702〜F7705は、例えば図25(f) に示されるように、歩進率w.rateずつ値が増加する鋸歯状波を作成し、これの値を「1」で折り返すことによって、第1エンベロープ env1を作成している。但し、カウンタWINDOW 1(n) の値が「2」を越えた場合には、ステップF7705によって第1エンベロープ env1の値を「0」としている。即ち、ホルマント移動量f.vrと波形ピッチspitchとに基づいて定めたエンベロープ窓長lengthの値の逆数である歩進率w.rateずつ「1」まで増加し、その後、歩進率w.rateずつ「0」まで減少する三角波を第1のエンベロープ env1の波形として作成している。
【0173】
また、ステップF7703〜F7705に続いて、第1位相ph1(読出しアドレスの歩進値)にホルマント移動量f.vrを乗算した値を、第1の波形の先頭アドレス start1と加算して、第1の波形の読出しアドレスadrs1としている(ステップF7706)。
【0174】
また、読出しアドレス adres1と末尾アドレスレジスタendadrs を比較し(ステップF7707)、末尾アドレスレジスタendadrs よりも大きければ、「読出しアドレス adres1=末尾アドレスレジスタendadrs 」とする(ステップF7708)。これは読出しアドレス adres1にリミットをかけて、末尾アドレスendadrs の値を超えて読み出さないようにしているものである。
【0175】
これに続いて、波形メモリから読出しアドレス adres1で第1の波形の波形データdata1を読み出す(ステップF7709)。このように読出しアドレス adres1はその歩進幅がホルマント移動量f.vrによって変更されるので、結果的には波形データdata1の読出し速度が、ホルマント移動量f.vrによって変更されている。これに続くステップF7710〜F7718では上述と同じ処理を、第2の処理経路についても行う。
【0176】
このようにして読み出された第1の処理経路のデータdata1と第1エンベロープレジスタ env1の値とフラグ S.FLG1を乗算したものと、第2の処理経路のデータdata2に第2エンベロープレジスタ ENV2の値とフラグ S.FLG2を乗算したものとを加算して出力out とする(ステップF7719)。これにより、フラグ S.FLG1(n) または S.FLG2(n) が「0」の間は、合成する信号が「0」になるようにして、エンベロープ env1、 env2が必ず「0」から始まるようにしている。
【0177】
次いで、
L.ENV(n)=L.ENV(n)+(LEVEL(n) −L.ENV(n)) *K
とし、このレジスタL.ENV の値を出力out に乗じたものを最終的な出力out とする。すなわち、立上り、立下りの特性が係数Kで決まるレベルエンベロープL.env を算出し、これを出力に付加している。なお、ステップF7720の演算では、レベルエンベロープL.env は「0」にならないので、所定レベル以下になると、L.ENV(n)=0となるように処理を追加してもよい。
【0178】
なお、上述の実施例では、再生波形に揺らぎを付加する方法として、再生波形のピッチに変化を与えるようにしたが、これに限らず、例えば波形データを切り出す切出し窓の窓長lengthに変化を与えるようにすることもできるし、また再生波形の音量レベルに変化を与えるものであってもよい。
【0179】
本発明の実施にあたっては種々の変形形態が可能である。例えば上述の実施例では、時間圧伸量操作子TCOMP による設定値をアフタータッチ信号after.touch に基づいて修正するにあたり、
MTCOMP= TCOMP*〔1−(after.touch −$20)/$60〕
という演算式を用いており、この演算式は、アフタータッチが強ければ強いほど波形再生速度が遅くなり、最も強いアフタータッチでは波形再生速度がほぼ停止するというものであった。しかし、本発明はこのような修正の演算式だけに限られるものではなく、例えば次のような演算を行うなどの方法も可能である。
【0180】
すなわち、次の演算式
MTCOMP= TCOMP*〔1−(after.touch −$20)/$40〕
により時間圧伸量設定操作子TCOMP による設定値を修正する。この演算式は、アフタータッチ有りと判定された$20〜$7Fの範囲のアフタータッチ信号after.touch を、
(after.touch −$20)/$40
という演算により0〜2の範囲の値に正規化し、この正規化した値を1から減じて時間圧伸量設定操作子TCOMP による設定値に乗算してレジスタMTCOMPに設定するものである。この演算式によれば、アフタータッチ信号after.touch が$00〜$19の範囲では時間圧伸量設定操作子TCOMP で設定した値による再生速度で波形再生されてアフタータッチによっては影響されず、$20〜$59の範囲ではアフタータッチが強くなるほど時間圧伸量設定操作子TCOMP の検出値がゼロに向かって小さくなるように修正されて波形再生速度が次第に遅くなり、$60でゼロになって波形再生速度がほぼ停止して同じ波形が繰り返して再生されるようになる。さらに、アフタータッチ信号after.touch が$61〜$7Fの範囲では、レジスタMTCOMPの値は負の値となり、この場合には操作子設定テーブルの時間圧伸量tcomp が負の値となって進行位置sphaseが逆方向に進むようになり、その結果、波形が逆方向に戻りながら再生される。この逆方向再生の場合の再生速度はアフタータッチが強ければ強いほど速くなる。
なお、この逆方向の再生が必要ないのであれば、アフタータッチ信号after.touch の値にリミッタをかけてレジスタMTCOMPの値が負にならないようにすればよい。
【0181】
次に、本発明の他の実施例を説明する。前述の実施例では、波形再生にあたりメモリ波形のピッチを使用することから、メモリ波形のピッチが検出可能なものでなければならない。しかし、楽音として使用する波形には、必ずしもピッチ検出可能なものばかりではない。例えば、シンバルや太鼓類などの打楽器音、それから和音演奏のように複数の楽音が同時に発音されているものなどがある。そこで、本実施例では、例えば本出願人に係る特願平6−97608号(特開平7−306693号公報)に開示されているような従来からあるピッチシフタの技術を使用して、ピッチ変化に対応してホルマントも変化する読出し方法を実現しており、前記再生モードスイッチPLAYMODE.SW により第2再生モードplay2に設定することにより実行される。
【0182】
この実施例の構成は基本的には前述の実施例を用いているが、異なる点を以下に示す。
1. 波形メモリのデータ構成は先のものと同じとするが、ピッチ検出ができない波形の場合は波形ピッチspitchは記憶されていない。
4.「ボイス1の発音開始処理」を図39に示すように変更
5.「ボイス2の発音開始処理」を図40に示すように変更
7.「ボイス1からボイス2へのリンク発音処理」を図41に示すように変更
8.「ボイス2からボイス1へのリンク発音処理」を図42に示すように変更
9.「読出し処理」を図34、図35に示すように変更
「ループモード処理」を図36に示すように変更
「順方向再生処理」および「逆方向再生処理」を図37、図38に示すように変更
10. 「波形読出し処理」を図43、図44に示すように変更
【0183】
上述の「ボイス1の発音開始処理」、「ボイス2の発音開始処理」、「ボイス1からボイス1へのリンク発音処理」、「ボイス1からボイス2へのリンク発音処理」、「ボイス2からボイス1へのリンク発音処理」のうちの主な変更点について説明する。
【0184】
本実施例の「読出し処理」は図34、図35に示すものとする。この「読出し処理」と前述の実施例の図27、図28の「読出し処理」との主な相違点を以下に示す。ステップF63’の「ループモード処理」は、図36に示すようになり、前記図29の「ループモード処理」からステップF6306とF6307が削除されたものになっている。ステップF65’の「順方向再生処理」は、図37に示すようになり、前記図30の「順方向再生処理」からステップF6503からF6506を削除したものになっている。ステップF66’の「逆方向再生処理」は、図38に示すようになり、前記図31の「逆方向再生処理」からステップF6603からF6608を削除したものになっている。また、ステップF70’では、前述の実施例のステップF70に換えて、再生ピッチwidth およびエンベロープ窓長lengthとして係数env.p を設定するものである。また、前述の実施例のステップ71、P72は削除する。そして、前述の実施例のステップ75、F76に換えて、切出しの先頭アドレスを設定するレジスタ START1、 START2に進行位置レジスタSPHASEの値を設定するステップF75’、F76’とする。さらに、前述の実施例のステップ77の「波形読出し処理」を後述するようなものにする。
【0185】
なお、ステップF70’における係数env.p は予め定められた定数で、 ENV1、 ENV2の周期を決定するものである。
【0186】
「波形読出し処理」
本実施例の「波形読出し処理」は図43、図44に示すものとする。この「波形読出し処理」と前述の実施例の図32、図33の「波形読出し処理」との主な相違点を以下に示す。ステップF7701、ステップF7710でWINDOW 1、WINDOW 2に加算する量w.rateは、本実施例では先のステップF73で算出され、予め定められた係数env.p に設定されたlengthで、「w.rate=1/length」を満たす値とする。また、前述の実施例のステップF7705、ステップF7714は、本実施例ではWINDOW(n) は「2」によりも大きくならないため、削除してある。また、ステップF7706’、F7715’ではph1、ph2に対して、前述の実施例のホルマント移動量f.vrに換えて、ピッチレジスタPITCH(n)の値と変調値lfo.mod との積を乗じている。
【0187】
本実施例の処理の概要を図45、図46を参照して以下に説明する。図45は再生音声を元の波形データの音高より低くする場合の処理、図46は再生音声を元の波形データの音高より高くする場合の処理を示している。
【0188】
この処理においては、例えば図45において、波形メモリに記憶されている波形データWave Date をアドレス adres1で読み出し、その読み出した波形データに“ENV 1" を乗算して窓関数を付加したもの(図45の(2) )と、波形メモリに記憶されている波形データ“Wave-Date" をアドレス adres2で読み出し、その読み出した波形データに“ENV 2" を乗算して窓関数を付加したもの(図45の(3))とを図面で示している。(2) と(3) とを加算した信号がピッチシフトされた信号となる。図46についても同様である。
【0189】
再生音高を元の波形データの音高より低くする場合、図45に示すように、波形メモリの読出し速度が「1」よりも小さくなり、 ENV1が付加される波形データは、WD+0 、WD+2 、WD+4 、WD+6 ・・・となり、 ENV2が付加される波形データは、WD+1 、WD+3 、WD+5 ・・・となって、これらが伸長されてWD+0 ’、WD+2 ’、WD+4 ’、WD+6 ’、およびWD+1 ’ 、WD+3 ’ 、WD+5 ’となる。
【0190】
反対に、再生音高を元の波形データの音高より高くする場合、図46に示すように、波形メモリの読出し速度が1よりも大きくなり、 ENV1が付加される波形データは、WU+0 、WU+2 、WU+4 、WU+6 ・・・となり、 ENV2が付加される波形データは、WU+1 、WU+3 、WU+5 ・・・となって、これらが圧縮されてWU+0 ’、WU+2 ’、WU+4 ’、WU+6 ’、およびWU+1 ’ 、WU+3 ’ 、WU+5 ’となる。
【0191】
なお、波形メモリの読出し速度は、「波形読出し処理」の「PH1(n) *PITCH (n) *lfo.mod 」と「PH2(n) *PITCH (n) *lfo.mod 」の変化速度に対応する。
【0192】
また、この第2再生モードplay2はピッチ検出ができない波形を再生する場合として説明したが、フォルマントがピッチ変化に対応して移動するが、ピッチ検出ができる場合の波形も再生することができ、当然、前述のようなループ再生も第1再生モードplay1と同様に可能であることはその構成から明らかである。
【0193】
なお、以上の実施例ではループポイントのアドレス(loopsa、loopea)を間接的に指示するパラメータ記憶部のアドレスとしてマーク記憶部に(loopstart 、loopend )記憶していたが、これは第1再生モードplay1においてノーマルループ再生したときにループモード処理のサブルーチンのステップF6307で値がジャンプするカウンタSCNTの値を算出することができるようにしたためで、例えばこのような必要のない、第1再生モードplay1のオルタネートループや、第2再生モードplay2だけであれば、マーク記憶部に直接ループポイント(loopsa、loopea)を記憶するようにして、このマーク記憶部からループ情報レジスタのloopsaやloopeaを設定するようにしてもよい。
【0194】
【発明の効果】
以上に説明したように、本発明によれば、波形データをその時間軸を逆方向に辿りつつ再生するも、音楽的などに意味のある音の再生を可能にして、それにより演奏の表現を一層豊かにすることができる。
【図面の簡単な説明】
【図1】本発明にかかる一実施例としての波形発生装置の全体的なブロック構成を示す図である。
【図2】実施例装置における操作子設定テーブルの構成例を示す図である。
【図3】実施例装置におけるキー情報レジスタ、ループ情報レジスタ、変調情報レジスタ、オリジナルピッチ情報レジスタの構成例を示す図である。
【図4】実施例装置における波形メモリのパラメータ記憶部のデータ構成例を示す図である。
【図5】実施例装置における波形メモリの波形データ記憶部のデータ構成例を示す図である。
【図6】実施例装置における波形メモリのマーク記憶部のデータ構成例を示す図である。
【図7】実施例装置におけるメインルーチンを示すフローチャートである。
【図8】実施例装置における録音ルーチンを示すフローチャートである。
【図9】実施例装置における編集ルーチンおよび再生ルーチンを示すフローチャートである。
【図10】実施例装置における再生処理ルーチン(1/3)の詳細を示すフローチャートである。
【図11】実施例装置における再生処理ルーチン(2/3)の詳細を示すフローチャートである。
【図12】実施例装置における再生処理ルーチン(3/3)の詳細を示すフローチャートである。
【図13】実施例装置における変調値情報の演算処理の詳細を示すフローチャートである。
【図14】実施例装置における変調値情報の演算処理で生成される各種信号波形のタイムチャートである。
【図15】実施例装置におけるDSPでのメインルーチンを示すフローチャートである。
【図16】実施例装置におけるDSPでのメインルーチン中の「ループ情報の処理」を示すフローチャートである。
【図17】実施例装置におけるDSPでのメインルーチン中の「キー情報の処理」を示すフローチャートである。
【図18】実施例装置におけるDSPでのメインルーチン中の「ボイス1の消音処理」を示すフローチャートである。
【図19】実施例装置におけるDSPでのメインルーチン中の「ボイス2の消音処理」を示すフローチャートである。
【図20】実施例装置におけるDSPでのメインルーチン中の「ボイス1の発音開始処理」を示すフローチャートである。
【図21】実施例装置におけるDSPでのメインルーチン中の「ボイス2の発音開始処理」を示すフローチャートである。
【図22】実施例装置におけるDSPでのメインルーチン中の「ボイス1からボイス1へのリンク発音処理」を示すフローチャートである。
【図23】実施例装置におけるDSPでのメインルーチン中の「ボイス1からボイス2へのリンク発音処理」を示すフローチャートである。
【図24】実施例装置におけるDSPでのメインルーチン中の「ボイス2からボイス1へのリンク発音処理」を示すフローチャートである。
【図25】「読出し処理」の動作概要(ホルマント特性変更なし、高域にピッチシフト)を説明するためのタイムチャートである。
【図26】「読出し処理」の動作概要(ホルマント特性を低域にシフト)を説明するためのタイムチャートである。
【図27】実施例装置におけるDSPでのメインルーチン中の「読出し処理」ルーチン(1/2)を示すフローチャートである。
【図28】実施例装置におけるDSPでのメインルーチン中の「読出し処理」ルーチン(2/2)を示すフローチャートである。
【図29】実施例装置におけるDSPでのメインルーチン中の「読出し処理」ルーチン中の「ループモード処理」ルーチンを示すフローチャートである。
【図30】実施例装置におけるDSPでのメインルーチン中の「読出し処理」ルーチン中の「順方向再生処理」ルーチンを示すフローチャートである。
【図31】実施例装置におけるDSPでのメインルーチン中の「読出し処理」ルーチン中の「逆方向再生処理」ルーチンを示すフローチャートである。
【図32】実施例装置におけるDSPでのメインルーチン中の「読出し処理」ルーチン中の「波形読出し処理」ルーチン(1/2)を示すフローチャートである。
【図33】実施例装置におけるDSPでのメインルーチン中の「読出し処理」ルーチン中の「波形読出し処理」ルーチン(2/2)を示すフローチャートである。
【図34】他の実施例装置におけるDSPでのメインルーチン中の「読出し処理」ルーチン(1/2)を示すフローチャートである。
【図35】他の実施例装置におけるDSPでのメインルーチン中の「読出し処理」ルーチン(2/2)を示すフローチャートである。
【図36】他の実施例装置におけるDSPでのメインルーチン中の「読出し処理」ルーチン中の「ループモード処理」ルーチンを示すフローチャートである。
【図37】他の実施例装置におけるDSPでのメインルーチン中の「読出し処理」ルーチン中の「順方向再生処理」ルーチンを示すフローチャートである。
【図38】他の実施例装置におけるDSPでのメインルーチン中の「読出し処理」ルーチン中の「逆方向再生処理」ルーチンを示すフローチャートである。
【図39】他の実施例装置におけるDSPでのメインルーチン中の「ボイス1の発音開始処理」を示すフローチャートである。
【図40】他の実施例装置におけるDSPでのメインルーチン中の「ボイス2の発音開始処理」を示すフローチャートである。
【図41】他の実施例装置におけるDSPでのメインルーチン中の「ボイス1からボイス1へのリンク発音処理」を示すフローチャートである。
【図42】他の実施例装置におけるDSPでのメインルーチン中の「ボイス2からボイス1へのリンク発音処理」を示すフローチャートである。
【図43】他の実施例装置におけるDSPでのメインルーチン中の「読出し処理」ルーチン中の「波形読出し処理」ルーチン(1/2)を示すフローチャートである。
【図44】他の実施例装置におけるDSPでのメインルーチン中の「読出し処理」ルーチン中の「波形読出し処理」ルーチン(2/2)を示すフローチャートである。
【図45】他の実施例装置における「読出し処理」の動作概要(低域にピッチシフト)を説明するためのタイムチャートである。
【図46】他の実施例装置における「読出し処理」の動作概要(高域にピッチシフト)を説明するためのタイムチャートである。
【図47】実施例装置における「波形データのピッチ変化抽出方法」を説明するたのフローチャートである。
【図48】実施例装置における「波形データのピッチ変化抽出方法」で、ピッチ検出により検出したピッチデータ列を示す図である。
【図49】実施例装置における「波形データのピッチ変化抽出方法」で、ピッチ検出により検出したピッチデータ列の具体例を示す図である。
【図50】実施例装置における「波形データのピッチ変化抽出方法」で、フィルタリング処理したピッチデータ列を示す図である。
【符号の説明】
4 A/D変換器
8 DSP(ディジタル信号プロセッサ)
12 波形メモリ
14 D/A変換器
20 操作子群
22 CPU(中央処理装置)
30 キーボード
31 RAM(ランダム・アクセス・メモリ)
32 ROM(リード・オンリー・メモリ)
33 ハードディスク装置
Claims (8)
- 複数の周期波形を含む音の波形を時間軸に沿って一連に並べた波形列を表す波形データを記憶する記憶手段と、
該波形データを再生する際の時間軸の圧縮または伸張をその大きさとともに指示する圧縮伸張情報を入力する入力手段と、
該入力手段により入力した圧縮伸張情報に基づいて、前記波形データの時間軸上を順方向または逆方向に辿りながら該波形列のうちから逐次に1以上の周期波形からなる波形区間を適宜抽出して、圧縮時には該波形区間以外の波形を適宜間引き、伸張時には該抽出した波形区間を適宜繰り返すことで波形列を再配列して再生波形データを生成する再生手段とを備えた時間軸圧縮伸張機能を有する波形再生装置であって、
前記記憶手段は、前記波形データの他に、該波形データの波形列におけるループ区間を示すループ区間情報を記憶しており、
前記再生手段が、該ループ区間情報で示されたループ区間において時間軸上を順方向に辿ってループ区間の終了点に達したら方向を反転して該ループ区間の開始点に向かって逆方向に辿り、開始点に達したら方向を反転して該ループ区間の終了点に向かって順方向に辿るというように、該ループ区間の開始点と終了点の間をその進行方向を反転させつつ辿って前記波形区間を逐次に抽出するように制御するループ手段をさらに具備した波形再生装置。 - 複数の周期波形を含む音の波形を時間軸に沿って一連に並べた波形列を表す波形データを記憶する記憶手段と、
該波形データを再生する際の時間軸の圧縮または伸張をその大きさとともに指示する圧縮伸張情報を入力する入力手段と、
該入力手段により入力した圧縮伸張情報に基づく変化量で該波形データの時間軸上を変化して該時間軸上の位置を逐次に指定する指定手段と、
該指定手段が該波形データの時間軸上を順方向または逆方向に辿りながら逐次に指定する位置に応じた波形データから1以上の周期波形からなる波形区間を逐次に抽出して再配列し、その際に該位置指定手段が指定する位置が新たな波形区間を抽出できる位置まで達していなければ既に抽出した波形区間を繰り返すようにして、再生波形データを生成する再生手段と、を備えた時間軸圧縮伸長機能を備えた波形再生装置であって、
前記記憶手段は、前記波形データの他に、該波形データの波形列におけるループ区間を示すループ区間情報を記憶しており、
前記再生手段が、該ループ区間情報で示されたループ区間において時間軸上を順方向に辿ってループ区間の終了点に達したら方向を反転して該ループ区間の開始点に向かって逆方向に辿り、開始点に達したら方向を反転して該ループ区間の終了点に向かって順方向に辿るというように、該ループ区間の開始点と終了点の間をその進行方向を反転させつつ辿って前記波形区間を逐次に抽出するように制御するループ手段をさらに具備した波形再生装置。 - 音の波形を時間軸に沿って一連に並べた波形列を表す波形データを記憶する記憶手段と、
該波形データを再生する際の時間軸の圧縮または伸張をその大きさとともに指示する圧縮伸張情報を入力する入力手段と、
該入力手段により入力した圧縮伸張情報に基づいて前記波形データの時間軸上を順方向または逆方向に辿りながら該波形列のうちから所定長の波形区間を逐次に抽出して再配列することで再生波形データを生成する再生手段とを備えた時間軸圧縮伸張機能を有する波形再生装置であって、
前記記憶手段は、前記波形データの他に、該波形データの波形列におけるループ区間を示すループ区間情報を記憶しており、
前記再生手段が、該ループ区間情報で示されたループ区間において時間軸上を順方向に辿ってループ区間の終了点に達したら方向を反転して該ループ区間の開始点に向かって逆方向に辿り、開始点に達したら方向を反転して該ループ区間の終了点に向かって順方向に辿るというように、該ループ区間の開始点と終了点の間をその進行方向を反転させつつ辿って前記波形区間を逐次に抽出するように制御するループ手段をさらに具備した波形再生装置。 - 音の波形を時間軸に沿って一連に並べた波形列を表す波形データを記憶する記憶手段と、
該波形データを再生する際の時間軸の圧縮または伸張をその大きさとともに指示する圧縮伸張情報を入力する入力手段と、
該入力手段により入力した圧縮伸張情報に基づく変化量で該波形データの時間軸上を変化して該時間軸上の位置を逐次に指定する指定手段と、
該指定手段が該波形データの時間軸上を順方向または逆方向に辿りながら逐次に指定する位置に応じた波形データから所定長の波形区間を逐次に抽出して再配列することで再生波形データを生成する再生手段とを備えた時間軸圧縮伸張機能を有する波形再生装置であって、
前記記憶手段は、前記波形データの他に、該波形データの波形列におけるループ区間を示すループ区間情報を記憶しており、
前記再生手段が、該ループ区間情報で示されたループ区間において時間軸上を順方向に辿ってループ区間の終了点に達したら方向を反転して該ループ区間の開始点に向かって逆方向に辿り、開始点に達したら方向を反転して該ループ区間の終了点に向かって順方向に辿るというように、該ループ区間の開始点と終了点の間をその進行方向を反転させつつ辿って前記波形区間を逐次に抽出するように制御するループ手段をさらに具備した波形再生装置。 - 複数の周期波形を含む音の波形を時間軸に沿って一連に並べた波形列を表す波形データと、該波形データの波形列におけるループ区間を示すループ区間情報とを記憶する記憶手段と、
前記波形データの時間軸上を順方向または逆方向に辿りながら、該波形データの波形列のうちから逐次に1以上の周期波形からなる波形区間を適宜抽出して、圧縮時には該波形区間以外の波形を適宜間引き、伸張時には該抽出した波形区間を適宜繰り返すことで波形列を再配列して再生波形データを生成する再生手段と、
該再生手段が、該ループ区間情報で示されたループ区間において時間軸上を順方向に辿ってループ区間の終了点に達したら方向を反転して該ループ区間の開始点に向かって逆方向に辿り、開始点に達したら方向を反転して該ループ区間の終了点に向かって順方向に辿るというように、該ループ区間の開始点と終了点の間をその進行方向を反転させつつ辿って該波形区間を逐次に抽出するように制御するループ手段とを備えた波形再生装置。 - 音の波形を時間軸に沿って一連に並べた波形列を表す波形データと、該波形データの波形列におけるループ区間を示すループ区間情報とを記憶する記憶手段と、
前記波形データの時間軸上を順方向または逆方向に辿りながら、該波形データの波形列のうちから逐次に所定長の波形区間を抽出して再配列することで再生波形データを生成する再生手段と該再生手段が、該ループ区間情報で示されたループ区間において時間軸上を順方向に辿ってループ区間の終了点に達したら方向を反転して該ループ区間の開始点に向かって逆方向に辿り、開始点に達したら方向を反転して該ループ区間の終了点に向かって順方向に辿るというように、該ループ区間の開始点と終了点の間をその進行方向を反転させつつ辿って該波形区間を逐次に抽出するように制御するループ手段とを備えた波形再生装置。 - 上記ループ制御手段は、上記ループ区間を少なくとも1往復以上繰り返し再生することで、波形データを再生する際の時間軸を伸張するものである請求項5または6記載の波形再生装置。
- 上記波形区間の再配列は、波形データの時間軸上で順方向に配列されたサンプル値データが同じく順方向に読みだされるように配列されるものである請求項1〜7のいずれかに記載の波形再生装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP14318598A JP4057700B2 (ja) | 1997-06-02 | 1998-05-25 | 波形再生装置 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP14393997 | 1997-06-02 | ||
JP9-143939 | 1997-06-02 | ||
JP14318598A JP4057700B2 (ja) | 1997-06-02 | 1998-05-25 | 波形再生装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH1152954A JPH1152954A (ja) | 1999-02-26 |
JP4057700B2 true JP4057700B2 (ja) | 2008-03-05 |
Family
ID=26474976
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP14318598A Expired - Fee Related JP4057700B2 (ja) | 1997-06-02 | 1998-05-25 | 波形再生装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4057700B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4294204B2 (ja) | 2000-06-29 | 2009-07-08 | ローランド株式会社 | 波形再生装置 |
JP4492680B2 (ja) * | 2007-11-12 | 2010-06-30 | カシオ計算機株式会社 | 楽音発生装置 |
-
1998
- 1998-05-25 JP JP14318598A patent/JP4057700B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH1152954A (ja) | 1999-02-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6316710B1 (en) | Musical synthesizer capable of expressive phrasing | |
JP3718919B2 (ja) | カラオケ装置 | |
JP4057700B2 (ja) | 波形再生装置 | |
JP3116937B2 (ja) | カラオケ装置 | |
JPH1152953A (ja) | 波形データのピッチ変化抽出方法および波形再生装置 | |
JP3910702B2 (ja) | 波形発生装置 | |
JP3645030B2 (ja) | 電子楽器 | |
JP4506147B2 (ja) | 演奏再生装置及び演奏再生制御プログラム | |
JP3763493B2 (ja) | 波形発生装置 | |
JP3795167B2 (ja) | 波形発生装置 | |
JP4294204B2 (ja) | 波形再生装置 | |
JP3746578B2 (ja) | 波形発生装置 | |
JP3654227B2 (ja) | 楽曲データ編集装置及びプログラム | |
JPH10198380A (ja) | 波形発生装置 | |
JP2660462B2 (ja) | 自動演奏装置 | |
JP2904045B2 (ja) | カラオケ装置 | |
JP3656726B2 (ja) | 楽音信号発生装置及び楽音信号発生方法 | |
JP4236570B2 (ja) | 波形再生装置および波形再生プログラム | |
JP4015267B2 (ja) | 波形発生装置 | |
JP4612254B2 (ja) | 波形再生装置 | |
JP3832147B2 (ja) | 曲データ加工方法 | |
JP3173310B2 (ja) | ハーモニー生成装置 | |
JP4213835B2 (ja) | 波形再生装置 | |
JP3648783B2 (ja) | 演奏データ処理装置 | |
JP4186802B2 (ja) | 自動伴奏生成装置及びプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20050427 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050524 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20070309 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070424 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070625 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070821 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20071005 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20071211 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20071214 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101221 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111221 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121221 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121221 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131221 Year of fee payment: 6 |
|
LAPS | Cancellation because of no payment of annual fees |