以下、この発明の実施の形態を添付図面に従って詳細に説明する。
図1は、この発明に係る演奏データ編集装置の全体構成の一実施例を示したハード構成ブロック図である。本実施例に示す演奏データ編集装置は、マイクロプロセッサユニット(CPU)1、リードオンリメモリ(ROM)2、ランダムアクセスメモリ(RAM)3からなるマイクロコンピュータによって制御される。CPU1は、この装置全体の動作を制御する。このCPU1に対して、通信バス1D(例えばデータ及びアドレスバス)を介してROM2、RAM3、入力操作部4、表示部5、音源6、通信インタフェース(I/F)7、記憶装置8がそれぞれ接続されている。
ROM2は、CPU1により実行あるいは参照される各種制御プログラムや各種データ等を格納する。RAM3は、CPU1が所定の制御プログラムを実行する際に発生する各種データなどを一時的に記憶するワーキングメモリとして、あるいは現在実行中の制御プログラムやそれに関連するデータを一時的に記憶するメモリ等として使用される。RAM3の所定のアドレス領域がそれぞれの機能に割り当てられ、レジスタやフラグ、テーブル、メモリなどとして利用される。
入力操作部4は、例えば「楽譜画面」(後述する図2参照)を表示して演奏データの生成開始/終了を指示する編集スイッチ、音符列生成モードとして「検索モード」又は「自動入力モード」(詳しくは後述する)のいずれかを設定するモード設定スイッチ、「楽譜画面」の楽譜上に音符列を自動配置するよう指示する音符生成ボタン、「楽譜画面」に表示中の音符列に応じた演奏データを再生する再生スイッチなどの他、数値データ入力用のテンキーや文字データ入力用のキーボードあるいはマウスやタッチペンなど、操作子として利用できるものであればどのようなものであってもよい。さらには、ユーザ操作に応じて演奏データを発生する例えば鍵盤等の演奏操作子であってもよい。表示部5は例えば液晶表示パネル(LCD)等から構成され、データ生成用の「楽譜画面」は勿論のこと、楽曲データベースに記憶されている演奏データ一覧やCPU1の制御状態などの各種情報を表示する。なお、表示部5は、画面上において行われたユーザタッチ操作を検出(認識)する検知機能を有するタッチパネルであってよい。
音源6は複数のチャンネルで楽音信号の同時発生が可能であり、通信バス1Dを経由して与えられる演奏データに基づいて楽音を発生する。音源6から発生された楽音は、アンプやスピーカなどを含むサウンドシステム6Aから発音される。この音源6から発生された楽音に対して、効果回路など(図示せず)を用いて効果を付与するようにしてよい。なお、音源6とサウンドシステム6Aの構成には、従来のいかなる構成を用いてもよい。例えば、音源6はFM、PCM、物理モデル、フォルマント合成等の各種楽音合成方式のいずれを採用してもよく、専用のハードウェアで構成してもよいし、CPU1によるソフトウェア処理で構成してもよい。
通信インタフェース(I/F)7は、当該装置と図示しない外部機器との間で制御プログラムやデータなどの各種情報を送受信するためのインタフェースである。この通信インタフェース7は、例えばMIDIインタフェース,LAN,インターネット,電話回線等であってよく、また有線あるいは無線のものいずれかでなく双方を具えていてよい。
記憶装置8は、「楽譜画面」を用いて生成された演奏データや予め用意された既存曲の演奏データ(例えばフレーズ単位のMIDIデータなど)、「楽譜画面」において五線譜等を初期表示するための画面表示用の元データ(例えば譜表タイプ、1段に表示する小節数、表示段数、拍子、調号などを含む)、あるいはCPU1が実行する各種制御プログラムなどの各種情報を記憶する。前記ROM2に制御プログラムが記憶されていない場合、この記憶装置8(例えばハードディスク)に制御プログラムを記憶させておき、それを前記RAM3に読み込むことにより、ROM2に制御プログラムを記憶している場合と同様の動作をCPU1に実行させることができる。このようにすると、制御プログラムの追加やバージョンアップ等が容易に行える。なお、記憶装置8はハードディスク(HD)に限られず、フレキシブルディスク(FD)、コンパクトディスク(CD)、光磁気ディスク(MO)、あるいはDVD(Digital Versatile Disk)等の着脱自在な様々な形態の外部記録媒体を利用する記憶装置であってもよい。あるいは、半導体メモリなどであってもよい。
なお、上述した演奏データ編集装置において、入力操作部4や表示部5あるいは音源6などを1つの装置本体に内蔵したものに限らず、それぞれが別々に構成され、MIDIインタフェースや各種ネットワーク等の通信インタフェースを用いて各装置を接続するように構成されたものであってよいことは言うまでもない。さらに、本発明に係る演奏データ編集装置及びプログラムは電子楽器や自動演奏装置、パーソナルコンピュータ、携帯電話等の携帯型通信端末、あるいはカラオケ装置やゲーム装置など、どのような形態の装置・機器に適用してもよい。携帯型通信端末に適用した場合、端末のみで所定の機能が完結している場合に限らず、機能の一部をサーバ側に持たせ、端末とサーバとからなるシステム全体として所定の機能を実現するようにしてもよい。
次に、「楽譜画面」を用いてのデータ生成動作について説明する。図2は、データ生成動作の一実施態様を説明するために「楽譜画面」の表示例を示した概念図である。ここでは、音符列生成モードとして「自動入力モード」が設定されている場合のデータ生成動作について説明する。
ユーザにより編集スイッチ等の操作が行われると、画面表示用の元データに基づき五線譜のみからなる「楽譜画面」が表示部5に初期表示される。該表示された五線譜上には任意の曲線Aを描画できるようになっており、ユーザはマウス等を用いて作成したい曲の変化に応じた大雑把なイメージに沿う曲線A(つまりは曲線情報)を入力することができる。曲線A(曲線情報)の入力後、ユーザにより音符生成ボタンが操作されると、描画された曲線A上に1乃至複数個(この例では6個)の音符記号Oが自動的に配置されるようにして演奏データが生成される。この音符記号Oの自動配置の際には、まず曲線Aにおける極大位置(曲線の変化が増加から減少へと転じる箇所)又は極小位置(曲線の変化が減少から増加へと転じる箇所)を特定し、これらの極大/極小位置に音符記号Oを各々配置する。図2に示した曲線Aでは、第1小節の2拍目と第2小節の3拍目が極大位置、第1小節の4拍目と第3小節の2拍目が極小位置となっており、上記各位置において音符記号Oがそれぞれ配置されている(計4個)。
また、上記した極大/極小の各位置に加え、楽譜内における曲線Aの始点及び終点の各位置に音符記号Oをそれぞれ自動的に配置する。こうして、図示の例ではあわせて6個の音符記号Oが自動的に配置される。なお、これら自動配置される音符記号Oの種類(つまり音長)は、同一小節内において小節線又は隣り合う極大/極小の各位置間における横軸方向の距離に応じて決定してもよいし、ユーザが任意に指定するようにしてもよい。すなわち、極大/極小の各位置に配置される音符記号Oの音長は予め決められた長さでもよいし、楽譜の時間軸上次の極大/極小の位置を参照して自動で算出してもよい。自動算出される音長は、次の極大/極小の位置まででもよいし、適当な音符の長さにして次の極大/極小の位置まで休符を挿入するようにしてもよい。
さらに、ユーザは画面上で簡単な操作を行うだけで自動配置された音符記号Oの他に1乃至複数個の音符記号O´を補完的に配置することができる。例えば、音符記号O´を追加したい箇所として図示のように第2小節の1〜2拍目を範囲指定しておき、前記範囲指定に応じて画面上に表示される指定領域Hをユーザがマウス等を用いて上下方向に拡げる又は狭めるように操作すると、該操作に応じて当該範囲において個数(ゆえに音符配置密度)を適宜に変えながら1乃至複数の音符記号O´を追加配置することができる。なお、この場合には変動する音符配置密度に応じて配置する音符種類を決定するようにしてよい。
具体的には、前記指定領域Hの上下範囲を拡げるとその範囲の音符記号O´の個数が増す一方で(図示の例では黒及び白く塗りつぶしたもの全てが配置され、当該箇所における音符の配置密度が増す)、前記指定領域Hの上下範囲を狭めるとその範囲の音符記号O´の個数が減る(図示の例では黒く塗りつぶしたもののみが配置され、当該箇所における音符の配置密度が減る)。音符記号O´が追加配置される箇所は、指定領域H内における曲線Aと五線譜とが交わる箇所又は曲線Aと五線譜における第1間等の各線間とが交わる箇所のいずれかである(図中においては、黒又は白く塗りつぶした音符記号O´が配置されている箇所が該当する)。このようにすると、曲線Aの形状によって音符の配置密度が変わりうる。つまり、前記指定範囲内における曲線Aの傾きが急である箇所については音符の配置密度が濃く、前記指定範囲内における曲線Aの傾きが緩い箇所については音符の配置密度が薄い。
なお、音符の配置密度を変える操作方法として指定範囲を上下方向に拡げたり狭めたりするものを示したが他の方法でもよい。例えば、「音符増加(又は減少)」のボタンを選択して範囲選択するなどでもよい。音符の密度を下げるとき、極大、極小の音符のみになっていた場合には、同じ操作で休符を入れるようにしてもよい。また、操作の度合いに応じて段階的に増加・減少を行うようにしてもよい。
上記したように、音符記号を曲線Aの極大/極小の各位置に合わせて配置することで、ユーザのイメージをメロディに反映させやすくしている。本願では、ユーザが作成したい曲のメロディに関する「ユーザのイメージ」を特徴的に表すのはメロディの時間的な変化なので、具体的には横軸を時間、縦軸を音高(ピッチ)の2次元平面上の曲線Aとしてメロディを表したときに、この曲線Aの極大、極小の出現の仕方だと考えている。すなわち、あるメロディの断片(例え場フレーズ)について「ユーザのイメージ」の特徴を調べるには、音高が上がっているメロディなのか下がっているメロディなのかそれともほとんど変化しないのかを調べる。そして音高が上がっているメロディであれば、時間的にゆっくりなだらかに上がっていくのかそれとも短い時間でかけあがるのかを調べる。音高が下がっているメロディの場合も同様に、時間的にゆっくりなだらかに下がっていくのか、それとも短い時間でかけさがるのかを調べる。メロディの断片を複数つなぎ合わせると、例えばまずはなだらかに音高が上がっていき、あるところで急に下がり、すぐにまたかけあがる、というようにメロディの音高の上下の変化の仕方がわかる。したがって、ユーザが入力した曲線Aの極大/極小位置が、入力した曲線Aを元にして生成されるメロディの特徴になる。
上述した図2に示した実施例においては、ユーザが描いた曲線Aの特定位置(極大/極小の各位置)に音符記号Oを自動的に配置するが、これはあくまでも曲線Aの形状にのっとって音符記号Oを配置するものであり、要はユーザがまっさらな状態から曲を作成することに他ならない。しかし、初心者が始めからまっさらな状態で曲を作成すると、メロディとしてありえない曲が作成されることがあり都合が悪いことから、既存の曲(例えばフレーズ分の演奏データ(フレーズデータ)であって、以下では音符データ列と呼んで区別する)を参考できるようにすると、ユーザは思い描く曲をより作成しやすくなる。
そこで、次にユーザが既存の曲を参考にしながら新規に曲を作成することができる、前記「楽譜画面」を用いたデータ生成動作について説明する。この場合には、音符列生成モードとして「検索モード」が設定されている。図3は、データ生成動作の異なる実施態様を説明するために「楽譜画面」の別の表示例を示した概念図である。なお、この図3では説明を理解しやすくするために、音符データ列に基づく複数の音符記号O´からなる音符列を楽譜上に便宜的に表示しているが、この音符列は楽譜上でなく別途に表示してユーザに提示するとよい。
この場合においても、表示された「楽譜画面」に、ユーザはマウス等を用いて作成したい曲の変化に応じた大雑把なイメージに沿う曲線A(つまりは曲線情報)を入力する。曲線A(曲線情報)の入力後、ユーザは検索範囲を指定する。ここでは小節単位に検索範囲を指定しているがこれに限らず、検索範囲は小節単位以外であってもよく、また曲線Aの一部でなく全部であってもよい。そして、ユーザにより音符生成ボタンが操作されると、各検索範囲内に含まれる曲線Aにおいて、該範囲の曲線Aにおける極大位置又は極小位置を特定することで曲線Aの特徴を抽出し、音符データ列を多数記憶した楽曲データベース(記憶手段8)から抽出した特徴と同一の特徴を持つ音符データ列を検索する(第1〜第3音符データ列)。
この音符データ列の検索方法は公知のどのような方法であってもよいが、一例を次に示す。まずユーザが入力した曲線Aを分析し、極大と極小の出現状況とそれぞれの大きさを抽出する。例えばユーザが入力した曲線Aが、まずはなだらかに音高が上がっていき第1の極大位置で急に下がってその後すぐ第1の極小位置の後でまたかけ上がっており、また第2の極大が第1の極大よりも高い音高に位置するとき、楽曲データベースよりまず第1の極大、第1の極小、第2の極大が順に出現する音符データ列を抽出し、更にその中から「第1の極大の音高<第2の極大の音高」となる音符データ列を候補とする。
上記検索の結果、該当する音符データ列がある場合には、その音符データ列に基づき「楽譜画面」上に音符記号Oを配置することによって演奏データが生成される。ただし、その際に検索した音符データ列に基づく音符記号O´の配置位置と該当範囲における曲線Aの描画位置とが大きく異なるような場合には(例えば図3において第2小節及び第3小節に示すように、音符データ列に基づく各音符記号O´の音高と曲線Aが位置する音高とが著しく異なっているような場合)、音符データ列に基づく音符記号O´の配置位置を該当箇所における曲線Aの描画位置に移動してから配置する。この際には、音符データ列に基づく各音符記号O´の互いの配置位置関係(図中において点線で示し、各区間でのメロディラインに相当する)を保持したまま移動する。したがって、最終的に音符記号Oが自動配置される位置は、例えば第3小節の1拍目に見られるように必ずしも曲線Aと五線譜とが交わる箇所又は曲線Aと五線譜における第1間等の各線間とが交わる箇所であるとは限らないし、また第1小節の4拍目又は第3小節の2拍目に見られるように必ずしも曲線Aの極大/極小の各位置に音符記号が配置されるとは限らない。すなわち、最終的に音符記号Oが自動配置される位置は、曲線A上に乗らず多少ずれていることもありうる。以上のように、楽譜上において検索範囲を指定して狭めると共に、音符データ列に基づく各音符記号O´の互いの配置位置関係を保持したまま移動するようにすると、検索された音符データ列に基づく音符記号の配置そのものが適用されることを防止することができる。
なお、検索した音符データ列が複数ある場合には、その中からもっとも曲線Aの特徴に近い音符データ列に基づき音符記号Oを配置するようにしてもよいし、複数の音符データ列のうちいずれかをユーザが適宜に選択できるようにしてもよい。また、提示された音符データ列が気に入らない場合、ユーザは他の音符データ列を選択することで演奏データを生成しなおすことができる。
なお、図2と同様に音符データ列に基づき配置された音符記号Oに加えて、さらに曲線Aの極大/極小の各箇所や曲線Aの始点及び終点の各位置に音符記号Oを追加的に配置してもよい。また、範囲指定による音符記号の補完的な追加を行うことができてもよい。
上記した「楽譜画面」において、ユーザは従来と同様にして音符記号の追加(図2の音符記号P参照)、削除、変更あるいは上下左右に移動する等の編集操作を行うことができることは言うまでもない。また、音符記号Oが配置される前は言うに及ばず、音符記号Oが配置された後で曲線Aの形状を変えたり移動したりすることができる。その場合、曲線Aの形状変化(特に極大/極小の数)や移動にあわせて配置済みの音符記号Oの配置位置が変わりうるだけでなく、配置される音符記号Oの個数やその種類等も変わりうるのは勿論である。このようにして、「楽譜画面」上において音符記号Oが自動的に配置されることに伴い、楽譜上に配置された個々の音符記号Oに対応した演奏データ(音符データと呼ぶ)が生成され、また上記したような個々の音符記号Oに対する編集操作に応じて生成した音符データを編集(追加,削除,変更等)することができる。上記音符データは少なくとも時間、音高、音長に関する情報をもつ。勿論、その他に音符の種類情報や音符の向き情報などの音符表示に係る情報を持つようにしてもよい。
次に、上述した「楽譜画面」を用いての演奏データ生成動作を実現する「データ生成処理」について、図4を用いて説明する。図4は、「データ生成処理」の一実施例を示すフローチャートである。当該処理はCPU1により実行される処理であって、例えば編集スイッチのオン操作に従い開始されて、編集スイッチのオフ操作に従い終了される。
ステップS1は、表示部5上に五線譜のみからなる「楽譜画面」(図2参照)を初期表示する。ステップS2は、モード設定スイッチの操作に応じて音符列生成モードとして「検索モード」又は「自動入力モード」のいずれかを設定する。ステップS3は、ユーザ操作による曲線情報の入力を受け付ける。ステップS4は、前記入力された曲線情報に基づき「楽譜画面」に曲線Aを描画する。ステップS5は、音符列生成モードが検索モードか否かを判定する。音符列生成モードが検索モードでない、つまり自動入力モードであると判定した場合には(ステップS5のNO)、「極大/極小配列処理」を実行する(ステップS6)。この処理は、図2で説明した演奏データ生成動作を実現する処理である。一方、音符列生成モードが検索モードであると判定した場合には(ステップS5のYES)、「近似データ配列処理」を実行する(ステップS7)。この処理は、図3で説明した演奏データ生成動作を実現する処理である。これらの各処理については後述する図5又は図7を用いて詳細に説明する。
ステップS8は、楽譜上で音符記号Oの修正操作が行われたか否か、すなわち楽譜上に配置された音符記号Oの追加、削除、変更あるいは移動等の操作が行われたか否かを判定する。楽譜上で音符記号Oの修正操作が行われたと判定した場合には(ステップS8のYES)、操作に応じて表示の更新及び演奏データの更新を行う(ステップS9)。ステップS10は、楽譜上で曲線Aの修正操作が行われたか否かを判定する。楽譜上で曲線Aの修正操作が行われたと判定した場合には(ステップS10のYES)、曲線情報及びそれに伴う曲線Aの表示更新を行う(ステップS11)。ステップS12は、再生スイッチの操作に従い再生指示操作が行われたか否かを判定する。再生指示操作が行われた場合には(ステップS12のYES)、生成した演奏データを再生する(ステップS13)。
図5は、「極大/極小配列処理」(図4のステップS6参照)の一実施例を示すフローチャートである。ステップS21は、特徴ポイントリスト(図6参照)を初期化する。ステップS22は、入力された曲線情報に基づき曲線Aの極大ポイントと極小ポイントとを1乃至複数箇所において特定し、該特定したこれらの位置を特徴ポイントリストに格納する。
ここで、曲線情報から抽出した1乃至複数箇所の極大ポイントと極小ポイントを格納するための特徴ポイントリストについて図6を用いて説明する。図6は、特徴ポイントリストのデータ構成を示す概念図である。特徴ポイントリストはRAM3等に記憶されるものであり、「楽譜画面」上に描画された曲線Aにおける1乃至複数の極大/極小の各位置を演奏進行順に記憶する。
図6に示すように、特徴ポイントリストは、極大/極小のいずれであるかを示す情報と、極大/極小の各位置(ポイント)を示す情報として「楽譜画面」に表示された楽譜の横軸に対応する時間位置及び縦軸に対応する音高位置とを記憶する。極大/極小の各位置を示す情報は画面の座標情報であってもよいが、音符データ生成のために予め表示された楽譜(五線譜)を考慮した時間位置(小節位置)や音高情報に変換して記憶しておくとよい。具体例を示すと、例えば図2に示す曲線Aが「楽譜画面」上に描画された場合、最初に出現するのは極大でありその位置は第1小節2拍目の音高「C4」であることから、特徴ポイントリストには最初のデータ(No.1)として「極大,第1小節2拍目,72(C4)」と記憶される。以下、同様にして「極小,第1小節4拍目,67(G3)」、「極大,第2小節3拍目,74(D4)」、「極小,第3小節2拍目,69(A3)」の各データが順に記憶される(No.2〜No.4)。
図5の説明に戻って、ステップS23は、表示中の楽譜に対応する演奏データを初期化する。ステップS24は、特徴ポイントリスト中に記憶された各極大ポイントあるいは極小ポイント毎に音符記号Oに対応する音符データを生成して演奏データに追加する。この際に、楽譜上での音高が算出されていない場合は表示されている楽譜上での音高を算出し、位置情報と音高情報を元に音符データを生成してから演奏データに追加する。これは、曲線Aの極大/極小位置に音符記号Oを各々配置する場合に該当する。ステップS25は、曲線情報に基づく曲線Aの先頭位置について表示されている楽譜上での音高を算出し、その先頭位置情報と音高情報を元に音符データを生成し演奏データの先頭に追加する。ステップS26は、曲線情報に基づく曲線Aの末尾位置について表示されている楽譜上での音高を算出し、その末尾位置情報と音高情報を元に音符データを生成し演奏データの末尾に追加する。これらは、曲線Aの始点/終点に音符記号Oを各々配置する場合に該当する。ステップS27は、生成した演奏データ(音符データ)に基づき形成される音符列を楽譜上に表示する。
ステップS28は、曲線Aの範囲選択操作及び音符密度変更指示操作が行われたか否かを判定する。曲線Aの範囲選択操作及び音符密度変更指示操作が行われた場合には(ステップS28のYES)、音符密度増加指示つまり図2の指定領域Hを上下方向に拡げる指示であるか否かを判定する(ステップS29)。音符密度増加指示でない場合には(ステップS29のNO)、極大(極小)ポイント以外にある音符記号Oに対応する音符データを削除する(ステップS30)。音符密度増加指示である場合には(ステップS29のYES)、音符記号Oが配置されておらずかつ曲線A上において音高が確定できる位置に音符データを生成して演奏データに追加する(ステップS31)。これは、図2の指定領域Hを上下方向に拡げる指示に応じて、自動配置された音符記号Oの他に1乃至複数個の音符記号O´を補完的に配置する場合に該当する。
図7は、「近似データ配列処理」(図4のステップS7参照)の一実施例を示すフローチャートである。ステップS41は、楽譜上において対象範囲選択操作が行われたか否かを判定する。対象範囲選択操作が行われていない場合には(ステップS41のNO)、以降の処理の実行を待機する。対象範囲選択操作が行われている場合には(ステップS41のYES)、特徴ポイントリスト(図6参照)を初期化する(ステップS42)。ステップS43は、入力された曲線情報に基づき対象範囲における曲線Aの極大ポイントと極小ポイントとを特定し、該特定したこれらの位置を特徴ポイントリストに格納する。ステップS44は、楽曲データベースから検索された音符データ列を格納するためのデータリストを初期化する。
ステップS45は、楽曲データベースより対象範囲の長さの音符データ列を取り出し、極大ポイントと極小ポイントを抽出しながら特徴ポイントリストに記憶された極大ポイントと極小ポイントの出現数とその順番(極大ポイントと極小ポイントの出現状態)とを比較する。比較の結果、各ポイントの出現数と順番(出現状態)とが同じである場合には取り出した音符データ列をデータリストに追加する。なお、楽曲データベースには音符データ列毎に該データによって実現される楽譜上の曲線(メロディラインに相当する)に従う極大ポイントと極小ポイントとを予め登録しておき、該登録してある情報に従って特徴ポイントリストとの比較を行うとよい。ステップS46は、次の音符データ列を探すか否かを判定する。次の音符データ列を探すと判定した場合には(ステップS46のYES)、上記ステップS45の処理に戻って処理を繰り返し実行する。他方、次の音符データ列を探さないと判定した場合には(ステップS46のNO)、後続のステップS47の処理へ進む。
ステップS47は、データリスト内に音符データ列が複数個あるか否かを判定する。データリスト内に音符データ列が複数個あると判定した場合には(ステップS47のYES)、データリスト中の各音符データ列について、極大ポイント同士の音高の大小関係と極小ポイント同士の音高の大小関係を抽出しながら特徴ポイントリストに含まれる極大ポイント同士の音高の大小関係と極小ポイント同士の音高の大小関係が同じものを探す(ステップS48)。ステップS49は、該当する音符データ列があるか否かを判定する。該当する音符データ列がある場合には(ステップS49のYES)、該当する音符データ列を楽譜上に表示された曲線に音高を合わせるように調整し(つまりは音高を変換する)、ユーザに提示する(ステップS50)。ステップS51は、対象範囲の音符データ列を決定して(ユーザ選択/先頭の音符データ列/その他ルールによる選択などの適宜の方法による)、該決定した音高調整後の音符データ列を演奏データに追加する。ステップS52は、決定した音符データ列に基づく音符記号Oを楽譜の対象範囲に表示する。その後、ステップS54の処理へ進む。
上記ステップS47の処理においてデータリスト内の音符データ列が複数個でないと判定された場合(ステップS47のNO)、又は上記ステップS49の処理において該当する音符データ列がないと判定された場合には(ステップS49のNO)、データリストの先頭の音符データ列を楽譜上に表示する。そして、表示する音符データ列の各音高は、楽譜上に表示された曲線に合わせる(ステップS53)。ここで、データリスト内に音符データ列が記憶されていない場合には、曲線Aの極大/極小位置に音符記号Oを各々配置する音符データ列を生成するようにしてよい。その後、ステップS54の処理へ進む。
ステップS54は、決定した音符データ列に含まれる各極大ポイントと極小ポイントについて極大(極小)ポイントになる音符データが半音進行になっているか否かをチェックする。半音進行になっていない場合、極大(極小)ポイントに配置された音符データが半音進行になるような音符データを新規に生成し、音符データ列に挿入及び表示更新する。このとき、生成する音符データの音長は、例えば極大(極小)ポイントに配置される音符データの音長の半分程度にして前後の音符データの音長を調整するようにしてもよいし、あるいは極大(極小)ポイントになる音符データの長さを3等分した長さで、極大(極小)ポイントに配置される音符データの位置に半音下(半音上)の音符データ、次に極大(極小)のポイントに配置される音符データ、さらに次に半音下(半音上)の音符データを時間順に並べるようにしてもよい。このようにして、極大(極小)ポイントに配置された音符の前後に、これらの音符が半音進行を形成するように新規に音符データを前後に追加することで、より効果的にユーザのイメージを現した演奏データを生成できるようにしている。
以上のようにすると、ユーザは楽譜上に音符記号を配置する編集操作として、作成したい曲の大雑把なイメージに沿って楽譜上に曲線を入力する(描く)だけで、既存のフレーズデータを利用して演奏データを生成することができるようになる。すなわち、ユーザはこの曲線を描くといった容易な操作のみで楽譜上に何も表示されていないような状態から、例えば暫定的に音符を配列した状態での編集の基点となりうる初期の演奏データを生成して用意することができる。しかも、フレーズデータに基づく音符記号を相前後する各音符間の音高関係を維持したまま前記入力された曲線に近づけて表示すると共に、該当する音符情報の音高を変換して演奏データを生成するようにしたことから、既存のフレーズデータを利用したとしても、既存のフレーズデータのイメージに囚われることなくユーザの入力したイメージに沿う、音楽的にありうる曲(メロディ)の演奏データを生成することが簡単にできるようになる。
なお、上述した実施例では楽譜上に描く曲線Aを1本とした例を示したが、複数の曲線Aを重ねて描けるようにしてもよい。
なお、楽譜上に描く曲のイメージは曲線で表すのが望ましいが、画面上に用意された楽譜の表示領域が狭い場合など曲線を描きにくい場合には直線を複数組み合わせた折れ線形状などで描くようにしてもよい。
なお、画面に表示される楽譜の小節幅は変更可能であってよい。
なお、画面に表示される楽譜として五線譜を表示して音符記号を配置するものを例に示したがこれに限らず、例えば五線譜の代わりにピアノロールを表示しておき、その上に音符記号の代わりに音符イベントを配置するようにしてもよい。
なお、曲のイメージを表す曲線Aはユーザが直接入力することに限らず、例えば別途作成しておいた曲線を読み込んで入力(表示)するようにしてもよい。
なお、楽曲データベースに記憶する音符データ列は、ユーザが作成した演奏データでもよい。また、フレーズデータに限らず1曲分の演奏データであってもよい。ただし、1曲分の演奏データを記憶している場合には、指定範囲の長さに応じてデータを切り出してから検索を行い提示する。例えば指定範囲が2小節である場合、音符データ列の先頭小節から順に1小節ずつずらしながら2小節分ずつデータを切り出して比較し、該当するものを提示するとよい。
なお、楽曲データベースに記憶する音符データ列は適宜移調して活用するようにしてよい。
なお、検索した音符データ列を表示する際には、最初の音高を曲線Aにおける対象範囲の先頭付近の音高に合わせるように移調して表示するとよい。もしくは、対象範囲の直前の音高が決定している場合には、その音高につながるようにして検索した音符データ列の各音高をシフトするとよい。
なお、極大/極小位置に半音進行の音符データを追加する場合には、極大(極小)位置に配置された音符データとその直前にある音符データの音長とを追加した音符データの音長分だけ短くする。
1…CPU、2…ROM、3…RAM、4…入力操作部、5…表示部、6…音源、6A…サウンドシステム、7…通信インタフェース、8…記憶装置、1D…通信バス、A…曲線、O(O´,P)…音符記号、H…指定領域