(57)【特許請求の範囲】
【請求項１】
メモリと、
前記メモリから読み出されたデータに基づき楽音波形を発生する楽音発生部と、前記メモリから読み出されたデータに基づき前記楽音発生部を制御するプロセッサと、を含む複数の処理部と、
前記メモリと前記複数の処理部とを接続するバスと、
前記複数の処理部夫々のアクセス権の優先順位を設定する優先順位設定レジスタを有し、前記複数の処理部からの前記メモリに対するアクセス要求が重なった場合に、前記優先順位設定レジスタに設定されている前記優先順位に従って、前記複数の処理部の前記メモリに対するアクセスを調停するバスアービタと、
前記複数の処理部のうちの前記楽音発生部の前記優先順位が最も高くなるように前記優先順位設定レジスタの前記優先順位を設定した後、前記バスに対する前記複数の処理部のトラフィックが定められている上限値を越えた場合に、前記優先順位設定レジスタに設定されている前記優先順位を変更することなく前記楽音発生部からの前記メモリに対するアクセス要求を低減させる第１処理を含む処理の実行を制御する制御部と、
を備えた楽音発生装置。
【請求項２】
前記制御部は、前記複数の処理部のうちの前記楽音発生部の前記優先順位が最も高くなるように前記優先順位設定レジスタの前記優先順位を設定した後、前記トラフィックが定められている上限値を越えたときに、前記楽音発生部の前記優先順位を下げることにより前記トラフィックを下げることができると判断された場合には、前記楽音発生部の優先順位を下げるように前記優先順位設定レジスタの前記優先順位を変更する第２処理を実行し、前記楽音発生部の前記優先順位を下げることにより前記トラフィックを下げることができないと判断された場合には、前記楽音発生部からの前記メモリに対するアクセス要求を低減させる前記第１処理を実行する、
請求項１に記載の楽音発生装置。
【請求項３】
前記制御部は、前記複数の処理部それぞれのトラフィック上限値を設定する上限値設定レジスタを有し、前記複数の処理部のうちのいずれかのトラフィックが前記上限値を越えた場合に、前記複数の処理部のうちの最も高い前記アクセス権の優先順位が付与されている処理部のトラフィックを減少させる前記第１処理を実行する
請求項１または２に記載の楽音発生装置。
【請求項４】
前記複数の処理部は、更に、
前記メモリから読み出されたデータに基づき前記発生された楽音波形を処理する波形処理部を含み、
前記制御部は、前記楽音発生部、前記プロセッサ、前記波形処理部の順に高い優先順位が付与されるように前記優先順位設定レジスタの前記優先順位を設定した後、前記トラフィックが定められている上限値を越えたか否かの判断により前記第１処理の実行を制御する、
請求項１乃至３のいずれか一項に記載の楽音発生装置。
【請求項５】
前記制御部は、
前記バスに対する前記複数の処理部のトラフィックをモニタするとともに、前記トラフィックが予め定められた上限値を越えた場合に、前記複数の処理部のうちの最も高い前記アクセス権の優先順位が付与されている処理部のトラフィックを減少させる制御信号を発生するトラフィックモニタと、
前記制御信号の発生に応答して、トラフィックを減少させるように前記楽音発生部を制御するＣＰＵと、
を含む、請求項１乃至４のいずれか一項に記載の楽音発生装置。
【請求項６】
前記制御部は、前記第１処理として、同時に発音している楽音の数を減らすように前記楽音発生部を制御する請求項１乃至５のいずれか一項に記載の楽音発生装置。
【請求項７】
前記バスアービタはさらに、前記複数の処理部のいずれかひとつの処理部に前記メモリに対するアクセス権が付与されている状態で、当該処理部とは別の処理部から前記メモリに対するアクセス権を要求された場合、予め設定された優先順位に従って、前記メモリに対するアクセス権を前記複数の処理部のいずれかに付与するように前記バスを制御する、請求項１乃至６のいずれか一項に記載の楽音発生装置。
【請求項８】
メモリと、前記メモリから読み出されたデータに基づき楽音波形を発生する楽音発生部と、前記メモリから読み出されたデータに基づき前記楽音発生部を制御するプロセッサと、を含む複数の処理部と、
前記メモリと前記複数の処理部とを接続するバスと、を有する処理装置で用いられる処理方法であって、前記処理装置は、
前記複数の処理部からの前記メモリに対するアクセス要求が重なった場合に、前記複数の処理部夫々のアクセス権の優先順位を設定する優先順位設定レジスタに設定されている前記優先順位に従って、前記複数の処理部の前記メモリに対するアクセスを調停し、
前記複数の処理部のうちの前記楽音発生部の前記優先順位が最も高くなるように前記優先順位設定レジスタの前記優先順位を設定した後、前記バスに対する前記複数の処理部のトラフィックが定められている上限値を越えた場合に、前記優先順位設定レジスタに設定されている前記優先順位を変更することなく前記楽音発生部からの前記メモリに対するアクセス要求を低減させる第１処理を含む処理の実行を制御する、処理方法。
【請求項９】
メモリと、前記メモリから読み出されたデータに基づき楽音波形を発生する楽音発生部と、前記メモリから読み出されたデータに基づき前記楽音発生部を制御するプロセッサと、を含む複数の処理部と、前記メモリと前記複数の処理部夫々とを接続するバスと、を有する処理装置として用いられるコンピュータに、
前記複数の処理部からの前記メモリに対するアクセス要求が重なった場合に、前記複数の処理部夫々のアクセス権の優先順位を設定する優先順位設定レジスタに設定されている前記優先順位に従って、前記複数の処理部の前記メモリに対するアクセスを調停する処理と、
前記複数の処理部のうちの前記楽音発生部の前記優先順位が最も高くなるように前記優先順位設定レジスタの前記優先順位を設定した後、前記バスに対する前記複数の処理部のトラフィックが定められている上限値を越えた場合に、前記優先順位設定レジスタに設定されている前記優先順位を変更することなく前記楽音発生部からの前記メモリに対するアクセス要求を低減させる第１処理を含む処理を実行させるプログラム。
【請求項１０】
請求項１乃至７のいずれか一項に記載の楽音発生装置と、
発生すべき楽音の音高を指定する操作子とを有し、
前記制御部は、前記操作子にて指定された音高の楽音の発生を指示するように前記音源を制御する、電子楽器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＰＵおよび音源等、複数の処理部がメモリを共有するように構成された楽音発生装置、処理方法、プログラムおよび電子楽器に関する。
【背景技術】
【０００２】
一般に電子楽器では、楽器全体を制御するＣＰＵと、このＣＰＵの制御の下で楽音波形を発生する音源とから構成される楽音発生装置を備える。近年では、製品コスト削減の要求に基づき、音源が必要な波形データを読み出すメモリを、楽器各部を制御するＣＰＵと共有するように構成されたものも知られている。
【０００３】
音源およびＣＰＵがメモリを共有する楽音発生装置では、複数のプロセスが同時並行的に共有メモリにアクセスする結果、アクセス競合（衝突）が起こり得る。アクセス競合を回避するには、共有メモリへのアクセスを待機させればよいが、とりわけ音源において同時発音するチャンネル数が増えるほどアクセス待機に起因する処理遅延が顕著になり、処理効率の低下を招いてしまう。
【０００４】
そこで、近年では、例えば特許文献１に開示されように、バスの空き状態に対応して、発音中の各チャンネルのタイムスロット以外の期間を利用して共有メモリから所定チャンネル分の波形データを読み出して処理効率の向上を図る技術や、特許文献２に開示されるように、バスの空き状態に対応して、共有メモリから所定チャンネル分の波形データを読み出す際に、破綻判定タイミングの経過前に波形データの読み出しが完了しないチャンネルについて発音を停止させてバス負荷の低減を図りつつ意図しない異音の発生を防ぐ技術が開発されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−１８６３６８号公報
【特許文献２】特開２０１４−１６３７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、上記特許文献１，２に開示の技術では、音源において実行する楽音波形の生成に係る処理の効率化を図ったり、意図しない異音の発生を防いだりするだけなので、システム全体（楽器全体）を制御する処理能力の低下を招く虞がある。具体的には、例えば音源のバス優先順位がＣＰＵよりも高い場合に、当該音源において同時発音するチャンネル数が増えるほど共有メモリにアクセスする頻度も増加する反面、ＣＰＵが共有メモリにアクセスする頻度が減少する結果、当該ＣＰＵにより音源を制御する処理を含め、システム全体（楽器全体）を制御する処理能力の低下を招致してしまう。
【０００７】
本発明は、このような事情に鑑みてなされたもので、システム全体（楽器全体）を制御する処理能力の低下を回避することが出来る楽音発生装置、処理方法、プログラムおよび電子楽器を提供することを目的としている。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、本発明の一態様の楽音発生装置は、
メモリと、
前記メモリから読み出されたデータに基づき楽音波形を発生する楽音発生部と、前記メモリから読み出されたデータに基づき前記楽音発生部を制御するプロセッサと、を含む複数の処理部と、
前記メモリと前記複数の処理部とを接続するバスと、
前記複数の処理部夫々のアクセス権の優先順位を設定する優先順位設定レジスタを有し、前記複数の処理部からの前記メモリに対するアクセス要求が重なった場合に、前記優先順位設定レジスタに設定されている前記優先順位に従って、前記複数の処理部の前記メモリに対するアクセスを調停するバスアービタと、
前記複数の処理部のうちの前記楽音発生部の前記優先順位が最も高くなるように前記優先順位設定レジスタの前記優先順位を設定した後、前記バスに対する前記複数の処理部のトラフィックが定められている上限値を越えた場合に、前記優先順位設定レジスタに設定されている前記優先順位を変更することなく前記楽音発生部からの前記メモリに対するアクセス要求を低減させる第１処理を含む処理の実行を制御する制御部と、
を備えたことを特徴とする。
【発明の効果】
【００１３】
本発明では、システム全体（楽器全体）を制御する処理能力の低下を回避することが出来る。
【図面の簡単な説明】
【００１４】
【図１】本発明の一実施形態による楽音発生装置を備えた電子楽器１００の全体構成を示すブロック図である。
【図２】基本クロックｍｃ、クロックｍｃ［１０：４］、クロックｍｃ［３：０］およびサンプリングクロックＳＣ［７：０］の対応関係を示すタイムチャートである。
【図３】本発明の一実施形態による楽音発生装置の構成を示すブロック図である。
【図４】トラフィックモニタ３０の構成を示す回路図およびＢＵＳＹ累算値格納メモリ３６の構成を示すメモリマップである。
【図５】書き込みアドレスＡＤＲに従ってＢＵＳＹ累算値をＢＵＳＹ累算値格納メモリ３６（巡回メモリ）に書き込む動作の一例を示すタイムチャートである。
【図６】共有メモリ１５にアクセスするバスマスターを選択する動作の一例を示すタイムチャートである。
【図７】ＣＰＵ１３が実行するノートイベント処理の動作を示すフローチャートである。
【図８】ＣＰＵ１３およびトラフィックモニタ３０（波形発生部トラフィックモニタ３０ａ、波形処理部トラフィックモニタ３０ｂおよびＣＰＵトラフィックモニタ３０ｃ）が協調して実行するバスモニタ処理の動作を示すフローチャートである。
【図９】ＣＰＵ１３が実行する優先順位変更処理の動作を示すフローチャートである。
【図１０】変形例による楽音発生装置の構成を示すブロック図である。
【発明を実施するための形態】
【００１５】
以下、図面を参照して本発明の実施形態について説明する。
Ａ．全体構成
図１を参照して本発明の一実施形態による楽音発生装置を備えた電子楽器１００の全体構成について説明する。図１は、電子楽器１００の全体構成を示すブロック図である。図１において、鍵盤１０は発生すべき楽音の音高を指定するための操作子としの複数の鍵を有し、演奏操作（押離鍵操作）に応じたキーオン／キーオフ信号、そして指定された音高としての押鍵された鍵の鍵番号（又は離鍵された鍵の鍵番号）を含む演奏情報を出力する。
【００１６】
操作部１１は、図示していないが、電源をパワーオン／パワーオフする電源スイッチの他、発生楽音を修飾する各種パラメータを設定したり選択したりする各種スイッチを有し、操作されるスイッチ種に対応したスイッチイベントを発生する。この操作部１１が発生するスイッチイベントは、ＣＰＵ１３に取り込まれる。表示部１２は、ＣＰＵ１３から供給される表示制御信号に基づき、楽器各部の設定状態や動作状態などを画面表示する。
【００１７】
ＣＰＵ１３は、操作部１１から供給される各種スイッチイベントに基づき装置各部の動作状態を設定する他、ユーザの押鍵操作で発生する演奏情報を含むノートオンイベントを発生して音源１６に供給して楽音発生を指示したり、ユーザの離鍵操作で発生する演奏情報を含むノートオフイベントを発生して音源１６に供給して消音を指示したりする。本発明の要旨に係るＣＰＵ１３の特徴的な処理動作については追って詳述する。
【００１８】
プログラムメモリ１４は、例えばＲＯＭから構成され、上記ＣＰＵ１３にロードされる各種プログラムデータを記憶する。共有メモリ１５は、例えばＲＡＭから構成され、ＣＰＵ１３および音源１６が共にアクセス可能なメモリであり、ＣＰＵ１３のプログラムデータ／ワークデータや、音源１６のプログラムデータ／ワークデータ／各種音色の波形データ等が記憶される。
【００１９】
音源１６は、周知の波形メモリ読み出し方式にて構成される複数の発音チャンネル（ＭＩＤＩチャンネル）を備え、ＣＰＵ１３から供給されるノートオン／ノートオフイベントに従って楽音波形データＷを発生する他、発生した楽音波形データＷに効果付与して出力する。サウンドシステム１７は、音源１６から出力される楽音波形データＷをアナログ形式の楽音信号に変換し、当該楽音信号から不要ノイズを除去する等のフィルタリングを施した後、これを増幅してスピーカから放音させる。
【００２０】
これら鍵盤１０、操作部１１、表示部１２、ＣＰＵ１３及び音源１６は、直接バス１９に接続され、プログラムメモリ１４は、メモリコントローラ２０を介して、共有メモリ１５はメモリコントローラ６０、アービタ４０を介してバス１９に接続される。
【００２１】
また、このバス１９には、トラフィックモニタ３０及び優先順位設定レジスタ５０が接続され、さらにトラフィックモニタ３０は、メモリコントローラ６０及びアービタ４０を介して共有メモリ１５にアクセスしてくるＣＰＵ１３及び音源１６のトラフィックを監視する。
【００２２】
クロック発生部１８は、基本クロックＣＫを発生すると共に、当該基本クロックＣＫをカウントする１１ビットのマスタカウンタｍｃおよび８ビットのサンプリングカウンタｓｃを備える。クロック発生部１８では、マスタカウンタｍｃの上位７ビット出力（１０ＳＢ（ＭＳＢ）〜４ＳＢ）であるクロックｍｃ［１０：４］、下位４ビット出力（３ＳＢ〜０ＳＢ（ＬＳＢ））であるクロックｍｃ［３：０］およびサンプリングクロックｓｃ［７：０］を発生する。
【００２３】
ここで、図２を参照して基本クロックＣＫ、クロックｍｃ［１０：４］およびクロックｍｃ［３：０］の対応関係について説明する。図２において、クロックｍｃ［１０：４］は、音源１６において時分割動作する１２８個（０ｈ〜７Ｆｈ）の発音チャンネルにそれぞれ対応するタイムスロットに相当するチャンネル０処理〜チャンネル１２７処理を形成する。
【００２４】
チャンネル０処理〜チャンネル１２７処理には、それぞれクロックｍｃ［３：０］の１６クロック分×３の区間が割り当てられる。この１６クロック分×３の区間の内、１６クロック分×１の期間は自チャンネル処理に占有され、残りの１６クロック分×２の期間は次チャンネルとのパイプライン処理に割り当てられる。サンプリングクロックｓｃ［７：０］は、クロックｍｃ［１０：４］が１周する１サプリング時間経過毎に歩進される。
【００２５】
Ｂ．楽音発生装置の構成
（１）全体構成
次に、図３を参照して上記実施形態が備える楽音発生装置の全体構成について説明する。図３は、楽音発生装置の全体構成を示すブロック図である。この図において、図１に図示した各部と共通する構成要素には同一の番号を付し、その説明を省略する。
【００２６】
図３に図示する楽音発生装置は、ＣＰＵ１３、プログラムメモリ１４、共有メモリ１５、メモリコントローラ２０、トラフィクモニタ３０、アービタ４０、優先順位設定レジスタ５０、メモリコントローラ６０および音源１６（波形発生部１６０、波形処理部１６１、ミキサ１６２およびＤ／Ａ変換器１６３）から構成される。なお、図３において、構成要素に付記される「Ｍ」はバスマスタを示し、「Ｓ」はバススレーブを示す。
【００２７】
メモリコントローラ２０は、バスマスタとして動作するＣＰＵ１３の要求に応じて、プログラムメモリ１４からプログラムデータを読み出す。トラフィクモニタ３０は、波形発生部トラフィックモニタ３０ａ、波形処理部トラフィックモニタ３０ｂ、ＣＰＵトラフィックモニタ３０ｃおよび上限値設定レジスタ３０ｄから構成される。
【００２８】
波形発生部トラフィックモニタ３０ａは、音源１６を構成する波形発生部１６０（後述する）とアービタ４０とのバスのトラフィック（バス負荷）をモニタする。波形発生部トラフィックモニタ３０ａでは、モニタ中のトラフィック（バス負荷）が、上限値設定レジスタ３０ｄに登録された設定値（上限値）を超えた場合にインタラプト信号を発生してＣＰＵ１３に供給する。
【００２９】
波形処理部トラフィックモニタ３０ｂは、音源１６を構成する波形処理部１６１（後述する）とアービタ４０とのバスのトラフィック（バス負荷）をモニタする。波形処理部トラフィックモニタ３０ｂでは、モニタ中のトラフィック（バス負荷）が、上限値設定レジスタ３０ｄに登録された設定値（上限値）を超えた場合にインタラプト信号を発生してＣＰＵ１３に供給する。
【００３０】
ＣＰＵトラフィックモニタ３０ｃは、ＣＰＵ１３とアービタ４０とのバスのトラフィック（バス負荷）をモニタする。ＣＰＵトラフィックモニタ３０ｃでは、モニタ中のトラフィック（バス負荷）が、上限値設定レジスタ３０ｄに登録された設定値（上限値）を超えた場合にインタラプト信号を発生してＣＰＵ１３に供給する。
【００３１】
上限値設定レジスタ３０ｄは、上述した波形発生部１６０、波形処理部１６１およびＣＰＵ１３のバス負荷の上限値を一時記憶する。これら上限値は、ＣＰＵ１３により書き込まれる。上記波形発生部トラフィックモニタ３０ａ、波形処理部トラフィックモニタ３０ｂおよびＣＰＵトラフィックモニタ３０ｃの基本的構成については追って述べる。
【００３２】
アービタ４０は、共有メモリ１５に対してバスマスタと成り得るＣＰＵ１３、波形発生部１６０および波形処理部１６１からのバス要求を、優先順位設定レジスタ５０に登録された優先順位に従って調停し、メモリコントローラ６０を介して共有メモリ１５にアクセスする権限を与える。優先順位設定レジスタ５０に登録される優先順位は、ＣＰＵ１３により書き込まれる。共有メモリ１５には、前述した通り、ＣＰＵ１３のプログラムデータ／ワークデータや、音源１６のプログラムデータ／ワークデータ／各種音色の波形データ等が記憶される。
【００３３】
アービタ４０に対してバスマスタとなる波形発生部１６０は、波形発生パラメータメモリ１６０ａおよび波形発生部１６０ｂから構成される。波形発生パラメータメモリ１６０ａには、ＣＰＵ１３から供給されるノートオン／ノートオフイベントや、上記アービタ４０およびメモリコントローラ６０を介してアクセスする共有メモリ１５から読み出す波形データ等が記憶される。波形発生部１６０ｂは、波形発生パラメータメモリ１６０ａに記憶されるノートオン／ノトオフイベントおよび波形データに基づいて楽音波形データＷを発生する。
【００３４】
アービタ４０に対してバスマスタとなる波形処理部１６１は、波形処理パラメータメモリ１６１ａおよび波形処理部１６１ｂから構成される。波形処理パラメータメモリ１６１ａには、ＣＰＵ１３から指示されるエフェクト種や、上記アービタ４０およびメモリコントローラ６０を介してアクセスする共有メモリ１５から読み出すエフェクトパラメータ等が記憶される。波形処理部１６１ｂは、波形発生部１６０が発生した楽音波形データＷに対し、波形発生パラメータメモリ１６０ａに記憶されるエフェクト種やエフェクトパラメータに応じた効果音（ディレイやリバーブ、コーラス等）を発生する。
【００３５】
ミキサ１６２は、波形発生部１６０から出力される楽音波形データＷに、波形処理部１６１から出力される効果音を混合して出力する。Ｄ／Ａ変換器１６３は、ミキサ１６２の出力をアナログ形式の楽音出力に変換する。
【００３６】
上記構成において、アービタ４０およびメモリコントローラ６０を介して共有メモリ１５にアクセスする波形発生部１６０、波形処理部１６１およびＣＰＵ１３のトラフィック（バス負荷）を、トラフィクモニタ３０の波形発生部トラフィックモニタ３０ａ、波形処理部トラフィックモニタ３０ｂおよびＣＰＵトラフィックモニタ３０ｃが各々モニタする。
【００３７】
ＣＰＵ１３は、上記波形発生部トラフィックモニタ３０ａ、波形処理部トラフィックモニタ３０ｂおよびＣＰＵトラフィックモニタ３０ｃの各モニタ結果を監視し、共有メモリ１５から波形発生部１６０および波形処理部１６１にそれぞれ転送されるデータ量が最大転送レートを超えないようバス制御する。具体的には、優先順位設定レジスタ５０の優先順位を変更する他、音源１６の波形発生部１６０に対して同時発音する発音チャンネルの数を抑えたり、再生ピッチを抑えるように指示する。
【００３８】
（２）トラフィックモニタ３０の構成
次に、図４を参照してトラフィックモニタ３０の構成について説明する。図４（ａ）は、トラフィックモニタ３０（波形発生部トラフィックモニタ３０ａ、波形処理部トラフィックモニタ３０ｂ、ＣＰＵトラフィックモニタ３０ｃ）の構成を示す回路図である。図４（ｂ）は、トラフィックモニタ３０が備えるＢＵＳＹ累算値格納メモリ３６の構成を示すメモリマップである。
【００３９】
図４（ａ）に図示するトラフィックモニタ３０は、歩進器３１、セレクタ３２、レジスタ３３、アドレスレジスタ３４、アドレス歩進器３５およびＢＵＳＹ累算値格納メモリ３６から構成される。歩進器３１は、イネーブル端子ＥＮにＢＵＳＹ信号が供給された場合に、レジスタ３３の出力をインクリメント（＋１）してＢＵＳＹ累算値を出力する。なお、ＢＵＳＹ信号は、モニタ中のバスから供給される。
【００４０】
セレクタ３２は、クロックｍｃ［９：０］が「０」になる毎、すなわち１／２サンプリング周期毎に「０」入力を選択してＢＵＳＹ累算値をゼロリセットし、それ以外では歩進器３１から入力されるＢＵＳＹ累算値を次段のレジスタ３３に出力する。レジスタ３３は、動作クロックＣＬＫに同期してＢＵＳＹ累算値を歩進器３１に帰還入力する一方、後述するアドレスレジスタ３４が発生する書き込みアドレスＡＤＲに従ってＢＵＳＹ累算値をＢＵＳＹ累算値格納メモリ３６に書き込む。このように、歩進器３１、セレクタ３２およびレジスタ３３は、１／２サンプリング周期毎にモニタ中のバスのＢＵＳＹ累算値（ＢＵＳＹ信号の発生回数）を計数する。
【００４１】
アドレスレジスタ３４およびアドレス歩進器３５は、１／２サンプリング周期毎にインクリメントされる書き込みアドレスＡＤＲを発生する。ＢＵＳＹ累算値格納メモリ３６は、図４（ｂ）に図示する通り、書き込みアドレスＡＤＲが所定値に達した場合に先頭アドレスに戻る巡回メモリとして機能する。
【００４２】
ＢＵＳＹ累算値格納メモリ３６では、アドレスレジスタ３４が発生する書き込みアドレスＡＤＲに従って上記レジスタ３３のＢＵＳＹ累算値が書き込まれる。すなわち、図５に図示するように、１／２サンプリング周期を１つの区間として、１サンプリング周期において前半区間のＢＵＳＹ累算値および後半区間のＢＵＳＹ累算値が１／２サンプリング周期毎にインクリメントされる書き込みアドレスＡＤＲに従って順次書き込まれる。なお、図５中に記される巡回メモリとは、ＢＵＳＹ累算値格納メモリ３６を指す。
【００４３】
ＣＰＵ１３は、こうしたＢＵＳＹ累算値格納メモリ３６の書き込みアドレスＡＤＲを参照することで直前区間（１／２サンプリング周期の期間）のＢＵＳＹ累算値を取得する。このＢＵＳＹ累算値がバスのトラフィック（バス負荷）を表す指標となる。なお、ＢＵＳＹ累算値を複数の区間（１／２サンプリング周期の期間）にわたってＢＵＳＹ累算値格納メモリ３６に格納する理由は、それら複数の区間のＢＵＳＹ累算値から平均的なバス負荷を算出したり、バス負荷変化を予測したりする等の判断に用いる為である。
【００４４】
ＣＰＵ１３では、前述した波形発生部トラフィックモニタ３０ａ、波形処理部トラフィックモニタ３０ｂおよびＣＰＵトラフィックモニタ３０ｃの各ＢＵＳＹ累算値格納メモリ３６から各々読み出す直前区間（１／２サンプリング周期の期間）のＢＵＳＹ累算値に基づいて共有メモリ１５にアクセス要求する各部（波形発生部１６０、波形処理部１６１およびＣＰＵ１３）のバス負荷を最適化する。
【００４５】
ここで、図６を参照して各部（波形発生部１６０、波形処理部１６１およびＣＰＵ１３）のＢＵＳＹ累算動作の一例に基づき共有メモリ１５にアクセスするバスマスター選択動作の一例について説明する。なお、この動作例では、優先順位設定レジスタ５０に登録される優先順位を「波形発生部１６０」＞「ＣＰＵ１３」＞「波形処理部１６１」としている。また、図６において、ＷＧは波形発生部１６０を表し、ＤＳＰは波形処理部１６１を表す。
【００４６】
先ず区間１では、ＣＰＵ１３および波形発生部１６０（ＷＧ）が共に共有メモリ１５にアクセスする為のバス要求を発生するが、この場合、ＣＰＵ１３よりも波形発生部１６０（ＷＧ）の優先順位が高い為、波形発生部１６０（ＷＧ）が共有メモリ１５のバスマスタに選択される。次に、区間２では、波形発生部１６０（ＷＧ）のバス要求を停止する一方で、ＣＰＵ１３および波形処理部１６１（ＤＳＰ）が共に共有メモリ１５にアクセスする為のバス要求を発生するが、この場合、波形処理部１６１（ＤＳＰ）よりもＣＰＵ１３の優先順位が高い為、ＣＰＵ１３が共有メモリ１５のバスマスタに選択される。
【００４７】
続いて、区間３では、ＣＰＵ１３のみバス要求を停止して、波形処理部１６１（ＤＳＰ）のみ共有メモリ１５にアクセスする為のバス要求を発生している状態となる。この場合、優先順位の一番低い波形処理部１６１（ＤＳＰ）が共有メモリ１５のバスマスタに選択される。そして、次の区間４では、波形処理部１６１（ＤＳＰ）のみ共有メモリ１５にアクセスする為のバス要求を発生している状態のままで、再び波形発生部１６０（ＷＧ）が共有メモリ１５にアクセスする為のバス要求を発生する。この場合、波形処理部１６１（ＤＳＰ）よりも波形発生部１６０（ＷＧ）の優先順位が高い為、波形発生部１６０（ＷＧ）が共有メモリ１５のバスマスタに選択される。
【００４８】
Ｃ．動作
次に、図７〜図９を参照して、一実施形態による楽音発生装置の動作を説明する。以下では、ＣＰＵ１３が実行するノートイベント処理、ＣＰＵ１３およびトラフィックモニタ３０（波形発生部トラフィックモニタ３０ａ、波形処理部トラフィックモニタ３０ｂおよびＣＰＵトラフィックモニタ３０ｃ）が協調して実行するバスモニタ処理、ＣＰＵ１３が実行する優先順位変更処理について述べる。
【００４９】
（１）ノートイベント処理の動作
図７は、ＣＰＵ１３が実行するノートイベント処理の動作を示すフローチャートである。ノートイベント処理は、ノートオン／ノートオフイベント発生時あるいは発音中のピッチを制御するピッチベンドイベント発生時に実行される。これら何れかのイベントが発生すると、ＣＰＵ１３は本処理を実行して図７に図示するステップＳＡ１に進む。
【００５０】
ステップＳＡ１では、前述した波形発生部トラフィックモニタ３０ａ、波形処理部トラフィックモニタ３０ｂおよびＣＰＵトラフィックモニタ３０ｃが各々備えるＢＵＳＹ累算値格納メモリ３６からそれぞれＢＵＳＹ累算値を読み出す。各モニタ３０ａ〜３０ｃのＢＵＳＹ累算値格納メモリ３６から読み出すＢＵＳＹ累算値は、各バスの負荷を示す指標である。
【００５１】
続いて、ステップＳＡ２では、読み出した各バスの負荷（ＢＵＳＹ累算値）に基づき余裕の有無を判断する。具体的には、各バスの負荷（ＢＵＳＹ累算値）が上限値設定レジスタ３０ｄに登録した上限値を超えていないかどうかを判断する。
【００５２】
そして、各バスの負荷（ＢＵＳＹ累算値）が上限値設定レジスタ３０ｄに登録した上限値を超えずに余裕が有る場合には、上記ステップＳＡ２の判断結果は「ＹＥＳ」になり、ステップＳＡ３に進み、処理要求に応じた音源制御、例えば処理要求がノートオンイベントであれば、当該ノートオンイベントを音源１６に送付して本処理を終える。なお、音源１６（波形発生部１６０）では受領したノートオンイベントに基づいて楽音波形を発生する。
【００５３】
一方、各バスの負荷（ＢＵＳＹ累算値）の何れかが上限値設定レジスタ３０ｄに登録した上限値を超えた場合には、上記ステップＳＡ２の判断結果が「ＮＯ」になり、ステップＳＡ４に進む。ステップＳＡ４では、処理要求に対する音源制御が可能であるか否かを判断する。可能であれば、判断結果は「ＹＥＳ」になり、ステップＳＡ５に進み、例えば同時発音中の複数の発音チャンネルの内、最も減衰が進んだ楽音波形を発生している発音チャンネルを消音して発音数を減らす等の、バス負荷の低減を図る音源制御を実行した後、上述のステップＳＡ１に処理を戻して再び各バスの負荷状態をモニタする。
【００５４】
これに対し、処理要求に対する音源制御が出来ない状況であると、上記ステップＳＡ４の判断結果は「ＮＯ」になり、ステップＳＡ６に進み、処理要求を拒否するための処理を実行した後、本処理を終える。
【００５５】
このように、ノートイベント処理では、ノートオン／ノートオフイベントやピッチベンドイベントが発生すると、共有メモリ１５にアクセスする各バスの負荷（ＢＵＳＹ累算値）をモニタし、バス負荷に余裕が有れば、要求されたイベントに応じた音源制御を実行するが、バス負荷に余裕が無い場合、すなわち各バスの負荷（ＢＵＳＹ累算値）の何れかが上限値設定レジスタ３０ｄに登録した上限値を超えると、例えば同時発音中の複数の発音チャンネルの内、最も減衰が進んだ楽音波形を発生している発音チャンネルを消音して発音数を減らす等の、バス負荷の低減を図るので、システム全体（楽器全体）を制御する処理能力の低下を回避することが出来る。
【００５６】
（２）バスモニタ処理の動作
図８は、バスモニタ処理の動作を示すフローチャートである。本処理は、ＣＰＵ１３およびトラフィックモニタ３０（波形発生部トラフィックモニタ３０ａ、波形処理部トラフィックモニタ３０ｂおよびＣＰＵトラフィックモニタ３０ｃ）が協調して実行する。
【００５７】
先ず、ステップＳＢ１では、ＣＰＵ１３が各バスの負荷（ＢＵＳＹ累算値）の上限値を、前述した上限値設定レジスタ３０ｄ（図３参照）に登録する。この後、ステップＳＢ２〜ＳＢ３は、トラフィックモニタ３０（波形発生部トラフィックモニタ３０ａ、波形処理部トラフィックモニタ３０ｂおよびＣＰＵトラフィックモニタ３０ｃ）の動作となる。
【００５８】
ステップＳＢ２では、ＢＵＳＹ累算値格納メモリ３６（図４参照）に書き込まれた現在のＢＵＳＹ累算値と上限値設定レジスタ３０ｄの上限値とを比較し、続くステップＳＢ３では、現在のＢＵＳＹ累算値が上限値を超えたか否かを判断する。現在のＢＵＳＹ累算値が上限値設定レジスタ３０ｄの上限値を超えなければ、上記ステップＳＢ３の判断結果は「ＮＯ」になり、上記ステップＳＢ２に処理を戻し、ＢＵＳＹ累算値と上限値との比較を継続する。これに対し、現在のＢＵＳＹ累算値が上限値設定レジスタ３０ｄの上限値を超えると、上記ステップＳＢ３の判断結果が「ＹＥＳ」になり、ステップＳＢ４に進み、インタラプト信号を発生してＣＰＵ１３に送出した後、上記ステップＳＢ２に処理を戻す。
【００５９】
次に、ＣＰＵ１３は、トラフィックモニタ３０からのインタラプト信号を受信してステップＳＢ５を実行する。ステップＳＢ５では、例えば同時発音中の複数の発音チャンネルの内、最も減衰が進んだ楽音波形を発生している発音チャンネルの消音を指示して発音数を減らす等の、バス負荷の低減を図る音源制御を実行して本処理を終える。
【００６０】
このように、ＣＰＵ１３およびトラフィックモニタ３０が協調して実行するバスモニタ処理では、各バスの負荷（ＢＵＳＹ累算値）の上限値を、上限値設定レジスタ３０ｄ（図３参照）に登録しておき、トラフィックモニタ３０が時々刻々変化する各バスのＢＵＳＹ累算値と上限値とを比較し、ＢＵＳＹ累算値が上限値を超えると、ＣＰＵ１３にインタラプト信号を送出する。ＣＰＵ１３は、このインタラプト信号に応じて、例えば同時発音中の複数の発音チャンネルの内、最も減衰が進んだ楽音波形を発生している発音チャンネルの消音を指示して発音数を減らす等の、バス負荷の低減を図るので、システム全体（楽器全体）を制御する処理能力の低下を回避することが出来る。
【００６１】
（３）優先順位変更処理の動作
図９は、ＣＰＵ１３が実行する優先順位変更処理の動作を示すフローチャートである。本処理は、割り込み処理として所定周期毎に実行される。その実行タイミングになると、ＣＰＵ１３は図９に図示するステップＳＣ１に進み、前述した波形発生部トラフィックモニタ３０ａ、波形処理部トラフィックモニタ３０ｂおよびＣＰＵトラフィックモニタ３０ｃが各々備えるＢＵＳＹ累算値格納メモリ３６からそれぞれＢＵＳＹ累算値を読み出す。各モニタ３０ａ〜３０ｃのＢＵＳＹ累算値格納メモリ３６から読み出すＢＵＳＹ累算値は、各バスの負荷を示す指標である。
【００６２】
次いで、ステップＳＣ２では、音源１６（波形発生部１６０）のバス優先順位が下がる場合に、波形発生部１６０の現在のバス負荷を満たすことが可能であるか否かを判断する。可能であれば、判断結果は「ＹＥＳ」になり、ステップＳＣ４に進み、優先順位設定レジスタ５０（図３参照）に登録される優先順位の設定を変更する。
【００６３】
具体的には、波形発生部１６０の優先順位を下げる一方、ＣＰＵ１３又は波形処理部１６１の何れかの内、当該波形発生部１６０よりもバス負荷の大きい側の優先順位を上げる。これにより、アービタ４０は、バス負荷の大きいバスマスタを優先的に共有メモリ１５にアクセス可能とする。
【００６４】
一方、音源１６（波形発生部１６０）のバス優先順位を下げた場合に、波形発生部１６０の現在のバス負荷を満たすことが出来なければ、上記ステップＳＣ２の判断結果は「ＮＯ」になり、ステップＳＣ３に進む。ステップＳＣ３では、例えば同時発音中の複数の発音チャンネルの内、最も減衰が進んだ楽音波形を発生している発音チャンネルを消音させて発音数を減らす等の、バス負荷を下げる音源制御を実行した後、上述のステップＳＣ１に処理を戻す。
【００６５】
このように、優先順位変更処理では、例えばＣＰＵ１３の処理負荷増加により共有メモリ１５にアクセスする音源１６（波形発生部１６０）のバス優先順位を下げる必要が生じると、当該波形発生部１６０のバス優先順位を下げて現在のバス負荷を満たすことが出来なければ、例えば同時発音中の複数の発音チャンネルの内、最も減衰が進んだ楽音波形を発生している発音チャンネルを消音させて発音数を減らす等の、バス負荷の低減を図るので、システム全体（楽器全体）を制御する処理能力の低下を回避することが出来る。
【００６６】
Ｄ．変形例
次に、図１０を参照して上記実施形態の変形例について説明する。図１０は、変形例による楽音発生装置の構成を示すブロック図である。この図において、図３に図示した各部と共通する構成要素には同一の番号を付し、その説明を省略する。
【００６７】
図１０に図示する変形例が、図３に図示した楽音発生装置と相違する点は、
（ａ）２系統の共有メモリＡ１５−１および共有メモリＢ１５−２を設け、
（ｂ）上記（ａ）に対応して共有メモリＡ系統のトラフィックメモリ３０、アービタ４０、優先順位設定レジスタ５０およびメモリコントローラ６０と、共有メモリＢ系統のトラフィックメモリ３１、アービタ４１、優先順位設定レジスタ５１およびメモリコントローラ６１とを備え、
（ｃ）波形発生部１６０が共有メモリＡ１５−１および共有メモリＢ１５−２の両系統にアクセス可能とし、
（ｄ）さらにＣＰＵ１３が共有メモリＡ１５−１、波形処理部１６１が共有メモリＢ１５−２にそれぞれアクセス可能としたことにある。
【００６８】
上記構成によれば、２系統の共有メモリを設けることで各バスの負荷が分散し、これにてＢＵＳＹ累算値が下がり転送待ちを減少させる為、より一層システム全体（楽器全体）を制御する処理能力の低下を回避することが出来る。
【００６９】
以上説明したように、本実施形態では、共有メモリ１５から読み出したデータに基づいて装置各部を制御するＣＰＵ１３と、このＣＰＵ１３の制御の下に共有メモリ１５から読み出したデータに基づいて楽音を発生する音源１６とを備える楽音発生装置において、共有メモリ１５にアクセスするＣＰＵ１３および音源１６の各バスの負荷状態をモニタするトラフィックモニタ３０を設け、このトラフィックモニタ３０によりモニタされる各バスの負荷状態に応じて、ＣＰＵ１３が音源１６にバス負荷を下げる制御を指示したり、共有メモリ１５にアクセスする音源１６の優先順位を変更するので、システム全体（楽器全体）を制御する処理能力の低下を回避することが可能になる。
【００７０】
以上、本発明の実施形態について説明したが、本発明はそれに限定されるものではなく、本願出願の特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【００７１】
以下では、本願出願当初の特許請求の範囲に記載された各発明について付記する。
（付記）
［請求項１］
メモリと、
前記メモリから読み出されるデータに基づいて処理を行う複数の処理部と、
前記メモリと前記複数の処理部とを接続するバスと、
前記バスに対する前記複数の処理部のトラフィックをモニタするとともに、前記複数の処理部のうち前記メモリに対し最も優先してアクセス権を付与された処理部のトラフィックが予め定められた上限値を越えた場合に、当該処理部のトラフィックを減少させる信号を出力するバストラフィックモニタと、
を備えた処理装置。
【００７２】
［請求項２］
前記処理装置はさらに、前記複数の処理部のいずれかひとつの処理部に前記メモリに対するアクセス権が付与されている状態で、当該処理部とは別の処理部から前記メモリに対するアクセス権を要求された場合、予め設定された優先順位に従って、前記メモリに対するアクセス権を前記複数の処理部のいずれかに付与するように前記バスを制御するバスアービタを有する請求項１に記載の処理装置。
【００７３】
［請求項３］
前記バスアービタはさらに、前記複数の処理部夫々の優先順位を設定する優先順位設定レジスタを有する請求項２に記載の処理装置。
【００７４】
［請求項４］
前記優先順位設定レジスタ設定された優先順位は設定可能である請求項３に記載の処理装置。
【００７５】
［請求項５］
前記トラフィックモニタは、前記複数の処理部それぞれのトラフィック上限値を設定する上限値設定レジスタを有する請求項１に記載の処理装置。
【００７６】
［請求項６］
前記複数の処理部は、
前記メモリから読み出されたデータに基づき楽音波形を発生する楽音発生部と、
前記メモリから読み出されたデータに基づき前記発生された楽音波形を処理する波形処理部と、
前記メモリから読み出されたデータに基づき前記楽音発生部及び前記波形処理部を制御するＣＰＵと、
を有する請求項１に記載の処理装置。
【００７７】
［請求項７］
前記バスアービタは、前記楽音発生部、波形処理部及びＣＰＵの順で設定された優先順位に従って、前記メモリに対するアクセス権を付与するように前記バスを制御する請求項２に記載の処理装置。
【００７８】
［請求項８］
前記トラフィックモニタは、前記楽音発生部のトラフィックが予め定められた上限値を越えた場合に、前記ＣＰＵに対して、トラフィックを減少させるように前記楽音発生部を制御する制御信号を出力する請求項７に記載の処理装置。
【００７９】
［請求項９］
前記ＣＰＵは、前記制御信号の入力に応答して、同時に発音している楽音の数を減らすように前記楽音発生部を制御する請求項８に記載の処理装置。
【００８０】
［請求項１０］
メモリと、
前記メモリから読み出されるデータに基づいて夫々処理を行う第一の処理部及び第二の処理部を少なくとも含む複数の処理部と、
前記メモリと前記第一の処理部とを接続するとともに前記メモリと前記第二の処理部とを接続するバスと、
前記第一の処理部及び前記第二の処理部のいずれか一方に前記メモリに対するアクセス権が付与されていた状態で、前記第一の処理部及び前記第二の処理部のいずれか他方から前記メモリに対するアクセス権が要求される場合、予め設定された優先順位に従って、前記メモリに対するアクセス権を前記第一の処理部及び前記第二の処理部のいずれかに付与するように前記バスを制御するバスアービタと、
前記バスに対する前記第一の処理部及び前記第二の処理部のトラフィックをモニタするとともに、前記アクセス権を付与された前記第一の処理部及び前記第二の処理部のいずれかがトラフィックが予め定められた上限値を越えた場合に、当該処理部のトラフィックを減少させる信号を出力するバストラフィックモニタと、
を備えた処理装置。
【００８１】
［請求項１１］
メモリと、前記メモリから読み出されるデータに基づいて処理を行う複数の処理部と、前記メモリと前記複数の処理部とを接続するバスと、を有する処理装置で用いられる処理方法であって、前記処理装置は、
前記バスに対する前記複数の処理部のトラフィックをモニタするとともに、前記複数の処理部のうち前記メモリに対し最も優先してアクセス権を付与された処理部のトラフィックが予め定められた上限値を越えた場合に、当該処理部のトラフィックを減少させる信号を出力する、処理方法。
【００８２】
［請求項１２］
メモリと、前記メモリから読み出されるデータに基づいて夫々処理を行う複数の処理部と、前記メモリと前記複数の処理部夫々とを接続するバスと、を有する処理装置として用いられるコンピュータに、
前記バスに対する前記複数の処理部のトラフィックをモニタするとともに、前記複数の処理部のうち前記メモリに対し最も優先してアクセス権を付与された処理部のトラフィックが予め定められた上限値を越えた場合に、当該処理部のトラフィックを減少させる信号を出力するステップを実行させるプログラム。
【００８３】
［請求項１３］
メモリと、
前記メモリから読み出されるデータに基づいて楽音を生成する音源と、
前記メモリから読み出されるデータに基づいて前記音源を制御する制御部と、
前記メモリ、音源及び制御部の夫々を接続するバスと、
前記バスに対する前記音源及び制御部のトラフィックをモニタするとともに、前記メモリに対し最も優先してアクセス権を付与された前記音源及び制御部のいずれか一方のトラフィックが予め定められた上限値を越えた場合に、当該最も優先してアクセス権を付与された前記音源及び制御部のいずれか一方のトラフィックを減少させる信号を出力するバストラフィックモニタと、
を備えた楽音発生装置。
【００８４】
［請求項１４］
請求項１３に記載の楽音発生装置と、
発生すべき楽音の音高を指定する操作子とを有し、
前記制御部は、前記操作子にて指定された音高の楽音の発生を指示するように前記音源を制御する、電子楽器。
【符号の説明】
【００８５】
１０…鍵盤、１１…操作部、１２…表示部、１３…ＣＰＵ、１４…プログラムメモリ、１５…共有メモリ、１６…音源、１７…サウンドシステム、１８…クロック発生部、２０…メモリコントローラ、３０…トラフィックモニタ、３０ａ…波形発生部トラフィックモニタ、３０ｂ…波形処理部トラフィックモニタ、３０ｃ…ＣＰＵトラフィックモニタ、３０ｄ…上限値設定レジスタ、３１…歩進器、３２…セレクタ、３３…レジスタ、３４…アドレスレジスタ、３５…アドレス歩進器、３６…ＢＵＳＹ累算値格納メモリ、４０…アービタ、５０…優先順位設定レジスタ、６０…メモリコントローラ、１００…電子楽器
【図１】
0006447024.tif 000002
【図２】
0006447024.tif 000003
【図３】
0006447024.tif 000004
【図４】
0006447024.tif 000005
【図５】
0006447024.tif 000006
【図６】
0006447024.tif 000007
【図７】
0006447024.tif 000008
【図８】
0006447024.tif 000009
【図９】
0006447024.tif 000010
【図１０】
0006447024.tif 000011