JP3871119B2 - 変調波形発生装置 - Google Patents
変調波形発生装置 Download PDFInfo
- Publication number
- JP3871119B2 JP3871119B2 JP2002079793A JP2002079793A JP3871119B2 JP 3871119 B2 JP3871119 B2 JP 3871119B2 JP 2002079793 A JP2002079793 A JP 2002079793A JP 2002079793 A JP2002079793 A JP 2002079793A JP 3871119 B2 JP3871119 B2 JP 3871119B2
- Authority
- JP
- Japan
- Prior art keywords
- value
- tempo
- counter
- waveform
- signal
- 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】
【従来の技術】
電子楽器の発生する楽音に対しては、振幅、周波数、パン(ステレオ音における左右の音量バランス)、あるいは音色などを変動させて特殊効果を付与することが多い。そのような特殊効果の付与を行なうため、変調波(低周波)波形発生器、いわゆるLFOが設けられる。楽音に対する特殊効果の周期は、このLFOから出力される変調波形の周期によって決定される。
【0003】
一方、近年の電子楽器は自動演奏や自動伴奏の機能を備えたものが多い。自動演奏や自動伴奏では、自動演奏・伴奏におけるテンポが指定される。例えば、MIDI(Musical Instruments Digital Interface)データで表現された自動演奏データでは、曲の先頭や途中にテンポを指定するデータをセットし、曲の先頭や途中でのテンポの設定を行なう。
【0004】
そのような自動演奏・伴奏の側でのテンポのタイミングと特殊効果のタイミングが一致しないと楽音が不自然になる。そこで、特殊効果の周期を規定するLFOと自動演奏・伴奏のテンポとを同期させるための技術が提案されている。例えば、特許第2621669号には、指示手段による楽音信号発生指示に応じて第1の楽音信号を発生し、テンポ設定手段で設定されたテンポにしたがって自動的に第2の楽音信号を発生し、さらに前記テンポ設定手段で設定されたテンポに応じた周期の変調信号を発生し、その変調信号に基づき第1の楽音信号を変調するようにした電子楽器が開示されている。これによれば、第2の楽音信号(自動伴奏)のテンポはテンポ設定手段で設定されたテンポにしたがい、さらにそのテンポに応じた周期の変調信号で第1の楽音信号を変調するので、変調信号の周期を自動伴奏のテンポに対応させることができ、第1の楽音信号の変調を自動伴奏に同期させることができる。なお、以下では、自動演奏や自動伴奏のテンポに同期した周期の変調信号を発生するLFOを「テンポ同期LFO」と呼ぶ。
【0005】
【発明が解決しようとする課題】
上記特許第2621669号に記載のものは、数値として与えられたテンポに対して同期した変調信号を発生するものであり、実際にテンポを規定するテンポクロック(例えば、MIDIデータで入力してくるテンポクロック)に対して同期した変調信号を発生するものではない。特に、自動演奏(以下、単に自動演奏というときは自動伴奏も含むものとする)のテンポを規定するテンポクロックの時間間隔が変動する場合、従来のテンポ同期LFOでは、その周期が変動するテンポクロックに対して同期することは困難である。また、従来のテンポ同期LFOでは、仮に、自動演奏手段からテンポクロックとともに数値としてのテンポ値を供給しても、テンポの変化タイミングを互いに完全一致させることはできないので、厳密な意味での同期はとれていない。
【0006】
さらに、その指定されたテンポに応じて変調波形を発生するLFO(音源内のLFO)が自動演奏手段(一般にCPU)とは独立した発振器である場合には、たとえテンポ値が固定であっても、テンポクロックと変調波形が時間とともに少しずつずれていくという問題がある。CPUにテンポ同期LFOの波形発生処理を受け持たせることも考えられるが、そうするとCPUは、各サンプリング周期ごとに発音チャンネル数分のLFO処理を行なうことになり、負担が大きい。
【0007】
この発明は、上述の従来技術における問題点に鑑み、LFOと自動演奏手段とが独立して設けられている場合でも、自動演奏のテンポに同期した変調波形を発生することができる変調波形発生装置を提供することを目的とする。
【0008】
【課題を解決するための手段】
この目的を達成するため、請求項1に係る発明は、楽音を生成する音源内で使用する変調波形を発生する変調波形発生装置において、自動演奏のテンポに応じた時間間隔で発生されるテンポ信号を受信し、前記テンポ信号が発生される周期よりも短い周期である所定周期でクロック信号を発生する。またトリガーカウンタを用意し、テンポ信号を受信するごとにトリガーカウンタアップ値だけ該トリガーカウンタの値をカウントアップするようにし、そのトリガーカウンタアップ値は、変調波形のベースとなるベース波形の1周期でトリガーカウンタの値が最大値となるように決定する。トリガーカウンタの値は、最大値に達したときに初期化する。さらに共通カウンタを用意し、前記クロック信号が発生されるごとに補間レートだけ該共通カウンタの値をカウントアップし、その補間レートは、トリガーカウンタアップ値よりも小さい値とし、自動演奏テンポに応じて決定する。共通カウンタの値は、最大値に達したときに初期化する。そして、トリガーカウンタの値がカウントアップされるごとに、新たなトリガーカウンタの値を、前記共通カウンタにおけるカウントアップの目標値として設定し、前記共通カウンタの値が前記目標値に達したときには、前記目標値が新たな値に設定されるまでの間、前記共通カウンタの値を目標値に一致させておき、前記共通カウンタの値が前記目標値に達する前に、前記目標値が新たな値に設定されたときには、その時点で、前記共通カウンタの値を、新たに設定される前の目標値の値へ変更する。前記クロック信号が発生されるごとに、前記共通カウンタの値をベース波形として出力し、そのベース波形に基づいて変調波形を発生する。
テンポとは、例えば1分間の4分音符の数で表される音楽的なテンポであり、テンポ信号は該テンポに応じて変化する時間間隔で繰り返し発生される。このテンポ信号ごとにトリガーカウンタアップ値を累算することにより、階段状に変化していく目標値を得る。一方、クロック信号はテンポ信号が発生される周期よりも短い周期で発生するものとし、そのクロック信号が発生されるごとに補間レートだけ共通カウンタの値をカウントアップする。補間レートは、トリガーカウンタアップ値よりも小さい値とし、自動演奏テンポに応じて決定する。以上のようにして、テンポ信号ごとに階段状に目標値を変化させ、テンポ信号とテンポ信号の間は、クロック信号ごとに補間レートを累算してその時点の目標値に向かって近づいていく共通カウンタの値を求め、その共通カウンタの値をベース波形とし、該ベース波形に基づいて変調波形を生成する。
要するに、ベース波形の1周期をテンポ信号で区切り、区切った各区間において目標値(トリガーカウンタの値)に近づく共通カウンタの値を求めている。1周期を区切った各区間において目標値に近づく共通カウンタの値を求めているので、途中でテンポが変化しても、そのテンポの変化に応じて補間レートが変更され、そのような補間レートを累算して共通カウンタの値を求めるので、テンポに同期したベース波形(およびそれから作られる変調波形)が得られる。
共通カウンタ制御手段は、前記共通カウンタの値が前記目標値に達したときには、前記目標値が新たな値に設定されるまでの間、前記共通カウンタの値を目標値に一致させておく。また、前記共通カウンタの値が前記目標値に達する前に、前記目標値が新たな値に設定されたときには、その時点で、前記共通カウンタの値を、新たに設定される前の目標値の値へ変更する。このようにして、テンポ信号ごとに共通カウンタの値を目標値に一致させる(いわばテンポ信号ごとに共通カウンタの値を目標値に修正する)ので、上述のベース波形の1周期を区切った各区間において目標値に近づく共通カウンタの値を求めていることと合わせることで、テンポが変化した場合でも、より正確にそのテンポに同期した変調波形が得られるものである。
なお、トリガーカウンタの値および共通カウンタの値は所定の条件下で初期化されるので、ベース波形は鋸歯状波の繰り返しとなり、そのようなベース波形に基づいて変調波形が繰り返し出力されることになる。
【0009】
請求項2に係る発明は、請求項1において、前記補間レート決定手段は、前記テンポ信号を受信するごとに、および/または、テンポの変更を指示するテンポチェンジを受信するごとに、前記補間レートを決定することを特徴とする。
【0010】
請求項3に係る発明は、請求項1または2において、前記トリガーカウンタは、ベース波形の1周期内のすべてのテンポ信号の受信タイミングで前記カウントアップを行なう代わりに、ベース波形の1周期内の任意のテンポ信号を間引き、間引いたテンポ信号以外のテンポ信号の受信タイミングで前記カウントアップを行なうものとし、そのときにカウントアップするトリガーカウンタアップ値は前記間引いたテンポ信号の受信タイミングでカウントアップすべきであった値に基づいて変更するものであることを特徴とする。
【0011】
請求項4に係る発明は、請求項1から3の何れか1つにおいて、前記クロック信号は、楽音生成処理を行なう際の基準タイミング信号であるサンプリングクロック、またはN個(Nは自然数)のサンプリングクロックごとに1回取り出したクロック信号であることを特徴とする。
請求項5に係る発明は、請求項1から4の何れか1つにおいて、前記変調波形発生手段では、生成した変調波形の平滑化を行ない、平滑化後の変調波形を発生することを特徴とする。
請求項6に係る発明は、請求項1に係る変調波形発生装置を備えた自動演奏装置である。
【0012】
【発明の実施の形態】
以下、図面を用いてこの発明の実施の形態を説明する。
【0013】
図1は、この発明の変調波形発生装置を適用した電子楽器のブロック構成を示す。この電子楽器は、中央処理装置(CPU)101、リードオンリメモリ(ROM)102、ランダムアクセスメモリ(RAM)103、タイマ104、ドライブ装置105、MIDIインターフェース107、ネットワークインターフェース108、パネルスイッチ109、パネル表示器110、音源120、波形メモリ128、ディジタルアナログ変換器(DAC)130、およびサウンドシステム131を備える。
【0014】
CPU101は、この電子楽器全体の動作を制御するための処理装置である。ROM102は、CPU101が実行するプログラムや各種の定数データなどを格納した不揮発メモリである。RAM103は、CPU101が実行するプログラムのロード領域や各種のワークメモリ領域に使用する揮発性のメモリである。タイマ104は、所定周期のクロック信号を供給するタイマである。ドライブ装置105は、外部記録媒体であるディスク106を挿入し、CPU101の指示に応じて各種のデータを読み書きする装置である。MIDIインターフェース107は、外部のMIDI機器と接続しMIDI規格にしたがって信号のやり取りを行なうインターフェースである。ネットワークインターフェース108は、外部のネットワークに接続するためのインターフェースである。パネルスイッチ109は、この電子楽器の外部パネル上に設けられている各種のスイッチなどの操作子を示す。パネル表示器110は、この電子楽器のパネル上に設けられている表示器である。
【0015】
音源120は、音源制御レジスタ121、LFO(変調波形発生部)122、アドレス発生部123、補間部124、DCF(周波数特性制御部)125、EG(エンベロープジェネレータ)126、およびミキサ&DSP127を備える。音源120は、複数チャンネルについて時分割で動作する。すなわち、いわゆる1DAC周期(1サンプリング周期)をチャンネルの数で分割し、分割した各時間区間で各チャンネルの楽音生成処理を行なうものである。
【0016】
音源制御レジスタ121は、CPU101と音源120との間のインターフェースの役割を果たす。CPU101は、音源制御レジスタ121の中の所定のレジスタに所定の値を書き込むことにより、音源120に各種の指示命令を出す。音源制御レジスタ121については、後に詳しく説明する。アドレス発生部123は、CPU101の指示に応じて波形メモリ128中の所定の波形データを読み出すアドレスを発生する。読み出された波形データは補間部124で補間処理され、DCF125に入力する。DCF125は、入力信号に対し音色変化を与える。EG付与部126は、入力信号に対してエンベロープを付与する。ミキサ&DSP127は、入力信号をミキシングし各種の効果付与などを行なった後、最終的な音源出力として楽音信号をDAC130に出力する。DAC130は、入力したディジタル楽音信号をアナログ楽音信号に変換する。変換されたアナログ楽音信号はサウンドシステム131により放音される。
【0017】
LFO122で発生したLFO波形は、アドレス発生部123、DCF125、EG付与部126、およびミキサ&DSP127に入力する。アドレス発生部123に入力するLFO波形は、アドレスを周波数変調するピッチ変調波形の役割を果たす。DCF125に入力するLFO波形は、音色を変化させる音色変調波形の役割を果たす。EG付与部126に入力するLFO波形は、エンベロープを付与する際の振幅変調波形の役割を果たす。ミキサ&DSP127に入力するLFO波形は、パンの変化に利用したり、リバーブやコーラスなどの各種のエフェクト処理に利用する。
【0018】
図2は、LFO122で発生するLFO波形の例を示す。5線譜と音符は自動演奏の楽音を示す。その下の波形201は、この自動演奏のテンポに同期して発生されるLFO波形の例である。例えば、1小節の開始位置でパンポット(音像の位置)を左側に定位(ステレオのL側の音量レベルが最大でR側の音量レベルが0の状態)させ、小節内では徐々にパンポットを左側から右側に移動させ、小節終了位置ではパンポットを右側に定位させるようなパンニングを行ないたいときには、このLFO波形201をミキサ&DSP127のパンニング回路に供給する。LFO波形201はパンポットの定位する位置を規定する波形の役割を果たし、LFO波形20の最下位レベルで一番左、最上位レベルで一番右に定位するものとする。このようなパンニングを行なう場合、自動演奏のテンポとLFO波形が同期していないと、各小節で所望のパンニングを行なうことができない。本実施形態では、自動演奏のテンポに同期したLFO波形を発生するので、各小節で自動演奏のテンポに同期したパンニングを行なうことができる。
【0019】
自動演奏のテンポに同期したLFO波形201を発生するため、CPU101側からLFO122にテンポクロックであるF8信号に基づくテンポ同期トリガーを供給する。すなわち、CPU101は、後述するようにF8信号のタイミングでテンポ同期トリガーを音源120に供給する。LFO122は、F8信号に基づくテンポ同期トリガーを受けたとき、カウンタの次の目標値に変えるなどのテンポに対する同期ずれを補正する処理を行ない、これによりできる限りF8信号のテンポに同期したLFO波形を出力するように処理する。この処理については、後述する。
【0020】
図3は、図1のLFO122の詳細な構成を示す。LFO122は、トリガーカウンタ301、共通カウンタ302、各チャンネル用低周波発振部303、およびDSP用各低周波発振部305を備える。トリガーカウンタ301と共通カウンタ302は、LFO122内に1つずつ設けられている。各チャンネル用低周波発振部303は、各発音チャンネルごとに設けられている。ここでは128チャンネル分のチャンネル用低周波発振部303が設けられている。DSP用各低周波発振部305は、ミキサ&DSP127で使用する複数の変調波形を生成するため複数設けられている。ここでは64チャンネル分のDSP用各低周波発振部305が設けられている。
【0021】
各発音チャンネル用低周波発振部303は、N倍処理部331、リセット制御部332、オフセット付加部333、形状変形部334、直線補間部335、位相反転部336,338,340、デプス制御部337,339,341、および非同期カウンタ342を備える。各DSP用各低周波発振部305は、N倍処理部351、リセット制御部352、オフセット付加部353、形状変形部354、1次LPF355、および非同期カウンタ356を備える。
【0022】
トリガーカウンタ301と共通カウンタ302は、出力するLFO波形の元になる基本的な鋸歯状波(ベース波形と呼ぶ)を生成するためのそれぞれ整数部17ビットと小数部10ビットで構成されるカウンタである。これらにより生成したベース波形を、各チャンネル用低周波発振部303やDSP用各低周波発振部305で加工することにより、所望のLFO波形を得る。
【0023】
トリガーカウンタ301は、CPU101からテンポ同期トリガーが供給されるごとに、トリガーカウンタアップ値を現在値に加算し、加算後の値を新たな現在値として出力するカウンタである。トリガーカウンタ301の現在値は、共通カウンタ302の目標値となる。テンポ同期トリガーとは、F8信号のタイミングでCPU101から音源120に供給されるトリガーであり、後述するトリガーアクションのことである。トリガーカウンタアップ値は、CPU101が算出して設定する。
【0024】
共通カウンタ302は、各サンプリング周期ごとに共通カウンタ補間レートを累算するカウンタである。共通カウンタ補間レートは、CPU101が算出して設定する。次のテンポ同期トリガーが来る前に、共通カウンタ302の累算値がトリガーカウンタ301の値に到達したら、そこで共通カウンタ302のサンプリング周期ごとの累算を停止する。次のテンポ同期トリガーが来たときに、共通カウンタ302の累算値が未だトリガーカウンタ301の値に到達していなかったら、共通カウンタ302の累算値を、それまで目標値としていたトリガーカウンタ301の値に強制的に設定する。共通カウンタ302の出力は、図2に示したようなベース波形(鋸歯状波)201になる。
【0025】
共通カウンタ302からのベース波形(整数部17ビット+小数部10ビット)は、各チャンネルの低周波発振部303のN倍処理部331に入力する。N倍処理部331は、共通カウンタ302の出力波形をN倍(但し、整数部のビット数は増やさない)する。乗算結果のうちの小数部は切り捨てられ、整数部17ビットのみからなる、ベース波形の周期の1/Nの周期の鋸歯状波を生成する。乗数Nは、各発音チャンネルごとに独立にCPU101が設定する。
【0026】
N倍処理部331の出力は、リセット制御部332に入力する。なお、リセット制御部332以降における各ブロックの波形データは全て整数部17ビットのみから構成される。リセット制御部332は、キーオンと同時にLFO波形を初期位相に設定することを指示するキーオンリセットフラグが「有効」に設定されている場合、各発音チャンネルがノートオンされたときその時点のN倍出力が「0」となるように制御する。具体的には、各発音チャンネルがノートオンされたときのN倍出力値をレジスタに取り込み、それ以降のN倍出力値からそのレジスタの値を整数部の減算(但し、整数部のビット数は増やさない)するような動作を行なう。これにより、リセット制御部332の出力は、強制的に0から開始される波形となる。なお、上記キーオンリセットフラグが「無効」と設定されている場合は、上記「N倍出力値のレジスタへの取り込み」を行なわない。すなわち、ノートオン時に過去にレジスタに取り込まれている値は変更せず、そのレジスタの値をN倍出力値から減算して出力する処理を継続する。
【0027】
リセット制御部332の出力は、オフセット付加部333に入力する。オフセット付加部333は、入力する波形に、各発音チャンネルごとに設定されたオフセット値を加算(但し、整数部のビット数は増やさない)する。このオフセット値は、上記キーオンリセットフラグが「有効」でリセットされた場合の初期位相になる。このオフセット値は、CPU101が設定する。リセット制御部332とオフセット付加部333により、任意の初期位相から開始するLFO波形を生成できる。
【0028】
オフセット付加部333の出力は、形状変形部334に入力する。形状変形部334は、形状選択情報に応じて、入力した鋸歯状波を、三角波、矩形波、およびサイン波などの各種の形状の波形に変換して出力する。ここで、鋸歯状波は各種の形状の波形を生成するための位相データとして働く。従って、この変換では、周期は同じままで形状のみが変換され、あるいは、鋸歯状波をそのまま出力することもできる。形状選択情報は、発音チャンネルごとにCPU101が設定する。
【0029】
形状変形部334の出力は、直線補間部335に入力する。直線補間部335は、入力波形の傾き(変化)が、設定された波形補間レート以下になるように制御する。波形補間レートは、発音チャンネルごとにCPU101が設定する。直線補間部335による補間は、ノイズ除去を目的とする波形の平滑化のためである。
【0030】
直線補間部335の出力は、位相反転部336,338,340にそれぞれ入力する。位相反転部336,338,340では、各発音チャンネルの出力先(アドレス発生部123、DCF125、EG付与部126)ごとに、位相の反転(正相/逆相)を選択可能である。例えば、ピッチと振幅の変調を同位相の変調にしたり、逆位相にしたりできる。また、複数の発音チャンネルで生成する音の振幅変調を互いに同位相(スルー)にしたり逆位相(全ビット反転)にしたりできる。位相の反転を行なうか否かは、CPU101が設定する。
【0031】
位相反転部336,338,340の出力は、それぞれデプス制御部337,339,341に入力する。デプス制御部337,339,341では、各発音チャンネルの出力先(アドレス発生部123、DCF125、EG付与部126)ごとに変調の深さを設定することができる。変調の深さの設定は、CPU101が行なう。デプス制御部337,339,341の出力は、それぞれ、ピッチ変調波形としてアドレス発生部123に、音色変調波形としてDCF125に、振幅変調波形としてEG付与部126に、それぞれ入力する。
【0032】
各発音チャンネルの低周波発振部303は、発音チャンネルごとの設定に応じて、テンポ同期LFOとして動作させることもできるし、テンポ非同期LFOとして動作させることもできる。その指定は、CPU101により行なう。非同期カウンタ342は、テンポ非同期LFOとして動作するとき、設定された周波数データに対応した周波数の変調波形を発生するために使用するカウンタである。テンポ非同期LFOとして動作するよう設定されたLFO303では、発生するLFO波形の周期の単位は周期時間または周波数で指定する。この周期時間または周波数は、CPU101が指定する。非同期カウンタ342は、指定された周期時間または周波数に対応した周波数の変調波形を発生する。
【0033】
なお、ある発音チャンネルの低周波発振部303をテンポ非同期LFOとして動作させるときには、そのチャンネルのN倍処理部331やリセット制御部332は不要である。そこで、リセット制御部332のレジスタを、非同期カウンタ342の現在値を保持するレジスタとして兼用している。また、N倍処理部331の乗数Nを保持するレジスタを、CPU101が指定した「周期時間または周波数」を保持するレジスタとして兼用している。
【0034】
DSP用各低周波発振部305の内部構成は、上述の各発音チャンネルの低周波発振部303と同様である。N倍処理部351はN倍処理部331に、リセット制御部352はリセット制御部332に、オフセット付加部353はオフセット付加部333に、形状変形部354は形状変形部334に、非同期カウンタ356は非同期カウンタ342に、それぞれ相当する。ただし、直線補間部335以降の部分の代わりに、平滑化のための1次LPF355を備えている。低周波発振部305で発生するLFO波形の振幅レベルは、DSPでマイクロプログラムにより実現されるアルゴリズムの中の乗算器で制御される。この構成により、ミキサ&DSP127における各エフェクト処理に割り当てて使用する複数LFO波形を発生する。
【0035】
なお、上述したように各エフェクトに割り当てて使用する複数LFOとともに、DSPには複数EGが備えられている。該複数LFOと該複数EGは、DSPで実行される個々のエフェクトで必要とされる数ずつ各エフェクトに割り当てて使用され、そのため、それぞれ1つずつ個別にトリガーをかけることができるようになっている。例えば、3つのLFOを使用するコーラス効果の場合、その3つのLFOは、相互に位相を120度ずつずらせて動作させる必要がある。これは、3LFOチャンネル分のLFOについて、オフセット付加部353で120度ずつ異なる初期位相を設定し、同時にリセットをかけることにより実現できる。トリガーを使えば、DSPでエフェクトの代りに(波形発生部と同じような)波形発生処理を実行させることも可能である。
【0036】
次に、テンポ同期LFOに関係するレジスタやフラグについて説明する。トリガーカウンタ301と共通カウンタ302については図3で説明したので、それ以外のレジスタやフラグ(音源制御レジスタ121)について次の(1)〜(14)で説明する。
【0037】
(1)トリガーカウンタアップ値レジスタ:トリガーカウンタ301にF8信号(テンポ同期トリガー)ごとに加算する値を保持するレジスタである。ここに書き込んだ値により何回のトリガーで一周期まわるかが決まる。ここでは、トリガーカウンタ301は、その整数部17ビットで2の17乗−1=131071まで、小数部込みで約2の17乗=約131072までカウントアップできるレジスタであるので、この最大値をベース波形の1周期内のF8信号の数で割ることにより、トリガーカウンタアップ値が求められる。CPU101は、そのように算出した値を音源120に送って、トリガーカウンタアップ値レジスタに保持させる。なお、トリガーカウンタアップ値の算出で割り切れない場合は、その商を切り上げるものとする。切り上げることにより、ベース波形の1周期内の最後のF8信号ではトリガーカウンタ301が必ずオーバフローするようになり、この時点でオーバーフローしたあふれ分は切り捨てられ、トリガーカウンタ301は0に初期化される。したがって、割り切れない場合の誤差が蓄積されることはない。
【0038】
CPU101によるトリガーカウンタアップ値の算出例を説明する。CPU101は、出力させたいLFO波形に応じてベース波形の周期を決める。例えば、テンポを1分間に4分音符120個のテンポとし、F8信号を1小節で96個発生させるものとし、ベース波形の周期を1小節(4部音符が4つ分とする)単位とする場合を考える。この場合、1小節内のF8信号の個数は96個であるから、ここからF8信号ごとにトリガーカウンタ301に加算されるトリガーカウンタアップ値が算出できる。すなわち、トリガーカウンタ301の最大値が2の17乗=131072であるから、131072/96≒1365.3333とし、この値を切り上げて、トリガーカウンタアップ値とする。例えば、トリガーカウンタアップ値が指数部4ビットと仮数部12ビットであれば、切り上げた値は1365.5となる。なお、実際には、トリガーカウンタ301やトリガーカウンタアップ値レジスタは浮動小数点の2進数で値を格納するので、切り上げも2進数での切り上げである。このように、トリガーカウンタアップ値は、ベース波形の1周期におけるF8信号の数に基づいて、RU(最大値/F8信号の回数)の式で算出される。ここで、RU()は切り上げを示す。
【0039】
(2)共通カウンタ補間レートレジスタ:共通カウンタ302は、1DACサイクルごとに、トリガーカウンタ301の値を目標値として直線的に補間する補間器である。この補間器に対して補間速度を指定するのが、共通カウンタ補間レートである。共通カウンタ補間レートレジスタは、この共通カウンタ補間レートを保持するレジスタである。共通カウンタ補間レートは、上記トリガーカウンタアップ値によって決定したステップ幅(分割数)と、そのステップ幅をどれだけの時間、つまりどれだけのテンポに合わせて補間するかを考慮して指定する必要がある。
【0040】
上記(1)のトリガーカウンタアップ値の算出例のケースで、CPU101が共通カウンタ補間レートを算出する例を説明する。まず、上記のケースでは、4分音符1つ分は、60sec/120≒0.5secの時間長さになる。4分音符1つはF8信号24個分の時間間隔であるから、F8信号1つ分の時間間隔(F8信号から次のF8信号までの時間間隔)は、0.5sec/24≒0.0208secである。ベース波形の周期を1小節(F8信号で96個分の時間間隔)としたいのであるから、0.0208sec×96≒2secがベース波形の周期である。音源内のサンプリング周波数を44100Hzとすると、その周期は22μsecであるから、上記ベース波形の1周期の時間内では、2sec/22μsec≒88200回だけ共通カウンタ302への累算が行なわれることになる。共通カウンタ302の最大値は2の17乗=131072であるから、131072/88200≒1.4861であり、共通カウンタ補間レートが指数部4ビットと仮数部12ビットで構成されるとすると、2進で切り上げた約1.4863がその値となる。このように、共通カウンタレートは、ベース波形の1周期のサンプル回数に基づいて、RU(最大値/サンプル回数)の式で算出される。
【0041】
(3)トリガーアクションフラグ:トリガーアクションは、CPU101からのテンポ同期のためのイベントを与えるトリガー(テンポ同期トリガー)である。CPU101からこのトリガーアクションフラグに1を書き込むと、テンポ同期トリガーがLFO122に供給されたことになる。このトリガーにより、上記トリガーカウンタ301にトリガーカウンタアップ値が加算され、その値が新たな目標値となって、該目標値に向かって共通カウンタ302による補間が始まる。
【0042】
(4)トリガーカウンタリセットフラグ:テンポ同期トリガーにより加算されるトリガーカウンタ301をリセットするフラグである。テンポ同期などの初期化時に使用する。1を書き込むとそのタイミングでリセット状態となり、0を書きこむ必要はない。
【0043】
(5)共通カウンタリセットフラグ:直線補間器である共通カウンタ302をリセットするフラグである。テンポ同期などの初期化時に使用する。1を書き込むとそのタイミングでリセット状態となり、その後すぐに、設定されている共通カウンタ補間レートで共通カウンタ302のカウントアップが開始する。0を書きこむ必要はない。
【0044】
(6)フリーランモードフラグ:通常、共通カウンタ302は、トリガーカウンタ301の値を目標値として動作するが、このフリーランモードフラグを1に設定すると、共通カウンタ302は、目標値を無視して常に与えられたレートで補間し続ける。これにより、テンポ同期のイベントがなくなっても、テンポ同期のときとほぼ同じ速度で共通カウンタ302が動作する。一方、共通カウンタ302が通常のテンポ同期動作を行なうときは、フリーランモードフラグが0に設定される。フリーランモードフラグを0にすると、共通カウンタ302による補間処理は停止し、停止した時点の値を出力し続ける。
【0045】
(7)チャンネル別テンポ同期フラグ:各チャンネル別の低周波発振部303に対して、チャンネル独立の周波数設定で動作するか(従来形)、テンポ同期の共通カウンタ302に同期して動作するかを切替えるフラグである。このフラグを1に設定すると共通カウンタ302に同期し(すなわち図3で、N倍処理部331→リセット制御部332→オフセット付加部333の流れで生成される波形を使う)、0に設定するとチャンネル独立の周波数設定のLFO(すなわち図3で、非同期カウンタ342→オフセット付加部333の流れで生成される波形を使う)になる。
【0046】
(8)チャンネル別N倍設定レジスタ:テンポ同期LFOとして使用するとき、各チャンネル別にN倍処理部331の乗数Nの値を設定するレジスタである。このレジスタは、テンポ非同期LFOとして使用するときのチャンネル別の周波数レジスタと共用している。
【0047】
(9)キーオンリセットフラグ:キーオン(ノートオンと同義)と同時にLFO波形を初期位相に設定するかどうかを決めるフラグである。0のときは「無効」、すなわちキーオンでリセットしない。1のときは「有効」、すなわちキーオンでリセットする。
【0048】
(10)オフセット値レジスタ:オフセット付加部353でLFO波形に加算するオフセット値を保持するレジスタである。
【0049】
(11)波形選択レジスタ:形状変形部334で変換出力する波形形状の形状選択情報を保持するレジスタである。選択できる波形については、後に詳しく説明する。
【0050】
(12)波形補間レートレジスタ:直線補間部335において補間を行なうときの補間レートを保持するレジスタである。
【0051】
(13)位相反転指定レジスタ:位相反転部336,338,340において、位相の反転(正相/逆相)を選択するための選択情報を保持するレジスタである。
【0052】
(14)デプス指定レジスタ:デプス制御部337,339,341における変調の深さを設定するレジスタである。
【0053】
なお、上記のレジスタやフラグのうち、(1)〜(6)はシステム内でそれぞれ1つずつ設けられているものである。(7)〜(14)はチャンネルごとに(チャンネルとは、各発音チャンネルの低周波発振部303では発音チャンネル、DSP用各低周波発振部305では各LFOチャンネルである)設けられているものである。ただし、DSP用各低周波発振部305は、(12)〜(14)のレジスタは持っていない。
【0054】
図4は、トリガーカウンタ301と共通カウンタ302によるカウントアップの様子を示す。図4(a)は、F8信号(テンポ同期トリガー)が等間隔で供給される場合を示す。ここで、CPU101は、F8信号の発生に応じて音源120のLFO122に対してトリガーアクションを与えるので、F8信号の発生するタイミングはトリガーアクションのタイミングと等価である。音源120内ではトリガーアクションのタイミングとして認識しているが、図4では説明の簡単化のためF8信号でそのタイミングを示すものとする。ここでは、説明の簡単化のため、ベース波形の1周期あたりのF8信号の発生回数を4回としているが、通常のF8信号の発生回数はこれよりかなり多い。
【0055】
F8信号が供給されるタイミングで階段状に変化しているグラフ401は、トリガーカウンタ301の値を示す。トリガーカウンタ301の値は、ベース波形の1周期における最初のF8信号のタイミングでトリガーカウンタアップ値となり、その後、F8信号が来るごとにその値に対してトリガーカウントアップ値が加算される。共通カウンタ302は、トリガーカウンタ301の値を目標値として細かく補間されてカウントアップされる。402は、目標値に向かって理想的にカウントアップされていく共通カウンタ302の値を示す。403は、次のF8信号のタイミングで共通カウンタ302の累算値が未だトリガーカウンタ301の目標値に到達していない場合、共通カウンタ302の累算値を、目標値であるトリガーカウンタ301の値に強制的に設定しているグラフを示す。404は、次のF8信号のタイミングに至る前に共通カウンタ302の累算値がトリガーカウンタ301の目標値に到達し、そこからは共通カウンタ302の累算を停止して、その目標値を出力し続けているグラフを示す。
【0056】
410はカウンタの最大値である2の17乗=131072のレベルを示す。ベース波形の1周期における最後のF8信号(この図では4回目)のタイミングにおいてトリガーカウンタ301はオーバーフローし、該オーバーフローに応じて、トリガーカウンタ301の内部値は0にリセットされる一方、共通カウンタに対して最大値(約131072)を出力する。なお、この図の例でトリガーカウンタアップ値の計算は割り切れている(131072/4=32768)が、その場合であっても、最後のF8信号に応じた加算によりその加算結果は整数部の17ビットを超えてオーバーフローが発生する。共通カウンタ302の値は、最大値131072に至った後は、その最大値を続けて出力する。
【0057】
図4(b)は、F8信号が不規則な場合を示す。自動演奏のテンポは任意に変動できるものであるので、F8信号も不規則に発生される場合がある。F8信号が不規則な場合でもカウントアップの動作は同様であるので、図4(a)と同じ番号を付した。図4(b)では、F8信号411のタイミングでトリガーカウンタ301が0にリセットされ、そこから共通カウンタ302は共通カウンタ補間レートの累算を継続しているが、共通カウンタ302の値が最大値に至る前に次のF8信号412が来ており、ここで共通カウンタ302は0にリセットされている。
【0058】
図5は、トリガーカウンタ301と共通カウンタ302を用いたカウントアップの各種の例を示す。上述したように、CPU101は、ベース波形の周期を決め、その周期内のF8信号の数を求め、F8信号ごとのトリガーカウンタ301への加算量を算出し、共通カウンタ補間レートを算出する。この場合、CPU101側からLFO122に対して等間隔でF8信号を送る必要がある。図5(a)は、ベース波形の1周期を細かく等分したタイミングでF8信号を送っている例である。複数の横線501は、トリガーカウンタ301が階段状にカウントアップされる各レベルを示す。F8信号は502に示すように等間隔でLFO122に供給され、各F8信号のタイミングで、カウンタ301が階段状にカウントアップされている。503は共通カウンタ302のグラフである。このように、細かい周期でF8信号を送っている場合には、ベース波形の1周期の途中に起こる様々なテンポの変動に対して精密に追従していくことができる。
【0059】
図5(b)は、F8信号を間引く例を示す。ベース波形の各周期の途中であまりテンポが変動しないことが判っている場合には、このように途中のF8信号を間引くことができる。CPU101は、ベース波形の周期を決め、その周期内でF8信号を何個にするかを決定する。この際、本来のF8信号の数から幾つかのF8信号を間引く。間引いたあとに残ったF8信号に基づいて、F8信号ごとの加算量であるトリガーカウンタアップ値を算出する。この場合、ベース波形の1周期ごとにF8信号は1回しか発生しないので、トリガーカウンタアップ値は最初の加算でオーバーフローを発生するような特殊な最大値にする。また、図5(a)の例からF8信号を間引いただけであり、ベース波形の傾きは同じなので共通カウンタ補間レートも図5(a)の場合と同じ値でよい。この例では、CPU101は、ベース波形の1周期ごとに1回だけLFO122にトリガーアクションを与えればよく、CPU101にかかる負担が少ない。
【0060】
図5(c)は、ベース波形の1周期の途中で共通カウンタ補間レートを変更する例を示す。CPU101は、ベース波形の周期を決め、その周期内でF8信号を何個にするかを決定する。そして、F8信号ごとの加算量であるトリガーカウンタアップ値を算出する。この図の例では、3等分して加算量を求めている。一方、共通カウンタ補間レートは、ベース波形の1周期の前半ではトリガーカウンタアップ値の2倍をタイミング521〜522までのサンプル回数で割った商として、後半ではトリガーカウンタアップ値をタイミング522〜523までのサンプル回数で割った商として算出する。図のように、CPU101は、ベース波形の各周期において不等間隔でトリガーアクションを与える。また、CPU101は、ベース波形の1周期の先頭の521、523のタイミングでは前記前半の共通カウンタ補間レートを与え、真中の522のタイミングでは前記後半の共通カウンタ補間レートを与える。
【0061】
図5(d)は、図5(c)において、さらにベース波形の1周期の途中でトリガーカウンタアップ値を変更する代わりに、F8信号を間引けるようにした例である。この場合も、ベース波形の傾きは図5(c)と同じなので、共通カウンタ補間レートは図5(c)の場合と同じでよい。一方、トリガーカウンタアップ値は、ベース波形の1周期の前半が最大値の3分の2、後半が3分の1として算出される。CPU101は、ベース波形の1周期の先頭の531、533のタイミングでは前記前半のベースカウンタアップ値を与え、真中の522のタイミングでは前記後半のベースカウンタアップ値を与える。また、ベース波形の1周期の先頭の534、536のタイミングでは前記前半の共通カウンタ補間レートを与え、真中の535のタイミングでは前記後半の共通カウンタ補間レートを与える。このように、1周期の途中で共通カウンタ補間レートを変更するベース波形を生成する場合、CPU101は、その変更するタイミングについて、トリガーアクション、ベースカウンタアップ値、共通カウンタ補間レートの制御を行なうだけでよい。
【0062】
図6は、F8信号が途絶えた場合の処理方法を示す。曲の終わりなどではテンポカウンタであるF8信号が途絶える場合がある。この場合、上述のフリーランモードフラグにより、図6(a)か図6(b)の何れかの処理方法を採ることができる。図6(a)は、F8信号が途絶えた後もフリーランモードフラグを0のまま放置した場合である。この場合、F8信号が途絶えたタイミングでトリガーカウンタ301の値が増加しなくなるのに応じ、共通カウンタの値もそれと同じ値から変化しなくなる。図6(b)は、CPU101がF8が途絶えたことを検出した時点でフリーランモードフラグに1を設定した場合である。この場合、共通カウンタ302は、目標値を無視して常に与えられた共通カウンタ補間レートで補間し続ける。これにより、曲が終わった後に出力されているような楽音に対しても、引き続きLFO波形を適用できる。
【0063】
図7は、上述のN倍処理部331,351による処理例を示す。701は、共通カウンタ302からN倍処理部331,351に入力するベース波形を示す。N倍処理部331,351での乗数Nが9であったとすると、N倍処理部331,351の出力は波形702のようになる。この波形703の周波数は、ベース波形701の周波数の9倍になっている。
【0064】
図8は、上述のN倍処理部331,351の乗数Nの一覧を示す。表の最上位行の「4分音符基準個数」は、ベース波形の1周期が4分音符の何個分になるかの場合分けを示す。4分音符4個で1小節とするので、その下の行の「小節」に示すように、小節数でベース波形の1周期の長さを表せる。4分音符1個でF8信号が24個分であるから、それぞれの場合のベース波形の1周期内のF8信号数が求められる。「F8信号数」の行は、その値を示す。
【0065】
左側の「4分×32(8小節)」や「4分×16(4小節)」などの記載は、各発音チャンネルないし各LFOチャンネルにおいて発生させたいLFO波形の周期を示す。例えば、「4分音符基準個数」が3個の場合、ベース波形の1周期が4分音符3個分になり、このベース波形に対し「全音符3連」の周期の波形を発生させたい場合は、N=1.125と設定すればよいことが分かる。同様に、この一覧表に基づいて、ベース波形の周期と発生させたい波形の周期から乗数Nを求めることができる。なお、図8に記載した以外であっても、任意の長さのベース波形の周期と任意の長さの発生させたい波形の周期から乗数Nを求めることができる。
【0066】
図9は、形状変形部334,354で各チャンネル毎に選択可能な波形形状の例を示す。形状変形部334,354は、入力したベース波形に基づいて、三角波901、矩形波902、鋸歯状波903、サイン波904、およびランダム波905などを生成出力することができる。ここに挙げた波形は一例であり、他の任意の波形を選択できるようにしてもよい。
【0067】
図10は、直線補間部335による直線補間の例を示す。直線補間部335は、入力した波形の傾きが設定された補間レート以下になるよう制限する補間を行なう。CPU101は、この補間レートを、LFO122の当該発音チャンネルないしLFOチャンネルにおいて選択された波形形状や設定されたN倍の値に応じて決定し、直線補間部335に与える。例えば、入力波形が1001に示すような鋸歯状波の場合、補間レートの値を小さくすると波形1002のような波形が出力される。この補間により、LFO波形の急激に変化する部分でノイズが発生するのを防止できる。
【0068】
次に、フローチャートを参照してCPU101が実行する処理手順を説明する。
【0069】
図11は、CPU101が実行するメイン処理の流れを示す。ステップ1101で初期設定を行ない、ステップ1102で起動要因(イベント)の発生をチェックする。ステップ1103で何らかの起動要因があれば、ステップ1104に進む。起動要因がなければ、ステップ1102に戻り、起動要因チェックを継続する。ステップ1104では、何の要因かを判別し、その要因別にステップ1105〜1109の何れかに分岐する。パネル操作イベントがあったときは、ステップ1105に進み、パネル処理を行なった後、ステップ1102に戻る。MIDIイベントがあったときは、ステップ1106に進み、MIDIイベント処理を行なった後、ステップ1102に戻る。テンポ割込イベントがあったときは、ステップ1107に進み、自動演奏のテンポ割込処理を行なった後、ステップ1102に戻る。その他のイベントのときは、ステップ1108に進み、そのイベントに応じた処理を行なった後、ステップ1102に戻る。電源スイッチのオフイベントであったときは、ステップ1109で終了処理を行なった後、本処理を終了する。
【0070】
図12は、ステップ1106のMIDIイベント処理のうち、MIDIインターフェース107を介して他のMIDI機器からのF8信号を受信したときの動作を示す。これは、この電子楽器がスレーブ動作する場合である。すなわち、他のMIDI機器が出力する自動演奏データに基づいて、この電子楽器で自動演奏を行なう場合であり、テンポクロックであるF8信号は、他のMIDI機器からこの電子楽器に供給される。
【0071】
ステップ1201では、過去のF8信号の時間間隔に基づき現在のテンポ値を推定し変数GTに格納する。ステップ1202では、現在のテンポ値GTに基づき、共通カウンタ補間レートを算出して音源120のLFO122に供給する。共通カウンタ補間レートの算出方法についてはすでに説明した。次に、ステップ1203で、音源120のLFO122にテンポ同期トリガーを供給する。これは、トリガーアクションフラグに1を書き込むことで行なう。
【0072】
図13は、ステップ1106のMIDIイベント処理のうち、MIDIインターフェース107から自動演奏のノートオンを受信したときの動作を示す。ステップ1301で、受信したノートオンのパート番号を変数PTに、ノート番号を変数NNに、ベロシティを変数VELに、それぞれ格納する。ステップ1302では、発音チャンネルの割り当て処理を行なう。ステップ1303では、パートPTで選択されている現在の音色とノートオンのノート番号およびベロシティに従い、音源レジスタ121の割り当てたチャンネルに各種パラメータを設定する。すなわち、波形選択情報、Fナンバ、各種EGパラメータ、LFOパラメータ、各種センドレベル等が設定される。ここで、該LFOパラメータには、テンポ同期フラグ、倍数Nないし周波数、補間レート、ピッチ変調度PMD、音色変調度CMD、振幅変調度AMD等が含まれる。パートPTにおいてLFO波形をテンポ同期させるよう設定された音色が選択されている場合には、テンポ同期フラグが立てられる。ステップ1304で、当該チャンネルにノートオン信号(発音開始トリガー)を供給する。ノートオン信号が供給された発音チャンネルでは、設定されたパラメータに応じた楽音信号の形成処理を開始される。すなわち、アドレス発生部123と補間部124による波形メモリからの波形データの読み出しが開始され、DCF125では読み出された波形データに対して音色変化が与えられ、更に、EG付与部126では立ち上がりから立ち下がりまでの音量変化が付与される。LFO122の発生するLFO波形は、アドレス発生部123、DCF125、EG付与部126に供給されており、当該チャンネルで発生する楽音波形の各種特性を制御する。
【0073】
図14は、ステップ1106のMIDIイベント処理のうち、MIDIインターフェース107からバリエーションタイプを受信したときの動作を示す。バリエーションタイプとは、楽音に付与するエフェクトの種類を指定する情報である。ステップ1401で、受信したバリエーションタイプを変数VTに格納する。ステップ1402では、MP(マイクロプログラム)番号、MP記憶領域、LFO、およびEGなどを割り当てる。DSP127は、複数のマイクロプログラム記憶領域を備えており、それらの領域にMP番号を割り当ててマイクロプログラムを設定し、実行させることにより、任意のエフェクト処理を組み合わせて実行できる。ステップ1402のMP番号とMP記憶領域の割り当ては、バリエーションタイプで指定されたエフェクトのマイクロプログラムをロードする領域を番号を割り当てるものである。LFOの割り当ては、指定されたエフェクトに必要な数のLFOを、図3の305に示した複数のLFOチャンネルに相当する低周波発振部の中から割り当てるものである。また、EG(エンベロープジェネレータ)の割り当ては、指定されたエフェクトに必要な数のEGを、DSP127が備えている複数のEGの中から割り当てるものである。
【0074】
次に、ステップ1403で、割り当てたMP番号のエフェクトをミュートする。これは、そのMP番号のエフェクト処理が実行中であった場合に、マイクロプログラムの入れ替えでノイズが発生しないようにミュートするものである。ステップ1404では、指定されたバリエーションタイプのエフェクトを付与する処理を行なうマイクロプログラムをDSP127に設定する。ステップ1405では、割り当てたLFOチャンネルに対し、テンポ同期フラグ、倍数N(テンポ非同期で用いる場合は周波数)、LPF係数、キーオンリセットフラグなどを設定する。ステップ1406でEGの設定を行ない、ステップ1407で各種の係数を設定する。ステップ1408では、その他の必要な処理(遅延メモリの処理など)を行なう。ステップ1409では、ステップ1403でかけたミュートを解除し、マイクロプログラムの実行を開始するようにトリガーをかけて、処理終了する。
【0075】
図15(a)は、図11のステップ1107の自動演奏のテンポ割込処理の手順を示す。自動演奏中は、現在のテンポに応じた周期でタイマ割込が発生し、そのときこのテンポ割込処理が実行される。これは、この電子楽器がマスタ動作する場合である。すなわち、この電子楽器が自動演奏データを読み込んで、自動演奏する場合であり、F8信号はこの電子楽器で発生して他のMIDI機器に供給する。テンポ割り込みの時間間隔は、F8信号と同じ4分音符あたり24回の割り込みが発生するように設定しても良いし、それより細かい分解能で、例えば、4分音符あたり96回の割り込みが発生するように設定しても良い。
【0076】
まずステップ1501で、テンポカウンタをカウントアップする。テンポカウンタは、CPU101側で自動演奏のテンポを規定するカウンタである。次に、ステップ1502で、音源120のLFO122にテンポ同期トリガーを供給する。ステップ1503では、F8信号をMIDI出力端子に出力する。なお、テンポ割込がF8信号より細かい分解能で発生する場合は、ステップ1502では何回かに1回テンポ同期トリガーを供給すればよいし、ステップ1503ではやはり何回かに1回F8信号を出力すればよい。例えば、4分音符あたり96回の割り込みが発生するように設定された場合には、4回の割り込み毎に1回F8信号を出力する。ステップ1504では、当該自動演奏データのイベントタイミングに至ったかを判定する。イベントタイミングに至ったときは、ステップ1505で当該イベントを再生し、ステップ1506で次イベントまでのデュレーションを設定して、処理終了する。ステップ1504でイベントタイミングでないときは、そのまま処理終了する。
【0077】
ステップ1505のイベント再生処理では、例えば、ノートオンイベントであれば、そのノートオン処理を行なう。ステップ1505でノートオンの再生まで行なってしまってもよいし、ステップ1505ではノートオンをバッファに積むだけとし、別処理ルーチンでそのバッファからノートオンを取り出して処理しても良い。
【0078】
ステップ1505のイベントがテンポチェンジであったときは、図15(b)の処理が行なわれる。まずステップ1521で、指定されたテンポ値を変数TMPに格納する。ステップ1522では、そのテンポ値TMPに応じてテンポタイマの速度を設定変更する。次にステップ1523で、音源120のLFO122に、テンポ値TMPに応じた共通カウンタ補間レートを供給し、処理を終了する。
【0079】
なお、上記実施形態において、テンポクロックは、必ずしもMIDIの「F8信号」(分解能が1拍の1/24)でなくてもよい。分解能は、例えば、1拍の1/2、1/96などでもよい。共通カウンタ302に加算する共通カウンタ補間レートの値は、テンポクロックの直前の時間間隔に基づいて自動決定してもよい。また、上記実施形態では、共通カウンタで各サンプリング周期ごとに補間演算(累算)を行なっていたが、サンプリング周期ごとに行なわなくてもよい。例えば、2サンプリング周期に1回とか、8サンプリング周期に1回、補間演算を行なうようにしてもよい。また、「F8信号」の受信間隔に基づくテンポの推定をCPU101で行なわず、音源120内の演算回路で行ない、音源120内で共通カウンタ補間レートを算出するようにしてもよい。テンポの推定は、直前に受信した2つの「F8信号」の時間間隔のみから(直線的に)推定してもよいし、直前の3つ以上の「F8信号」の複数時間間隔からラグランジェ補間などを使用して(曲線的に)推定してもよい。
【0080】
なお、F8信号は、CPU101がタイマ104を用いて生成するようにしても良いし、外部で生成されてMIDIインターフェース107やネットワークインターフェース108から入力するようになっていてもよい。
【0081】
本実施形態では、F8信号をテンポ信号としていたが、それ以外のリズムを制御するあらゆる種類のタイミング信号を同期のためのテンポ信号としてよい。
【0082】
また本実施形態では、自動演奏ないし自動伴奏との同期をとるためにテンポを示すF8信号を使用していたが、本発明をこのようなF8信号に限定する必要はない。この信号は、自動演奏ないし自動伴奏のテンポとベース波形が同期するように補正を掛けるタイミングを示す信号であれば何でも良く、F8信号以外のタイプのテンポ信号であっても良いし、自動演奏に同期して定期的にないし不定期的に発生する同期制御信号であってもよい。
【0083】
リセット制御部332では、ノートオンに応じて0にリセットされるようになっていたが、0以外の所定値にリセットされるようにしてもよい。
【0084】
本実施形態では、ベース波形は整数部17ビットと小数部10ビットで構成されていたが、このビット数に限られるものではなく、必要に応じて増減してよい。
【0085】
図6では、自動演奏の終了に伴いF8信号が途切れた場合を示したが、エラーによりF8信号が取りこぼされる場合も考えられる。その場合は、CPU101がダミーのF8信号を生成して、LFO波形が途切れないようにしてもよい。
【0086】
【発明の効果】
以上説明したように、この発明によれば、テンポ信号ごとに所定値を累算する累算手段を備え、この累算値を時間的に補間しその補間値から変調波形を生成しているので、LFOと自動演奏手段とが独立して設けられている場合でも、自動演奏のテンポに同期した変調波形を発生することができる。
【図面の簡単な説明】
【図1】この発明の変調波形発生装置を適用した電子楽器のブロック構成図
【図2】LFOで発生するLFO波形の例を示す図
【図3】LFOの詳細な構成を示す図
【図4】トリガーカウンタと共通カウンタによるカウントアップの様子を示す図
【図5】トリガーカウンタと共通カウンタを用いたカウントアップの各種の例を示す図
【図6】F8信号が途絶えた場合の処理方法を示す図
【図7】N倍処理部による処理例を示す図
【図8】N倍処理部の乗数Nの一覧を示す図
【図9】形状変形部で選択可能な波形形状の例を示す図
【図10】直線補間部による直線補間の例を示す図
【図11】メイン処理のフローチャート図
【図12】MIDIインターフェース107からF8信号を受信したときのフローチャート図
【図13】MIDIインターフェース107から自動演奏のノートオンを受信したときのフローチャート図
【図14】MIDIインターフェース107からバリエーションタイプを受信したときのフローチャート図
【図15】自動演奏のテンポ割込処理のフローチャート図
【符号の説明】
101…中央処理装置(CPU)、102…リードオンリメモリ(ROM)、103…ランダムアクセスメモリ(RAM)、104…タイマ、105…ドライブ装置、107…MIDIインターフェース、108…ネットワークインターフェース、109…パネルスイッチ、110…パネル表示器、120音源、128…波形メモリ、130…ディジタルアナログ変換器(DAC)、131…サウンドシステム。
Claims (6)
- 楽音を生成する音源内で使用する変調波形を発生する変調波形発生装置であって、
自動演奏のテンポに応じた時間間隔で発生されるテンポ信号を受信する受信手段と、
テンポ信号が発生される周期よりも短い周期である所定周期でクロック信号を発生するクロック信号発生手段と、
テンポ信号を受信するごとに、トリガーカウンタアップ値だけ、値をカウントアップするトリガーカウンタであって、その値が最大値に達したときにその値を初期化するものと、
変調波形のベースとなるベース波形の1周期で前記トリガーカウンタの値が最大値となるように、前記トリガーカウンタアップ値を決定するトリガーカウントアップ値決定手段と、
前記クロック信号が発生されるごとに、補間レートだけ、値をカウントアップする共通カウンタであって、共通カウンタの値が最大値に達したときにその値を初期化するものと、
前記トリガーカウンタアップ値よりも小さい値である補間レートを、自動演奏テンポに応じて決定する補間レート決定手段と、
前記トリガーカウンタの値がカウントアップされるごとに、新たなトリガーカウンタの値を、前記共通カウンタにおけるカウントアップの目標値として設定する目標値設定手段と、
前記共通カウンタの値が前記目標値に達したときには、前記目標値が新たな値に設定されるまでの間、前記共通カウンタの値を目標値に一致させておき、前記共通カウンタの値が前記目標値に達する前に、前記目標値が新たな値に設定されたときには、その時点で、前記共通カウンタの値を、新たに設定される前の目標値の値へ変更する、共通カウンタ制御手段と、
前記クロック信号が発生されるごとに、前記共通カウンタの値をベース波形として出力するベース波形出力手段と、
前記ベース波形に基づいて変調波形を発生する変調波形発生手段と
を備えたことを特徴とする変調波形発生装置。 - 請求項1に記載の変調波形発生装置において、
前記補間レート決定手段は、前記テンポ信号を受信するごとに、および/または、テンポの変更を指示するテンポチェンジを受信するごとに、前記補間レートを決定することを特徴とする変調波形発生装置。 - 請求項1または2に記載の変調波形発生装置において、
前記トリガーカウンタは、ベース波形の1周期内のすべてのテンポ信号の受信タイミングで前記カウントアップを行なう代わりに、ベース波形の1周期内の任意のテンポ信号を間引き、間引いたテンポ信号以外のテンポ信号の受信タイミングで前記カウントアップを行なうものとし、そのときにカウントアップするトリガーカウンタアップ値は前記間引いたテンポ信号の受信タイミングでカウントアップすべきであった値に基づいて変更するものであることを特徴とする変調波形発生装置。 - 請求項1から3の何れか1つに記載の変調波形発生装置において、
前記クロック信号は、楽音生成処理を行なう際の基準タイミング信号であるサンプリングクロック、またはN個(Nは自然数)のサンプリングクロックごとに1回取り出したクロック信号であることを特徴とする変調波形発生装置。 - 請求項1から4の何れか1つに記載の変調波形発生装置において、
前記変調波形発生手段では、生成した変調波形の平滑化を行ない、平滑化後の変調波形を発生することを特徴とする変調波形発生装置。 - 音源で使用する変調波形を発生する変調波形発生部を備えた自動演奏装置であって、
自動演奏のテンポに応じた時間間隔でテンポ信号を発生するテンポ発生手段と、
テンポ信号に応じて、テンポ変更イベントを含む曲データの自動演奏を行なう自動演奏手段と、
テンポ信号が発生される周期よりも短い周期である所定周期でクロック信号を発生するクロック信号発生手段と、
テンポ信号を受信するごとに、トリガーカウンタアップ値だけ、値をカウントアップするトリガーカウンタであって、その値が最大値に達したときにその値を初期化するものと、
変調波形のベースとなるベース波形の1周期で前記トリガーカウンタの値が最大値となるように、前記トリガーカウンタアップ値を決定するトリガーカウントアップ値決定手段と、
前記クロック信号が発生されるごとに、補間レートだけ、値をカウントアップする共通カウンタであって、共通カウンタの値が最大値に達したときにその値を初期化するものと、
前記トリガーカウンタアップ値よりも小さい値である補間レートを、自動演奏テンポに応じて決定する補間レート決定手段と、
前記トリガーカウンタの値がカウントアップされるごとに、新たなトリガーカウンタの値を、前記共通カウンタにおけるカウントアップの目標値として設定する目標値設定手段と、
前記共通カウンタの値が前記目標値に達したときには、前記目標値が新たな値に設定されるまでの間、前記共通カウンタの値を目標値に一致させておき、前記共通カウンタの値が前記目標値に達する前に、前記目標値が新たな値に設定されたときには、その時点で、前記共通カウンタの値を、新たに設定される前の目標値の値へ変更する、共通カウンタ制御手段と、
前記クロック信号が発生されるごとに、前記共通カウンタの値をベース波形として出力するベース波形出力手段と、
前記ベース波形に基づいて変調波形を発生する変調波形発生手段と
を備えたことを特徴とする自動演奏装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002079793A JP3871119B2 (ja) | 2002-03-20 | 2002-03-20 | 変調波形発生装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002079793A JP3871119B2 (ja) | 2002-03-20 | 2002-03-20 | 変調波形発生装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003280649A JP2003280649A (ja) | 2003-10-02 |
JP3871119B2 true JP3871119B2 (ja) | 2007-01-24 |
Family
ID=29229086
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002079793A Expired - Fee Related JP3871119B2 (ja) | 2002-03-20 | 2002-03-20 | 変調波形発生装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3871119B2 (ja) |
-
2002
- 2002-03-20 JP JP2002079793A patent/JP3871119B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2003280649A (ja) | 2003-10-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100319481B1 (ko) | 악음발생방법,파형데이터압축방법,이러한방법을실행하기위한제어명령어를포함하는기계판독가능한기록매체및사운드장치 | |
US6509519B2 (en) | Method and apparatus for generating musical tone waveforms by user input of sample waveform frequency | |
CN107871490B (zh) | 效果赋予装置、效果赋予方法、记录介质以及电子乐器 | |
JPS6353560B2 (ja) | ||
US9711119B2 (en) | Audio processing device, method of audio processing, storage medium, and electronic musical instrument | |
JP3008922B2 (ja) | 楽音発生装置および楽音発生方法 | |
JP3844214B2 (ja) | 変調波形発生装置 | |
JP3871119B2 (ja) | 変調波形発生装置 | |
JPH10307586A (ja) | 楽音発生装置および方法 | |
JP4179243B2 (ja) | 波形発生装置及びプログラム | |
JPH09179561A (ja) | 楽音生成方法 | |
JP3095018B2 (ja) | 楽音発生装置 | |
JP3552265B2 (ja) | 音源装置および音声信号形成方法 | |
JP2833485B2 (ja) | 楽音発生装置 | |
JP4152540B2 (ja) | 電子楽器の楽音制御装置 | |
JP2970438B2 (ja) | 波形メモリ型楽音発生装置 | |
JP3221987B2 (ja) | 遅延時間変調効果装置 | |
JP3862839B2 (ja) | 波形圧縮伸長装置 | |
JP3245411B2 (ja) | 電子楽器 | |
JP3399340B2 (ja) | 楽音合成装置および楽音合成プログラムが記録された記録媒体 | |
JP3405170B2 (ja) | 楽音合成装置 | |
JP3095323B2 (ja) | 電子楽器 | |
JP4179245B2 (ja) | 波形発生装置及びプログラム | |
JP3687095B2 (ja) | 係数補間方法および装置 | |
JPH0311477B2 (ja) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040805 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20060502 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060706 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060904 |
|
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: 20060928 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20061011 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313532 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101027 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101027 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111027 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111027 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121027 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121027 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131027 Year of fee payment: 7 |
|
LAPS | Cancellation because of no payment of annual fees |