以下、本発明の実施の形態を図面を参照して説明する。
(第1の実施の形態)
図1は、本発明の第1の実施の形態に係る演奏装置の平面図である。図2(a)は、図1のA−A線に沿う断面図である。図2(b)は、変形例を示す同図(a)に対応する断面図である。なお、図1では、後述する共鳴箱34は図示が省略されている。
本装置は、例えばオルゴール装置として構成され、後述するアクチュエータSOLを電気的に駆動制御して、発音体であるリードREを弾く(乃至撥く)ように駆動して発音させる(以下、「弾奏」と表現する)ように構成される。
図2(a)に示すように、本装置は、共鳴箱34に中央支柱33が立設され、中央支柱33を中心に、4つの発音ユニットST(STA、STB、STC、STD)が上から順に積層配置されて構成される。
例えば、発音ユニットSTAについては、中央支柱33の上端部に基端部32Aが固定され、その下方において円盤状の延設台31Aが中央支柱33に固定されている。発音ユニットSTBについては、発音ユニットSTAの下方において、中央支柱33に基端部32Bが固定され、その下方において円盤状の延設台31Bが中央支柱33に固定されている。発音ユニットSTC、STDについては発音ユニットSTBと全く同様に構成される。各基端部32からはリードREが延設されている。また、各延設台31にはアクチュエータSOLが複数配設される。
なお、以降、基端部32、延設台31、リードRE、リードREの先端部REa、アクチュエータSOLについて、発音ユニットST毎に特に区別して述べるときは、各々に“A”、“B”、“C”、“D”を付記し、「リードREA」、「アクチュエータSOLA」等のように表記する。
図1に示すように、発音ユニットSTAについては、基端部32AからリードRE(REA)が延設されている。各リードREAは、基端部32Aから外周方向に向かって平面的に放射状に複数(例えば24本)延びており、リードREAの先端部REaA同士の円周方向の間隔が確保されている。リードREAの先端部REaAは円状に並ぶが、以降、先端部REaAで形成される円(以下、「リード円」と称する)を基準として、本装置における「内周方向」、「外周方向」、「円周方向」の語を用いる。
アクチュエータSOLAは、延設台31Aの外縁部近傍の上面において、各リードREAに対応して設けられる。各リードREAの長さ及び幅は担当する音高に応じて設定されている。特に個々のリードREAを指すときは、担当する音高を「k48〜k71」で表し、最も長いリードREA(k48)から順に、図1の反時計方向に向かってリードREA(k49)、リードREA(k50)…リードREA(k71)というように表記する。また、各アクチュエータSOLAについても同様に構成され、対応するリードREAと同様に最低音高から順に、アクチュエータSOLA(k48)…アクチュエータSOLA(k71)というように表記する。
他の発音ユニットSTについても、リードRE及びアクチュエータSOLの構成は発音ユニットSTAのものと同様であり、各24本のリードREについても発音ユニットSTAの各リードREAと同じ音高を担当するようになっている。従って、例えば、リードREA(k48)、REB(k48)、REC(k48)、RED(k48)は互いに同一音高を担当する。以降、これら4本の組を、「同一音高組」とも呼称する。
各発音ユニットSTにおいて弾奏駆動されたリードREの振動は、図2(a)に示す中央支柱33を介して共鳴箱34に伝達され、共鳴箱34によって拡大されて発音される。
なお、図2(b)に示す変形例のように、共鳴箱34に中央支柱35を立設し、中央支柱35の上部にラッパ状に開口する発音口36を設けるようにしてもよい。これにより、同図(a)に示す構成と同様に共鳴箱34による拡大発音がなされるだけなく、発音口36によっても効率よく外部へ放音されるので、より大きい音が得られる。
次に、リードRE及びアクチュエータSOLの1つの組についてのみその構成を詳細に説明する。図3は、アクチュエータSOL及びその近傍を示す図である。同図(a)はアクチュエータSOLの部分拡大平面図であり、同図(b)は同図(a)のB−B線に沿う断面図である。
アクチュエータSOLは、図3(b)に示すように、ヨーク23、ソレノイドコイル21及び鉄心26を備える。また、ソレノイドコイル21の中心部には、リードREを弾くためのピック部22(発音体駆動部材)が備えられる。
鉄心26は上下方向に往復運動可能に構成されており、ソレノイドコイル21に駆動電流が供給されると、磁力が発生して鉄心26が突出動作する。鉄心26の上端部には、リード円の半径方向に平行な溝部27が形成されている。ピック部22は角棒状に形成され、溝部27に設けられた回動軸24がピック部22の下端部22aを貫通している。これによって、ピック部22が回動軸24を中心としてリード円の半径方向に回動自在にされる。
ピック部22の上部にはバネ25が取り付けられている。バネ25は、同図(b)に示すような非駆動時(以下、「初期状態」と称する)においては、引張力をほとんど有しないが、駆動後にピック部22が上昇したときに延びて引張力を発生し、ピック部22をリード円の外周方向に付勢するように構成されている。
また、ソレノイドコイル21の周囲をカバーするヨーク23は、内周方向がやや上方に突出して偏向ヨーク(乃至偏心ヨーク)となっている。これにより、電流供給状態では、ピック部22が内周方向に常に付勢され、内周方向に傾いている。ピック部22が内周方向に常に付勢された状態で上昇したとき、ピック部22の上端部22bがリードREの先端部REaを適当な位置で弾く(撥く)ように設定されている。
ただし、ヨーク23によるピック部22に対する内周方向への付勢力は、ピック部22が上昇したときにおけるバネ25の引張力による外周方向への付勢力よりも小さい値に設定されている。また、ピック部22には、段差部22cが形成されている。そして、ピック部22が上昇してリードREを駆動する時点で、段差部22cがヨーク23の内周側上端部23aとほぼ同じ高さ位置に到達するように設定されている。段差部22cがヨーク23の内周側上端部23aを通過して上方に位置するようになると、ピック部22のヨーク23からの距離が急に大きくなるため、偏向ヨークによる内周方向への付勢力が急速に減少する。これらにより、ピック部22は、リードREの駆動後にバネ25によって外周方向に傾き、ピック部22が下降する際にリードREに干渉することがない。
図4は、本演奏装置の制御機構の構成を示すブロック図である。
本装置は、CPU11(制御手段)に、バス15を通じて、ROM12、RAM13、MIDIインターフェイス(MIDII/F)14、タイマ16、ドライバ(PWM(パルス幅変調))17、外部記憶装置18及び操作部19が接続されて構成される。
CPU11は、本装置全体の制御を司る。ROM12は、CPU11が実行する制御プログラムやテーブルデータ等の各種データを記憶する。MIDII/F14は、不図示のMIDI機器等からの演奏データをMIDI(Musical Instrument Digital Interface)信号として入力する。RAM13は、演奏データ、テキストデータ等の各種入力情報、各種フラグやバッファデータ及び演算結果等を一時的に記憶する。ドライバ17は、アクチュエータSOLを駆動制御する。タイマ16は、タイマ割り込み処理における割り込み時間や各種時間を計時する。外部記憶装置18は、フラッシュメモリ等で構成され、演奏データ等のデータを記憶することができる。操作部19は、不図示の各種操作子を有し、自動演奏のスタート/ストップの指示、曲選択等の指示、各種設定等を行う。
後述するように、CPU11は、演奏データ中のイベントデータで規定される音高(キーナンバkn)に対応する同一音高組内のリードREのうちのいずれかを発音させるべく、後述するアクチュエータ選択テーブルを参照し、適切なアクチュエータSOLに対して駆動電流を送るよう制御する。駆動電流を受けたアクチュエータSOLでは、まず、図2(b)に示す初期状態から鉄心26が上昇して、ピック部22の上端部22bがリードREの先端部REaを弾く。先端部REaを弾いた後には、ピック部22はややリード円の外周方向へ逃げ、鉄心26が上昇端まで上昇した後、バネ25により引っ張られて外周方向を大きく逃げる。次に、駆動電流が遮断されて、鉄心26が自重及びバネ25の引張力によって下降する際、ピック部22は外周方向へ傾いているので、リードREに干渉することなく初期状態へと復帰する。
演奏データは、MIDII/F14から入力する等によって外部記憶装置18に記憶される。あるいは、ROM12に予めプリセット曲として数曲分記憶しておいてもよい。
図5は、演奏データの構成を示す図である。演奏データは、自動演奏を行うためのMIDIコードであり、デルタタイムデータΔt、イベントデータI、エンドコード等で構成される。デルタタイムデータΔtは、イベントデータIの発生タイミングを示すデータである。イベントデータIは、楽音の発音を指示するためのキーオン(ノートオン)イベントデータと、発音された楽音の消音を指示するためのキーオフ(ノートオフ)イベントデータと、これらのイベントの音高を示すノートナンバと、これらのイベントのベロシティを示すベロシティデータとにより構成されている。エンドコードは当該曲の終わりを示す。演奏データにはこの他、当該曲全体のテンポを示すテンポデータ(図示せず)等も含まれている。
図6は、本実施の形態で用いられるアクチュエータ選択テーブルの構成例を示す図である。アクチュエータ選択テーブルは、ROM12に予め格納されている。アクチュエータ選択テーブルでは、キーナンバknとカウンタCNTの値の組み合わせに対して、駆動されるべきアクチュエータSOLが対応付けられている。キーナンバkn(n=48〜71)は、演奏データのイベントデータIによって規定される音高を示し、最低音高のk48〜最高音高のk71まで設定されている。
図7は、各キーナンバkn毎のカウンタCNTの現在値の一例を示す図である。後述する図10のイベント処理では、カウンタCNTは、各キーナンバkn毎にカウントされる。各キーナンバkn毎のCNTの現在値はCNT(kn)で表され、「0〜3」のいずれかの値を執る。カウンタCNT(kn)は、例えば、RAM13に記憶される。
図6に示すアクチュエータ選択テーブルでは、CNT(kn)がとり得る値に対応して、カウンタCNTには「0〜3」の値が設定されている。本実施の形態では、カウンタCNTの値によって、発音する発音ユニットSTが規定される。例えば、CNT値の0、1、2、3はそれぞれ、発音ユニットSTA、STB、STC、STD(乃至アクチュエータSOLA、SOLB、SOLC、SOLD)に対応している。
図8は、本実施の形態におけるメイン処理のフローチャートを示す図である。本処理は、装置電源投入時に開始される。
まず、初期化処理、すなわち所定プログラムの実行を開始し、各種レジスタをクリアして初期設定を行い(ステップS101)、操作部19におけるスタート/ストップスイッチ(図示せず)が押下されたか否かを判別する(ステップS102)。その判別の結果、スタート/ストップスイッチが押下されていない場合はステップS104に進む一方、押下された場合は、自動演奏の実行中であることを「1」で示す演奏フラグRUNを、|RUN−1|として(ステップS103)、前記ステップS104に進む。
ステップS104では、その他処理(曲選択等)を指示する操作があったか否かを判別し、その他処理を指示する操作があった場合は、その操作に応じた処理を実行して(ステップS105)、前記ステップS102に戻る一方、ない場合は直ちに前記ステップS102に戻る。
図9は、本実施の形態における再生処理のフローチャートを示す図である。本処理は、例えば、10ms毎の割込処理によって実行される。この間隔は、上記テンポデータや操作部19で設定されたテンポで決定される。
まず、演奏フラグRUN=1であるか否かを判別し(ステップS201)、RUN=1でない場合は本処理を終了する一方、RUN=1である場合は、演奏データ(図5参照)の読み出しタイミングを示す変数TIMEをデクリメントして(ステップS202)、TIMEが「0」になったか否かを判別する(ステップS203)。その判別の結果、TIMEが「0」になっていない場合は本処理を終了する一方、TIMEが「0」になった場合は、演奏データの読み出し位置を示すポインタを進めて演奏データ中の次のデータを読み出す(ステップS204)。
次に、演奏データから読み出したデータがデルタタイムデータΔtであるか否かを判別し(ステップS205)、デルタタイムデータΔtである場合は、TIMEにそのデルタタイムデータΔtの値を設定して(ステップS206)、本処理を終了する一方、デルタタイムデータΔtでない場合は、読み出したデータがエンドコードであるか否かを判別し(ステップS207)、エンドコードである場合は、ポインタを演奏データの先頭に戻して(ステップS208)、前記ステップS204に戻る。一方、読み出したデータがエンドコードでない場合は、読み出したデータはイベントデータIであるので、そのイベントデータIに応じて、後述する図10のイベント処理を実行し(ステップS209)、前記ステップS204に戻る。
図10は、図9のステップS209で実行されるイベント処理のフローチャートを示す図である。
まず、読み出したイベントデータIがノートイベントであるか否かを判別し(ステップS301)、その判別の結果、ノートイベントでない場合は、そのイベントデータIに応じた処理を実行して(ステップS307)、本処理を終了する一方、ノートイベントである場合は、それがノートオン(キーオンイベントデータ)であるか否かを判別する(ステップS302)。
その判別の結果、ノートオンでない場合は本処理を終了する一方、ノートオンである場合は、そのキーオンイベントデータが示すキーナンバknに対応するカウンタCNTの現在値であるCNT(kn)をインクリメントする(ステップS303)。これにより、発音させる発音ユニットSTが1段ずれる。次に、CNT(kn)>3であるか否かを判別し(ステップS304)、CNT(kn)≦2である場合はステップS306に進む一方、CNT(kn)>3である場合は、CNT(kn)=0として(ステップS305)、前記ステップS306に進む。
ステップS306では、アクチュエータ選択テーブルを参照し、CNT(kn)の値とキーナンバknに対応するアクチュエータSOLを選択し、選択したアクチュエータSOLを駆動するように制御して、本処理を終了する。例えば、キーナンバkn=k49、CNT(k49)=2であった場合は、アクチュエータ選択テーブルから、アクチュエータSOLC(k49)が選択され駆動される結果、リードREC(k49)が単独で発音する。
なお、本処理では、CNT(kn)のインクリメントは、ノートオン(キーオンイベントデータ)を読み出す度に行ったが(ステップS303)、これに代えて、ノートオフ(キーオフイベントデータ)を読み出す度に行うようにしてもよい。
本実施の形態によれば、演奏データからキーオンイベントデータが読み出される度に、そのキーオンイベントデータ示すキーナンバknに対応するCNT(kn)値が0、1、2、3、0という順番で変化する。従って、同一音高組に注目すると、駆動されるアクチュエータSOLがアクチュエータSOLA、SOLB、SOLC、SOLD、SOLAという順に変わり、同じアクチュエータSOLが連続して駆動されることがない。従って、同一音高組内では、同一のリードREが弾かれるのは、他の3本のリードREが弾かれた後になるので、たとえ、今回弾くリードREに前回の弾奏による振動が残っていたとしても、減衰はかなり進んでおり、チャタリングが生じにくい。よって、余韻を維持したままさらに同一音高を鳴らしたい場合にも大きなノイズを発生させることなく適切に対応でき、同一音高が連続するような曲想であっても、良好な音色で発音させることができる。
また、アクチュエータSOLは、各リードREに対応して設けられたので、各アクチュエータSOLを独立して駆動制御することが可能であり、複数音高のリードREの同時駆動により和音の同時発音が可能になるだけでなく、複雑なメロディの演奏も容易となる。さらに、アクチュエータSOLは演奏データに基づいて駆動制御されるようにしたので、演奏データを選択することで、多種類の曲を演奏させることができ、曲を変更することも容易である。
(第2の実施の形態)
第1の実施の形態では、同一音高組内では、一律に、キーナンバkn及びCNT(kn)値に基づいて発音させるリードREを順番に変更するようにした。しかし、本第2の実施の形態では、さらに各キーナンバkn毎のタイムカウンタTCNT(kn)をも考慮して、発音させるリードREを決定する。従って、ハード構成は第1の実施の形態と同様で図1〜図4の通りである。また、演奏データ、アクチュエータ選択テーブルの構成、CNT(kn)についても図5〜図7に例示した通りである。
また、メイン処理についても図8の通りであるが、本第2の実施の形態では、図8のステップS101の初期化処理で、タイムカウンタTCNT(kn)を初期値(501)に設定する処理も行われる。また、再生処理、イベント処理については、図9、図10に代えて図12、図13を用い、さらに図11を加えて本実施の形態を説明する。
図11は、各キーナンバkn毎のタイムカウンタTCNT(kn)の値の一例を示す図である。タイムカウンタTCNT(kn)は、各キーナンバkn毎に設けられ、後述する図12の再生処理でカウントアップされて、例えばRAM13に記憶される。TCNT(kn)値は対応するキーナンバknの前回の発音からどの程度の時間が経過しているかを示す目安となるものであり、所定時間に相当する値(例えば500)未満のときは、その音高に関し、前回の発音から間もない連続発音であると判断される。TCNT(kn)値は、前回の発音から間もないうちに同一音高の発音をしなければならない場合に、同一音高組の中で発音させるリードREを変更するために用いられる。TCNT(kn)は、図8のステップS101の初期設定では、「501」にセットされる。
図12は、本実施の形態における再生処理のフローチャートを示す図である。本処理は、例えば、10ms毎の割込処理によって実行される。この間隔は、上記テンポデータや操作部19で設定されたテンポで決定される。
まず、ステップS401、S402では、図9のステップS201、S202と同様の処理を実行し、次に、ステップS403では、すべてのキーナンバknに対応するタイムカウンタTCNT(kn)、すなわち、TCNT(k48)〜TCNT(k71)をそれぞれインクリメントする。次に、ステップS404〜S410では、図9のステップS203〜S209と同様の処理を実行して、本処理を終了する。
図13は、図12のステップS410で実行されるイベント処理のフローチャートを示す図である。
まず、ステップS501、S502、S509では、図10のステップS301、S302、S307と同様の処理を実行する。前記ステップS502の判別の結果、読み出したイベントデータIがノートオン(キーオンイベントデータ)でない場合は本処理を終了する一方、ノートオンである場合は、そのキーオンイベントデータが示すキーナンバknに対応するタイムカウンタTCNT(kn)が500未満であるか否かを判別する(ステップS503)。
その判別の結果、TCNT(kn)<500である場合は、そのキーナンバknについては前回の発音後間もないので、発音させる発音ユニットSTを1段ずらすべく、カウンタCNTの現在値であるCNT(kn)をインクリメントする(ステップS504)。
次に、CNT(kn)>3であるか否かを判別し(ステップS505)、CNT(kn)≦2である場合はステップS507に進む一方、CNT(kn)>3である場合は、CNT(kn)=0として(ステップS506)、前記ステップS507に進む。
一方、前記ステップS503の判別の結果、TCNT(kn)≧500である場合は、そのキーナンバknについては前回の発音後、十分な時間が経過しており、再発音させても問題ないので、発音させる発音ユニットSTを最上段の発音ユニットSTAにするべく、CNT(kn)=0として(ステップS506)、前記ステップS507に進む。
続くステップS507では、図10のステップS306と同様の処理を実行する。次に、TCNT(kn)=0とする(ステップS508)。これにより、今回発音されたキーナンバknに対応するTCNT(kn)がリセットされ、前回発音からの積算値がクリアされる。その後、本処理を終了する。
本実施の形態によれば、10ms毎の割込処理毎に、各キーナンバkn毎のタイムカウンタTCNT(kn)がインクリメントされると共に、発音されたキーナンバknについてはTCNT(kn)がリセットされ、TCNT(kn)<500である場合にのみCNT(kn)がインクリメントされる。
これにより、同一音高組に注目すると、同一音高が十分な時間間隔をもって発音される場合は、CNT(kn)値が常に0であるので、駆動されるアクチュエータSOLは常にアクチュエータSOLAとなる。しかし、同一音高が短い時間間隔をもって発音される連弾の場合は、CNT(kn)値が順番に変化するので、駆動されるアクチュエータSOLは、SOLB、SOLC、SOLD、SOLAという順に変わり、同じアクチュエータSOLが連続して駆動されることがない。従って、同一音高が短い時間間隔で連続する場合は、同一のリードREが連続して弾かれることが回避される。よって、同一音高が連続する場合に良好な音色で発音させることに関し、第1の実施の形態と同様の効果を奏することができる。
さらに、同一音高組内のリードREは、完全同一の音高に調律することは困難であるから、第1の実施の形態のように発音リードREを順次必ず変える構成に比し、本実施の形態のように、ほとんどの場合にリードREAが発音を受け持つようにしたことで、連弾のない通常演奏時において音高ばらつきのない良好な発音がされるという利点がある。
しかも、演奏データを先読みする等の特殊な処理をすることなく、連打の有無に応じた発音指示制御を行えるので、簡単な構成で連打制御を行うことができる。
なお、TCNT(kn)と比較される所定時間相当値は、例示した500に限らない。また、所定時間相当値は任意に変更可能に構成してもよい。
(第3の実施の形態)
第3の実施の形態では、第2の実施の形態に対し、用いるアクチュエータ選択テーブルが異なり、その他は第2の実施の形態と同様である。従って、図6に代えて図14を用いて本第3の実施の形態を説明する。
図14は、本実施の形態で用いられるアクチュエータ選択テーブルの構成例を示す図である。
図6に示すアクチュエータ選択テーブルでは、各CNT値に対して単一のアクチュエータSOLが対応していた。しかし、図14に示すアクチュエータ選択テーブルでは、CNT値の0、2にはいずれも、アクチュエータSOLA及びSOLCという2つのアクチュエータSOLが対応し、これにより、マルチリード発音を可能にしている。また、CNT値の1、3については、図6の例と同様に、それぞれアクチュエータSOLB、SOLDが対応している。
本実施の形態によれば、同一音高組に注目すると、同一音高が十分な時間間隔をもって発音される場合は、駆動されるアクチュエータSOLは常に2つのアクチュエータSOLA及びSOLCとなるので、通常時はマルチリード発音による深みのある楽音発生を確保することができる(第1パターン)。しかも、同一音高が短い時間間隔をもって発音される連弾の場合は、駆動されるアクチュエータSOLは、SOLB、SOLA+SOLC、SOLDという順に変わり(第2パターン)、同じアクチュエータSOLが連続して駆動されることがないので、同一音高が連続する場合でもノイズのない良好な音色で発音させることができる。よって、良好な発音を確保しつつ、連続発音にならない限りはマルチリード発音を優先して多くの場面で音に深みを与えることができ、通常時及び同一音高の連続時等、広範な状況において良好な音色で発音させることができる。
なお、図14に示すアクチュエータ選択テーブルにおいて、アクチュエータSOLA及びSOLCに対応するCNT値は「0」だけとし、CNT値「2」については図6の例と同様にアクチュエータSOLAのみに対応させてもよい。
(第4の実施の形態)
第1の実施の形態では、同一音高組内で発音させるリードREを順番に変更するようにした。しかし、本第4の実施の形態では、演奏データを先読みしてバッファに記憶し、所定時間内に同一リードREが再発音しないように制御する。従って、ハード構成は第1の実施の形態と同様で図1〜図4の通りである。また、演奏データ、CNT(kn)についても図5、図7に例示した通りである。なお、アクチュエータ選択テーブルとしては、第3の実施の形態と同様の図14に例示するものを用いるが、マルチリード発音を求めない場合は、図6に例示するアクチュエータ選択テーブルを採用してもよい。また、メイン処理、再生処理、イベント処理については、図8〜図10に代えて図15、図18、図19を用い、さらに図16、図17を加えて本実施の形態を説明する。
図15は、本実施の形態におけるメイン処理のフローチャートを示す図である。本処理は、装置電源投入時に開始される。
まず、ステップS601では図8のステップS101と同様の処理を実行し、次に、操作部19におけるスタート/ストップスイッチ(図示せず)が押下されたか否かを判別する(ステップS602)。その判別の結果、スタート/ストップスイッチが押下されていない場合はステップS606に進む一方、押下された場合は、演奏フラグRUNを、|RUN−1|として(ステップS603)、RUN=1であるか否かを判別する(ステップS604)。
その判別の結果、RUN=1でない場合は前記ステップS606に進む一方、RUN=1である場合は、後述する図16の読み出し処理を実行して(ステップS605)、前記ステップS606に進む。ステップS605、S606では、図8のステップS104、S105と同様の処理を実行して、前記ステップS602に戻る。
図16は、図15のステップS605で実行される読み出し処理のフローチャートを示す図である。本処理は、図15のメイン処理の開始時に実行されると共に、10ms毎の割込処理によっても実行される。
まず、RUN=1であるか否かを判別し(ステップS701)、RUN=1でない場合は本処理を終了する一方、RUN=1である場合は、ポインタを進めて演奏データ中の次のデータを読み出す(ステップS702)。次に、演奏データから読み出したデータがデルタタイムデータΔtであるか否かを判別し(ステップS703)、デルタタイムデータΔtでない場合は、読み出したデータがイベントデータIであるか否かを判別する(ステップS704)。
その判別の結果、読み出したデータがイベントデータIである場合は、そのイベントデータIを後述するイベントバッファに書き込み(追記し)(ステップS705)、ステップS709に進む一方、イベントデータIでない場合は、エンドコードであるので、ポインタを演奏データの先頭に戻して(ステップS706)、前記ステップS709に進む。
一方、前記ステップS703の判別の結果、読み出したデルタタイムデータΔtである場合は、そのデルタタイムデータΔtの値をREADTIMEに加算する(ステップS707)。ここで、READTIMEは、後述する所定時間RTとの比較によって演奏データの読み出しタイミングを判別するための変数であり、RAM13に記憶される。次に、上記デルタタイムデータΔtの値をイベントバッファに書き込んで(ステップS708)、前記ステップS709に進む。
ステップS709では、READTIMEが所定時間RTより大きいか否かを判別する。その判別の結果、READTIME≦RTである場合は前記ステップS702に戻って演奏データの次データの読み出しに移行する。従って、READTIME>RTとなるまで、演奏データからの次データの読み出し、及びデルタタイムデータΔt及びイベントデータIのイベントバッファへの書き込みが繰り返される。
図17は、このイベントバッファ及びキーバッファの各記憶内容を示す概念図である。両バッファとしてはRAM13が利用される。同図(a)に示すイベントバッファには、読み込んで未だ処理されていないデルタタイムデータΔt及びイベントデータIが書き込まれている。なお、エンドコードは書き込まれないので、イベントバッファには含まれていない。所定時間RTとしては、例えば、20秒が設定されている。従って、イベントバッファには、最大で20秒分のデータが記憶される。なお、所定時間RTは任意に設定可能に構成してもよい。
図16に戻り、前記ステップS709の判別の結果、READTIME>RTである場合は、ステップS710に進む。ステップS710では、イベントバッファ内で重複しているキーナンバknがある場合は、そのキーナンバknをキーバッファに登録する。図17(a)の例では、キーナンバk48が3つ、キーナンバk50が2つというように、重複して存在しているので、これらが同図(b)に示すキーバッファに登録される。キーバッファ内に登録がされているキーナンバknは、20秒間内に複数回の発音が求められている音高を示す。従って、キーバッファにキーナンバknが1つでも登録されている場合は、短時間内での同一音高の連続発音がある場合に該当する。なお、前記ステップS710では、キーバッファの内容が毎回のループで更新されるものとする。
次に、ステップS711では、後述する再生処理(図18)で発音処理がされたイベントデータIと、TIMEに値を設定する処理が済んだデルタタイムデータΔtとをイベントバッファ内から消去する。その後、本処理を終了する。なお、キーバッファ内に一旦登録されたキーナンバknは、イベントバッファ内での重複が解消したとき、前記ステップS710での更新によって消滅する。
図18は、本実施の形態における再生処理のフローチャートを示す図である。本処理は、例えば、10ms毎の割込処理によって実行される。
まず、ステップS801〜S803では、図9のステップS201〜S203と同様の処理を実行する。前記ステップS803の判別の結果、TIMEが「0」になった場合は、ステップS804に進み、イベントバッファの読み出し位置を示すポインタを進めてイベントバッファ中の次のデータを読み出す。
次に、ステップS805では、イベントバッファから読み出したデータがデルタタイムデータΔtであるか否かを判別し、デルタタイムデータΔtである場合は、TIMEにそのデルタタイムデータΔtの値を設定すると共に(ステップS806)、そのデルタタイムデータΔtの値をREADTIMEから減算して(ステップS807)、本処理を終了する。
一方、前記ステップS805の判別の結果、イベントバッファから読み出したデータがデルタタイムデータΔtでない場合は、読み出したデータはイベントデータIであるので、そのイベントデータIに応じて、後述する図19のイベント処理を実行し(ステップS808)、前記ステップS804に戻る。
図19は、図18のステップS808で実行されるイベント処理のフローチャートを示す図である。
まず、ステップS901、S902、S908では、図10のステップS301、S302、S307と同様の処理を実行する。前記ステップS902の判別の結果、イベントバッファから読み出したデータがノートオン(キーオンイベントデータ)である場合は、そのキーオンイベントデータが示すものと同一のキーナンバknが、キーバッファ内に登録されているか否かを判別する(ステップS903)。
その判別の結果、同一のキーナンバknがキーバッファ内に登録されている場合は、そのキーナンバknに対応するカウンタCNTの現在値であるCNT(kn)をインクリメントする(ステップS904)。これにより、同一音高の発音が20秒以内に連続する場合は、発音させる発音ユニットSTが1段ずれる。次に、CNT(kn)>3であるか否かを判別し(ステップS905)、CNT(kn)≦2である場合はステップS907に進む一方、CNT(kn)>3である場合は、CNT(kn)=0として(ステップS906)、前記ステップS907に進む。
一方、前記ステップS903の判別の結果、同一のキーナンバknがキーバッファ内に登録されていない場合は、前記ステップS906でCNT(kn)=0とする。これにより、同一音高の発音が20秒以内に連続しない場合は、発音させる発音ユニットSTが常に発音ユニットSTA及びSTCとなり、マルチリード発音がなされる。
なお、前記ステップS903で同一のキーナンバknがキーバッファ内に登録されていない場合、前記ステップS907に進むようにしてもよい。そのようにした場合は、発音する発音ユニットSTは現状維持となる。
次に、ステップS907では、図10のステップS306と同様の処理を実行し、本処理を終了する。
本実施の形態によれば、演奏データを先読みし、READTIME分のイベントバッファへの記憶内容から同一音高の発音が20秒以内に複数回あるキーナンバknを抽出してキーバッファに登録し、今回発音すべきキーナンバknがキーバッファ内に登録されているときは、駆動されるアクチュエータSOLが、SOLA+SOLC、SOLB、SOLA+SOLC、SOLDという順に変わり、同じアクチュエータSOLが連続して駆動されることがない。また、今回発音すべきキーナンバknがキーバッファ内に登録されていない限りにおいては、常に最上段の発音ユニットSTで発音がなされるので、同一音高が連続する場合を除けば、アクチュエータSOLA及びSOLCによるマルチリード発音がなされる。よって、第3の実施の形態と同様の効果を奏することができる。特に、音高毎のカウンタを用いることなく連打制御を行えるので、第2の実施の形態のようにカウントアップのための時間が必要とされず、発音すべき音高数が増えても連打制御のための時間が増えることがなく、広い音域で発音させる場合にも対応が容易となる。
なお、第3、第4の実施の形態では、アクチュエータSOLA及びSOLCによるマルチリード発音がなされるため、リードREAとリードRECとのピッチ差をあえて所定量設けるようにしてもよい。ピッチを適当にずらすことで、音に深みを増すことができる。
なお、第3、第4の実施の形態において、アクチュエータ選択テーブルは、CNT値の0、2にはアクチュエータSOLA及びSOLCの2つが対応し、CNT値の1、3にはアクチュエータSOLB、SOLDがそれぞれ対応したが、CNT値の1、3にも2つのアクチュエータSOLB及びSOLDが対応するようにアクチュエータ選択テーブルしてもよい。これにより、同一リードREの連弾を回避しつつ、常時、マルチリードでの発音が可能となる。
なお、第3、第4の実施の形態において、マルチリード発音による深みのある発音を一層効果的にする観点からは、発音ユニットSTの数をもっと増やし、CNT値に対応するアクチュエータSOLを2つ以上にしてもよい。ただしその際、同一音高の連続発音時のノイズを防止する観点からは、図14に示すアクチュエータ選択テーブルにおいて、隣接するCNT値(例えば、「0と1」、「1と2」)間では、同一のアクチュエータSOLが対応しないようにするのが望ましい。
なお、上記各実施の形態において、アクチュエータ選択テーブルは複数種類格納しておき、参照すべきアクチュエータ選択テーブルを任意に設定可能に構成してもよい。また、アクチュエータ選択テーブルを新規に作成して外部記憶装置18等に記憶し、これを参照するようにしてもよい。特に、第2〜第4の実施の形態において、アクチュエータ選択テーブルの内容を変えることで、以下のように様々な態様の制御が可能になる。
例えば、アクチュエータ選択テーブルにおいて、CNT=0、1、2に対して、「SOLA+SOLC」、「SOLB」、「SOLD」とし、CNT値は「0〜2」の範囲で遷移するように制御してもよい。これによっても、通常時は「SOLA+SOLC」によるマルチリード発音が確保されると共に、同一音高連続時には同一リードREの連弾が回避される。
また、例えば、CNT=0、1、2、3、4に対して、「SOLA+SOLC+SOLB+SOLD」、「SOLA」、「SOLB」、「SOLC」、「SOLD」を対応させて設定したアクチュエータ選択テーブルを設けておき、同一音高の連続がほとんどないような曲については、「マルチモード」としてCNT(kn)値が常に「0」となるように制御することで、4本のリードREのマルチリード発音による一層豊かな発音を可能にすると共に、同一音高の連続が多い曲については、「シングルモード」としてCNT(kn)値が1、2、3、4、1、2、3(1〜4の値をとり「0」にはならない)というように順次変化するように制御することで、連弾を回避してノイズを防止するようにしてもよい。その場合、曲に応じて「マルチモード」または「シングルモード」のいずれかを任意に選択可能に構成し、モード設定によってCNT(kn)値の制御態様が決定されるようにすればよい。その場合のモードの設定は、例えば、操作部19の不図示の選択操作子で行うようにしてもよいし、またはイベントデータの1つとしてエクスクルーシブメッセージを入れておき、そのメッセージで行うようにしてもよい。また、第3の実施の形態では、アクチュエータ選択テーブルを切り替えるのではなく、TCNT(kn)の値の閾値を極めて大きい値に設定してもよい。
このように、曲想等に応じて発音態様を選択し(選択手段)、それに応じてアクチュエータを変更することで、多彩な発音態様が実現可能となるので、アコースティックな演奏装置でありながら多彩な演奏を楽しむことができる。
なお、「同一音高組」内の4本のリードREは、完全同一音高に設定してもよいが、あえてピッチを僅かにずらしてもよい。ピッチをずらすことで、同時に発音するいわゆるマルチリード発音時に音に深みを増すことができる。
なお、上記第1〜第4の実施の形態では、発音体としてリードを適用したオルゴール装置を例示したが、ハープのように、発音体として弦を適用してもよい。その場合、各弦用のアクチュエータはいずれも、対応する弦の側方に配設し、上記各アクチュエータSOLに対し反時計方向へ90度回転させた向きに配設すればよい。
なお、弦の場合は、良好な音色を得る上で、全長の略1:7の位置に撥弦位置を設定するのが有利である。従って、弦用のアクチュエータは、同心円上に配列するのではなく、各弦の長さに応じて配置位置を異ならせるのが望ましい。
なお、発音体としては、リードまたは弦に限定されるものではなく、アコースティックな発音をするもの、すなわち、接触動作によって、機械的に励振されて発音する「弦」や「音板」のような延設発音体であれば本発明を適用可能である。例えば、金属製や木製等の板状発音体も含まれる。従って、本発明が適用される場合の「弾奏」には、「弾く」、「撥く」のほか、「打撃する」等、接触動作を介して励振させるための各種動作が含まれる。
なお、上記演奏データは、ROM等から読み出されたものに限定されず、例えば、鍵盤やパッド等の入力操作部の操作によって発生したデータであってもよい。
11 CPU(制御手段)、 12 ROM、 13 RAM、 SOL アクチュエータ、 17 ドライバ(PWM(パルス幅変調))、 18 外部記憶装置、 19 操作部、 21 ソレノイドコイル、 22 ピック部(発音体駆動部材)、 23 ヨーク、 25 バネ、 26 鉄心、 RE リード(発音体、発音体群)、 REa 先端部、 ST 発音ユニット