(57)【特許請求の範囲】
【請求項１】
メモリを共用するＣＰＵおよび音源を備えるとともに、当該音源は、複数のタイムスロット夫々に対応して発音処理が割り当て可能に構成され、発音要求に応答していずれかのタイムスロットに割り当てられた発音処理により楽音を生成して発音させる楽音発生装置において、
新たな発音要求発生に応答して、発音処理の割り当てられていない空きのタイムスロットが存在する区間を検出する区間検出手段と、
前記区間検出手段により検出された前記区間のうち、最も長い区間を取得するとともに、取得された区間の中央に該当する空きのタイムスロットに前記新たな発音要求に対応する発音処理を割り当てる発音割り当て手段と、
を有する楽音発生装置。
【請求項２】
メモリを共用するＣＰＵおよび音源を備えるとともに、当該音源は、複数のタイムスロット夫々に対応して発音処理が割り当て可能に構成され、発音要求に応答していずれかのタイムスロットに割り当てられた発音処理により楽音を生成して発音させる楽音発生装置において、前記ＣＰＵに、
新たな発音要求に応答して、発音処理の割り当てられていない空きのタイムスロットが存在する区間を検出する区間検出ステップと、
検出された前記区間のうち、最も長い区間を取得するとともに、取得された区間の中央に該当する空きのタイムスロットに前記新たな発音要求に対応する発音処理を割り当てる発音割り当てステップと、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＰＵのメモリアクセス待ちに起因する発音遅れや音切れを回避する楽音発生装置およびプログラムに関する。
【背景技術】
【０００２】
ＣＰＵおよび音源がメモリを共用するように構成された楽音発生装置が知られている。この種の技術として、例えば特許文献１には、外部メモリを共用するＣＰＵおよびＤＳＰ（音源）を備え、ＤＳＰのサンプリング周期毎にバス解放をＣＰＵに要求すると共に、その要求に応じてＣＰＵが解放するバスを占有してＤＳＰに外部メモリをアクセスさせるＤＳＰアクセス期間を設け、当該ＤＳＰアクセス期間中にＤＳＰが外部メモリに対してリード・ライト処理を実行する装置が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−２１９９４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、上記特許文献１に開示の装置では、ＤＳＰアクセス期間中のリード・ライト処理とは別進行でＤＳＰ（音源）が自己の内部メモリに記憶される波形データに基づき楽音形成する為、共用メモリに対するアクセス競合は発生しないが、共用メモリに記憶される波形データに基づき音源が楽音形成する一方でＣＰＵが共用メモリに記憶される所定のデータに基づいて装置各部を制御する方式であると、音源およびＣＰＵの双方から同時に共用メモリへのアクセス要求が生じてアクセス競合することも起こり得る。
【０００５】
アクセス競合する場合には、一般的に楽音形成する音源側からのアクセス要求を優先することが多い。この為、音源側からのアクセス要求が連続すると、その期間はＣＰＵのメモリアクセスが待たされてしまい、これにより例えばＣＰＵが制御する自動伴奏や自動演奏における曲再生テンポが遅れて「発音遅れ」したり、あるいはＣＰＵが周期変調演算で生成するビブラートが一瞬止まって「音切れ」したりする等の弊害も起こり得る。
【０００６】
本発明は、このような事情に鑑みてなされたもので、ＣＰＵのメモリアクセス待ちに起因する発音遅れや音切れを回避することができる楽音発生装置およびプログラムを提供することを目的としている。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、メモリを共用するＣＰＵおよび音源を備えるとともに、当該音源は、複数のタイムスロット夫々に対応して発音処理が割り当て可能に構成され、発音要求に応答していずれかのタイムスロットに割り当てられた発音処理により楽音を生成して発音させる楽音発生装置において、
新たな発音要求発生に応答して、発音処理の割り当てられていない空きのタイムスロットが存在する区間を検出する区間検出手段と、
前記区間検出手段により検出された前記区間のうち、最も長い区間を取得するとともに、取得された区間の中央に該当する空きのタイムスロットに前記新たな発音要求に対応する発音処理を割り当てる発音割り当て手段と、を有することを特徴とする。
【発明の効果】
【０００８】
本発明では、ＣＰＵのメモリアクセス待ちに起因する発音遅れや音切れを回避することができる。
【図面の簡単な説明】
【０００９】
【図１】実施の一形態による楽音発生装置１００の全体構成を示すブロック図である。
【図２】本実施形態におけるＲＡＭ１５（共用メモリ）の読み出し動作を説明するためのタイミングチャートである。
【図３】先頭の発音チャンネルから順番に発音割当した場合における、ＲＡＭ１５（共用メモリ）の読み出し動作を説明するためのタイミングチャートである。
【図４】初期化処理の動作を示すフローチャートである。
【図５】発音要求発生処理の動作を示すフローチャートである。
【図６】発音要求発生処理の動作を示すフローチャートである。
【図７】ＣＯＵＮＴ＿ＩＮＣ処理の動作を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下、図面を参照して本発明の実施形態について説明する。
Ａ．構成
図１は、実施の一形態による楽音発生装置１００の全体構成を示すブロック図である。この図において、鍵盤１０は、演奏操作（押離鍵操作）に応じたノートオン／ノートオフイベント、鍵番号およびベロシティ等を含む演奏情報を発生する。スイッチ部１１は、装置パネルに配設される各種スイッチから構成され、各スイッチ操作に応じたスイッチイベントを発生する。表示部１３は、例えばカラー液晶パネル等から構成され、ＣＰＵ１４から供給される表示制御信号に応じて装置各部の設定状態や動作状態などを画面表示する。
【００１１】
ＲＯＭ１３には、ＣＰＵ１４にロードされる各種プログラムが記憶される。各種プログラムとは、後述する初期化処理、発音要求発生処理およびＣＯＵＮＴ＿ＩＮＣ処理を含む。ＣＰＵ１４は、ＲＯＭ１３に記憶される各種プログラムを実行し、操作部１１が発生するスイッチイベントに応じて装置各部を制御すると共に、鍵盤１０から出力される演奏情報に応じて音源１７に発音／消音指示する。本発明の要旨に係わるＣＰＵ１４の特徴的な処理動作（発音要求発生処理）については追って詳述する。
【００１２】
ＣＰＵ１４と音源１７とが共用するＲＡＭ１５は、ワークエリアおよび波形データエリアを備える。ＲＡＭ１５のワークエリアには、ＣＰＵ１４の処理に用いられる各種レジスタ・フラグデータが一時記憶され、一方、波形データエリアには、各種音色の波形データが記憶される。音源１７は、周知の波形メモリ読み出し方式にて構成され、複音同時発音可能な複数の発音チャンネル（本実施形態では３２チャンネル）を備え、演奏情報に応じてＣＰＵ１４が生成する発音／消音指示（ノートイベント）に従って楽音形成する。サウンドシステム１８は、音源１７から出力される楽音波形をアナログ信号形式に変換した後、不要ノイズ除去やレベル増幅を施してからスピーカから発音させる。
【００１３】
次に、図２を参照してＲＡＭ１５を共用するＣＰＵ１４および音源１７の読み出しタイミングについて説明する。図２は、音源１７が備える発音チャンネル（３２チャンネル）に割り当てられたタイムスロットＴＳ１〜ＴＳ３２の内、例えば三和音（第１音〜第３音）を発音させる際に、後述する発音要求発生処理によって一つおきの発音チャンネルのタイムスロットＴＳ１，ＴＳ３，ＴＳ５に各発音を割り当てた時に、ＣＰＵ１４がタイムスロットＴＳ１においてＲＡＭ１５の読み出し要求を発生した場合の処理を示している。
【００１４】
図２において、先ずタイムスロットＴＳ１では、音源１７が第１音を形成する為の波形データをＲＡＭ１５の波形データエリアから読み出すべく、第１音の波形アドレスをＲＡＭ１５に供給すると共に、ＣＰＵ１４にＷＡＩＴ信号を出力する。ＣＰＵ１４では、ＷＡＩＴ信号が有効になると、ＲＡＭ１５の読み出し要求が生じても当該ＷＡＩＴ信号が無効になるまでアクセス待ち状態を維持する。この状態では、ＣＰＵ１４の読み出しアドレスはハイインピーダンス状態を保つ。そして、ＣＰＵ１４がアクセス待ちの状態になると、ＯＲ回路１６を介して読み出し要求ＲＥＡＤをＲＡＭ１５に入力し、これに応じてＲＡＭ１５が読み出し有効になると、第１音の波形アドレスで指定された波形データがＲＡＭ１５から読み出されて音源１７に取り込まれる。
【００１５】
一方、ＣＰＵ１４では、タイムスロットＴＳ１においてＲＡＭ１５の読み出し要求を発生するが、音源１７からのＷＡＩＴ信号が無効になるまでアクセス待ちの状態となる。そして、次のタイムスロットＴＳ２になると、音源１７からのＷＡＩＴ信号が無効になる為、ＣＰＵ１４がワークエリアのデータを読み出す為のＲＡＭ読み出しアドレスをＲＡＭ１５に供給すると共に、ＯＲ回路１６を介して読み出し要求ＲＥＡＤをＲＡＭ１５に入力する。これによりＲＡＭ１５が読み出し有効になり、ＲＡＭ読み出しアドレスで指定されたデータがＲＡＭ１５から読み出されてＣＰＵ１４に取り込まれる。
【００１６】
次のタイムスロットＴＳ３では、音源１７が第２音を形成する為の波形データをＲＡＭ１５の波形データエリアから読み出すべく、第２音の波形アドレスをＲＡＭ１５に供給すると共に、ＣＰＵ１４にＷＡＩＴ信号を出力してアクセス待ちの状態に設定した後、ＯＲ回路１６を介して読み出し要求ＲＥＡＤをＲＡＭ１５に供給する。すると、ＲＡＭ１５が読み出し有効になり、第２音の波形アドレスで指定された波形データが読み出されて音源１７に取り込まれる。そして、タイムスロットＴＳ５になると、上記タイムスロットＴＳ３と同様、音源１７が第３音の波形アドレスをＲＡＭ１５に供給すると共に、ＣＰＵ１４にＷＡＩＴ信号を出力した後、ＯＲ回路１６を介して読み出し要求ＲＥＡＤをＲＡＭ１５に供給すると、ＲＡＭ１５から第３音の波形アドレスで指定された波形データが読み出されて音源１７に取り込まれる。
【００１７】
このように、発音割り当てされていない複数の空きチャンネルが存在し、それらの中から連続した空きチャンネルのタイムスロットＴＳに発音割り当てを行わないようにし、例えば上述の一例のように、一つおきの空きチャンネルのタイムスロットＴＳ１，ＴＳ３，ＴＳ５に三和音（第１音〜第３音）の発音を割り当てれば、音源１７およびＣＰＵ１４の読み出し要求が競合しても、ＣＰＵ１４は読み出し要求が競合した１タイムスロットＴＳの期間だけ待機すれば、次の空きチャンネルのタイムスロットＴＳにおいてＲＡＭ１５にアクセス出来、こうすることでＣＰＵのメモリアクセス待ちに起因する発音遅れや音切れを回避することが可能になる。
【００１８】
なお、図３に図示する従来の発音割り当て形態、すなわち発音割り当てされていない複数の空きチャンネルが存在し、それらの中から順番に連続したタイムスロットＴＳ１〜ＴＳ３に三和音（第１音〜第３音）の発音を割り当てた場合に、ＣＰＵ１４がタイムスロットＴＳ１においてＲＡＭ１５の読み出し要求を発生するケースでは、タイムスロットＴＳ１〜ＴＳ３において音源１７がＲＡＭ１５からそれぞれ第１音〜第３音の波形データを読み出し終え、次の空きチャンネルのタイムスロットＴＳ４においてＣＰＵ１４がＲＡＭ１５にアクセスするので、上述した一つおきの発音割り当てを行った場合に比べて３倍のアクセス待ち時間を要することになる。
【００１９】
Ｂ．動作  
次に、図４〜図７を参照して実施形態の動作について説明する。以下では、ＣＰＵ１４が実行する初期化処理、発音要求発生処理およびＣＯＵＮＴ＿ＩＮＣ処理の各動作について述べる。
【００２０】
（１）初期化処理の動作
図４は初期化処理の動作を示すフローチャートである。初期化処理は、楽音発生装置１００のパワーオン時に実行される。初期化処理が実行されると、ＣＰＵ４は図４に図示するステップＳＡ１において、音源１７が備える各発音チャンネル（１ｃｈ〜３２ｃｈ）の状態をそれぞれ表す状態フラグＳＴＡＴＵＳ（１）〜ＳＴＡＴＵＳ（３２）をゼロリセットする。状態フラグＳＴＡＴＵＳは「１」の場合に発音状態を表し、「０」の場合に発音割り当てされていない空き状態を表す。また、ステップＳＡ１では、レジスタＢＥＧＩＮ、レジスタＥＮＤ、レジスタＢＥＧＩＮＷＫおよびレジスタＥＮＤＷＫをそれぞれゼロリセットして本処理を終える。
【００２１】
（２）発音要求発生処理の動作
図５〜図６は発音要求発生処理の動作を示すフローチャート、図７は発音要求発生処理からコールされるＣＯＵＮＴ＿ＩＮＣ処理の動作を示すフローチャートである。発音要求発生処理は、ノートオンイベントの発生（鍵盤１０の押鍵）に応じて実行される。発音要求発生処理が実行されると、ＣＰＵ１４は図５に図示されるステップＳＢ１に処理を進め、チャンネル数をカウントするカウンタＣＯＵＮＴＥＲおよび現在チャンネル番号ＮＯＷＣＨに初期値「１」をセットする。
【００２２】
続いて、ステップＳＢ２では、現在チャンネル番号ＮＯＷＣＨで指定される発音チャンネルの状態フラグＳＴＡＴＵＳ（ＮＯＷＣＨ）が「０」、つまり発音割り当てされていない空きチャンネルであるか否かを判断する。空きチャンネルでなければ、ここでの判断結果は「ＮＯ」になり、図６に図示するステップＳＢ３を介してＣＯＵＮＴ＿ＩＮＣ処理を実行する。
【００２３】
ＣＯＵＮＴ＿ＩＮＣ処理が実行されると、ＣＰＵ１４は図７に図示されるステップＳＣ１に進み、カウンタＣＯＵＮＴＥＲおよび現在チャンネル番号ＮＯＷＣＨをインクリメントして歩進させる。次いで、ステップＳＣ２では、歩進された現在チャンネル番号ＮＯＷＣＨの値が「３２」、つまりチャンネルサーチが一巡したかどうかを判断する。チャンネルサーチが一巡していなければ、判断結果は「ＮＯ」になり、ＣＯＵＮＴ＿ＩＮＣ処理を終えるが、チャンネルサーチが一巡すると、上記ステップＳＣ２の判断結果は「ＹＥＳ」になり、ステップＳＣ３に進み、現在チャンネル番号ＮＯＷＣＨを初期値「１」にリセットしてＣＯＵＮＴ＿ＩＮＣ処理を終える。
【００２４】
ステップＳＢ３のＣＯＵＮＴ＿ＩＮＣ処理が完了すると、ＣＰＵ１４はステップＳＢ４に進み、歩進されたカウンタＣＯＵＮＴＥＲが「３２」を超えたか否か、つまり全ての発音チャンネルの中から空きチャンネルを探し終えたかどうか否かを判断する。空きチャンネルを探し終えていなければ、ステップＳＢ４の判断結果は「ＮＯ」になり、図５のステップＳＢ２に処理を戻す。以後、ステップＳＢ２〜ＳＢ４を繰り返すことによって、全発音チャンネルの中から空きチャンネルを探し出す。
【００２５】
そして、歩進された現在チャンネル番号ＮＯＷＣＨで指定される発音チャンネルの状態フラグＳＴＡＴＵＳ（ＮＯＷＣＨ）が「０」の空きチャンネルが見つかると、上記ステップＳＢ２の判断結果は「ＹＥＳ」になり、ステップＳＢ５に進む。ステップＳＢ５では、カウンタＣＯＵＮＴＥＲの値を、レジスタＢＥＧＩＮＷＫおよびレジスタＥＮＤＷＫにストアする。すなわち、空きチャンネルとなっている区間を検出する為に、最初に見つけた空きチャンネルの番号（空きチャンネル先頭番号）をレジスタＢＥＧＩＮＷＫおよびレジスタＥＮＤＷＫの双方にストアしておく。
【００２６】
次いで、ステップＳＢ６では、カウンタＣＯＵＮＴＥＲおよび現在チャンネル番号ＮＯＷＣＨを歩進させ、歩進させた現在チャンネル番号ＮＯＷＣＨの値が「３２」に達してチャンネルサーチが一巡していれば現在チャンネル番号ＮＯＷＣＨを初期値「１」にリセットするＣＯＵＮＴ＿ＩＮＣ処理を実行する。続いて、ステップＳＢ７では、レジスタＥＮＤＷＫの値（空きチャンネル終端番号）からレジスタＢＥＧＩＮＷＫの値（空きチャンネル先頭番号）を減算した値が「３１」、つまり全ての発音チャンネルが発音割り当てされていない空きチャンネルであるかどうかを判断する。
【００２７】
レジスタＥＮＤＷＫに、空きチャンネル終端番号がストアされていない状況では、上記ステップＳＢ７の判断結果は「ＮＯ」になり、ステップＳＢ８に進む。ステップＳＢ８では、歩進された現在チャンネル番号ＮＯＷＣＨで指定される発音チャンネルの状態フラグＳＴＡＴＵＳ（ＮＯＷＣＨ）が「０」、つまり空きチャンネルであるか否かを判断する。空きチャンネルであると、判断結果は「ＹＥＳ」になり、ステップＳＢ９に進み、歩進されたカウンタＣＯＵＮＴＥＲの値を空きチャンネル終端番号としてレジスタＥＮＤＷＫにストアした後、上述のステップＳＢ６に処理を戻す。
【００２８】
以後、ステップＳＢ６〜ＳＢ９では、カウンタＣＯＵＮＴＥＲおよび現在チャンネル番号ＮＯＷＣＨの歩進に応じて空きチャンネルを見つける毎に、その空きチャンネルの番号をレジスタＥＮＤＷＫにストアして空きチャンネル終端番号を更新する。
【００２９】
そして、チャンネルサーチが一巡した時に、レジスタＥＮＤＷＫの値（空きチャンネル終端番号）からレジスタＢＥＧＩＮＷＫの値（空きチャンネル先頭番号）を減算して得られる空きチャンネル区間（ＥＮＤＷＫ−ＢＥＧＩＮＷＫ）が「３１」であった場合、すなわち全ての発音チャンネルが空きチャンネルであると、上述したステップＳＢ７の判断結果が「ＹＥＳ」になり、ステップＳＢ１０に進み、レジスタＣＨに「１」をセットし、続くステップＳＢ１１では、レジスタＣＨの値で指定される発音チャンネル（ＣＨ）の発音を音源１７に指示して本処理を終える。
【００３０】
一方、歩進された現在チャンネル番号ＮＯＷＣＨで指定される発音チャンネルの状態フラグＳＴＡＴＵＳ（ＮＯＷＣＨ）が「１」、つまり発音中のチャンネルを検出すると、上記ステップＳＢ８の判断結果は「ＮＯ」になり、ステップＳＢ１２に進む。ステップＳＢ１２では、空きチャンネル区間（ＥＮＤＷＫ−ＢＥＧＩＮＷＫ）が、レジスタＥＮＤとレジスタＢＥＧＩＮとの減算値以上であるか否かを判断する。
【００３１】
ステップＳＢ１２に進む最初のパスでは、レジスタＥＮＤおよびレジスタＢＥＧＩＮの初期値が共に「０」なので、ステップＳＢ１２の判断結果は「ＹＥＳ」になり、ステップＳＢ１３に進む。ステップＳＢ１３では、レジスタＢＥＧＩＮＷＫの値（空きチャンネル先頭番号）をレジスタＢＥＧＩＮに、レジスタＥＮＤＷＫの値（空きチャンネル終端番号）をレジスタＥＮＤにストアする。これにより、チャンネルサーチで最初に得られた空きチャンネル区間（ＥＮＤＷＫ−ＢＥＧＩＮＷＫ）が、最も長く連続する空きチャンネル区間（ＥＮＤ−ＢＥＧＩＮ）として保存される。
【００３２】
そして、２回目以降のパスでは、上記ステップＳＢ６〜ＳＢ９のチャンネルサーチで新たに得られた空きチャンネル区間（ＥＮＤＷＫ−ＢＥＧＩＮＷＫ）が、最も長く連続する空きチャンネル区間（ＥＮＤ−ＢＥＧＩＮ）以上であるかどうかを判断し、ＥＮＤＷＫ−ＢＥＧＩＮＷＫ＜ＥＮＤ−ＢＥＧＩＮであれば、ステップＳＢ１２の判断結果は「ＮＯ」になり、図６のステップＳＢ３に処理を戻す。
【００３３】
一方、ＥＮＤＷＫ−ＢＥＧＩＮＷＫ≧ＥＮＤ−ＢＥＧＩＮならば、ステップＳＢ１２の判断結果は「ＹＥＳ」になり、上述したステップＳＢ１３に進み、チャンネルサーチで新たに得られた空きチャンネル区間（ＥＮＤＷＫ−ＢＥＧＩＮＷＫ）を、最も長く連続する空きチャンネル区間（ＥＮＤ−ＢＥＧＩＮ）に更新して保存した後、図６のステップＳＢ３に処理を戻す。
【００３４】
そして、図６のステップＳＢ３で歩進されたカウンタＣＯＵＮＴＥＲが「３２」を超えた場合、すなわち全ての発音チャンネルの中から空きチャンネルを探し終えると、前述したステップＳＢ４の判断結果が「ＹＥＳ」になり、ステップＳＢ１４に進む。ステップＳＢ１４では、レジスタＢＥＧＩＮの値が初期値「０」であるか否かを判断する。レジスタＢＥＧＩＮの値が初期値「０」のままであると、判断結果は「ＹＥＳ」となり、この場合、最も長く連続する空きチャンネル区間（ＥＮＤ−ＢＥＧＩＮ）が取得されていない状態であるとして本処理を終える。
【００３５】
これに対し、レジスタＢＥＧＩＮの値が初期値「０」でない場合、すなわち最も長く連続する空きチャンネル区間（ＥＮＤ−ＢＥＧＩＮ）が取得済みであると、上記ステップＳＢ１４の判断結果は「ＮＯ」になり、ステップＳＢ１５に進み、最も長く連続する空きチャンネル区間（ＥＮＤ−ＢＥＧＩＮ）の中央に該当するチャンネル番号（ＢＥＧＩＮ＋ＥＮＤ）／２を算出してレジスタＣＨにストアする。
【００３６】
次いで、ステップＳＢ１６では、レジスタＣＨにストアしたチャンネル番号（ＢＥＧＩＮ＋ＥＮＤ）／２が、音源１７の発音チャンネル数（３２チャンネル）を超えているかどうかを判断する。チャンネル番号（ＢＥＧＩＮ＋ＥＮＤ）／２が、音源１７の発音チャンネル数（３２チャンネル）を超えていると、判断結果は「ＹＥＳ」となり、ステップＳＢ１７に進み、レジスタＣＨにストアされたチャンネル番号（ＢＥＧＩＮ＋ＥＮＤ）／２から３２チャンネル分を減算した後、ステップＳＢ１８に進む。
【００３７】
一方、レジスタＣＨにストアしたチャンネル番号（ＢＥＧＩＮ＋ＥＮＤ）／２が、音源１７の発音チャンネル数（３２チャンネル）を超えていなければ、上記ステップＳＢ１６の判断結果は「ＮＯ」になり、ステップＳＢ１８に進む。ステップＳＢ１８では、レジスタＣＨの値で指定される発音チャンネル（ＣＨ）の発音を音源１７に指示して本処理を終える。
【００３８】
このように、発音要求発生処理では、音源１７が有する複数の発音チャンネルの中から発音割り当てされていない空きチャンネルが最も長く連続する空きチャンネル区間（ＥＮＤ−ＢＥＧＩＮ）を抽出し、その抽出した空きチャンネル区間（ＥＮＤ−ＢＥＧＩＮ）の中央に該当するチャンネル番号（ＢＥＧＩＮ＋ＥＮＤ）／２の発音チャンネルに新たな発音を割り当てるようになっている。
【００３９】
以上説明したように、本実施形態では、ＣＰＵおよび音源がメモリを共用するように構成された楽音発生装置において、音源１７が有する複数の発音チャンネルの中から発音割り当てされていない空きチャンネルが最も長く連続する空きチャンネル区間（ＥＮＤ−ＢＥＧＩＮ）を抽出し、その抽出した空きチャンネル区間（ＥＮＤ−ＢＥＧＩＮ）の中央に該当するチャンネル番号（ＢＥＧＩＮ＋ＥＮＤ）／２の発音チャンネルに新たな発音を割り当て、これにより連続的に発音割り当てされる発音チャンネルを減らすことで音源と共用するメモリへのアクセス待ち時間を最小化するので、メモリアクセス待ちに起因する発音遅れや音切れを回避することが出来る。
【００４０】
なお、上述した実施形態では、発音割り当てされていない空きチャンネルが最も長く連続する空きチャンネル区間（ＥＮＤ−ＢＥＧＩＮ）を探し出し、その区間の中央に該当する空きチャンネルに新たな発音を割り当てるようにしたが、これに限らず、空きチャンネル区間の中で新たに発音割り当てしようとする空きチャンネルが発音中の他の発音チャンネルと隣り合わないようにチャンネル指定する態様や、乱数を用いて使用されるチャンネルが特定の区間に偏らないようにする態様であっても構わない。
【００４１】
以上、本発明の実施の一形態について説明したが、本発明はそれに限定されるものではなく、本願出願の特許請求の範囲に記載された発明とその均等の範囲に含まれる。以下では、本願出願当初の特許請求の範囲に記載された各発明について付記する。
【００４２】
（付記）
［請求項１］
メモリを共用するＣＰＵおよび音源を備えるとともに、当該音源は複数のタイムスロット夫々に対応して割り当てられ、発音要求割り当てに応答して楽音を生成して発音させる発音チャンネルを複数有する楽音発生装置において、
新たな発音要求発生に応答して、発音していない空きの発音チャンネルが連続して割り当てられているタイムスロットが存在する区間の有無を判別する区間判別手段と、
前記区間判別手段により区間が有ると判別された場合は、当該区間を取得するとともに、取得された区間の中で、発音中の発音チャンネルが割り当てられている区間と隣り合わない区間に割り当てられている空きの発音チャンネルに前記新たな発音要求を割り当てる発音割り当て手段と、
を有する楽音発生装置。
【００４３】
［請求項２］
前記発音割り当て手段は、前記複数のタイムスロットの中から発音していない空きの発音チャンネルが連続して割り当てられているタイムスロットが存在する区間を全て抽出し、抽出した区間の内で最も長い区間を取得する請求項１記載の楽音発生装置。
【００４４】
［請求項３］
前記発音割り当て手段は、前記取得された区間の中央に位置するスロットに割り当てられている空きの発音チャンネルに前記新たな発音を割り当てる請求項１記載の楽音発生装置。
【００４５】
［請求項４］
メモリを共用するＣＰＵおよび音源を備えるとともに、当該音源は複数のタイムスロット夫々に対応して割り当てられ、発音要求割り当てに応答して楽音を生成して発音させる発音チャンネルを複数有する楽音発生装置において、前記ＣＰＵに、
新たな発音要求に応答して、発音していない空きの発音チャンネルが連続して割り当てられているタイムスロットが存在する区間の有無を判別する区間判別ステップと、
前記区間が有ると判別された場合は、当該区間を取得するとともに、取得された区間の中で、発音中の発音チャンネルが割り当てられている区間と隣り合わない区間に割り当てられている空きの発音チャンネルに前記新たな発音要求を割り当てる発音割り当てステップと、
を実行させるプログラム。
【符号の説明】
【００４６】
１０  鍵盤
１１  スイッチ部
１２  表示部
１３  ＲＯＭ
１４  ＣＰＵ
１５  ＲＡＭ（共用メモリ）
１６  ＯＲ回路
１７  音源
１８  サウンドシステム
１００  楽音発生装置
【図１】
0005896128.tif 000002
【図２】
0005896128.tif 000003
【図３】
0005896128.tif 000004
【図４】
0005896128.tif 000005
【図５】
0005896128.tif 000006
【図６】
0005896128.tif 000007
【図７】
0005896128.tif 000008