JP2004046280A - シーケンスデータのタイミング処理装置 - Google Patents

シーケンスデータのタイミング処理装置 Download PDF

Info

Publication number
JP2004046280A
JP2004046280A JP2003387413A JP2003387413A JP2004046280A JP 2004046280 A JP2004046280 A JP 2004046280A JP 2003387413 A JP2003387413 A JP 2003387413A JP 2003387413 A JP2003387413 A JP 2003387413A JP 2004046280 A JP2004046280 A JP 2004046280A
Authority
JP
Japan
Prior art keywords
bar
data
event data
processing
variable
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.)
Abandoned
Application number
JP2003387413A
Other languages
English (en)
Inventor
Yoshinori Yashiro
矢代 義徳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Casio Computer Co Ltd
Original Assignee
Casio Computer Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Casio Computer Co Ltd filed Critical Casio Computer Co Ltd
Priority to JP2003387413A priority Critical patent/JP2004046280A/ja
Publication of JP2004046280A publication Critical patent/JP2004046280A/ja
Abandoned legal-status Critical Current

Links

Images

Landscapes

  • Electrophonic Musical Instruments (AREA)

Abstract

【課題】 その再生が適正に行われるように、シーケンスデータの発音タイミングを管理する。
【解決手段】 電子楽器100は、楽曲データを記憶したRAMを有し、テレビ110の画面上に、イベントデータ、及びカーソル(図示せず)を表示させる。ユーザは、スイッチSW6〜SW9を操作してカーソルを任意のイベントデータ上に移動させた後、スイッチSW2またはSW3をオンすることで、発音タイミングの変更を指示する。電子楽器100は、ユーザによるシーケンスデータの発音タイミングの変更を監視し、それが属する小節外への発音タイミングの変更であった場合にはその変更を無効として禁止する。
【選択図】   図1

Description

 本発明は、シーケンスデータにより発音される楽音の発音タイミングを制御するための技術に関する。
 近年、異なる装置間で音楽情報を伝達するための規格であるMIDI(Musical Instrument Digital Interface)規格が制定されたことから、自動演奏の分野は大きな発展を遂げている。自動演奏を行うシーケンサー装置(以降、単にシーケンサーと記す)も数多く商品化され、また、その機能であるシーケンサー機能も様々な装置に搭載されている。
 シーケンサー機能としては、楽曲データ(シーケンスデータ)の記録/編集/再生がその主な機能である。このシーケンサー機能を搭載することで、例えば外部機器から送られた楽曲データを記録し、この記録した楽曲データを任意にアレンジし、このアレンジした楽曲データを再生させることができる。
 楽曲データ(シーケンスデータ)の編集機能により、音色、エフェクトといった楽音の発音形態に関わる音源パラメータの設定内容の変更を含め、楽音の音高やその発音タイミングの変更、発音させる楽音の追加等、様々なことを行うことができる。上記発音タイミングは、発音開始タイミング、及びその開始タイミングから発音が持続する期間を含めた意味である。発音開始タイミングの変更においては、そのタイミングのズレを自動的に修正するクウォンタイズという機能も広く搭載されている。
 上記のように、ユーザは編集機能を用いて楽曲データを自由に編集することができる。しかし、以下のような編集を行った場合、楽曲データが適正に再生されないということが発生していた。
 最初の例としては、例えば小節の拍子を変更した後、クウォンタイズ機能により発音開始タイミングのズレを修正させた場合である。
 クウォンタイズは、指定された範囲を均等割し、その範囲内で発音される各音符の発音開始タイミングを、均等割したタイミングにそれぞれ変更することを基本としている。このため、指定した範囲内の小節の拍子を変更すると、それが全体のクウォンタイズに影響する。これにより、例えば本来は小節の先頭で発音させるべき音符が、その小節の前の小節で発音されたり、或いは同じ小節内でも他のところで発音されたりする。このように、ユーザが意図していない形でクウォンタイズされることがあるという問題点があった。
 次の例は、音符の発音開始タイミングを、それが属している小節外としてしまった場合である。
 シーケンスデータの時間管理としては、前の音符との間隔で各音符の発音開始タイミングを管理するデルタタイム管理方法と、小節内で発音される音符の発音開始タイミングを、その小節の先頭からの間隔により管理する相対時間管理方法が広く用いられている。後者の方法では、音符を消去してもそれが他の音符に影響しないことから、前者の方法と比較すると、シーケンスデータの編集が容易であるという利点がある。
 シーケンサー機能により、上記相対時間管理方法で作成されたシーケンスデータを編集する場合、ユーザは小節内の音符の発音開始タイミングを任意に変更することができた。しかし、そのシーケンスデータを再生する自動演奏装置は、基本的に、各音符の発音を小節毎に管理することから、音符の発音開始タイミングをそれが属する小節の外に変更してしまうと、その音符が発音されないといった発音異常が発生することがあった。また、その変更を行ったことで、シーケンスデータが正常に表示されなくなることもあった。
 本発明の課題は、その再生が適正に行われるように、シーケンスデータの発音タイミングを管理することにある。
 本発明のシーケンスデータのクウォンタイズ方法は、指定範囲内に存在するシーケンスデータの発音開始タイミングを変更することを前提とし、指定範囲として複数の小節にまたがる範囲が指定されたとき、小節を処理単位として、各小節毎に、シーケンスデータの発音開始タイミングを、それが属する小節の拍子に基づいて変更していく、ことでクウォンタイズを行う。
 本発明の第1の態様のシーケンスデータのタイミング処理装置は、シーケンスデータの発音開始タイミングを制御することを前提とし、シーケンスデータの発音開始タイミングを変更させる範囲を指定するための指定手段と、指定手段により、複数の小節にまたがる範囲が指定されたとき、小節を処理単位として、各小節毎に、シーケンスデータの発音開始タイミングを、それが属する小節の拍子に基づいて変更する制御手段と、を具備する。
 上記の発明においては、小節を処理単位としたことで、その小節の演奏時間等を変更しても、その変更が他の小節に影響することなく、クウォンタイズが行われる。
 本発明の第2の態様のシーケンスデータのタイミング処理装置は、シーケンスデータの発音開始タイミングを制御することを前提とし、シーケンスデータの発音開始タイミングを指定するための指定手段と、指定手段により指定されたシーケンスデータの発音開始タイミングが、該シーケンスデータが属する小節内であるか否か判定する判定手段と、シーケンスデータの発音開始タイミングが、該シーケンスデータが属する小節内ではないと判定手段が判定したとき、指定手段による指定を無効とする制御手段と、を具備する。
 これにより、シーケンスデータの発音開始タイミングに対する変更において、それが属する小節外となる変更が禁止され、ある小節に属しているシーケンスデータは、その小節内で発音を確実に開始することになる。
 本発明のシーケンスデータのクウォンタイズ方法、及びタイミング処理装置は、指定範囲として複数の小節にまたがる範囲が指定されたとき、小節を処理単位として、各小節毎に、シーケンスデータの発音開始タイミングを、それが属する小節の拍子に基づいて変更する。このため、その小節の演奏時間等を変更しても、その変更が他の小節のクウォンタイズに影響することがなくなり、ユーザは意図したクウォンタイズを容易にかけることができる。
 また、本発明のシーケンスデータのタイミング処理装置は、ユーザによるシーケンスデータの発音開始タイミングの変更を監視し、それが属する小節外への発音開始タイミングの変更であった場合にはその変更を無効として禁止するため、シーケンスデータの発音開始タイミングを常に適正な状態に維持しておくことができる。
 以下、本発明を適用した実施の形態について、図面を参照しながら詳細に説明する。
 図1は、第1の実施の形態が適用されたシステムの外観を示す図である。第1の実施の形態は、電子楽器100として実現されている。
 電子楽器100は、発音させる楽音の指定に用いられる鍵盤101と、図示しているスイッチSW1〜SW9、及び特には図示していない他の複数のスイッチからなるスイッチ群102とを備えている。この電子楽器100は、マルチ音源として動作する機能、シーケンサー機能等を備えた、GM(ジェネラルMIDI)対応機種である。
 この電子楽器100には、テレビ110が接続されている。電子楽器100は、テレビ110の画面上に、音符データ(イベントデータ)や、現在設定されている音源パラメータ等の表示を行う。なお、ユーザは、テレビ110に表示させる内容を、スイッチ群102の所定のスイッチに対する操作によって指定することができる。
 電子楽器100には、シーケンサー等の外部機器と接続するための端子が設けられている。外部機器とは、例えばMIDIデータで音楽情報をやりとりする。電子楽器100は、例えば接続されたシーケンサーからMIDIデータが送られてくると、そのMIDIデータを解析し、その解析結果に従って楽音の発音や、音源パラメータの設定等を行うとともに、そのMIDIデータの内容をテレビ110に表示させる処理等を行う。
 図2は、上記電子楽器100の構成のブロック図である。
 図2に示すように、この電子楽器100は、楽器(及びシステム)全体の制御を行うCPU201と、各種プログラムや制御用データを記憶したROM202と、主にCPU201がワーク領域として用いるRAM203と、上述した鍵盤101、及びスイッチ群102と、テレビ110の画面上に画像を表示させるための画像データを出力する画像データ出力部204と、CPU201から送られた発音コマンドに従って楽音を発音するサウンドシステム205と、外部機器とのMIDIデータの授受を行うMIDIインターフェイス206とを備えて構成されている。
 上記の構成において、その概略動作を説明する。
 CPU201は、ROM202に記憶されている制御プログラムに基づいて、楽器100全体の動作を制御し、これにより、図1に示すシステム全体の動作を制御する。
 ユーザが鍵盤101を操作すると、CPU201は、操作された鍵を特定するとともに、その鍵が操作されたときの速さ(ベロシティ)を求めて、ユーザの操作内容に応じて発音コマンドを生成し、これをサウンドシステム205に出力する。
 このサウンドシステム205は、特には図示しないが、例えば各種の楽音波形データを格納した波形ROM、この波形ROMから波形データを読み出す音源部、音源部が読み出した波形データに音響効果等を付加するエフェクタ、エフェクタから出力されたデジタルの波形データをD/A変換し、アナログの波形(楽音)信号を出力するD/Aコンバータ、D/Aコンバータが出力した波形信号により楽音を発音するスピーカからなる。CPU201から入力した発音コマンドに従って楽音を発音することにより、ユーザが鍵盤101に対して行った操作に応じて楽音が発音されることになる。
 CPU201は、このサウンドシステム205に発音コマンドを出力する他に、発音される楽音を特徴づける音源パラメータの設定を行う。音源パラメータの設定は、ユーザがスイッチ群102の所定のスイッチを操作したとき、或いは外部機器から音響パラメータを指定するMIDIデータをMIDIインターフェイス206が受け取ったときに行う。なお、音源パラメータとは、波形ROMから読み出す波形データ(音色に相当する)の種類、エフェクタが付加する音響効果の種類、及びその深さ、ボリューム、パン等のことである。
 MIDIインターフェイス206がMIDIデータを受け取った場合、CPU102は、そのMIDIデータの内容に従って発音コマンドの生成、及びそれのサウンドシステム205への出力、音響パラメータの設定の他に、ユーザの指定に応じて、そのMIDIデータの内容のテレビ110への表示や、MIDIデータのRAM203への記録を行う。
 テレビ110への画像の表示は、以下のようにして行われる。
 例えば、上記したように、MIDIインターフェイス206が受信したMIDIデータを表示させる場合、CPU201は、このMIDIデータを解析し、その内容を表示させるために必要な画像データを特定する。その後、特定した画像データをROM202から読み出し、必要があればこれを加工して画像データ出力部204に出力する。また、CPU201は、この画像データの他に、その画像データを表示させる位置を指定する座標データを画像データ出力部204に出力する。
 画像データ出力部204は、上記座標データが示す表示位置に画像データを表示させるように、テレビ110に画像データを出力する。この画像データは、テレビ110の画面表示の方式に対応させて、1操作ライン毎の、NTSC方式に基づくビデオコンポジット信号の形でテレビ110に出力する。これにより、テレビ110の表示画面上にMIDIデータが予め設定された表示形式で表示される。
 一方、受信したMIDIデータのRAM203への記録は以下のようにして行われる。
 RAM203には、楽曲データを記録する記録領域(楽曲データ記憶領域)が割り当てられ、この記録領域は、複数の記録対象トラックに分割されている。記録対象トラックは、ユーザが予めスイッチ群102を操作して指定する。MIDIデータのRAM203への記録は、ユーザが指定したRAM203の楽曲データ記録領域上の記録対象トラックに、MIDIデータにおいてチャンネルメッセージとして送られるイベントデータを、その入力タイミングとともに順次書き込むことで行われる。
 また、RAM203に記録された楽曲(イベント)データは、編集することができる。CPU201は、ユーザがスイッチ群102において指定した内容に従って、RAM203の楽曲データ記録領域上の所望のトラックに記録されている楽曲データ(イベントデータ)を読み出して、例えば図7に示すように、そのデータを演奏順に表形式でテレビ110に表示させる。ユーザは、スイッチ群102を用いて、テレビ110に表示されている楽曲(イベント)データに対して、楽曲(イベント)データの挿入、削除、移動、複写などを行うことができる。
 上記のようにして、ユーザが編集した結果、及び音響パラメータを変更させた結果は、RAM203の楽曲データ記録領域の楽曲データの内容、或いは受信中のMIDIデータによる自動演奏に反映される。
 RAM203の楽曲データ記録領域の楽曲データの再生は、CPU201が、その記憶領域上の再生対象トラックからイベントデータを順次読み出し、読み出したイベントデータで楽音を発音させる発音コマンドを作成して、それをサウンドシステム205に出力することで行われる。これにより、MIDIデータの受信時と同様に、自動演奏が行われる。
 以上が電子楽器100の構成、及び各部の概略動作である。次に図3〜図6を参照して、RAM203に記憶される楽曲データのデータフォーマットについて説明する。
 第1の実施の形態では、楽曲データは、各小節のイベントデータと、連続する128小節分のイベントデータを単位とする小節ブロックと、最大で8個の小節ブロックを含むトラック、16トラックを単位とする楽曲という各単位を用いて、階層的に管理される点が特徴である。
 まず、図3に示されるトラック使用状況データSNG_TRK_USEは、16ビットのデータであって、各楽曲毎に設定される。各データには、トラック0〜15の各トラックが楽曲の自動演奏において使用されるか否かが、“1”又は“0”のフラグによって設定される。このデータの、最下位ビットがトラック0に対応し、最上位ビットがトラック15に対応する。
 図4(a) に示される配列SNG_BAR_TBLには、楽曲毎及び各楽曲内のトラック毎に、第0小節〜第1023小節の1024小節を128小節ずつ分割して得られる8つの小節ブロックのそれぞれに対応する、図4(b) に示される配列SNG_BAR_PTR内の128個ずつの配列データ群の各先頭要素情報が記憶される。配列SNG_BAR_PTRに定義可能な小節ブロックの数は、例えば最大で32である。その場合、配列SNG_BAR_TBLには、小節ブロック先頭要素情報として、0x00〜0x1f(10進数の0〜31に対応)の何れかの値が記憶される。この小節ブロック先頭要素情報の値を128倍して得られる値が、その小節ブロックに対応する配列SNG_BAR_PTR内の128個の配列データ群の先頭要素番号となる。但し、未使用のトラックのそれぞれの小節ブロックの先頭要素情報及び使用トラック内の未使用の小節ブロックの先頭要素情報としては、値0xffが設定される。
 図4(b) に示される配列SNG_BAR_PTRには、上述の小節ブロック毎に、各小節ブロック内の128小節のそれぞれに対応する、図4(c) に示される配列SNG_SONG内のイベントデータ群の各先頭要素番号が記憶される。配列SNG_SONGに定義可能なイベントデータの数は、例えば最大で16384イベントである。その場合、配列SNG_BAR_PTRには、各小節に対応するイベントデータ群の先頭要素番号として、0x0000〜0x4000(10進数の0〜16383に対応)の何れかの値が記憶される。但し、全休符の小節に対応する先頭要素番号としては、値0xffffが設定される。
 図4(c) に示される配列SNG_SONGには、上述したように小節単位で連続したイベントデータが記憶される。1つのイベントデータは、後述するように3ワードのデータとして構成される。但し、配列SNG_SONGは、512個のイベントデータを単位とする32個のイベントデータブロック(16384イベントデータ分)に分割される。ここで、1つの小節内のイベントデータ群が2つのイベントデータブロックに分割される場合には、第1番目のイベントデータブロックの末尾に後述するジャンプイベントデータが記憶され、また、第2番目のイベントデータブロックの先頭に後述するジャンプソースイベントデータが記憶される。
 図5は、図4(c) の配列SNG_SONGに記憶されるイベントデータ群を構成するノートイベントデータとコントロールイベントデータのデータフォーマットを示す図であり、各イベントデータは3ワードのデータとして構成される。
 図5(a) に示されるノートイベントデータは、楽譜の音符に対応するものであり、単音の発音処理に必要な複数の情報を含む。即ち、ノートイベントデータの第1ワードは、上位7ビットが音高番号、下位7ビットがベロシティを表わす。ノートイベントデータの第2ワードは、そのノートイベントデータに対応する音符について、それが含まれる小節の先頭からの時間位置を、適当な単位(第1の実施の形態では480分の1拍のクロック)でカウントした値である。そして、ノートイベントデータの第3ワードは、そのノートイベントデータに対応する音符の発音時間を前述の適当な単位でカウントしたゲートタイムである。
 図5(b) に示されるコントロールイベントデータは、楽曲の再生を制御するために必要な、上述のノートイベントデータ以外のイベントデータであり、第1ワードの最上位ビットが1であることによって、ノートイベントデータと区別される。このコントロールイベントデータは、更に、メタイベントデータ群、ジャンプイベントデータ群、及びコマンドイベントデータ群の3つに分類される。メタイベントデータ群は、楽曲全体のテンポ、拍子、調に関する情報を含む。ジャンプイベントデータ群は、図6で後述するように、トラック終了、小節終了、次処理データへのジャンプ等の、イベントデータの位置制御に関する情報を含む。更に、コマンドイベントデータ群は、音量、プログラムチェンジ(音色)、ベンダー等の、楽音に対する修飾的な効果を付加するための情報を含む。コントロールイベントデータの第1ワードの下位7ビットはコントロールコードを示し、このコードによって制御内容が決定される。例えば、メタイベントデータ群のテンポイベントデータに対応する第1ワードの値は0xff00、ジャンプイベントデータ群の小節終了イベントデータに対応する第1ワードの値は0xff11(図6(b) 参照)、コマンドイベントデータ群のプログラムチェンジイベントデータに対応する第1ワードの値は0xff20となる。コントロールイベントデータの第2ワードは、そのコントロールイベントデータに対応する制御が実行される小節の先頭からの時間位置を、前述した適当な単位でカウントした値である。コントロールイベントデータの第3ワードには、コントロールコード以外に必要なコントロール値が格納される。例えばメタイベントデータ群のテンポイベントデータの第3ワードにはテンポ番号、ジャンプイベントデータ群のジャンプイベントデータの第3ワードには配列SNG_SONG(図4(c) )内でのジャンプ先のイベントデータの要素番号、コマンドイベントデータ群のプログラムチェンジイベントデータの第3ワードには音色番号が格納される。
 次に、上述したコントロールイベントデータのうちのジャンプイベントデータ群を構成する4種類のイベントデータについて説明する。図6は、これら4種類のイベントデータのそれぞれのデータフォーマットを示す図である。
 まず、図6(a) のトラック終了イベントデータは、各トラックのイベントデータ群の終了位置にそのトラックの最終のイベントデータとして挿入される。
 次に、図6(b) の小節終了イベントデータは、各小節のイベントデータ群の終了位置にその小節の最終イベントデータとして挿入される。
 更に、図6(c) のジャンプイベントデータと図6(d) のジャンプソースイベントデータは、図4(c) の配列SNG_SONGにおいて、1つの小節内のイベントデータ群が512イベントずつの2つのイベントデータブロックに分割される場合に、それぞれ、第1番目のイベントデータブロックの末尾と第2番目のイベントデータブロックの先頭に記憶される。この場合、ジャンプイベントデータの第3ワードには配列SNG_SONG内でのジャンプ先のイベントデータの要素番号が格納され、ジャンプソースイベントデータの第3ワードには同じくジャンプ元のイベントデータの要素番号が格納される。
 なお、図6(a) 〜(d) に示される4種類のイベントデータについて、イベントデータの編集処理及び再生処理においては、第1ワードにより現在処理イベントデータがジャンプイベントデータ群に属するイベントであることが認識された時点で、各々のイベントデータに対応した処理が即座に実行される。従って、これら各イベントデータの第2ワードは任意の値でよい。また、トラック終了イベントデータと小節終了イベントデータの第3ワードも任意の値でよい。
 以上説明した図3〜図6の楽曲データのデータフォーマットが採用されることにより、自動演奏に関する制御を非常に効率的に実行することが可能となる。なお、ここでは、自動演奏全体のデータを主に意図する場合に楽曲データの表現を用いており、この楽曲データがシーケンスデータに対応する。
 上記データフォーマットでRAM203に記録された楽曲データに対し、ユーザはクウォンタイズを行うことができる。このクウォンタイズは、指定された範囲内のイベントデータの発音開始タイミングを自動的に変更するものである。
 クウォンタイズする範囲の指定は、以下のようにして行う。図7を参照して説明する。図7は、クウォンタイズ処理の範囲指定方法を説明する図である。テレビ110に表示されているイベントデータに対して実際に範囲を指定し、その後、クウォンタイズを行った結果までの様子を表している。
 先ず、図7(a)に表示されているイベントデータの見方について、最上段、及び最下段の行のイベントデータを例にとり、その順序で説明する。
 最上段に表示されているイベントデータは、基本的に3つの項目からなる。具体的には、“0001/1/000”、“PRGCHG 001”、“PIANO”の3項目である。
 最初の項目“0001/1/000”は、そのイベントデータによる処理が行われる開始タイミングを示すタイミング項目である。スラッシュで区切られた各数値は、左から、小節番号、拍数、その拍数内におけるタイミング(ステップ数)を表している。第1の実施の形態では、1拍の分解能を480クロックとしている。そのタイミングは、この分解能を基に表現された値である。上記ステップ数は、クロック数で表現したその拍数内におけるタイミングを示している。
 次の項目“PRGCHG 001”は、そのイベントデータのコマンドの種類を示すコマンド項目である。この場合は、音色の変更を指定するコントロールイベントデータであり、音色番号が“001”の音色を指定したことを表している。
 最後の項目“PIANO”は、音色番号“001”に対応する音色の種類を示すパラメータ項目である。この場合、音色番号“001”はピアノであることを表している。
 最下段に表示されているイベントデータは、そのデータが以下の内容であることを示している。その最初の項目“0001/3/120”については、上記最上段のそれと見方は同じである。このため、それに続く項目の意味について説明する。
 最初の項目に続く2番目の項目“NOTE”は、そのイベントデータのコマンドの種類が発音コマンドであることを示す。以下、3番目の項目“G4”はその音高、4番目の項目“80”はベロシティ、最後の項目“720”はゲートタイムをそれぞれ示している。
 上記のように表現されているイベントデータに対する範囲の指定、及びクウォンタイズ処理の開始は、カーソルキーであるスイッチSW6〜SW9、及びスイッチSW1を用いて行う。
 具体的には、先ず、スイッチSW6〜SW9を用いて、画面上に枠で表示されているカーソルを所望する範囲の先頭に移動させた後、スイッチSW1を操作する。これにより、範囲の先頭位置が指定される。図7(a)は初期状態であり、図7(b)は、図7(a)の初期状態からカーソルを移動させて、範囲の先頭位置を指定したときの状態を示している。
 範囲の先頭位置を指定した後は、次に範囲の終了位置を指定する。これは、範囲の先頭位置の指定と同様の操作で指定する。図7(c)は、図7(b)の状態からカーソルを移動させて、範囲の終了位置を指定した状態を示している。
 このようにして先頭位置と終了位置を指定することで、クウォンタイズする範囲が確定する。その後、再度スイッチSW1を操作すると、指定された範囲内を処理対象としたクウォンタイズ処理が行われる。図7(d)は、クウォンタイズ処理後の状態を示している。
 次に、上記CPU201がROM202に記憶された制御プログラムを実行する動作として実現される各種処理について、図8〜図10の動作フローチャート、及び図11の説明図を参照して説明する。
 最初に、全体処理について、図8に示すその動作フローチャートを参照して説明する。
 特には図示しない電源スイッチをユーザが投入(オン)すると、先ず、ステップ801において、CPU201内のレジスタ、及びRAM203のワーク領域のクリア、及び初期設定といったイニシャル処理を行う。このイニシャル処理が終了すると、ステップ802の処理に移行する。
 ステップ802では、ユーザがスイッチ群102に行った操作内容に応じるための処理であるスイッチ処理を行う。続くステップ803において、ユーザが鍵盤101に行った操作内容に応じて楽音を発音させる鍵盤処理といったその他の処理を実行し、その後、ステップ802の処理に戻る。
 このように、ステップ802〜803の処理を繰り返すことにより、ユーザがスイッチ群102、鍵盤101等に対して行った操作に対応して、電子楽器100が動作する。
 次に、上記ステップ802のスイッチ処理について、図9に示すその動作フローチャートを参照して詳細に説明する。
 先ず、ステップ901では、スイッチSW1がオンされたか否か判定する。スイッチSW1は、上述したように、イベントデータに対するクウォンタイズを指示するためのスイッチである。ユーザがこのスイッチSW1を操作した場合、その判定はYESとなってステップ902の処理に移行する。そうでない場合、その判定はNOとなってステップ907の処理に移行する。
 ステップ902では、クウォンタイズ処理フラグの値の判定を行う。ステップ902に続く処理は、クウォンタイズ処理フラグの値に応じて行われる。
 図7を参照して説明したように、クウォンタイズ処理する範囲指定、及びその処理の実行は、スイッチSW1を用いて行われる。上記クウォンタイズ処理フラグは、スイッチSW1に対する操作に応じて、範囲指定からクウォンタイズ処理の実行までの進行を管理するための変数である。この変数は、CPU201内のレジスタ、或いはRAM203に保持される。
 ステップ902において、クウォンタイズ処理フラグの値は0と判定した場合、次にステップ903の処理が実行される。
 ステップ903では、クウォンタイズ範囲の先頭位置が指定されたとして、カーソルが表示されているイベントデータをその先頭位置として登録する。また、この先頭位置の登録の他に、クウォンタイズ処理フラグのインクリメント(=1)を行う。その後、ステップ906の処理に移行する。
 ステップ902において、クウォンタイズ処理フラグの値は1と判定した場合、次にステップ904の処理が実行される。
 ステップ904では、クウォンタイズ範囲の終了位置が指定されたとして、カーソルが表示されているイベントデータをその終了位置として登録する。また、この終了位置の登録の他に、クウォンタイズ処理フラグのインクリメント(=2)を行う。その後、ステップ906の処理に移行する。
 ステップ902において、クウォンタイズ処理フラグの値は2と判定した場合、次にステップ905の処理が実行される。
 ステップ905では、ステップ903、及び904の処理が実行されたことで確定した範囲のイベントデータを対象として、クウォンタイズ処理を実行する。このクウォンタイズ処理が実行されることで、クウォンタイズ処理フラグはリセット、即ちクウォンタイズ処理フラグには0が代入される。その後、ステップ906の処理に移行する。このクウォンタイズ処理の詳細については後述する。
 ステップ603では、スイッチ群102の他のスイッチ対してユーザが行った操作に応じたその他の処理を実行する。このその他の処理が終了すると、ここで一連の処理を終了し、その後、図8のステップ803のその他の処理が実行される。
 上記ステップ901において、スイッチSW1がオンされなかったと判定した場合、ステップ907の処理に移行する。
 ステップ907では、スイッチSW2がオンされたか否か判定する。このスイッチSW2は、クウォンタイズ処理への進行をキャンセル、即ち最初の状態に戻すことを指示するためのスイッチである。ユーザがスイッチSW2を操作した場合、その判定はYESとなってステップ908の処理に移行する。そうでない場合、その判定はNOとなってステップ906の処理に移行する。
 ステップ908では、それまでの進行を全て無効とするためのキャンセル処理を行う。このキャンセル処理が実行されることで、それまでに先頭位置、及び終了位置が指定されていた場合にはそれらの情報が消去され、クウォンタイズ処理フラグには0が代入される。この処理が終了すると、ステップ906の処理に移行する。
 図10は、上記ステップ905のクウォンタイズ処理の動作フローチャートである。同図を参照して、その処理動作を詳細に説明する。
 処理動作を説明する前に、第1の実施の形態によるクウォンタイズの処理方法について、図11を参照して説明する。図11は、各拍子における1小節の時間的長さを示す図である。時間的長さは、第1の実施の形態における分解能、即ち1拍あたりのクロック数を480として表現している。なお、拍子は、小節のクロック数により定義(設定)されるパラメータである。
 図11では、上段から、4/4拍子、17/16拍子、9/8拍子の各拍子におけるその時間的長さをクロック数で表現している。1拍(4分音符)あたりのクロック数、即ち分解能は、第1の実施の形態にあわせて480としている。従って、例えば4/4拍子を例にとれば、その小節のクロック数は1920(=480×4)となる。実際上では、小節の先頭のクロック数の値を0とすることから、4/4拍子の1小節内の時間的位置は、0〜1919までのクロック数で表現される。同じ理由により、1拍目とは0〜479までのクロック数であり、480は2拍目の先頭となる。以下同様であり、クロック数が1920のときは次の小節の先頭となる。
 なお、他の拍子においては、17/16拍子のクロック数は2040(=480×4×17/16)、9/8拍子のクロック数は2160(=480×4×9/8)である。
 従来、クウォンタイズ処理は、指定された範囲を均等割し、その均等割したタイミングに、イベントデータの発音開始タイミングを変更することで、そのタイミングのズレを修正することを基本としている。しかし、第1の実施の形態では、たとえ複数の小節を含む範囲が指定されたとしても、各小節毎に分けて、その小節内のイベントデータに対するクウォンタイズを行うようにしている。
 小節毎のクウォンタイズ処理は、以下のようにして行われる。
 例えば4/4拍子で4分音符単位のクウォンタイズ処理を行う場合、小節内のイベントデータの発音開始タイミングは、図11において縦線で示す何れかのタイミングに合わせられる。同様に、17/16拍子、9/8拍子の各拍子の小節に対し、1拍の単位となる音符でクウォンタイズ処理を行った場合、その小節のイベントデータの発音開始タイミングは、それぞれにおいて縦線で示す何れかのタイミングに修正される。
 発音開始タイミングの修正は、例えば隣り合う縦線で示す修正後のタイミングの間に位置している発音開始タイミングを、その何れかのタイミングに合わせるかを示す比率(オフセット)に従って行われる。例えばそのオフセットを50パーセントとした場合、4/4拍子の小節において、3拍目(クロック数が1440)と4拍目(クロック数が1919)の間に位置している発音タイミングは、クロック数1680(=1920−480/2)を境として、それよりもクロック数が小さければそのクロック数を1440に、反対にそれよりも大きければそのクロック数を1920、即ち次小節の先頭にそれぞれ修正される。
 このようなクウォンタイズ処理を、各小節毎に独立させて行うことにより、クウォンタイズ処理される範囲内のある小節の拍子(クロック数)を変更させても、その変更が他の小節に影響することが回避される。このため、小節の拍子(クロック数)を変更したことで、イベントデータの発音開始タイミングがユーザが意図したものと大きくかけ離れるということがなくなり、ユーザは意図したクウォンタイズを容易にかけることができるようになる。
 図10の説明に戻り、第1の実施の形態によるクウォンタイズ処理について、その動作フローチャートを参照して説明する。
 先ず、ステップ1001では、クウォンタイズ処理の実行のために、RAM203のワーク領域の確保といったイニシャル処理を実行する。このイニシャル処理が終了すると、ステップ1002の処理に移行する。
 ステップ1002では、現在小節が示す小節のクロック数の調査を行う。この現在小節は、CPU201内のレジスタ、或いはRAM203に保持される変数であり、現在において処理すべき小節を示す値が代入される。ステップ1001のイニシャル処理では、この現在小節に、図9のステップ903で登録された先頭位置の小節を示す値を代入している。
 なお、小節のクロック数は、次小節の先頭のイベントデータに、第2ワードとして格納されている(図5参照)。その次小節の先頭のイベントデータは、図4に示すように、配列SNG_BAR_TBLから配列SNG_BAR_PTRのクウォンタイズ処理するトラックの先頭要素番号が格納されている領域を特定し、その特定した配列SNG_BAR_PTRの領域内の先頭要素番号を順次検索していくことで、配列SNG_SONG内のそのデータにアクセスする。
 ステップ1002で小節のクロック数を得ると、ステップ1003の処理に移行する。このステップ1003では、次小節に移動させるべき発音開始タイミングのクロック数を調査する。
 この調査により、例えば小節の拍子が4/4拍子で、オフセットが50パーセントとした場合には、図11に示すように、次小節に移動させるべきタイミングとしてクロック数1680が算出されることになる。
 ステップ1003に続くステップ1004では、現在小節が示す小節にイベントデータがないか否か判定する。その小節内にイベントデータがなかった場合、その判定はYESとなってステップ1011の処理に移行する。そうでない場合、その判定はNOとなってステップ1005の処理に移行する。
 ステップ1005では、その小節の先頭イベントデータを設定する。このときには、図11を参照して説明したように、4分音符等のクウォンタイズにおける単位、及びオフセットに基づき、それの発音開始タイミングが修正される。
 ステップ1005に続くステップ1006では、前に処理したイベントデータが小節の最後のイベントデータか否か判定する。処理対象の小節内のイベントデータを全て処理した場合、その判定はYESとなってステップ1011の処理に移行する。そうでない場合、その判定はNOとなってステップ1007の処理に移行する。
 ステップ1007では、次に処理するイベントデータは次小節に移動させるべきイベントデータであるか否か判定する。この判定は、ステップ1003の調査で得たクロック数と、そのイベントデータの小節先頭からのクロック数(図5参照)とを比較することで行われる。そのイベントデータの小節先頭からのクロック数が調査で得たクロック数以上であった場合、その判定はYESとなってステップ1009の処理に移行する。そうでない場合、その判定はNOとなってステップ1008の処理に移行する。
 ステップ1008では、それが属する小節内でそのイベントデータの発音開始タイミング、即ち小節先頭からのクロック数の変更を行う。他方のステップ1009では、次小節の先頭タイミングとなるように、それの小節先頭からのクロック数を変更する。このステップ1009の処理では、必要に応じて、図4に示す配列SNG_BAR_PTR内のデータの書き換えも行われる。
 ステップ1008、或いは1009の処理が終了すると、ステップ1010の処理に移行する。このステップ1010では、現在小節が示す小節内の次のイベントデータの読み出しを行う。この読み出しが終了した後、ステップ1006の処理に戻る。
 上記ステップ1006〜1010の処理ループを繰り返し行うことで、現在小節が示す小節内の各イベントデータは、順次処理され、その発音開始タイミング、即ち小節先頭からのクロック数が必要に応じて変更される。
 一方、ステップ1011では、現在小節が示す小節は処理最終小節か否か判定する。現在小節が示す小節が、図9のステップ904で登録された終了位置の小節であった場合、その判定はYESとなってステップ1012の処理に移行する。そうでない場合、その判定はNOとなってステップ1013の処理に移行する。
 ステップ1012では、ユーザが指定した範囲のクウォンタイズが終了したことから、クウォンタイズ処理フラグに0を代入する。その後、一連の処理を終了する。
 ステップ1013では、ユーザが指定した範囲のクウォンタイズが終了していないことから、現在小節をインクリメントする。このインクリメントが終了した後、ステップ1002の処理に戻る。
 なお、第1の実施の形態では、イベントデータの種類に関わらず、クウォンタイズを行っているが、例えばノートイベントデータのみに限定して、クウォンタイズを行うようにしても良い。また、場合によっては、その逆としても良い。
 また、クウォンタイズの範囲指定、及びクウォンタイズ処理の実行は、同一のスイッチSW1を用いて行うようにしているが、複数のスイッチに役割分担させて、それらを行わせるようにしても良い。
 また、幅広いクウォンタイズがかけられるように、上記オフセットを任意に指定できるようにしたり、基準からの有効範囲をきめるセンシティビティ等を用意しても良い。
 次に、第2の実施の形態について説明する。
 第1の実施の形態では、小節毎にクウォンタイズを行った結果、イベントデータを次小節に移動させても、クウォンタイズ処理した小節がフォーマット上の最終小節であった場合、移動させる小節が存在しないことから、その移動させたイベントデータは発音されないことになる。第2の実施の形態は、このような発音されなくなるイベントデータの発生を回避するようにしたものである。
 この第2の実施の形態は、第1の実施の形態の構成と基本的に同じである。このため、第1の実施の形態と同じ符号を用いて、第1の実施の形態から異なる部分についてのみ説明する。
 図12は、第2の実施の形態によるクウォンタイズ処理の動作フローチャートである。このクウォンタイズ処理は、図9のステップ905の処理として実行される。この図12を参照して、その処理動作を説明する。
 先ず、ステップ1201では、クウォンタイズ処理の実行のために、RAM203のワーク領域の確保といったイニシャル処理を実行する。このイニシャル処理が終了すると、ステップ1202の処理に移行する。
 ステップ1202では、現在小節が示す小節のクロック数の調査を行う。この現在小節は、CPU201内のレジスタ、或いはRAM203に保持される変数であり、現在において処理すべき小節を示す値が代入される。ステップ1201のイニシャル処理では、この現在小節に、図9のステップ903で登録された先頭位置の小節を示す値を代入している。
 なお、小節のクロック数は、次小節の先頭のイベントデータに、第2ワードとして格納されている(図5参照)。その次小節の先頭のイベントデータは、図4に示すように、配列SNG_BAR_TBLから配列SNG_BAR_PTRのクウォンタイズ処理するトラックの先頭要素番号が格納されている領域を特定し、その特定した配列SNG_BAR_PTRの領域内の先頭要素番号を順次検索していくことで、配列SNG_SONG内のそのデータにアクセスする。
 ステップ1202で小節のクロック数を得ると、ステップ1203の処理に移行する。このステップ1203では、次小節に移動させるべき発音開始タイミングのクロック数を調査する。
 この調査により、例えば小節の拍子が4/4拍子で、オフセットが50パーセントとした場合には、図11に示すように、次小節に移動させるべきタイミングとしてクロック数1680が算出されることになる。
 ステップ1203に続くステップ1204では、現在小節が示す小節にイベントデータがないか否か判定する。その小節内にイベントデータがなかった場合、その判定はYESとなってステップ1213の処理に移行する。そうでない場合、その判定はNOとなってステップ1005の処理に移行する。
 ステップ1205では、その小節の先頭イベントデータを設定する。このときには、図11を参照して説明したように、4分音符等のクウォンタイズにおける単位、及びオフセットに基づき、それの発音開始タイミングが修正される。
 ステップ1205に続くステップ1206では、前に処理したイベントデータが小節の最後のイベントデータか否か判定する。処理対象の小節内のイベントデータを全て処理した場合、その判定はYESとなってステップ1213の処理に移行する。そうでない場合、その判定はNOとなってステップ1207の処理に移行する。
 ステップ1207では、次に処理するイベントデータは次小節に移動させるべきイベントデータであるか否か判定する。この判定は、ステップ1203の調査で得たクロック数と、そのイベントデータの小節先頭からのクロック数(図5参照)とを比較することで行われる。そのイベントデータの小節先頭からのクロック数が調査で得たクロック数以上であった場合、その判定はYESとなってステップ1210の処理に移行する。そうでない場合、その判定はNOとなってステップ1008の処理に移行する。
 ステップ1208では、それが属する小節内でそのイベントデータの発音開始タイミング、即ち小節先頭からのクロック数の変更を行う。続くステップ1209では、現在小節が示す小節内の次のイベントデータの読み出しを行う。この読み出しが終了した後、ステップ1206の処理に戻る。
 ステップ1210では、現在小節が示す小節はフォーマット上の最終小節か否か判定する。その最終小節のクウォンタイズを行っている場合、その判定はYESとなってステップ1211の処理に移行する。そうでない場合、その判定はNOとなってステップ1212の処理に移行する。
 ステップ1211では、現在処理しているイベントデータの小節先頭からのクロック数(発音開始タイミング)を、それが属している小節の最終タイミングに変更する処理を行う。これにより、そのイベントデータが発音されなくなるのが回避されることになる。このとき、最終小節が4/4拍子であった場合、その小節先頭からのクロック数は1919に変更される。
 他方のステップ1212では、次小節の先頭タイミングとなるように、それの小節先頭からのクロック数を変更する。このステップ1212の処理では、必要に応じて、図4に示す配列SNG_BAR_PTR内のデータの書き換えも行われる。
 上記ステップ1211、或いは1212の処理が終了すると、ステップ1209の処理に移行する。
 次に、第3の実施の形態について説明する。
 シーケンサー機能により、ユーザは各種イベントデータの編集(複写、削除、変更等)を行うことができる。しかし、例えばイベントデータの発音開始タイミングを、それが属する小節外の発音開始タイミングに変更してしまった場合には、そのイベントデータ、更にはそれに続くイベントデータが発音されなかったりすることがある。その変更が、他の表示等に関わる処理においても悪影響を及ぼすこともある。第3の実施の形態は、このような問題が生じないように、発音開始タイミングの変更を制限するようにしたものである。
 この第3の実施の形態は、第2の実施の形態と同様に、第1の実施の形態の構成と基本的に同じである。このため、第1の実施の形態と同じ符号を用いて、第1の実施の形態から異なる部分についてのみ説明する。
 図13は、第3の実施の形態における、発音開始タイミングの変更方法を説明する図である。同図を参照して、その変更方法について説明する。
 第3の実施の形態では、図1のスイッチSW2、及びスイッチSW3を、イベントデータ変更用のスイッチとしている。また、画面に表示されているカーソルは、第1の実施の形態と同様に、スイッチSW6〜SW9に対する操作に応じて画面上を移動する。
 図13(a)は、スイッチSW2、及びSW3を操作する前、即ち変更前の状態を示している。この図13(a)においては、最下段の行のステップ数“240”がカーソルによって指定されている。この状態において、スイッチSW6(上スイッチ)を操作すると、カーソルはその一つ上の行のステップ数“000”に移動し、スイッチSW7(下スイッチ)を操作すると、画面が下方向にスクロールして、その下の行の現在表示されていないステップ数に移動し、スイッチSW8(左スイッチ)を操作すると、その左の拍数“3”に移動し、スイッチSW9(右スイッチ)を操作すると、その右の“NOTE”に移動する。
 図13(b)は、図13(a)の状態から、スイッチSW3を1回操作した後の状態を示している。図13(a)と図13(b)とを対比すれば判るように、スイッチSW3はカーソルで指定された項目の値の減少を指示するスイッチである。他方のスイッチSW2は、その逆に、値の増加を指示するスイッチである。なお、“NOTE”のようにイベントデータのコマンドの種類を表す項目においては、スイッチSW2、或いはSW3を操作する度に、イベントデータのコマンドの種類を示す用語が予め定められた順序で変化する。
 このようにして、ユーザは、スイッチSW2、SW3、及びSW6〜SW9を操作することにより、イベントデータの変更を行うことができる。
 次に、第3の実施の形態における各種制御処理について、図14〜図18を参照して詳細に説明する。なお、上述したように、制御処理においても、第1の実施の形態から異なる部分についてのみ説明する。
 図14は、第3の実施の形態によるスイッチ処理の動作フローチャートである。このスイッチ処理は、図8のステップ802の処理として実行される。図14を参照して、第3の実施の形態によるスイッチ処理について詳細に説明する。
 先ず、ステップ1401では、スイッチSW1がオンされたか否か判定する。スイッチSW1は、テレビ110にイベントデータを表示させるイベントリストモードを設定するためのスイッチである。ユーザがこのスイッチSW1を操作し、イベントリストモードを設定した場合、その判定はYESとなってステップ1402の処理に移行する。そうでない場合、その判定はNOとなってステップ1403の処理に移行する。
 ステップ1402では、設定されたイベントリストモードの機能を実現するためのイベントリストモード処理を実行する。その後、ステップ1403の処理に移行する。このイベントリストモード処理についての詳細は後述する。
 ステップ1703では、スイッチ群102の他のスイッチ対してユーザが行った操作に応じたその他の処理を実行する。このその他の処理が終了すると、ここで一連の処理も終了し、その後、図8のステップ803のその他の処理が実行される。
 図15は、上記ステップ1402で実行されるイベントリストモード処理の動作フローチャートである。この図15を参照して、イベントリストモード処理について詳細に説明する。
 先ず、ステップ1501では、イベントリストモードが設定されたことに伴う、CPU201のレジスタ、RAM203のワーク領域のクリア、初期設定等のイニシャル処理を行う。このイニシャル処理では、ユーザが指定したRAM203の楽曲データ記録領域上のトラックに記憶されている楽曲データを読み出し、それをテレビ110に表示させる処理も行われる。なお、このイベントデータが表示された画面を、以降、イベントリスト画面と呼ぶことにする。
 ステップ1501に続くステップ1502では、スイッチ群102の各スイッチに割り当てたイベントリストモード設定時の機能に対応したリストモードスイッチ処理を実行する。その後、ステップ1503において、カーソルスイッチであるスイッチSW6〜SW9の移動に伴い、画面をスクロールさせるといった表示に関わる処理等を含むその他の処理を実行した後、一連の処理を終了する。
 図16は、上記ステップ1502で実行されるリストモードスイッチ処理の動作フローチャートである。この図16を参照して、リストモードスイッチ処理について詳細に説明する。
 先ず、ステップ1601では、スイッチSW2がオンされたか否か判定する。上述したように、このスイッチSW2は、カーソルで指定された項目の値の増加を指示するために用いられる。ユーザがスイッチSW2を操作した場合、その判定はYESとなってステップ1602の処理に移行する。そうでない場合、その判定はNOとなってステップ1603の処理に移行する。
 ステップ1602では、アップダウンフラグに0を代入する。このアップダウンフラグは、ユーザの指示が増加か否かを示す値が代入される、CPU201、或いはRAM203に保持される変数である。ユーザの指示が増加指示であれば0、減少指示であれば1が代入される。このステップ1602の処理が終了すると、ステップ1605の処理に移行する。
 他方のステップ1603では、スイッチSW3がオンされたか否か判定する。上述したように、このスイッチSW3は、カーソルで指定された項目の値の減少を指示するために用いられる。ユーザがスイッチSW3を操作した場合、その判定はYESとなってステップ1604の処理に移行する。そうでない場合、その判定はNOとなってステップ1611の処理に移行する。
 ステップ1604では、アップダウンフラグに1を代入する。このステップ1604の処理が終了すると、ステップ1605の処理に移行する。
 ステップ1605では、現在選択されている項目の判定を行う。この判定は、現在カーソルを表示させている表示位置により行われる。その判定結果に従って、ステップ1605に続く処理が決定される。
 ステップ1605において、現在選択されている項目がタイミングであると判定すると、ステップ1606の処理に移行する。
 ステップ1606では、タイミングの項目のなかで選択されている項目は拍か否か判定する。例えば図13(a)において、カーソルが表示されている“240”がステップであり、それの左隣の“3”が拍数である。カーソルが拍数の位置に表示されていた場合、その判定はYESとなってステップ1607の処理に移行する。そうでない場合、その判定はNOとなってステップ1608の処理に移行する。
 ステップ1607では、ユーザが操作したスイッチの種類(SW2、或いはSW3)に応じて、拍数を変更する拍変更処理を行う。その後、一連の処理を終了する。
 他方のステップ1608では、ユーザが操作したスイッチの種類(SW2、或いはSW3)に応じて、ステップ数を変更するステップ変更処理を行う。その後、一連の処理を終了する。
 ステップ1605において、現在選択されている項目がコマンドであると判定すると、ステップ1609の処理に移行する。
 ステップ1609では、ユーザが操作したスイッチの種類(SW2、或いはSW3)に応じて、イベントデータのコマンドの種類を変更する処理を行う。その後、一連の処理を終了する。
 ステップ1605において、現在選択されている項目がパラメータであると判定すると、ステップ1610の処理に移行する。
 ステップ1610では、ユーザが操作したスイッチの種類(SW2、或いはSW3)に応じて、パラメータの種類を変更する処理を行う。その後、一連の処理を終了する。
 一方、ステップ1603でNOと判定した場合、ステップ1611の処理に移行する。このステップ1611では、スイッチSW6〜SW9、即ちカーソルスイッチがオンされたか否か判定する。ユーザがカーソルスイッチを操作した場合、その判定はYESとなってステップ1612の処理に移行する。そうでない場合、その判定はNOとなり、ここで一連の処理を終了する。
 ステップ1612では、オンされたスイッチの種類に応じて、カーソルを移動させるカーソル移動処理を行う。このカーソル移動処理により、カーソルは、スイッチSW6〜SW9に対する操作に対応して、イベントリスト画面上を項目単位で移動することになる。このカーソル移動処理を終了した後、一連の処理を終了する。
 このようにして、ユーザが行った操作内容に対応して、イベントデータの各項目の内容が変更される。
 図17は、上記ステップ1607の拍変更処理の動作フローチャートである。この図17を参照して、次に拍変更処理について詳細に説明する。
 ステップ1701〜1704では、各種変数に対し、拍の変更において必要となる値を代入することが行われる。
 先ず、ステップ1701では、カーソルで指定されているイベントデータの第2ワード、即ち小節先頭からのクロック数(図5参照)を、変数timing_dataに代入する。続くステップ1702では、この変数timing_dataの値から、拍数、ステップ数を求め、それらの値を変数beat_num 、変数step_num にそれぞれ代入する。その後、ステップ1703の処理に移行する。
 変数beat_num 、及び変数step_num は、表示されているタイミングの項目の拍部分、ステップ部分に対応する値である。例えば小節先頭からのクロック数、即ち変数timing_dataの値が1200で、拍子が4/4拍子であった場合(1拍のクロック数は480である)、変数beat_num 、及び変数step_num の各値は、それぞれ、2、240となる。即ち、変数beat_num 、及び変数step_num の各値は、小節先頭からのクロック数を1拍のクロック数で除算した際の商と余りとなる。なお、上記の例は、図13(a)において、カーソルが表示されている最下段の行のタイミング項目を例としたものである。
 ステップ1703では、変数bar clock に、カーソルで指定されたイベントデータが属する小節(以降、現在小節と記す)のクロック数を代入する。その後、ステップ1704において、変数bar clock の値から、現在小節における拍数の最大値、及び拍数をその最大値とした際のステップ数を求め、それらの値を変数beat_max 、及び変数step_max にそれぞれ代入する。
 例えば、拍子が4/4拍子であった場合、変数 bar_clock 、変数beat_num、及び変数step_num の各値は、それぞれ、1920、3、479となる。また、拍子が9/8拍子であった場合、変数 bar_clock 、変数beat_num 、及び変数step_num の各値は、それぞれ、2160、4、239となる。変数beat_num 、及び変数step_num の各値は、小節のクロック数を1拍のクロック数で除算した際の商と余りである。
 なお、現在小節のクロック数は、次小節の先頭のイベントデータに、第2ワードとして格納されている(図5参照)。その次小節の先頭のイベントデータは、図4に示すように、配列SNG_BAR_TBLから配列SNG_BAR_PTRのクウォンタイズ処理するトラックの先頭要素番号が格納されている領域を特定し、その特定した配列SNG_BAR_PTRの領域内の先頭要素番号を順次検索していくことで、配列SNG_SONG内のそのデータにアクセスする。
 ステップ1704に続くステップ1705では、変数step_num の値は変数step_max の値よりも大きいか否か判定する。変数step_num の値は変数step_max の値よりも大きい場合、その判定はYESとなってステップ1706の処理に移行する。そうでない場合、その判定はNOとなってステップ1707の処理に移行する。ステップ1706では、変数beat_max の値をデクリメントし、その後、ステップ1707の処理に移行する。
 上記ステップ1705、1706の処理は、以下の理由により行われる。
 第3の実施の形態では、イベントデータの小節先頭からのクロック数が小節のクロック数を超えないようにしている。例えば現在小節の拍子が9/8拍子であれば、変数step_max には239、変数beat_max には4がそれぞれ代入される。
 各変数beat_num(拍数)の値において許される変数step_num(ステップ数)の値は、変数beat_num(拍数)の値が4(変数beat_max)のときは0〜239、変数beat_num(拍数)が0〜3のときには0〜479である。
 上記の例において、変数step_num の値が変数step_max の値より大きい場合、変数beat_num の値を3から4に変更すると、変更後の小節先頭からのクロック数は小節のクロック数を超えてしまうことになる。しかし、その場合に、変数beat_max の値をデクリメントすると、変数beat_num の値としては3が上限値となり、変更後の小節先頭からのクロック数が小節のクロック数を超えてしまうことが回避される。即ち例えば拍数が3でステップ数が479から、拍数が4でステップ数が479に変更されることはなくなる。ステップ1705、1706は、これを実現するために、変数beat_max の値を補正する処理である。
 ステップ1707以降の処理では、ユーザのスイッチSW2、或いはSW3に対する操作に応じて、拍数、即ち変数beat_num の値を変更し、その変更をRAM203に格納されているイベントデータに反映されることが行われる。
 先ず、ステップ1707では、アップダウンフラグの値の判定を行う。ユーザがスイッチSW2を操作した場合、アップダウンフラグの値は0となってステップ1708の処理に移行する。
 ステップ1708では、変数beat_num の値は変数beat_max の値とは等しくないか否か判定する。変数beat_num の値は変数beat_max の値と等しい、即ち変数beat_num の値が上限値であった場合、その判定はNOとなってステップ1710の処理に移行する。そうでない場合、その判定はYESとなってステップ1709の処理に移行する。
 ステップ1709では、変数beat_num の値をインクリメントする。これにより、ユーザが指示した内容に応じて表示されている拍数が増加することになる。変数beat_max の値は、上述したように、変数step_num の値に応じて補正されている。このため、変数beat_num をインクリメントしても、これによって小節先頭からのクロック数が小節のクロック数を超えることはない。ステップ1709の処理を終了した後、ステップ1710の処理に移行する。
 ステップ1710では、変数beat_num の値、及び変数step_num の値から、変数timing_dataの値、即ち小節先頭からのクロック数を求める。これは、ステップ1702とは逆の方法により算出される。小節先頭からのクロック数を求めると、次にステップ1711において、そのクロック数を、イベントデータの第2ワードとしてRAM203に書き込む処理を行う。
 一方、ステップ1707において、アップダウンフラグの値は1と判定した場合、ステップ1712の処理に移行する。この場合は、ユーザがスイッチSW3の操作を行った場合である。
 ステップ1712では、変数beat_num の値が0に等しくないか否か判定する。拍数として0が表示されていた場合、その判定はNOとなってステップ1710の処理に移行する。そうでない場合、その判定はYESとなってステップ1713の処理に移行する。
 ステップ1713では、変数beat_num の値をデクリメントする。これにより、ユーザが指示した内容に応じて表示されている拍数が減少することになる。その後、ステップ1710の処理に移行する。
 このように、ユーザが拍数の変更を指示した場合、その指示内容に従って変更した後の発音開始タイミング(小節先頭からのクロック数)が、小節の外のタイミングとならないように監視しながら、拍数の変更が行われる。
 図18は、上記ステップ1608のステップ変更処理の動作フローチャートである。この図18を参照して、ステップ変更処理について詳細に説明する。
 ステップ1801〜1804では、各種変数に対し、ステップ数の変更において必要となる値を代入することが行われる。
 先ず、ステップ1801では、カーソルで指定されているイベントデータの第2ワード、即ち小節先頭からのクロック数(図5参照)を、変数timing_dataに代入する。続くステップ1802では、この変数timing_dataの値から、拍数、ステップ数を求め、それらの値を変数beat_num 、変数step_num にそれぞれ代入する。その後、ステップ1803の処理に移行する。
 変数beat_num 、及び変数step_num は、表示されているタイミングの項目の拍部分、ステップ部分に対応する値である。例えば小節先頭からのクロック数、即ち変数timing_dataの値が1200で、拍子が4/4拍子であった場合(1拍のクロック数は480である)、変数beat_num 、及び変数step_num の各値は、それぞれ、2、240となる。即ち、変数beat_num 、及び変数step_num の各値は、小節先頭からのクロック数を1拍のクロック数で除算した際の商と余りとなる。
 ステップ1803では、変数 bar_clock に、カーソルで指定されたイベントデータが属する現在小節のクロック数を代入する。その後、ステップ1804において、変数 bar_clock の値から、現在小節における拍数の最大値、及び拍数をその最大値とした際のステップ数を求め、それらの値を変数beat_max 、及び変数step_max にそれぞれ代入する。
 例えば、拍子が4/4拍子であった場合、変数 bar_clock 、変数beat_num、及び変数step_num の各値は、それぞれ、1920、3、479となる。また、拍子が9/8拍子であった場合、変数 bar_clock 、変数beat_num 、及び変数step_num の各値は、それぞれ、2160、4、239となる。変数beat_num 、及び変数step_num の各値は、小節のクロック数を1拍のクロック数で除算した際の商と余りである。
 なお、現在小節のクロック数は、次小節の先頭のイベントデータに、第2ワードとして格納されている(図5参照)。その次小節の先頭のイベントデータは、図4に示すように、配列SNG_BAR_TBLから配列SNG_BAR_PTRのクウォンタイズ処理するトラックの先頭要素番号が格納されている領域を特定し、その特定した配列SNG_BAR_PTRの領域内の先頭要素番号を順次検索していくことで、配列SNG_SONG内のそのデータにアクセスする。
 ステップ1804に続くステップ1805では、変数beat_num の値は変数beat_max の値と等しいか否か判定する。変数beat_num の値は変数beat_max の値に等しくない場合、その判定はYESとなってステップ1806の処理に移行する。そうでない場合、その判定はNOとなってステップ1807の処理に移行する。ステップ1806では、変数step_max に479を代入する。その後、ステップ1807の処理に移行する。
 上記ステップ1805、1806の処理は、以下の理由により行われる。
 第3の実施の形態では、イベントデータの小節先頭からのクロック数が小節のクロック数を超えないようにしている。例えば現在小節の拍子が9/8拍子であれば、変数step_max には239、変数beat_max には4がそれぞれ代入される。
 各変数beat_num(拍数)の値において許される変数step_num(ステップ数)の値は、変数beat_num(拍数)の値が4(変数beat_max)のときは0〜239、変数beat_num (拍数)が0〜3のときには0〜479である。
 上記の例のように、変数beat_num の値が変数beat_max の値と等しいか否かにより、変数step_num の値としての上限値は変化する。ステップ1805、1806は、このように拍数に応じて変化するステップ数の上限値を適正な値に補正するための処理である。
 ステップ1807以降の処理では、ユーザのスイッチSW2、或いはSW3に対する操作に応じて、ステップ数、即ち変数step_num の値を変更し、その変更をRAM203に格納されているイベントデータに反映されることが行われる。
 先ず、ステップ1807では、アップダウンフラグの値の判定を行う。ユーザがスイッチSW2を操作した場合、アップダウンフラグの値は0となってステップ1808の処理に移行する。
 ステップ1808では、変数step_num の値は変数step_max の値とは等しくないか否か判定する。変数step_num の値は変数step_max の値と等しい、即ち変数step_num の値が上限値であった場合、その判定はNOとなってステップ1810の処理に移行する。そうでない場合、その判定はYESとなってステップ1809の処理に移行する。
 ステップ1809では、変数step_num の値をインクリメントする。これにより、ユーザが指示した内容に応じて表示されているステップ数が増加することになる。変数step_num の値は、上述したように、変数beat_num の値に応じて補正されている。このため、変数step_num をインクリメントしても、これによって小節先頭からのクロック数が小節のクロック数を超えることはない。ステップ1809の処理を終了した後、ステップ1810の処理に移行する。
 ステップ1810では、変数beat_num の値、及び変数step_num の値から、変数timing_dataの値、即ち小節先頭からのクロック数を求める。これは、ステップ1802とは逆の方法により算出される。小節先頭からのクロック数を求めると、次にステップ1811において、そのクロック数を、イベントデータの第2ワードとしてRAM203に書き込む処理を行う。
 一方、ステップ1807において、アップダウンフラグの値は1と判定した場合、ステップ1812の処理に移行する。この場合は、ユーザがスイッチSW3の操作を行った場合である。
 ステップ1812では、変数beat_num の値が0に等しくないか否か判定する。拍数として0が表示されていた場合、その判定はNOとなってステップ1810の処理に移行する。そうでない場合、その判定はYESとなってステップ1813の処理に移行する。
 ステップ1813では、変数step_num の値をデクリメントする。これにより、ユーザが指示した内容に応じて表示されているステップ数が減少することになる。その後、ステップ1810の処理に移行する。
 このように、ユーザがステップ数の変更を指示した場合、その指示内容に従って変更した後の発音開始タイミング(小節先頭からのクロック数)が、小節の外のタイミングとならないように監視しながら、ステップ数の変更が行われる。
 なお、第3の実施の形態では、図13に示すようにイベントデータの小節先頭からのクロック数を拍数、及びステップ数で画面上に表現しているが、例えば小節先頭からのクロック数をそのまま画面上に数値として表示させても良い。
 また、第3の実施の形態では、イベントデータの発音開始タイミングの変更を制限しているが、予め存在するイベントデータに対しては、その発音開始タイミングを、それが属する小節内となるように、自動的に発音タイミングを修正するようにしても良い。
 また、第1〜第3の実施の形態は、電子楽器100に本発明を適用したものであるが、適用はこれに限定されるものではない。本発明は、シーケンサーをはじめ、シーケンサー機能を搭載した装置に幅広く適用できるものである。
第1の実施の形態が適用されたシステムの外観を示す図である。 電子楽器の構成のブロック図である。 RAM203に記憶される楽曲データのデータフォーマットを示す図である(その1)。 RAM203に記憶される楽曲データのデータフォーマットを示す図である(その2)。 ノートイベントデータとコントロールイベントデータのデータフォーマットを示す図である。 ジャンプイベントデータ群のデータフォーマットを示す図である。 クウォンタイズ処理の範囲指定方法を説明する図である。 全体処理の動作フローチャートである。 スイッチ処理の動作フローチャートである。 第1の実施の形態によるクウォンタイズ処理の動作フローチャートである。 各拍子における1小節の時間的長さを示す図である。 第2の実施の形態によるクウォンタイズ処理の動作フローチャートである。 発音開始タイミングの変更方法を説明する図である。 第3の実施の形態によるスイッチ処理の動作フローチャートである。 イベントリストモード処理の動作フローチャートである。 リストモードスイッチ処理の動作フローチャートである。 拍変更処理の動作フローチャートである。 ステップ変更処理の動作フローチャートである。
符号の説明
100  電子楽器
102  スイッチ群
110  テレビ
201  CPU
202  ROM
203  RAM
204  画像データ出力部
205  サウンドシステム
206  MIDIインターフェイス

Claims (3)

  1.  指定範囲内に存在するシーケンスデータの発音開始タイミングを変更するクウォンタイズを行う方法であって、
     前記指定範囲として複数の小節にまたがる範囲が指定されたとき、前記小節を処理単位として、各小節毎に、前記シーケンスデータの発音開始タイミングを、それが属する小節の拍子に基づいて変更していく、
     ことを特徴とするシーケンスデータのクウォンタイズ方法。
  2.  シーケンスデータの発音開始タイミングを制御する装置において、
     前記シーケンスデータの発音開始タイミングを変更させる範囲を指定するための指定手段と、
     前記指定手段により、複数の小節にまたがる範囲が指定されたとき、前記小節を処理単位として、各小節毎に、前記シーケンスデータの発音開始タイミングを、それが属する小節の拍子に基づいて変更する制御手段と、
     を具備したことを特徴とするシーケンスデータのタイミング処理装置。
  3.  シーケンスデータの発音開始タイミングを制御する装置において、
     前記シーケンスデータの発音開始タイミングを指定するための指定手段と、
     前記指定手段により指定された前記シーケンスデータの発音開始タイミングが、該シーケンスデータが属する小節内であるか否か判定する判定手段と、
     前記シーケンスデータの発音開始タイミングが、該シーケンスデータが属する小節内ではないと前記判定手段が判定したとき、前記指定手段による指定を無効とする制御手段と、
     を具備したことを特徴とするシーケンスデータのタイミング処理装置。
JP2003387413A 2003-11-18 2003-11-18 シーケンスデータのタイミング処理装置 Abandoned JP2004046280A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2003387413A JP2004046280A (ja) 2003-11-18 2003-11-18 シーケンスデータのタイミング処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003387413A JP2004046280A (ja) 2003-11-18 2003-11-18 シーケンスデータのタイミング処理装置

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP7234525A Division JPH0981131A (ja) 1995-09-12 1995-09-12 シーケンスデータのクウォンタイズ方法、及びシーケンスデータのタイミング処理装置

Publications (1)

Publication Number Publication Date
JP2004046280A true JP2004046280A (ja) 2004-02-12

Family

ID=31713002

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003387413A Abandoned JP2004046280A (ja) 2003-11-18 2003-11-18 シーケンスデータのタイミング処理装置

Country Status (1)

Country Link
JP (1) JP2004046280A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111128232A (zh) * 2019-12-26 2020-05-08 广州酷狗计算机科技有限公司 音乐的小节信息确定方法、装置、存储介质及设备

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111128232A (zh) * 2019-12-26 2020-05-08 广州酷狗计算机科技有限公司 音乐的小节信息确定方法、装置、存储介质及设备
CN111128232B (zh) * 2019-12-26 2022-11-15 广州酷狗计算机科技有限公司 音乐的小节信息确定方法、装置、存储介质及设备

Similar Documents

Publication Publication Date Title
US4694724A (en) Synchronizing signal generator for musical instrument
US7314993B2 (en) Automatic performance apparatus and automatic performance program
EP0980061A1 (en) Arrangement apparatus by modification of music data with arrangement data
US5495072A (en) Automatic performance apparatus
JP5228315B2 (ja) 自動伴奏生成装置および自動伴奏生成方法を実現するためのプログラム
JP2940129B2 (ja) リズム演奏装置
JP2004317819A (ja) 自動演奏装置
JP2004046280A (ja) シーケンスデータのタイミング処理装置
JP4270102B2 (ja) 自動演奏装置及びプログラム
JP4506147B2 (ja) 演奏再生装置及び演奏再生制御プログラム
JP3709821B2 (ja) 楽曲情報編集装置及び楽曲情報編集プログラム
JPH0981131A (ja) シーケンスデータのクウォンタイズ方法、及びシーケンスデータのタイミング処理装置
JP2017015957A (ja) 演奏記録装置およびプログラム
WO2023032137A1 (ja) データ変更方法、データ再生方法、プログラムおよびデータ変更装置
JP4572980B2 (ja) 自動演奏装置及びプログラム
JP4138919B2 (ja) 量子化装置および楽譜表示装置
JP3767418B2 (ja) 自動演奏装置及び自動演奏制御プログラム
JP4835434B2 (ja) 演奏パターン再生装置及びそのコンピュータプログラム
JP4241833B2 (ja) 自動演奏装置及びプログラム
JP4685226B2 (ja) 波形再生用自動演奏装置
JP3307598B2 (ja) 演奏記録再生装置
JPH0981137A (ja) パラメータ制御装置、及び自動演奏装置
JP3797180B2 (ja) 楽譜表示装置及び楽譜表示プログラム
JP3709820B2 (ja) 楽曲情報編集装置及び楽曲情報編集プログラム
JP3407563B2 (ja) 自動演奏装置及び自動演奏方法

Legal Events

Date Code Title Description
A762 Written abandonment of application

Free format text: JAPANESE INTERMEDIATE CODE: A762

Effective date: 20050913