図1は、この発明に係る自動演奏装置を適用した電子楽器の全体構成を示したハード構成ブロック図である。本実施例に示す電子楽器は、マイクロプロセッサユニット(CPU)1、リードオンリメモリ(ROM)2、ランダムアクセスメモリ(RAM)3からなるマイクロコンピュータによって制御される。CPU1は、この電子楽器全体の動作を制御するものである。このCPU1に対して、データ及びアドレスバス1Dを介してROM2、RAM3、検出回路4,5、表示回路6、音源回路7、効果回路8、外部記憶装置10、MIDIインタフェース(I/F)11および通信インタフェース(I/F)12がそれぞれ接続されている。更に、CPU1には、タイマ割込み処理(インタラプト処理)における割込み時間や各種時間を計時するタイマ1Aが接続されている。例えば、タイマ1Aはクロックパルスを発生し、発生したクロックパルスをCPU1に対して処理タイミング命令として与えたり、あるいはCPU1に対してインタラプト命令として与える。CPU1は、これらの命令に従って各種処理を実行する。
ROM2は、CPU1により実行される各種プログラムや各種データを格納するものである。RAM3は、CPU1が所定のプログラムを実行する際に発生する各種データを一時的に記憶するワーキングメモリとして、あるいは現在実行中のプログラムやそれに関連するデータを記憶するメモリ等として使用される。RAM3の所定のアドレス領域がそれぞれの機能に割り当てられ、レジスタやフラグ、テーブル、メモリなどとして利用される。この実施例においては、例えば自動演奏の再生タイミングにある各種イベントデータに対してプレイエフェクトをかけるか否かを判定するための、自動演奏データを構成する各トラック毎に1つずつ対応するようにして用意されるプレイエフェクト禁止フラグや、自動演奏データ(詳しくは、再生タイミングに達した自動演奏データに含まれる各種イベントデータ)を一時的に保持するための再生バッファなどがある。すなわち、この実施例に示す電子楽器においては、自動演奏データに含まれる元の各種イベントデータが直接再生されることにより自動演奏が行われるのではなく、一旦、RAM3上に設けられた再生バッファに再生タイミングに達した各種イベントデータを一時的に保存し、これを再生することにより自動演奏を行うようにしている。この再生バッファにイベントデータを一時保存する際には、前記プレイエフェクト禁止フラグに従い、元のイベントデータに対して各種パラメータ(例えばノートオンタイミング、ベロシティ、ゲートタイムなど)の値を適宜に変更するなどのプレイエフェクトの処理を施すか否かを判定し、該判定に従ってプレイエフェクト処理を実行するようにしている。こうした処理についての詳細な説明は、後述する(図5及び図6参照)。
演奏操作子4Aは楽音の音高を選択するための複数の鍵を備えた例えば鍵盤等のようなものであり、各鍵に対応してキースイッチを有しており、この演奏操作子4A(鍵盤等)はユーザによるマニュアル(手弾き)演奏のために使用できるのは勿論のこと、当該電子楽器における自動演奏の演奏環境などを設定するための入力手段として使用することもできる。検出回路4は、演奏操作子4Aの各鍵の押圧及び離鍵を検出することによって検出出力を生じる。設定操作子(スイッチ等)5Aは、自動演奏に関する各種情報等を入力するためのスイッチなどである。例えば、自動演奏対象とする自動演奏データを選択する選択スイッチ、後述するデータ生成機能(図8参照)をオン又はオフする録音開始/終了スイッチ、プレイエフェクト機能をオン(プレイエフェクトをかける設定)又はオフ(プレイエフェクトをかけない設定)するプレイエフェクト設定スイッチ、演奏テンポや音色などの自動演奏に用いる各種情報(パラメータ)等を入力するスイッチ(操作子)などである。勿論、これら以外にも、音高、音色、効果等を選択・設定・制御するために用いる数値データ入力用のテンキーや文字データ入力用のキーボード、あるいはディスプレイ6Aに表示される所定のポインティングデバイスを操作するために用いるマウスなどの各種操作子を含んでいてよい。検出回路5は、上記各スイッチの操作状態を検出し、その操作状態に応じたスイッチ情報をデータ及びアドレスバス1Dを介してCPU1に出力する。表示回路6は例えば液晶表示パネル(LCD)やCRT等から構成されるディスプレイ6Aに、自動演奏可能な自動演奏データの一覧、自動演奏に用いる各種情報の種類や現在の設定状況、あるいはCPU1の制御状態などを表示する。ユーザは該ディスプレイ6Aに表示されるこれらの各種情報を参照しながら、自動演奏対象とする自動演奏データや自動演奏に用いる各種情報(パラメータ)の選択、入力、設定などを行うことができる。
音源回路7は複数のチャンネルで楽音信号の同時発生が可能であり、データ及びアドレスバス1Dを経由して与えられた、ユーザによる演奏操作子4Aの操作に応じてあるいは自動演奏データに基づき発生される各種演奏情報を入力し、これらの演奏情報に基づいて楽音信号を発生する。音源回路7から発生された楽音信号は、効果回路8を介して効果付与されてアンプやスピーカなどを含むサウンドシステム9から発音される。効果回路8は複数のエフェクトユニットを含んでおり、各エフェクトユニットは設定された効果パラメータに従い、それぞれ異なった効果を音源回路7からの楽音信号に付与することができる。この音源回路7と効果回路8とサウンドシステム9の構成には、従来のいかなる構成を用いてもよい。例えば、音源回路8はFM、PCM、物理モデル、フォルマント合成等の各種楽音合成方式のいずれを採用してもよく、また専用のハードウェアで構成してもよいし、CPU1によるソフトウェア処理で構成してもよい。
外部記憶装置10は、自動演奏データなどの各種データや、CPU1が実行する各種制御プログラム等の制御に関するデータなどを記憶するものである。なお、上述したROM2に制御プログラムが記憶されていない場合、この外部記憶装置10(例えばハードディスク)に制御プログラムを記憶させておき、それをRAM3に読み込むことにより、ROM2に制御プログラムを記憶している場合と同様の動作をCPU1にさせることができる。このようにすると、制御プログラムの追加やバージョンアップ等が容易に行える。なお、外部記憶装置10はハードディスク(HD)に限られず、フレキシブルディスク(FD)、コンパクトディスク(CD‐ROM・CD‐RAM)、光磁気ディスク(MO)、あるいはDVD(Digital Versatile Disk)等の着脱自在な様々な形態の外部記憶媒体を利用する記憶装置であればどのようなものであってもよい。あるいは、フラッシュメモリなどの半導体メモリであってもよい。
MIDIインタフェース(I/F)11は、外部接続された他のMIDI機器11A等からMIDI形式の自動演奏データ(MIDIデータ)を当該電子楽器へ入力したり、あるいは当該電子楽器からMIDI形式の自動演奏データ(MIDIデータ)を他のMIDI機器11A等へ出力するためのインタフェースである。他のMIDI機器11Aはユーザによる操作に応じてMIDIデータを発生する機器であればよく、鍵盤型、弦楽器型、管楽器型、打楽器型、身体装着型等どのようなタイプの操作子を具えた(若しくは、操作形態からなる)機器であってもよい。なお、MIDIインタフェース11は専用のMIDIインタフェースを用いるものに限らず、RS-232C、USB(ユニバーサル・シリアル・バス)、IEEE1394(アイトリプルイー1394)等の汎用のインタフェースを用いてMIDIインタフェース11を構成するようにしてもよい。この場合、MIDIイベントデータ以外のデータをも同時に送受信するようにしてもよい。MIDIインタフェース11として上記したような汎用のインタフェースを用いる場合には、他のMIDI機器11AはMIDIイベントデータ以外のデータも送受信できるようにしてよい。勿論、自動演奏データのデータフォーマットはMIDI形式のデータに限らず他の形式であってもよく、その場合はMIDIインタフェース11と他のMIDI機器11Aはそれにあった構成とする。
通信インタフェース(I/F)12は、例えばLANやインターネット、電話回線等の有線あるいは無線の通信ネットワークXに接続されており、該通信ネットワークXを介してサーバコンピュータ12Aと接続され、当該サーバコンピュータ12Aから制御プログラムあるいは各種データなどを電子楽器側に取り込むためのインタフェースである。すなわち、ROM2や外部記憶装置10(例えば、ハードディスク)等に制御プログラムや各種データが記憶されていない場合には、サーバコンピュータ12Aから制御プログラムや各種データをダウンロードするために用いられる。こうした通信インタフェース12は、有線あるいは無線のものいずれかでなく双方を具えていてよい。
なお、上述した電子楽器において、演奏操作子4Aは鍵盤楽器の形態に限らず、弦楽器や管楽器、あるいは打楽器等どのようなタイプの形態でもよい。また、電子楽器は演奏操作子4Aやディスプレイ6Aあるいは音源回路7などを1つの装置本体に内蔵したものに限らず、それぞれが別々に構成され、MIDIインタフェースや各種ネットワーク等の通信手段を用いて各装置を接続するように構成されたものであってもよいことは言うまでもない。さらに、本発明に係る自動演奏装置を適用する装置としては電子楽器に限らず、パーソナルコンピュータや携帯電話等の携帯型通信端末、あるいはカラオケ装置やゲーム装置など、どのような形態の装置・機器に適用してもよい。携帯型通信端末に適用した場合、端末のみで所定の機能が完結している場合に限らず、機能の一部をサーバ側に持たせ、端末とサーバとからなるシステム全体として所定の機能を実現するようにしてもよい。
ここで、外部記憶装置10などに予め複数記憶されており、当該電子楽器において自動演奏のために用いられる自動演奏データについて、図を用いて簡単に説明する。図2〜図4は、自動演奏データのデータ構造の一実施例を示す概念図である。一般的に自動演奏のために用いられる自動演奏データとしては、従来知られているように所謂ソングデータ、スタイルデータ、アルペジオデータなどの種類に大きく分けられる。そこで、ここではソングデータ、スタイルデータ、アルペジオデータ毎に図を分けて示し、これらの各図を参照しながら自動演奏データのデータ構造について説明する。なお、図2〜図4に示すソングデータ、スタイルデータ、アルペジオデータには各図で示したデータ以外のデータも含まれていてよいが、本発明を説明する上では必須のものではないため、その説明を省略する。
まず、ソングデータのデータ構造について、図2を用いて説明する。図2はソングデータのデータ構造を示す概念図であり、図2(a)は該ソングデータの全てのトラックについて一括してプレイエフェクトがかけられることを禁止するよう設定できるようにした場合のデータ構成であり、図2(b)は該ソングデータの所望のトラック毎に適宜にプレイエフェクトがかけられることを禁止するよう設定できるようにした場合のデータ構成である。
ソングデータは、1つのマスタートラックチャンクデータと、複数のノートシーケンストラックチャンクデータとにより主に構成される(図2の左端図参照)。マスタートラックチャンクデータは自動演奏を行うにあたって予め全てのトラックに対して共通に設定しておく必要のある各種パラメータに関するデータであり、例えば演奏テンポや拍子あるいは各演奏パート毎の音色及び効果の設定等に係るデータである。図2に示すソングデータにおいては、演奏テンポが演奏進行に応じて変化するよう、演奏テンポを表す複数のテンポ指定イベントを演奏進行順に記憶した例を示している。他方、ノートシーケンストラックチャンクデータは自動演奏される楽曲の再生内容を表わす情報であり、トラック1〜トラックN(例えば、Nは16など)までの複数のトラック毎に、実際の演奏の元になる各種イベントデータを演奏進行順に記憶したデータである。図2に示すソングデータにおいては、ここに記憶される各種イベントデータとして、楽音の発音を指示するノートオンイベントや楽音の消音を指示するノートオフイベント等の演奏イベントデータを例示している。この演奏イベントデータは、演奏タイミングデータと組み合わされて使用される。本実施例での演奏タイミングデータとは、演奏イベントデータから次の演奏イベントデータまでの時間間隔を示す時間データであるが、これに限らず相対時間あるいは絶対時間等どのようなフォーマットであってもよい。すなわち、イベントの発生時刻を曲や小節内における絶対時間で表した『イベント+絶対時間』形式のもの、イベントの発生時刻を1つ前のイベントからの時間で表した『イベント+相対時間』形式のもの、音符の音高と符長あるいは休符と休符長で演奏データを表した『音高(休符)+符長』形式のもの、演奏の最小分解能毎にメモリの領域を確保し、演奏イベントの発生する時刻に対応するメモリ領域にイベントを記憶した『ベタ方式』形式のものなど、どのような形式のものでもよい。
上記したようなソングデータは、自動演奏時においてプレイエフェクトがかけられて演奏されることを禁止する「プレイエフェクト禁止イベント」を記憶することができる。まず、該ソングデータに含まれる全てのトラックについて一括してプレイエフェクトがかけられることを禁止する場合には、図2(a)に示すように、マスタートラックチャンクデータ内にプレイエフェクト禁止イベントを記憶する。この際に、全トラックの全区間にわたって一括してプレイエフェクトがかけられることを禁止する場合、つまり当該ソングデータに対してプレイエフェクトが全くかけられないようにする場合には、マスタートラックチャンクデータの先頭に対して「プレイエフェクト禁止イベント」を1つだけ記憶する(図2(a)真中図参照)。一方、該ソングデータに含まれる全てのトラックにおける所望の特定区間についてのみ一括してプレイエフェクトがかけられることを禁止する場合、つまり当該ソングデータに対して一部区間においてプレイエフェクトがかけられないようにする場合には、マスタートラックチャンクデータに対して「プレイエフェクト禁止イベント」及び「プレイエフェクト許可イベント」を1組として、プレイエフェクトがかけられることを禁止したい範囲に該当する1乃至複数のテンポ指定イベントの前後に上記それぞれのイベントを記憶する(図2(a)右端図参照)。
一方、ソングデータの所望のトラック毎に適宜にプレイエフェクトがかけられることを禁止する場合には、図2(b)に示すように、該当するノートシーケンストラックチャンクデータにプレイエフェクト禁止イベントを記憶する。この際に、各トラック毎の全区間にわたってプレイエフェクトがかけられることを禁止する場合には、該当するノートシーケンストラックチャンクデータの先頭に対して「プレイエフェクト禁止イベント」を1つだけ記憶する(図2(b)真中図参照)。一方、各トラックにおける所望の特定区間について個々にプレイエフェクトがかけられることを禁止する場合には、該当するノートシーケンストラックチャンクデータに対して「プレイエフェクト禁止イベント」及び「プレイエフェクト許可イベント」を1組として、プレイエフェクトがかけられることを禁止したい範囲に該当する1乃至複数のノートオンイベント(又はノートオフイベント)の前後に上記それぞれのイベントを記憶する(図2(b)右端図参照)。
次に、スタイルデータのデータ構造について、図3を用いて説明する。図3はスタイルデータのデータ構造を示す概念図であり、図3(a)は該スタイルデータの全てのトラックについて一括してプレイエフェクトがかけられることを禁止するよう設定できるようにした場合のデータ構成であり、図3(b)は該スタイルデータの所望のトラック毎に適宜にプレイエフェクトがかけられることを禁止するよう設定できるようにした場合のデータ構成である。
図3から理解できるように、この実施例に示すスタイルデータは上記ソングデータと同様に、1つのマスタートラックチャンクデータと、複数のノートシーケンストラックチャンクデータとにより主に構成される。ただし、スタイルデータの所望のトラック毎に適宜にプレイエフェクトがかけられることを禁止する場合には(図3(b)参照)、ソングデータと異なりマスタートラックチャンクデータを有していなくてよい。すなわち、一般的な従来知られたスタイルデータはマスタートラックチャンクデータを有しないが、この実施例においては全トラックの全区間で一括してプレイエフェクトがかけられることを禁止するために、「プレイエフェクト禁止イベント」を記憶する領域としてマスタートラックチャンクデータを設けている。全トラックの全区間にわたって一括してプレイエフェクトがかけられることを禁止する場合には、1つの「プレイエフェクト禁止イベント」のみが前記新たに設けられたマスタートラックチャンクデータ内に記憶される(図3(a)真中図参照)。一方、該スタイルデータに含まれる全てのトラックにおける所望の特定区間についてのみ一括してプレイエフェクトがかけられることを禁止する場合には、特定区間毎に対応するように「プレイエフェクト禁止イベント」と「プレイエフェクト許可イベント」の組が1乃至複数記憶される(図3(a)右端図参照)。また、スタイルデータの所望のトラック毎に適宜にプレイエフェクトがかけられることを禁止する場合には、図3(b)に示すように、該当するノートシーケンストラックチャンクデータにプレイエフェクト禁止イベントを記憶する。各トラック毎の全区間にわたってプレイエフェクトがかけられることを禁止する場合(図3(b)真中図参照)、各トラックにおける所望の特定区間について個々にプレイエフェクトがかけられることを禁止する場合(図3(b)右端図参照)における各データ構成は上記ソングデータとほぼ同様であることから、ここでの説明を省略する。
次に、アルペジオデータのデータ構造について、図4を用いて説明する。図4は、アルペジオデータのデータ構造を示す概念図である。このアルペジオデータは上記ソングデータやスタイルデータとは異なり、1つのトラック分についての演奏イベントデータ(ノートオンイベントやノートオフイベントなど)により主に構成されている。そこで、アルペジオデータの場合には、全トラック分について一括してプレイエフェクトがかけられることを禁止するように設定することはできず、各トラック毎にプレイエフェクトがかけられることを禁止するように設定することのみができるようになっている。この図4に示すように、当該トラックの全区間でプレイエフェクトがかけられることを禁止する場合には該アルペジオデータの先頭に「プレイエフェクト禁止イベント」を記憶する。他方、当該トラックの特定区間でプレイエフェクトがかけられることを禁止する場合には、特定区間毎に対応するように「プレイエフェクト禁止イベント」と「プレイエフェクト許可イベント」の組を記憶する。このようなデータ構成は、上記ソングデータ又はスタイルデータにおける各トラック毎にプレイエフェクトがかけられることを禁止する場合に示したデータ構成と同じである。
なお、プレイエフェクト禁止情報は、上記指定方法を組み合わせて、トラック毎に時間的な区間を指定するものであってよい。
なお、上述した実施例において、一部区間のみについてプレイエフェクトがかけられることを禁止する場合に「プレイエフェクト禁止イベント」及び「プレイエフェクト許可イベント」を1組のみ記憶した例を示したが(図2(b)右端図又は図3(b)右端図参照)、こうした1組の「プレイエフェクト禁止イベント」及び「プレイエフェクト許可イベント」を複数組記憶することによって、同一のトラックにおいて異なる一部区間でそれぞれプレイエフェクトがかけられることを禁止するように設定できるようにしてよいことは言うまでもない。
なお、プレイエフェクト禁止情報は、自動演奏データに対して、時間的に、始めから終わりまで指定するものであってもよいし、部分的な区間を、1つあるいは複数、指定するものであってもよい。区間指定の例として、何小節目の何拍目から何小節目の何拍目までを禁止するといったような指定の方法が挙げられる。
なお、この実施の形態では、ソングデータ及びスタイルデータは各種イベントデータ(演奏イベントデータなど)を各トラック毎に独立して記憶するようにデータ構成したものを例に説明したがこれに限らず、複数トラック分の各種イベントデータが混在して記憶されているもの、すなわち、各種イベントデータをその割り当てられたトラックにかかわらず、出力順に1列に並べて記憶するようにデータを構成したものであってもよい。そうした際に、所望のトラック毎に適宜にプレイエフェクトがかけられることを禁止する場合には、プレイエフェクト禁止イベント(又はプレイエフェクト許可イベント)と共に、プレイエフェクトがかけられることを禁止する対象となるトラックナンバ等を記憶するようにするとよい。
なお、メモリ上において、時系列の自動演奏データが連続する領域に記憶されていてもよいし、飛び飛びの領域に散在して記憶されている自動演奏データを、連続するデータとして別途管理するようにしてもよい。すなわち、時系列的に連続する自動演奏データとして管理することができればよく、メモリ上で連続して記憶されているか否かは問題ではない。
本発明に係る自動演奏装置を適用した電子楽器は、ユーザ所望の自動演奏データに基づく自動演奏中に、所望の変化を与えながら当該自動演奏データの再生を行うことによって(つまり、プレイエフェクトをかけながらの演奏を行うことによって)、元の自動演奏データを単に再生した場合の演奏とは雰囲気の異なる演奏を行うことが可能である、所謂プレイエフェクト機能を有する。そこで、こうしたプレイエフェクト機能を実現する処理動作について説明する。
まず、マスタートラックチャンクデータに基づく「マスタートラックの再生処理」について、図5を用いて説明する。図5は、「マスタートラックの再生処理」の一実施例を示すフローチャートである。当該処理は、演奏テンポに応じた所定周期毎(例えば、四分音符あたり96回)に実行される。以下、図5に示したフローチャートに従って、当該処理の動作を説明する。
ステップS1では、元の自動演奏データのマスタートラックチャンクデータ内に、再生タイミングに達したイベントがあるか否かを判定する。再生タイミングに達したイベントがない場合には(ステップS1のNO)、当該処理を修了する。再生タイミングに達したイベントがある場合には(ステップS1のYES)、当該イベントがプレイエフェクト禁止イベントであるか否か(ステップS2)、当該イベントがプレイエフェクト許可イベントであるか否か(ステップS5)をそれぞれ判定し、これらの再生タイミングに達したイベントの種類に応じて以下に示すような処理を実行する。当該イベントがプレイエフェクト禁止イベントである場合(ステップS2のYES)には、全トラック分についてプレイエフェクト禁止フラグを立てると共に(ステップS3)、プレイエフェクトをかけることが禁止されている旨を表示するようにディスプレイ6Aの表示を更新する(ステップS4)。他方、当該イベントがプレイエフェクト許可イベントである場合には(ステップS5のYES)、全トラック分についてプレイエフェクト禁止フラグを下ろすと共に(ステップS6)、プレイエフェクトを許可する旨を表示するようにディスプレイ6Aの表示を更新する(ステップS7)。すなわち、ここでは予めRAM3上にトラック毎に用意されている全てのプレイエフェクト禁止フラグに対して、再生タイミングに達したイベントの種類がプレイエフェクト禁止イベントである場合には例えば「1」(又は「0」)を、再生タイミングに達したイベントの種類がプレイエフェクト許可イベントである場合には例えば「0」(又は「1」)を設定する。当該イベントが上記以外のイベント、例えばテンポ指定イベントなどである場合には(ステップS2及びステップS5が共にNO)、当該イベントに従い演奏テンポの設定など、通常のイベント処理を行う(ステップS8)。ただし、元の自動演奏データがスタイルデータである場合には、マスタートラックチャンクデータ内にプレイエフェクト禁止イベント又はプレイエフェクト許可イベント以外のイベントが記憶されていることがないので、こうした通常のイベント処理が実行されることはない。
次に、ノートシーケンストラックチャンクデータに基づく「ノートシーケンストラックの再生処理」について、図6を用いて説明する。図6は、「ノートシーケンストラックの再生処理」の一実施例を示すフローチャートである。当該処理は上記した「マスタートラックの再生処理」とあわせて並行動作される処理であって、演奏テンポに応じた所定周期毎(例えば、四分音符あたり96回)に、各トラック毎に対応する処理がそれぞれ実行される。
ステップS11では、元の自動演奏データのノートシーケンストラックチャンクデータ内に、再生タイミングに達したイベントがあるか否かを判定する。再生タイミングに達したイベントがある場合には(ステップS11のYES)、当該イベントがプレイエフェクト禁止イベントであるか否か(ステップS14)、当該イベントがプレイエフェクト許可イベントであるか否か(ステップS17)をそれぞれ判定し、これらの再生タイミングに達したイベントの種類に応じて以下に示すような処理を実行する。当該イベントがプレイエフェクト禁止イベントである場合(ステップS14のYES)には、プレイエフェクト禁止フラグを立てると共に(ステップS15)、プレイエフェクトをかけることが禁止されている旨を表示するようにディスプレイ6Aの表示を更新する(ステップS16)。他方、当該イベントがプレイエフェクト許可イベントである場合には(ステップS17のYES)、プレイエフェクト禁止フラグを下ろすと共に(ステップS18)、プレイエフェクトを許可する旨を表示するようにディスプレイ6Aの表示を更新する(ステップS19)。
当該イベントが上記以外のイベント、例えば演奏イベント(ノートオンイベントやノートオフイベント)などである場合には(ステップS14及びステップS17が共にNO)、パネル設定はプレイエフェクトONか否かを判定する(ステップS20)。すなわち、ユーザが設定操作子5A等を用いプレイエフェクトをかけるよう機器設定済み(プレイエフェクトON)であるか否かを判定する。パネル設定がプレイエフェクトONでなくプレイエフェクトをかけないよう機器設定されている場合には(ステップS20のNO)、ステップS24の処理へジャンプする。パネル設定がプレイエフェクトONでありプレイエフェクトをかけるよう機器設定されている場合には(ステップS20のYES)、プレイエフェクト禁止フラグが立っているか否かを判定する(ステップS21)。プレイエフェクト禁止フラグが立っていないと判定した場合には(ステップS21のNO)、ステップS23の処理へジャンプする。一方、プレイエフェクト禁止フラグが立っていると判定した場合には(ステップS21のYES)、プレイエフェクト禁止を無視する設定がなされているか否かを判定する(ステップS22)。プレイエフェクト禁止を無視する設定がなされていない場合には(ステップS22のNO)、ステップS24の処理へジャンプする。プレイエフェクト禁止を無視する設定がなされている場合には(ステップS22のYES)、当該イベントに対してプレイエフェクトをかける(ステップS23)。すなわち、当該電子楽器では単純にプレイエフェクト禁止情報に従うのではなく、従うか無視するかをユーザに設定させる機能を有していてよい。上記のように、例えばプレイエフェクト禁止情報を無視するようにユーザが設定していたような場合には、自動演奏データにプレイエフェクト禁止情報が含まれていても、これを無視してプレイエフェクトをかけることができる。イベントに対してプレイエフェクトをかける方法としては、予め用意された変更内容を指定する変更データに基づき元の自動演奏データの内容を変更することでプレイエフェクトをかける。こうした方法は公知であることから、ここでの説明を省略する。ステップS24では、プレイエフェクトがかけられたあるいはプレイエフェクトがかけられていない、プレイエフェクト禁止イベント及びプレイエフェクト許可イベント以外の全てのイベントを再生バッファに入れる。
上記ステップS11において、元の自動演奏データのノートシーケンストラックチャンクデータ内に、再生タイミングに達したイベントがない場合には(ステップS11のNO)、上記ステップS23で処理した再生バッファ内に再生タイミングに達したイベントがあるか否かを判定する(ステップS12)。再生バッファ内に再生タイミングに達したイベントがない場合には(ステップS12のNO)、当該処理を終了する。この場合、自動演奏は行われない。一方、再生バッファ内に再生タイミングに達したイベントがある場合には(ステップS12のYES)、音源回路7を用いて楽音を発音させるなど、イベントに応じた処理を実行する(ステップS13)。すなわち、再生バッファからイベントを読み出して発音を行う発音処理を行い、自動演奏を実行する。ここで実行される自動演奏は、元の自動演奏データにプレイエフェクト禁止イベントが全く記憶されていない場合にはプレイエフェクトがかけられた演奏となるし、元の自動演奏データにプレイエフェクト禁止イベントが記憶されている場合には対応する箇所(全て又は一部区間)についてはプレイエフェクトがかけられていない演奏となる。なお、元の自動演奏データがスタイルデータやアルペジオデータである場合には、音高を決定した上で発音させる。この音高の決定については演奏時に所定のルールに従って決定するのであるが、こうした技術は多数公知であることから、ここでの説明を省略する。
次に、ユーザ所望の区間においてプレイエフェクトがかけられることを禁止するよう、元の自動演奏データ(詳しくは各ノートシーケンストラックデータ)に対してプレイエフェクト禁止情報(プレイエフェクト禁止イベント及びプレイエフェクト許可イベント)が記憶された自動演奏データを新たに生成する「プレイエフェクト禁止情報記録処理」について、図7を用いて説明する。図7は、「プレイエフェクト禁止情報記録処理」の一実施例を示すフローチャートである。当該処理は、上述した「マスタートラック再生処理」及び「ノートシーケンストラック再生処理」(図5及び図6参照)とあわせて並行動作される処理である。ユーザは上記各処理の動作に応じて発音される演奏を聞きながら、適宜のタイミングで所定のユーザインタフェース(各種操作子等)を操作することで、自動演奏中におけるユーザ操作のタイミングに応じた箇所に、プレイエフェクト禁止情報を自動演奏データ中に記録することができる。
ステップS31では、バッファに演奏イベントがあるか否かを判定する。前記バッファは、演奏テンポに応じた所定周期(例えば、四分音符あたり96回)の間に生じた演奏イベントやユーザによるユーザインタフェース操作に応じて発生された操作イベントを、読み出されるまで一時的に記憶する記憶領域である。バッファに演奏イベントがある場合には(ステップS31のYES)、当該演奏イベントを新しい自動演奏データに追加して(ステップS36)、ステップS31の処理へ戻る。一方、バッファに演奏イベントがない場合には(ステップS31のNO)、まずプレイエフェクトをかけることを止める操作イベントがバッファにあるか否かを判定する(ステップS32)。プレイエフェクトをかけることを止める操作イベントがバッファにある場合には(ステップS32のYES)、プレイエフェクト許可イベントを新しい自動演奏データに追加する(ステップS33)。次に、プレイエフェクトをかけることを許可する操作イベントがバッファにあるか否かを判定する(ステップS34)。プレイエフェクトをかけることを許可する操作イベントがバッファにある場合には(ステップS34のYES)、プレイエフェクト禁止イベントを新しい自動演奏データに追加する(ステップS35)。このようにして、プレイエフェクトをかけながら自動演奏データを記録処理する際に、自動演奏データ中のプレイエフェクトをかけた範囲の前後に、それぞれプレイエフェクト禁止イベント及びプレイエフェクト許可イベントを記録しておくことによって、該生成した自動演奏データを後ほど再生する際に前記範囲において更なるプレイエフェクトがかけられることを禁止するようにしている。
なお、上述した「プレイエフェクト禁止情報記録処理」では、各ノートシーケンストラックデータにプレイエフェクト禁止情報を記録するようにしたが、マスタートラックチャンクデータにプレイエフェクト禁止情報(この場合にはプレイエフェクト禁止イベントのみ)を記録するようにしてもよい。例えば、演奏中にユーザインタフェースの操作が1回のみであったような場合、あるいは専用のユーザインタフェースが操作された場合には、マスタートラックチャンクデータにプレイエフェクト禁止情報を記録するようにするとよい。また、プレイエフェクト禁止情報を記録する対象として、一律全トラックを指定するようにしてもよいし、トラック毎に個別に指定するものであってもよい。
なお、上述した「プレイエフェクト禁止情報記録処理」では、演奏中にユーザ操作に応じてすぐにプレイエフェクト禁止情報を記録するようにしたがこれに限らず、演奏中に行われたプレイエフェクトに係るユーザ操作を全て時間データと共に記憶しておき、これに基づき元の自動演奏データの該当する箇所にプレイエフェクト禁止情報を記録して新たな自動演奏データを生成するようにしてもよい。
なお、プレイエフェクト禁止情報を付加する自動演奏データとしては、上述したようなソングデータでもよいし、スタイルデータでもよいし、アルペジオデータでもよい。 なお、選択した自動演奏データに、プレイエフェクト禁止情報が含まれているかどうかを演奏せずともユーザに伝えるユーザインタフェースを具えていてもよい。また、演奏中にプレイエフェクト禁止情報をユーザに対してリアルタイムに伝えるユーザインタフェースを具えていてもよい。表示等の視覚により伝えるものであってもよいし、楽音等の聴覚により伝えるものであってもよい。
なお、プレイエフェクト禁止情報に基づいてプレイエフェクトを禁止する方法としては、ユーザが操作してもプレイエフェクトがかからないようにしてもよいし、ユーザが操作自体を行うことができないようにしてもよい。ユーザが操作自体を行うことができないようにする場合には、例えばユーザがパネル操作をしても設定のための画面表示を行わない、あるいはLEDを点灯させない、などのようにするとよい。
本発明に係る自動演奏装置を適用した電子楽器は、ループ録音方式又はオーバーダブ録音方式等の、繰り返される自動演奏にあわせて適宜に入力されたユーザ操作に基づく楽音をリアルタイムに追加録音することにより自動演奏データを生成するデータ生成機能を有していてよい。データ生成機能の実行時に、上記したようなプレイエフェクト機能による所望の変化を与えながら自動演奏データを再生する(つまり、プレイエフェクトをかけながらの演奏を行う)ことによって、元の自動演奏データを単に再生した場合の演奏とは雰囲気の異なる演奏を行うと共に、プレイエフェクトをかけた後の自動演奏データをユーザ操作に応じて入力された楽音などと共に記憶することができる。勿論、ユーザ操作がない場合には、プレイエフェクトをかけた後の自動演奏データのみを記憶することができるようにしてよい。そこで、こうした自動演奏の繰り返しを伴って自動演奏データを生成するデータ生成機能について、以下説明する。
まず、データ生成機能の処理概要について、図8を用いて簡単に説明する。図8は、当該電子楽器が有するデータ生成機能を説明するための機能ブロック図である。図8において、図中の矢印は自動演奏データ(詳しくは演奏イベントデータ)の流れを表すものである。自動演奏の元となる自動演奏データ、プレイエフェクトをかけられた後やユーザ操作に基づく楽音追加後の自動演奏データは、RAM3あるいは外部記憶装置10内の所定のバッファ内にそれぞれ記憶される。すなわち、自動演奏データを格納するバッファ3(又は10)は、再生に用いる自動演奏データを格納する再生バッファ3aと、生成した自動演奏データを記録する記録バッファ3bとからなるダブルバッファあるいはリングバッファの構造をもつものであって、前記再生バッファ3aと記録バッファ3bとが次々にループする毎に入れ替わることで、ループ録音方式及びオーバーダブ録音方式によるデータ生成機能を実現するようにしている。
制御モジュールAは、ここに示す各モジュールを制御する。この制御モジュールAで行われる具体的な処理(データ生成処理)については、後述する(後述の図9〜図11参照)。再生モジュールBは、タイマ1Aに同期して再生バッファ3aから該当する自動演奏データ(詳しくは演奏イベントデータ)を読み出し、該読み出した演奏イベントデータをプレイエフェクトモジュールEに送る。プレイエフェクトモジュールEでは、予め記憶されたプレイエフェクトデータ(変更データ)100に基づき前記読み出された演奏イベントデータに対してプレイエフェクトをかけて、これを音源ドライバモジュールFに送る。音源ドライバモジュールFでは、送られてきたプレイエフェクトがかけられた後の演奏イベントデータを音源回路7に送ることで楽音を発生するよう制御する。また、音源ドライバモジュールFは、前記プレイエフェクトモジュールEからプレイエフェクトがかけられた後の演奏イベントデータのみではなく、キースキャンモジュールDによりユーザ操作が検知された演奏操作子4Aに応じた演奏イベントデータも入力される。したがって、プレイエフェクトをかけられた自動演奏に加えて、ユーザ操作に応じた楽音を同時に発生させることができる。また、プレイエフェクトモジュールEからの演奏イベントデータ及びキースキャンモジュールDからの演奏操作子4Aのユーザ操作に応じた演奏イベントデータは共に記録モジュールCに送られ、記録モジュールCではこれらの演奏イベントデータを記録バッファ3bに記録する。したがって、記録バッファ3bに記録される自動演奏データは、再生バッファ3aに記録されていた元の自動演奏データと比較すると、プレイエフェクトがかけられており、さらにはユーザ操作された演奏操作子4Aに応じた演奏イベントデータが付加されたものとなる。勿論、プレイエフェクトがかけられなかったり、演奏操作子4Aの操作がなかったような場合には、再生バッファ3aに記録されていた元の自動演奏データがそのまま記録バッファ3bに記録されることは言うまでもない。
次に、上述したデータ生成機能を実現する「データ生成処理」について、図9を用いて説明する。図9は、「データ生成処理」の一実施例を示すフローチャートである。当該処理は、ユーザによる所定の録音操作に応じて開始される。以下、図9に示したフローチャートに従って、当該処理の動作を説明する。
ステップS41では、初期設定を行う。再生バッファ3aに元となる自動演奏データを記憶させておかずに、再生バッファ3aがまっさらな状態から自動演奏データを全く新規に生成するような場合には、該初期設定として、生成対象とする自動演奏データの長さ(例えば小節数)を指定したり、再生バッファ3aをクリアする(空にする)などの処理を行う。一方、再生バッファ3aに記憶された既存の自動演奏データを利用して自動演奏データを生成する場合には、該初期設定として、再生バッファ3aに元となる既存の自動演奏データを予め読み込んでおくなどの処理を行う。この再生バッファ3aに既存の自動演奏データを読み込んでおく場合、ユーザは既存の自動演奏データの中から任意のデータを選択することができる。ステップS42は、RAM3のワークエリア内に確保されるプレイエフェクト制御フラグを「許可」に設定する。ステップS43は、録音「開始」のパネル操作を待つ。すなわち、ユーザによる録音開始/終了スイッチ操作に応じて録音「開始」が指示されるまで、当該処理を続行せずに待機させておく。録音「開始」が指示された場合には、再生モジュールB及び記録モジュールCそれぞれに対し録音開始を指示する一方、プレイエフェクトモジュールEに対してはスルーを指示する(ステップS44)。これらの指示以降、再生モジュールBではタイマ1Aに同期して再生バッファ3aから演奏イベントデータを読み出し、該読み出した演奏イベントデータをプレイエフェクトモジュールEを経由して音源ドライバモジュールF及び記録モジュールCに対してそれぞれ送る。記録モジュールCでは、送られてきた演奏イベントデータを順次に記録バッファ3bに記憶する。
ステップS45では、録音「終了」のパネル操作が行われたか否かを判定する。ユーザによる録音開始/終了スイッチ操作に応じて録音「終了」操作が行われたと判定した場合には(ステップS45のYES)、当該処理を終了する。この処理終了に伴い、記録バッファ3b内に記録されている自動演奏データは所定の不揮発メモリや外部記憶装置10などに記憶される。ただし、プレイエフェクトがかけられていない、あるいはユーザによる演奏操作子4Aの操作が全く行われることがなかったような場合には、記録バッファ3b内に記録されている自動演奏データと再生バッファ3a内に記録されている元の自動演奏データとは何ら変わらないので、記録バッファ3b内に記録されている自動演奏データを所定の不揮発メモリや外部記憶装置10などに記憶しなくてよい。
一方、録音「終了」の操作が行われていないと判定した場合には(ステップS45のNO)、プレイエフェクト制御フラグが「許可」に設定されているか否かを判定する(ステップS46)。プレイエフェクト制御フラグが「許可」に設定されている場合には(ステップS46のYES)、パネル操作子上でのプレイエフェクト設定のオン/オフ設定をプレイエフェクトモジュールEに反映させ、該プレイエフェクト設定が「オン」設定である場合には、プレイエフェクトをかけるようにプレイエフェクトモジュールEに指示する(ステップS47)。上述した図8から理解できるように、この場合には、プレイエフェクトモジュールEでは予め記憶されているプレイエフェクトデータ100に基づいて、再生モジュールBから送られた演奏イベントデータを加工する。そして、加工された演奏イベントデータは音源ドライバモジュールFに送られると共に、記録モジュールCに送られて記録バッファ3bに記録される。したがって、音源回路7を介して発音される楽音はプレイエフェクトがかけられた後の楽音が発生され、また記録バッファ3bにはプレイエフェクトがかけられた後の演奏イベントデータが記録されることになる。さらに、ユーザによる演奏操作子4Aの操作があるような場合には、キースキャンモジュールDから該操作に応じて発生された演奏イベントデータが音源ドライバモジュールF及び記録モジュールCに送られることから、プレイエフェクトがかけられた後の楽音と同時に、ユーザによる演奏操作子4Aの操作に応じて発生された演奏イベントデータに基づく楽音が発生される。そして、記録バッファ3bにはプレイエフェクトがかけられた後の演奏イベントデータと共に、ユーザによる演奏操作子4Aの操作に応じて発生された演奏イベントデータが記録されることになる。
他方、プレイエフェクト制御フラグが「許可」に設定されていない場合には(ステップS46のNO)、パネル操作子上でのプレイエフェクト「オン」設定又は「オフ」設定に関わらず、プレイエフェクトをかけないようにプレイエフェクトモジュールEに指示する(ステップS48)。この場合には、音源回路7を介して発音される楽音はプレイエフェクトがかけられていない楽音が発生され、また記録バッファ3bにはプレイエフェクトがかけられていない元の演奏イベントデータがそのまま記録されることになる(ただし、ユーザによる演奏操作子4Aの操作がある場合には、該操作に応じて発生された演奏イベントデータが同時に記録バッファ3bに記録される)。
ステップS49では、再生バッファ3aに対する読み出しポインタが繰り返し読み出しされる範囲であるループの終端まで到達したか否かを判定する。ループの終端まで到達したと判定した場合には(ステップS49のYES)、再生バッファ3aと記録バッファ3bの更新を行い、さらには再生モジュールBの再生バッファ3aに対する読み出しポインタ及び記録モジュールCの記録バッファ3bに対する書き込みポインタのそれぞれを該当するループの先頭に設定する(ステップS50)。ステップS51では、最新のループの1周つまり直近のループ処理で記録バッファ3bに記録された自動演奏データがプレイエフェクトがかけられた後のデータであるか否かを判定する。プレイエフェクトがかけられた後のデータであると判定した場合には(ステップS51のYES)、プレイエフェクト制御フラグを「許可」から「禁止」に設定変更する(ステップS52)。こうすると、プレイエフェクトをかけるプレイエフェクト「オン」設定である場合であっても、1回のループ処理の際にのみプレイエフェクトがかけられることになることから、ループ再生つまり自動演奏が繰り返されても多重にプレイエフェクトがかけられてしまうことがない。また、プレイエフェクト設定スイッチによる「オン」設定又は「オフ」設定によりプレイエフェクトをかけるかけないかを指示するようにしたことから、ユーザは演奏操作子4Aを操作して楽音を追加録音した後に、プレイエフェクト「オン」設定して、追加録音した楽音を含む自動演奏データに対してプレイエフェクトをかけることができるようになる。すなわち、録音の最初からプレイエフェクトをかけなくてもよく、プレイエフェクトをかけることなくユーザ操作に応じて発生された楽音を追加録音してから、該生成した自動演奏データに対してプレイエフェクトをかけることができる。
1…CPU、2…ROM、3…RAM、3a…再生バッファ、3b…記録バッファ、4、5…検出回路、4A…演奏操作子、5A…設定操作子、6…表示回路、6A…ディスプレイ、7…音源回路、8…効果回路、9…サウンドシステム、10…外部記憶装置、11…MIDIインタフェース、11A…MIDI機器、12…通信インタフェース、12A…サーバコンピュータ、X…通信ネットワーク、1D…通信バス(データ及びアドレスバス)、A…制御モジュール、B…再生モジュール、C…記録モジュール、D…キースキャンモジュール、E…プレイエフェクトモジュール、F…音源ドライバモジュール、100…プレイエフェクトデータ