JPH05158477A - 電子楽器のアサイナ - Google Patents

電子楽器のアサイナ

Info

Publication number
JPH05158477A
JPH05158477A JP4108917A JP10891792A JPH05158477A JP H05158477 A JPH05158477 A JP H05158477A JP 4108917 A JP4108917 A JP 4108917A JP 10891792 A JP10891792 A JP 10891792A JP H05158477 A JPH05158477 A JP H05158477A
Authority
JP
Japan
Prior art keywords
tone generation
task
tone
musical
channel
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.)
Pending
Application number
JP4108917A
Other languages
English (en)
Inventor
Minoru Fujisawa
實 藤澤
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.)
Roland Corp
Original Assignee
Roland Corp
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 Roland Corp filed Critical Roland Corp
Priority to JP4108917A priority Critical patent/JPH05158477A/ja
Publication of JPH05158477A publication Critical patent/JPH05158477A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Electrophonic Musical Instruments (AREA)
  • Reverberation, Karaoke And Other Acoustics (AREA)

Abstract

(57)【要約】 (修正有) 【目的】 効果音を付加した楽音を発生する電子楽器に
おいて鍵盤等により入力される演奏情報に割り当てる楽
音発生チャネルを選定するアサイナに関し、残響音が突
然消えてしまうなどの演奏表現上の違和感がなく、入力
楽音情報に割り当てる楽音発生チャネルを選定できる。 【構成】 複数の楽音発生チャネル26は入力楽音情報
に基づき楽音信号を発生する楽音発生部とその楽音信号
の効果付加部との組合せで構成された電子楽器に対し、
入力楽音情報に割り当てる楽音発生チャネルの選定を行
うアサイナであって、各楽音発生部の状態に基づきチャ
ネル選定上の評価量を各チャネルについて演算する演算
手段と、この演算手段で演算された各楽音発生部の評価
量に対しその楽音発生部に対応した効果付加部で付加す
る効果に対応しその評価量を補正する補正手段と、この
補正された評価量に基づいて楽音発生チャネルの選定を
行う選定手段とを具備する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は例えばリバーブ(残
響)、コーラス、ピッチシフト、フェーザなどの効果を
付加した楽音を発生する電子楽器に係わり、特にかかる
電子楽器において鍵盤等により入力される演奏情報に割
り当てる楽音発生チャネルを選定する電子楽器のアサイ
ナに関するものである。
【0002】
【従来の技術】一般に電子楽器は複数の楽音発生チャネ
ルを有し、鍵盤等から入力される楽音情報を発音するに
あたっては、その楽音情報を割り当てる楽音発生チャネ
ルを、その複数の楽音発生チャネルのうちから選定して
行っている。この選定の仕方としては例えば以下のよう
なものがある。 ・発音終了した空いている楽音発生チャネルを選定す
る。 ・最も早く発音を開始(つまり最も早く押鍵)した楽音
発生チャネルを選定する。 ・最も早く離鍵した鍵に対応する楽音発生チャネルを選
定する。 ・最も発音量(エンベロープレベルや残存発音量など)
の少ない楽音発生チャネルを選定する。いわゆるレベル
アサイン方式である。 ・例えば離鍵順−押鍵順などのように、これらを組み合
わせて選定する。
【0003】ところで、電子楽器では、例えば特開平2
−110500号公報などにも開示されているように、
楽音発生チャネルを楽音発生部と効果付加部の組合せで
構成し、鍵盤等から入力される楽音情報に基づいて楽音
発生部で原音としての楽音を生成し、この楽音にさらに
効果付加部で種々の効果を付加して最終的な演奏音とし
て出力することが行われており、これにより演奏表現が
豊かになる。付加される効果としては、例えばリバー
ブ、コーラス、ピッチシフト、フェーザなどがあり、こ
れらの効果付加によって、原音は遅延したり、スペクト
ラムやレベルが変化したりする。
【0004】
【発明が解決しようとする課題】一般に、電子楽器にお
いては、入力される楽音情報を割り当てる楽音発生チャ
ネルを選定するにあたって、複数個ある楽音発生チャネ
ルの状態をそれぞれ調べ、それらの状態に基づいて、新
たに楽音情報を割り当てるために発音停止しても演奏表
現上の違和感を生じさせないような楽音発生チャネルを
探し出し、その楽音発生チャネルに楽音情報を割り当て
ている。
【0005】例えば、レベルアサイン方式では、各楽音
発生チャネルの発音量を調べて発音量の小さい楽音発生
チャネルを探し出し、この発音量が小さい楽音発生チャ
ネルは発音停止しても一般に演奏表現に与える影響が少
ないのでその発音を停止して新たに入力された楽音情報
を割り当てて、新たな発音を開始するようにしている。
【0006】従来、このような選定方法は、楽音発生チ
ャネルにおいて楽音発生部で発生された原音としての楽
音がその後工程の効果付加部で効果付加された場合にも
同じ方法によっていた。
【0007】ところが、効果付加として例えばリバーブ
を付加する場合、楽音発生部で発生される原音としての
楽音が発音終了された後にも、その楽音について効果付
加部での残響音は発音を継続していることがある。この
ような場合に、例えばレベルアサイン方式により、楽音
発生チャネルにおける楽音発生部での発音量がそれを消
しても影響がない程度に十分に小さくなったとしてその
楽音発生チャネルを新たな楽音情報に割り当てるべく選
定すると、それに対応して効果付加部も発音停止されて
残響音が突然と消えてしまうことになるので、演奏表現
上の違和感が生じることになる。
【0008】また発音継続中の二つの楽音発生チャネル
について着目した場合、一の楽音発生チャネルはその楽
音発生部の発音量が小さいがそれに効果を付加した楽音
の発音量は大きいものであり、一方、他の楽音発生チャ
ネルはその楽音発生部の発音量が大きいがそれに効果を
付加した楽音の発音量は小さいという場合もあり、この
場合、後者の楽音発生チャネルを選定して新たな楽音情
報に割り当てる方が演奏表現上からは自然である。とこ
ろが、単に楽音発生部の発音量の大小比較だけで楽音発
生チャネルの選定を行うと、前者が選定されることにな
り、不自然であるといえる。
【0009】これらのことは他のアサイン方式、例えば
離鍵順、発音終了順などで楽音発生チャネルをアサイン
する時にも言え、また他の付加効果、例えばコーラス、
ピッチシフト、フェーザなどを行った時にも言える。
【0010】本発明はかかる事情に鑑みてなされたもの
であり、楽音に効果付加を行う電子楽器においても、例
えば残響音が突然消えてしまうなどの演奏表現上の違和
感が生じることなく、入力される楽音情報に割り当てる
楽音発生チャネルを選定できるようにすることにある。
【0011】
【課題を解決するための手段】本発明においては、上述
の課題を解決するために、複数の楽音発生チャネルを有
しそれら楽音発生チャネルの各々は入力される楽音情報
に基づき楽音信号を発生する楽音発生部とその楽音発生
部の楽音信号に効果を付加する効果付加部との固定的な
組合せで構成された電子楽器に対して、入力される楽音
情報に割り当てる楽音発生チャネルの選定を行う電子楽
器のアサイナであって、各楽音発生チャネルの楽音発生
部の状態に基づいて楽音発生チャネル選定のための評価
量を各楽音発生部について演算する演算手段と、演算手
段で演算された各楽音発生部の評価量に対してその楽音
発生部に対応した効果付加部で付与する効果に対応して
その評価量を補正する補正手段と、補正された評価量に
基づいて楽音発生チャネルの選定を行う選定手段とを具
備した電子楽器のアサイナが提供される。
【0012】上述の補正手段は、効果付加をしない楽音
発生チャネルについては演算手段の評価量をそのまま補
正された評価量とするように構成することができる。
【0013】上述の演算手段により演算される評価量
は、楽音発生部の発音量であり、補正手段は効果付加部
で付加される遅延発音量を楽音発生部の発音量に付加し
て補正された評価量を演算するよう構成することができ
る。
【0014】あるいは上述の演算手段により演算される
評価量は押鍵からの時間、離鍵からの時間、または楽音
発生部の発音終了までの時間であり、補正手段は効果付
加部で付加された効果に対応した遅延時間を上記評価量
としての時間に付加して補正された評価量を演算するよ
う構成することができる。
【0015】また上述の各電子楽器のアサイナにおい
て、各楽音発生チャネルにおいて楽音発生部と効果付加
部が1対1に固定的に対となっていることにかえて、複
数の構成音により構成される一つの楽音に対しては、各
構成音が複数の楽音発生部に対して割り当てられ更にこ
れら複数の楽音発生部に対して1以上の効果付加部が対
となって割り当てられるよう切替えが行われるよう構成
することができる。
【0016】
【作用】演算手段では、各楽音発生チャネルの楽音発生
部の状態に基づいて楽音発生チャネル選定のための評価
量を各楽音発生部について演算する。例えばいわゆるレ
ベルアサイン方式の場合には、楽音発生部の発音量を評
価量とし、また押鍵順、離鍵順、発音終了順などのいわ
ゆるヒストリーアサイン方式の場合には、押鍵からの時
間、離鍵からの時間、発音終了までの時間などを評価量
とする。
【0017】補正手段では、この演算手段の評価量に対
して、効果付加部で付加される効果に対応した補正を行
う。例えば効果としてリバーブが付加される場合、いわ
ゆるレベルアサイン方式により評価量として発音量が用
いられている時には効果付加部で付加される残響の発音
量を演算手段の発音量に足し合わせる補正を行う。また
いわゆるヒストリーアサイン方式により評価量として上
記の各時間が用いられる時には効果付加部で付加される
残響に相応する遅延時間を上記各時間に足し合わせる補
正を行う。これにより選定手段によってこれらの補正さ
れた評価量に基づいて楽音発生チャネルの選定を行うに
あたり、効果付加部で付加される効果の影響がその選定
に反映されるようになる。
【0018】なお、効果付加をしない楽音発生チャネル
については演算手段の評価量をそのまま補正された評価
量として取り扱い、選定手段で選定を行えばよい。
【0019】また複数の構成音により一つの楽音を構成
するような場合には、各構成音にそれぞれ楽音発生部を
割り当て、更にそれらの楽音発生部の出力に1以上の効
果付加部を割り当てて、楽音に効果付加を行うことがで
きる。
【0020】
【実施例】図1には本発明の一実施例としてのアサイナ
が適用される電子楽器が示される。この実施例の電子楽
器は、独立した複数個の音色のパートを有するマルチテ
ィンバ電子楽器についてのものであり、このマルチティ
ンバ電子楽器においては、パートへの演奏情報を各パー
トに対応するMIDIチャネルを使用して供給するよう
になっている。
【0021】図1において、20はMIDI信号を受信
するMIDI回路である。このMIDI回路20は公知
の技術により、図示しない外部の自動演奏装置から図示
しないMIDIバスを介してMIDIメッセージを受信
し、これを解読して演奏情報などとするとともに、MI
DIメッセージの受信を完了する度に、対応する割込み
をバス21を介してCPU22にかける。例えばMID
Iメッセージとしてノートオンおよび/またはノートオ
フメッセージを受信すると、キーデータ受信割込みをか
ける。ROM23にはCPU22の実行するプログラム
とともに、各処理に必要なデータおよびテーブルなどが
あらかじめ記憶されている。RAM24にはプログラム
を実行するに必要な各種レジスタなどを含むワーキング
エリアが設定されている。タイマ25は所定時間間隔
(1mSec )でCPU22に対してタイマ割込みをかけ
る。
【0022】このCPU22は所定プログラムを実行
し、MIDI回路20からの割込みに応じて演奏情報な
どを受け取り、それをRAM24の対応するレジスタに
書き込む。また書き込まれたデータなどに基づいて所定
プログラムを実行することにより、16個の楽音発生チ
ャネルを有する楽音発生回路26を制御している。楽音
発生回路26では、CPU22の制御のもとにRAM2
4から転送される楽音発生パラメータ、エンベロープ制
御に関する目標値、レート、およびエフェクタ制御パラ
メータに基づいて、所望の楽音信号を生成し、その楽音
信号を増幅器27を介してスピーカ28に送り、楽音を
発生させている。
【0023】楽音発生チャネルは楽音発生部と効果付加
部とミュート部により構成される。楽音発生部は楽音発
生パラメータに基づく楽音を発生するとともに、目標値
およびレートに基づいて滑らかなエンベロープを生成し
楽音の振幅を制御する。効果付加部は楽音にエフェクタ
制御パラメータに基づく音響効果を付加する。ミュート
部は楽音信号の通過量を制御し出力する。
【0024】この楽音発生チャネルにおいては、楽音発
生の開始の指示を受けると、楽音発生部は楽音信号およ
びエンベロープの生成を開始し、ミュート部は通過量を
最大通過量とする。また、急速減衰の指示を受けると、
ミュート部はまず所定形状の急速減衰エンベロープを生
成し、その急速減衰エンベロープに従って通過量を減少
させて最終的には“0”とする。次いで、ミュート部
は、急速減衰エンベロープレベルが“0”になると、楽
音発生部に楽音の発生の停止を指示し、効果付加部に効
果付加部の内部に残留する楽音信号をクリアするように
指示する。クリアに要する時間が経過すると、楽音発生
回路26に設けられている急速減衰終了FIFOに楽音
発生チャネル番号を積む。本実施例においては、効果付
加部で付加する効果はリバーブ効果であるものとする。
このリバーブ効果の付加により、楽音は遅延されて時間
の経過と共に効果付加部から順次に出力する。例えば、
遅延なし(原音)、4mSec 遅延 、27mSec 遅延、
・・と出力する。
【0025】RAM24の所定領域に設定されている各
種マップとしては、MIDIチャネル関係の情報を記憶
するMIDIチャネルマップ、パート関係の情報を記憶
するパートマップ、タスク管理のための情報を記憶する
タスク管理マップ、楽音発生チャネル管理のための情報
を記憶する楽音発生チャネル管理マップ、エンベロープ
チャネル管理のための情報を記憶するエンベロープ管理
マップ、効果付加部の管理のための情報を記憶するエフ
ェクタ管理マップなどがある。
【0026】まず、この実施例の電子楽器の動作の概要
を説明する。この実施例の電子楽器では、各種タスク、
すなわちキーデータ受信タスク、メインアサイナタス
ク、発音タスク、プリアサイナタスク、エンベロープタ
スク、操作子データ受信タスクの各タスクは、モニタプ
ログラムの管理下に、タスク間の優先処理をしつつマル
チタスキングによって実行される。ここでモニタプログ
ラムとしては、リセットルーチン、イベント待ちモニタ
コールルーチン、イベント発生モニタコールルーチン、
タイマ割込み処理ルーチン、キーデータ受信割込み処理
ルーチン、操作子データ受信割込み処理ルーチンがあ
る。
【0027】またこの実施例の電子楽器では、楽音発生
チャネルの選定方法としていわゆるプリアサイナ方式を
用いる。このプリアサイナ方式では、プリアサイナタス
クが、新たな楽音情報の入力の有無にかかわらず、タイ
マ割込みによる所定時間(5mSec)間隔毎に、適当な楽
音発生チャネルの選定をあらかじめ行っておき、新たな
楽音情報が入力された時には、このプリアサインの結果
を参照してその楽音情報を割り当てる楽音発生チャネル
を決定することにより、新たな楽音情報の入力に対して
速やかにそれに割り当てる楽音発生チャネルを選定でき
るようにしている。
【0028】以下、各種タスクの動作を説明する。キー
データ受信タスク(図13)は、MIDI回路20から
楽音情報(ノートオンメッセージおよび/またはオート
オフメッセージ)を読み込み、ノートオンメッセージの
時にはノートオン処理をしてメインアサイナに起動をか
ける。
【0029】メインアサイナタスク(図14)は、プリ
アサイナタスクで設定される楽音発生チャネルのプリア
サイン順位に基づき設定されたアサイン順位に従って、
楽音発生チャネルを選定し、発音タスクに対して発音要
求を行う。
【0030】発音タスク(図15、図16)は、メイン
アサイナタスクで選定された楽音発生チャネルに対し
て、それが発音中であればその発音を停止させる処理を
行い、発音が既に停止されていれば、または停止される
と、入力された楽音情報に基づきその楽音情報を発音す
るために楽音発生チャネルで必要な各種のパラメータ等
を演算して、その演算したパラメータ等をその楽音発生
チャネルに転送して発音開始を指示する。
【0031】プリアサイナタスク(図17)は、タイマ
により定期的に起動されて、楽音発生チャネル管理マッ
プから各楽音発生チャネルの発音量を読み込み、これを
プリアサイナ発音量とし、このプリアサイナ発音量に基
づきプリアサイン順位設定ルーチン(図18)に従って
プリアサイン順位を設定する。このプリアサイン順位設
定ルーチンでは、原則として、各楽音発生チャネルにつ
いてプリアサイナ発音量の小なる順にプリアサイン順位
を設定する。
【0032】楽音発生チャネル管理マップの発音量はエ
ンベロープタスクによって逐次に更新される。エンベロ
ープタスク(図19、図20)では、楽音発生部が発音
終了をしているか否かを調べ、発音終了しているものに
ついては、発音量の更新ルーチン(図22)に従って効
果付加部で付加される影響を補正して、楽音発生チャネ
ル選定の評価量としての総合発音量を更新する。発音終
了していないものについては、その楽音が減衰音系か持
続音系かを調べ、減衰音系についてはそれに合った減衰
音系の発音量の算出(図21)を行い、持続音系につい
てはそれに合った持続音系の発音量の算出(図23)を
行い、その後に発音量の更新ルーチン(図22)に従っ
てこれらの発音量を効果付加部で付加される効果に応じ
て補正して評価量としての総合発音量を更新する。
【0033】発音量の更新ルーチン(図22)では、そ
の時点以降に効果付加部に入力される楽音の効果付加後
の発音量(残存発音量)と、その時点で既に効果付加部
に入っている楽音に効果付加部で付加される発音量(残
存発音量)を算出し、これらを足し合わせて評価量とし
ての総合発音量を更新し、これを楽音発生チャネル管理
マップに発音量として書き込む。これにより、プリアサ
イナタスクでプリアイン順位を決めるに際して、効果付
加部で付加される効果の影響が考慮されるようになる。
【0034】各種マップの詳細な説明 次にRAM24の所定領域に設定されている各種マップ
について図2〜図7を参照して詳細に説明する。なお図
2〜図7はこれらマップの一部を示すものである。
【0035】MIDIチャネルマップ(図2) “0〜15”により16個のMIDIチャネルの種類を
示すMIDIチャネル番号に対応して次のものが記憶さ
れる。(1) パート番号:16個のパートの種類を“0〜
15”でもって示す.
【0036】パートマップ(図3) “0〜15”により16個のパートの種類を示すパート
番号に対応して次のものが記憶される。 (1) 音色番号:音色を示す. (2) トランケート禁止フェーズ番号:新たな楽音の割当
てを禁止するフェーズの最終番号を示す.すなわちこの
番号までの時間(=フェーズ番号×所定単位時間(5m
Sec ))新たな楽音の割当てを禁止する.本実施例にお
いてはアタックを終了するまでのフェーズ番号である. (3) 持続音系フラグ:持続音系の楽音を“1”でもっ
て、減衰音系の楽音を“0”でもって示す.
【0037】タスク管理マップ(図6) “1〜6”によりタスクの種類を示すタスク番号に対応
して次のものが記憶される。なお、タスク番号は、
“1”はキーデータ受信タスク、“2”はメインアサイ
ナタスク、“3”は発音タスク、“4”はプリアサイナ
タスク、“5”はエンベロープタスク、“6”は操作子
データ受信タスクであり、番号が若いほど優先順位が高
い. (1) タイマ処理要求フラグ:タイマ処理が必要なことを
“1”でもって示す. (2) ステータス:タスクの状態がランであることを
“0”でもって、レディであることを“1”でもって、
ウェイトであることを“2”でもって示す. (3) 待ちイベント値:ステータスがウェイトにおける待
ち中のイベントの種類を示す. (4) イベント発生フラグ:タスクの各イベント毎にイベ
ントの発生を“1”でもって示す.
【0038】楽音発生チャネル管理マップ(図7) “0〜15”の番号により16個の楽音発生チャネルを
示す楽音発生チャネル番号に対応して次のものが記憶さ
れる。 (1) 発音量:現在発音中の楽音の発音量を“0000
H”〜“FFFFH”でもって示す. (2) トランケート禁止フラグ:新たな楽音の割当ての禁
止を“1”でもって示す. (3) 急速減衰中フラグ:従前の楽音を急速減衰中である
ことを“1”でもって示す. (4) 処理待ちフラグ1:発音タスクにおける第1処理の
処理待ちを“1”でもって示す. (5) 処理待ちフラグ2:発音タスクにおける第2処理の
処理待ちを“1”でもって示す. (6) 処理待ちフラグ3:発音タスクにおける第3処理の
処理待ちを“1”でもって示す. (7) ノート番号:楽音の音高を示す. (8) ベロシティ:楽音のベロシティを示す. (9) 楽音発生パラメータ群:楽音発生に関する各種パラ
メータの値を示す. (10)押鍵順位:ノートオン受信順位を“0〜15”でも
って示し、最も古いノートオン受信順位を“0”でもっ
て示す. (11)ノートステータス:ノートオンを“1”でもって、
ノートオフを“0”でもって示す. (12)パート番号
【0039】エンベロープ管理マップ(図4) 各楽音発生チャネルに対応して“0〜15”の番号によ
り16個のエンベロープチャネルを示すエンベロープチ
ャネル番号に対応して次のものが記憶される。 (1) エンベロープレベル:エンベロープレベルを“00
00H”〜“FFFFH”でもって示す. (2) 目標値:次に到達すべきエンベロープレベルを“0
000H”〜“FFFFH”でもって示す. (3) レート:所定時間(5mSec )当たりのエンベロー
プレベルの変化量を示す.具体的には正負を示す符号ビ
ットと絶対値を“0000H”〜“FFFFH”で示す
データビットにより構成される. (4) フェーズ番号:現在のフェーズ番号(楽音発生開始
からの経過段階)を示す. (5) トランケート禁止フェーズ番号:新たな楽音の割当
てを禁止する最終フェーズ番号を示す. (6) エンベロープ生成パラメータ群:楽音のエンベロー
プ生成に関する各種パラメータの値を示す.
【0040】エフェクタ管理マップ(図5) “0〜15”の番号により16個の楽音発生チャネルを
示す楽音発生チャネル番号に対応して楽音発生チャネル
の効果付加部に関する次のものが記憶される。 (1) エフェクタ制御パラメータ群:楽音に付加する音響
効果を制御する各種パラメータの値を示す. (2) 出力係数群:効果付加部から出力する楽音のエンベ
ロープレベルの、効果付加部に入力する対応する楽音の
エンベロープレベルに対する割合を示す.原音の出力係
数は遅延しないで出力する楽音についての割合を示す。
効果音の出力係数は1〜400の各経過フェーズ数毎に
対応する経過フェーズ(1フェーズ=5mSec)で出力す
る楽音についての割合を示す.例えば経過フェーズ数が
“1”の出力係数は“経過フェーズ1”(入力直後から
5mSec までに)で出力する(例えば4mSec 遅延)楽
音の割合を示す.総和は原音および効果音の各出力係数
の総和を示す. (3) 最大経過フェーズ数:0.05以上の出力係数を有
する経過フェーズ数の最大値を示す.
【0041】エンベロープレベルバッファの構成 次に16個の楽音発生チャネルに対応してRAM24の
所定領域に設定されている16個のエンベロープレベル
バッファについて説明する。各エンベロープレベルバッ
ファはエンベロープレベルを順次記憶するバッファであ
って、仮想的にリング状に構成されている。書込みが指
示されると、書込みポインタで示されているアドレスに
対して書込みが行われ、書込みを終了すると、書込みポ
インタを前に進める。読出しが指示されると、読出しポ
インタで示されているアドレスに対して読出しが行われ
る。クリアが指示されると、記憶領域全てに“0”を書
き込む。なお、各エンベロープレベルバッファは400
個のエンベロープレベルデータを記憶できる。
【0042】各種の変数の詳細な説明 本電子楽器において実行される各種タスクのフローチャ
ート中において用いられる各種の変数としては以下のも
のがある。 NSTK 要求元タスク番号:モニタコールをしたタスクの
タスク番号を示す. NSET 要求元イベント値:モニタコールをしたタスクに
おいて次に処理しようとするイベントの種類を示す. NDTK 要求先タスク番号:次に実行を予定するタスクの
タスク番号を示す. NDET 要求先イベント値:次に実行を予定するタスクに
おいて処理しようとするイベントの種類を示す. IEDF 初期設定完了フラグ:全てのタスクにおける初期
設定の完了を“1”でもって示す. TCTN タイマ割込み処理対象番号:タイマ割込み処理対
象のタスク番号を示す. TCNE[N] 第Nタスクタイマカウンタ値:タスク番号がN
であるタスク用タイマカウンタの値を示す. TCND[N] 第Nタスク時間間隔:タスク番号がNである
タスクに対してタイマイベントを発行する時間間隔を示
す. TCNE[TCTN] 第TCTNタスクタイマカウンタ値:タスク番
号がタイマ割込み処理対象番号TCTNであるタスク用タイ
マカウンタの値を示す. TCND[TCTN] 第TCTNタスク時間間隔:タスク番号がタイ
マ割込み処理対象番号TCTNであるタスクに対してタイマ
イベントを発行する時間間隔を示す.
【0043】〔キーデータ受信タスク〕 NTNM ノート番号:ノートオンおよび/またはノートオ
フメッセージに基づく演奏情報の音高を示す. NTST ノートステータス:ノートオンメッセージに基づ
く演奏情報であることを“1”でもって、ノートオフメ
ッセージに基づく演奏情報であることを“0”でもって
示す. NTVL ベロシティ:ノートオンメッセージに基づく演奏
情報のベロシティを示す. MCNM MIDIチャネル番号:ノートオンおよび/また
はノートオフメッセージにもとづく演奏情報のMIDI
チャネル番号を示す. PTNM パート番号
【0044】〔メインアサイナタスク〕 MASS[N] 第Nアサイン順位の楽音発生チャネル番号:
アサイン順位が第Nアサイン順位(N番目のアサイン順
位)である楽音発生チャネルの楽音発生チャネル番号を
示す. TASN 対象アサイン順位:アサイン対象のアサイン順位
番号を示す. MAEF メインアサイナ処理中フラグ:メインアサイナタ
スクで新たなアサイン処理をしたことを“1”でもって
示す. MASS[TASN] アサイン順位TASNの楽音発生チャネル番
号:アサイン順位が対象アサイン順位TASNである楽音発
生チャネルの楽音発生チャネル番号を示す. GACN 割当て可能楽音発生チャネル数:割当てが可能な
楽音発生チャネル数を示す.
【0045】〔発音タスク〕 GCTN 発音処理対象楽音発生チャネル番号:処理対象の
楽音発生チャネル番号を示す. TDNF 急速減衰未了フラグ:いずれかの楽音発生チャネ
ルが急速減衰中であることを“1”でもって示す.
【0046】〔プリアサイナタスク〕 GN 楽音発生チャネル番号 PLEV[GN] 楽音発生チャネル番号GNのプリアサイナ発音
量 PACT[GN] 楽音発生チャネル番号GNのプリアサイナ急速
減衰中フラグ PAIT[GN] 楽音発生チャネル番号GNのプリアサイナトラ
ンケート禁止フラグ PAPN[GN] 楽音発生チャネル番号GNのプリアサイナ押鍵
順位 PACN プリアサイナ割当て可能楽音発生チャネル数:プ
リアサイナタスクにおいて割当て可能な楽音発生チャネ
ル数を示す. N プリアサイン順位 RN プリアサイン逆順位 PASS[N] 第Nプリアサイン順位楽音発生チャネル番号:
プリアサイン順位が第N順位である楽音発生チャネルの
楽音発生チャネル番号を示す. PN 処理対象押鍵順位
【0047】〔エンベロープタスク〕 ECTN エンベロープ処理対象番号 EPNM エンベロープ処理対象パート番号 ELEN エンベロープレベル ERTE レート FNOW フェーズ番号 FPSN 最短押鍵フェーズ番号:少なくともノートオン状
態であると予測するフェーズの最終フェーズ番号を示
す. FPCN 押鍵継続フェーズ数:ノートオン状態の継続する
長さを示す. FVCN 発音継続フェーズ数 EVOL 発音量:楽音発生部の発音量 GVOL 総合発音量 ETWT 出力係数総和:出力係数群の総和を示す. ETWM 出力係数総和最大値:出力係数群の総和の最大値
を示す. EFMN 最大経過フェーズ数:最大経過フェーズ数を示
す. ELFN 経過フェーズ数:効果付加部に蓄積されている発
音量の算出における処理対象の経過フェーズを示す.
【0048】各種タスクのフローチャートの詳細な説明 以下、各種タスクのフローチャートについて詳細に説明
する。まずモニタプログラムについて図8〜図12に示
されるフローチャートを参照して説明する。
【0049】リセットルーチン(図8) 電源の投入時等においてリセットがかかると実行される
ルーチンである。各ステップZA1〜ZA3での処理は
以下の通りである。 〔ZA1〕 タスク管理マップにおける全てのタスク番
号のステータスを“1:レディ”に設定し、また、タイ
マ処理要求フラグ、待ちイベント値およびイベント発生
フラグを“0”に設定する。さらに、初期設定完了フラ
グIEDFを“0:初期設定未完了”に設定する等の初期設
定を行う。 〔ZA2〕 要求元タスク番号NSTKを“1:キーデータ
受信タスク”に更新するとともに、タスク管理マップに
おけるタスク番号“1:キーデータ受信タスク”のステ
ータスを“0:ラン”に設定する。 〔ZA3〕 キーデータ受信タスクを実行する。
【0050】イベント待ちモニタコールルーチン(図
9) 実行中のタスクがイベント待ちモニタコールをすると実
行されるルーチンである。各ステップZB1〜ZB5で
の処理は以下の通りである。 〔ZB1〕 タスク管理マップにおける要求元タスク番
号NSTKに対応するタスク番号について、要求元イベント
値NSETの2進数表現における“1”であるビットに対応
するイベント発生フラグのいずれかが“1:イベント発
生”であるか否かを判断する。この対応するイベント発
生フラグのいずれかが“1:イベント発生”である場合
には、イベント待ちモニタコールを行ったタスクに戻
る。なお、イベント発生フラグの判断に際して、例えば
要求元イベント値NSETが“1”である場合には第1イベ
ント発生フラグ、要求元イベント値NSETが“2”である
場合には第2イベント発生フラグ、要求元イベント値NS
ETが“3”である場合には第1および第2イベント発生
フラグを判断する。 〔ZB2〕 ステップZB1における判断において、判
断対象のイベント発生フラグがいずれも“1”でなくて
イベントの発生を示していない場合には、タスク管理マ
ップにおける要求元タスク番号NSTKに対応するタスク番
号のステータスを“2:ウェイト”に設定するととも
に、待ちイベント値を要求元イベント値NSETにする。ま
た処理の再開に備えて要求元タスクにおいて使用中のレ
ジスタ等の内容をスタック領域に退避する等の中断処理
(以下、単に要求元タスクの中断処理と記する)を行
う。 〔ZB3〕 タスク管理マップを調べて、イベント待ち
モニタコールを行ったタスクより優先順位が低くかつ対
応するステータスが“1:レディ”を示すタスクをタス
ク番号順に探す。このレディを示すタスクがない場合に
は、要求元タスク番号NSTKをスリープを示す“7”に設
定してスリープする。なお、スリープからはタイマ25
またはMIDI回路20からのハードウェア割込みに基
づいて、後述するタイマ割込み処理ルーチン、キーデー
タ受信割込み処理ルーチン、または操作子データ受信割
込み処理ルーチンが起動される。 〔ZB4〕 ステップZB3において最優先のレディタ
スクを探し出すと、要求元タスク番号NSTKをそのタスク
のタスク番号に更新するとともに、タスク管理マップに
おけるそのタスクのタスク番号のステータスを“0:ラ
ン”に設定する。 〔ZB5〕 要求元タスク番号NSTKに対応するタスクを
実行する。なお、タスクの実行に際しては、そのタスク
の中断処理においてスタック領域に退避したデータ等を
元のレジスタ等に戻す等の再開処理(以下、単に再開処
理と記する)を行う。
【0051】イベント発生モニタコールルーチン(図1
0) 実行中のタスクがイベント発生モニタコールをすると実
行されるルーチンである。各ステップZC1〜ZC7で
の処理は以下の通りである。 〔ZC1〕 タスク管理マップにおける要求先タスク番
号NDTKに対応するタスク番号について、要求先イベント
値NDETの2進数表現における“1”であるビットに対応
するイベント発生フラグを“1”に設定する。例えば要
求先イベント値NDETが“1”である場合には第1イベン
ト発生フラグを、要求先イベント値NDETが“2”である
場合には第2イベント発生フラグを“1”に設定する。 〔ZC2〕 タスク管理マップにおける要求先タスク番
号NDTKに対応するタスク番号のステータスが“2:ウェ
イト”でかつ待ちイベント値が要求先イベント値NDETに
対応しているか否かを判断する。このステータスが
“2:ウェイト”でなく、または待ちイベント値が要求
先イベント値NDETに対応しない場合には、このモニタコ
ールを行ったタスクに戻る。なお、待ちイベント値が要
求先イベント値NDETに対応しているか否かの判断は、待
ちイベント値の2進数表現における“1”であるビット
に対応する要求先イベント値NDETの2進数表現における
ビットのいずれかのビットが“1”であるか否かで判断
する。例えば待ちイベント値が“1”である場合には要
求先イベント値NDETの第1ビットが“1”、待ちイベン
ト値が“2”である場合には要求先イベント値NDETの第
2ビットが“1”、待ちイベント値が“3”である場合
には要求先イベント値NDETの第1または第2ビットが
“1”であるときに対応していると判断する。
【0052】〔ZC3〕 ステップZC2における判断
において、判断対象のステータスが“2:ウェイト”で
かつ待ちイベント値が要求先イベント値NDETに対応する
場合には、このステータスを“1:レディ”に設定す
る。 〔ZC4〕 要求先タスク番号NDTKが要求元タスク番号
NSTK未満か否かにより要求先タスクの優先順位が要求元
タスクの優先順位より高いか否かを判断する。この要求
先タスク番号NDTKが要求元タスク番号NSTK未満でなくて
要求先タスクの優先順位が高くない場合には、このモニ
タコールを行ったタスクに戻る。 〔ZC5〕 ステップZC4における判断において、要
求先タスク番号NDTKが要求元タスク番号NSTK未満で要求
先タスクの優先順位が高い場合には、タスク管理マップ
における要求元タスク番号NSTKに対応するタスク番号の
ステータスを“1:レディ”に設定するとともに、処理
の再開に備えて要求元タスクの中断処理を行う。 〔ZC6〕 要求元タスク番号NSTKを要求先タスク番号
NDTKに更新するとともに、タスク管理マップにおける要
求先タスク番号NDTKに対応するタスク番号のステータス
を“0:ラン”に設定する。 〔ZC7〕 要求先タスク番号NDTKに対応するタスク番
号のタスクを実行する。なお、タスクの実行に際しては
そのタスクの再開処理を行う。
【0053】タイマ割込み処理ルーチン(図11) このタイマ割込み処理ルーチンにおいては、タイマ25
からタイマ割込みがかかると、まず各タスクに対応する
タイマカウンタを調べ、その値が“1”を超えている場
合にはタイマカウンタを“1”だけデクリメントし、
“1”を超えていない場合にはタスク管理マップにおけ
るそのタスク番号の第1イベント発生フラグを“1:イ
ベント発生”に設定するとともに、そのタスクのステー
タスが“2:ウェイト”であるときにはステータスを
“1:レディ”に設定する。次に、優先順位の高いタス
クから順次に、タスクを実行すべきか否かを判断して最
初に条件を満たすタスクを実行させる。各ステップZD
1〜ZD16での処理は以下の通りである。
【0054】〔ZD1〕 初期設定完了フラグIEDFが
“1:初期設定完了”であるか否かを判断する。この初
期設定完了フラグIEDFが“1”でない場合には、全ての
タスクの初期設定がいまだ終了していないので、タイマ
割込み処理を終了してタイマ割込み前の処理に戻り、
“1”である場合には後述する各タスクの初期設定を全
て終了しているので次のステップZD2に進む。 〔ZD2〕 タイマ割込み処理対象のタスク番号を示す
タイマ割込み処理対象番号TCTNを“6”に設定する。 〔ZD3〕 タスク管理マップにおけるタイマ割込み処
理対象番号TCTNに対応するタスク番号のタイマ処理要求
フラグが“1:要求有り”であるか否かを判断する。こ
のタイマ処理要求フラグが“1”でない場合には、ステ
ップZD8に進む。 〔ZD4〕 ステップZD3における判断において、判
断対象のタイマ処理要求フラグが“1:要求有り”であ
る場合には、第TCTNタスクタイマカウンタ値TCNE[TCTN]
が“1”を超えているか否かを判断する。第TCTNタスク
タイマカウンタ値TCNE[TCTN]が“1”を超えている場合
には、ステップZD10に進む。
【0055】〔ZD5〕 ステップZD4における判断
において、第TCTNタスクタイマカウンタ値TCNE[TCTN]が
“1”を超えていない場合には、まず第TCTNタスクタイ
マカウンタ値TCNE[TCTN]に第TCTNタスク時間間隔TCND[T
CTN]を加算して、この値を新たな第TCTNタスクタイマカ
ウンタ値TCNE[TCTN]とする。次に、タスク管理マップに
おけるタイマ割込み処理対象番号TCTNに対応するタスク
番号の第1イベント発生フラグを“1:イベント発生”
に設定する。 〔ZD6〕 タスク管理マップにおけるタイマ割込み処
理対象番号TCTNに対応するタスク番号のステータスが
“2:ウェイト”でかつそのタスクの待ちイベント値の
2進数表現における第1ビットが“1”(例えば待ちイ
ベント値が“1”,“3”)であるか否かを判断する。
このステータスが“2:ウェイト”でないまたは待ちイ
ベント値の2進数表現における第1ビットが“1”でな
い場合には、ステップZD8に進む。 〔ZD7〕 ステップZD6における判断において、判
断対象のステータスが“2:ウェイト”でかつ判断対象
の待ちイベント値の2進数表現における第1ビットが
“1”である場合には、タスク管理マップにおけるタイ
マ割込み処理対象番号TCTNに対応するタスク番号のステ
ータスを“1:レディ”に設定する。 〔ZD8〕 タイマ割込み処理対象番号TCTNが“1”を
超えているか否かを判断する。このタイマ割込み処理対
象番号TCTNが“1”を超えていない場合には、イベント
発生フラグの設定処理が全て終了したので、ステップZ
D11に進む。 〔ZD9〕 ステップZD8における判断において、タ
イマ割込み処理対象番号TCTNが“1”を超えている場合
には、タイマ割込み処理対象番号TCTNを“1”だけデク
リメントしてステップZD3に戻る。 〔ZD10〕 ステップZD4における判断において、
第TCTNタスクタイマカウンタ値TCNE[TCTN]が“1”を超
えている場合には、第TCTNタスクタイマカウンタ値TCNE
[TCTN]を“1”だけデクリメントしてステップZD8に
進む。
【0056】〔ZD11〕 タイマ割込み処理対象番号
TCTNがこのルーチンにおいてはタイマ割込み発生前の処
理を示す要求元タスク番号NSTK未満であるか否かを判断
する。このタイマ割込み処理対象番号TCTNが要求元タス
ク番号NSTK未満でない場合には、タイマ割込み発生時に
実行していたタスクの優先順位が処理対象番号TCTNに対
応するタスクの優先順位より低くないので、タイマ割込
み処理を終了してそのタスクに戻る。 〔ZD12〕 ステップZD11における判断におい
て、タイマ割込み処理対象番号TCTNが要求元タスク番号
NSTK未満である場合には、タスク管理マップにおけるタ
イマ割込み処理対象番号TCTNに対応するタスク番号のス
テータスが“1:レディ”であるか否かを判断する。こ
のステータスが“1”でない場合には、ステップZD1
6に進む。 〔ZD13〕 ステップZD12における判断におい
て、判断対象のステータスが“1:レディ”である場合
には、タスク管理マップにおける要求元タスク番号NSTK
に対応するタスク番号のステータスを“1:レディ”に
設定するとともに、処理の再開に備えて要求元タスク番
号NSTKに対応するタスクの中断処理を行う。 〔ZD14〕 要求元タスク番号NSTKをタイマ割込み処
理対象番号TCTNに更新するとともに、タスク管理マップ
におけるタイマ割込み処理対象番号TCTNに対応するタス
ク番号のステータスを“0:ラン”に設定する。 〔ZD15〕 タイマイベントを発生する。すなわち、
タイマ割込み処理対象番号TCTNに対応するタスク番号の
タスクを実行する。なお、タスクの実行に際してはその
タスクの再開処理を行う。 〔ZD16〕 ステップZD12における判断におい
て、判断対象のステータスが“1:レディ”でない場合
には、タイマ割込み処理対象番号TCTNを“1”だけイン
クリメントしてステップZD11に戻る。
【0057】キーデータ受信割込み処理ルーチン(図1
2) MIDI回路20から割込みがかかると実行されてキー
データ受信イベントを発生するルーチンである。各ステ
ップZE1〜ZE6での処理は以下の通りである。 〔ZE1〕 初期設定完了フラグIEDFが“1:完了”で
あるか否かを判断する。この初期設定完了フラグIEDFが
“1”でない場合には、全てのタスクの初期設定がいま
だ終了していないので、キーデータ受信割込み処理を終
了してキーデータ受信割込み発生前の処理に戻る。 〔ZE2〕 ステップZE1における判断において初期
設定完了フラグIEDFが“1:完了”である場合には、タ
スク管理マップにおけるタスク番号“1:キーデータ受
信タスク”の第1イベント発生フラグを“1:発生”に
設定する。 〔ZE3〕 タスク管理マップにおけるタスク番号
“1:キーデータ受信タスク”のステータスが“2:ウ
ェイト”でかつ待ちイベント値が“1:キーデータ受信
イベント待ち”であるか否かを判断する。このステータ
スが“2:ウェイト”でない、または待ちイベント値が
“1:キーデータ受信イベント待ち”でない場合には、
キーデータ受信割込み処理を終了してキーデータ受信割
込み発生前の処理に戻る。
【0058】〔ZE4〕 ステップZE3における判断
において、判断対象のステータスが“2”でかつ待ちイ
ベント値が“1”でキーデータ受信イベント待ちである
場合には、このルーチンにおいてはキーデータ受信割込
み発生前の処理を示す要求元タスク番号NSTKが“7”未
満であるか否かを判断する。要求元タスク番号NSTKが
“7” 未満である場合にはタスク管理マップにおける
要求元タスク番号NSTKに対応するタスク番号のステータ
スを“1:レディ”に設定するとともに、処理の再開に
備えてタイマ割込み発生前のタスクの中断処理を行う。
なお、“7”未満でない場合には格別の処理は不要であ
る。 〔ZE5〕 要求元タスク番号NSTKをタスク番号“1:
キーデータ受信タスク”に更新するとともに、タスク管
理マップにおけるタスク番号“1:キーデータ受信タス
ク”のステータスを“0:ラン”に設定する。 〔ZE6〕 キーデータ受信イベントを発生する。すな
わち、キーデータ受信タスクを実行する。なおタスクの
実行に際してはキーデータ受信タスクの再開処理を行
う。
【0059】操作子データ受信割込み処理ルーチン MIDI回路20から操作子データ受信割込みがかかる
と実行されて操作子データ受信要求イベントの発生など
をする。 〔ZG1〕 初期設定完了フラグIEDFが“1:完了”で
あるか否かを判断する。この初期設定完了フラグIEDFが
“1”でない場合には、全てのタスクの初期設定がいま
だ終了していないので、操作子データ受信割込みルーチ
ンを終了して操作子データ受信割込み発生前の処理に戻
る。 〔ZG2〕 ステップZG1における判断において初期
設定完了フラグIEDFが“1:完了”である場合には、タ
スク管理マップにおけるタスク番号“6:操作子データ
受信タスク”の第1イベント発生フラグを“1:発生”
に設定する。 〔ZG3〕 タスク管理マップにおけるタスク番号
“6:操作子データ受信タスク”のステータスが“2:
ウェイト”でかつ待ちイベント値が“1:操作子データ
受信イベント待ち”であるか否かを判断する。このステ
ータスが“2:ウェイト”でない、または待ちイベント
値が“1:操作子データ受信イベント待ち”でない場合
には、操作子データ受信割込み処理を終了して操作子デ
ータ受信割込み前の処理に戻る。 〔ZG4〕 ステップZG3における判断において、タ
スク管理マップにおけるタスク番号“6:操作子データ
受信タスク”のステータスが“2:ウェイト”でかつ待
ちイベント値が“1”である場合には、このステータス
を“1:レディ”に設定する。
【0060】〔ZG5〕 要求元タスク番号NSTKが
“6”を超えているか否かにより要求元タスクの優先順
位が操作子データ受信タスクの優先順位より低いか否か
を判断する。要求元タスク番号NSTKが“6”を超えてい
なくて要求元タスクの優先順位が操作子データ受信タス
クの優先順位より低くない場合には、操作子データ受信
割込み前に実行していたタスクを示す要求元タスク番号
NSTKのタスクに戻る。 〔ZG6〕 ステップZG5における判断において要求
元タスク番号NSTKが“6”を超えていて要求元タスクの
優先順位が操作子データ受信割込みタスクの優先順位よ
り低い場合には、要求元タスク番号NSTKを“6:操作子
データ受信タスク”に更新するとともに、タスク管理マ
ップにおけるタスク番号“6:操作子データ受信タス
ク”のステータスを“0:ラン”に設定する。 〔ZG7〕 操作子データ受信イベントを発生する。す
なわち、操作子データ受信タスクを実行する。なおタス
クの実行に際しては操作子データ受信タスクの再開処理
を行う。なお、ステップZG5における判断において操
作子データ受信割込み前に実行していたタスクに戻った
場合には、いずれかのタスクにおけるイベント待ちモニ
タコールに基づくイベント待ちモニタコールルーチンに
おいて条件を満たすと操作子データ受信タスクを実行す
る。
【0061】次に、各タスクをキーデータ受信タスク、
メインアサイナタスク、発音タスク、プリアサイナタス
ク、エンベロープタスク、操作子データ受信タスクの順
に説明する。なお、電源の投入時等においてリセットが
かかった後の各タスクでの最初の処理に際しては、先頭
のステップ例えば次に説明するキーデータ受信タスクで
はステップA1より開始する。また、あるタスクの処理
を中断しその後処理を再開するに際しては、そのタスク
において中断時の処理を継続するように中断した処理を
再開する。例えばキーデータ受信タスクのステップA2
でイベント待ちモニタコールをし、イベント待ちモニタ
コールルーチンでの判断においてイベント発生でなく中
断処理をした場合には、その後キーデータ受信割込みの
発生によりキーデータ受信割込みルーチンで再開処理を
すると、ステップA2のイベント待ちモニタコールに引
き続くステップA3より処理を再開する。
【0062】キーデータ受信タスク(図13) キーデータ受信タスクは、キーデータ受信イベントが発
生すると、MIDI回路20からノートオンおよび/ま
たはノートオフメッセージに基づく演奏情報を読み込
み、アサイン要求イベントを発生する。各ステップA1
〜A7での処理は以下の通りである。 〔A1〕 このキーデータ受信タスクで占有する変数等
を初期値に設定する。 〔A2〕 要求元イベント値NSETを“1”に設定してイ
ベント待ちモニタコールを行う。キーデータ受信イベン
トが発生すると、次のステップA3に進む。 〔A3〕 タスク管理マップにおけるタスク番号“1:
キーデータ受信タスク”の第1イベント発生フラグを
“0”に、待ちイベント値を“0”に設定する。 〔A4〕 まず、MIDI回路20からノートオンおよ
び/またはノートオフメッセージに基づく演奏情報を読
み込み、その演奏情報のMIDIチャネル番号、ノート
番号、ノートステータスおよびノートベロシティをそれ
ぞれ対応するところのMIDIチャネル番号MCNM、ノー
ト番号NTNM、ノートステータスNTSTおよびベロシティNT
VLとする。次に、MIDIチャネルマップにおけるMI
DIチャネル番号MCNMに対応するMIDIチャネル番号
のパート番号をパート番号PTNMとする。 〔A5〕 ノートステータスNTSTが“1:ノートオン”
であるか否かを判断する。このノートステータスNTSTが
“1”でない場合には次のステップA6に進み、“1”
である場合にはステップA7に進む。 〔A6〕 ノートオフ処理 楽音発生チャネル管理マップのパート番号およびノート
番号がパート番号PTNMおよびノート番号NTNMでかつノー
トステータスが“1”である楽音発生チャネル番号を押
鍵順位の小なる順に探し、押鍵順位の最も小なるその楽
音発生チャネル番号のノートステータスを“0”に設定
する。ステップA2に戻る。 〔A7〕 ノートオン処理 アサイン要求イベントを発生する。すなわち、要求先タ
スク番号NDTKを“2:メインアサイナタスク”に、要求
先イベント値NDETを“1”に設定してイベント発生モニ
タコールを行う。ステップA2に戻る。
【0063】メインアサイナタスク(図14) メインアサイナタスクは、アサイン要求イベントが発生
すると、後述するプリアサイナタスクで設定するアサイ
ン順位に基づいて、楽音発生チャネル管理マップの所定
の領域にノート番号NTNMなどを書き込み、発音要求イベ
ントを発生する。各ステップB1〜B7での処理は以下
の通りである。 〔B1〕 楽音発生チャネル管理マップを初期設定する
と共に、このメインアサイナタスクで占有する変数等を
初期値に設定する。なお楽音発生チャネル管理マップに
おける各楽音発生チャネル番号の押鍵順位をその楽音発
生チャネル番号に設定する。また、第Nアサイン順位楽
音発生チャネル番号MASS[N] (Nは0,1,〜15)をそれぞ
れ対応する“N( =0,1,〜15) ”に設定する。また対象
アサイン順位TASNを“0”に、割当て可能楽音発生チャ
ネル数GACNを最大数の“16”にそれぞれ設定する。 〔B2〕 要求元イベント値NSETを“1”に設定してイ
ベント待ちモニタコールを行う。アサイン要求イベント
が発生すると、次のステップB3に進む。 〔B3〕 タスク管理マップにおけるタスク番号“2:
メインアサイナタスク”の待ちイベント値を“0”に、
第1イベント発生フラグを“0”に設定する。
【0064】〔B4〕 対象アサイン順位TASNが割当て
可能楽音発生チャネル数GACN未満であるか否かを判断す
る。割当て可能楽音発生チャネル数GACN未満でない場合
には、割り当てるべき楽音発生チャネルが最早ないため
にステップB2に戻る。 〔B5〕 ステップB4において未満との判断の場合、
楽音発生チャネル管理マップにおけるアサイン順位TASN
の楽音発生チャネル番号MASS[TASN]に対応する楽音発生
チャネル番号の処理待ちフラグ1、処理待ちフラグ2お
よび処理待ちフラグ3を“1:処理待ち中”に、パート
番号をパート番号PTNMに、ノート番号をノート番号NTNM
に、ノートステータスを“1”に、べロシティをベロシ
ティNTVLにそれぞれ設定する。またメインアサイナ処理
中フラグMAEFを“1:メインアサイナ処理中”に設定す
る。 〔B6〕 発音要求イベントを発生する。すなわち要求
先タスク番号NDTKを“3:発音タスク”に、要求先イベ
ント値NDETを“2”に設定してイベント発生モニタコー
ルを行う。 〔B7〕 対象アサイン順位TASNを“1”だけインクリ
メントしてステップB2に戻る。
【0065】発音タスク(図15、図16) 発音タスクは、発音要求イベントが発生すると新たな楽
音を発生する楽音発生チャネルにおいて前の発音が終了
していない場合には急速減衰の開始を指示する(第1処
理)。また、ノート番号NTNMなどに基づいて楽音発生に
関するパラメータを演算して設定する(第2処理)。発
音が終了していた、または、した場合には楽音発生チャ
ネルに新たな発音を指示する(第3処理)。各ステップ
C1〜C27での処理は以下の通りである。 〔C1〕 この発音タスクで占有する変数等を初期値に
設定するとともに、急速減衰を終了した楽音発生チャネ
ル番号を記憶する急速減衰終了FIFOおよびエンベロ
ープレベルバッファをクリヤするなどするとともに、楽
音発生回路26を初期化する。また、第3タスクタイマ
カウンタ値TCNE[3] と、第3タスク時間間隔TCND[3] と
を“0”に設定するとともに、タスク管理マップにおけ
るタスク番号“3:発音タスク”のタイマ処理要求フラ
グを“1:要求有り”に設定する。 〔C2〕 要求元イベント値NSETを“2”に設定してイ
ベント待ちモニタコールを行う。発音要求イベントが発
生すると、次のステップC3に進む。
【0066】〔C3〕 まず、タスク管理マップにおけ
るタスク番号“3:発音タスク”の待ちイベント値を
“0”に、第2イベント発生フラグを“0”に設定し
て、次に発音処理対象楽音発生チャネル番号GCTNを
“0”に設定する。 〔C4〕 楽音発生チャネル管理マップにおける発音処
理対象楽音発生チャネル番号GCTNに対応する楽音発生チ
ャネル番号の処理待ちフラグ1が“1:処理待ち中”で
あるか否かを判断する。この処理待ちフラグ1が“1”
である場合には次のステップC5に進み、“1”でなく
て第1処理(ステップC5〜C7)が不要である場合に
は、ステップC8に進む。 〔C5〕 楽音発生チャネル管理マップにおける発音処
理対象楽音発生チャネル番号GCTNに対応する楽音発生チ
ャネル番号の発音量が“0”であるか否かを判断する。
この発音量が“0”でない場合には次のステップC6に
進み、“0”で急速減衰処理が不要である場合には、ス
テップC7に進む。 〔C6〕 楽音発生チャネル管理マップにおける発音処
理対象楽音発生チャネル番号GCTNに対応する楽音発生チ
ャネル番号の急速減衰中フラグを“1:急速減衰中”
に、発音量を急速減衰中を示す“FFFFH" に設定す
るとともに、対応する楽音発生チャネルに急速減衰の開
始を指示する。 〔C7〕 楽音発生チャネル管理マップにおける発音処
理対象楽音発生チャネル番号GCTNに対応する楽音発生チ
ャネル番号の処理待ちフラグ1を“0”に設定する。 〔C8〕 発音処理対象楽音発生チャネル番号GCTNが
“15”未満であるか否かを判断する。この楽音処理対
象楽音発生チャネル番号GCTNが“15”未満である場合
には次のステップC9に進み、“15”未満でなくて全
ての楽音発生チャネルについて第1処理を終えている場
合には、ステップC10に進む。 〔C9〕 発音処理対象楽音発生チャネル番号GCTNを
“1”だけインクリメントし、次の楽音発生チャネルの
処理の準備をしてステップC4に戻る。
【0067】〔C10〕 発音処理対象楽音発生チャネ
ル番号GCTNを“0”に設定する。 〔C11〕 楽音発生チャネル管理マップにおける発音
処理対象楽音発生チャネル番号GCTNに対応する楽音発生
チャネル番号の処理待ちフラグ2が“1:処理待ち中”
であるか否かを判断する。この処理待ちフラグ2が
“1”である場合には次のステップC12に進み、
“1”でなくて第2処理(ステップC12)が不要であ
る場合には、ステップC13に進む。 〔C12〕 発音処理対象楽音発生チャネル番号GCTNに
対応する楽音発生チャネルの、楽音の発生と楽音のエン
ベロープ生成およびエフェクタ制御に関する各種パラメ
ータの値を、楽音発生チャネル管理マップにおける発音
処理対象楽音発生チャネル番号GCTNに対応する楽音発生
チャネル番号のノート番号、ベロシティ、およびその楽
音発生チャネル番号のパート番号に対応するパートマッ
プにおけるパート番号の音色番号に対応するROM23
に音色番号に対応して記憶されている音色パラメータ群
より演算して、これら演算された各種パラメータの値
を、楽音発生チャネル管理マップにおける発音処理対象
楽音発生チャネル番号GCTNに対応する楽音発生チャネル
番号の楽音発生パラメータ群、エンベロープ管理マップ
における発音処理対象楽音発生チャネル番号GCTNに対応
するエンベロープチャネル番号のエンベロープ生成パラ
メータ群の対応するパラメータおよびエフェクタ管理マ
ップにおける発音処理対象楽音発生チャネル番号GCTNに
対応する楽音発生チャネル番号のエフェクタ制御パラメ
ータ群、出力係数群および最大経過フェーズ数に設定す
る。また発音処理対象楽音発生チャネル番号GCTNに対応
するエンベロープレベルバッファをクリアする。これと
ともに、処理待ちフラグ2を“0”に設定する。
【0068】またエンベロープ管理マップにおける発音
処理対象楽音発生チャネル番号GCTNに対応するエンベロ
ープチャネル番号のトランケート禁止フェーズ番号をパ
ートマップにおける前記パート番号のトランケート禁止
フェーズ番号に設定する。また、楽音発生チャネル管理
マップにおける発音処理対象楽音発生チャネル番号GCTN
に対応する楽音発生チャネル番号の押鍵順位以上の押鍵
順位を次のように更新する。発音処理対象楽音発生チャ
ネル番号GCTNに対応する楽音発生チャネル番号の押鍵順
位より大きな押鍵順位を“1”だけデクリメントすると
ともに、発音処理対象楽音発生チャネル番号GCTNに対応
する楽音発生チャネル番号の押鍵順位を“15”に設定
する。例えば、押鍵順位が“5”の楽音発生チャネルに
新たな楽音を割り当てると、押鍵順位が“6”〜“1
5”の楽音発生チャネルの押鍵順位は“5”〜“14”
に設定され、新たな楽音が割り当てられた楽音発生チャ
ネルの押鍵順位は“15”に設定される。 〔C13〕 発音処理対象楽音発生チャネル番号GCTNが
“15”未満であるか否かを判断する。この発音処理対
象楽音発生チャネル番号GCTNが“15”未満である場合
にはつぎのステップC14に進み、“15”未満でない
場合には、ステップC15に進む。 〔C14〕 発音処理対象楽音発生チャネル番号GCTNを
“1”だけインクリメントし、ステップC11に戻る。
【0069】〔C15〕 急速減衰未了フラグTDNFを
“0”に、発音処理対象楽音発生チャネル番号GCTNを
“0”に設定する。 〔C16〕 楽音発生チャネル管理マップにおける発音
処理対象楽音発生チャネル番号GCTNに対応する楽音発生
チャネル番号の処理待ちフラグ3が“1:処理待ち中”
であるか否かを判断する。この処理待ちフラグ3が
“1”である場合には次のステップC17に進み、
“1”でなくて第3処理(ステップC17,C18,C
21)が不要である場合には、ステップC19に進む。 〔C17〕 楽音発生チャネル管理マップにおける発音
処理対象楽音発生チャネル番号GCTNに対応する楽音発生
チャネル番号の急速減衰中フラグが“1:急速減衰中”
であるか否かを判断する。この急速減衰中フラグが
“1”でない場合には次のステップC18に進み、
“1”である場合には、割り当てるべき楽音発生チャネ
ルにおける従前に割り当てられていた楽音の発音がいま
だ終了していないために、ステップC21に進む。
【0070】〔C18〕 エンベロープ管理マップにお
ける発音処理対象楽音発生チャネル番号GCTNに対応する
エンベロープチャネル番号のエンベロープ生成パラメー
タ群に基づいて第1フェーズの目標値およびレートを演
算してその値にエンベロープ管理マップの目標値および
レートを設定するとともに、フェーズ番号を“1”に、
エンベロープレベルを“0”に設定する。また、楽音発
生チャネル管理マップにおける発音処理対象楽音発生チ
ャネル番号GCTNに対応する楽音発生チャネル番号の発音
量を、エンベロープ生成パラメータ群に含まれるアタッ
クレベルの上位15ビットに“8000H”を加えた値
に、トランケート禁止フラグを“1:トランケート禁
止”にそれぞれ設定する。また、楽音発生チャネル管理
マップにおける発音処理対象楽音発生チャネル番号GCTN
に対応する楽音発生チャネル番号の楽音発生パラメータ
群とエンベロープ管理マップにおける発音処理対象楽音
発生チャネル番号GCTNに対応するエンベロープチャネル
番号の目標値およびレートとエフェクタ管理マップにお
ける発音処理対象楽音発生チャネル番号GCTNに対応する
楽音発生チャネル番号のエフェクタ制御パラメータ群と
を、楽音発生回路26における発音処理対象楽音発生チ
ャネル番号GCTNに対応する楽音発生チャネルに転送す
る。また処理待ちフラグ3を“0”に設定するととも
に、対応する楽音発生チャネルに楽音発生の開始を指示
する。
【0071】〔C19〕 発音処理対象楽音発生チャネ
ル番号GCTNが“15”未満であるか否かを判断する。こ
の発音処理対象楽音発生チャネル番号GCTNが“15”未
満である場合には次のステップC20に進み、“15”
未満でない場合には、ステップC22に進む。 〔C20〕 発音処理対象楽音発生チャネル番号GCTNを
“1”だけインクリメントして、ステップC16に戻
る。 〔C21〕 急速減衰未了フラグTDNFを“1:未了”に
設定してステップC19に進む。 〔C22〕 急速減衰未了フラグTDNFが“1:未了”で
あるか否かを判断する。この急速減衰未了フラグTDNFが
“1”である場合には次のステップC23に進み、
“1”でなく全ての発音処理が終了している場合にはス
テップC2に戻る。
【0072】〔C23〕 要求元イベント値NSETを
“3”に設定してイベント待ちモニタコールを行う。発
音要求イベントまたは発音タスクに対するタイマイベン
トのいずれかが発生すると、次のステップC24に進
む。 〔C24〕 タスク管理マップにおけるタスク番号
“3:発音タスク”の第2イベント発生フラグが“1”
であるか否かを判断する。その第2イベント発生フラグ
が“1”でない場合には次のステップC25に進み、
“1”である場合には、発音要求イベントの発生である
ためにステップC3に戻る。 〔C25〕 タスク管理マップにおけるタスク番号
“3:発音タスク”の第1イベント発生フラグが“1”
であるタイマイベントの発生であるために、タスク管理
マップにおけるタスク番号“3:発音タスク”の待ちイ
ベント値を“0”に、第1イベント発生フラグを“0”
に設定する。 〔C26〕 楽音発生回路26に設けられている急速減
衰終了FIFOが空であるか否かを判断する。この急速
減衰終了FIFOが空である場合にはステップC23に
戻り、空でない場合には次のステップC27に進む。 〔C27〕 急速減衰終了FIFOから急速減衰処理に
より楽音の発生を停止した楽音発生チャネルの楽音発生
チャネル番号を順次に降ろし、降ろした楽音発生チャネ
ル番号に対応する楽音発生チャネル管理マップにおける
楽音発生チャネル番号の急速減衰中フラグを“0”に設
定する。そして、ステップC15に戻る。
【0073】プリアサイナタスク(図17) プリアサイナタスクは、プリアサイナタスクに対するタ
イマイベントが発生すると実行を開始し、原則として発
音量に基づいてアサイン順位を更新する。各ステップD
1〜D11での処理は以下の通りである。 〔D1〕 このプリアサイナタスクで占有する変数等を
初期値に設定する。また、第4タスクタイマカウンタ値
TCNE[4] を“5”に、第4タスク時間間隔TCND[4] を
“4”に設定する。さらに、タスク管理マップにおける
タスク番号“4:プリアサイナタスク”のタイマ処理要
求フラグを“1:要求有り”に設定する。 〔D2〕 要求元イベント値NSETを“1”に設定してイ
ベント待ちモニタコールを行う。プリアサイナタスクに
対するタイマイベントが発生すると、次のステップD3
に進む。 〔D3〕 タスク管理マップにおけるタスク番号“4:
プリアサイナタスク”の待ちイベント値を“0”に、第
1イベント発生フラグを“0”に設定する。
【0074】〔D4〕 メインアサイナ処理中フラグMA
EFを“0”に設定する。 〔D5〕 発音タスクのステップC6,C18で設定さ
れ後述するエンベロープタスクのステップE18におい
て更新されるところの楽音発生チャネル管理マップの各
楽音発生チャネル番号の発音量を、それぞれ対応する楽
音発生チャネル番号GNのプリアサイナ発音量PLEV[GN]と
する。また楽音発生チャネル管理マップにおける各楽音
発生チャネル番号の急速減衰中フラグをそれぞれ対応す
る楽音発生チャネル番号GNのプリアサイナ急速減衰中フ
ラグPACT[GN]とし、トランケ−ト禁止フラグをそれぞれ
対応する楽音発生チャネル番号GNのプリアサイナトラン
ケ−ト禁止フラグPAIT[GN]とし、押鍵順位をそれぞれ対
応する楽音発生チャネル番号GNのプリアサイナ押鍵順位
PAPN[GN]とする。 〔D6〕 プリアサイン順位の設定を行う。この処理の
内容は図18のフローチャートを参照して後に詳しく説
明する。 〔D7〕 タスクロックをかける。すなわち、MIDI
回路20、タイマ回路25からの割込みを禁止する。タ
スクロックが解除されるまで他のタスクの実行は禁止さ
れ、本タスクの実行の継続は保証される。
【0075】〔D8〕 メインアサイナ処理中フラグMA
EFが“0:非処理中”であるか否かを判断する。このメ
インアサイナ処理中フラグMAEFが“0”である場合には
ステップD10に進む。 〔D9〕 ステップD8の判断においてメインアサイナ
処理中フラグMAEFが“0”でない場合、すなわちステッ
プD5、D6の処理中にMIDIバスを介して受信した
ノートオンメッセージに基づくMIDI回路20からの
割込みにより生起した一連の処理によりメインアサイナ
タスクが実行されると、楽音発生チャネルの発音態様が
ステップD5の開始時と異なっているので、タスクロッ
クを解除して再設定をすべくステップD4に戻る。 〔D10〕 まず、第Nプリアサイン順位楽音発生チャ
ネル番号PASS[N] をそれぞれ第Nアサイン順位楽音発生
チャネル番号MASS[N] とするとともに、対象アサイン順
位TASNを“0”に設定する。次にプリアサイナ割当て可
能楽音発生チャネル数PACNを割当て可能楽音発生チャネ
ル数GACNとする。 〔D11 〕 タスクロックを解除してステップD2に戻
る。なお、タスクロック中に発生した割込みは、タスク
ロック解除後に実行される。
【0076】プリアサイン順位設定ルーチン(図18) ステップD6におけるプリアサイン順位設定ルーチンを
図18を参照して以下に説明する。各ステップD601
〜D607の処理は以下の通りである。 〔D601〕 プリアサイン順位Nを“0”に、プリア
サイン逆順位RNおよび処理対象押鍵順位PNを“15”に
設定する。 〔D602〕 処理対象押鍵順位PNが“0”未満である
か否かを判断する。この処理対象押鍵順位PNが“0”未
満でない場合には次のステップD603に進み、“0”
未満である場合にはステップD607に進む。 〔D603〕 処理対象押鍵順位PNと同じプリアサイナ
押鍵順位PAPN[GN]の楽音発生チャネル番号を楽音発生チ
ャネル番号GNとする。 〔D604〕 楽音発生チャネル番号GNのプリアサイナ
急速減衰中フラグPACT[GN]または楽音発生チャネル番号
GNのプリアサイナトランケート禁止フラグPAIT[GN]のい
ずれかが“1”であるか否かを判断する。判断対象のい
ずれかが“1”である場合にはステップD606に進
み、いずれもが“1”でない場合には次のステップD6
05に進む。
【0077】〔D605〕 まず、第Nプリアサイン順
位楽音発生チャネル番号PASS[N] を楽音発生チャネル番
号GNに設定する。次に、プリアサイナ押鍵順位PNを
“1”だけデクリメントするとともにプリアサイン順位
Nを“1”だけインクリメントし、ステップD602に
戻る。 〔D606〕 まず、プリアサイン順位がプリアサイン
逆順位RNの第RNプリアサイン順位楽音発生チャネル番号
PASS[RN]を楽音発生チャネル番号GNに設定する。つぎ
に、プリアサイン押鍵順位PNおよびプリアサイン逆順位
RNを“1”だけデクリメントしてステップD602に戻
る。 〔D607〕 プリアサイン順位が“0”からNより1
を減じた値までの第Nプリアサイン順位楽音発生チャネ
ル番号PASS[N] を対応する楽音発生チャネル番号GNのプ
リアサイナ発音量PLEV[GN]の小なる順に並べ換える。例
えばPASS[0] =1、PASS[1] =3、PASS[2] =5、・・
・、PLEV[1] =0080H、PLEV[3] =0040H、PL
EV[5] =0000H、・・・であってN=3である場合
には、PASS[0] =5、PASS[1]=3、PASS[2] =1とす
る。また、プリアサイナ割当て可能楽音発生チャネル数
PACNをプリアサイン順位Nに設定し、プリアサイン順位
設定ルーチンを終了してステップD7に進む。
【0078】エンベロープタスク(図19、図20) エンベロープタスクは、エンベロープタスクに対するタ
イマイベントが発生すると実行を開始し、各エンベロー
プチャネルのエンベロープレベルおよび発音量を順次に
更新するとともに、ノートステータスおよびエンベロー
プ生成パラメータに基づいて新たな目標値およびレート
を算出し、楽音発生回路26の楽音発生チャネルへの転
送を行う。各ステップE1〜E26での処理は以下の通
りである。 〔E1〕 エンベロープ管理マップおよびエフェクタ管
理マップをクリヤし、このエンベロープタスクで占有す
る変数等を初期値に設定するとともに、第5タスクタイ
マカウンタ値TCNE[5] を“4”に、第5タスク時間間隔
TCND[5] を“4”に設定する。さらにタスク管理マップ
におけるタスク番号“5:エンベロープタスク”のタイ
マ処理要求フラグを“1:要求有り”に設定する。 〔E2〕 要求元イベント値NSETを“1”に設定してイ
ベント待ちモニタコールを行う。エンベロープタスクタ
イマイベントが発生すると、次のステップE3に進む。
【0079】〔E3〕 タスク管理マップにおけるタス
ク番号“5:エンベロープタスク”の待ちイベント値を
“0”に、第1イベント発生フラグを“0”に設定する
とともに、エンベロープ処理対象番号ECTNを“0”に設
定する。またエフェクタ管理マップにおける各楽音発生
チャネル番号の出力係数群の総和の最大値を出力係数総
和最大値ETWMとする。 〔E4〕 タスクロックをかける。 〔E5〕 楽音発生チャネル管理マップにおけるエンベ
ロープ処理対象番号ECTNに対応する楽音発生チャネル番
号の急速減衰中フラグが“1:急速減衰中”であるか否
かを判断する。この急速減衰中フラグが“1”でない場
合にはステップE9に進み、“1”である場合にはこの
エンベロープタスクによるエンベロープ処理は不要なの
で次のステップE6に進む。 〔E6〕 タスクロックを解除する。 〔E7〕 エンベロープ処理対象番号ECTNが“15”未
満であるか否かを判断する。このエンベロープ処理対象
番号ECTNが“15”未満である場合には次のステップE
8に進み、“15”未満でない場合には、ステップE2
に戻る。 〔E8〕 エンベロープ処理対象番号ECTNを“1”だけ
インクリメントしてステップE4に戻る。
【0080】〔E9〕 楽音発生チャネル管理マップに
おけるエンベロープ処理対象番号ECTNに対応する楽音発
生チャネル番号のパート番号をエンベロープ処理対象パ
ート番号EPNMとする。 〔E10〕 パートマップにおけるエンベロープ処理対
象パート番号EPNMの持続音系フラグが“1”であるか否
かを判断する。この持続音系フラグが“1”でない場合
には次のステップE11に進み、“1”である場合には
ステップE20に進む。 〔E11〕 エンベロープ管理マップにおけるエンベロ
ープ処理対象番号ECTNに対応するエンベロープチャネル
番号の目標値が“0”であり、かつそのエンベロープレ
ベルが“0”であるか否かを判断する。この目標値が
“0”でかつエンベロープレベルが“0”である場合に
は発音を終了しているのでステップE19に進み、いず
れかが“0”でない場合には次のステップE12に進
む。 〔E12〕 エンベロープ管理マップにおけるエンベロ
ープ処理対象番号ECTNに対応するエンベロープチャネル
番号のエンベロープレベルとレートとを加算して新たな
エンベロープレベルおよびエンベロープレベルELENと
し、フェーズ番号を“1”だけインクリメントする。ま
たエンベロープ処理対象番号ECTNに対応するエンベロー
プレベルバッファにエンベロープレベルELENを書き込
む。
【0081】〔E13〕 楽音発生チャネル管理マップ
におけるエンベロープ処理対象番号ECTNに対応する楽音
発生チャネル番号のノートステータスが“1:ノートオ
ン”であるか否かを判断する。このノートステータスが
“1”でない場合には次のステップE14に進み、
“1”である場合にはステップE15に進む。 〔E14〕 ノートオフの発音状態に対応するエンベロ
ープ処理をする。すなわち、エンベロープ管理マップに
おけるエンベロープ処理対象番号ECTNに対応するエンベ
ロープチャネル番号の目標値およびレートをノートステ
ータスがノートオフであることおよびエンベロープ生成
パラメータ群に基づき演算して更新するとともに、目標
値およびレートを楽音発生回路26の対応する楽音発生
チャネルに転送する。また、処理を終了するとステップ
E16に進む。 〔E15〕 ノートオンの発音状態に対応するエンベロ
ープ処理をする。すなわちエンベロープ管理マップにお
けるエンベロープ処理対象番号ECTNに対応するエンベロ
ープチャネル番号の目標値およびレートをノートステー
タスがノートオンであることおよびエンベープ生成パラ
メータに基づき演算して更新するとともに、目標値およ
びレートを楽音発生回路26の対応する楽音発生チャネ
ルに転送する。また、処理を終了すると次のステップE
16に進む。
【0082】〔E16〕 エンベロープ管理マップにお
けるエンベロープ処理対象番号ECTNに対応するエンベロ
ープチャネル番号のフェーズ番号が、トランケート禁止
フェーズ番号を超えているか否かを判断する。このフェ
ーズ番号がトランケート禁止フェーズ番号を超えていな
い場合には、ステップE6に進み、発音量の更新をしな
い。フェーズ番号がトランケート禁止フェーズ番号を超
えている場合にはステップE17に進んで発音量の算出
を行う。 〔E17〕 楽音発生部の発音量を算出する。この処理
の内容は図21の減衰音系の発音量の算出ルーチンのフ
ローチャートを参照して後に詳しく説明する。 〔E18〕 楽音発生チャネル管理マップにおけるエン
ベロープ処理対象番号ECTNに対応する楽音発生チャネル
番号の発音量を更新し、ステップE6に進む。この処理
の内容は図22のフローチャートを参照して後に詳しく
説明する。 〔E19〕 発音量EVOLを“0”に設定する。またエン
ベロープ処理対象番号ECTNに対応するエンベロープレベ
ルバッファに“0”を書き込む。処理を終了するとステ
ップE18に進む。
【0083】〔E20〕 楽音発生チャネル管理マップ
におけるエンベロープ処理対象番号ECTNに対応する楽音
発生チャネル番号のノートステータスが“1”でなくか
つエンベロープ管理マップにおけるエンベロープ処理対
象番号ECTNに対応するエンベロープチャネル番号の目標
値が“0”でかつエンベロープレベルが“0”であるか
否かを判断する。このノートステータスが“1”でなく
かつ目標値が“0”でかつエンベロープレベルが“0”
である場合には発音を終了しているのでステップE19
に進み、ノートステータスが“1”でない、または目標
値が“0”でない、またはエンベロープレベルが“0”
でない場合には次のステップE21に進む。 〔E21〕 ステップE12と同様の処理をする。 〔E22〕 ステップE13におけると同様の判断をす
る。判断対象のノートステータスが“1”でない場合に
は次のステップE23に進み、“1”である場合にはス
テップE26に進む。
【0084】〔E23〕 ステップE14と同様の処理
をする。 〔E24〕 ステップE16と同様の判断をする。フェ
ーズ番号がトランケート禁止フェーズ番号を超えている
場合には次のステップE25に進み、超えていない場合
にはステップE6に進む。 〔E25〕 楽音発生部の発音量を算出する。この処理
の内容は図23のフローチャートを参照して後に詳しく
説明する。処理を終了するとステップE18に進む。 〔E26〕 ステップE15と同様の処理をする。ま
た、処理を終了するとステップE24に進む。
【0085】減衰音系の発音量の算出ルーチン(図2
1) ステップE17における減衰音系の発音量の算出ルーチ
ン(図21)においては減衰音系の楽音の楽音発生部に
おける発音量をノートステータス、エンベロープレベ
ル、レート、フェーズ番号に基づいて算出する。なお、
楽音発生チャネルがノートオンの発音状態である場合に
は、ノートステータスがノートオンの状態を最短押鍵フ
ェーズ番号までおよび押鍵継続フェーズ数の期間維持す
るものとする。各ステップE1701〜E1713まで
の処理は以下の通りである。 〔E1701〕 まず、最短押鍵フェーズ番号FPSNを
“100”に、押鍵継続フェーズ数FPCNを“50”に設
定する。ついでエンベープ管理マップにおけるエンベロ
ープ処理対象番号ECTNに対応するエンベロープチャネル
番号のレートをレートERTEとし、フェーズ番号をフェー
ズ番号FNOWとする。 〔E1702〕 レートERTEが“0”未満であるか否か
を判断する。このレートERTEが“0”未満である場合に
は次のステップE1703に進み、“0”未満でない場
合にはステップE1704に進む。
【0086】〔E1703〕 レートERTEの絶対値をレ
ートERTEとする。これは減衰中のレートが負の値である
ので、正の値に変換するための処理である。また、処理
を終了するとステップE1705に進む。 〔E1704〕 レートERTEを“1”に設定し、ステッ
プE1705に進む。 〔E1705〕 エンベロープレベルELENをレートERTE
で除算しその結果を発音継続フェーズ数FVCNとする。 〔E1706〕 ステップE13と同様の判断処理をす
る。判断対象のノートステータスが“1:ノートオン”
でない場合には次のステップE1707に進み、“1”
である場合にはステップE1711に進む。
【0087】〔E1707〕 発音継続フェーズ数FVCN
が“400”未満であるか否かを判断する。この発音継
続フェーズ数FVCNが“400”未満である場合には次の
ステップE1708に進み、“400”未満でない場合
にはステップE1709に進む。 〔E1708〕 まず、エンベロープレベルELENに発音
継続フェーズ数FVCNを乗算する。ついでその乗算結果を
“1600”で除算して、発音量EVOLとしてこのルーチ
ンを終了する。 〔E1709〕 押鍵継続フェーズ数FPCNを“400”
に設定する。 〔E1710〕 まず、エンベロープレベルELENからレ
ートERTEに押鍵継続フェーズ数FPCNを乗算した値を
“2”で除算した値を減算する。ついでその減算結果に
押鍵継続フェーズ数FPCNを乗算した値を“800”で除
算して、発音量EVOLとしてこのルーチンを終了する。
【0088】〔E1711〕 フェーズ番号FNOWが最短
押鍵フェーズ番号FPSNから押鍵継続フェーズ数FPCNを減
算した値未満であるか否かを判断する。このフェーズ番
号FNOWがその値未満である場合にはつぎのステップE1
712に進み、その値未満でない場合にはステップE1
713に進む。 〔E1712〕 最短押鍵フェーズ番号FPSNからフェー
ズ番号FNOWを減算した値を押鍵継続フェーズ数FPCNとす
る。 〔E1713〕 発音継続フェーズ数FVCNが押鍵継続フ
ェーズ数FPCN未満であるか否かを判断する。未満である
場合にはステップE1708に進み、未満でない場合に
はステップE1710に進む。
【0089】発音量の更新ルーチン (図22) ステップE18における発音量の更新ルーチン (図2
2) においては、効果付加部で音響効果を付加された楽
音の発音量および効果付加部に蓄積されている発音量を
算出して楽音発生チャネル管理マップに設定する。 〔E1801〕 まずエフェクタ管理マップにおけるエ
ンベロープ処理対象番号ECTNに対応する楽音発生チャネ
ル番号の出力係数群の総和を出力係数総和ETWTとし、最
大経過フェーズ数を最大経過フェーズ数EFMNとする。次
に出力係数総和ETWTに発音量EVOLを乗算したその値を
“2”で除算した値を総合発音量GVOLとする。さらに出
力係数総和ETWTからエフェクタ管理マップにおけるエン
ベロープ処理対象番号ECTNに対応する楽音発生チャネル
番号の出力係数群の原音の出力係数を減算する。さらに
エンベロープチャネル管理マップにおけるエンベロープ
処理対象番号ECTNに対応するエンベロープチャネル番号
のフェーズ番号をフェーズ番号FNOWとする。さらにエン
ベロープ処理対象番号ECTNに対応するエンベロープレベ
ルバッファの読出しポインタを書込みポインタの直後に
設定するとともに経過フェーズ数ELFNを“1”に設定す
る。
【0090】〔E1802〕、〔E1803〕 最大経
過フェーズ数EFMNがフェーズ番号FNOWを超えているか否
かを判断し、超えていない場合には最大経過フェーズ数
EFMNをフェーズ番号FNOWに設定する。 〔E1804〕 まずエンベロープ処理対象番号ECTNに
対応するエンベロープレベルバッファから読み出したエ
ンベロープレベルをエンベロープレベルELENとするとと
もに、読出しポインタをさらに後に設定して次回さらに
過去のエンベロープレベルを読み出す準備をする。次に
出力係数総和ETWTにエンベロープレベルELENを乗算した
その値を“1600”で除算した値を総合発音量GVOLに
加算する。 〔E1805〕 経過フェーズ数ELFNが最大経過フェー
ズ数EFMN未満であるか否かを判断する。未満である場合
には次のステップE1806に進み、未満でない場合に
はステップE1807に進む。
【0091】〔E1806〕 まず出力係数総和ETWTか
らエフェクタ管理マップにおけるエンベロープ処理対象
番号ECTNに対応する楽音発生チャネル番号の出力係数群
の効果音の経過フェーズ数が経過フェーズ数ELFNの出力
係数を減算する。次に経過フェーズ数ELFNを“1”だけ
インクリメントしてステップE1804に戻る。 〔E1807〕 まず総合発音量GVOLを出力係数総和最
大値ETWMで除算し総合発音量GVOLとする。次に楽音発生
チャネル管理マップにおけるエンベロープ処理対象番号
ECTNに対応する楽音発生チャネル番号の発音量を総合発
音量GVOLに、トランケート禁止フラグを“0”に更新す
る。処理を終了するとこのルーチンを終了してステップ
E6に進む。
【0092】持続音系の発音量の算出ルーチン(図2
3) ステップE25における持続音系の発音量の算出ルーチ
ン(図23)においては減衰音系の発音量の算出ルーチ
ンに準じた処理により持続音系の楽音の楽音発生部にお
ける発音量を算出する。各ステップE2501〜E25
12での処理は次の通りである。 〔E2501〕 ステップE1701と同様の処理をす
る。 〔E2502〕 ステップE1706と同様の判断処理
をする。判断対象のノートステータスが“1:ノートオ
ン”でない場合には次のステップE2503に進み、
“1”である場合にはステップE2510に進む。 〔E2503〕〜〔E2506〕 ステップ〔E170
2〕〜〔E1705〕と同様の処理をする。
【0093】〔E2507〕 ステップE1707と同
様の判断処理をする。判断対象の発音継続フェーズ数FV
CNが“400”未満である場合には次のステップE25
08に進み、“400”未満でない場合にはステップE
2509に進む。 〔E2508〕 まず、エンベロープレベルELENに発音
継続フェーズ数FVCNを乗算する。ついでその乗算結果を
“1600”で除算して、発音量EVOLとしてこのルーチ
ンを終了する。 〔E2509〕 まず、エンベロープレベルELENからレ
ートERTEに“200”を乗算した値を減算する。ついで
その減算結果を“2”で除算して、発音量EVOLとしてこ
のルーチンを終了する。 〔E2510〕 ステップE1711と同様の判断処理
をする。判断対象のフェーズ番号FNOWが最短押鍵フェー
ズ番号FPSNから押鍵継続フェーズ数FPCNを減算した値未
満である場合には次のステップE2511に進み、その
値未満でない場合にはステップE2512に進む。
【0094】〔E2511〕 まず、最短押鍵フェーズ
番号FPSNからフェーズ番号FNOWを減算した値を押鍵継続
フェーズ数FPCNとする。ついでその押鍵継続フェーズ数
FPCNにエンベロープレベルELENを乗算した値を“80
0”で除算して、発音量EVOLとする。このルーチンを終
了する。 〔E2512〕 押鍵継続フェーズ数FPCNにエンベロー
プレベルELENを乗算した値を“800”で除算して、発
音量EVOLとしてこのルーチンを終了する。
【0095】操作子データ受信タスク 操作子データ受信タスクは操作子データ受信イベントが
発生すると、操作子データをMIDI回路20から読み
込み、所定の領域に記憶する。 〔G1〕 MIDIチャネルマップおよびパートマップ
とこの操作子データ受信タスクで占有する変数等を初期
値に設定する。 〔G2〕 要求元イベント値NSETを“1”に設定すると
ともに、初期設定完了フラグを“1”に設定して、イベ
ント待ちモニタコールを行う。操作子データ受信イベン
トが発生すると、次のステップG3に進む。 〔G3〕 タスク管理マップにおけるタスク番号“6:
操作子データ受信タスク”の待ちイベント値を“0”
に、第1イベント発生フラグを“0”に設定する。
【0096】〔G4〕 MIDI回路から操作子データ
を読み込み、MIDIチャネルマップ、パートマップの
対応するデータを更新する。例えば音色番号に関するデ
ータは、MIDIチャネルマップにおいてそのデータに
含まれるMIDIチャネル番号に対応するMIDIチャ
ネル番号のパート番号を調べ、パートマップにおけるそ
のパート番号に対応するパート番号の音色番号をその音
色番号に関するデータに更新するとともに、音色番号に
対応したトランケート禁止フェーズ番号および持続音系
フラグをROM23より読み出して対応する領域に記憶
する。対応する処理を終了するとステップG2に戻る。
【0097】マルチタスキング処理 本実施例の電子楽器は各タスクの実行にあたりマルチタ
スキングを用いているが、以下にこのマルチタスキング
等に関する動作概要について説明する。 (1) 初期設定 電源を投入すると、モニタプログラムのリセットルーチ
ンZAによる処理後に(ステップZA1〜ZA3)、キ
ーデータ受信タスク(ルーチンA)、メインアサイナタ
スク(ルーチンB)、発音タスク(ルーチンC)、プリ
アサイナタスク(ルーチンD)、エンベロープタスク
(ルーチンE)および操作子データ受信タスク(ルーチ
ンG)の初期設定処理がタスク優先順位に従って順次に
行われる(ステップA1,A2、ステップB1,B2、
ステップC1,C2、ステップD1,D2、ステップE
1,E2、ステップG1,G2)。
【0098】(2) 受信ノートオンメッセージによる
発音処理 MIDIバスを介してノートオンメッセージを受信した
ことによりMIDI回路20から割込みがかかると、モ
ニタプログラムのキーデータ受信割込み処理ルーチンZ
Eが開始される。
【0099】(2の1) キーデータ受信割込み処理ル
ーチンZEでは、キーデータ受信イベント待ちの状態に
あるので(ステップZE1,ZE3)、タスク管理マッ
プにおけるタスク番号“1:キーデータ受信タスク”の
ステータスを“0:ラン”に設定する(ステップZE
5)。次いで、キーデータ受信タスクを実行して(ステ
ップA2〜A7)、演奏情報をMIDI回路から読み込
み、その演奏情報に基づいてノートマップを更新すると
ともに、ノートオンであればイベント発生モニタコール
を行う(ステップA7)。
【0100】(2の2) モニタプログラムのイベント
発生モニタコールルーチンZCにおいて、タスク管理マ
ップにおけるタスク番号“2:メインアサイナタスク”
の第1イベント発生フラグを“1”に設定するとともに
(ステップZC1)、ステータスを“1:レディ”に設
定する(ステップZC2,ZC3)。なお、キーデータ
受信タスクはタスク優先順位がメインアサイナタスクの
タスク優先順位より高いので、キーデータ受信タスクを
再び開始して(ステップZC4)、このキーデータ受信
タスクにおいてイベント待ちモニタコールを行う(ステ
ップA2)。
【0101】(2の3) モニタプログラムのイベント
待ちモニタコールルーチンZBにおいて、キーデータ受
信イベントが発生しているか否かを調べる(ステップZ
B1)。すると、次のキーデータ受信イベントはまだ発
生していないので、タスク管理マップにおけるタスク番
号“1:キーデータ受信タスク”のステータスを“2:
ウェイト”に設定して(ステップZB2)、タスク管理
マップを調べる(ステップZB3)。このタスク管理マ
ップを調べた結果、ステータスが“1:レディ”である
最優先タスクのタスク番号は“2:メインアサイナタス
ク”であるために、このタスク番号“2:メインアサイ
ナタスク”のステータスを“0:ラン”に設定して(ス
テップZB4)、メインアサイナタスクを実行させる
(ステップZB5)。このメインアサイナタスクにおい
ては、ノート番号NTNMなどを楽音発生チャネル管理マッ
プに書き込む(ステップB2〜B5)。次にイベント発
生モニタコールを行う(ステップB6)。
【0102】(2の4) モニタプログラムのイベント
発生モニタコールルーチンZCにおいて、タスク管理マ
ップにおけるタスク番号“3:発音タスク”の第2イベ
ント発生フラグを“1”に設定するとともに、ステータ
スを“1:レディ”に設定する。なお、メインアサイナ
タスクのタスク優先順位が発音タスクのタスク優先順位
よりも高いので、メインアサイナタスクを再び開始し
て、このメインアサイナタスクにおいて対象アサイン順
位を“1”だけインクリメントして次のアサイン順位に
更新し(ステップB7)、イベント待ちモニタコールを
行う(ステップB2)。
【0103】(2の5) モニタプログラムのイベント
待ちモニタコールルーチンZBにおいてアサイン要求イ
ベントが発生しているか否かを調べる。その結果、次の
アサイン要求イベントがまだ発生していないので、タス
ク管理マップにおけるタスク番号“2:メインアサイナ
タスク”のステータスを“2:ウェイト”に設定して、
タスク管理マップを調べる。タスク管理マップを調べた
結果、ステータスが“1:レディ”である最優先タスク
のタスク番号は“3:発音タスク”であるために、タス
ク番号“3:発音タスク”のステータスを“0:ラン”
に設定して、発音タスクを実行させる。この発音タスク
においては、楽音発生チャネル管理マップに書き込まれ
たノート番号NTNMなどに基づいて楽音発生に関する各種
パラメータを演算して設定し、発音の開始を指示する
(ステップC2〜C27)。次に、イベント待ちモニタ
コールを行う(ステップC2)。
【0104】(2の6) モニタプログラムのイベント
待ちモニタコールルーチンZBにおいて発音要求イベン
トが発生しているか否かを調べる。その結果、次の発音
要求イベントがまだ発生していないために、タスク管理
マップにおけるタスク番号“3:発音タスク”のステー
タスを“2:ウェイト”に設定して、タスク管理マップ
を調べる。タスク管理マップを調べた結果、全てのタス
ク番号のステータスが“2:ウェイト”である場合には
スリープする。
【0105】(3) プリアサイナタスク(ルーチン
D)は対応するタイマイベントが発生すると、楽音発生
チャネル管理マップの発音量に基づいてアサイン順位を
更新する(ステップD2〜D11)。次に、イベント待
ちモニタコールを行う(ステップD2)。
【0106】(4) エンベロープタスク(ルーチン
E)は対応するタイマイベントが発生すると、ノートス
テータス、楽音発生チャネル管理マップおよびエンベロ
ープ管理マップに基づいて楽音発生チャネル管理マップ
の発音量およびエンベロープ管理マップのエンベロープ
レベルなどを更新等する(ステップE2〜E26)。次
に、イベント待ちモニタコールを行う(ステップE
2)。
【0107】以上に説明したように本実施例の電子楽器
においては、新たな楽音を割り当てる楽音発生チャネル
を、楽音割当てのために急速減衰中の楽音発生チャネル
および発音開始から所定時間経過していない所謂アタッ
ク中の楽音発生チャネルを除いた楽音発生チャネルを選
定対象としてその中から選定している。この選定対象の
楽音発生チャネルについては、それらの発音量に基づい
て割当て順位を設定している。この発音量は発音量の演
算時点以降に楽音発生部で発生すると予測される楽音に
基づく発音量に、効果付加部に蓄積されている楽音に基
づく発音量を加算して求めている。その際、 発音量の演算時点以降に楽音発生部で発生すると予
測される楽音に基づく発音量は、エンベロープレベルお
よびレートなどに基づいて算出した楽音発生部の発音量
を効果付加部における音響効果の付加に対応して補正し
ている。 効果付加部に蓄積されている楽音に基づく発音量
は、発音量の演算時点以前のエンベロープレベルに基づ
いて演算している。
【0108】種々の変形態様 なお、楽音発生部の発音量は、特開平1−169496
号公報にて提案した各種方法などによって算出してもよ
い。例えば、持続音系の楽音の発音量の処理ルーチンの
ステップE2512におけるノートオンの発音状態の発
音量を所定期間シミュレートしたり、あるいは次のよう
にして算出する。 ROM23に音色、音高、ベロシティ等に対応して
各フェーズ番号における発音量をあらかじめ記憶してお
く。 対応する音色、音高、ベロシティ等における所定期
間の発音量の総和を発音量とする。
【0109】また、ノートオンの発音状態の楽音発生チ
ャネルについては、処理の簡略化のため、その発音量を
ノートオンの発音状態の期間についてのみ算出したが、
より正確な発音量を求めるためには、ノートオフ後の発
音量もノートオンの発音状態の処理に準じて算出して、
それをオートオンの発音状態の期間について求めた発音
量に加算するようにしてもよい。また、この発音量を、
疑似エンベロープレベル、あるいは発音される楽音信号
の振幅レベルから検出したエンベロープレベル等に基づ
いて算出してもよい。また実施例では、発音を終了する
までの発音量を算出したが、エンベロープレベルが所定
レベルになるまでの発音量を算出するようにしてもよ
く、その所定レベルを音色、音高に応じて設定してもよ
い。
【0110】また、発音量の算出にあたってエンベロー
プレベルによる重みづけをしてもよい。例えば、ステッ
プE17、E25、E1804においてエンベロープレ
ベルに応じて係数を乗じる。係数としてはエンベロープ
レベルELENが“4000H”未満である場合には“1/
4”、エンベロープレベルELENが“4000H”から
“8000H”未満である場合には“1/2”、エンベ
ロープレベルELENが“8000H”から“C000H”
未満である場合には“3/4”、エンベロープレベルEL
ENが“C000H”以上である場合には“1”とする。
【0111】また、効果付加部における音響効果の付加
に対応して楽音発生部の発音量を補正する処理を簡略化
してもよい。例えば効果付加態様(効果の種類、効果の
かかり具合、エフェクタ制御パラメータなど、またはそ
れらの適宜の組合せ)に応じてその効果を付加した場合
の補正と同程度の補正がなされる補正係数をあらかじめ
設定記憶しておき、効果付加態様に応じてそれに対応す
る補正係数を楽音発生部の発音量に乗算して、補正を行
う。
【0112】また、発音量の算出および/または比較に
際して、演奏表現上の有用性の高い楽音の発音が有用性
の低い楽音よりも優先的に継続されるように、発音量を
楽音の有用性に応じて補正するようにしてもよい。例え
ば、楽音への効果のかかり具合に基づきその楽音の有用
性が変化する場合には、この効果のかかり具合に基づく
楽音の有用性の変化に対応した補正係数をあらかじめ設
定記憶しておき、発音量の算出に際しては、その楽音へ
の効果のかかり具合に対応する補正係数を実施例におい
て算出した発音量に乗算する。この場合、楽音の有用性
を変化させるパラメータとしては、上述の効果のかかり
具合の他に、効果付加態様、音色、音高など、あるいは
それらの適宜の組合せを用いてもよい。
【0113】また、次のような楽音を有用性の高い楽音
として発音量が大きくなるように補正するとよい。すな
わち、通奏低音的な音となる音高または音域の楽音、メ
ロディ部の最高音、ソロとなる音色の楽音、自動演奏装
置からの演奏情報と鍵盤からの演奏情報などを併せて演
奏する場合におけるその演奏で重視する演奏情報に基づ
く楽音(例えば鍵盤で使用しているパートの楽音)、楽
音が部分音など複数の音で構成される場合におけるそれ
らのうちの主要な音、あるいはノートステータスがオン
である楽音やソステヌートステータスがオンである楽音
をより強調したい場合などにおけるそれら強調したい楽
音などを有用性の高い楽音としてその発音量が大きくな
るように補正する。
【0114】また、いわゆる連打処理を施した場合に
は、連打関係にある楽音発生チャネルのアサイン順位を
早くしても良い。例えば、プリアサイナタスクのステッ
プD5の処理を終えると、同一パートで同一音高の楽音
を発生している連打関係にある楽音発生チャネルを検出
し、楽音発生チャネル番号GNのプリアサイナ発音量PLEV
[GN]を次のように補正してから、ステップD6に進むよ
うにする。すなわち、ノートステータスがノートオンの
楽音発生チャネルと連打関係にあるノートステータスが
ノートオフの楽音発生チャネルについては、その楽音発
生チャネル番号GNのプリアサイナ発音量PLEV[GN]をその
値の1/10に変更する補正を行う。また連打関係にあ
る全ての楽音発生チャネルのノートステータスがノート
オフである場合には、最も大きい楽音発生チャネル番号
GNのプリアサイナ発音量PLEV[GN]を除く連打関係にある
楽音発生チャネルについて、それらの楽音発生チャネル
番号GNのプリアサイナ発音量PLEV[GN]をその値の1/1
0に変更する補正を行う。
【0115】また、特開昭64−42695号公報に開
示されている協和度に応じた発音量の補正を連打処理に
準じて行ってもよい。また特公昭62−52319号公
報に開示されている派生音を押鍵音に優先する処理に換
えて、派生音の有用性に応じて派生音の発音量を補正
(例えば係数1/10を乗算)するなどして派生音と押
鍵音との評価のバランスをとるようにしてもよい。
【0116】また、新たな楽音の割当てに際して、割当
て先の楽音発生チャネルが発音中(および/または効果
付加中)である場合には、その楽音発生チャネルに新た
な楽音を割り当てるのとその楽音発生チャネルで従前の
発音を継続するのとで、どちらの方が演奏表現上の違和
感が少ないかをあらかじめ判断して、従前の発音を継続
するほうが違和感が少ない場合には、その楽音発生チャ
ネルへの新たな楽音の割当てを行わないようにしてもよ
い。これを行うためには、例えばメインアサイナタスク
のステップB5の処理に先立って次の処理をする。まず
新たな楽音の発音量(効果付加部で付加される発音量を
含めた)を実施例に準じて算出する。次いで、新たな楽
音の発音量と割当て先の楽音発生チャネルの従前の発音
量とを比較する。新たな楽音の発音量が大きい場合には
ステップB5に進み、大きくない場合にはステップB2
に戻る。
【0117】なお新たな発音を優先するように、新たな
楽音の発音量に1よりも大なる値の発音優先係数を乗算
するなどの補正をしてもよい。反対に、新たな発音を抑
制する時には、新たな楽音の発音量に1よりも小なる値
の発音抑制係数を乗算するなどの補正をしてもよい。ま
た演奏表現上の有用性などに基づいて各発音量を補正す
るとよい。
【0118】また、割当て対象の楽音発生チャネルが新
たな楽音と連打関係にあるなどして新たに割り当てる楽
音のエフェクタ制御パラメータが割当て対象の楽音発生
チャネルに設定されているエフェクタ制御パラメータと
同じである場合には、次のようにしてもよい。急速減衰
処理に際しては楽音発生部のみを急速減衰する。すなわ
ち楽音発生部のエンベロープを急速に減衰し、急速減衰
終了FIFOにその楽音発生チャネル番号を積む。また
発音の開始に際しては楽音発生部に対してのみ処理す
る。
【0119】トランケート禁止フェーズ番号をアタック
期間が終了するフェーズ番号としたが、発音開始直後の
演奏表現に大きな影響を与える期間が更に長いなどする
場合には、その期間に応じてトランケート禁止フェーズ
番号を変更しても良い。例えばディケイ期間を含めるよ
うにしてもよい。
【0120】発音量の算出におけるノートオンの発音状
態の発音継続フェーズ数FVCNは、ノートオンの発音状態
が持続する場合には、次のように推移する。すなわち発
音継続フェーズ数FVCNは、最短押鍵フェーズ番号FPSNか
らフェーズの進行と共に減少し、押鍵継続フェーズ数FP
CNに達するとその値を維持する。この推移に際しフェー
ズの進行に応じて減少量を変更するようにしてもよい。
この発音量の算出における最短押鍵フェーズ番号FPSNと
押鍵継続フェーズ数FPCNは、演奏のテンポ、曲想等に応
じて適宜設定し変更するようにしてもよい。
【0121】また、発音量に基づく並べ換え処理を簡略
化するために、その並べ換え処理を行うに先立って、発
音を終了している楽音発生チャネルをアサイン順位の小
なる順位に設定するようにしてもよい。例えば、プリア
サイン順位設定ルーチンのステップD602〜D606
の処理に先立って、発音を終了している楽音発生チャネ
ルの楽音発生チャネル番号を第Nプリアサイン順位楽音
発生チャネル番号PASS[N] に順次設定する。
【0122】また、発音量に基づくアサイン順位の設定
処理を簡略化するために、発音量が所定値以下の楽音発
生チャネルについては、そのアサイン順位を、押鍵順、
楽音発生チャネル番号順、所定値以下になった順などで
設定するようにしてもよい。あるいは効果付加部に蓄積
されている発音量のみに基づいて設定するようにしても
よい。
【0123】また、処理を簡略化するため、アサイン順
位の設定を、プリアサイナ発音レベルにのみ基づいて行
うなどしてもよい。例えばプリアサイン順位設定ルーチ
ンでは、プリアサイナ発音レベルPLEV[GN]の小なる順に
第Nプリアサイン順位楽音発生チャネル番号PASS[N] を
設定する処理のみを行う。この場合、急速減衰中の楽音
発生チャネルの選定順位としては押鍵順が望ましいの
で、急速減衰中の楽音発生チャネルの発音量として“F
FF0H”に押鍵順位を加算した値にするとよい。
【0124】変形例1 前述の実施例のように楽音発生チャネル選定の評価基準
として発音量を用いる代わりに、評価基準として押鍵順
を用いる場合の具体例について以下に説明する。この場
合、効果付加部で付加される効果が遅延時間に換算され
て評価基準に加えられることにより、楽音発生チャネル
の選定にあたって効果が反映されるようになる。前述の
実施例との相違点について述べると、発音タスクのステ
ップC18において、発音量を、効果付加部における遅
延時間に相当するフェーズ数に“8000H”を加算し
た値に設定する。エンベロープタスクにおいては、急速
減衰中の楽音発生チャネルを除いては、発音量が“0”
になるまで発音量を“1”ずつデクリメントする。ここ
で効果付加部における遅延時間に相当するフェーズ数
は、次のようにして算出する。出力係数を最大経過フェ
ーズ数から経過フェーズ数の小なる(言い換えれば遅延
時間の短い)向きに順次累算し、累算した値が0.3を
超える経過フェーズ数を、求めるフェーズ数とする。こ
のようにして算出したフェーズ数以降において出力する
楽音のエンベロープレベルの総和は、入力する楽音のエ
ンベロープレベルの約30%となる。なお、この求めん
とするフェーズ数を、出力係数が0.2以上の出力係数
を有する経過フェーズ数の最大値とするなどして、その
算出処理を簡略化してもよい。
【0125】この変形例1では、発音を開始してからの
経過時間に効果付加部での遅延時間を加算した値を評価
基準とし、それに基づいて楽音発生チャネルを選定する
ようにしたが、これに限らず、離鍵順、発音終了順、発
音残り時間などに基づいて楽音発生チャネルを選定する
処理においても、このような効果付加部での遅延時間に
基づいてそれらの評価基準内容を変更するようにしても
よい。
【0126】変形例2 減衰音系の楽音を発生する電子楽器において評価基準と
してエンベロープレベルを用いる場合について以下に説
明する。すなわち、エンベロープレベルをエンベロープ
レベルバッファから順次に読み出し、その読み出したエ
ンベロープレベルにそれと対応する出力係数を乗算した
値を累算し、その累算値を評価のための発音量とするこ
とで、効果付加部から出力する楽音についてのエンベロ
ープレベルを評価基準の内容とする。具体的には書込み
ポインタの直後から読み出したエンベロープレベルに原
音の出力係数を乗算した値に、さらにその後で読み出し
たエンベロープレベルに経過フェーズ数が“1”の出力
係数を乗算した値を加算し、以下この処理を繰り返す。
なお、この算出処理を、出力係数が所定値以上の経過フ
ェーズについてのみに限定するなどして、簡略化しても
よい。また、エンベロープレベルにノートオンの発音状
態であることなどに基づく重み付けをしてもよい。
【0127】この変形例2を上述の減衰音系に換えて持
続音系の楽音を発生する電子楽器に適用する場合には、
ノートオフの発音状態の楽音については前記のようにし
て発音量を算出し、ノートオンの発音状態の楽音につい
ては、エンベロープレベルに出力係数の総和および補正
係数(1より大なる値)を乗算して発音量を算出すると
よい。
【0128】本発明は、上述の各実施例の楽音発生回路
において、楽音発生チャネルを複数の楽音発生部と単一
の効果付加部およびミュート部で構成し、単一の楽音を
複数の楽音発生部で発生する楽音(構成音)で形成し、
単一の効果付加部で音響効果を付加し、発音等の処理を
楽音を単位として行う場合にも、適用することができ
る。例えば、楽音発生部の発音量は、同一楽音を構成す
る各構成音の楽音発生部の発音量の総和、または各構成
音の重要度に応じて重み付けをした楽音発生部の発音量
の総和、または楽音発生部の最大発音量、または重要度
の高い構成音の楽音発生部の発音量とし、効果付加部に
蓄積されている発音量はエンベロープレベルバッファに
書き込んだ各構成音のエンベロープレベルの総和等に基
づいて算出し、これらを足し合わせて評価基準とすれば
よい。この場合、音色設定の組合せ等に応じて楽音発生
部と効果付加部の組合せを変更してもよい。
【0129】また、単一の楽音に複数の音響効果を複数
の効果付加部で付加してもよい。この場合には、楽音発
生部の発音量に、それぞれの効果付加部での効果の付加
を反映させればよい。
【0130】また、このような構成とした場合などにお
いて、新たな楽音に効果を付加しない場合には、効果付
加部をバイパスするなどして実質的に使用しなかった
り、あるいは従前に使用していた効果付加部を新たな楽
音で使用しなかったりすることもある。この場合、その
使用しない効果付加部には楽音が残留することになる
が、このような新たな楽音において使用しない効果付加
部に残留する楽音をそのまま出力する方が望ましい場合
には、新たな楽音において使用しない効果付加部とそれ
に対になっている楽音発生部との接続を断ち、その効果
付加部への入力を遮断するのみとし、その効果付加部か
らの出力は継続するようにするとよい。
【0131】また、全ての楽音に共通の効果を付加する
ように、楽音発生チャネルの出力を共通の効果付加用の
効果付加装置を経由して出力するようにしてもよい。ま
た、複数のパートに共通の効果を付加するように、それ
らのパートの楽音を割り当てられた楽音発生チャネルの
出力のみを、共通の効果付加用の効果付加装置を経由し
て出力するようにしてもよい。なお、追加して付加され
る効果に対応して発音量などをさらに補正するなどして
もよい。
【0132】また、パートによる発音態様の差異を考慮
して本出願人に係る特開昭64−19393号公報にて
提案した方法に基づきリザーブ処理をするとともに、リ
ザーブ数を超えている楽音発生チャネルの選定に際して
は、本発明を適用するようにしてもよい。
【0133】効果付加部において付加する効果を、特開
平2−110500号公報にて提案しているように、ノ
ートオフの発音状態になると変更するなどしてもよい。
なお、付加する効果を変更する場合には、それに対応し
て出力係数なども変更するとよい。
【0134】前述の実施例では、効果付加部においてリ
バーブ効果を付加する場合について説明したが、本発明
はこれに限られるものではなく、他の音響効果を付加す
る場合、あるいは複数の音響効果を組み合わせて付加す
る場合にも適用できる。
【0135】本発明は、楽音発生回路を次のように構成
する場合にも適用できる。すなわち、楽音発生回路26
が、複数個の楽音発生チャネルと複数個の効果付加チャ
ネルとこれらを接続交換する楽音信号交換装置とで構成
される。楽音発生チャネルは楽音発生パラメータに基づ
く楽音を発生するとともに、目標値およびレートに基づ
いて滑らかなエンベロープを生成して楽音の振幅を制御
する。効果付加チャネルは接続される1以上の楽音発生
チャネルからの楽音に音響効果を付加する。なお、効果
付加チャネルのエフェクタ制御パラメータは音色などに
応じて固定的に設定される。楽音信号交換装置は、割当
てパラメータとしての楽音発生チャネル番号と効果付加
チャネル番号に基づいて、楽音発生チャネルと効果付加
チャネルとを接続し、楽音発生チャネルで発生した楽音
を効果付加チャネルに伝送する。なお楽音信号交換装置
における楽音発生チャネルと効果付加チャネルとの接続
等の交換に関する技術は通信の分野において公知の交換
技術を応用する。
【0136】この構成においては、楽音発生の開始の指
示を受けると、楽音信号交換装置は、割当てパラメータ
としての楽音発生チャネル番号に対応する楽音発生チャ
ネルについて、それに接続されている効果付加チャネル
との従前の接続を解除した後、その楽音発生チャネルに
対応する新たな効果付加チャネルをその楽音発生チャネ
ルに接続する。そしてその楽音発生チャネルは楽音信号
およびエンベロープの生成を開始する。楽音発生チャネ
ルへの急速減衰の指示を受けると、楽音発生チャネルは
エンベロープレベルを所定の急速減衰レートに従って減
衰し、エンベロープレベルが“0”になると、楽音発生
回路26に設けられている急速減衰終了FIFOに楽音
発生チャネル番号を積む。楽音発生チャネルの発音量は
実施例等に準じて接続されている効果付加チャネルの音
響効果の付加を考慮して算出する。なお効果付加チャネ
ルに蓄積されている発音量は考慮しなくて良い。楽音発
生チャネルを発音量に基づいて選定するとともに、効果
付加チャネルを音色等に基づいて選定する。
【0137】また上述の構成などを次のように変更して
効果付加チャネルのエフェクタ制御パラメータを楽音に
応じて設定してもよい。すなわち、効果付加チャネルは
効果付加部とミュート部で構成され、効果付加部は楽音
にエフェクタ制御パラメータに基づく音響効果を付加
し、ミュート部は楽音信号の通過量を制御し出力する。
楽音発生の開始の指示を受けると、効果付加チャネルの
ミュート部は通過量を最大通過量とする。楽音発生チャ
ネルへの急速減衰の指示を受けると、楽音発生チャネル
はエンベロープレベルを所定の急速減衰レートに従って
減衰し、エンベロープレベルが“0”になると、楽音発
生回路26に設けられている急速減衰終了1FIFOに
楽音発生チャネル番号を積む。効果付加チャネルへの急
速減衰の指示を受けると、効果付加チャネルのミュート
部は、まず所定形状の急速減衰エンベロープを生成し、
その急速減衰エンベロープに従って通過量を減少させ、
最終的には“0”とする。この急速減衰エンベロープレ
ベルが“0”になると、効果付加部を効果付加部の内部
に残留する楽音信号のクリアを指示し、効果付加部をク
リアする。クリアに要する時間が経過すると、楽音発生
回路26に設けられている急速減衰終了2FIFOに効
果付加チャネル番号を積む。発音タスクにおいては、楽
音発生チャネルの急速減衰の終了を急速減衰終了1FI
FOに積まれた楽音発生チャネル番号で、効果付加チャ
ネルの急速減衰の終了を急速減衰終了2FIFOに積ま
れた効果付加チャネル番号で判断し処理する。楽音発生
チャネルの発音量は、実施例等に準じて接続されている
効果付加チャネルの音響効果の付加を考慮して算出す
る。なお効果付加チャネルに蓄積されている発音量は考
慮しなくても良い。効果付加チャネルの発音量は効果付
加チャネルに蓄積されている発音量に基づいて算出す
る。
【0138】楽音発生チャネルを楽音発生チャネルの発
音量に基づいて選定するとともに、効果付加チャネルも
効果付加チャネルの発音量に基づいて選定する。なお楽
音発生チャネルの数が効果付加チャネル数より多い場合
には、発音している楽音発生チャネルに接続されている
効果付加チャネルを新たな楽音の効果の付加に使用する
ために、その効果付加チャネルと従前の楽音発生チャネ
ルとの接続を解除することがあるが、この場合には、接
続が解除された楽音発生チャネルは発音を終了している
とみなせるので、楽音発生チャネルの選定に際しては、
それに接続されている効果付加チャネルの選定状態も考
慮して選定を行うとよい。また効果付加チャネル数が楽
音発生チャネル数より多い場合には、発音している楽音
発生チャネルに接続されている効果付加チャネルをその
楽音発生チャネルよりも先に選定するのは好ましくない
ので、効果付加チャネルの選定に際しては、それに接続
されている楽音発生チャネルの選定状態も考慮して選定
を行うとよい。
【0139】また前述の実施例は、アサイン順位を予め
設定して、その設定したアサイン順位に従って選定する
いわゆるプリアサイン処理によったが、これに換えて、
ノートオン情報を受信する度に新たな楽音を割り当てる
楽音発生チャネルを選定する一般的な処理によっても良
い。なお、この場合、まず発音および効果付加を終了し
ている楽音発生チャネルを選定し、そのような楽音発生
チャネルがなければ実施例などの方法により楽音発生チ
ャネルを選定するようにしてもよい。あるいは発音およ
び効果付加を終了している楽音発生チャネルに換えて、
発音を終了している楽音発生チャネル、あるいは発音量
が所定値以下の楽音発生チャネルを選定するようにして
もよい。
【0140】また本発明においては、アサイン順位の設
定を特開昭64−19393号公報に示されている技術
のようにリンクの設定によって行ってもよい。また上述
の実施例ではマルチティンバ電子楽器について説明した
が、単一の音色の楽音を発音する電子楽器にも本発明を
適用できることは言うまでもない。また上述の実施例で
はマルチタスク処理によったが、シングルタスク処理に
より実施しても良い。鍵盤部を有しない電子楽器につい
て説明したが、鍵盤部を付した電子鍵盤楽器、あるいは
自動リズムなどにも本発明を適用できることは言うまで
もない。
【0141】
【発明の効果】以上に説明したように、本発明によれ
ば、楽音に効果付加を行う電子楽器において入力楽音情
報に割り当てる楽音発生チャネルを選定するにあたり、
残響等の効果が突然と消されてしまったり、また残響等
がより大きい楽音発生チャネルが消されてしまったりす
るなどして演奏表現上の違和感を生じさせる、といった
ことがなくなり、効果付加された楽音に対しても合理的
な楽音発生チャネルの選定が行えるようになる。
【図面の簡単な説明】
【図1】本発明の一実施例としてのアサイナが適用され
るマルチティンバ電子楽器の全体構成図である。
【図2】MIDIチャネルマップを示す図である。
【図3】パートマップを示す図である。
【図4】エンベロープ管理マップを示す図である。
【図5】エフェクタ管理マップを示す図である。
【図6】タスク管理マップを示す図である。
【図7】楽音発生チャネル管理マップを示す図である。
【図8】リセットルーチンを示す流れ図である。
【図9】イベント待ちモニタコールルーチンを示す流れ
図である。
【図10】イベント発生モニタコールルーチンを示す流
れ図である。
【図11】タイマ割込み処理ルーチンを示す流れ図であ
る。
【図12】キーデータ受信割込み処理ルーチンを示す流
れ図である。
【図13】キーデータ受信タスクを示す流れ図である。
【図14】メインアサイナタスクを示す流れ図である。
【図15】発音タスク(1/2)を示す流れ図である。
【図16】発音タスク(2/2)を示す流れ図である。
【図17】プリアサイナタスクを示す流れ図である。
【図18】プリアサイン順位設定ルーチンを示す流れ図
である。
【図19】エンベロープタスク(1/2)を示す流れ図
である。
【図20】エンベロープタスク(2/2)を示す流れ図
である。
【図21】減衰音系の発音量の算出ルーチンを示す流れ
図である。
【図22】発音量の更新ルーチンを示す流れ図である。
【図23】持続音系の発音量の算出ルーチンを示す流れ
図である。
【符号の説明】
20 MIDI回路 22 中央処理装置(CPU) 23 ROM(読出し専用メモリ) 24 RAM(ランダムアクセスメモリ) 26 楽音発生回路
───────────────────────────────────────────────────── フロントページの続き (51)Int.Cl.5 識別記号 庁内整理番号 FI 技術表示箇所 G10K 15/12

Claims (5)

    【特許請求の範囲】
  1. 【請求項1】 複数の楽音発生チャネルを有しそれら楽
    音発生チャネルの各々は入力される楽音情報に基づき楽
    音信号を発生する楽音発生部とその楽音発生部の楽音信
    号に効果を付加する効果付加部との固定的な組合せで構
    成された電子楽器に対して、入力される楽音情報に割り
    当てる楽音発生チャネルの選定を行う電子楽器のアサイ
    ナであって、 各楽音発生チャネルの楽音発生部の状態に基づいて楽音
    発生チャネル選定のための評価量を各楽音発生部につい
    て演算する演算手段と、 該演算手段で演算された各楽音発生部の評価量に対して
    その楽音発生部に対応した効果付加部で付与する効果に
    対応してその評価量を補正する補正手段と、 該補正された評価量に基づいて楽音発生チャネルの選定
    を行う選定手段とを具備した電子楽器のアサイナ。
  2. 【請求項2】 該補正手段は、効果付加をしない楽音発
    生チャネルについては演算手段の評価量をそのまま補正
    された評価量とするように構成された請求項1記載の電
    子楽器のアサイナ。
  3. 【請求項3】 該演算手段により演算される評価量は、
    楽音発生部の発音量であり、該補正手段は効果付加部で
    付加される遅延発音量を該楽音発生部の発音量に付加し
    て補正された評価量を演算するものである請求項1また
    は2記載の電子楽器のアサイナ。
  4. 【請求項4】 該演算手段により演算される評価量は押
    鍵からの時間、離鍵からの時間、または楽音発生部の発
    音終了までの時間であり、該補正手段は効果付加部で付
    加された効果に対応した遅延時間を上記評価量としての
    時間に付加して補正された評価量を演算するものである
    請求項1〜3の何れかに記載の電子楽器のアサイナ。
  5. 【請求項5】 各楽音発生チャネルにおいて楽音発生部
    と効果付加部が1対1に固定的に対となっていることに
    かえて、複数の構成音により構成される一つの楽音に対
    しては、各構成音が複数の楽音発生部に対して割り当て
    られ更にこれら複数の楽音発生部に対して1以上の効果
    付加部が対となって割り当てられるよう切替えが行われ
    るよう構成された請求項1〜4の何れかに記載の電子楽
    器のアサイナ。
JP4108917A 1991-07-04 1992-04-01 電子楽器のアサイナ Pending JPH05158477A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP4108917A JPH05158477A (ja) 1991-07-04 1992-04-01 電子楽器のアサイナ

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP3-190703 1991-07-04
JP19070391 1991-07-04
JP4108917A JPH05158477A (ja) 1991-07-04 1992-04-01 電子楽器のアサイナ

Publications (1)

Publication Number Publication Date
JPH05158477A true JPH05158477A (ja) 1993-06-25

Family

ID=26448740

Family Applications (1)

Application Number Title Priority Date Filing Date
JP4108917A Pending JPH05158477A (ja) 1991-07-04 1992-04-01 電子楽器のアサイナ

Country Status (1)

Country Link
JP (1) JPH05158477A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012108295A (ja) * 2010-11-17 2012-06-07 Yamaha Corp 楽音生成装置及びプログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012108295A (ja) * 2010-11-17 2012-06-07 Yamaha Corp 楽音生成装置及びプログラム

Similar Documents

Publication Publication Date Title
JP3372124B2 (ja) 電子楽器
JP2002311957A (ja) 共鳴装置、共鳴方法及び共鳴処理のためのコンピュータプログラム
JP2500489B2 (ja) 電子楽器
JP3694172B2 (ja) 残響共鳴装置及び残響共鳴方法
JP3117482B2 (ja) 電子楽器のアサイナ
JPH05158477A (ja) 電子楽器のアサイナ
US5280129A (en) Assigning device which assigns new musical tones to tone-generating channels based upon a successive strike relation among the channels
JP4258991B2 (ja) 楽音発生装置及び楽音発生処理のプログラム
JP2525853B2 (ja) 電子楽器の連打処理装置
JPH05150784A (ja) 電子楽器のアサイナ
JPH0619474A (ja) 電子楽器のアサイナ
JPH056181A (ja) 電子楽器の連打処理装置
JP3732606B2 (ja) 電子楽器
JPH05150783A (ja) 電子楽器のアサイナ
JP3235160B2 (ja) 楽音制御装置
JP3530600B2 (ja) 楽音信号の周波数特性制御装置及び周波数特性制御方法
JPH05134668A (ja) マルチテインバ電子楽器のアサイナ
JPH04218098A (ja) マルチティンバ電子楽器のアサイナ
JPH052392A (ja) 電子楽器の割当装置
JP2715795B2 (ja) 発音割当手段を有する楽音合成装置
JPH0535271A (ja) 電子楽器のアサイナ
JP3646611B2 (ja) 楽音発生装置
JP3067145B2 (ja) エンベロープ発生制御装置、放音形態制御装置、エンベロープ発生制御方法及び放音形態制御方法
JP4329276B2 (ja) 楽音発生装置及び楽音発生処理のプログラム
JP3048526B2 (ja) 電子楽器