図面 (/)

技術 演奏動作表示装置、及び記録媒体

出願人 カシオ計算機株式会社
発明者 小股直幸
出願日 2000年3月24日 (20年9ヶ月経過) 出願番号 2001-217442
公開日 2002年4月5日 (18年8ヶ月経過) 公開番号 2002-099276
状態 特許登録済
技術分野 練習用教習具 音楽補助具 音楽補助具 電気楽器
主要キーワード 動作時間データ 段階動作 単位時間データ 変数指定 ハードタイマ 単位動作 時間長データ 動作補助
関連する未来課題
重要な関連分野

この項目の情報は公開日時点(2002年4月5日)のものです。
また、この項目は機械的に抽出しているため、正しく解析できていない場合があります

図面 (20)

課題

演奏中における手指の動作をユーザが容易に理解できる形で表示するための技術を提供する。

解決手段

手首から先は、手パートと5本の指パートに分け、各指パートは、3つの部分に更に分けている。指パートによる押鍵動作は、対応する楽音発音開始前に開始し、離鍵動作は、楽音の消音時に開始する。この押鍵動作開始タイミングは、直前の手指の位置から当該手指の位置まで移行するに要する動作時間に基づいて決定される。離鍵させた指パートは、次の押鍵に使わなければ、弛緩状態にさせる。手パートは、押鍵すべき鍵の位置、その鍵の押鍵に用いる指パートの種類などに応じてxy平面上を移動させる。そのようにして、演奏動作一連の流れを動画で表示する。

概要

背景

概要

演奏中における手指の動作をユーザが容易に理解できる形で表示するための技術を提供する。

手首から先は、手パートと5本の指パートに分け、各指パートは、3つの部分に更に分けている。指パートによる押鍵動作は、対応する楽音発音開始前に開始し、離鍵動作は、楽音の消音時に開始する。この押鍵動作開始タイミングは、直前の手指の位置から当該手指の位置まで移行するに要する動作時間に基づいて決定される。離鍵させた指パートは、次の押鍵に使わなければ、弛緩状態にさせる。手パートは、押鍵すべき鍵の位置、その鍵の押鍵に用いる指パートの種類などに応じてxy平面上を移動させる。そのようにして、演奏動作一連の流れを動画で表示する。

目的

効果

実績

技術文献被引用数
0件
牽制数
3件

この技術が所属する分野

ライセンス契約や譲渡などの可能性がある特許掲載中! 開放特許随時追加・更新中 詳しくはこちら

請求項1

演奏操作の対象となる演奏操作子群に対し、演奏の進行に応じて演奏者が操作していく際の動作を表示する装置であって、前記演奏操作子群上で発生させるべきイベントの内容を表すイベントデータ、該イベントの発生タイミングを示す時間データ、及び該イベントの発生に使用すべき指を指定する指データを少なくとも有するデータ群単位楽音運指データとして構成されている楽音・運指データを取得する楽音・運指データ取得手段と、前記楽音・運指データ取得手段にて取得された楽音・運指データに基づいて、少なくとも演奏操作子群上の手指の位置を表わす動作制御データを生成する動作制御データ生成手段と、前記動作制御データ生成手段により生成された動作制御データにて表わされる当該手指の位置に移行を開始すべき動作タイミングを、直前の手指の位置から当該手指の位置まで移行するに要する動作時間に基づいて決定する動作タイミング決定手段と、前記動作制御データ生成手段からの動作制御データ及び動作タイミング決定手段からの動作タイミングに基づいて、前記演奏操作子群を操作していく手指の動作を動画表示する動作表示手段と、を含むことを特徴とする演奏動作表示装置

請求項2

前記手指の位置に移行を開始すべき動作タイミングは、前記演奏操作子群中の演奏操作子操作開始すべきタイミングであり、前記動作時間は、前記演奏操作子の操作を解除するに要する時間と前記演奏操作子の操作を終了するに要する時間であることを特徴とする演奏動作表示装置。

請求項3

前記動作タイミング決定手段は、前記楽音・運指データに含まれる時間データに基づいて、いずれかの前記演奏操作子の操作を解除した後別の前記演奏操作子が操作を終了するまでに要する実動作時間が、前記動作時間より大きいか否か判別する判別手段と、前記判別手段により大きいと判別された場合は、前記演奏操作子が操作を終了したタイミングから前記演奏操作子の操作を解除するに要する時間を減算したタイミングを、前記判別手段により小さいと判別された場合は、前記演奏操作子が操作解除を終了するタイミングに前記演奏操作子の操作を解除するに要する時間を加算したタイミングを、前記手指の位置に移行を開始すべき動作タイミングとする制御手段と、を含むことを特徴とする請求項2記載の演奏動作表示装置。

請求項4

前記制御手段は、前記判別手段により小さいと判別された場合でかつ前記演奏操作子の操作を解除するに要する時間が前記実時間と比較して所定割合以上大きい場合には、前記演奏操作子が操作解除を終了するタイミングに加算する前記演奏操作子の操作を解除するに要する時間を圧縮することを特徴とする請求項3記載の演奏動作表示装置。

請求項5

演奏操作の対象となる演奏操作子群上で発生させるべきイベントの内容を表すイベントデータ、該イベントの発生タイミングを示す時間データ、及び該イベントの発生に使用すべき指を指定する指データを少なくとも有するデータ群を単位楽音・運指データとして構成されている楽音・運指データを取得する楽音・運指データ取得手段と、前記楽音・運指データ取得手段にて取得された楽音・運指データに基づいて、少なくとも演奏操作子群上の手指の位置表わす動作制御データを生成する動作制御データ生成手段と、前記動作制御データ生成手段により生成された動作制御データにて表わされる当該手指の位置に移行を開始すべき動作タイミングを、直前の手指の位置から当該手指の位置まで移行するに要する動作時間に基づいて決定する動作タイミング決定手段と、前記動作制御データ生成手段からの動作制御データ及び動作タイミング決定手段からの動作タイミングに基づいて、前記演奏操作子群を操作していく手指の動作を動画表示する動作表示手段と、を実現させるプログラムを記録した記録媒体

技術分野

0001

本発明は、鍵盤などの演奏操作の対象となる演奏操作子群に対し、演奏の進行に応じて操作していく際の動作を表示するための技術に関する。

0002

現在では、多くの鍵盤楽器に、演奏の進行に応じて押鍵(操作)すべき鍵を順次、ユーザ(演奏者)に通知していくナビゲーション機能が搭載されている。しかし、ナビゲーション機能を利用するユーザの多くは技術的に未熟であり、そのナビゲーション機能によって次に押鍵すべき鍵を知ることができても、その鍵をどの指で押鍵すべきかが判らないのが実状である。このことから、鍵の押鍵に使うべき指を表示する装置(演奏動作表示装置)を搭載した鍵盤楽器も製品化されている。その演奏動作表示装置を利用することにより、指の運び方を意識した演奏を行えるため、ユーザにとってはより効率的な練習(学習)を行うことができる。

0003

演奏動作表示装置の多くは、次の押鍵(操作)に使うべき指を単に表示するだけである。しかし、押鍵(操作)すべき鍵への指の運び方は、その鍵に単に指を運ぶだけではない。別の指の下をくぐらせて指を運んだり、別の指の上をまたいで指を運んだりすることもある。これは、単に指だけを表示した場合、その指をどのように運んで押鍵(操作)するべきなのかをユーザが直ちに理解できるとは限らないことを意味する。このことから、例えば特開平10−39739号公報に開示されているように、使う指だけでなく、その指の運び方をより理解しやすい形で表示する演奏動作表示装置が創案されている。

0004

その特開平10−39739号公報に開示された従来の演奏動作表示装置では、押鍵時の手指手首から先の部分)を表示することにより、押鍵に使うべき指をどのような形で使うべきかをユーザに知らせるようになっている。しかし、次に押鍵すべき鍵が現在、押鍵している鍵と離れているような場合、普通、手や指を大きく動かさなければならない。これは、押鍵時の手指を表示しても、その表示された手指の形にどのようにして移行させるのかをユーザが直ちに理解できるとは限らないことを意味する。このため、従来の演奏動作表示装置には、全体的な手指の動作が判りにくいという問題点があった。

0005

なお、上記従来の演奏動作表示装置では、コンピュータグラフィクス(以降、CG略記する)技術を用いて、押鍵に使う指を動かしている。その指の動きにより、押鍵に使うべき指をユーザは知ることができる。しかし、その指の動きは、押鍵時の手指の形を作った後の動きである。このため、その指の動きによって、押鍵時の手指の形にどのようにして移行させるかをユーザに知らせることはできない。また、演奏中における実際の手指の動きにおいて、押鍵動作を開始するタイミングは、その直前に押鍵された手指の位置及び状態によって異なる。つまり直前の押鍵位置が次の押鍵位置から離れている場合、あるいは手指の状態が直前の押鍵時の手指の状態と大きく異なっている場合などは、押鍵動作を開始するタイミングを早めに行なっている。こうした手指の移行開始のタイミングなどは、単に押鍵後の手指の状態を表示するだけの従来の演奏動作表示装置では、ユーザーに認識させることができなかった。

0006

本発明の課題は、演奏中における手指の動作をユーザが容易に理解できる形で表示するための技術を提供することにある。

課題を解決するための手段

0007

本発明の演奏操作表示装置は、演奏操作子群上で発生させるべきイベントの内容を表すイベントデータ、該イベントの発生タイミングを示す時間データ、及び該イベントの発生に使用すべき指を指定する指データを少なくとも有するデータ群単位楽音運指データとして構成されている楽音・運指データを取得する楽音・運指データ取得手段と、楽音・運指データ取得手段にて取得された楽音・運指データに基づいて、少なくとも演奏操作子群上の手指の位置を表わす動作制御データを生成する動作制御データ生成手段と、動作制御データ生成手段により生成された動作制御データにて表わされる当該手指の位置に移行を開始すべき動作タイミングを、直前の手指の位置から当該手指の位置まで移行するに要する動作時間に基づいて決定する動作タイミング決定手段と、動作制御データ生成手段からの動作制御データ及び動作タイミング決定手段からの動作タイミングに基づいて、演奏操作子群を操作していく手指の動作を動画表示する動作表示手段と、を具備する。

0008

なお、上記構成において、手指の位置に移行を開始すべき動作タイミングは、演奏操作子群中の演奏操作子操作開始すべきタイミングであり、動作時間は、演奏操作子の操作を解除するに要する時間と演奏操作子の操作を終了するに要する時間であることが望ましい。

0009

また、動作タイミング決定手段は、楽音・運指データに含まれる時間データに基づいて、いずれかの演奏操作子の操作を解除した後別の演奏操作子が操作を終了するまでに要する実動作時間が、動作時間より大きいか否か判別する判別手段と、判別手段により大きいと判別された場合は、演奏操作子が操作を終了したタイミングから演奏操作子の操作を解除するに要する時間を減算したタイミングを、判別手段により小さいと判別された場合は、演奏操作子が操作解除を終了するタイミングに演奏操作子の操作を解除するに要する時間を加算したタイミングを、手指の位置に移行を開始すべき動作タイミングとする制御手段と、を含むことが望ましい。

0010

さらに制御手段は、判別手段により小さいと判別された場合でかつ演奏操作子の操作を解除するに要する時間が実時間と比較して所定割合以上大きい場合には、演奏操作子が操作解除を終了するタイミングに加算する演奏操作子の操作を解除するに要する時間を圧縮することが望ましい。

0011

本発明の記録媒体は、演奏操作の対象となる演奏操作子群上で発生させるべきイベントの内容を表すイベントデータ、該イベントの発生タイミングを示す時間データ、及び該イベントの発生に使用すべき指を指定する指データを少なくとも有するデータ群を単位楽音・運指データとして構成されている楽音・運指データを取得する楽音・運指データ取得手段と、楽音・運指データ取得手段にて取得された楽音・運指データに基づいて、少なくとも演奏操作子群上の手指の位置表わす動作制御データを生成する動作制御データ生成手段と、動作制御データ生成手段により生成された動作制御データにて表わされる当該手指の位置に移行を開始すべき動作タイミングを、直前の手指の位置から当該手指の位置まで移行するに要する動作時間に基づいて決定する動作タイミング決定手段と、動作制御データ生成手段からの動作制御データ及び動作タイミング決定手段からの動作タイミングに基づいて、演奏操作子群を操作していく手指の動作を動画表示する動作表示手段と、を実現させるプログラムを記録している。

0012

本発明では、手指を複数のパートオブジェクト)に分け、楽音・運指データを基に、演奏操作子群上で生じるイベント単位で、イベントを生じさせた後(演奏操作子群が鍵盤であれば押鍵終了時、或いは離鍵後が対応)の手指の状態を各パート毎に求め、該求めた状態にパート単位で順次、移行させることにより、手指による演奏動作を動画表示する。そのようにして、演奏動作の一連の流れを動画表現することにより、ユーザに演奏中における手指の動作を容易に理解させることが可能となる。また、イベント単位で手指の状態を確定させることから、長い時間をかけて1イベントを生じさせるための指の動作を表現するようなことは回避される。その結果、動画表示させる演奏動作もより自然な形となる。また、曲の速さに合わせて手指の移行開始及び移行終了のタイミングを変更しており、演奏される曲の速度が変っても、それに応じた手指の動作表示をユーザーに理解させることができる。

発明を実施するための最良の形態

0013

以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。図1は、本実施の形態による演奏動作表示装置の回路構成図である。この演奏動作表示装置は、後述する楽音・運指データを外部から取得し、取得した楽音・運指データに基づいて演奏中の手指の動作を動画で表示する装置として実現されている。

0014

上記演奏動作表示装置は、図1に示すように、装置全体の制御を行うCPU101と、そのCPU101が実行するプラグラムや各種制御データ(画像表示用の各種データを含む)などを格納したROM102と、そのCPU101がワーク用に用いるRAM103と、上記楽音・運指データを含む各種データを取得するためのデータ入力部104と、CPU101から送られたデータを画面上に表示する表示部105と、ユーザが操作の対象とする操作部106と、CPU101の指示に従って楽音の波形データを生成する音源107と、その音源107が出力した波形データをサウンドに変換して放音するサウンドシステム108と、CPU101を各部102〜107と接続するバス109と、を備えて構成されている。

0015

上記データ入力部104は、例えばフロッピー登録商標ディスクドライブFDD)である。表示部105は、例えばCRT、或いは液晶表示装置などの表示装置である。操作部106は、例えば各種スイッチやキー等の複数の操作子、及びそれら操作子への操作を検出する検出回路から構成された入力装置である。サウンドシステム108は、例えばD/Aコンバータアンプ、及びスピーカからなるシステムである。なお、データ入力部104は、外部機器が出力した信号を少なくとも受信できるインターフェース、或いは所定のネットワークとの通信を行う通信制御装置であっても良い。

0016

上記楽音・運指データは、図2に示すように、楽音データに運指データを付加する形で構成されている。楽音データは、通常は演奏の再生に使用される演奏データシーケンスデータ)であり、楽音の音階音高)データ、その楽音の発音が開始(ノートオンイベント)か消音ノートオフイベント)かを含むイベントの種別を表す種別データ、及び楽音の音高データと種別データによって特定されるイベントが発生したタイミングを示す時間データを1単位のデータ(以降、便宜的に単位楽音データと呼ぶ)として、その単位楽音データをイベントの発生順に並べた形で構成されている。運指データは、単位楽音データ毎に付加された、その単位楽音データが表すイベントを発生させるために用いるべき指を示す指番号データからなるデータである。指番号として、親指には0、人差し指には1、中指には2、薬指には3、小指には4がそれぞれ割り当てられている。

0017

上記運指データには、通常、指番号データの他に、少なくとも、動かす指が右手左手かを示す手データが存在し、単位楽音データ毎に、それらのデータが付加される。しかし、ここでは、混乱を避けて理解を容易とするために、右手のみに着目して手データ等は考慮しないことにする。上記時間データは、イベント間時間間隔デルタタイム)でそのイベントの発生タイミングを表すデータであり、種別データ、及び音高データは、例えばMIDIデータを構成するデータである。

0018

なお、上記楽音データ(演奏データ)では、楽音の発音開始オン)、その楽音の消音(オフ)をそれぞれ別のイベントとして扱い、楽音の発音期間はそれらのイベントによって指定されるようになっているが、楽音データはそれらのイベントを一つにまとめたものであっても良い。即ち単位楽音データは、例えば音高データ、その音高データで指定される楽音の発音開始タイミングを指定する時間データ、及びその楽音を発音させている時間長(ゲートタイム)を指定する時間長データから構成されるものであっても良い。このことから明らかなように、楽音データの形式は特に限定されるものではない。

0019

以上の構成において、その動作を説明する。CPU101は、電源がオンされると、ROM103に格納されているプログラムを読み出して実行することにより、装置全体の制御を開始し、表示部105には初期画面を表示させる。以降は、ユーザの操作部106への操作に応じて制御を行う。

0020

CPU101は、その初期画面を表示させるための画像データを、例えばRAM103を作業用に使用して、ROM102から読み出した複数の画像データを用いて生成する。そのようにして生成された初期画面の画像データを送られた表示部105は、それを特には図示しないメモリ(例えばデュアルポートRAM)に格納する。それ以降における表示内容の全体的、或いは部分的な変更は、例えばCPU101が、そのメモリに格納された画像データ中でデータを書き換えるべき部分の画像データをROM102から読み出すか、或いはそれを用いて生成し、そのようにして得た画像データを、そのメモリ中の画像データを書き換えるべき部分に上書きすることで行われる。そのようにして、CPU101は、表示部105に、表示すべき画面やメッセージ、後述する演奏動作を表現する手指などを必要に応じて表示させる。

0021

ユーザが操作部106を操作してフロッピー(登録商標)ディスク(FD)に格納されたファイルのデータの読み出しを指示した場合、その旨を示すデータが操作部106からバス109を介してCPU101に送られる。そのデータを受け取ったCPU101は、データ入力部(FDD)104に対しそれの読み出しを指示するコマンドを送り、その後にデータ入力部104から送られるそのファイルのデータをRAM103に格納する。そのようにして、楽音・運指データを含め、ユーザが指定したデータをファイル単位でFDから取得する。

0022

CPU101にデータを読み出させるファイルの指定は、特に詳細な説明は省略するが、操作部106を操作してファイル名を入力するか、或いはFDに格納されたファイルの一覧を表示部105に表示させて、そのなかからファイルを選択することで行うようになっている。その一覧に表示させるファイル名は、CPU101が、データ入力部104にFDに格納されたファイル名を読み出させて受け取ったものである。

0023

特開平10−39739号公報に開示された従来の演奏動作表示装置のように、基本的には押鍵時における手指の形だけを表示させるのでは、その形に移行するまでの手指の動かし方をユーザは理解しにくい。このことから、本実施の形態では、イベント単位で、それまでの手指の状態から、そのイベントを生じさせる手指の状態に移行するまでの動作を動画で表示するようにしている。即ち手をどこからどこまで移動させるか、どの指の状態をどのように変化せるか、といったことを動画で表示するようにしている。そのようにして、演奏中における一連の手指の動作を細かく表示した場合、どのように手指を動作させれば良いのかを考えさせることなくユーザに理解させることができる。

0024

演奏中における手指の動作を動画で表示させるためには、そのためのデータ(以降、動作制御データと呼ぶ)を生成しなければならない。そのデータは、楽音・運指データから生成するが、対象となる楽音・運指データによってはその生成に重い負荷がかかる。これは、動作制御データを生成しつつ、楽音・運指データ(楽音データ)を再生させようとすると、楽音の発音や画像の表示に不具合を生じさせる可能性があることを意味する。即ち、楽音を発音させるべきタイミングで発音させられなかったり、手指の動作をスムーズに表示させられないといったことが生じる可能性がある。このことから、本実施の形態では、動作制御データの生成は楽音・運指データの再生とは別に行うようにしている。

0025

動作制御データの生成は、例えばRAM103にファイル形式で格納された楽音・運指データを対象に行うようにしている。ユーザが操作部106を操作して、RAM103に格納された楽音・運指データのなかから一つを指定(選択)し、動作制御データの生成を指示した場合、CPU101は、以下のようにしてユーザが指定した楽音・運指データの動作制御データを生成する。なお、楽音・運指データの指定方法は、基本的にFDから読み出すファイルを指定する場合と同じである。

0026

図3は、表示用の手指の構造を説明する図である。身体の各部は、関節を曲げて動かすことができる。これは、手指においても同じである。このことから、本実施の形態では、図3に示すように、手首から先を、手と5本の指に分けている。各指は、3関節の曲げ動作が行えることから、3つの部分に更に分けている。以降、表示する手指については、実際の手指のそれと区別するために「パート」を最後に付けて表記することにする。

0027

図3中の301〜306は、各部分を動かすうえでの基点である。具体的には、基点301は手パートの基点であり、手首(の関節)に対応する。基点302は親指パートの基点であり、その第1関節に対応する。基点303〜306は、それぞれ、人差し指パート、中指パート、薬指パート、及び小指パートの基点であり、対応している指の第1関節に対応する。

0028

手パートの状態は、基点301のx、y、z軸上における各位置hx、hy、hzの他に、z軸の周り回転角hrzで管理している。それらを示す値は、それぞれ、用意した変数代入させることで保持させている。それにより、3次元で手の動きを表現するようになっている。z軸の周りの回転角hrzは、手パートの基点301から中指パートの基点304までの長さLaをx軸上に投影させた際に、基点304が投影されたx軸上の位置から基点301が投影されたx軸上の位置を引いて得られる長さがその長さLaと一致する状態が基準(0度)である。例えば図3に向かって左回りが正、右回りが負である。そのようにして、図3中の鍵盤300との相対的な位置関係を任意に変更できるようにしている。なお、x軸、或いは/及び、y軸の周りの回転角を更に考慮しても良い。上記hx、hy、hz、及びhrzを保持させる変数については、以降、そのシンボルを最後に付加して表記する(変数hx、等)ことにする。

0029

各指には、上記したように3つの関節がある。このことから、第1関節だけでなく、第2及び第3関節も基点とし、第1関節と第2関節間、第2関節と第3関節間、及び第3関節から先を、それぞれ一つのパートとしている。ここでは、それらのパートをそれぞれ、指第1パート、指第2パート、及び指第3パートと呼ぶことにする。それらの長さL1、L2、及びL3は、指毎にその長さが異なることから、各指パート毎に定めている。

0030

指の第1関節は2方向(曲げたり伸ばしたりする方向と、開いたり閉じたりする方向)に動き、他の第2、及び第3関節は一方向にのみ動く。このことから、指第1パートの状態は、第1関節に対応する基点上におけるz軸の周りの回転角frzと、手のから手のひらに向けてそれを折り曲げた角度frx1とで管理している。指第2パート、及び指第3パートは、それぞれ、第2関節、及び第3関節に対応する基点上において、それを手の甲から手のひらに向けて折り曲げた角度frx2、及びfrx3で管理している。そのようにして、指の間を広げたり狭めたり、指を伸ばしたり曲げたりといった動作を模倣できるようにしている。なお、指第1〜第3パートの状態を管理するための角度frx1〜frx3は、例えば基点を介してつながっている2つのパートが直線となる状態を基準(0度)として表したものである。このため、例えば手の甲と指の第2関節までが直線状となった状態では、角度frx1は0となる。以降は、角度frx1〜3の何れかを変化させる動きを指(指パート)の縦の動き、回転角frzを変化させる動きを指(指パート)の横の動きとも呼ぶことにする。

0031

上記frz、及びfrx1〜3の値は、それぞれ、用意した変数に代入させることで保持させている。それらの値は各指パート毎に保持しなければならないことから、その変数は配列変数とし、指番号で指定される要素に、対応する値を代入させている。以降、frz、及びfrx1〜3を保持させる配列変数も、そのシンボルを最後に付加して表記する(配列変数frz、等)ことにする。

0032

各指パートの基点302〜306は、手パートの基点(手首)301の位置の変化に伴って移動する。上記したように、各指パートは人間の指を模倣した動きを表現させることができる。このため、鍵盤300上の任意の鍵を押鍵するために手を移動させる動作や、鍵を押鍵、或いは離鍵する指の動作、それらを組み合わせた動作を動画で表現することができる。その表現は、鍵盤300を操作していく手指の各パートの動作を表示することで行うことから、鍵盤300上の白鍵黒鍵のサイズやその並び、各鍵間の位置関係、などのデータは予め変数などの形で用意している。

0033

図4は、手の移動範囲を説明する図である。手パートは基点301によってその表示状態を管理している。図4は、その基点301の位置として取りうる範囲を示したものである。

0034

鍵盤と手首との間のy軸上における距離は、押鍵するのが白鍵か黒鍵かで異なる。当然のことながら、黒鍵を押鍵する場合は白鍵を押鍵する場合と比較して距離は小さくなる。また、同じ白鍵、或いは黒鍵を押鍵するとしても、複数の鍵を同時に押鍵するのか1鍵だけを押鍵するのかによってその距離は変化する。複数の鍵を同時に押鍵しているときには、各指の間を広げた形となっているので、1鍵だけを押鍵しているときと比較して鍵盤に近くなる。このようなことから、本実施の形態では、鍵盤300から離した場合の基点301のy軸上の位置としてYPOS1、その鍵盤300に近づけた場合の位置としてYPOS2を定めている。

0035

一方、鍵盤と手首(手のひら)の間のz軸上における距離も、複数の鍵を同時に押鍵するのか1鍵だけを押鍵するのかによって変化する。複数の鍵を同時に押鍵しているときには、手全体を鍵盤に向けて移動させている形となっているので、その距離は小さくなる。このようなことから、本実施の形態では、鍵盤300から離した場合の基点301のz軸上の位置としてZPOS1、その鍵盤300に近づけた場合の位置としてZPOS2を定めている。そのような位置を定めて、白鍵、或いは黒鍵を押鍵するのか、複数の鍵を押鍵するのか1鍵を押鍵するのか、といった動作の違いを表現するようにしている。

0036

図3に示すように複数のパートに分割した手指の動画表示は、各パートの状態を演奏の進行に応じて順次、変更させていくことで行っている。その動画表示を実現させるための動画制御データは、本実施の形態では2段階で生成している。ここでは、便宜的に、始めの段階で生成したデータを動画制御データA、次の段階で生成したデータを動画制御データBと呼ぶことにする。

0037

上記動画制御データAは、CPU101が、図2に示すような楽音・運指データの他に、各指パートの長さ(指第1〜第3パートの長さ)やその手パートにおける配置、鍵盤300上の鍵の配置や各種鍵の形状といった予め用意したデータ(パラメータ)を参照しつつ生成する。CPU101は、楽音・運指データ中の単位楽音データ、及びそれに付加された指番号データ、更にはそれらによって指定される演奏の流れなどを解析して、イベント単位でそれまでの手指の状態から次のイベントを生じさせるために移行させる手指の状態を求め、その後者の手指の状態を指定するデータ、即ちどのパートの状態をどのように変化させるべきかを指定するデータをRAM103に保存する。手や指を動かす速さは、イベント間の時間間隔の長さに依存する。その時間間隔が短いほど、手や指を速く動かさなければならない。このことから、イベント間の時間間隔を基に、パートの状態の変化を開始するタイミングやその変化を継続している時間を決定し、それらを示すデータも合わせてRAM103に保存する。そのようにして生成・保存したデータが動画制御データAである。なお、上記解析は、例えば楽音データに付加された運指データの生成に用いたアルゴリズムにより行われる。それにより、求めた手指の状態が不自然な形とならないようになっている。

0038

上記動画制御データAの生成によって、離鍵イベントでは離鍵させる指パートの離鍵後の状態が決定し、押鍵イベントでは指パートの押鍵時の状態の他に、必要に応じて、その状態への移行に合わせて他のパートの状態を決定する。他のパートの状態の決定とは、例えば押鍵すべき鍵の位置やその種類(白鍵か黒鍵か)に応じた手パートの移動や、押鍵中の鍵があれば、その鍵を押鍵させている指パートはその鍵から離すことができないことから、その手パートの移動に伴って指パート間を広げたり狭くする、といったことである。CPU101は、その決定した状態に移行するまでを幾つかの段階に分け、各段階毎にその状態を示すデータを生成し、RAM103に動作制御データAとは別に保存する。そのようにして生成・保存したデータが動作補助データBである。なお、本実施の形態では、後述するように、イベント単位での動作制御データAの生成に連動して、動作制御データBの生成も行うようにしている。

0039

図5は、上述したようにして生成・保存される動作制御データの構成を説明する図である。同図(a)は動作制御データA、同図(b)は動作制御データBを示す。

0040

動作制御データAは、図5(a)に示すように、値を変更すべき変数、或いは配列変数の要素を指定するデータ(以降、変数指定データと呼ぶ)、変数、或いは配列変数の要素の変更後の値である値データ、変数、或いは配列変数の要素に対応するパートを動作させている時間を示す動作時間データ、及びそのパートの動作終了、或いは動作開始のタイミングを指定する時間データを、演奏上の1イベントに対応するデータ(それらをまとめて単位動作データAと呼ぶことにする)として構成されている。値データ、及び動作時間データは変数指定データ毎に存在する。それにより、変数指定データが指定する変数、或いは配列変数の要素の値で指定されるパートの状態は、独立に変化させられるようにしている。単位動作データA中の時間データは、楽音・運指データ中の対応する単位楽音データ中の時間データと一致する。なお、一組の変数指定データ、値データ、及び動作時間データはパートの或る状態量をどのように変化させるかを表していることから、以降、それらをまとめてパート動作データと呼ぶことにする。

0041

図5(a)に示す動作制御データAは、図2に示す楽音・運指データを基に生成されたものであり、以下のようなイベント、即ちパートの状態変化を生じさせることを表している。図2も参照しつつ、時系列に沿って説明する。

0042

図2に示すように、楽音・運指データ中の最初の単位楽音データが指定するイベントは、音名が「C3」の楽音の発音開始である。その「C3」は、鍵番号ノートナンバー)の64が対応する。このため、そのイベントは、鍵盤号64の鍵の押鍵を表している。

0043

そのイベントの発生は、時間データの値である100で指定されるタイミングであり、その前にはイベントは存在していない。各パートには初期状態(対応する変数、或いは配列変数の要素の初期値)を定めている。このため、そのイベントが発生する様子を表示するには、指番号データで指定された人差し指パートで鍵盤号64の鍵を押鍵させるまでに、その押鍵を行える位置にまで手パートを移動させておかなければならない。ここでは、変数hxの値を値データの100として得られる位置に手パートを移動させなければならない。動作制御データA中の最初の単位動作データAは、そのために生成されたものである。その端子動作データAでは、時間データの値が0で動作時間データも0である。このため、それは、図6(a)に示すように、手パートは初めから変数hxの値を100としたx軸上の位置に表示させることを表している。

0044

なお、手パートは、最初の押鍵を行える位置に初めから表示させなくても良い。例えば、予め定めた位置に表示させた後、その押鍵を行うべきタイミングとなるまでに、その位置から押鍵を行える位置に移動させても良い。時間データ、及び動作時間データの値は、予め定めた単位時間で表したものであることから、その値で指定される時間の単位は単位時間と呼ぶことにする。

0045

次の単位動作データAでは、時間データは100、変数指定データは配列要素frx1[1]と配列要素note[1]を指定し、値データは配列要素frx1[1]の値として10を、配列変数note[1]の値として64をそれぞれ指定し、動作時間データは配列要素frx1[1]では−5、配列要素note[1]では0となっている。これは、直前(最初)の単位動作データAが表すイベントから100単位時間が経過した後、人差し指パートを第1関節で曲げて鍵盤号64の鍵を押鍵するイベントを発生させることを表している。動作時間データの負の値は、その第1関節で曲げ始めるのを時間データで指定されるタイミングより5単位時間だけ早く開始させることを表している。それにより、直前のイベントから95単位時間が経過した後に、人差し指パートは鍵盤号64の鍵に対する押鍵動作を開始し、100単位時間が経過したときに押鍵が完了することになっている。配列変数note[1]の動作時間データの0は時間データが示すタイミングで楽音を発音開始させることを表している。

0046

その次の単位動作データAでは、時間データは50、変数指定データは配列要素frx1[1]と配列要素note[1]を指定し、値データは配列要素frx1[1]の値として0を、配列変数note[1]の値として0をそれぞれ指定し、動作時間データは配列要素frx1[1]では2、配列要素note[1]では0となっている。これは、直前の単位動作データAが表すイベントから50単位時間が経過した後、それまで第1関節で曲げていた人差し指パートを伸ばして鍵盤号64の鍵を離鍵するイベントを発生させることを表している。動作時間データの値は正である。それにより、直前のイベントから50単位時間が経過した後に、人差し指パートは伸び始めて鍵盤号64の鍵を離鍵し、それから2単位時間が経過して元の位置に戻ることになっている。配列変数note[1]の値データの0は離鍵を表し、その動作時間データの0は時間データが示すタイミングで楽音を消音させることを表している。

0047

このように、動作制御データA中の単位動作データAは、イベント発生時に、どのパートをどの状態に移行させるかを指定するだけでなく、その移行にかける時間を動作時間データによって指定するようになっている。

0048

一方の動作制御データBは、図5(b)に示すように、値を変更すべき変数、或いは配列変数の要素を指定する変数指定データ、変数、或いは配列変数の要素の変更後の値である値データ、及び、変数指定データとそれの値データによって指定される状態に変化させるタイミングを指定する時間データを、1段階の動作を表現するデータ(それらをまとめて段階動作データと呼ぶ)として構成されている。当然のことながら、段階動作データ中の時間データの値は、対応する単位動作データA中の時間データの値以下である、単位動作データAを構成するパート動作データの数、即ち変数指定データが指定する変数、或いは配列変数の要素の数は、それまでの状態やイベントの内容などによって異なる。指パートを折り曲げるだけで済むのであれば一つの配列変数の要素の値を変更するだけで済む。しかし、他の指パートとの間隔を広げて或る指パートを折り曲げるのであれば、その指パートでは二つの要素の値を変更する必要がある。例えばその指パートが中指パートであり、人差し指パートとの間隔を広げるのであれば、中指パートの外側に位置する薬指パートや小指パートも、その中指パートの横の動きに合わせて、それぞれ、一つの要素の値を変更しなければならない。このようなことから、図5(b)には、各パート毎に、値の変更の対象となりうる変数、及び配列変数の要素を示してある。親指パートのfrz、frx1〜3は、全て配列変数の要素であり、明確に図示していないが、それらは人差し指パート、中指パート、薬指パート、及び小指パートにも存在する。各配列変数の要素は、指パートの指番号を引数として指定される。

0049

図5(b)に示す動作制御データBは図5(a)に示す動作制御データAを基に生成したものである。動作制御データA中で最初に位置する単位動作データA中の動作時間データの値は0であり、2番目の単位動作データA中の時間データの値は100、その単位動作データA中で最初に位置するパート動作データ中の動作時間データの値は5である。2番目、及び3番目の段階動作データ中の時間データの値はそれぞれ95、2となっている。このことから明らかなように、それらの段階動作データは2番目の単位動作データAを基に生成されたものであり、人差し指パートによる押鍵動作を表現するために、特には図示していないが、変数指定データによって配列要素frx1[1]が指定され、それに代入すべき値が値データとして設定されている。

0050

図6は、手指の動作表示例を説明する図である。図5に示す動作制御データに従って手指の各パートの状態を変化させていく様子を示したものである。図6(a)において、楽音・運指データでは、楽音・運指データによって指定される楽音の発音開始タイミング(押鍵タイミング)、及びその消音タイミング離鍵タイミング)を時間軸上に矢印で示してある。楽音の音名(「C」や「F」など)は矢印の近傍に示してある。指動作では、押鍵動作開始タイミング、及び離鍵動作開始タイミングを時間軸上に矢印で示してある。その矢印の近傍に表記した「1」や「2」などの数字は、押鍵、或いは離鍵する指パートの指番号である。手x位置では、手パートのx軸上の位置の時間変化を示してある。手y位置、及び手z位置では、それぞれ、手パートのy軸上、及びz軸上の位置の時間変化を示してある。手z位置の時間軸に表記した0は、楽音・運指データの再生開始時点を示している。なお、手x位置、手y位置、及び手z位置は、それぞれ、初期位置からの移動を相対的に示したものである。

0051

図6(a)に示すように、押鍵動作は、実際に楽音を発音させるタイミングよりも前に開始し、離鍵動作は、楽音の消音タイミングと合わせて開始するようになっている。手パートのx軸上における位置は、音名が「C」の鍵の離鍵動作開始後に、次に人差し指パートによって音名が「F」の鍵を押鍵できる位置に向かって移動を開始し、その押鍵開始タイミングの前に移動を完了させている。手パートのy軸上における位置は、親指パート、人差し指パート、中指パート、及び薬指パートによって、それぞれ、発音される楽音の音名が「D#」、「F」、「G」、及び「B」の鍵を同時に押鍵していることを表現するために、「G」の鍵の離鍵後に鍵盤300に向かって移動を開始し、即ち図4に示す位置YPOS1から位置YPOS2に向かって移動を開始し、それらの鍵の離鍵が開始するまでは位置YPOS2にとどまり、その離鍵の開始後に位置YPOS2から位置YPOS1に向かって移動を開始する。手パートのz軸上における位置は、それらの鍵の押鍵動作開始から最後の鍵の押鍵が終了するまでの間に鍵盤300に向かって下降する。即ちその間に図4に示す位置ZPOS1から位置ZPOS2に移動する。位置ZPOS2から位置ZPOS1への移動は、それらの鍵の離鍵動作開始から最後の鍵の離鍵が終了するまでの間に行われている。

0052

図6(b)は、図6(a)中の時点〜における手パートの基点(手首)301の位置を示す図である。それらの時点〜におけるxy平面上の位置は、それぞれ、〜で示してある。

0053

図6(b)に示すように、手パートは、始めにで示す位置からで示す位置にまで移動する。次には複数鍵を同時に押鍵するために、で示す位置に移動する。そので示す位置とで示す位置が同じことから明らかなように、複数鍵を押鍵している間はその位置にとどまる。で示す位置はで示す位置と同じである。このことから、複数鍵を離鍵後は、で示す位置からで示す位置に移動する。

0054

上述したように、手パートを移動させたり、各指パートの状態を変化させることで手指の動作を動画で表現している。図7は、実際の表示例を示す図である。

0055

図7に示すように、実際には、右手だけでなく、左手も表示している。押鍵中か否かをユーザが判りやすいように、押鍵中の鍵は他と表示色を変えて表現している。その表示色の変更は、押鍵時(発音開始時)から離鍵時(消音時)の間だけ行っても良いが、押鍵すべき鍵を事前に通知する、或いは離鍵すべき鍵を事前に通知する、といったことのために、表示色を複数の色に変更するようにしても良い。なお、特に詳細な説明は省略するが、本実施の形態では、手指の各パートのサイズの変更、即ち拡大、或いは縮小や、各パートの表示の透過表示、或いはワイヤーフレーム表示への変更、表示角度の変更、なども行えるようになっている。ユーザが実際に操作する鍵盤を備えている場合には、ユーザの演奏速度に応じて、楽音・運指データの再生速度(演奏動作の表示速度を含む)を変更するようにしても良い。

0056

図6に示すような手指パートの動作表示は、ユーザが操作部106を操作して、RAM103に格納された楽音・運指データの再生を指示した場合に行われる。その指示をユーザが行うと、CPU101は、楽音・運指データ(ここでは運指データを除いた部分である楽音データのみが対象)とそれを基に生成した動作制御データBを並行に処理する。それにより、楽音の発音と同期した手指の各パートの動作を表示部105に表示させる。本実施の形態では、それ以外に、楽音データから演奏内容を示す楽譜を表示するようになっている。

0057

図8は、本実施の形態による演奏動作表示装置の機能ブロック図である。図8に示すように、上記演奏動作表示装置は、機能的に見て、基本的に、楽音・運指データから動作制御データを生成するデータ生成部801、及び楽音・運指データや動作制御データを再生するリアルタイム処理部802から構成されている。データ生成部801において、楽音・運指データから動作制御データを生成するのは動作制御データ生成部803によって行われる。そのデータ生成部801には、図1において、例えばCPU101、ROM102、RAM103、データ入力部104、表示部105、及び操作部106が対応する。

0058

一方のリアルタイム処理部802は、データ生成部801が生成した動作制御データや楽音データを処理するデータ送出部(シーケンス処理部)804、そのデータ送出部804から送られた動作制御データに従って手指の動作を表示する動作表示部805、それから送られた楽音データに従って楽音を放音する音減歩806、及びそれから送られた楽音データに応じて楽譜を表示する楽譜表示部807を備えたものである。図1において、例えばCPU101、ROM102、RAM103、表示部105、操作部106、音源107、及びサウンドシステム108が対応する。

0059

次に、上述した動作制御データの生成やその再生などを実現するCPU101の動作について、図9図21に示す各種動作フローチャートを参照して詳細に説明する。

0060

図9は、動作制御データ生成処理の動作フローチャートである。この生成処理は、ユーザが操作部106を操作して、RAM103に格納された楽音・運指データのなかから一つを指定(選択)し、動作制御データの生成を指示した場合に、CPU101が、ROM102に格納されているプログラムを実行することで実現される処理である。図8に示すデータ生成部801はその生成処理を実行することによって実現される。始めに図9を参照して、その生成処理について詳細に説明する。

0061

この生成処理では、ユーザが指定した楽音・運指データから単位楽音データ、及びそれに付加された指番号データを順次、読み出しながら、その単位楽音データが表すイベントを指番号データが指定する指によって発生させる様子を表示するための動作制御データを生成するようになっている。ここでは、単位楽音データが表すイベントの種類として、ノートオンイベント、及びノートオフイベントに重点をおいて処理の流れを示してある。

0062

先ず、ステップ901では、初期設定を行う。その初期設定により、各種変数には初期値が代入され、RAM103には動作制御データを格納する領域が確保される。楽音・運指データから読み出す単位楽音データを管理するための変数peには、その先頭に位置する単位楽音データが格納されたアドレス値が代入される。

0063

ステップ901に続くステップ902では、楽音・運指データが終了したか否か判定する。例えば、楽音・運指データの最後には、そのデータの終了を表すユニークなデータ(以降、エンドデータと呼ぶ)が付加されている。このため、変数peの値が指定するデータがそのエンドデータであった場合、判定はYESとなり、ここで一連の処理を終了する。そうでない場合には、判定はNOとなってステップ903に移行する。

0064

ステップ903では、変数tkoldに変数tktimeの値を代入した後、その変数tktimeに、それまでの値に変数peが指定する単位楽音データの時間データの値を加算した値を代入する。続くステップ904では、その変数peの値が指定する単位楽音データが表すイベントがノートオンイベントか否か判定する。その単位楽音データがノートオンイベントを表すものであった場合、判定はYESとなってステップ905に移行し、そうでない場合には、判定はNOとなってステップ915に移行する。なお、各単位楽音データの時間データの値を累算していくことから明らかなように、変数tktimeの値は楽音データの再生を開始してから経過した時間(絶対時間)で示す値である。

0065

ステップ905〜909では、ノートオンイベントを表す単位楽音データに対応するための処理が行われる。先ず、ステップ905では、変数peの値で指定される単位楽音データを基に、各種の設定を行う。それにより、変数figに指番号データの値を代入し、変数noteには音高データ(鍵盤号)を代入するとともに、それらの値から単位動作データAを生成して保存する。そのような代入が終了した後はステップ906に移行する。なお、ここで生成される単位動作データAは、時間データ、変数figの値で指定される配列要素note[fig]を指定する変数指定データ、及びその配列要素note[fig]の値データ(変数figの値で指定される指パートに押鍵させる鍵のノートナンバー)である(図5(a)参照)。

0066

ステップ906では、その変数peの値で指定される単位楽音データが表すノートオンイベントの発生時に、他のノートオンイベントが発生中か否か、即ち他の鍵が押鍵されているか否か判定する。他の鍵が押鍵されていない場合、判定はYESとなってステップ907に移行し、そうでない場合には、判定はNOとなって後述するステップ909に移行する。なお、上記押鍵の判定は、楽音・運指データが表す仮想的な演奏を想定しての判定である。以降も便宜的に、特に断らない限り、その想定で説明を行うことにする。

0067

ステップ907では、手パートのy軸上の位置を決定する手のy位置処理を実行する。続くステップ908では、手パートのz軸上の位置を決定する手のz位置処理を実行する。その後に移行するステップ909では、他のイベントとの関係を考慮しつつ、単位楽音データが表すノートオンイベントに応じて手指の各パートを動作させる内容を決定するノートオンメイン処理を実行する。そのノートオンメイン処理を実行した後はステップ910に移行する。

0068

ステップ910では、変数bchordに「TRUE」を表す値が代入されているか否か判定する。直前のノートオンメイン処理の実行時に、単位楽音データが表すノートイベント和音を発音させるためのものであると判定すると、その変数bchordには「TRUE」を表す値が代入される。このため、ノートオンメイン処理の実行時に単位楽音データが和音を発音させるためのものと判定されていた場合、判定はYESとなってステップ913に移行する。そうでない場合には、判定はNOとなり、ステップ911に移行する。

0069

ステップ911では、手パートのx軸上の位置を決定する手のx位置処理を実行する。続くステップ912では、手パートのy軸上の位置を再度、決定する手のy位置再処理を実行する。その処理を実行した後は、ステップ913でその他の処理を実行し、続くステップ914で変数peに、次に対象となる単位楽音データのアドレスを代入した後、上記ステップ902に戻る。

0070

上記ステップ907〜909、911、912、及び後述するステップ917では、それぞれ、特定の動作が伴うパラメータ(変数、或いは配列変数の要素)に着目したパート動作データの生成が行われ、それが単位動作データAに追加される。それにより、ステップ913に移行時には、手指の各パートをどのような状態に移行させるかが確定するようになっている。このため、ステップ913では、単位動作データAから段階動作データを生成し、それをRAM103に格納することを行っている。その生成は、本実施の形態では、動作時間データで指定される時間間隔を複数に区切り、それまでの状態と移行後の状態の間を直線で補間することで行っている。また、そのステップ913では、ノートオンイベント、及びノートオフイベント以外のイベントを表す単位楽音データの処理も行っている。

0071

一方、上記ステップ904の判定がNOとなって移行するステップ915では、変数peの値で指定される単位楽音データがノートオフイベントを表しているか否か判定する。その単位楽音データがノートオフイベントを表している場合、判定はYESとなってステップ916に移行する。そうでない場合には、上記ステップ913に移行する。

0072

ステップ916では、変数peの値で指定される単位楽音データを基に、各種の設定を行う。それにより、変数figに指番号データの値を代入し、変数noteには音高データ(鍵盤号)を代入するとともに、それらの値から単位動作データAを生成して保存する。そのような代入が終了した後はステップ906に移行する。なお、ここで生成される単位動作データAは、時間データ、変数figの値で指定される配列要素note[fig]を指定する変数指定データ、及びその配列要素note[fig]の値データ(ここでは離鍵なので0である)である。それに続くステップ917では、ノートオフイベント時に手指の各パートを動作させるための動作制御データ(単位動作データAに追加するパート動作データ)を生成するノートオフメイン処理を実行する。その後は上記ステップ910に移行する。

0073

上述したようにして、動作制御データ生成処理では、動作制御データの生成の対象とする単位楽音データ、及びそれに付加した指番号データを順次、変更しながら動作制御データを生成する。それにより、動作制御データは演奏上のイベント単位で生成するようになっている。

0074

次に、上記動作制御データ生成処理内で実行される各種サブルーチン処理について、図10図20に示すその動作フローチャートを参照しながら詳細に説明する。

0075

図10は、上記ステップ907として実行される手のy位置処理の動作フローチャートである。サブルーチン処理では、始めに図10を参照して、手のy位置処理について詳細に説明する。

0076

基点301のy軸上の位置を示す値は、変数hynewに保持されている。この手のy位置処理では、基点301を次に配置すべき位置を求め、その位置を示す値を変数hynewに代入することが行われる。

0077

先ず、ステップ1001では、初期設定を行い、変数hynewの値を変数hynowに代入する。続くステップ1002では、現在、対象としている単位楽音データ、及び指番号データ以降のデータを読み出し、次に全ての鍵が離鍵するまでに親指か小指が黒鍵を押鍵するようになっているか否か判定する。次に全ての鍵が離鍵するまでに、0、或いは4を指番号データとする単位楽音データが存在していた場合、判定はYESとなってステップ1005に移行する。そうでない場合には、判定はNOとなってステップ1003に移行する。

0078

ステップ1003では、変数hynowに位置YPOS1(図4参照)を示す値が代入されているか否か判定する。その値が変数hynowに代入されていた場合、判定はYESとなり、ここで一連の処理を終了する。そうでない場合には、判定はNOとなり、ステップ1004で変数hynewに位置YPOS2を示す値を代入し、直前の単位楽音データの処理タイミングから今回の単位楽音データの処理タイミングまでに位置YPOS1への移動を完了させるパート動作データを生成し、それを単位動作データAに追加した後、一連の処理を終了する。

0079

一方、ステップ1002の判定がYESとなって移行するステップ1005でも、変数hynowに位置YPOS1(図4参照)を示す値が代入されているか否か判定する。その値が変数hynowに代入されていなかった場合、判定はNOとなり、ここで一連の処理を終了する。そうでない場合には、判定はYESとなり、ステップ1006で変数hynewに位置YPOS1を示す値を代入し、直前の単位楽音データの処理タイミングから今回の単位楽音データの処理タイミングまでに位置YPOS2への移動を完了させるパート動作データを生成した後、一連の処理を終了する。

0080

このように、手のy位置処理では、ユーザが親指、或いは小指を使って黒鍵を押鍵しなければならない場合、手パートを位置YPOS2に移動させて、鍵盤300に予め近づけるようにしている。今回を含め、親指、及び小指を使うことなく、全ての鍵を離鍵している状態となる場合、手パートは位置YPOS1に位置させている。

0081

親指、或いは小指を使って黒鍵を押鍵する以外にも、指を大きく開いた形で複数の鍵を押鍵したりすると、手と鍵盤との間のy軸上の距離は小さくなる。そのようなことに対応するための手パートの基点301のy軸上における位置調整は、ステップ912として実行される手のy位置再処理で行っている。

0082

図11は、図9に示す動作制御データ生成処理内でステップ908として実行される手のz位置処理の動作フローチャートである。次に、図11を参照して、その処理について詳細に説明する。

0083

現時点において基点301が存在すべきz軸上の位置を示す値は変数hznowに保持されている。直前の単位楽音データを処理した際の変数tktimeの値は変数tkoldに保持されている。手パートの基点301は、図4に示すように、z軸上では位置ZPOS1、或いはZPOS2の何れかの位置をとる。手のz位置処理の実行時は、押鍵されている鍵が存在していない状況である。

0084

先ず、ステップ1101では、変数hznowに位置ZPOS1を示す値が代入されているか否か判定する。その値が変数hznowに代入されていた場合、判定はYESとなり、ここで一連の処理を終了する。そうでない場合には、即ち手パートの基点301が位置ZPOS2に位置している場合には、判定はNOとなり、ステップ1102に移行して、変数tkoldの値が示すタイミングから変数tktimeの値が示すタイミングまでに、基点301を位置ZPOS2から位置ZPOS1に移動させるパート動作データを作成し、それを単位動作データAに追加する形でRAM103に格納する。それが終了した後に一連の処理を終了する。

0085

図12は、図9に示す動作制御データ生成処理内でステップ909として実行されるノートオンメイン処理の動作フローチャートである。次に、図12を参照して、その処理について詳細に説明する。

0086

現在、処理対象としている単位楽音データを実際に処理、即ち再生する際に、和音(コード)が発音中か否かを示す値(「TRUE」或いは「FALSE」)は変数bchordに保持されている。和音が発音中であれば、その和音を構成する楽音のなかで最後に発音が開始する楽音の単位楽音データのアドレスは変数pchordendに保持されている。ノートオンメイン処理では、そのような変数を含む各種変数の値が参照される。

0087

先ず、ステップ1201では、変数bchordの値が「TRUE」か否か判定する。処理対象としている単位楽音データを再生する状況で和音を発音させているとみなしていた場合、その変数bchordには「TRUE」が代入されていることから、判定はYESとなってステップ1207に移行し、そうでない場合には、判定はNOとなってステップ1202に移行する。

0088

ステップ1202では、変数balloffの値が「TRUE」か否か判定する。処理対象としている単位楽音データを再生する状況で押鍵されている鍵が存在している場合、判定はNOとなってステップ1206に移行する。そうでない場合には、判定はYESとなってステップ1203に移行する。

0089

ステップ1203では、処理対象としている単位楽音データ、及びそれに続く単位楽音データによって和音が発音されるか否か判定する和音判定処理を実行する。その和音判定処理において、それらの単位楽音データによって和音が発音されると判定すると、変数bchordには「TRUE」が代入されることになる。その実行後は、ステップ1204に移行する。

0090

ステップ1204では、変数bchordの値が「TRUE」か否か判定する。上記和音判定処理を実行した結果、新たに和音が発音されるとみなした場合、判定はYESとなり、ステップ1205でその和音を発音させる動作の内容を決定する和音動作処理を実行した後、一連の処理を終了する。そうでない場合には、判定はNOとなり、ステップ1206で押鍵動作の内容を決定するノートオン動作処理を実行した後、一連の処理を終了する。

0091

一方、上記ステップ1201の判定がYESとなって移行するステップ1207では、変数pchordendの値が変数peの値と等しいか否か判定する。変数peの値が指定する単位楽音データ、即ち現在、処理対象としている単位楽音データが、和音を構成しているとみなす楽音のなかで最後に発音される楽音の発音開始を指示するものであった場合、判定はYESとなり、ステップ1208で変数bchordに「FALSE」、変数pchordendにNULL(空値)をそれぞれ代入した後、一連の処理を終了する。そうでない場合には、判定はNOとなって、ここで一連の処理を終了する。

0092

このように、ノートオンメイン処理では、単位楽音データが発音開始を指示する楽音が和音を構成しているか否かにより処理を分岐させている。それにより、和音を発音させるのか単に楽音を発音させるのかに応じて、手指の各パートを動作させるようにしている。

0093

ここで、上記ノートオンメイン処理内で実行される各種サブルーチン処理について、図13図15を参照して詳細に説明する。図13は、上記ステップ1203として実行される和音判定処理の動作フローチャートである。ノートオンメイン処理内で実行されるサブルーチン処理では、図13を参照して、始めに和音判定処理について詳細に説明する。

0094

先ず、ステップ1301では、初期設定を行う。その初期設定を行うことにより、変数tknextには、変数peの値で指定される単位楽音データ以降で最初に楽音の発音開始を指示する単位楽音データの処理タイミングを絶対時間で示す値が代入され、変数tknextoffには、変数peの値で指定される単位楽音データ以降で最初に楽音の消音を指示する単位楽音データの処理タイミングを絶対時間で示す値が代入される。

0095

ステップ1301に続くステップ1302では、変数tknextの値が、変数tktimeの値に変数tkchordの値を加算した値より小さいか否か判定する。その変数tkchordには、和音を構成しているか否か判定するうえで基準となる、楽音間の発音開始間隔を示す値が代入されている。このことから、その間隔以内に次の楽音の発音が開始する場合、判定はYESとなってステップ1303に移行し、そうでない場合には、判定はNOとなって、ここで一連の処理を終了する。

0096

ステップ1303では、変数tknextoffの値が、変数tktimeの値に変数tkchordの値を加算した値より大きいか否か判定する。変数tkchordの値が示す時間が経過する前に、消音される楽音が存在していない場合、判定はYESとなり、ステップ1304で変数bchordに「TRUE」を代入した後、一連の処理を終了する。そうでない場合には、判定はNOとなり、ここで一連の処理を終了する。

0097

このように、本実施の形態では、変数tkchordの値が示す時間内に複数の押鍵(ノートオンイベント)があり、且つその時間内に離鍵(ノートオフイベント)が存在していなければ、その時間内に発音開始される楽音は和音を構成しているとみなすようにしている。

0098

図14は、図12に示すノートオンメイン処理内でステップ1205として実行される和音動作処理の動作フローチャートである。次に図14を参照して、和音動作処理について詳細に説明する。

0099

先ず、ステップ1401では、初期化処理を実行する。その初期化処理を実行することにより、変数tktime0には、変数tktimeの値が代入され、変数pe0には変数peの値が代入され、変数pchordendにはNULLが代入される。ステップ1401に続くステップ1402以降は、変数pe0の値を順次、インクリメントしながら、和音とみなす楽音の範囲の特定や、その和音を鳴らす動作内容を決定するための処理が行われる。

0100

ステップ1402では、楽音・運指データが終了したか否か判定する。変数pe0の値が指定するデータが楽音・運指データの最後に位置するエンドデータであった場合、判定はYESとなってステップ1410に移行し、そうでない場合には、判定はNOとなってステップ1403に移行する。

0101

ステップ1403では、変数pe0の値が変数peの値と等しいか否か判定する。それらの値が等しい場合、判定はYESとなってステップ1405に移行する。そうでない場合には、判定はNOとなり、ステップ1404で変数tktime0に、それまでの値に変数pe0の値が指定する単位楽音データの時間データの値を加算した値を代入した後、そのステップ1405に移行する。そのようにして、変数tktime0には、変数peの値が指定する単位楽音データ以降の単位楽音データを処理すべきタイミングを絶対時間で示す値が代入される。

0102

ステップ1405では、変数tktime0の値が、変数tktimeの値に変数tkchordの値を加算した値よりも小さいか否か判定する。変数pe0、及びpeの値がそれぞれ指定する単位楽音データの処理タイミングが、変数tkchordの値で指定される時間内でなかった場合、判定はNOとなって上記ステップ1410に移行する。そうでない場合には、判定はYESとなってステップ1406に移行する。

0103

ステップ1406では、変数pe0の値が指定する単位楽音データは押鍵(ノートオンイベント)を表すものであるか否か判定する。その単位楽音データがノートオンイベントを表していた場合、判定はYESとなり、ステップ1407で変数pchordendに変数pe0の値を代入し、続くステップ1408でノートオン動作処理を実行した後、ステップ1409に移行する。そうでない場合には、判定はNOとなってそのステップ1409に移行する。

0104

ステップ1409では、変数pe0に次の単位楽音データのアドレスを代入する。それを行った後、上記ステップ1402に戻る。このように、ステップ1402〜1409で形成される処理ループをステップ1402の判定がYES、或いはステップ1405の判定がNOとなるまで繰り返し実行することにより、変数pchordendには、和音を構成するとみなす楽音のなかで最後に発音が開始する楽音の単位楽音データのアドレス値が代入されることになる。

0105

一方、ステップ1402の判定がYES、或いはステップ1405の判定がNOとなって移行するステップ1410では、手パートがz軸上を移動していく動作(ここでは図4に示す位置ZPOS1から位置ZPOS2に移動していく動作である)を表現するパート動作データを作成する。その動作データを作成することにより、手パートの基点301が、変数tkstart0の値が示すタイミングで移動を開始し、変数tktimeの値が示すタイミングで位置YPOS2への移動が終了するようにさせる。そのようなパート動作データを単位動作データAに追加した後、一連の処理を終了する。

0106

上記変数tkstart0の値が示すタイミングは、和音を構成する楽音のなかで最初に発音される楽音を発音させる指パートの動作を開始するタイミングか、或いは各指パートの離鍵から押鍵に移行するまでの時間が比較的に長ければ、変数tktimeの値から、押鍵動作を開始してから押鍵するまでの基準時間を示す値を引いた値が示すタイミングである。それにより、和音を鳴らす状況に応じて、それを鳴らすための手指の各パートの動作を異ならせるようにしている。図6に示す例では、変数tkstart0に前者の値が代入された結果、親指パートの押鍵動作の開始に合わせて手パートのz軸上の移動が開始し、そのz軸上の移動が「D#」の楽音の発音開始時に終了していることを表している。なお、その基準時間を示す値は変数tkcostに代入されている。離鍵動作を開始してからその動作が完了するまでの基準時間を示す値は変数tkoffcostに代入されている。

0107

次に、上記ステップ1408、或いは図12に示すノートオンメイン処理内でステップ1206として実行されるノートオン動作処理処理について、図15に示すその動作フローチャートを参照して詳細に説明する。なお、この処理内では、単位楽音データに付加された指番号データは変数figに、その単位楽音データ中の音高データは変数noteに代入されている。

0108

先ず、ステップ1501では、初期設定を行う。その初期設定では、変数figの値を指番号データとして付加された、ノートオフイベントを表す直前の単位楽音データの処理タイミングを絶対時間で示す値を求め、その求めた値を変数tkfoffに代入することが行われる。

0109

ステップ1501に続くステップ1502では、変数tktimeの値から変数tkfoffの値を引いた値が、変数tkcostの値に変数tkoffcostの値を加算した値より小さいか否か判定する。即ち変数figで指定される指パートの離鍵動作を開始させてからその指パートを押鍵させるまでの時間が、離鍵動作の基準時間と押鍵動作の基準時間を足した時間よりも短いか否か判定する。前者の時間が後者の時間よりも長い場合、判定はNOとなり、ステップ1503で変数tkstartに、変数tktimeの値から変数tkoffcostの値を引いた値を代入した後、ステップ1504に移行する。そうでない場合には、即ち離鍵動作、或いは押鍵動作を基準時間で行わせる余裕がない場合には、判定はYESとなってステップ1506に移行する。

0110

ステップ1504では、変数tkendに、押鍵動作が終了するタイミングを示す値として変数tktimeの値を代入する。続くステップ1505では、変数figの値で指定される指パートが、変数tkstartの値が示すタイミングで変数noteの値が示す鍵に対する押鍵動作を開始し、変数tkendの値が示すタイミングでその動作を完了、即ち押鍵する動作を行わせるためのパート動作データを作成し単位動作データAに追加する。そのパート動作データ中の動作時間データの値が示す時間は、変数tkoffcostの値が示す時間である。その作成・追加を行った後、一連の処理を終了する。

0111

手パートを移動させなければ変数figの値で指定される指パートで鍵を押鍵させることができないこともある。各指パートの回転角frzは、その手パートの位置が確定していなければ確定させることはできない。このようなことから、ここでは単に押鍵する動作を行わせるためのパート動作データだけを作成している。指パートを横に動作させるためのパート動作データは、図9に示す動作制御データ生成処理内のステップ911の手のx位置処理を実行した際に、必要に応じて作成する。ここで作成したパート動作データも必要に応じて修正する。

0112

一方、上記ステップ1502の判定がYESとなって移行するステップ1506では、変数tktimeの値から変数tkfoffの値を引いた値に0.2を掛けた値が、変数tkoffcostの値よりも大きいか否か判定する。離鍵開始から次の押鍵までの時間に0.2を掛けて得られる時間が、離鍵動作の基準時間よりも長い場合、判定はYESとなり、ステップ1507で変数tkstartに、変数tkfoffの値に変数tkoffcostの値を加算した値を代入した後、上記ステップ1504に移行する。そうでない場合には、判定はNOとなり、ステップ1508で変数tkstartに、変数tkoffcostの値に0.8を掛けた値に変数tkfoffの値を加算した値を代入した後、ステップ1504に移行する。その後にステップ1505を実行した際に設定される動作時間データの値は、ステップ1507からステップ1504に移行したのであれば、変数tktimeの値から変数tkfoffの値を減算し、その減算結果から更に変数tkoffcosutの値を減算した値である。ステップ1508からステップ1504に移行したのであれば、変数tktimeの値から変数tkfoffの値を減算し、その減算結果から更に、変数tkoffcosutの値に0.8を掛けた値を減算した値である。

0113

このように、同じ指パートによる離鍵、押鍵を短い時間内に行わせる場合、離鍵動作に要する時間、及び押鍵動作に要する時間の少なくとも一方を調整して、それらの動作を表現するようにしている。

0114

図12に示すノートオンメイン処理では、上述した各種サブルーチン処理が実行される。それにより、指パートを押鍵させる動作を表現するためのパート動作データをサブルーチン処理単位で生成し単位動作データAに追加している。それらのパート動作データでは、変数hy、hz、配列変数hrx1〜3のうちの何れかが値の変更対象である。

0115

図16は、図9に示す動作制御データ生成処理内でステップ917として実行されるノートオフメイン処理の動作フローチャートである。次に、図16を参照して、ノートオフメイン処理について詳細に説明する。

0116

現在、処理対象としている単位楽音データを実際に処理、即ち再生する際に、消音すべき和音(コード)があるか否かを示す値(「TRUE」或いは「FALSE」)は変数bchordoffに保持されている。その和音があれば、その和音を構成する楽音のなかで最後に消音する楽音の単位楽音データのアドレスは変数pchordendoffに保持されている。ノートオフメイン処理では、そのような変数を含む各種変数の値が参照される。

0117

先ず、ステップ1601では、変数bchordoffの値が「TRUE」か否か判定する。処理対象としている単位楽音データを再生する状況で消音すべき和音があるとみなしていた場合、その変数bchordoffには「TRUE」が代入されていることから、判定はYESとなってステップ1606に移行し、そうでない場合には、判定はNOとなってステップ1602に移行する。

0118

ステップ1602では、処理対象としている単位楽音データ、及びそれに続く単位楽音データによって和音が消音、即ちその和音の構成音が全て消音されるか否か判定する和音オフ判定処理を実行する。その和音オフ判定処理において、それらの単位楽音データによって和音が消音されると判定すると、変数bchordoffには「TRUE」が代入されることになる。その実行後は、ステップ1603に移行する。

0119

ステップ1603では、変数bchordoffの値が「TRUE」か否か判定する。上記和音オフ判定処理を実行した結果、和音を消音させると決定した場合、判定はYESとなり、ステップ1604でその和音を消音させる動作の内容を決定する和音オフ動作処理を実行した後、一連の処理を終了する。そうでない場合には、判定はNOとなり、ステップ1605で離鍵動作の内容を決定するノートオフ動作処理を実行した後、一連の処理を終了する。

0120

一方、上記ステップ1601の判定がYESとなって移行するステップ1606では、変数pchordendoffの値が変数peの値と等しいか否か判定する。変数peの値が指定する単位楽音データ、即ち現在、処理対象としている単位楽音データが、和音を構成する楽音のなかで最後に消音される楽音の消音を指示するものであった場合、判定はYESとなり、ステップ1607で変数bchordoffに「FALSE」、変数pchordendoffにNULLをそれぞれ代入した後、一連の処理を終了する。そうでない場合には、判定はNOとなって、ここで一連の処理を終了する。

0121

このように、ノートオフメイン処理では、単位楽音データが消音を指示する楽音が和音を構成しているか否かにより処理を分岐させている。それにより、和音を構成する楽音を消音させるのか単に楽音を消音させるのかに応じて、手指の各パートを動作させる内容を決定している。

0122

ここで、上記ノートオフメイン処理内で実行される各種サブルーチン処理について、図17図19を参照して詳細に説明する。図17は、上記ステップ1602として実行される和音オフ判定処理の動作フローチャートである。ノートオフメイン処理内で実行されるサブルーチン処理では、図17を参照して、始めに和音オフ判定処理について詳細に説明する。

0123

先ず、ステップ1701では、初期設定を行う。その初期設定を行うことにより、変数tknextには、変数peで指定される単位楽音データ以降で最初に楽音の発音開始を指示する単位楽音データの処理タイミングを絶対時間で示す値が代入され、変数tknextoffには、変数peで指定される単位楽音データ以降で最初に楽音の消音を指示する単位楽音データの処理タイミングを絶対時間で示す値が代入される。

0124

ステップ1701に続くステップ1702では、変数tknextoffの値が、変数tktimeの値に変数tkchordの値を加算した値より小さいか否か判定する。変数tkchordの値が示す時間が経過する前に、消音される楽音が存在していない場合、判定はNOとなり、ここで一連の処理を終了する。そうでない場合には、判定はYESとなってステップ1703に移行する。

0125

ステップ1703では、変数tknextの値が、変数tktimeの値に変数tkchordの値を加算した値より大きいか否か判定する。変数tkchordの値が示す時間が経過する前に、次の楽音の発音が開始する場合、判定はNOとなり、ここで一連の処理を終了する。そうでない場合には、判定はYESとなり、ステップ1704で変数bchordoffに「TRUE」を代入した後、一連の処理を終了する。

0126

このように、本実施の形態では、変数tkchordの値が示す時間内に複数の楽音の消音(ノートオンイベント)があり、且つその時間内に発音開始する楽音(ノートオフイベント)が存在していなければ、和音の構成音とみなした楽音は消音すべき状況になったとしている。

0127

図18は、図16に示すノートオフメイン処理内でステップ1604として実行される和音オフ動作処理の動作フローチャートである。次に図18を参照して、和音オフ動作処理について詳細に説明する。

0128

先ず、ステップ1801では、初期化処理を実行する。その初期化処理を実行することにより、変数tktime0には、変数tktimeの値が代入され、変数pe0には変数peの値が代入され、変数pchordendoffにはNULLが代入される。ステップ1801に続くステップ1802以降では、変数pe0の値を順次、インクリメントしながら、和音とみなす楽音の範囲の特定や、その和音を消音させる動作内容を決定するための処理が行われる。

0129

ステップ1802では、楽音・運指データが終了したか否か判定する。変数pe0の値が指定するデータが楽音・運指データの最後に位置するエンドデータであった場合、判定はYESとなってステップ1810に移行し、そうでない場合には、判定はNOとなってステップ1803に移行する。

0130

ステップ1803では、変数pe0の値が変数peの値と等しいか否か判定する。それらの値が等しい場合、判定はYESとなってステップ1805に移行する。そうでない場合には、判定はNOとなり、ステップ1804で変数tktime0に、それまでの値に変数pe0の値が指定する単位楽音データの時間データの値を加算した値を代入した後、そのステップ1805に移行する。そのようにして、変数tktime0には、変数peの値が指定する単位楽音データ以降の単位楽音データを処理すべきタイミングを絶対時間で示す値が代入される。

0131

ステップ1805では、変数tktime0の値が、変数tktimeの値に変数tkchordの値を加算した値よりも小さいか否か判定する。変数pe0、及びpeの値がそれぞれ指定する単位楽音データの各処理タイミングが、変数tkchordの値で指定される時間内でなかった場合、判定はNOとなって上記ステップ1810に移行する。そうでない場合には、判定はYESとなってステップ1806に移行する。

0132

ステップ1806では、変数pe0の値が指定する単位楽音データは楽音の消音(ノートオフイベント)を表すものであるか否か判定する。その単位楽音データがノートオフイベントを表していた場合、判定はYESとなり、ステップ1807で変数pchordendoffに変数pe0の値を代入し、次にステップ1808でノートオフ動作処理を実行した後、ステップ1809に移行する。そうでない場合には判定はNOとなり、そのステップ1809に移行する。

0133

ステップ1809では、変数pe0に次の単位楽音データのアドレスを代入する。それを行った後、上記ステップ1802に戻る。このように、ステップ1802〜1809で形成される処理ループをステップ1802の判定がYES、或いはステップ1805の判定がNOとなるまで繰り返し実行することにより、変数pchordendoffには、和音を構成するとみなす楽音のなかで最後に消音する楽音の単位楽音データのアドレス値が代入されることになる。

0134

一方、ステップ1802の判定がYES、或いはステップ1805の判定がNOとなって移行するステップ1810では、手パートがz軸上を移動していく動作(ここでは図4に示す位置ZPOS2から位置ZPOS1に移動していく動作である)内容を指定するパート動作データを作成する。その動作データの作成は、変数tktimeの値が示すタイミングで移動を開始し、所定の速度で位置ZPOS1に達するように行う。そのようにしてパート動作データを生成し単位動作データAに追加した後、一連の処理を終了する。

0135

和音の消音動作内容として、手パートをz軸上における移動内容を指定するパート動作データは上述したようにして生成される。それにより、図6に示す例では、親指パートが「D#」の音高が割り当てられた鍵の離鍵開始に合わせて、手パートのz軸上の移動が開始している。

0136

次に、上記ステップ1808、或いは図16に示すノートオフメイン処理内でステップ1605として実行されるノートオフ動作処理処理について、図19に示すその動作フローチャートを参照して詳細に説明する。なお、この処理内では、単位楽音データに付加された指番号データは変数figに、その単位楽音データ中の音高データは変数noteに代入されている。

0137

先ず、ステップ1901では、初期設定を行う。その初期設定では、変数peの値で指定される単位楽音データ以降で、変数figの値が指番号データとして付加されているノートオンイベントを表す単位楽音データ中の音高データを抽出し、その抽出した音高データを変数nextnoteに代入することなどが行われる。

0138

ステップ1901に続くステップ1902では、変数figの値が指定する指パートが押鍵に使用中か否か判定する。変数noteの値で指定される楽音を実際には発音させないような場合、即ちその楽音の発音開始を指示する単位楽音データが存在していない、或いはその単位楽音データが存在していても、それに変数figの値が指番号データとして付加されていないような場合、判定はNOとなり、ここで一連の処理を終了する。そうでない場合には、判定はYESとなってステップ1903に移行する。

0139

ステップ1903では、変数noteの値が変数nextnoteの値と等しいか否か判定する。それらの値が等しくない場合、即ちユーザがそれまで押鍵していた鍵とは異なる鍵を同じ指で押鍵しなければならない場合、判定はNOとなってステップ1904に移行し、変数figの値で指定される指パートが、変数tktimeの値で指定されるタイミングで離鍵動作を開始させるパート動作データを生成した後、一連の処理を終了する。その動作データは、離鍵動作を開始させる指パートと隣の指パートとの間を広げさせていれば、その間を狭くさせて弛緩状態に戻す動作も行わせるものである。反対に、そうでない場合には、判定はYESとなってステップ1905に移行し、変数figの値で指定される指パートが、変数tktimeの値で指定されるタイミングで単に離鍵動作を開始させるパート動作データを生成した後、一連の処理を終了する。その動作データでは、離鍵動作を開始させる指パートと隣の指パートとの間を広げさせていても、その間を狭くさせることは行わせない。

0140

このように、本実施の形態では、指パートの離鍵後の状態は、それを次の押鍵に使用するか否かを考慮して決定している。それにより、次の押鍵に使わない指パートをいつまでも広げた状態にしておくようなことは回避させている。このため、指パートを離鍵開始時から次の押鍵終了時まで単に動かすようなことは無くなる。その結果、より自然な形で演奏動作を表現できるだけでなく、押鍵イベント、或いは離鍵イベントを発生させる指パートの動作や、その動作に伴う他の指パートの動作をより目立たせることができる。

0141

図16に示すノートオフメイン処理では、上述した各種サブルーチン処理が実行される。それにより、指パートを離鍵させる動作を表現するためのパート動作データをサブルーチン処理単位で生成し単位動作データAに追加している。それらの動作データでは、変数hy、hz、配列変数hrx1〜3、及びfrzのうちの何れかが値の変更対象である。

0142

図20は、図9に示す動作制御データ生成処理内でステップ911として実行される手のx位置処理の動作フローチャートである。次に、図20を参照して、手のx位置処理について詳細に説明する。

0143

先ず、ステップ2001では、指パートが押鍵している、或いは押鍵する鍵、その配置、各指パートの長さ、などを基に、横方向に動かした際の各指パートの回転角frzのなかの最大角(の絶対値)が最小となる手パートの基点301(手首)を軸としたz軸の周りの回転角hrzを求める。指を横に動かせる範囲は、指毎に若干、異なる。このことから、その回転角hrzは、指毎の横に動かせる範囲を考慮しつつ決定している。それにより、各指パートが実際の指が横に動く範囲を越えて横に動くのを回避させている。

0144

ステップ2001を実行することにより、手パート、及び各指パートのxy平面上での配置が確定する。このことから、ステップ2001に続くステップ2002では、各指パートが押鍵している、或いは押鍵する鍵、その鍵の配置、各指パートの長さ、その回転角frz、手パートの回転角hrz、及び手パートの長さLa(図3参照)などを基に、手パートの基点301のx軸上の位置hxを求める。その後はステップ2003に移行する。

0145

ステップ2003では、変数tkoldの値で指定されるタイミングから変数tktimeの値で指定されるタイミングまでに、手パートの基点301をステップ2002で求めた位置hxまで移動させたり、ステップ2001で求めた回転角hrzにさせるパート動作データをそれぞれ必要に応じて生成し単位動作データAに追加する。位置hx、及び回転角hrzを共に変化させる必要がなければ、それらのパート動作データは作成しない。

0146

各指パートのxy平面上での配置が確定することで、各指パートの回転角frzが確定し、押鍵させている、或いは押鍵させる指パートは伸ばしたままで良いのか、それとも第2関節、及び段3関節(第3関節は第2関節での曲がりに応じて曲げる必要がある)で曲げなければならないのか、といったことも確定する。押鍵させる指パートを第2関節で曲げることになれば、それを伸ばして押鍵させる場合と比較して、第1関節で曲げる角度は小さくさせなければならない。このようなことから、上記ステップ2003では、手パートの基点301の回転角をhrzとし、それを位置hxに移動させることによって状態を変化させるべき指パートがあれば、必要に応じて、指パートの状態を変化させるためのパート動作データを新たに作成したり、既に作成したパート動作データを修正することも合わせて行っている。それにより、他の指パートをくぐらせたり、或いはまたいでの押鍵動作や、指パートの横の動作に応じて他の指パートを横に動作させるといった動画表現を実現させている。そのようなことを行うステップ2003の処理を実行した後に一連の処理を終了する。

0147

上記手のx位置処理を実行すると、変数peの値で指定される単位楽音データが表すイベントの発生時、或いはそのイベント後の手指の各パートの状態を指定する各種変数、及び各種配列変数のなかで、変数hyの除く全てのものの値が確定することになる。その変数hyの値は、この手のx値処理の次にステップ912として実行される手のy位置再処理によって確定される。

0148

図21は、シーケンス処理の動作フローチャートである。このシーケンス処理は、例えばユーザが操作部106を操作して、予め指定(選択)した楽音・運指データの再生を指示した場合に、CPU101が、ROM102に格納されているプログラムを実行することで実現される処理である。図8に示すリアルタイム処理部802はそのシーケンス処理を実行することによって実現される。

0149

図5(b)に示す動作制御データBは、楽音・運指データとは別の領域に格納されている。動作制御データBを構成する段階動作データは、当然のことながら、楽音・運指データを構成する単位楽音データの数よりも多く、その処理タイミングは、通常、単位楽音データの処理タイミングと一致しない。このようなことから、動作制御データB、及び楽音・運指データは、それぞれ、並行に処理している。

0150

先ず、ステップ2101では、変数tktimeE、tktimeM、及びclockにそれぞれ0を代入したり、変数pe、及びpmにそれぞれ初期値を代入するといった各種変数への値の代入や、特には図示しないハードタイマ所定時間間隔で出力する割り込み信号を有効にして、タイマインタラプト処理の実行禁止を解除するといった初期設定を行う。その実行禁止を解除することによって、変数clockの値は、タイマインタラプト処理が実行される度にインクリメントされる。

0151

ステップ2101に続くステップ2102では、変数clockの値やテンポデータの値を用いた演算を行って、変数clockの値を楽音・運指データ中の時間データの単位で示す値を算出し、その算出結果を変数tktimeに代入する。その後はステップ2103に移行する。

0152

ステップ2103〜2109では、楽音・運指データの再生に係わる処理が実行される。先ず、ステップ2103では、楽音・運指データが終了したか否か判定する。変数peの値が指定するデータが楽音・運指データの最後に位置するエンドデータであった場合、判定はYESとなってステップ2110に移行し、そうでない場合には、判定はNOとなってステップ2104に移行する。

0153

ステップ2104では、変数peの値で指定される単位楽音データ中の時間データの値を変数tktimeEの値に加算した値が、変数tktimeの値以上か否か判定する。変数tktimeEには、それまでに処理した単位楽音データ中の時間データの値を累算した値、即ち直前に処理した単位楽音データの処理タイミングを絶対時間で示す値が代入されている。このため、変数peの値で指定される単位楽音データを処理すべきタイミングとなった場合、判定はYESとなってステップ2105に移行する。そうでない場合には、判定はNOとなってステップ2110に移行する。

0154

ステップ2105では、変数tktimeEに、それまでの値に変数peの値が指定する単位楽音データ中の時間データの値を加算した値を代入する。それにより、次の単位時間データを処理すべきタイミングを示す値を変数tktimeEに代入した後は、処理タイミングとなった単位楽音データをそれが表すイベントの種類に応じて処理を行い、その処理による演奏の進行に応じて、表示ページ切り換え、新たに発音させた楽音に対応する音符の表示色の変更などを行い、更に変数peに、それまでのアドレス値から1イベント分だけ進めたアドレス値を代入した(以上、ステップ2106〜2109)後、ステップ2110に移行する。なお、単位楽音データの処理は、CPU101が、そのデータから音源107に送出すべきコマンドを生成して送出することで行われる。

0155

ステップ2110〜2115では、動作制御データBに従って手指の各パートを動作させるための処理が行われる。先ず、ステップ2110では、動作制御データBが終了したか否か判定する。変数pmの値が指定する段階動作データが動作制御データB中に存在していない場合、判定はYESとなってステップ2115に移行し、そうでない場合には、判定はNOとなってステップ2111に移行する。

0156

ステップ2111では、変数pmの値で指定される段階動作データ中の時間データの値を変数tktimeMの値に加算した値が、変数tktimeの値以上か否か判定する。変数tktimeMには、上記変数tktimeEと同様に、それまでに処理した段階動作データ中の時間データの値を累算した値、即ち直前に処理した段階動作データの処理タイミングを絶対時間で示す値が代入されている。このため、変数pmの値で指定される段階動作データを処理すべきタイミングとなった場合、判定はYESとなってステップ2112に移行する。そうでない場合には、判定はNOとなって上記ステップ2102に戻る。

0157

ステップ2112では、変数tktimeMに、それまでの値に変数pmの値が指定する段階動作データ中の時間データの値を加算した値を代入する。それにより、次の段階動作データを処理すべきタイミングを示す値を変数tktimeMに代入すると、ステップ2113に移行して、処理タイミングとなった段階動作データに従って、手指の各パートのなかで状態を変化させるべきパートの状態を変化させて演奏動作を示す表示内容を更新する演奏動作表示更新処理を実行する。その実行後は、ステップ2114で変数pmに、それまでのアドレス値から1イベント分だけ進めたアドレス値を代入した後、上記ステップ2102に戻る。なお、表示内容の更新は、例えばCPU101が、表示部105のメモリに格納された画像データ中でデータを書き換えるべき部分の画像データをROM102から読み出すか、或いはそれを用いて生成し、そのようにして得た画像データを、そのメモリ中の画像データを書き換えるべき部分に上書きすることで行われる。

0158

一方、上記ステップ2110の判定がYESとなって移行するステップ2115では、楽音・運指データが終了したか否か判定する。変数peの値が指定するデータが楽音・運指データの最後に位置するエンドデータであった場合、判定はYESとなって一連の処理を終了し、そうでない場合には、判定はNOとなって上記ステップ2102に戻る。

0159

上述したシーケンス処理を実行することにより、図7に示すような画像が表示部105に表示され、それに表示された手指の各パートが図6に示すように動作することになる。

0160

なお、本実施の形態では、図6に示すように、手パートは単位楽音データの処理タイミングで動作を開始させることを基本としているが、必ずしもそうしなくて良い。演奏中の動作としては、例えば横動作は押鍵動作の開始前に完了するといった特徴がある(関口、英保:仮想空間におけるピアノ演奏動作の生成と表示、情報処理学会研究報告Vol99、No.16(1999))。このことから、例えば押鍵では、例えば手パートや指パートの移動が完了した後に指パートを関節で曲げての押鍵動作を開始するといったように、複数のフェーズに分けて手指の各パートを動作させるようにしても良い。

0161

手パートの基点301がとれるz軸上の位置は、位置ZPOS1、或いはZPOS2の2通りだけにしているが、その位置を3通り以上、或いは任意に設定できるようにしても良い。そのようにした場合、指が他の指をくぐる動作やまたぐ動作をより適切に表現できるようになる。

0162

また、本実施の形態では、演奏操作子群として鍵盤を想定し、その鍵盤に対する演奏動作を表示しているが、鍵盤以外の演奏操作子群に対する演奏動作を表示するようにしても良い。

0163

本実施の形態は音源107や表示部105を搭載した装置に本発明を適用したものであるが、本発明を適用できる装置はそれらを搭載したものに限定されるわけではない。音源107は無くても良く、表示部105についても、外部の表示装置と接続できるのであれば、無くても良い。

0164

上記演奏動作表示装置の動作を実現させるようなプログラムは、CD−ROM、フロッピー(登録商標)ディスク、或いは光磁気ディスク等の記録媒体に記録させて配布しても良い。或いは、公衆網等の通信回線を用いて、そのプログラムの一部、若しくは全部を配信するようにしても良い。そのようにした場合には、ユーザはプログラムを取得して任意の演奏動作表示装置、或いはコンピュータ等のデータ処理装置にロードすることにより、その装置に本発明を適用させることができる。このことから、記録媒体は、プログラムを配信する装置がアクセスできるものであっても良い。

発明の効果

0165

以上、説明したように本発明は、手指を複数のパート(オブジェクト)に分け、楽音・運指データを基に、演奏操作子群上で生じるイベント単位で、イベントを生じさせた後の手指の状態を各パート毎に求め、該求めた状態にパート単位で順次、移行させることにより、手指による演奏動作を動画表示する。このため、ユーザに演奏中における手指の動作を容易に理解させることができる。また、手指の演奏動作表示開始のタイミングは、実際に直前の手指の位置から当該手指の位置まで移行するに要する動作時間に基づいて決定するようにしているため、手指の演奏動作表示は、より実際に近いものとなり、ユーザーに演奏中の手指の動作をより容易に理解させることができる。

図面の簡単な説明

0166

図1本実施の形態による演奏動作表示装置の回路構成図である。
図2楽音・運指データの構成を説明する図である。
図3表示用の手指の構造を説明する図である。
図4手の移動範囲を説明する図である。
図5動作制御データの構成を説明する図である。
図6手指の動作表示例を説明する図である。
図7実際の表示例を示す図である。
図8本実施の形態による演奏動作表示装置の機能ブロック図である。
図9動作制御データ生成処理の動作フローチャートである。
図10手のy位置処理処理の動作フローチャートである。
図11手のz位置処理の動作フローチャートである。
図12ノートオンメイン処理の動作フローチャートである。
図13和音判定処理の動作フローチャートである。
図14和音動作処理の動作フローチャートである。
図15ノートオン動作処理の動作フローチャートである。
図16ノートオフメイン処理の動作フローチャートである。
図17和音オフ判定処理の動作フローチャートである。
図18和音オフ動作処理の動作フローチャートである。
図19ノートオフ動作処理の動作フローチャートである。
図20手のx位置処理の動作フローチャートである。
図21シーケンス処理の動作フローチャートである。

--

0167

101 CPU
102 ROM
103 RAM
104データ入力部
105 表示部
106 操作部
107音源
108サウンドシステム
300鍵盤
301〜306基点
801データ生成部
802リアルタイム処理部
803動作制御データ生成部
804データ送出部
805動作表示部
806 音源部
807楽譜表示部

ページトップへ

この技術を出願した法人

この技術を発明した人物

ページトップへ

関連する挑戦したい社会課題

関連する公募課題

該当するデータがありません

ページトップへ

おススメ サービス

おススメ astavisionコンテンツ

新着 最近 公開された関連が強い技術

この 技術と関連性が強い人物

関連性が強い人物一覧

この 技術と関連する社会課題

関連する挑戦したい社会課題一覧

この 技術と関連する公募課題

該当するデータがありません

astavision 新着記事

サイト情報について

本サービスは、国が公開している情報(公開特許公報、特許整理標準化データ等)を元に構成されています。出典元のデータには一部間違いやノイズがあり、情報の正確さについては保証致しかねます。また一時的に、各データの収録範囲や更新周期によって、一部の情報が正しく表示されないことがございます。当サイトの情報を元にした諸問題、不利益等について当方は何ら責任を負いかねることを予めご承知おきのほど宜しくお願い申し上げます。

主たる情報の出典

特許情報…特許整理標準化データ(XML編)、公開特許公報、特許公報、審決公報、Patent Map Guidance System データ