以下、図面を参照して本発明の実施形態について説明する。
[第1実施形態]
A.構成
図1は、本発明の第1実施形態による再生装置100の全体構成を示すブロック図である。この図において、CPU10は、操作部13が発生するスイッチイベントに応じて装置各部を制御するものであり、その特徴的な処理動作については追って詳述する。ROM11には、CPU10にロードされる各種プログラムのデータが記憶される。ここで言う各種プログラムとは、後述するメインルーチン、設定処理および表示処理を含む。なお、設定処理は、リズム情報抽出処理、先頭小節情報抽出処理、アクセント箇所サーチ処理、スネア切替点設定処理および小節移行処理から構成される。
RAM12は、ワークエリアおよびデータエリアを備える。RAM12のワークエリアには、CPU10の処理に用いられる各種レジスタ・フラグデータが一時記憶される。RAM12のデータエリアは、図2に図示するように、曲データエリアMDE、リズム情報抽出エリアRSEおよび画像データエリアから構成される。以下、図2を参照して曲データエリアMDEに格納される曲データおよびリズム情報抽出エリアRSEに格納されるリズム情報の構成を説明する。
曲データエリアMDEには、スライドショーのBGMとして再生される曲データが記憶される。いわゆる絶対時間形式で形成される曲データは、曲を構成する各音等を表す一組のタイムおよびイベントが曲進行に対応した時系列のアドレス順に複数組記憶される。タイムは曲開始時点からの経過時間でイベントのタイミングを表す。音高要素を有する非リズム系の楽音を表すイベントは、ノートオン/ノートオフを識別する識別データ、ノートナンバ(音高)およびベロシティ(音量)から構成される。一方、音高要素を持たないリズム系の楽音を表すイベントは、ノートオンを識別する識別データ、リズム音色(クラッシュシンバル、スネアドラム等)およびベロシティ(音量)から構成される。
リズム情報抽出エリアRSEには、後述するリズム情報抽出処理によって曲データエリアMDEの曲データから抽出した一連のリズム情報が格納される。リズム情報は、曲データ中から抽出されるリズム系の楽音のタイムおよびイベントにアクセントフラグAFを付加し、(タイム、AF、イベント)を一組とするデータである。アクセントAFが意図するところについては追って述べる。画像データエリアIDEには、スライドショー再生される複数枚の画像データ1〜nが格納される。
再び図1を参照して実施形態の構成を説明する。図1において、操作部13は、例えば動作モードを選択するモード選択スイッチや、曲データの再生に同期して画像データを順次画面表示するスライドショーの開始および停止を指示するスタートスイッチなどの各種操作スイッチを備え、ユーザのスイッチ操作に応じた種類のスイッチイベントを発生する。このスイッチイベントはCPU10に取り込まれる。
表示部14は、CPU10から供給される表示制御信号に応じて画像を画面表示(スライドショー再生)する他、装置の設定状態などを画面表示する。音源15は、波形メモリ読み出し方式で構成され、曲データに基づきCPU10が発生する楽音パラメータに従って形成した楽音信号を出力する。サウンドシステム16は、音源15から出力される楽音信号にノイズ除去するフィルタリングを施した後、出力増幅してスピーカから放音する。
B.動作
次に、図3〜図14を参照して上記構成による再生装置100の動作を説明する。以下では、CPU10が実行するメインルーチン、設定処理、リズム情報抽出処理、先頭小節情報抽出処理、アクセント箇所サーチ処理、スネア切替点設定処理、小節移行処理および表示処理の各動作について述べる。
(1)メインルーチンの動作
装置電源が投入されると、CPU10は図3に図示するメインルーチンを実行してステップSA1に進み、RAM12のワークエリアに設けられる各種レジスタやフラグ類をリセットしたり、音源15に対して各種レジスタ・フラグを初期化するよう指示するイニシャライズを実行する。そして、初期化が完了すると、CPU10は次のステップSA2に進み、例えばモード選択スイッチが操作された場合にはスイッチ操作で選択された動作モードの実行を指示するスイッチ処理を実行する。
続いてステップSA3では、上記ステップSA2のスイッチ処理において「設定モード」の実行が指示されたか否かを判断する。「設定モード」の実行が指示された場合には、判断結果が「YES」になり、ステップSA4を介して設定処理(後述する)を実行した後、上述のステップSA2に処理を戻す。
一方、「設定モード」の実行が指示されなければ、上記ステップSA3の判断結果は「NO」になり、ステップSA5に進み、「表示モード」の実行が指示されたか否かを判断する。「表示モード」の実行が指示されると、判断結果は「YES」となり、ステップSA6を介して表示処理(後述する)を実行した後、上述のステップSA2に処理を戻す。
これに対し、「設定モード」および「再生モード」以外の動作モードの実行が指示された場合には、上記ステップSA5の判断結果が「NO」になり、ステップSA7に進み、例えば入出力部(不図示)を介してメモリカード等の外部記録媒体からスライドショー再生用の新たな画像データを取り込んでRAM12の画像データエリアIDEに登録するなどの、その他の処理を実行した後、上述のステップSA2に戻る。
(2)設定処理の動作
次に、図4を参照して設定処理の動作を説明する。上述したメインルーチンのステップSA4(図3参照)を介して本処理が実行されると、CPU10は図4に図示するステップSB1に進み、リズム情報抽出処理を実行する。リズム情報抽出処理では、後述するように、リズム音色を含むリズム系イベントが検出されるまでの間、曲データの読み出しを進め、その過程で読み出されるタイムをレジスタTに累算しておき、リズム音色を含むリズム系イベントが検出されたら、レジスタTの値をタイムとして書き込みアドレスWADに従ってリズム情報抽出エリアRSEにストアする。
そして、レジスタTをゼロリセットした後、フラグ値「0」のアクセントフラグAFと、検出されたリズム音色を含むリズム系イベントとを書き込みアドレスWADの歩進に応じてリズム情報抽出エリアRSEに順次ストアする。こうした処理を繰り返すことによって、曲データ中から抽出した一連のリズム音を表すリズム情報(タイム、AF、イベント)をリズム情報抽出エリアRSEに格納するようになっている。
続いて、ステップSB2では、先頭小節情報抽出処理を実行する。先頭小節情報抽出処理では、後述するように、曲データの再生テンポと拍子とに応じて1小節タイム(1小節分の時間長)を算出してレジスタBTにストアすると共に、リズム情報抽出エリアRSE(図2参照)の先頭アドレスをレジスタRAD(読み出しアドレスRAD)にセットした後、レジスタTをゼロリセットする。
次いで、ステップSB3では、アクセント箇所サーチ処理を実行する。アクセント箇所サーチ処理では、後述するように、リズム情報抽出エリアRSEに格納されるリズム情報を1小節分順番に読み出し、その中で「スネア」または「クラッシュシンバル」のリズム音色を含むイベントをアクセント箇所として検索し、該当するイベントが検索された場合には、そのイベントに続くアクセントフラグAFのフラグ値を「1」にセットしてアクセント箇所であることを表す。なお、このアクセント箇所が意図するところについては追って述べる。
次に、ステップSB4では、スネア切替点設定処理を実行する。スネア切替点設定処理では、後述するように、アクセント箇所サーチ処理(図7参照)によってリズム情報抽出エリアRSEにおける1小節分のリズム情報から抽出された「スネア」または「クラッシュシンバル」のリズム音色を含むイベントを参照してスネア連打を表す2つのイベントを検索し、該当する2つのイベントが存在する場合には、それぞれに対応するアクセントフラグAFのフラグ値を「2」にセットするスネア切替点設定を行う。
また、1小節中にスネア連打が存在せず、スネア切替点を設定することが出来ない場合には、1小節分のリズム情報から抽出された「スネア」または「クラッシュシンバル」のリズム音色を含むイベントを参照してクラッシュシンバル単打を表すイベントを検索し、該当するイベントが存在すると、それに対応するアクセントフラグAFを「3」にセットするシンバル切替点設定を行う。なお、本処理で設定されるスネア切替点又はシンバル切替点は、後述する表示処理で実行されるスライドショー再生における画像表示態様の切り替えに用いられる。
そして、ステップSB5に進むと、小節移行処理を実行する。小節移行処理では、後述するように、小節終端アドレスEADを読み出しアドレスRADにセットし、この読み出しアドレスRADを歩進させ、歩進された読み出しアドレスRADに応じてリズム情報抽出エリアRSEから読み出されるデータが有るか否か、つまりリズム情報の終端に達したかどうかを判断し、リズム情報の終端に達した場合に、フラグEOFに「1」をセットしてリズム情報の終端を表す。
続いて、ステップSB6では、フラグEOFが「1」であるか否か、つまりリズム情報の終端に達したかどうかを判断する。リズム情報の終端に達していなければ(フラグEOFが「0」の場合)、判断結果は「NO」となり、前述のステップSB3に処理を戻す。以後、上述したステップSB3〜SB6を繰り返し、リズム情報の終端に達してフラグEOFが「1」になると、上記ステップSB6の判断結果が「YES」になり、ステップSB7に進み、フラグEOFをゼロリセットして本処理を終え、メインルーチンに復帰する。
(3)リズム情報抽出処理の動作
次に、図5を参照してリズム情報抽出処理の動作を説明する。上述した設定処理のステップSB1(図4参照)を介して本処理が実行されると、CPU10は図5に図示するステップSC1に進み、RAM12のデータエリアにリズム情報抽出エリアRSE(図2参照)を確保すると共に、曲データエリアMDE(図2参照)の読み出しアドレスRADおよび書き込みアドレスWADを初期化する。
続いて、ステップSC2では、読み出しアドレスRADにより曲データエリアMDEから曲データを読み出す。次いで、ステップSC3では、読み出された曲データが「タイム」又は「イベント」の何れであるかを判別する。読み出された曲データが「タイム」であると、ステップSC4に進み、「タイム」の値をレジスタTに累算する。続くステップSC5では、読み出しアドレスRADを進める。そして、ステップSC6では、歩進させた読み出しアドレスRADに対応する曲データの有無、つまり全ての曲データを読み出し終えたかどうかを判断する。
全ての曲データを読み出し終えていなければ、上記ステップSC6の判断結果は「NO」になり、上述したステップSC2に処理を戻し、引き続き歩進させた読み出しアドレスRADに応じた曲データの読み出しを進める。そして、読み出された曲データが「イベント」であったとすると、ステップSC7に進み、当該「イベント」が「ノートナンバ」又は「リズム音色」の何れを含むか、つまり、非リズム系イベント又はリズム系イベントの何れであるかを判別する。ノートナンバを含む非リズム系イベントであると、上述のステップSC5に進み、曲データの読み出しを進めるべく読み出しアドレスRADを歩進させる。
一方、リズム音色を含むリズム系イベントならば、ステップSC8に進み、リズム情報抽出エリアRSEにおいて、書き込みアドレスWADで指定されるエリアにレジスタTの値をタイムとしてストアする。この後、ステップSC9に進み、レジスタTをゼロリセットし、続くステップSC10では、書き込みアドレスWADを進める。
次いで、ステップSC11では、歩進された書き込みアドレスWADで指定されるエリアにフラグ値「0」のアクセントフラグAFをストアする。そして、ステップSC12に進み、書き込みアドレスWADを進め、続くステップSC13では、読み出しアドレスRADに応じて読み出されたイベント(リズム音色を含むリズム系イベント)を、歩進された書き込みアドレスWADで指定されるエリアにストアする。
こうして、曲データから抽出したリズム音のタイムおよびイベントにアクセントフラグAFを追加した一組のリズム情報(タイム、AF、イベント)がリズム情報抽出エリアRSEにストアされると、ステップSC14に進み、書き込みアドレスWADを進めた後、前述のステップSC5に進む。進み、読み出しアドレスRADを進めて曲データの読み出しを進める。
以後、リズム音色を含むリズム系イベントが検出されるまでの間、曲データの読み出しを進め、その過程で読み出されるタイムをレジスタTに累算しておき、リズム音色を含むリズム系イベントが検出されたら、レジスタTの値をタイムとして書き込みアドレスWADに従ってリズム情報抽出エリアRSEにストアする。そして、レジスタTをゼロリセットした後、フラグ値「0」のアクセントフラグAFと、検出されたリズム音色を含むリズム系イベントとを書き込みアドレスWADの歩進に応じてリズム情報抽出エリアRSEに順次ストアする。こうした処理を繰り返すことによって、曲データ中から抽出した一連のリズム音を表すリズム情報(タイム、AF、イベント)がリズム情報抽出エリアRSEに格納される。
(4)先頭小節情報抽出処理の動作
次に、図6を参照して先頭小節情報抽出処理の動作を説明する。前述した設定処理のステップSB2(図4参照)を介して本処理が実行されると、CPU10は図6に図示するステップSD1に進み、曲データの再生テンポと拍子とに応じて1小節タイム(1小節分の時間長)を算出してレジスタBTにストアする。次いで、ステップSD2では、リズム情報抽出エリアRSE(図2参照)の先頭アドレスをレジスタRAD(読み出しアドレスRAD)にセットする。そして、ステップSD3では、レジスタTをゼロリセットして本処理を終える。
(5)アクセント箇所サーチ処理の動作
次に、図7を参照してアクセント箇所サーチ処理の動作を説明する。前述した設定処理のステップSB3(図4参照)を介して本処理が実行されると、CPU10は図7に図示するステップSE1に進み、上述の先頭小節情報抽出処理にて設定された読み出しアドレスRAD、すなわち小節先頭アドレスをレジスタradに退避格納しておく。続いて、ステップSE2では、読み出しアドレスRADに応じてリズム情報抽出エリアRSEからデータを読み出す。
そして、ステップSE3では、読み出されたデータが「タイム」、「イベント」および「その他(アクセントフラグAF)」のいずれであるかを判別する。最初のパスでは、先頭のタイムが読み出されるので、ステップSE4に進み、読み出した「タイム」の値をレジスタTに累算する。そして、ステップSE5に進み、レジスタTの値がレジスタBT以上であるか否か、つまり1小節タイムを超えたかどうかを判断する。1小節タイムを超えていなければ、判断結果は「NO」になり、ステップSE12に進み、読み出しアドレスRADを進めた後、上述のステップSE2に処理を戻して次のデータを読み出す。
読み出しアドレスRADに応じてリズム情報抽出エリアRSEから読み出されたデータが「イベント」であると、上記ステップSE3を介してステップSE7に進む。ステップSE7〜SE8では、イベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」であるか否かを判断する。イベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」でなければ、上記ステップSE7〜SE8の各判断結果はいずれも「NO」となり、ステップSE12に進み、読み出しアドレスRADを進めた後、上述のステップSE2に処理を戻して次のデータを読み出す。また、読み出しアドレスRADに応じてリズム情報抽出エリアRSEから読み出されたデータが「その他(アクセントフラグAF)」である場合も同様に、ステップSE3を介してステップSE12に進み、読み出しアドレスRADを進めた後、上述のステップSE2に処理を戻して次のデータを読み出す。
これに対し、イベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」の何れかであったとすると、上記ステップSE7〜SE8のいずれかの判断結果が「YES」となり、ステップSE9に進み、読み出しアドレスRADを進める。次いで、ステップSE10では、歩進された読み出しアドレスRADで指定されるデータがアクセントフラグAFであるか否かを判断する。アクセントフラグAFでなければ、判断結果は「NO」になり、ステップSE12に進み、読み出しアドレスRADを進めた後、上述のステップSE2に処理を戻して次のデータを読み出す。
一方、歩進された読み出しアドレスRADで指定されるデータがアクセントフラグAFであったとすると、上記ステップSE10の判断結果は「YES」になり、ステップSE11に進み、アクセントフラグAFに「1」をセットする。これにより、「スネア」または「クラッシュシンバル」のリズム音色を含むイベントがアクセント箇所として検索されることになる。この後、ステップSE12に進み、読み出しアドレスRADを進めた後、上述のステップSE2に処理を戻して次のデータを読み出す。
以後、レジスタTの値がレジスタBTの1小節タイムを超える迄、すなわち1小節分のリズム情報についてアクセント箇所を検索し終えるまでの間、上述した動作を繰り返す。そして、読み出した「タイム」を累算したレジスタTの値がレジスタBT以上となり、1小節分のリズム情報についてアクセント箇所を検索し終えると、上述したステップSE5の判断結果が「YES」となり、ステップSE6に進み、現在の読み出しアドレスRADをレジスタEADに保持して本処理を終える。なお、レジスタEADに保持されたアドレスRADを小節終端アドレスEADと称す。
このように、アクセント箇所サーチ処理では、リズム情報抽出エリアRSEに格納されるリズム情報を1小節分順番に読み出し、その中で「スネア」または「クラッシュシンバル」のリズム音色を含むイベントをアクセント箇所として検索し、該当するイベントが検索された場合には、そのイベントに続くアクセントフラグAFのフラグ値を「1」にセットしてアクセント箇所であることを表す。このアクセント箇所が意図するところについては追って述べる。
(6)スネア切替点設定処理の動作
以下では、先ず本処理の動作を概説した後、図8〜図10に図示する本処理のフローチャートを参照して動作を詳述する。スネア切替点設定処理では、図8および図9に図示するステップSF1〜SF16においてスネア切替点の検索/設定を行い、図10に図示するステップSF17〜SF30においてシンバル切替点の検索/設定を行う。
ステップSF1〜SF16のスネア切替点の検索/設定では、上述のアクセント箇所サーチ処理(図7参照)によってリズム情報抽出エリアRSEにおける1小節分のリズム情報から抽出された「スネア」または「クラッシュシンバル」のリズム音色を含むイベントを参照してスネア連打を表す2つのイベントを検索し、該当する2つのイベントが存在する場合には、それぞれに対応するアクセントフラグAFのフラグ値を「2」に設定する。フラグ値「2」のアクセントフラグAFが付与された2つのイベントをスネア切替点と称する。
ステップSF17〜SF30のシンバル切替点の検索/設定では、リズム情報抽出エリアRSEにおける1小節分のリズム情報から抽出された「スネア」または「クラッシュシンバル」のリズム音色を含むイベントを参照してクラッシュシンバル単打を表すイベントを検索し、該当するイベントが存在する場合には、それに対応するアクセントフラグAFを「3」に設定する。フラグ値「3」のアクセントフラグAFが付与されたイベントをシンバル切替点と称する。
<スネア切替点の検索/設定>
さて、前述した設定処理のステップSB4(図4参照)を介して本処理が実行されると、CPU10は図8に図示するステップSF1に進み、レジスタradに退避格納しておいた小節先頭アドレスを処理用アドレスADにセットする。続いて、ステップSF2では、処理用アドレスADで指定されるリズム情報抽出エリアRSE中のデータがアクセントフラグAFであるか否かを判断する。アクセントフラグAFでなければ、判断結果は「NO」になり、ステップSF4に進み、処理用アドレスADを進める。
次いで、ステップSF5では、歩進された処理用アドレスADが小節終端アドレスEAD以上であるか否か、すなわち1小節分のリズム情報について検索し終えたかどうかを判断する。検索し終えていなければ、判断結果は「NO」になり、上述のステップSF2に処理を戻す。
そして、歩進された処理用アドレスADで指定されるリズム情報抽出エリアRSE中のデータがアクセントフラグAFになったとする。そうると、上述したステップSF2の判断結果が「YES」になり、ステップSF3に進む。ステップSF3では、処理用アドレスADで指定されたアクセントフラグAFのフラグ値が「1」、つまり対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」であるか否かを判断する。対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」以外であったならば、判断結果は「NO」になり、上述したステップSF4に進む。
一方、処理用アドレスADで指定されたアクセントフラグAFのフラグ値が「1」、つまり対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」であると、上記ステップSF3の判断結果が「YES」になり、ステップSF6に進み、現在の処理用アドレスADをレジスタad1に退避格納する。次いで、ステップSF7では、アクセントフラグAFに続くイベントを指定するよう処理用アドレスADを歩進させ、次のステップSF8では、歩進された処理用アドレスADで指定されるイベントに含まれるリズム音色が「スネア」であるか否かを判断する。イベントに含まれるリズム音色が「スネア」でなければ、判断結果は「NO」になり、上述のステップSF4に進む。
これに対し、イベントに含まれるリズム音色が「スネア」であると、上記ステップSF8の判断結果は「YES」となり、ステップSF9に進み、処理用アドレスADを進める。そして、ステップSF10では、歩進された処理用アドレスADが小節終端アドレスEAD以上であるか否か、すなわち1小節分のリズム情報について検索し終えたかどうかを判断する。1小節分のリズム情報について検索し終えたならば、判断結果は「YES」になり、後述のステップSF10(図10参照)に進むが、検索し終えていなければ、判断結果が「NO」となり、図9に図示するステップSF11に進む。
ステップSF11では、歩進された処理用アドレスADで指定されるリズム情報抽出エリアRSE中のデータがアクセントフラグAFであるか否かを判断する。アクセントフラグAFでなければ、判断結果は「NO」になり、前述のステップSF4(図8参照)に処理を戻す。これに対し、処理用アドレスADで指定されるデータがアクセントフラグAFであると、上記ステップSF11の判断結果が「YES」になり、ステップSF12に進む。
そして、ステップSF12では、処理用アドレスADで指定されたアクセントフラグAFのフラグ値が「1」、つまり対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」であるか否かを判断する。対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」以外であったならば、判断結果は「NO」になり、前述したステップSF4に戻る。
一方、処理用アドレスADで指定されたアクセントフラグAFのフラグ値が「1」、つまり対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」であると、上記ステップSF12の判断結果が「YES」になり、ステップSF13に進み、現在の処理用アドレスADをレジスタad2に退避格納する。次いで、ステップSF14では、アクセントフラグAFに続くイベントを指定するよう処理用アドレスADを歩進させ、続くステップSF15では、歩進させた処理用アドレスADで指定されるイベントに含まれるリズム音色が「スネア」であるか否かを判断する。
イベントに含まれるリズム音色が「スネア」でなければ、判断結果は「NO」になり、前述のステップSF4に戻るが、イベントに含まれるリズム音色が「スネア」であると、判断結果が「YES」になり、ステップSF16に進み、レジスタad1、ad2に各々格納される処理用アドレスADにより指定されるアクセントフラグAFのフラグ値をそれぞれ「2」に設定した後、前述のステップSF4に処理を戻す。こうして、スネアの連打を表す2つのイベントにそれぞれ対応するアクセントフラグAFのフラグ値を「2」にセットすることでスネア切替点が設定される。
<シンバル切替点の検索/設定>
スネア切替点の検索/設定により1小節分のリズム情報について検索し終えると、図8に図示するステップSF5又はステップSF10の何れかの判断結果が「YES」となり、CPU10は図10に図示するステップSF17に処理を進める。ステップSF17〜SF21では、既にスネア切替点が設定済みであるかどうかを判別し、スネア切替点が設定済みであるならば本処理を完了させ、スネア切替点が未設定ならばステップSF23以降でシンバル切替点の検索/設定を行う。
すなわち、先ずステップSF17では、レジスタradに退避格納しておいた小節先頭アドレスを処理用アドレスADにセットする。つまり、処理用アドレスADを小節先頭を指定するように戻す。続いて、ステップSF18に進み、処理用アドレスADで指定されるリズム情報抽出エリアRSE中のデータがアクセントフラグAFであるか否かを判断する。
アクセントフラグAFでなければ、判断結果は「NO」になり、ステップSF20に進み、処理用アドレスADを進める。次いで、ステップSF21では、歩進された処理用アドレスADが小節終端アドレスEAD以上であるか否か、すなわち1小節分のリズム情報について検索し終えたかどうかを判断する。検索し終えていなければ、判断結果は「NO」になり、上述のステップSF18に処理を戻す。
歩進された処理用アドレスADで指定されるリズム情報抽出エリアRSE中のデータがアクセントフラグAFになると、上述したステップSF18の判断結果が「YES」になり、ステップSF19に進む。ステップSF19では、処理用アドレスADで指定されたアクセントフラグAFのフラグ値が「0」又は「1」であるか否かを判断する。ここで、アクセントフラグAFのフラグ値が「2」、つまりスネア切替点が検出されたら、判断結果は「NO」となり、この場合、シンバル切替点を検索/設定する必要が無い為、本処理を終える。
一方、アクセントフラグAFのフラグ値が「0」又は「1」ならば、上記ステップSF19の判断結果は「YES」となり、ステップSF20に進み、処理用アドレスADを進める。そして、歩進された処理用アドレスADが小節終端アドレスEADを超え、1小節分のリズム情報について検索し終えると、ステップSF21の判断結果が「YES」となり、ステップSF22に進む。
ステップSF22では、レジスタradに退避格納しておいた小節先頭アドレスを処理用アドレスADにセットし、続くステップSF23では、処理用アドレスADで指定されるリズム情報抽出エリアRSE中のデータがアクセントフラグAFであるか否かを判断する。アクセントフラグAFでなければ、判断結果は「NO」になり、ステップSF29に進み、処理用アドレスADを進める。そして、ステップSF29では、歩進された処理用アドレスADが小節終端アドレスEAD以上であるか否か、すなわち1小節分のリズム情報について検索し終えたかどうかを判断する。検索し終えていなければ、判断結果は「NO」になり、上述のステップSF23に処理を戻す。
そして、歩進された処理用アドレスADで指定されるリズム情報抽出エリアRSE中のデータがアクセントフラグAFになったとする。そうすると、上記ステップSF23の判断結果が「YES」になり、ステップSF24に進む。ステップSF24では、処理用アドレスADで指定されたアクセントフラグAFのフラグ値が「1」、つまり対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」であるか否かを判断する。対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」以外であったならば、判断結果は「NO」になり、ステップSF29以降を実行して処理用アドレスADを進め、1小節分のリズム情報について検索し終えたかどうかを判断し、検索し終えていなければ、再びステップSF23に戻る。
一方、処理用アドレスADで指定されたアクセントフラグAFのフラグ値が「1」、つまり対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」であると、上記ステップSF24の判断結果が「YES」になり、ステップSF25に進み、現在の処理用アドレスADをレジスタad1に退避格納する。次いで、ステップSF26では、アクセントフラグAFに続くイベントを指定するよう処理用アドレスADを歩進させ、続くステップSF28では、歩進させた処理用アドレスADで指定されるイベントに含まれるリズム音色が「クラッシュシンバル」であるか否かを判断する。イベントに含まれるリズム音色が「クラッシュシンバル」でなければ、判断結果は「NO」になり、上述のステップSF29に進む。
これに対し、イベントに含まれるリズム音色が「クラッシュシンバル」であると、上記ステップSF27の判断結果は「YES」となり、ステップSF28に進み、レジスタad1に格納される処理用アドレスADにより指定されるアクセントフラグAFのフラグ値を「3」に設定する。これにより、クラッシュシンバルの単打を表すイベントがシンバル切替点に設定される。そして、この後、ステップSF29に進み、処理用アドレスADを進める。次いで、ステップSF30では、1小節分のリズム情報について検索し終えたかどうかを判断し、1小節分のリズム情報について検索し終えたならば、判断結果が「YES」となって本処理を終える。
以上のように、スネア切替点設定処理では、アクセント箇所サーチ処理(図7参照)によってリズム情報抽出エリアRSEにおける1小節分のリズム情報から抽出された「スネア」または「クラッシュシンバル」のリズム音色を含むイベントを参照してスネアの連打を表す2つのイベントを検索し、該当する2つのイベントが存在する場合には、それぞれに対応するアクセントフラグAFのフラグ値を「2」にセットするスネア切替点設定を行う。
1小節中にスネアの連打が存在せず、スネア切替点を設定出来なければ、1小節分のリズム情報から抽出された「スネア」または「クラッシュシンバル」のリズム音色を含むイベントを参照してクラッシュシンバルの単打を表すイベントを検索し、該当するイベントが存在する場合には、それに対応するアクセントフラグAFを「3」にセットするシンバル切替点設定を行うようになっている。なお、スネア切替点又はシンバル切替点は、後述する表示処理で実行されるスライドショー再生における画像表示態様の切り替えに用いられる。
(7)小節移行処理の動作
次に、図11を参照して小節移行処理の動作を説明する。前述した設定処理のステップSB6(図4参照)を介して本処理が実行されると、CPU10は図11に図示するステップSG1に進み、小節終端アドレスEADを読み出しアドレスRADにセットし、続くステップSG2では、読み出しアドレスRADを進める。
そして、ステップSG3では、歩進された読み出しアドレスRADに応じてリズム情報抽出エリアRSEから読み出されるデータが有るか否か、すなわちリズム情報の終端に達したかどうかを判断する。歩進された読み出しアドレスRADがリズム情報の終端に達していなければ、判断結果は「NO」となり、本処理を終えるが、リズム情報の終端に達していると、判断結果が「YES」となり、ステップSG4に進み、フラグEOFに「1」をセットしてリズム情報の終端に達したことを表して本処理を終える。
(8)表示処理の動作
次に、図12〜図14を参照して表示処理の動作を説明する。前述したメインルーチンのステップSA6(図3参照)を介して本処理が実行されると、CPU10は図12に図示するステップSH1に進み、スライドショーの開始又は停止を指示するスタートスイッチがオン操作されたか否かを判断する。スタートスイッチがオン操作されなければ、判断結果は「NO」になり、図13に図示するステップSH11に進み、スタートフラグSTFが「1」であるか否かを判断する。
スタートフラグSTFとは、フラグ値「1」の場合にスライドショーの開始が指示された状態を表し、フラグ値「0」の場合にスライドショーの停止を表すフラグである。また、スタートスイッチは所謂トグル動作するスイッチであり、オン操作に応じてオルタネートにスライドショーの開始とスライドショーの停止を指示する。したがって、ステップSH11では、スライドショーの開始が指示された状態であるかどうかを判断する。スタートスイッチがオン操作されず、スタートフラグSTFが「0」ならば、判断結果は「NO」になり、本処理を終える。
一方、ユーザがスタートスイッチをオン操作すると、上記ステップSH1の判断結果が「YES」となり、ステップSH2に進み、スタートフラグSTFを反転する。続いて、ステップSH3では、オン操作に応じて反転されたスタートフラグSTFのフラグ値が「1」、すなわちスライドショーの開始が指示された状態であるかどうかを判断する。以下、スライドショーの開始が指示された場合と、スライドショーの停止が指示された場合とに分けて動作説明を進める。
<スライドショーの開始が指示された場合>
スタートスイッチのオン操作に応じて反転されたスタートフラグSTFのフラグ値が「1」となり、スライドショーの開始が指示されると、ステップSH3の判断結果が「YES」なり、ステップSH4に進む。ステップSH4〜SH5では、曲データエリアMDEの先頭アドレスを読み出しアドレスRAD1に、リズム情報抽出エリアRSEの先頭アドレスを読み出しアドレスRAD2に、画像データエリアIDEの先頭アドレスを読み出しアドレスRAD3にそれぞれセットする。
続いて、ステップSH7〜SH8では、読み出しアドレスRAD1で指定されるデータ(曲データ先頭のタイム)をレジスタT1に、読み出しアドレスRAD2で指定されるデータ(リズム情報先頭のタイム)をレジスタT2にそれぞれストアする。そして、ステップSH9に進み、レジスタFAFをゼロリセットする。なお、レジスタFAFとは、1つ前に読み出されたリズム情報中のアクセントフラグAFのフラグ値を保持するものであり、その意図するところについては追って述べる。
次いで、ステップSH10では、曲進行時間を計時するタイマをスタートさせる。なお、このタイマは図示されていないタイマ割り込み処理によって曲再生テンポに対応した最小単位時間(ティック)を計時する。この後、図13に図示するステップSH14に進み、スタートフラグSTFが「1」、すなわちスライドショーの開始が指示された状態であるかどうかを判断する。スライドショーの開始が指示された状態ならば、判断結果は「YES」となり、ステップSH15に進み、タイマカウントアップであるか否か、つまり最小単位時間が経過したかどうを判断する。
最小単位時間が経過していなければ、判断結果は「NO」になり、一旦、本処理を終える。この後、再び本処理が実行され、上述したステップSH1およびステップSH14を介してステップSH15に進んだ時点で最小単位時間が経過していると、当該ステップSH15の判断結果が「YES」となり、ステップSH16に進む。ステップSH16では、レジスタT1に格納された曲データのタイム値と、レジスタT2に格納されたリズム情報のタイム値とをそれぞれデクリメントする。
次いで、ステップSH17では、デクリメントされたレジスタT1の値が「0」以下であるか否か、すなわち曲データのイベントタイミングに達したかどうかを判断する。曲データのイベントタイミングに達していなければ、判断結果は「NO」となり、後述のステップSH23(図14参照)に進む。
一方、曲データのイベントタイミングに達していると、上記ステップSH17の判断結果が「YES」になり、ステップSH18に進み、読み出しアドレスRAD1を進める。そして、ステップSH19では、歩進させた読み出しアドレスRAD1に対応するデータが有るか否か、つまり全ての曲データを読み出し終えたかどうかを判断する。全ての曲データを読み出し終えた場合には、判断結果が「YES」となり、図12に図示するステップSH11〜SH13を実行する。なお、ステップSH11〜SH13の動作については、後述のスライドショーの停止が指示された場合の動作として説明する。
さて一方、曲データを読み出し終えていない場合には、上記ステップSH19の判断結果が「NO」になり、ステップSH20に進み、歩進させた読み出しアドレスRAD1に応じて読み出されるデータが「タイム」又は「イベント」の何れであるかを判別する。読み出されたデータが「イベント」の場合には、ステップSH21に進み、その「イベント」を解釈して生成した楽音パラメータを音源15に送付する。これにより、音源15では、曲データ中のイベントで指定される楽音を発音(又は消音)する。
これに対し、歩進させた読み出しアドレスRAD1に応じて読み出されるデータが「タイム」であると、ステップSH22に進み、その読み出された「タイム」をレジスタT1にストアする。そして、この後、図14に図示するステップSH23に進み、上述したステップSH16(図13参照)においてデクリメントされたレジスタT2の値が「0」以下であるか否か、すなわちリズム情報のイベントタイミングに達したかどうかを判断する。リズム情報のイベントタイミングに達していなければ、判断結果は「NO」となり、前述のステップSH1(図12参照)に戻る。
一方、リズム情報のイベントタイミングに達していると、上記ステップSH23の判断結果が「YES」になり、ステップSH24に進み、読み出しアドレスRAD2を進める。そして、ステップSH25に進み、歩進させた読み出しアドレスRAD2に対応するデータが有るか否か、つまり全てのリズム情報を読み出し終えたかどうかを判断する。全てのリズム情報を読み出し終えた場合には、判断結果が「YES」となり、図12に図示するステップSH11〜SH13を実行する。なお、ステップSH11〜SH13の動作については、後述のスライドショーの停止が指示された場合の動作として説明する。
これに対し、リズム情報を読み出し終えていない場合には、上記ステップSH25の判断結果が「NO」になり、ステップSH26に進み、歩進させた読み出しアドレスRAD2に応じて読み出されるデータがアクセントフラグAFであるか否かを判断する。読み出されたデータがアクセントフラグAFの場合には、判断結果が「YES」になり、後述のステップSH29に進む。
読み出されたデータがアクセントフラグAFでなければ、判断結果は「NO」になり、ステップSH27に進み、読み出されたデータが「タイム」であるか否かを判断する。読み出されたデータが「イベント」の場合には、判断結果が「NO」となり、上述のステップSH24に戻り、読み出しアドレスRAD2を進める。読み出されたデータが「タイム」の場合には、判断結果が「YES」となり、ステップSH28に進み、その「タイム」の値をレジスタT2にストアした後、上述のステップSH24に戻り、読み出しアドレスRAD2を進める。
歩進させた読み出しアドレスRAD2に応じてアクセントフラグAFが読み出されてステップSH29に進むと、当該アクセントフラグAFのフラグ値を判別する。以下、アクセントフラグAFのフラグ値が「0」又は「1」の場合、「2」の場合および「3」の場合に分けて動作を説明する。
(a)アクセントフラグAFのフラグ値が「0」又は「1」の場合
読み出されたアクセントフラグAFのフラグ値が「0」又は「1」であると、上述のステップSH24に戻り、読み出しアドレスRAD2を進める。
(b)アクセントフラグAFのフラグ値が「2」の場合
読み出されたアクセントフラグAFのフラグ値が「2」、すなわち前述したスネア切替点に相当するアクセントフラグAFならば、ステップSH30に進み、レジスタFAFに格納される値が「3」であるか否か、すなわちシンバル切替点(前アクセントフラグAF=3)からスネア切替点(現アクセントフラグAF=2)への移行であるか否かを判断する。シンバル切替点からスネア切替点への移行ならば、判断結果は「YES」になり、ステップSH31に進み、表示部14の画面表示を一旦クリアした後、ステップSH32に進む。
一方、シンバル切替点からスネア切替点への移行でなければ、上記ステップSH30の判断結果は「NO」となり、ステップSH32に進む。ステップSH32では、画像データエリアIDEから読み出しアドレスRAD3に応じて画像データ読み出し、続くステップSH33では、読み出した画像データに画像縮小処理を施す。ここで言う画像縮小処理とは、表示サイズ縮小に合わせて画素を間引いて最適化した縮小画像データを発生する処理を指す。なお、本処理では表示処理の実行中に画像縮小するようにしたが、これに替えて、予め各画像データの縮小画像を生成しておき、スネア切替点に移行したらその縮小画像データを用いる態様としても構わない。
次いで、ステップSH34では、上記ステップSH33において生成された縮小画像データの表示位置(表示部14の表示画面上の位置)をランダムに設定する。そして、ステップSH35に進み、上記ステップSH34において設定された表示位置に縮小画像データを表示する。この後、ステップSH36に進み、現在のアクセントフラグAFのフラグ値をレジスタFAFにストアして上述のステップSH24に戻り、読み出しアドレスRAD2を進める。
(c)アクセントフラグAFのフラグ値が「3」の場合
読み出されたアクセントフラグAFのフラグ値が「3」、すなわち前述したシンバル切替点に相当するアクセントフラグAFならば、ステップSH37に進み、表示部14の画面表示を一旦クリアし、続くステップSH38では、画像データエリアIDEから読み出しアドレスRAD3に応じて画像データ読み出す。そして、ステップSH39に進み、読み出した画像データを表示部14に画面表示する。この後、ステップSH40に進み、現在のアクセントフラグAFのフラグ値をレジスタFAFにストアして上述のステップSH24に戻り、読み出しアドレスRAD2を進める。
<スライドショーの停止が指示された場合>
スタートスイッチのオン操作に応じて反転されたスタートフラグSTFのフラグ値が「0」となり、スライドショーの停止が指示された場合には、図12に図示するステップSH3の判断結果が「NO」になり、ステップSH11に進む。また、曲データあるいはリズム情報を読み出し終えた場合にもステップSH11に進む。ステップSH11では、音源15に消音を指示する。これにより、音源15では、曲データ再生に応じて発音している全ての楽音を消音する。次いで、ステップSH12では、表示部14に表示中の画像を消去した後、ステップSH13に進み、タイマを停止して本処理を終える。なお、曲データあるいはリズム情報を読み出し終えた場合には、ステップSH13においてスタートフラグSTFをゼロリセットする。
このように、表示処理では、スタートスイッチのオン操作に応じてスライドショーの開始が指示されると、曲データエリアMDEから曲データを順次読み出して曲再生を実行しながらリズム情報抽出エリアRSEからリズム情報(タイム、アクセントフラグAFおよびイベント)を順次読み出し、シンバル切替点(アクセントフラグAFのフラグ値が「3」)が読み出される毎に、画像データエリアIDEに記憶される画像データを順番に1枚ずつ表示部14に画面表示し、スネア切替点(アクセントフラグAFのフラグ値が「2」)が継続して読み出される区間が存在すると、その区間では画像データエリアIDEから順番に読み出される画像データを縮小し、その縮小した画像を表示部14の表示画面上のランダムで重ならない位置に複数枚同時表示する。
以上説明したように、第1実施形態では、曲データを再生すると共に、その再生される曲中のリズム音の内、クラッシュシンバルの単打音が発音される毎に画像データエリアIDEに記憶される画像データを順番に1枚ずつ画面表示し、スネアドラムの連打音が継続する間は画像データエリアIDEから順番に読み出される画像データを縮小して得た縮小画像を表示画面に複数枚同時表示するので、再生される曲の内容に応じて、ある曲区間では複数枚の画像を同時に画面表示させたり、又ある曲区間では画像を一つずつ画面表示させたりして変化に富んだスライドショー再生を具現することができる。
[第2実施形態]
次に、図15〜図17を参照して第2実施形態によるスネア切替点設定処理の動作について説明する。前述した第1実施形態のスネア切替点設定処理では、1小節分のリズム情報からスネアの連打を表す2つのイベントを検索し、該当する2つのイベントが存在する場合に、それぞれに対応するアクセントフラグAFのフラグ値を「2」にセットするスネア切替点設定を行うようにした。
これに対し、第2実施形態によるスネア切替点設定処理では、1小節分のリズム情報中に「スネア」のリズム音色を含むイベントが連続する場合に、そのイベント間隔が所定時間α以下であれば、スネアの連打と見なし、両イベントに各々対応するアクセントフラグAFのフラグ値を「2」にセットするスネア切替点設定を行う点で相違する。以下、こうした第2実施形態によるスネア切替点設定処理の動作を説明する。
<スネア切替点の検索/設定>
前述した第1実施形態と同様、設定処理のステップSB4(図4参照)を介して本処理が実行されると、CPU10は図15に図示するステップSJ1に進み、レジスタradに退避格納しておいた小節先頭アドレスを処理用アドレスADにセットする。続いて、ステップSJ2では、処理用アドレスADで指定されるリズム情報抽出エリアRSE中のデータがアクセントフラグAFであるか否かを判断する。
アクセントフラグAFでなければ、判断結果は「NO」になり、ステップSJ4に進み、処理用アドレスADを進める。次いで、ステップSJ5では、歩進された処理用アドレスADが小節終端アドレスEAD以上であるか否か、すなわち1小節分のリズム情報について検索し終えたかどうかを判断する。検索し終えていなければ、判断結果は「NO」になり、上述のステップSJ2に処理を戻す。
そして、歩進された処理用アドレスADで指定されるリズム情報抽出エリアRSE中のデータがアクセントフラグAFになったとする。そうすると、上述したステップSJ2の判断結果が「YES」になり、ステップSJ3に進む。ステップSJ3では、処理用アドレスADで指定されたアクセントフラグAFのフラグ値が「1」、つまり対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」であるか否かを判断する。対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」以外であったならば、判断結果は「NO」になり、上述したステップSJ4に進む。
一方、処理用アドレスADで指定されたアクセントフラグAFのフラグ値が「1」、つまり対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」であると、上記ステップSJ3の判断結果が「YES」になり、ステップSJ6に進み、現在の処理用アドレスADをレジスタad1に退避格納する。次いで、ステップSJ7では、アクセントフラグAFに続くイベントを指定するよう処理用アドレスADを歩進させ、続くステップSJ8では、歩進させた処理用アドレスADで指定されるイベントに含まれるリズム音色が「スネア」であるか否かを判断する。イベントに含まれるリズム音色が「スネア」でなければ、判断結果は「NO」になり、上述のステップSJ4に進む。
これに対し、イベントに含まれるリズム音色が「スネア」であると、上記ステップSJ8の判断結果は「YES」となり、ステップSJ9に進み、処理用アドレスADを進める。そして、ステップSJ10では、歩進された処理用アドレスADが小節終端アドレスEAD以上であるか否か、すなわち1小節分のリズム情報について検索し終えたかどうかを判断する。1小節分のリズム情報について検索し終えたならば、判断結果は「YES」になり、後述のステップSJ20(図17参照)に進むが、検索し終えていなければ、判断結果は「NO」となり、図16に図示するステップSJ11に進む。
ステップSJ11では、歩進された処理用アドレスADで指定されるリズム情報抽出エリアRSE中のデータがタイムであるか否かを判断する。例えば「スネア」のリズム音色を含むイベントに続くタイムが指定された場合には、ここでの判断結果は「YES」となり、ステップSJ12に進み、そのタイムの値をレジスタtにストアした後、上述のステップSJ9に処理を戻す。
そして、ステップSJ9において歩進された処理用アドレスADが小節終端アドレスEADを超えなければ、再びステップSJ11に進むが、この場合、歩進された処理用アドレスADで指定されるデータはタイムではないので、判断結果が「NO」になり、ステップSJ13に進む。ステップSJ13では、歩進された処理用アドレスADで指定されるリズム情報抽出エリアRSE中のデータがアクセントフラグAFであるか否かを判断する。アクセントフラグAFでなければ、判断結果は「NO」になり、前述のステップSJ4(図15参照)に処理を戻す。
これに対し、処理用アドレスADで指定されるデータがアクセントフラグAFであると、上記ステップSJ13の判断結果が「YES」になり、ステップSJ14に進み、処理用アドレスADで指定されたアクセントフラグAFのフラグ値が「1」、つまり対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」であるか否かを判断する。対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」以外であったならば、判断結果は「NO」になり、前述したステップSJ4に戻る。
一方、処理用アドレスADで指定されたアクセントフラグAFのフラグ値が「1」、つまり対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」であると、上記ステップSJ14の判断結果が「YES」になり、ステップSJ15に進み、現在の処理用アドレスADをレジスタad2に退避格納する。次いで、ステップSJ16では、アクセントフラグAFに続くイベントを指定するよう処理用アドレスADを歩進させ、続くステップSJ17では、歩進させた処理用アドレスADで指定されるイベントに含まれるリズム音色が「スネア」であるか否かを判断する。
イベントに含まれるリズム音色が「スネア」でなければ、判断結果は「NO」になり、前述のステップSJ4に戻るが、イベントに含まれるリズム音色が「スネア」であると、判断結果が「YES」になり、ステップSJ18に進み、レジスタtに格納されるタイムの値が所定時間α以下、つまりスネアの連打であるかどうかを判断する。レジスタtに格納されるタイムの値が所定時間αより長くスネアの連打でなければ、判断結果は「NO」となり、前述したステップSJ4に戻る。
一方、レジスタtに格納されるタイムの値が所定時間α以下のスネアの連打であると、上記ステップSJ18の判断結果が「YES」となり、ステップSJ19に進み、レジスタad1、ad2に各々格納される処理用アドレスADにより指定されるアクセントフラグAFのフラグ値をそれぞれ「2」に設定した後、前述のステップSF4に処理を戻す。こうして、スネアの連打に相当する2つのイベントにそれぞれ対応するアクセントフラグAFのフラグ値を「2」にセットすることでスネア切替点が設定される。
<シンバル切替点の検索/設定>
スネア切替点の検索/設定により1小節分のリズム情報について検索し終えると、前述したステップSJ5(図15参照)もしくはステップSJ10(図15参照)の判断結果が「YES」となり、CPU10は図17に図示するステップSJ20に処理を進める。ステップSJ20〜SJ24では、既にスネア切替点が設定済みであるかどうかを検索し、スネア切替点が設定済みならば本処理を完了させ、スネア切替点が未設定ならばステップSJ25以降でシンバル切替点の検索/設定を行う。
すなわち、先ずステップSJ20では、レジスタradに退避格納しておいた小節先頭アドレスを処理用アドレスADにセットする。つまり、処理用アドレスADを小節先頭を指定するように戻す。続いて、ステップSJ21に進み、処理用アドレスADで指定されるリズム情報抽出エリアRSE中のデータがアクセントフラグAFであるか否かを判断する。
アクセントフラグAFでなければ、判断結果は「NO」になり、ステップSJ23に進み、処理用アドレスADを進める。次いで、ステップSJ24では、歩進された処理用アドレスADが小節終端アドレスEAD以上であるか否か、すなわち1小節分のリズム情報について検索し終えたかどうかを判断する。検索し終えていなければ、判断結果は「NO」になり、上述のステップSJ21に処理を戻す。
そして、歩進された処理用アドレスADで指定されるリズム情報抽出エリアRSE中のデータがアクセントフラグAFになったとする。そうすると、上述したステップSJ21の判断結果が「YES」になり、ステップSJ22に進む。ステップSJ22では、処理用アドレスADで指定されたアクセントフラグAFのフラグ値が「0」又は「1」であるか否かを判断する。ここで、アクセントフラグAFのフラグ値が「2」、つまりスネア切替点が検出されたら、判断結果は「NO」となり、この場合、シンバル切替点を検索/設定する必要が無い為、本処理を終える。
一方、アクセントフラグAFのフラグ値が「0」又は「1」ならば、上記ステップSJ22の判断結果は「YES」となり、ステップSJ23に進み、処理用アドレスADを進める。そして、歩進された処理用アドレスADが小節終端アドレスEADを超え、1小節分のリズム情報について検索し終えると、ステップSJ24の判断結果が「YES」となり、ステップSJ25に進む。
ステップSJ25では、レジスタradに退避格納しておいた小節先頭アドレスを処理用アドレスADにセットし、続くステップSJ26では、処理用アドレスADで指定されるリズム情報抽出エリアRSE中のデータがアクセントフラグAFであるか否かを判断する。アクセントフラグAFでなければ、判断結果は「NO」になり、ステップSJ32に進み、処理用アドレスADを進める。そして、ステップSJ33では、歩進された処理用アドレスADが小節終端アドレスEAD以上であるか否か、すなわち1小節分のリズム情報について検索し終えたかどうかを判断する。検索し終えていなければ、判断結果は「NO」になり、上述のステップSJ26に処理を戻す。
この後、歩進された処理用アドレスADで指定されるリズム情報抽出エリアRSE中のデータがアクセントフラグAFになると、上記ステップSJ26の判断結果が「YES」になり、ステップSJ27に進む。ステップSJ27では、処理用アドレスADで指定されたアクセントフラグAFのフラグ値が「1」、つまり対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」であるか否かを判断する。対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」以外であったならば、判断結果は「NO」になり、ステップSJ32以降を実行して処理用アドレスADを進め、1小節分のリズム情報について検索し終えたかどうかを判断し、検索し終えていなければ、再びステップSJ26に戻る。
一方、処理用アドレスADで指定されたアクセントフラグAFのフラグ値が「1」、つまり対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」であると、上記ステップSJ27の判断結果が「YES」になり、ステップSJ28に進み、現在の処理用アドレスADをレジスタad1に退避格納する。次いで、ステップSJ29では、アクセントフラグAFに続くイベントを指定するよう処理用アドレスADを歩進させ、続くステップSJ30では、歩進させた処理用アドレスADで指定されるイベントに含まれるリズム音色が「クラッシュシンバル」であるか否かを判断する。イベントに含まれるリズム音色が「クラッシュシンバル」でなければ、判断結果は「NO」になり、上述のステップSJ32に進む。
これに対し、イベントに含まれるリズム音色が「クラッシュシンバル」であると、上記ステップSJ30の判断結果は「YES」となり、ステップSJ31に進み、レジスタad1に格納される処理用アドレスADにより指定されるアクセントフラグAFのフラグ値を「3」に設定する。これにより、クラッシュシンバルの単打を表すイベントがシンバル切替点に設定される。そして、この後、ステップSJ32に進み、処理用アドレスADを進める。次いで、ステップSJ33では、1小節分のリズム情報について検索し終えたかどうかを判断し、1小節分のリズム情報について検索し終えたならば、判断結果が「YES」となって本処理を終える。
このように、第2実施形態によるスネア切替点設定処理では、アクセント箇所サーチ処理(図7参照)によってリズム情報抽出エリアRSEにおける1小節分のリズム情報から抽出された「スネア」または「クラッシュシンバル」のリズム音色を含むイベントを参照してスネアが連続する2つのイベントを検索し、該当する2つのイベントが存在する場合には、そのイベント間隔が所定時間α以下であれば、スネア連打と見なし、両イベントに各々対応するアクセントフラグAFのフラグ値を「2」にセットするスネア切替点設定を行う。
そして、1小節中にスネア連打が存在せず、スネア切替点を設定することが出来なければ、1小節分のリズム情報から抽出された「スネア」または「クラッシュシンバル」のリズム音色を含むイベントを参照してクラッシュシンバルの単打を表すイベントを検索し、該当するイベントが存在する場合には、それに対応するアクセントフラグAFを「3」にセットするシンバル切替点設定を行うようになっている。
したがって、第2実施形態によれば、曲データから抽出したリズム情報の中から画像表示態様を異ならせるスネア切替点およびシンバル切替点を設定することができ、これら両切替点を用いれば、再生される曲中のリズム音の内、クラッシュシンバルの単打音が発音される毎に画像データエリアIDEに記憶される画像データを順番に1枚ずつ画面表示し、スネアドラムの連打音が継続する間は画像データエリアIDEから順番に読み出される画像データを縮小して得た縮小画像を表示画面に複数枚同時表示するスライドショーとなるので、変化に富んだスライドショー再生を具現することができる。
[第3実施形態]
次に、図18〜図19を参照して第3実施形態によるスネア切替点設定処理の動作について説明する。上述の第2実施形態では、1小節分のリズム情報中に「スネア」のリズム音色を含むイベントが連続する場合に、そのイベント間隔が所定時間α以下であれば、スネアの連打と見なし、両イベントに各々対応するアクセントフラグAFのフラグ値を「2」にセットするスネア切替点設定を行う。
これに対し、第3実施形態によるスネア切替点設定処理では、「スネア」または「クラッシュシンバル」のリズム音色を含むイベントが連続し、そのイベント間隔が所定時間α以下ならば、両イベントに各々対応するアクセントフラグAFのフラグ値を「2」にセットする連打切替点設定を行い、一方、所定時間αより長ければ、両イベントに各々対応するアクセントフラグAFのフラグ値を「3」にセットする単打切替点設定を行う。以下、こうした第3実施形態によるスネア切替点設定処理の動作を説明する。
前述した第1実施形態と同様、設定処理のステップSB4(図4参照)を介して本処理が実行されると、CPU10は図18に図示するステップSK1に進み、レジスタradに退避格納しておいた小節先頭アドレスを処理用アドレスADにセットする。続いて、ステップSK2では、処理用アドレスADで指定されるリズム情報抽出エリアRSE中のデータがアクセントフラグAFであるか否かを判断する。
アクセントフラグAFでなければ、判断結果は「NO」になり、ステップSK4に進み、処理用アドレスADを進める。次いで、ステップSK5では、歩進された処理用アドレスADが小節終端アドレスEAD以上であるか否か、すなわち1小節分のリズム情報について検索し終えたかどうかを判断する。検索し終えていなければ、判断結果は「NO」になり、上述のステップSK2に処理を戻す。
そして、歩進された処理用アドレスADで指定されるリズム情報抽出エリアRSE中のデータがアクセントフラグAFになったとする。そうすると、上述したステップSK2の判断結果が「YES」になり、ステップSK3に進む。ステップSK3では、処理用アドレスADで指定されたアクセントフラグAFのフラグ値が「1」、つまり対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」であるか否かを判断する。対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」以外であったならば、判断結果は「NO」になり、上述したステップSK4に進む。
一方、処理用アドレスADで指定されたアクセントフラグAFのフラグ値が「1」、つまり対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」であると、上記ステップSK3の判断結果が「YES」になり、ステップSK6に進み、現在の処理用アドレスADをレジスタad1に退避格納する。次いで、ステップSK7では、レジスタtをゼロリセットする。
そして、ステップSK8に進み、アクセントフラグAFに続くイベントを指定するよう処理用アドレスADを歩進させ、続くステップSK9では、歩進された処理用アドレスADが小節終端アドレスEAD以上であるか否か、すなわち1小節分のリズム情報について検索し終えたかどうかを判断する。1小節分のリズム情報について検索し終えていなければ、判断結果は「NO」となり、次のステップSK10に進む。
ステップSK10では、歩進された処理用アドレスADで指定されるリズム情報抽出エリアRSE中のデータがタイム又はアクセントフラグAFの何れであるかを判別する。処理用アドレスADで指定されるデータがタイムであると、ステップSK11に進み、レジスタtにタイムの値を累算した後、上述のステップSK8に処理を戻す。
そして、歩進された処理用アドレスADで指定されるリズム情報抽出エリアRSE中のデータがアクセントフラグAFになったとする。そうすると、ステップSK10を介して図19に図示するステップSK12に進み、処理用アドレスADで指定されたアクセントフラグAFのフラグ値が「1」、つまり対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」であるか否かを判断する。対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」以外であったならば、判断結果は「NO」になり、上述したステップSK4に進む。
一方、処理用アドレスADで指定されたアクセントフラグAFのフラグ値が「1」、つまり対応するイベントに含まれるリズム音色が「スネア」または「クラッシュシンバル」であると、上記ステップSK12の判断結果が「YES」になり、ステップSK13に進み、現在の処理用アドレスADをレジスタad2に退避格納する。次いで、ステップSK14では、レジスタtに格納されるタイムの値が所定時間α以下であるか否かを判断する。
レジスタtに格納されるタイムの値が所定時間α以下の場合、つまり「スネア」または「クラッシュシンバル」のリズム音色を含むイベントが連続し、そのイベント間隔が所定時間α以下であると、判断結果は「YES」となり、ステップSK15に進む。ステップSK15では、レジスタad1、ad2に各々格納される処理用アドレスADにより指定されるアクセントフラグAFのフラグ値をそれぞれ「2」に設定した後、前述のステップSK4に処理を戻す。こうして、「スネア」または「クラッシュシンバル」の連打に相当する2つのイベントにそれぞれ対応するアクセントフラグAFのフラグ値を「2」にセットすることで連打切替点が設定される。この連打切替点は、前述した第1および第2実施形態におけるスネア切替点に相当する。
これに対し、「スネア」または「クラッシュシンバル」のリズム音色を含むイベントが連続し、そのイベント間隔が所定時間αより長ければ、上記ステップSK14の判断結果は「NO」になり、ステップSK16に進む。ステップSK16では、レジスタad1、ad2に各々格納される処理用アドレスADにより指定されるアクセントフラグAFのフラグ値をそれぞれ「3」に設定した後、前述のステップSK4に処理を戻す。こうして、「スネア」または「クラッシュシンバル」の単打に相当する2つのイベントにそれぞれ対応するアクセントフラグAFのフラグ値を「3」にセットすることで単打切替点が設定される。この単打切替点は、前述した第1および第2実施形態におけるシンバル切替点に相当する。
したがって、第3実施形態によれば、曲データから抽出したリズム情報の中から画像表示態様を異ならせる連打切替点および単打切替点を設定することができ、これら両切替点を用いれば、再生される曲中のリズム音の内、クラッシュシンバルの単打音が発音される毎に画像データエリアIDEに記憶される画像データを順番に1枚ずつ画面表示し、スネアドラムの連打音が継続する間は画像データエリアIDEから順番に読み出される画像データを縮小して得た縮小画像を表示画面に複数枚同時表示するスライドショーとなるので、変化に富んだスライドショー再生を具現することができる。
なお、上述した第1〜第3実施形態では、クラッシュシンバルの単打音およびスネアドラムの連打音を画像表示態様を異ならせる切替点としたが、これに限らず、他のリズム音色の楽音を切替点として設定する態様であっても構わない。