(57)【特許請求の範囲】
【請求項１】
演奏データを記憶する記憶手段と、
該記憶手段の演奏データのうちの処理対象とする範囲を設定する範囲設定手段と、
演奏データが演奏される時の時間的位置を前後にずらすシフト量を設定するシフト量設定手段と、
該範囲指定手段で設定された範囲の演奏データの全体を、該シフト量設定手段で設定されたシフト量だけ該設定された範囲のなかで時間的位置を循環的にシフトさせて演奏データを編集する編集手段と
を備えた演奏データ編集装置。
【請求項２】
該編集手段は、
該範囲設定手段で設定された範囲にある演奏データの各ノートに対して該シフト量設定手段で設定されたシフト量だけシフトさせた移動先を計算する第１の移動先計算手段と、
該第１の移動先計算手段で計算した移動先が該範囲設定手段で設定した範囲の外に出たノートに対して、該範囲から外れた量に基づき該移動先が該範囲に入るよう該移動先を計算し直す第２の移動先計算手段と
を備え、
該第１の移動先計算手段の計算結果と該第２の移動先計算手段の計算結果に基づいて演奏データを編集するように構成された請求項１記載の演奏データ編集装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、自動演奏装置で用いる演奏データを編集する演奏データ編集装置に係り、さらに詳しくは演奏データの演奏タイミングを時間的に前後にずらすように編集する演奏データ編集装置に関する。
【０００２】
【従来の技術】
従来、自動演奏装置では、２〜４小節程度の演奏パターン（シーケンス・データ）を複数作成しておいて、これらを適宜組み合わせて所望の曲想の演奏を行うことが行われている。これらの演奏パターンが繰返しパターンからなる場合などには、そのパターンの位相をずらすことで、曲想の違った演奏パターンにすることができる。これは「クロック・シフト」と称される、指定した範囲のデータを前後どちらかにずらすという機能であるが、ずらした結果、はみ出した区間のデータは通常廃棄されてしまう。
【０００３】
例えば図９（ａ）に示されるように、演奏パターンとして「ド，ミ，ソ，ミ，ド，ミ、ソ，ミ」という２小節のシーケンス・データに対して手前側に１拍分クロックシフトを行うと、図９（ｂ）に示されるように、先頭の「ド」が範囲外にはみ出してしまうため廃棄されて音が消え、また第２小節の第４拍は空白となってしまう。
【０００４】
本発明はかかる問題点に鑑みてなされたものであり、その目的とするところは、一つの演奏パターンを任意にシフトさせることで種々の曲想の演奏パターンを得ることができるようにすることにある。
【０００５】
【課題を解決するための手段】
上述の課題を解決するために、本発明に係る演奏データ編集装置は、演奏データを記憶する記憶手段と、該記憶手段の演奏データのうちの処理対象とする範囲を設定する範囲設定手段と、演奏データが演奏される時の時間的位置をずらすシフト量を設定するシフト量設定手段と、該範囲設定手段で設定された範囲の演奏データの全体を、該シフト量設定手段で設定されたシフト量だけ該設定された範囲のなかで時間的位置を循環的にシフトさせて演奏データを編集する編集手段とを備える。
【０００６】
上記の編集手段は、該範囲設定手段で設定された範囲にある演奏データの各ノートに対して該シフト量設定手段で指定されたシフト量だけシフトさせた移動先を計算する第１の移動先計算手段と、該第１の移動先計算手段で計算した移動先が該範囲設定手段で設定した範囲の外に出たノートに対して、該範囲から外れた量に基づき該移動先が該範囲に入るよう該移動先を計算し直す第２の移動先計算手段とを備え、該第１の移動先計算手段の計算結果と該第２の移動先計算手段の計算結果に基づいて演奏データを編集するように構成することができる。
【０００７】
【作用】
例えば図１（ａ）のような演奏データがあるとき、この演奏データの範囲を処理対象の範囲として範囲設定手段で設定する。そして演奏データの各ノートを全体に例えば１拍分前方向にシフトさせたいときには、シフト量設定手段でシフト量としてこの１拍を指定する。このシフト量の設定は音符長によっても、クロック数によっても、あるいは時間によってもよい。編集手段は、演奏データ図１（ｂ）に示されるように演奏データを１拍分前方向にシフトさせるとともに、そのシフトの結果、範囲からはみ出したノート、この例では「ド」については図１（ｃ）に示されるように演奏データの最後尾にもっていくようローテートさせて演奏データを編集する。なお、後ろ方向にシフトさせた場合には後ろ側からはみ出したノートは演奏データの先頭にもっていく。
【０００８】
【発明の実施の形態】
以下、図面を参照して本発明の実施例を説明する。
図２は本発明の一実施例としての演奏データ編集装置が搭載された自動演奏装置の構成を示す図である。図２において、ＣＰＵ１は装置全体の制御を司る中央処理装置であり、ＲＯＭ３に記憶されたプログラムに従って音源６を制御したり、ＲＡＭ２に記憶されたシーケンス・データを編集したりする。
ＲＡＭ２は鍵盤７などにより入力される演奏情報をシーケンス・データとして記憶するランダム・アクセス・メモリである。
ＲＯＭ３はＣＰＵ１が実行するプログラムが格納されているリード・オンリー・メモリである。
ＭＩＤＩ  Ｉ／Ｆ４は外部の鍵盤、音源などとＭＩＤＩメッセージをやり取りするためのインタフェース部である。
操作パネル５は本装置の動作を切り換えるモードスイッチ、シーケンス・データの編集に使用される各種スイッチ、そしてシーケンス・データなどを表示する表示器などからなる。
音源６はＣＰＵ１の制御により発音指令、音色指定を受けて楽音を発生する回路である。
鍵盤７は演奏情報を入力する装置である。
【０００９】
上記の操作パネル５の詳細な例が図３に示される。この図３にはエディット時の表示器の表示画面とエディット操作に係わる操作子が示されている。表示画面５１は演奏データ（シーケンス・データ）のエディット、特に、演奏データの時間情報を指定範囲（何小節目〜何小節目という範囲）内で循環的にシフトする「ローテートシフト」を行う際に表示される画面の例である。同画面中、表示領域５１ａにはエディットの種類が表示される。表示領域５１ｂ，５１ｃはエディットする範囲を小節単位で指定する部分で、図３の例では１小節目から５小節目、すなわち１小節目から５小節目の範囲が指定されている。表示領域５１ｄはシフト（移動）する時間をクロック単位で指定する部分であり、表示領域５１ｅはカーソルであって、どの値を入力するかを示す。
【００１０】
ダイアル５２は数値変更のダイアルであり、現在のカーソル位置のデータを修正するときに用いる。カーソル移動キー５３は表示画面に表示されたカーソル５１ｅを移動させるのに用いる。実行キー５４は指定された各値に基づいて実際のシーケンス・データの修正を行うのに用いる。
【００１１】
次に、この実施例の自動演奏装置で用いるシーケンス・データ中のレコードのデータ・フォーマットについて説明する。図４はノート・レコード、すなわち一つの音を発音するためのレコードのフォーマットの一例を示す図である。この実施例で使用するシーケンス・データは、１レコードが８バイトで構成されるレコードの集合（レコード列）である。レコードの第１バイト（ｓｔｅｐ）はステップと称されるもので、次のレコードまでのクロック数を表し、これで時間間隔を表現する。第２バイト（ｏｐｃｏｄｅ）はオペ・コードと称されるもので、レコードそのものが何であるかを表し、例えばノート，  ピッチ・ベンドなどそれぞれを表すコードが決められている。第３バイト（ｃｈ）はＭＩＤＩチャンネルを表し、第４バイト（ｆｌａｇｓ）  はエディット処理を行う際に一時的に用いるフラグ群であり、この中には当該レコードの処理を終えたか否かを表す処理済フラグが含まれる。
【００１２】
第５バイトから第８バイトは第２バイトのコードによって意味が異なる。ここでは、第２バイトがノートの場合のみを説明する。ノートを表すレコードである場合、第５バイト（ｏｎ−ｖｅｌ）はオン・ベロシティー、第６バイト（ｏｆｆ−ｖｅｌ）  はオフ・ベロシティー、第７および第８バイト（ｇａｔｅ  ｔｉｍｅ）  は２バイトでこのノートの長さ、つまりゲート・タイムを表す。このように、ここで用いるノート・レコードは、ノート・オンとノート・オフとが一つのレコードで表されるタイプのものである。従って、あるノートを削除したり移動させたりする処理を行う場合、対象の１レコードについてのみ処理すれば良く、ノート・オンとノート・オフとを別個に処理する必要がない。
【００１３】
以下、本実施例装置の動作を図５と図６を参照して説明する。この図５と図６は実施例装置で実行されるローテートシフトに係わるエディット処理を示すフローチャートである。本実施例装置では、このエディット処理を行うために、データ・メモリ管理システムを用いる。このデータ・メモリ管理システムは、上記のフォーマットのデータを管理するシステムの上に構築する。これは、データの挿入・削除などが容易に行えるように作られたシステムで、レコードの挿入や削除に伴って起こるレコードの順序管理や、ステップ（ｓｔｅｐ）の書換えなどの時間管理をしたり、指定したクロック位置に読出し・書込みポインタを移動するなどの機能を備えている。
【００１４】
以下、このデータ・メモリ管理システムにおけるシステム・コールについて詳細に説明する。
【００１５】
▲１▼ポインタ移動コール
シーケンス・データ中のレコードの列の先頭から、各レコードのステップ（ｓｔｅｐ）の値を順次に加算しながら読み進め、指定したクロック位置に達すると、そこで処理をやめ、結果的にポインタが、指定したクロック位置のレコードを指すように移動する。
【００１６】
なお、指定したクロック位置に対応するレコードがない場合、そのクロック位置以降で最寄りのレコードを指すようにポインタを移動する。そして、移動後のポインタが指すレコードのクロック位置を取得する。
【００１７】
▲２▼レコード読出しコール
現在、ポインタが指しているレコードの内容を読み出す。
【００１８】
▲３▼レコード挿入コール
指定したクロック位置に新しい８バイトのレコードを挿入する。挿入する時、前後のレコードのステップ（ｓｔｅｐ）および自身のレコードのステップ（ｓｔｅｐ）を調整し、シーケンス・データ全体のステップ（ｓｔｅｐ）の総和が変わらないようにする。
【００１９】
例えば、図７（ａ）に示すようなレコード列があったときに、図７（ｂ）に示すように、第１１５０クロック目を指定して新たなレコード（．．  ｘｘ  ｘｘ  ｘｘ  ｘｘ  ｘｘ  ｘｘ  ｘｘ）を挿入する。具体的には、第１１２０クロック目と第１２２０クロック目の間にこの新たなレコードを挿入し、第１１２０クロック目のレコードのステップ（ｓｔｅｐ）の値を新たに挿入したレコードが第１１２０クロック目から３０クロック離れていることを示す「３０」にし、新たに挿入したレコードのステップ（ｓｔｅｐ）の値を次の第１２２０クロック目のレコードが第１１５０クロック目から７０クロック離れていることを示す「７０」にする。また、図７（ｃ）に示すように、既に第１１５０クロックにレコードが存在するときは、同一クロック上のレコードの最後のレコードの次に挿入され、それに応じてステップ（ｓｔｅｐ）の値が書き直される。
【００２０】
なお、このレコード挿入コールにより挿入されたレコード以降のレコードが後ろにずれ、ポインタが指すレコードが従来指していたレコードと異なる場合があるが、この場合は、従来指していたレコードを指すようポインタを移動する。
【００２１】
▲４▼レコード削除コール
ポインタ移動コールや後述のポインタ歩進コールなどで、ポインタを所望の位置に移動させた後、このコールを使う。現在、ポインタが指しているレコードのオペ・コード  （ｏｐｃｏｄｅ）  をＮＯＰ（ＮＯ  Ｏｐｅｒａｔｉｏｎ）に書き換える。この書換えにより当該レコードを無効にする。なお、オペ・コードをＮＯＰに書き換えられたレコードは、後述のレコード消去コールにてレコードそのものが消去される。
【００２２】
▲５▼ポインタ歩進コール
ポインタを、次のレコードを指すように進めるとともに、新しく指すことになったレコードのクロック位置を取得する。例えば、従来、ポインタが指していたレコードのクロック位置が第１０００クロックで、そのレコードのステップ（ｓｔｅｐ）の値が１２０クロックの場合、ポインタが新しく指すことになったレコードのクロック位置として第１１２０クロックを取得する。
【００２３】
▲６▼レコード消去コール
レコード削除コールによりオペ・コードをＮＯＰに書き換えられたレコードをレコード列から順次に検出し、全て消去する。レコードを消去するとき、消去後のレコード列のステップの総和が変わらないように、前後のステップ  （ｓｔｅｐ）  を調節する。例えば、図７（ｄ）に示すレコード列があったとき、オペ・コードがＮＯＰである第１１２０クロック目のレコードを検出し、図７（ｅ）に示すように、このレコードを消去するとともに、第１０００クロック目のレコードのステップ  （ｓｔｅｐ）  の値を、第１２２０クロック目のレコードが第１０００クロック目のレコードから２２０クロック離れていることを示す「２２０」にする。このような処理を繰り返すことで、オペ・コードがＮＯＰであるレコードを全て消去する。
【００２４】
次に、上記のデータ・フォーマットとデータ・メモリ管理システムのシステム・コールを使用して、図５と図６に示すエディット処理の具体的な処理手順を説明する。
【００２５】
まず、これから処理しようとする演奏パターンのレコード列（シーケンス・データ）を、データ・メモリ管理システムに格納する。このレコード列はフロッピィ・ディスク装置から読み込んでもよいし、リアルタイム・レコーディング機能やステップ・レコーディング機能で入力してもよい。
【００２６】
このエディット処理を行うためのパラメータは、処理範囲の先頭クロック位置ＣＳＴＡＲＴ  、処理範囲の終端クロック位置ＣＥＮＤ  （但し、ＣＥＮＤ  そのものは処理範囲外にある）、ローテート（移動）するクロック数ＣＢＩＡＳ（正の数なら小節中の各ノートを小節の後ろ方向へ、負の数なら手前方向へ動かすという意味となる）、処理対象のデータ絞り込み条件（ノート範囲、オペ・コードの種類の制限あるいはチャンネルの指定など）の４種類であり、これらは図３に示す操作パネルでのパネル操作により、ユーザにより設定される（ステップＳ０）。
【００２７】
パネル操作によって処理の実行が指示されると、まず各レコードに含まれる処理済フラグをすべてクリアすることにより初期化する（ステップＳ１）。この処理済フラグは、当該レコードが既にシフト処理を施されたか否かを表すものであり、同じレコードが重複して処理されることを防ぐためにある。そして、現在処理中のクロックを表す変数である処理中クロック位置ＣＳＲＣ  に先頭クロック位置ＣＳＴＡＲＴ  を代入し（ステップＳ２）、この処理中クロック位置ＣＳＲＣ  を与えてポインタ移動コールを行って、ポインタを、処理中クロック位置ＣＳＲＣ  （＝ＣＳＴＡＲＴ  ）のレコードもしくは処理中クロック位置ＣＳＲＣ  以降の先頭のレコードを指すように移動させるとともに、そのレコードのクロック位置に処理中クロック位置ＣＳＲＣ  を取得することで処理中クロック位置ＣＳＲＣ  を更新する（ステップＳ３）。これは、図１の例でいえば、演奏パターン「ド，ミ，ソ，ミ，ド，ミ，ソ，ミ」の先頭の「ド」をローテートシフトする場合に、先頭の「ド」の位置にポインタを移動させる処理になる。
【００２８】
ここから先の処理は、処理中クロック位置ＣＳＲＣ  が終端クロック位置ＣＥＮＤ  に達するか超えるまで繰り返すので、ＣＳＲＣ  ＜ＣＥＮＤ  の判定を行い（ステップＳ４）、ＹＥＳであればステップＳ５以降に、ＮＯであれば後述するレコード消去コールを行った後（ステップＳ１６）、処理を終了する。これは図１の例では、先頭の「ド」以降のノートに対してステップＳ５以降の処理を順次に行うことに相当する。
【００２９】
まず、データ読出コールを使って、現在ポインタが指しているレコードを読み出す（ステップＳ５）。読み出したデータは手元レコードとして保持しておく。これは、図１の例では最初の処理ループで先頭の「ド」のレコード（以降、処理ループが繰り返される毎に「ド」以降のノートのレコード）を読み出し保持しておく処理に相当する。
【００３０】
この読み出したレコードのオペ・コード（ｏｐｃｏｄｅ）および処理済フラグを調べて、このレコードが処理対象であるかどうかを判断し  （ステップＳ６）  、処理対象であればレコード削除コールを使ってデータ・メモリ管理システム内の当該レコードを削除する  （ステップＳ７）  。これは、図１の例では、演奏パターンのレコード列から先頭の「ド」のレコードを削除する処理になる。処理対象でなければ以下のローテートシフト処理は行わずにステップＳ１５に飛ぶ。この処理対象でないレコードには、指定されたノート範囲外のもの、オペ・コードが違うもの、チャンネルが違うものの他、後述するようにローテートシフト処理が既に行われてしまったレコード（処理済フラグがセットされたレコード）が含まれる。
【００３１】
その後、手元に読み出しているレコードの移動先を求める（ステップＳ８）。移動先のクロック位置ＣＤＳＴ  はＣＤＳＴ  ＝ＣＳＲＣ  ＋ＣＢＩＡＳで求めることができる。これは、例えば図１の例では、演奏パターンを１拍分前方向にローテートシフトする場合には、ＣＢＩＡＳはこの１拍に相当するクロック数である。
【００３２】
ここで、上記のようにして求めた移動先クロック位置が、
（１）ＣＤＳＴ  ＜ＣＳＴＡＲＴ  であれば、ＣＤＳＴ  ＝ＣＥＮＤ  −（ＣＳＴＡＲＴ  −ＣＤＳＴ  ）と計算し直す（ステップＳ９、Ｓ１０）。これは、図１の例でいえば、演奏パターンのローテートシフトを小節の前方向に１拍分した場合に、先頭の「ド」の移動先が第１小節の前に出てしまったので、第２小節の第４拍目になるよう計算し直す処理に相当する。
【００３３】
（２）ＣＤＳＴ  ≧ＣＥＮＤ  であれば、ＣＤＳＴ  ＝ＣＳＴＡＲＴ  ＋（ＣＤＳＴ  −ＣＥＮＤ  ）を計算し直す（ステップＳ１１、Ｓ１２）。これは、図１の例でいえば、演奏パターンのローテートシフトを小節の後ろ方向に１拍分した場合に、最後尾の「ミ」の移動先が第２小節の後ろ外側に出てしまったので、第１小節の第１拍目になるよう計算し直す処理に相当する。
【００３４】
そして、これまでに求めた移動先クロック位置ＣＤＳＴ  と手元に読み出しているレコードとを与えて、データ挿入コール（ｍａ−ｉｎｓ）を行う（ステップＳ１４）。これは、図１の例でいえば、先頭の「ド」を第２小節の第４拍に、あるいは２番目以降のノートをそれぞれ１拍前の拍位置に挿入する処理に相当する。なお、データ挿入コール（ｍａ−ｉｎｓ）で挿入する際には、手元に読み出しているレコードの処理済フラグをセットすることにより処理済マークを付けてから挿入し（ステップＳ１３）、ステップＳ６においてこのレコードが再び処理対象とならないようにする。
【００３５】
次に、ポインタ歩進コールを行い、ポインタを、次のレコードを指すよう歩進させるとともに、新しく示すことになったレコードのクロック位置を処理中クロック位置ＣＳＲＣ  に取得して、処理中クロック位置ＣＳＲＣ  を更新する（ステップＳ１５）。これは次に処理するレコードの読出しの準備のためである。ここまでの処理を、処理中クロック位置ＣＳＲＣ  が終端クロック位置ＣＥＮＤ  に達するか超えるまで繰り返す（ステップＳ４）。ステップＳ４にて、ＣＳＲＣ  ＜ＣＥＮＤ  がＮＯと判定されると、レコード消去コールを行い、レコード削除コールにより無効にされたレコード（オペ・コードがＮＯＰに書き換えられたレコード）を一斉に消去する（ステップＳ１６）。
【００３６】
本発明の実施にあたっては種々の変形形態が可能である。例えば上述の実施例では、処理対象のシーケンス・データのレコードを、一つのレコードで一つのノートのノートオンとノートオフの情報を共に含むフォーマットのものとしたが、本発明はこれに限られるものではなく、例えば図８に示されるように、ＭＩＤＩデータのようにノートオンとノートオフがそれぞれ別々のレコードとなっているものであってもよい。この場合には、ノートオンのレコードについて処理をするときには、必ず対応するノートオフのレコードも見つけて一緒に処理すればよい。消去する場合やトランスポーズの場合も同様である。クロックローテートの処理においては、処理対象のノートオンのレコードを見つけたときに行う処理を行った後、対応するノートオフのレコードを探してそれについても同じ処理を施す。つまりノートオンもノートオフも同じルールで移動させればよい。対応するノートオフのレコードの見つけ方は、ノート番号、チャンネルの全て若しくは一部がノートオンのレコードと同じものであることを手掛かりとすればよい。
【００３７】
【発明の効果】
以上に発明したように、本発明によれば、一つの演奏パターンを任意にシフトさせることで種々の曲想の演奏パターンを容易に得ることができるようになる。
【図面の簡単な説明】
【図１】本発明の基本的な原理を説明する図である。
【図２】本発明の一実施例としての演奏データ編集装置を搭載した自動演奏装置の構成を示す図である。
【図３】実施例装置の操作パネルの例を示す図である。
【図４】実施例装置で用いるレコードのデータ・フォーマットの例を示す図である。
【図５】実施例装置で行うローテートシフトに係わるエディット処理（１／２）の手順を示すフローチャートである。
【図６】実施例装置で行うローテートシフトに係わるエディット処理（２／２）の手順を示すフローチャートである。
【図７】実施例装置における新たなレコードの挿入処理を説明する図である。
【図８】取り扱うレコードの他の形式を説明する図である。
【図９】従来方式を説明する図である。
【符号の説明】
１  ＣＰＵ                      ２  ＲＡＭ
３  ＲＯＭ                      ４  ＭＩＤＩ  Ｉ／Ｆ
５  操作パネル                  ６  音源
７  鍵盤                        ５１  表示画面
５２  ダイヤル                  ５３  カーソル移動キー
５４  実行キー
【図１】
0003604513.tif 000002
【図２】
0003604513.tif 000003
【図３】
0003604513.tif 000004
【図４】
0003604513.tif 000005
【図５】
0003604513.tif 000006
【図６】
0003604513.tif 000007
【図７】
0003604513.tif 000008
【図８】
0003604513.tif 000009
【図９】
0003604513.tif 000010