(57)【要約】      （修正有）【課題】楽音発生装置においてバスにかかる負荷を低減するとともに、発音要求した音とは異なる音を発生させないようにする。【解決手段】電子楽器は、メモリから所定チャネル分の波形のサンプルデータを読み出し、各チャネルの破綻判定タイミングの経過前に読み出しが完了されない場合に、当該読み出しが完了しないチャネルの発音について、エントリデータの生成を行わない、発音を停止させる等の所定の制御を実行する。【選択図】図１０
2014016378.tif 000002
【特許請求の範囲】
【請求項１】
夫々割り当てられた波形データに基づき、所定の順序で楽音生成処理を行う複数の発音チャネルと、
当該複数の発音チャネル内の指定された発音チャネルに割り当てられるべき波形データの読み出し要求を受信した場合に、バスで接続されたメモリに記憶された波形データを読み出す読み出し手段と、
前記読み出し手段による前記波形データの読み出しが、前記指定された発音チャネルにおける楽音生成処理の開始前に完了されたか否かを判定する読み出し判定手段と、
前記読み出し判定手段により前記波形データの読み出しが完了しなかったと判定された場合に、前記指定された発音チャネルの発音に関して所定の制御を実行する制御手段と、
を備える楽音発生装置。
【請求項２】
前記読み出し判定手段は、
前記発音チャネルに対応する前記波形データの読み出し要求を受信したことに応じて、前記発音チャネルに対応する第１フラグをオンにする第１フラグオン手段と、
前記読み出し判定手段によって前記波形データの読み出しが前記楽音生成処理の開始前に完了されたと判定された場合に、前記発音チャネルに対応する前記第１フラグをオフにする第１フラグオフ手段と、
前記楽音生成処理の開始時点において、前記発音チャネルに対応する前記第１フラグがオンである場合に、前記バスがオーバーフローしたことを検出して前記発音チャネルに対応する第２フラグをオンにする第２フラグオン手段と、
を有し、
前記制御手段は、
前記第２フラグがオンである場合、前記波形データの読み出し要求に対応する前記発音チャネルの発音に関して前記所定の制御を実行する、
請求項１に記載の楽音発生装置。
【請求項３】
前記制御手段は、前記所定の制御として、前記指定された発音チャネルにより発音すべき楽音を停止させる、
請求項１に記載の楽音発生装置。
【請求項４】
夫々割り当てられた波形データに基づき、所定の順序で楽音生成処理を行う複数の発音チャネルを有する楽音発生装置が実行する楽音発生方法であって、
当該複数の発音チャネル内の指定された発音チャネルに割り当てられるべき波形データの読み出し要求を受信した場合に、バスで接続されたメモリに記憶された波形データを読み出す読み出しステップと、
前記読み出しステップによる前記波形データの読み出しが、前記指定された発音チャネルにおける楽音生成処理の開始前に完了されたか否かを判定する読み出し判定ステップと、
前記読み出し判定ステップにより前記波形データの読み出しが完了しなかったと判定された場合に、前記指定された発音チャネルの発音に関して所定の制御を実行する制御ステップと、
を含む楽音発生方法。
【請求項５】
夫々割り当てられた波形データに基づき、所定の順序で楽音生成処理を行う複数の発音チャネルを有する楽音発生装置として用いられるコンピュータに、
当該複数の発音チャネル内の指定された発音チャネルに割り当てられるべき波形データの読み出し要求を受信した場合に、バスで接続されたメモリに記憶された波形データを読み出す読み出しステップと、
前記読み出しステップによる前記波形データの読み出しが、前記指定された発音チャネルにおける楽音生成処理の開始前に完了されたか否かを判定する読み出し判定ステップと、
前記読み出し判定ステップにより前記波形データの読み出しが完了しなかったと判定された場合に、前記指定された発音チャネルの発音に関して所定の制御を実行する制御ステップと、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、楽音発生装置、楽音発生方法及びプログラムに関する。
【背景技術】
【０００２】
従来、サンプリングした波形のデータを記憶しておき、このデータを読み出して、種々の周波数の楽音を発生する楽音発生装置が知られている。
例えば、特許文献１には、ＰＣＭ（Ｐｕｌｓｅ  Ｃｏｄｅｄ  Ｍｏｄｕｌａｔｉｏｎ）によって符号化された波形のデータを、１サンプル周期における各チャネルのタイムスロット毎に時分割で音源のデータとして読み出し、複数チャネルの楽音を合成して発生する技術が記載されている。
即ち、特許文献１には、各チャネルのタイムスロットにおいて、メモリから波形のデータを読み出し、楽音を合成して出力する処理を繰り返し行う技術が記載されている。
【０００３】
しかしながら、特許文献１に記載された技術を含め、従来の楽音発生装置においては、コスト削減の要求から、波形のデータを記憶するメモリを他の用途と共有する共有メモリとして構成している場合がある。
波形のデータを記憶するメモリを共有メモリとした場合、複数のプロセスによってメモリへのアクセスが衝突する可能性が高まり、メモリへのアクセスを待たされる結果、処理の遅延を招く場合があった。
特に、同時に発生可能な楽音のチャネル数が増加した場合、このような状況が顕著に現れることとなる。
このように、従来の楽音発生装置においては、楽音を発生するための処理効率が十分に高いものではなかった。
【０００４】
そこで、特許文献２には、楽音発生装置において楽音を発生するための処理効率を高めるために、次のような技術が記載されている。即ち、発音が行われている各チャネルについて、メモリの読み出しアドレスを示すエントリデータの生成を行い、メモリインターフェースに一旦ストアして、エントリデータ及びバスの空き状態に基づいて、メモリから所定チャネル分の波形のサンプルデータを読み出す技術が記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００３−１５７０８２号公報
【特許文献２】特願２０１２−０５２６１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献２に記載された技術では、エントリデータの処理可能データ数の上限を超えたりすること等によって、バスの負荷が増大してメモリ帯域以上のアクセスが生じる場合がある。このような場合、音源部の波形生成処理の開始タイミングまでに必要となる波形のデータが受信できず、その結果、発音要求した音とは異なる音が発生してしまう。
【０００７】
本発明は、このような状況に鑑みてなされたものであり、楽音発生装置においてバスにかかる負荷を低減するとともに、発音要求した音とは異なる音を発生させないようにすることを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、本発明の一態様の楽音発生装置は、
夫々割り当てられた波形データに基づき、所定の順序で楽音生成処理を行う複数の発音チャネルと、
当該複数の発音チャネル内の指定された発音チャネルに割り当てられるべき波形データの読み出し要求を受信した場合に、バスで接続されたメモリに記憶された波形データを読み出す読み出し手段と、
前記読み出し手段による前記波形データの読み出しが、前記指定された発音チャネルにおける楽音生成処理の開始前に完了されたか否かを判定する読み出し判定手段と、
前記読み出し判定手段により前記波形データの読み出しが完了しなかったと判定された場合に、前記指定された発音チャネルの発音に関して所定の制御を実行する制御手段と、
を備える。
【発明の効果】
【０００９】
本発明によれば、楽音発生装置においてバスにかかる負荷を低減するとともに、発音要求した音とは異なる音を発生させないようにすることが可能となる。
【図面の簡単な説明】
【００１０】
【図１】本発明の一実施形態に係る楽音発生装置を備えた電子楽器のハードウェアの構成を示すブロック図である。
【図２】楽音発生装置の構成を示すブロック図である。
【図３】波形生成部の具体的構成を示すブロック図である。
【図４】音源制御パラメータのフォーマットを示す模式図である。
【図５】波形メモリインターフェース部の具体的構成を示すブロック図である。
【図６】バストラフィックモニタ部の構成例を示すブロック図である。
【図７】エントリデータのフォーマットを示す模式図である。
【図８】リクエストステータス情報のフォーマットを示す模式図である。
【図９】サンプルデータバッファ用ＲＡＭにおける記憶領域のフォーマットを示す模式図である。
【図１０】バス破綻検出部の具体的構成を示すブロック図である。
【図１１】マスタカウンタと各チャネルのタイムスロットとの関係を示す模式図である。
【図１２】電子楽器における楽音の生成手順を示す模式図である。
【図１３】ＲＡＭにエントリデータが記憶される状態を示す模式図である。
【図１４】電子楽器における全体動作のタイムチャートを示す模式図である。
【図１５】発音停止中のチャネルのフラグ動作を示す模式図である。
【図１６】発音継続中のチャネルについて波形のサンプルデータを取得できた場合のフラグ動作を示す模式図である。
【図１７】発音継続中のチャネルについて波形のサンプルデータを取得できなかった場合のフラグ動作を示す模式図である。
【図１８】エントリデータ生成処理を示すフローチャートである。
【図１９】波形生成処理を示すフローチャートである。
【図２０】バス破綻検出処理を示すフローチャートである。
【図２１】エントリデータ生成処理、波形生成処理、及びバス破綻検出処理の相互の処理関係を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明の実施形態について、図面を用いて説明する。
【００１２】
［全体構成］
図１は、本発明の一実施形態に係る楽音発生装置を備えた電子楽器のハードウェアの構成を示すブロック図である。
楽音発生装置２０は、例えば電子楽器１の音源として構成される。なお、本実施形態において、電子楽器１は電子ピアノ等の鍵盤楽器として実現される場合を例に挙げて説明するが、他の楽器として構成することも可能である。
【００１３】
図１において、電子楽器１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）及びＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等からなるメモリ１２と、メモリコントローラ１３と、バス１４と、入力部１５と、楽音発生装置２０と、ミキサ２１と、を備えている。
【００１４】
ＣＰＵ１１は、メモリ１２内にあるＲＯＭに記録されているプログラムに従って各種の処理を実行する。例えば、ＣＰＵ１１は、鍵盤からなる入力部１５を介して入力された押鍵操作に対応する音を楽音発生装置２０に発生させる処理を実行したり、ユーザによって入力される電子楽器１の設定に関する処理を実行したりする。
【００１５】
また、メモリ１２内にあるＲＡＭには、ＣＰＵ１１や楽音発生装置２０が各種の処理を実行する上において必要なデータ等が適宜記憶される。即ち、このＲＡＭは、電子楽器１全体の各機能部によって共有される共有メモリとなっている。具体的には、ＲＡＭには、ＣＰＵ１１が画面表示等の各種処理を実行する際に用いるパラメータ等が記憶される。
【００１６】
メモリコントローラ１３は、ＣＰＵ１１や楽音発生装置２０によるメモリへのアクセスを制御する。具体的には、メモリコントローラ１３は、バスマスタとして動作するＣＰＵ１１や楽音発生装置２０に対して、バススレーブとして動作し、バスマスタからの要求に応じて、指定されたアドレスからデータを読み出す。
【００１７】
ＣＰＵ１１、メモリ１２は、バス１４を介して相互に接続されている。このバス１４にはまた、入力部１５、楽音発生装置２０も接続されている。
【００１８】
入力部１５は、鍵盤及び各種情報を入力するためのスイッチを備えている。そして、入力部１５は、鍵が押下された場合に、その鍵を識別するための鍵番号や、鍵の押下の強さを示す情報（以下、「ベロシティ」と称する。）をＣＰＵ１１に出力したり、ユーザによって入力された各種情報をＣＰＵ１１に出力したりする。
【００１９】
この電子楽器１には、これ以外にも、画像や音声を出力するためのディスプレイや、スピーカ及びＤＡＣ等を有していてもよい。また、電子楽器１の制御のための各種プログラムやデータを記憶するハードディスクあるいはＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等が付加されていてもよい。
【００２０】
楽音発生装置２０は、ＣＰＵ１１の指示に応じて、メモリ１２に記憶された波形データを読み出して、楽音（具体的には楽音を表すデジタル信号）を発生する。本実施形態において、楽音発生装置２０は、１２８チャネルの音を同時に発音可能なポリフォニック機能を有し、１サンプル周期を１２８分割した１期間（タイムスロット）毎に、各チャネルｃｈ０〜ｃｈ１２７の音を発生する処理を行うものとして説明する。なお、楽音発生装置２０の具体的構成については後述する。
【００２１】
ミキサ２１は、楽音発生装置２０によって発生された楽音を合成し、図示していないＤＡＣ等に出力する。このＤＡＣは、ミキサ２１から入力された楽音を表すデジタル信号をアナログ信号に変換し、スピーカ等に出力する。
【００２２】
［楽音発生装置２０の構成］
次に、楽音発生装置２０の構成について説明する。
図２は、楽音発生装置２０の構成を示すブロック図である。
図２において、楽音発生装置２０は、波形生成部１００と、波形メモリインターフェース部２００と、バス破綻検出部３００とを備えている。
この波形生成部１００、波形メモリインターフェース部２００及びバス破綻検出部３００は、夫々、バス１４に接続されている。
波形生成部１００は、波形メモリインターフェース部２００に対して、エントリリクエスト、エントリデータ及びアドレスを供給し、逆に波形メモリインターフェース部２００からデータを受け取っている。また、波形生成部１００は、バス破綻検出部３００に対して、エントリリクエスト及びエントリデータを供給し、逆にバス破綻検出部３００から破綻情報を受け取っている。なお、エントリリクエスト、エントリデータ及びアドレスの詳細については後述する。
波形メモリインターフェース部２００は、バス破綻検出部３００に対して、サンプル受信完了信号及びサンプル受信完了チャネル番号を供給している。なお、サンプル受信完了信号及びサンプル受信完了チャネル番号については後述する。
【００２３】
［波形生成部１００の構成］
図３は、波形生成部１００の具体的構成を示すブロック図である。
波形生成部１００は、楽音発生装置２０のシステムクロックを基に生成されるマスタカウンタｍｃに従って、動作する。具体的には、１１ビットのカウンタとして構成されるマスタカウンタｍｃの上位７ビットによって、各チャネルｃｈ０〜ｃｈ１２７のタイムスロット１２８個が規定される。そして、マスタカウンタｍｃの下位４ビットは、夫々のタイムスロットをさらに１６フィールドに分割している。
【００２４】
波形生成部１００は、順次入力されるマスタカウンタｍｃに従って、各チャネルｃｈ０〜ｃｈ１２７のタイムスロットが開始されることをトリガとして、夫々のチャネルに対応するメモリ１２のアドレスを算出し、そのチャネルのエントリ情報として波形メモリインターフェース部２００に出力する。
そして、次のサンプリング周期における当該チャネルのタイムスロット終了タイミングまでに、波形メモリインターフェース部２００から入力される波形データを用いて楽音を表すデジタル信号を生成し、ミキサ２１に出力する。
【００２５】
図３において、波形生成部１００は、音源制御パラメータ用ＲＡＭ１０１と、モードレジスタ１０２と、アドレスレジスタ１０３〜１０５と、ピッチレジスタ１０６と、セレクタ１０７〜１０９と、減算器１１０と、歩進値レジスタ１１１と、加算器１１２と、エントリデータ生成部１１３と、リードアドレス演算回路１１４と、前回歩進値レジスタ１１５と、波形演算部１１６と、ＲＡＭ調停部１１７と、を備えている。なお、セレクタ１０７〜１０９には、波形生成部１００における処理内容に応じて、入力信号のいずれを選択するかを示す選択信号がＣＰＵ（不図示）から入力され、各処理のステージにおいて使用されるデータが次段の処理に受け渡される。
ＲＡＭ調停部１１７は、ＣＰＵ１１からのバス１４を介した上述の各レジスタに対するアクセス、及び、上述のセレクタの動作の選択を制御する。
音源制御パラメータ用ＲＡＭ１０１には、各チャネルｃｈ０〜ｃｈ１２７に対応する記憶領域が形成され、夫々の記憶領域に、音源を制御する各種パラメータ（以下、「音源制御パラメータ」と称する。）が記憶されている。
【００２６】
図４は、音源制御パラメータ用ＲＡＭ１０１に記憶される音源制御パラメータのフォーマットを示す模式図である。
図４において、音源制御パラメータ用ＲＡＭ１０１には、チャネルｃｈ０〜チャネルｃｈ１２７に対応する記憶領域が形成されており、各チャネルの記憶領域には、波形アドレス整数部Ａと、波形アドレス小数部ａと、アドレス歩進値ｎと、再生モード値ｍと、再生ピッチデータ整数部Ｐと、再生ピッチデータ小数部ｐと、波高値Ｗとが記憶されている。なお、図４に示すアドレスは模式的に各記憶領域を表したものである。
波形アドレス整数部Ａは、メモリ１２の読み出しアドレスにおける整数部を表し、波形アドレス小数部ａは、メモリ１２の読み出しアドレスにおける小数部を表している。
【００２７】
アドレス歩進値ｎは、メモリ１２における現在の読み出しアドレスからの歩進値を表している。
再生モード値ｍは、楽音をＰＣＭに基づいて再生するか、あるいは、差分ＰＣＭに基づいて再生するかを示す再生モードを表している。
再生ピッチデータ整数部Ｐは、波形のサンプルデータを読み出す際の音高に従うピッチ幅における整数部を表し、再生ピッチデータ小数部ｐは、ピッチ幅における整数部を表している。
波高値Ｗは、前回のサンプリング周期でメモリ１２から読み出されたサンプルデータの波高値を表している。
【００２８】
図３に戻り、モードレジスタ１０２は、ＲＡＭ調停部１１７を介して音源制御パラメータ用ＲＡＭ１０１から読み出された再生モード値ｍを一時的に記憶し、記憶している再生モード値ｍをエントリデータ生成部１１３に出力する。
アドレスレジスタ１０３は、加算器１１２によって算出されたアドレス（メモリ１２における次の読み出しアドレス）の波形アドレス整数部Ａを一時的に記憶し、記憶している波形アドレス整数部Ａをセレクタ１０９、減算器１１０及びエントリデータ生成部１１３に出力する。
【００２９】
アドレスレジスタ１０４は、ＲＡＭ調停部１１７を介して音源制御パラメータ用ＲＡＭ１０１から読み出された波形アドレス整数部Ａを一時的に記憶し、記憶している波形アドレス整数部Ａをセレクタ１０８、減算器１１０、エントリデータ生成部１１３及びリードアドレス演算回路１１４に出力する。
アドレスレジスタ１０５は、セレクタ１０７から入力された波形アドレス小数部ａを一時的に記憶し、記憶している波形アドレス小数部ａをセレクタ１０８，１０９及び波形補間処理部１１６ａに出力する。
【００３０】
ピッチレジスタ１０６は、ＲＡＭ調停部１１７を介して音源制御パラメータ用ＲＡＭ１０１から読み出された再生ピッチデータ整数部Ｐ及び再生ピッチデータ小数部ｐを一時的に記憶し、記憶している再生ピッチデータ整数部Ｐ及び再生ピッチデータ小数部ｐを加算器１１２に出力する。
セレクタ１０７は、加算器１１２によって算出されたアドレス（メモリ１２における次の読み出しアドレス）の波形アドレス小数部ａあるいは音源制御パラメータ用ＲＡＭ１０１から読み出された波形アドレス小数部ａのいずれかを選択し、アドレスレジスタ１０５に出力する。
【００３１】
セレクタ１０８は、アドレスレジスタ１０４から入力された波形アドレス整数部Ａあるいはアドレスレジスタ１０５から入力された波形アドレス小数部ａのいずれかを選択し、加算器１１２に出力する。
セレクタ１０９は、アドレスレジスタ１０３から入力された波形アドレス整数部Ａと、歩進値レジスタ１１１から入力されたアドレス歩進値ｎと、アドレスレジスタ１０５から入力された波形アドレス小数部ａと、波形演算部１１６から入力された波高値Ｗとのいずれかを選択してＲＡＭ調停部１１７を介して音源制御パラメータ用ＲＡＭ１０１に出力する。
【００３２】
減算器１１０は、アドレスレジスタ１０３によって入力された次の読み出しアドレスにおける波形アドレス整数部Ａから、アドレスレジスタ１０４によって入力された現在の読み出しアドレスにおける波形アドレス整数部Ａを減算してアドレス歩進値ｎを算出する。そして、減算器１１０は、算出したアドレス歩進値ｎを歩進値レジスタ１１１に出力する。
歩進値レジスタ１１１は、減算器１１０から入力されたアドレス歩進値ｎを一時的に記憶し、記憶しているアドレス歩進値ｎをエントリデータ生成部１１３に出力する。
【００３３】
加算器１１２は、セレクタ１０８から入力された波形アドレス整数部Ａあるいは波形アドレス小数部ａと、ピッチレジスタ１０６から入力された再生ピッチデータ整数部Ｐあるいは再生ピッチデータ小数部ｐとを夫々加算する。そして、加算器１１２は、加算結果をアドレスレジスタ１０３あるいはセレクタ１０７に出力する。なお、加算器１１２は、波形アドレス小数部ａと再生ピッチデータ小数部ｐとの加算によって整数への繰り上がりが発生した場合、キャリー信号を発生し、波形アドレス整数部Ａと再生ピッチデータ整数部Ｐとの加算結果に繰り上がりを反映させる。
【００３４】
エントリデータ生成部１１３は、マスタカウンタｍｃのカウントアップに動機して動作し、モードレジスタ１０２から入力される再生モード値ｍに従って、次に発生する楽音のデータをメモリ１２から読み出すための情報（以下、「エントリデータ」と称する）を生成する。このエントリデータは、次のサンプリング周期で発生する楽音のデータをメモリ１２から読み出すためのパラメータの集合である。
【００３５】
具体的には、エントリデータ生成部１１３には、マスタカウンタｍｃと、モードレジスタ１０２からの再生モード値ｍと、歩進値レジスタ１１１からのアドレス歩進値ｎと、アドレスレジスタ１０３からの波形アドレス整数部Ａと、アドレスレジスタ１０４からの波形アドレス整数部Ａとが入力される。そして、エントリデータ生成部１１３は、入力されている再生モード値ｍがＰＣＭに基づいて再生することを表している場合、アドレスレジスタ１０３から入力された波形アドレス整数部Ａをメモリ１２の読み出しアドレス（以下、適宜「リクエストアドレス」と称する。）に設定する。一方、エントリデータ生成部１１３は、入力されている再生モード値ｍが差分ＰＣＭに基づいて再生することを表している場合、アドレスレジスタ１０４から入力された波形アドレス整数部Ａ及びアドレス歩進値ｎとを加算した結果をメモリ１２の読み出しアドレス（リクエストアドレス）に設定する。
【００３６】
そして、エントリデータ生成部１１３は、設定したリクエストアドレスと、読み出すデータサイズを表すワード数（以下、適宜「リクエストワード数」と称する。）と、チャネル番号（ｃｈ０〜ｃｈ１２７のいずれか）と、発音開始であるか否かを表す開始フラグｆと、再生モード値ｍとをエントリデータとして、波形メモリインターフェース部２００及びバス破綻検出部３００に出力する。このとき、エントリデータ生成部１１３は、波形メモリインターフェース部２００及びバス破綻検出部３００に対してエントリデータを出力すること表すエントリリクエスト信号を有効な状態（例えばハイレベル）とした上で、エントリデータを出力する。
【００３７】
なお、入力されている再生モード値ｍがＰＣＭに基づいて再生することを表している場合、読み出しアドレスを基準として、波形のサンプルデータにおける１サンプル分を表すリクエストワード数が指定される。一方、入力されている再生モード値ｍが差分ＰＣＭに基づいて再生することを表している場合、読み出しアドレスを基準として、歩進数に対応するサンプル分を表すリクエストワード数が指定される。即ち、差分ＰＣＭにおいては、波形のサンプルデータとして、先行するサンプルとの差分のみが示されているため、歩進数が２以上である場合、現在のアドレスから読み出しアドレスまでの間のサンプルデータを累積するために、これらを読み出すためのリクエストワード数が指定される。
【００３８】
ここで、エントリデータ生成部１１３は、マスタカウンタｍｃに同期して、各チャネルのタイムスロット開始とともに、当該チャネルのエントリデータを波形メモリインターフェース部２００及びバス破綻検出部３００に出力する。このエントリデータの出力は、メモリ１２へのアクセスを伴わないため、波形のサンプルデータを読み出し、楽音を発生させる処理まで行う場合に比べ、早期に終了する。
そして、各チャネルのタイムスロットに制約されることなく、以後、次のサンプリング周期における当該チャネルのタイムスロット終了までに波形メモリインターフェース部２００がメモリ１２から読み出した波形のサンプルデータを用いて、波形演算部１１６によって楽音が発生される。
【００３９】
さらに、エントリデータ生成部１１３は、バス破綻検出部３００から出力される破綻情報（図１０において後述する）を受信する。エントリデータ生成部１１３は、破綻情報を受信したことに応じて、該当するチャネルのエントリデータの生成を禁止する。
なお、破綻情報は、エントリデータ生成部１１３に代えて、後述する波形演算部１１６が受信するようにしてもよい。波形演算部１１６は、破綻情報を受信したことに応じて、楽音の発生を停止する。
【００４０】
リードアドレス演算回路１１４は、順次入力されるマスタカウンタｍｃに従って、波形メモリインターフェース部２００におけるサンプルデータバッファ用ＲＡＭ２５０の読み出しアドレスを算出し、サンプルデータバッファ用ＲＡＭ２５０に出力する。具体的には、リードアドレス演算回路１１４には、マスタカウンタｍｃと、再生モード値ｍと、アドレスレジスタ１０３が記憶している波形アドレス整数部Ａと、アドレスレジスタ１０４が記憶している波形アドレス整数部Ａとが入力される。そして、リードアドレス演算回路１１４は、アドレスレジスタ１０３が記憶している波形アドレス整数部Ａあるいはアドレスレジスタ１０４が記憶している波形アドレス整数部Ａを基に、チャネルｃｈ０〜ｃｈ１２７毎に、再生モード値ｍに対応するサンプルデータバッファ用ＲＡＭ２５０のアドレスを生成する。リードアドレス演算回路１１４は、マスタカウンタｍｃに同期して、チャネルｃｈ０〜ｃｈ１２７毎に、生成したサンプルデータバッファ用ＲＡＭ２５０のアドレスをサンプルデータバッファ用ＲＡＭ２５０に出力する。
【００４１】
前回歩進値レジスタ１１５は、ＲＡＭ調停部１１７を介して音源制御パラメータ用ＲＡＭ１０１から読み出されたアドレス歩進値ｎを一時的に記憶し、記憶しているアドレス歩進値ｎを波形演算部１１６に出力する。前回歩進値レジスタ１１５が記憶しているアドレス歩進値ｎは、各チャネルにおいて、前回のサンプリング周期において算出されたアドレス歩進値である。
【００４２】
波形演算部１１６は、波形メモリインターフェース部２００のサンプルデータバッファ用ＲＡＭ２５０から読み出された波形のサンプルデータから、再生する楽音を表すデジタル信号を生成し、生成したデジタル信号をミキサ２１に出力する。具体的には、波形演算部１１６には、波形アドレス小数部ａと、サンプルデータバッファ用ＲＡＭ２５０から読み出された波形のサンプルデータとが入力される。そして、波形演算部１１６は、サンプルデータバッファ用ＲＡＭ２５０から読み出された波形のサンプルデータを参照し、波高値Ｗを算出する。
【００４３】
また、波形演算部１１６は、波形アドレス小数部ａを用いて、波形のサンプルデータ間を補間処理（例えば線形補間等）する波形補間処理部１１６ａを備えている。そして、波形演算部１１６は、サンプルデータ間のアドレスが指定された場合には、波形補間処理部１１６ａによって波形の補間処理を行うことにより、波高値Ｗを算出する。即ち、波形演算部１１６によって、楽音を示すデジタル信号が生成される。そして、波形演算部１１６は、算出した波高値Ｗをセレクタ１０９に出力する。また、波形演算部１１６は、生成したデジタル信号をミキサ２１に出力する。
【００４４】
［波形メモリインターフェース部２００の構成］
波形メモリインターフェース部２００は、波形生成部１００からエントリデータが入力されると、入力されたエントリデータを一時的に記憶し、バス１４が空き状態であるタイミングで、記憶しているエントリデータに対応する波形のサンプルデータをメモリ１２から読み出す。
そして、波形メモリインターフェース部２００は、読み出した波形のサンプルデータを一時的に記憶し、波形生成部１００からの読み出し要求（リードアドレス演算回路１１４によるアドレスの入力）に対応して、記憶している波形のサンプルデータを波形生成部１００に出力する。
【００４５】
図５は、波形メモリインターフェース部２００の具体的構成を示すブロック図である。
図５において、波形メモリインターフェース部２００は、エントリ処理部２１０と、エントリ用ＲＡＭ２２０と、リクエストステータス用ＲＡＭ２３０と、メモリバスインターフェース部２４０と、サンプルデータバッファ用ＲＡＭ２５０とを備えている。
【００４６】
エントリ処理部２１０は、波形生成部１００からエントリデータが入力されると、エントリ用ＲＡＭ２２０における発音チャネル毎に形成された領域にエントリデータを記憶する。また、エントリ処理部２１０は、エントリデータに従って、メモリ１２から波形のサンプルデータを読み出すと、読み出した結果を基に、前回の読み出し要求の内容を表すリクエストステータス情報（後述）を生成する。そして、エントリ処理部２１０は、リクエストステータス用ＲＡＭ２３０におけるチャネル毎に形成された領域にリクエストステータス情報を記憶する。
【００４７】
また、エントリ処理部２１０は、リクエストステータス情報とエントリデータとに基づいて、メモリ１２から波形のサンプルデータを読み出すための具体的な情報（以下、適宜「メモリリクエスト情報」と称する。）を生成する。エントリ処理部２１０は、メモリリクエスト情報に従って、バス１４を介してメモリ１２から波形のサンプルデータを読み出す。
【００４８】
さらに、エントリ処理部２１０は、バスマスタとして機能する各部に備えられたバストラフィックモニタ部２１７からのモニタ信号を参照し、メモリ１２から一度に読み出すデータ量を決定する。即ち、エントリ処理部２１０は、単位時間当たりのバスの空き時間がより長い場合、メモリ１２から一度に読み出すデータ量をより大きく設定し、単位時間当たりのバスの空き時間がより短い場合、メモリ１２から一度に読み出すデータ量をより小さく設定する。
【００４９】
図５に示すように、エントリ処理部２１０は、エントリデータ制御部２１１と、書き込みポインタ用レジスタ２１２と、インクリメンタ２１２ａと、読み出しポインタ用レジスタ２１３と、インクリメンタ２１３ａと、バス調停部２１４と、エントリデータ用レジスタ２１５と、ステータスデータ用レジスタ２１６と、バストラフィックモニタ部２１７と、メモリリクエスト制御部２１８とを備えている。
エントリデータ制御部２１１は、波形生成部１００からエントリリクエスト信号を受信すると、書き込みポインタ用レジスタ２１２にラッチ信号を入力し、書き込みポインタが示すアドレスを１インクリメントさせる。
【００５０】
また、エントリデータ制御部２１１には、エントリデータ用レジスタ２１５からのエントリデータと、ステータスデータ用レジスタ２１６からのリクエストステータス情報とが入力される。そして、エントリデータ制御部２１１は、エントリデータとリクエストステータス情報とを基に、メモリリクエスト情報を生成する。例えば、エントリデータ制御部２１１は、エントリデータに示されているアドレス及びワード数と、リクエストステータス情報に示されているアドレス及び読み出し済みのワード数とを参照し、既に読み出されているデータに続くデータを読み出すように、メモリリクエスト情報を生成する。そして、エントリデータ制御部２１１は、生成したメモリリクエスト情報をメモリリクエスト制御部２１８に出力する。
【００５１】
ここで、エントリデータ制御部２１１は、バストラフィックモニタ部２１７及び他のバスマスタに備えられたバストラフィックモニタ部からのトラフィック情報を参照し、メモリ１２から一度に読み出すデータ量を動的に決定しながら、決定した読み出しデータ量をメモリリクエスト情報に含めている。そのため、メモリ１２から波形メモリインターフェース部２００に波形のサンプルデータが読み出される動作は、バス１４の空き状態に応じて効率的に行われることとなる。
【００５２】
また、メモリ１２からメモリリクエスト情報に示された波形のサンプルデータの読み出しが完了すると、メモリリクエスト制御部２１８からエントリデータ制御部２１１に受信完了を示す信号が入力される。そして、エントリデータ制御部２１１は、メモリ１２からの次の読み出しの準備が完了した場合に、新たなメモリリクエスト情報をメモリリクエスト制御部２１８に出力し、引き続くデータの読み出しが行われる。
【００５３】
さらに、エントリデータ制御部２１１は、メモリリクエスト制御部２１８を介して各チャネルの波形のサンプルデータの読み出しが行われると、ライトイネーブル信号とともに、その読み出し結果に対応するリクエストステータス用ＲＡＭ２３０のアドレス（各チャネルの記憶領域を特定するアドレス）及び書き込みデータ（即ちリクエストステータス情報）をリクエストステータス用ＲＡＭ２３０に出力する。また、エントリデータ制御部２１１は、エントリ用ＲＡＭ２２０からエントリデータを読み出す場合、同一チャネルの記憶領域を示すアドレスをリクエストステータス用ＲＡＭ２３０に出力し、該当するアドレスからリクエストステータス情報を読み出してステータスデータ用レジスタ２１６に記憶させる。
【００５４】
書き込みポインタ用レジスタ２１２は、エントリ用ＲＡＭ２２０におけるエントリデータの書き込みアドレスを示す書き込みポインタを記憶している。この書き込みポインタの値は、エントリリクエスト信号が入力される毎にエントリデータ制御部２１１から出力されるラッチ信号に対応して、インクリメンタ２１２ａによって１つずつ増加し、最大値に達すると０に戻る。これにより、エントリ用ＲＡＭ２２０の各領域が循環的に指定される。
【００５５】
読み出しポインタ用レジスタ２１３は、エントリ用ＲＡＭ２２０におけるエントリデータの読み出しアドレスを示す読み出しポインタを記憶している。この読み出しポインタの値は、エントリデータ制御部２１１がエントリ用ＲＡＭ２２０からエントリデータの読み出しを行う毎に、その読み出し要求信号をラッチ信号として、インクリメンタ２１３ａによって１つずつ増加し、最大値に達すると０に戻る。これにより、エントリ用ＲＡＭ２２０の各領域が循環的に指定される。
【００５６】
バス調停部２１４は、書き込みポインタ用レジスタ２１２からの書き込みアドレスの指定と、読み出しポインタ用レジスタ２１３からの読み出しアドレスの指定とを調停する。調停の結果、書き込みポインタ用レジスタ２１２からの書き込みアドレスの指定を受け付けた場合、バス調停部２１４は、書き込みが可能であることを示すライトイネーブル信号とともに、書き込みポインタが示すアドレスをエントリ用ＲＡＭ２２０に出力する。一方、調停の結果、読み出しポインタ用レジスタ２１３からの読み出しアドレスの指定を受け付けた場合、バス調停部２１４は、読み出しポインタが示すアドレスをエントリ用ＲＡＭ２２０に出力する。
【００５７】
エントリデータ用レジスタ２１５は、エントリ用ＲＡＭ２２０から読み出されたエントリデータを一時的に記憶し、記憶しているエントリデータをエントリデータ制御部２１１に出力する。
ステータスデータ用レジスタ２１６は、リクエストステータス用ＲＡＭ２３０から読み出されたリクエストステータス情報を一時的に記憶し、記憶しているリクエストステータス情報をエントリデータ制御部２１１に出力する。
【００５８】
バストラフィックモニタ部２１７は、バスマスタとしての波形メモリインターフェース部２００がバス１４のアクセス権を取得したことを表すビジー信号を出力した回数をカウントし、１サンプル周期毎にカウント値をエントリデータ制御部２１１に出力する。なお、バストラフィックモニタ部２１７のカウント値は、１サンプル周期毎にリセットされる。
図６は、バストラフィックモニタ部２１７の構成例を示すブロック図である。
図６において、バストラフィックモニタ部２１７は、インクリメンタ２１７ａと、セレクタ２１７ｂと、レジスタ２１７ｃとを備えている。
【００５９】
インクリメンタ２１７ａには、メモリバスインターフェース部２４０からのビジー信号及びレジスタ２１７ｃの出力信号（カウント値）が入力される。そして、インクリメンタ２１７ａは、ビジー信号が入力されることに対応して、レジスタ２１７ｃの出力信号を１インクリメントして、セレクタ２１７ｂに出力する。
【００６０】
セレクタ２１７ｂには、インクリメンタ２１７ａの出力信号と、ゼロ信号と、マスタカウンタｍｃとが入力される。ゼロ信号は、常にゼロの値を示す信号である。そして、セレクタ２１７ｂは、マスタカウンタｍｃの値がゼロとなった場合に、ゼロ信号を選択し、マスタカウンタｍｃの値がゼロ以外の場合に、インクリメンタ２１７ａの出力信号を選択する。セレクタ２１７ｂによって選択された信号は、レジスタ２１７ｃに出力される。
レジスタ２１７ｃには、システムクロックが入力され、各クロックの立ち上がりに同期して、セレクタ２１７ｂの出力信号が示す値を保持する。レジスタ２１７ｃは、保持している値を示す出力信号（トラフィック情報）をインクリメンタ２１７ａ及びエントリデータ制御部２１１に出力する。
【００６１】
図５に戻り、メモリリクエスト制御部２１８は、エントリデータ制御部２１１からメモリリクエスト情報が入力されると、メモリリクエスト情報に示されているメモリ１２のアドレス及び読み出すワード数を参照して、メモリ１２から波形のサンプルデータを読み出す。このとき、メモリリクエスト制御部２１８は、メモリバスインターフェース部２４０を介してバス１４のアクセス権が取得された後に、メモリ１２から波形のサンプルデータを読み出す。
【００６２】
また、メモリリクエスト制御部２１８は、メモリバスインターフェース部２４０からサンプル受信完了信号（メモリ１２からのデータの読み出しが完了したことを示す信号）が入力されると、エントリデータ制御部２１１にデータの読み出しが完了したことを通知し、さらなるデータの読み出しを受け付ける状態となる。
エントリ用ＲＡＭ２２０は、楽音発生装置２０のローカルメモリとして備えられ、波形生成部１００から入力されたエントリデータを記憶する。
【００６３】
図７は、エントリ用ＲＡＭ２２０に記憶されるエントリデータのフォーマットを示す模式図である。
図７において、エントリ用ＲＡＭ２２０には、チャネルｃｈ０〜ｃｈ１２７が同時発音された場合に対応可能な数、即ち、１２８個の記憶領域が形成されており、各記憶領域には、再生モード値ｍと、発音開始であるか否かを表す開始フラグｆと、リクエストワード数ＲＷと、チャネル番号ｃｈと、リクエストアドレスＲＡとが記憶されている。なお、図７に示すアドレスは模式的に各記憶領域を表したものである。
また、各記憶領域は、書き込みポインタ及び読み出しポインタによって循環的にアドレスが指定される。即ち、エントリ用ＲＡＭ２２０は、複数のエントリデータを順次記憶するリングバッファを構成している。
【００６４】
図５に戻り、リクエストステータス用ＲＡＭ２３０は、楽音発生装置２０のローカルメモリとして備えられ、エントリデータ制御部２１１から入力された前回の読み出し要求の内容を表すリクエストステータス情報を記憶する。
【００６５】
図８は、リクエストステータス用ＲＡＭ２３０に記憶されるリクエストステータス情報のフォーマットを示す模式図である。
図８において、リクエストステータス用ＲＡＭ２３０には、メモリ１２から波形のサンプルデータが既に読み出された前回のエントリデータ夫々に対応するリクエストステータス情報の記憶領域が形成されている。各記憶領域には、前回のサンプリング周期で処理されたリクエストアドレスＲＡと、そのリクエストアドレスを基準として、既に読み出されたワード数ＸＷと、再生モード値ｍとが記憶されている。
また、各記憶領域は、書き込みポインタ及び読み出しポインタによってアドレスが指定される。即ち、リクエストステータス用ＲＡＭ２３０は、チャネルごとに固定アドレスの記憶領域が確保され、各記憶領域には複数のリクエストステータス情報が記憶されている。
なお、図８に示すアドレスは模式的に各記憶領域を表したものである。
【００６６】
図５に戻り、メモリバスインターフェース部２４０は、メモリリクエスト制御部２１８からメモリ１２における波形のサンプルデータの読み出しが要求された場合に、バス１４に対してアクセス権の取得を要求し、アクセス権が取得された後に、メモリ１２から波形のサンプルデータを読み出す。このとき、メモリバスインターフェース部２４０は、バス１４のアクセス権を保有していることを示すビジー信号をバストラフィックモニタ部２１７に出力する。
さらに、メモリバスインターフェース部２４０は、メモリ１２から波形のサンプルデータの読み出しが完了すると、サンプル受信完了信号及びサンプル受信完了チャネル番号をバス破綻検出部３００に出力する。サンプル受信完了信号とは、メモリ１２から波形のサンプルデータの読み出しが完了したことを示す信号である。また、サンプル受信完了チャネル番号とは、エントリデータに含まれるチャネル番号であり、読み出しが完了したサンプルデータに対応するチャネル番号である。
【００６７】
サンプルデータバッファ用ＲＡＭ２５０には、各チャネルｃｈ０〜ｃｈ１２７に対応する記憶領域が形成され、夫々の記憶領域に、メモリ１２から読み出された波形のサンプルデータが記憶される。
図９は、サンプルデータバッファ用ＲＡＭ２５０における記憶領域のフォーマットを示す模式図である。
図９において、サンプルデータバッファ用ＲＡＭ２５０には、チャネルｃｈ０〜ｃｈ１２７に対応する１２８個の記憶領域が形成されている。各チャネルの記憶領域には、波高値Ｗを表すデータが記憶されており、サンプルデータバッファ用ＲＡＭ２５０の１つの記憶領域に記憶されるサンプルデータの数（ワード数）は、再生モード値ｍ（ＰＣＭまたは差分ＰＣＭのいずれを示しているか）によって異なるものとなる。ここでは、１つの記憶領域に、最大で１６アドレスに対応する１６個のサンプルデータが記憶されるものとする。なお、図９に示すアドレスは模式的に各記憶領域を表したものである。
【００６８】
サンプルデータバッファ用ＲＡＭ２５０おいては、波形生成部１００によってサンプルデータバッファ用ＲＡＭ２５０のアドレスが指定されると、そのアドレスに記憶されている波形のサンプルデータが波形生成部１００に出力される。
なお、サンプルデータバッファ用ＲＡＭ２５０は、デュアルポートメモリによって構成され、波形生成部１００からのデータの読み出しと、メモリバスインターフェース部２４０からのデータの書き込みとを同時に行うことが可能である。ただし、バスの調停を行うことにより、サンプルデータバッファ用ＲＡＭ２５０をシングルポートメモリで構成することも可能である。
【００６９】
［バス破綻検出部３００の構成］
図１０は、バス破綻検出部３００の具体的構成を示すブロック図である。
図１０において、バス破綻検出部３００は、破綻判定フラグ制御部３０１と、破綻判定フラグレジスタ３０２と、破綻フラグレジスタ３０３と、ＯＲ回路３０４と、セレクタ３０５とを備えている。
【００７０】
破綻判定フラグ制御部３０１は、ＣＰＵ１１からのバス１４を介した上述の各レジスタに対するアクセス、及び、上述のセレクタの動作の選択を制御する。
また、破綻判定フラグ制御部３０１は、波形生成部１００からエントリリクエスト及びエントリデータを受信すると、エントリデータ内のチャネル番号を、マスタカウンタｍｃに同期して、破綻判定フラグレジスタ３０２に出力する。破綻判定フラグレジスタ３０２は、当該チャネル番号を、マスタカウンタｍｃに同期して受信し、当該チャネル番号に対応する領域のフラグを「ＨＩＧＨ」にする。
また、破綻判定フラグ制御部３０１は、波形メモリインターフェース部２００からサンプル受信完了信号及びサンプル受信完了チャネル番号を受信すると、サンプル受信完了チャネル番号を、マスタカウンタｍｃに同期して、破綻判定フラグレジスタ３０２に出力する。
【００７１】
破綻判定フラグレジスタ３０２は、当該サンプル受信完了チャネル番号を、マスタカウンタｍｃに同期して受信し、当該サンプル受信完了チャネル番号に対応する領域のフラグを「ＬＯＷ」にする。したがって、破綻判定フラグ制御部３０１が波形生成部１００から、該当チャネルの、エントリリクエスト及びエントリデータを受信してから、該当チャネルの、サンプル受信完了信号及びサンプル受信完了チャネル番号を受信するまでの間は、破綻判定フラグレジスタ３０２の該当チャネルのフラグ領域は「ＨＩＧＨ」のままとなる。なお、破綻判定フラグレジスタ３０２には、チャネルｃｈ０〜ｃｈ１２７に対応する１２８個のフラグ領域が形成されている。
さらに、破綻判定フラグレジスタ３０２は、次のサンプリング周期における該当チャネルの波形生成処理の直前にて、マスタカウンタｍｃに同期して、フラグ領域の各値を破綻フラグレジスタ３０３に出力する。
【００７２】
破綻フラグレジスタ３０３は、次のサンプリング周期における該当チャネルの波形生成処理の直前にて、マスタカウンタｍｃに同期して、破綻判定フラグレジスタ３０２のフラグ領域の各値を受信して、破綻フラグレジスタ３０３のフラグ領域の各値に格納する。
なお、破綻フラグレジスタ３０３には、チャネルｃｈ０〜ｃｈ１２７に対応する１２８個のフラグ領域が形成されている。したがって、破綻判定フラグ制御部３０１が波形生成部１００から、該当チャネルの、エントリリクエスト及びエントリデータを受信してから次のサンプリング周期における該当チャネルの波形生成処理の直前までの間に、該当チャネルの、サンプル受信完了信号及びサンプル受信完了チャネル番号を受信しなかった場合には、破綻フラグレジスタ３０３の該当チャネルのフラグ領域は「ＨＩＧＨ」になる。
「ＨＩＧＨ」になった場合、バス破綻検出部３００は、次のサンプリング周期における該当チャネルの波形生成処理の直前までの間に、メモリ１２から波形のサンプルデータを受信できなかった場合を意味する。このような場合、該当チャネルにおけるバス破綻が検出される。
破綻フラグレジスタ３０３は、マスタカウンタｍｃに同期して、各破綻フラグの領域の値をＯＲ回路３０４及びセレクタ３０５に出力する。
【００７３】
ＯＲ回路３０４は、破綻フラグレジスタ３０３から入力された各破綻フラグの領域の値のＯＲ値が「ＨＩＧＨ」である場合、インタラプト信号として、バス１４を介してＣＰＵ１１に出力する。したがって、当該各破綻フラグの領域の値のいずれか１つが「ＨＩＧＨ」であれば、インタラプト信号が出力される。
【００７４】
インタラプト信号を受信したＣＰＵ１１は、破綻フラグレジスタ３０３の各破綻フラグ領域のうち「ＨＩＧＨ」である領域を識別して、どのチャネルにおいてバス破綻が検出されたのか判定する。さらに、ＣＰＵ１１は、上述した波形演算部１１６にアクセスして、バス破綻が検出されたチャネルについて、楽音の発生を停止する。
【００７５】
セレクタ３０５は、マスタカウンタｍｃに同期して、当該各破綻フラグの領域の値のうち「ＨＩＧＨ」を選択して、波形生成部１００に破綻情報として出力する。
詳細には、マスタカウンタｍｃの上位７ビットにおける１カウントに対応する１２８個のタイムスロットの夫々に当該各破綻フラグの領域の値が対応している。そこで、セレクタ３０５は、各タイムスロットの夫々に対応する各破綻フラグの領域の値のうち、「ＨＩＧＨ」である値を格納する破綻フラグの領域を選択する。そして、セレクタ３０５は、選択した破綻フラグの領域に対応するチャネルに対して、バス破綻が検出されたことを示す情報を、破綻情報として波形生成部１００に出力する。
例えば、チャネル０のタイムスロットに対応する破綻フラグの領域の値が「ＨＩＧＨ」である場合、チャネル０に対して破綻情報が出力される。
【００７６】
［動作］
次に、電子楽器１の動作を説明する。
以下、図１１〜図１３を用いて電子楽器１の動作を説明し、適宜、図２〜図９を参照するものとする。
図１１は、マスタカウンタｍｃと各チャネルのタイムスロットとの関係を示す模式図である。
図１１に示すように、電子楽器１では、マスタカウンタｍｃの上位７ビットが一巡する期間によって１サンプリング周期が定義される。そして、１サンプリング周期内には、マスタカウンタｍｃの上位７ビットにおける１カウントに対応する１２８個のタイムスロットが形成されている。なお、マスタカウンタｍｃの下位４ビットは、夫々のタイムスロットを１６フィールドに分割している。
【００７７】
そして、電子楽器１における楽音の発生手順では、各チャネルにおける発音に関する処理を、波形のサンプルデータを読み出すためのメモリ１２のアドレス（エントリデータ）の出力と、波形のサンプルデータから波形を示すデジタル信号の生成とに分割している。
即ち、電子楽器１は、各チャネルのタイムスロットと対応付けられた処理として、エントリデータの出力を実行し、波形のサンプルデータの読み出し及び波形を示すデジタル信号の生成については、バス１４の空き状態に対応して、タイミングを選択して行うこととしている。
【００７８】
図１２は、電子楽器１における楽音の生成手順を示す模式図である。
図１２に示すように、各サンプリング周期において、各チャネルに対応するタイムスロットに移行すると、波形生成部１００のエントリデータ生成部１１３が、モードレジスタ１０２から入力される再生モード値ｍに従って、次に発生する楽音のデータをメモリ１２から読み出すためのエントリデータを生成する。
【００７９】
例えば、チャネルｃｈ０のタイムスロットに移行すると、エントリデータ生成部１１３がチャネルｃｈ０のエントリデータを生成する。
なお、エントリデータは、当該チャネルの発音が行われている場合にのみ、エントリデータ生成部１１３によって生成される。
【００８０】
そして、エントリデータ生成部１１３によって生成されたエントリデータは、当該タイムスロットに対応して、当該タイムスロット内あるいは当該タイムスロット終了後でエントリデータ生成完了とともに、波形メモリインターフェース部２００のエントリ用ＲＡＭ２２０に記憶される。
【００８１】
例えば、チャネルｃｈ０のタイムスロットに対応して生成されたエントリデータは、チャネルｃｈ０のタイムスロット内あるいはエントリデータ生成完了とともに、書き込みポインタが示しているエントリ用ＲＡＭ２２０の記憶領域に記憶される。このとき、エントリデータの書き込み完了に対応して、書き込みポインタが示すアドレスは１インクリメントされる。また、読み出しポインタは書き込みポインタよりも１以上の記憶領域だけ小さいアドレスを示している。
各チャネルのタイムスロットでは、このようなエントリデータの生成とエントリ用ＲＡＭ２２０への記憶が必須の処理として対応付けられている。
【００８２】
そして、当該チャネルのタイムスロット以降において、波形メモリインターフェース部２００のエントリデータ制御部２１１が、各バストラフィックモニタ部から入力されるバス１４のトラフィック情報に基づいて、バス１４の空き状態を判定する。例えば、各バストラフィックモニタ部から入力されるトラフィック情報に示されているバス１４のビジー信号のカウント値の合計が、設定した基準値以下であれば、波形メモリインターフェース部２００は、バス１４の占有率が低いものと判定して、設定したデータ量分の波形のサンプルデータをメモリ１２から読み出す処理（バースト転送処理）を開始する。また、この状態から、カウント値が増加した場合には、波形メモリインターフェース部２００は、設定したデータ量から減少させてメモリ１２からの読み出しを行い、カウント値が減少した場合には、設定したデータ量から増加させてメモリ１２からの読み出しを行う。
【００８３】
この波形のサンプルデータの読み出し処理については、複数チャネル分の読み出しをまとめて行うことが可能であり、例えば、バス１４の空き状態に応じて、発音中のチャネルｃｈ０〜ｃｈ３のエントリデータに対応して、メモリ１２からまとめて波形のサンプルデータを読み出すことができる。
【００８４】
このように読み出された波形のサンプルデータは、波形メモリインターフェース部２００のサンプルデータバッファ用ＲＡＭ２５０に記憶され、キャッシュされた状態となる。
なお、エントリデータが出力されたタイムスロット以降にメモリ１２から読み出しが開始された波形のサンプルデータについて、その後の読み出しの状態によって、バス破綻の検出有無が決定される。
即ち、遅くとも次のサンプリング周期における当該チャネルのタイムスロットまでに波形のサンプルデータの読み出しが完了した場合（詳細は、後述の図１６の説明を参照）には、サンプルデータバッファ用ＲＡＭ２５０にキャッシュされた状態となり、バス破綻検出部３００によるバス破綻は検出されない。
これに対して、次のサンプリング周期における当該チャネルのタイムスロットまでに波形のサンプルデータの読み出しが完了しない場合（詳細は、後述の図１７の説明を参照）には、バス破綻検出部３００によりバス破綻が検出される。
さらなるバス破綻の検出の詳細については、図１４〜図１７を参照して後述する。
【００８５】
波形のサンプルデータの読出しが完了した場合には、チャネルｃｈ０〜ｃｈ１２７のエントリデータを生成する上述のサンプリング周期が終了すると、次のサンプリング周期において、波形生成部１００の波形演算部１１６がサンプルデータバッファ用ＲＡＭ２５０からチャネルｃｈ０〜ｃｈ１２７の波形のサンプルデータを順に読み出して、楽音（即ち楽音の波形を表すデジタル信号）をミキサ２１に出力する。
このような動作により、エントリデータを生成したタイムスロットのほぼ１サンプリング周期後に、楽音が発生することとなる。なお、サンプリング周波数は約４４ｋＨｚであるため、１サンプリング周期は約０．０２ｍｓであり、ほぼ遅延なく楽音が再生される。
【００８６】
［具体的動作例］
次に、電子楽器１において実際に楽音が生成される具体例について説明する。
図１３は、エントリ用ＲＡＭ２２０にエントリデータが記憶される状態を示す模式図である。
以下、図１３を参照し、初めにチャネルｃｈ３とチャネル１０が発音開始され、続いて、チャネル３の発音が停止するとともに、チャネル１６が発音開始される例について説明する。
【００８７】
図１３において、サンプリング周期Ｔ１では、エントリ用ＲＡＭ２２０のアドレス００１及びアドレス００２に、発音開始されたチャネル３のエントリデータＥ０３１及びチャネル１０のエントリデータＥ１０１が記憶される。
【００８８】
図１３によれば、エントリデータＥ０３１は、サンプリング周期Ｔ１で書き込まれたエントリデータであり、再生モードが１６ｂｉｔＰＣＭ、開始フラグ１（発音開始である）、読み出しワード数２、チャネル３、読み出しアドレス“００００００００ｈ”（ｈは１６進数表示を表す）であることが示されている。また、エントリデータＥ１０１は、サンプリング周期Ｔ１で書き込まれたエントリデータであり、再生モードが１６ｂｉｔＰＣＭ、開始フラグ１（発音開始である）、読み出しワード数２、チャネル１０、読み出しアドレス“０００００１００ｈ”であることが示されている。
【００８９】
なお、サンプリング周期Ｔ１終了時において、書き込みポインタ（図１３中のＷＰ）はアドレス００３、読み出しポインタ（図１３中のＲＰ）はアドレス００１を示している。
次に、サンプリング周期Ｔ２では、エントリ用ＲＡＭ２２０のアドレス００３及びアドレス００４に、発音中であるチャネル３のエントリデータＥ０３２及びチャネル１０のエントリデータＥ１０２が記憶される。
【００９０】
エントリデータＥ０３２では、エントリデータＥ０３１に対して、開始フラグ０（発音開始でない）、読み出しアドレス“０００００００２ｈ”と変化している。また、エントリデータＥ１０２では、エントリデータＥ１０１に対して、開始フラグ０（発音開始でない）、読み出しアドレス“０００００１０２ｈ”と変化している。
なお、サンプリング周期Ｔ２終了時において、書き込みポインタはアドレス００５、読み出しポインタはアドレス００３を示している。
【００９１】
続いて、サンプリング周期Ｔ３では、エントリ用ＲＡＭ２２０のアドレス００５及びアドレス００６に、発音中であるチャネル１０のエントリデータＥ１０３及び発音開始されたチャネル１６のエントリデータＥ１６１が記憶される。
エントリデータＥ１０３では、エントリデータＥ１０２に対して、読み出しアドレス“０００００１０４ｈ”と変化している。また、エントリデータＥ１６１は、サンプリング周期Ｔ３で書き込まれたエントリデータであり、再生モードが１６ｂｉｔＰＣＭ、開始フラグ１（発音開始である）、読み出しワード数２、チャネル１６、読み出しアドレス“０００４００００ｈ”であることが示されている。
【００９２】
ここで、チャネル３のエントリデータはエントリ用ＲＡＭ２２０に記憶されていないことから、チャネル３はサンプリング周期Ｔ２のエントリデータを最後に、発音が終了したことがわかる。
なお、サンプリング周期Ｔ３終了時において、書き込みポインタはアドレス００７、読み出しポインタはアドレス００５を示している。
【００９３】
図１４は、電子楽器１における全体動作を模式的に示すタイミングチャートである。
図１４においては、チャネルｃｈ０〜ｃｈ１２７毎に、エントリ出力タイミング、バス破綻判定タイミング、破綻判定フラグ、及び破綻フラグの関係が示されている。また、図１４によれば、マスタカウンタｍｃの上位７ビットが一巡する期間によって１サンプリング周期が定義される。そして、１サンプリング周期内には、マスタカウンタｍｃの上位７ビットにおける１カウントに対応する１２８個のタイムスロットが形成されている。この１２８個のタイムスロットにｃｈ０〜ｃｈ１２７の各チャネルの処理が対応している。エントリデータの出力は、発音中のチャネルのみ行われ、エントリデータの出力タイミングは、各チャネル処理の終了タイミング付近となっている。
【００９４】
次に、エントリ出力タイミング、バス破綻判定タイミング、破綻判定フラグ、及び破綻フラグの関係について説明する。以下、チャネルｃｈ０の関係のみについて説明するが、他のチャネルｃｈ１〜ｃｈ１２７についても同様の関係が成立する。
まず、第ｎ（ｎは自然数）サンプリング周期において、チャネルｃｈ０の処理の終了タイミング付近でエントリデータ生成部１１３からエントリデータが出力される（図１４中の（１））。
エントリデータが出力されると、破綻判定フラグレジスタ３０２に存在するチャネル０の破綻判定フラグがセットされる（図１４中の（２））。
メモリバスインターフェース部２４０が波形のサンプルデータをメモリ１２から受信したことに応じて、破綻判定フラグ制御部３０１がメモリバスインターフェース部２４０からサンプル受信完了信号を受信すると、破綻判定フラグレジスタ３０２に存在するチャネルｃｈ０の破綻判定フラグがリセットされる（図１４中の（３））。
しかし、破綻判定フラグ制御部３０１がメモリバスインターフェース部２４０からサンプル受信完了信号を受信しない場合、破綻判定フラグレジスタ３０２に存在するチャネルｃｈ０の破綻判定フラグはリセットされない。
第（ｎ＋１）サンプリング周期のチャネルｃｈ０処理が開始される直前で、チャネルｃｈ０の破綻判定が行われる（図１４中の（４））。このとき、チャネルｃｈ０の破綻判定フラグがセットされている場合、破綻フラグレジスタ３０３に存在するチャネルｃｈ０の破綻フラグがセットされ、チャネルｃｈ０の破綻判定フラグがセットされていない場合、当該破綻フラグはセットされない。
【００９５】
以上、図１４においては、チャネルｃｈ０〜ｃｈ１２７毎に、エントリ出力タイミング、バス破綻判定タイミング、破綻判定フラグ、及び破綻フラグの関係について示した。次に、図１５乃至図１７を参照して、個別のチャネルに焦点を当てて、発音停止中のチャネルのフラグ動作、発音継続中のチャネルについて波形のサンプルデータを取得できた場合のフラグ動作、及び発音継続中のチャネルについて波形のサンプルデータを取得できなかった場合のフラグ動作について説明する。
【００９６】
図１５は、発音停止中のチャネルｃｈｘ（ｘ＝０〜１２７）のフラグ動作を示す模式図である。
チャネルｃｈｘについて発音停止中なので、チャネルｃｈｘのエントリデータは、エントリデータ生成部１１３から出力されない（図１５中の（１））。チャネルｘのエントリデータは出力されないので、チャネルｘの破綻判定フラグはセットされない（図１５中の（２））。したがって、次のサンプリング周期のチャネルｘ処理が開始される直前で、チャネルｘの破綻判定が行われても、チャネルｘの破綻フラグはセットされない（図１５中の（３））。次サンプリング周期においてもエントリデータは出力されない（図１５中の（４））。
【００９７】
図１６は、発音継続中のチャネルｘ（ｘ＝０〜１２７）について波形のサンプルデータを取得できた場合のフラグ動作を示す模式図である。
チャネルｘについて発音継続中なので、チャネルｘのエントリデータが、エントリデータ生成部１１３から出力される（図１６中の（１））。チャネルｘのエントリデータが出力されるので、チャネルｘの破綻判定フラグがセットされる（図１６中の（２））。次サンプリング周期に移行する前にチャネルｘの波形のサンプルデータの受信が完了されるので（図１６中の（３））、チャネルｘの破綻判定フラグがリセットされる（図１６中の（４））。したがって、次のサンプリング周期のチャネルｘ処理が開始される直前で、チャネルｘの破綻判定が行われても、チャネルｘの破綻フラグはセットされない（図１６中の（５））。発音継続中なので、次サンプリング周期においてチャネルｘのエントリデータが出力される（図１６中の（６））。
【００９８】
図１７は、発音継続中のチャネルｘ（ｘ＝０〜１２７）について波形のサンプルデータを取得できなかった場合のフラグ動作を示す模式図である。
チャネルｘについて発音継続中なので、チャネルｘのエントリデータが、エントリデータ生成部１１３から出力される（図１７中の（１））。チャネルｘのエントリデータが出力されるので、チャネルｘの破綻判定フラグがセットされる（図１７中の（２））。さらに、チャネルｘの波形のサンプルデータをリクエストする（図１７中の（３））。次のサンプリング周期のチャネルｘ処理が開始される直前になっても波形のサンプルデータの受信が完了されないので、チャネルｘの破綻判定フラグがセットされたままとなり、チャネルｘの破綻フラグがセットされる（図１７中の（４））。したがって、次サンプリング周期においてチャネルｘのエントリデータが出力されないよう制御される（図１６中の（５））。
【００９９】
［電子楽器１の処理アルゴリズム］
次に、上述の動作を実現する電子楽器１の処理アルゴリズムについて説明する。
電子楽器１の処理アルゴリズムは、エントリデータ生成処理と、波形生成処理と、バス破綻検出処理の主に３つによって構成され、これら３つの処理が相互に連携し合って上述の動作を実現している。なお、これら３つの相互の処理関係は、図２１の対応するステップを参照することで容易に理解することが可能である。
【０１００】
［エントリデータ生成処理］
図１８は、エントリデータ生成処理を示すフローチャートである。
エントリデータ生成処理は、楽音発生装置２０の波形生成部１００によって実行され、電子楽器１の電源ＯＮとともに開始された後、電源ＯＦＦとなるまで繰り返し実行される。
【０１０１】
図１８において、エントリデータ生成処理が開始されると、波形生成部１００は、ステップＳ１において、マスタカウンタｍｃを基に、現在のタイムスロットを判定する。具体的には、波形生成部１００は、現在のタイムスロットがいずれのチャネルに対応するものであるかを判定する。
【０１０２】
ステップＳ２において、波形生成部１００は、当該タイムスロットに対応するチャネルの発音があるか否かの判定を行う。即ち、波形生成部１００は、当該チャネルに対応する押鍵操作が行われているか否かの判定を行う。
当該タイムスロットに対応するチャネルの発音がない場合、ステップＳ２においてＮＯと判定されて、処理はステップＳ７に移行する。
【０１０３】
これに対し、当該タイムスロットに対応するチャネルの発音がある場合、ステップＳ２においてＹＥＳと判定されて、処理はステップＳ３に移行する。
【０１０４】
ステップＳ３において、波形生成部１００は、当該タイムスロットに対応するチャネルの破綻情報を受信したか否かの判定を行う。
該タイムスロットに対応するチャネルの破綻情報を受信した場合、ステップＳ３においてＹＥＳと判定されて、処理はステップＳ７に移行する。これにより、当該タイムスロットに対応するチャネルの破綻情報を受信した場合には、ステップＳ４〜Ｓ６までの処理が実行されないので、当該タイムスロットに対応するチャネルのエントリデータが出力されないように制御できる。
一方、当該タイムスロットに対応するチャネルの破綻情報を受信していない場合、ステップＳ３においてＮＯと判定されて、処理はステップＳ４に移行する。
【０１０５】
ステップＳ４において、波形生成部１００は、発音されているチャネルのエントリデータを生成する。
ステップＳ５において、波形生成部１００は、発音されているチャネルのエントリリクエストを破綻判定フラグ制御部３０１に出力する。同時に、波形生成部１００は、ステップＳ４にて生成したエントリデータを破綻判定フラグ制御部３０１に出力する。
ステップＳ６において、波形生成部１００は、エントリ用ＲＡＭ２２０にエントリデータを記憶する。このとき、書き込みポインタが示しているエントリ用ＲＡＭ２２０のアドレスにエントリデータが書き込まれる。
【０１０６】
ステップＳ７において、波形生成部１００は、１サンプリング周期において、最終チャネルのタイムスロットが終了したか否かの判定を行う。
１サンプリング周期において、最終チャネルのタイムスロットが終了していない場合、ステップＳ７においてＮＯと判定されて、処理はステップＳ１に移行する。
これに対し、１サンプリング周期において、最終チャネルのタイムスロットが終了した場合、ステップＳ７においてＹＥＳと判定されて、処理はステップＳ８に移行する。
【０１０７】
ステップＳ８において、波形生成部１００は、発音中のチャネルについて、当該チャネルの破綻情報を受信していない場合に、１サンプル周期分の波形の発生を波形演算部１１６に指示する。
このようなステップＳ８の処理が終了すると、エントリデータ生成処理は終了となる。
図１８においては、波形生成指示の処理（ステップＳ８）を全チャネル分のエントリデータ生成終了後に実行しているが、この処理はこれより以前のタイムスロット区間内の所定の決められたタイミングで行うようにしてもよい。
【０１０８】
［波形生成処理］
図１９は、波形生成処理を示すフローチャートである。
波形生成処理は、楽音発生装置２０の波形メモリインターフェース部２００によって実行され、電子楽器１の電源ＯＮとともに開始された後、電源ＯＦＦとなるまで繰り返し実行される。
【０１０９】
図１９において、波形生成処理が開始されると、波形メモリインターフェース部２００は、ステップＳ１１において、バス１４の空き状態を判定する。
ステップＳ１２において、波形メモリインターフェース部２００は、空き状態に応じたチャネル数分のエントリデータをエントリ用ＲＡＭ２２０から読み出す。このとき、読み出しポインタが示しているエントリ用ＲＡＭ２２０のアドレスからエントリデータが順に読み出される。
【０１１０】
ステップＳ１３において、波形メモリインターフェース部２００は、読み出した各エントリデータを参照して、メモリ１２から波形のサンプルデータを読み出す。
【０１１１】
ステップＳ１４において、波形メモリインターフェース部２００は、エントリデータ毎に、メモリ１２から波形のサンプルデータの読み出しの完了を判定する。
ステップＳ１５において、波形メモリインターフェース部２００は、読み出しが完了した場合（ステップＳ１４においてその旨の判定がなされた場合）にのみ、メモリ１２から読み出した波形のサンプルデータをサンプルデータバッファ用ＲＡＭ２５０に記憶する。
ステップＳ１６において、波形メモリインターフェース部２００は、読み出しが完了した場合（ステップＳ１４においてその旨の判定がなされた場合）にのみ、サンプル受信完了信号を破綻判定フラグ制御部３０１出力する。また、この場合、波形メモリインターフェース部２００は、サンプル受信完了チャネル番号も破綻判定フラグ制御部３０１に出力する。したがって、破綻判定フラグレジスタ３０２の該当チャネルのフラグ領域は「ＬＯＷ」となる。
一方、該当チャネルからエントリデータが出力されたにもかかわらず、メモリ１２から波形のサンプルデータの読み出しが完了していない場合には、サンプル受信完了信号及びサンプル受信完了チャネル番号のいずれも破綻判定フラグ制御部３０１に出力されないので、破綻判定フラグレジスタ３０２の該当チャネルのフラグ領域は「ＨＩＧＨ」のままとなる。
ステップＳ１７において、波形メモリインターフェース部２００は、１サンプリング周期における全チャネル分の波形のサンプルデータについてメモリ１２からの読み出し処理を実行したか否かの判定を行う。
【０１１２】
１サンプリング周期における全チャネル分の波形のサンプルデータについてメモリ１２からの読み出し処理を実行していない場合、ステップＳ１７においてＮＯと判定されて、処理はステップＳ１１に戻され、それ以降の処理が繰り返される。
これに対し、１サンプリング周期における全チャネル分の波形のサンプルデータについてメモリ１２からの読み出し処理を実行した場合、ステップＳ１７においてＹＥＳと判定されて、処理はステップ１８に移行する。
【０１１３】
ステップＳ１８において、波形メモリインターフェース部２００は、サンプルデータバッファ用ＲＡＭ２５０に記憶された各チャネルの波形のサンプルデータから楽音の波形を表すデジタル信号を生成する。そして、波形メモリインターフェース部２００は、各チャネルの楽音の波形を表すデジタル信号をミキサ２１に出力する。
これにより、ミキサ２１によって各チャネルの楽音が合成され、図示していないＤＡＣ
（Ｄｉｇｉｔａｌ  Ｔｏ  Ａｎａｌｏｇ  Ｃｏｎｖｅｒｔｅｒ）を経て、スピーカ等から楽音が出力される。
【０１１４】
図１９においては、楽音発生処理（ステップＳ１８）を、全チャネル分の波形サンプルデータについての読み出し処理の実行終了後に実行しているが、この処理はこれより以前のタイムスロット区間内の所定の決められたタイミングで行うようにしてもよい。
【０１１５】
［バス破綻検出処理］
図２０は、バス破綻検出処理を示すフローチャートである。
バス破綻検出処理は、楽音発生装置２０のバス破綻検出部３００によって実行され、電子楽器１の電源ＯＮとともに開始された後、電源ＯＦＦとなるまで繰り返し実行される。また、バス破綻検出処理は、１サンプリング周期において、チャネルｃｈ０〜１２７までの各チャネルについて実行される。
【０１１６】
図２０において、バス破綻検出処理が開始されると、ステップＳ２１において、バス破綻検出部３００は、エントリデータ生成部１１３から該当チャネルのエントリリクエストを受信したか否かを判定する。
受信した場合、ステップＳ２１においてＹＥＳと判定されて、処理はステップＳ２２に移行する。
【０１１７】
ステップＳ２２において、バス破綻検出部３００は、該当チャネルの破綻判定フラグをセットする。即ち、バス破綻検出部３００は、破綻判定フラグレジスタ３０２の該当チャネルに対応するフラグ領域を「ＨＩＧＨ」にする。
【０１１８】
このようなステップＳ２２の処理が実行された場合、又は、上述の該当チャネルのエントリリクエストを受信せずに、ステップＳ２１においてＮＯと判定された場合、処理はステップＳ２３に移行する。
ステップＳ２３において、バス破綻検出部３００は、メモリバスインターフェース部２４０からサンプル受信完了信号を受信したか否かを判定する。
受信した場合、ステップＳ２３においてＹＥＳと判定されて、処理はステップＳ２４に移行する。
ステップＳ２４において、バス破綻検出部３００は、該当チャネルの破綻判定フラグをリセットする。即ち、バス破綻検出部３００は、破綻判定フラグレジスタ３０２の該当チャネルに対応するフラグ領域を「ＬＯＷ」にする。
【０１１９】
このようなステップＳ２４の処理が実行された場合、又は、上述のサンプル受信信号を受信せずに、ステップＳ２３においてＮＯと判定された場合、処理はステップＳ２１に戻り、上述の処理を繰り返す。
このステップＳ２１〜Ｓ２４の処理を繰り返している最中に、以下に述べるステップＳ２５〜Ｓ２８の処理を並行して行う。
まず、ステップＳ２５において、バス破綻検出部３００は、該当チャネルの破綻判定タイミングであるか否か、即ち、次のサンプリング周期の該当チャネルのチャネル処理が開始される直前であるか否かを判断する。
該当チャネルの破綻判定タイミングでない場合、ステップＳ２５においてＮＯと判定されて、処理はステップＳ２５に戻され、ＹＥＳと判定されるまで、ステップＳ２５の処理が繰り返される。
これに対し、該当チャネルの破綻判定タイミングである場合、ステップＳ２５において、ＹＥＳと判定されて、処理はステップＳ２６に移行する。
【０１２０】
ステップＳ２６において、バス破綻検出部３００は、該当チャネルの破綻判定フラグがセット中であるか否かを判定する。即ち、バス破綻検出部３００は、破綻判定フラグレジスタ３０２の該当チャネルに対応するフラグ領域が「ＨＩＧＨ」であるか否かを判定する。
該当チャネルの破綻判定フラグがセット中でない場合、ステップＳ２６においてＮＯと判定されて、再びステップＳ２５の処理に戻る。
これに対し、該当チャネルの破綻判定フラグがセット中である場合、ステップＳ２６においてＹＥＳと判断されて、処理はステップＳ２７に移行する。
ステップＳ２７において、バス破綻検出部３００は、該当チャネルの破綻フラグをセットする。即ち、バス破綻検出部３００は、破綻フラグレジスタ３０３の該当チャネルに対応するフラグ領域を「ＨＩＧＨ」にする。
ステップＳ２８において、バス破綻検出部３００は、インタラプト信号をＣＰＵ１１に出力するとともに、破綻情報を波形生成部１００に出力して、再びステップＳ２５の処理に戻る。
【０１２１】
以上説明したように、本実施形態に係る電子楽器１は、共有メモリとしてのメモリ１２に波形のサンプルデータを記憶し、楽音発生装置２０によって、ポリフォニック数に対応する複数チャネルの発音を時分割で処理する。
そして、電子楽器１は、発音が行われている各チャネルについて、当該チャネルのタイムスロットにおいては、メモリ１２の読み出しアドレスを示すエントリデータの生成を行い、エントリ用ＲＡＭ２２０に記憶する。
【０１２２】
その後、電子楽器１は、バス１４の空き状態に対応して、メモリ１２から所定チャネル分の波形のサンプルデータを読み出し、各チャネルの破綻判定タイミングの経過前に読み出しが完了されない場合に、当該読み出しが完了しないチャネルの発音について、エントリデータの生成を行わない、発音を停止させる等の所定の制御を実行する。
【０１２３】
したがって、読み出しが完了しないチャネルについて所定の制御を実行できる。また、読み出しが完了しない場合に、エントリデータが出力されないので、メモリ１２へアクセス時においてバス１４にかかる負荷を低減できる。また、発音を停止させる場合、エントリデータも出力されないので、バス１４にかかる負荷を低減できるとともに、発音要求とは異なる音を発生させないようにできる。
【０１２４】
また、本実施形態に係る電子楽器１では、各チャネルに対応する波形のサンプルデータのエントリリクエストを受信したことに応じて、各チャネルに対応する破綻判定フラグを「ＨＩＧＨ」にし、波形のサンプルデータの読み出しが破綻判定タイミングの経過前に実行されたと判定された場合に、各チャネルに対応する破綻判定フラグを「ＬＯＷ」にする。
さらに、破綻判定タイミングの経過時点において、各チャネルに対応する破綻判定フラグが「ＨＩＧＨ」である場合に、バス１４のオーバーフローであるバス破綻が生じたことを検出して各チャネルに対応する破綻フラグを「ＨＩＧＨ」にする。
そして、破綻フラグが「ＨＩＧＨ」である場合、各チャネルに対応する波形のサンプルデータのエントリリクエストに対応する各チャネルの発音に関して、エントリデータの生成を行わない、発音を停止させる等の所定の制御を実行する。
【０１２５】
したがって、電子楽器１では、バス破綻を判定する専用のフラグである破綻フラグを設けることで、破綻フラグを「ＨＩＧＨ」に維持させることができるので、所定の制御を確実に実行できる。また、破綻判定フラグを設けることで、エントリリクエストの発生の有無を識別できる。
【０１２６】
また、本実施形態に係る電子楽器１では、波形のサンプルデータの読み出しが完了しない場合、指定された発音チャネルにより発音すべき楽音を停止させる。
【０１２７】
したがって、電子楽器１では、エントリデータも出力されないので、バス１４にかかる負荷を低減できるとともに、発音要求とは異なる音を発生させないようにできる。
【０１２８】
なお、本発明は、上述の実施形態に限定されるものではなく、本発明の目的を達成できる範囲での変形、改良等は本発明に含まれるものである。
【０１２９】
上述の実施形態では、本発明が適用される楽音発生装置２０は、電子楽器の音源である場合を例として説明したが、特にこれに限定されない。
例えば、本発明は、発音機能を有する電子機器一般に適用することができる。具体的には、例えば、本発明は、ノート型のパーソナルコンピュータ、携帯端末、ポータブルゲーム機等に適用可能である。
【０１３０】
上述した一連の処理は、ハードウェアにより実行させることもできるし、ソフトウェアにより実行させることもできる。
換言すると、図２，３，５，１０の構成は例示に過ぎず、特に限定されない。即ち、上述した一連の処理を全体として実行できる機能が楽音発生装置２０に備えられていれば足り、この機能を実現するためにどのような機能ブロックを用いるのかは特に図２，３，５，１０の例に限定されない。
また、１つの機能ブロックは、ハードウェア単体で構成してもよいし、ソフトウェア単体で構成してもよいし、それらの組み合わせで構成してもよい。
【０１３１】
一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、コンピュータ等にネットワークや記録媒体からインストールされる。
コンピュータは、専用のハードウェアに組み込まれているコンピュータであってもよい。また、コンピュータは、各種のプログラムをインストールすることで、各種の機能を実行することが可能なコンピュータ、例えば汎用のパーソナルコンピュータであってもよい。
【０１３２】
このようなプログラムを含む記録媒体は、ユーザにプログラムを提供するために装置本体とは別に配布されるリムーバブルメディアにより構成されるだけでなく、装置本体に予め組み込まれた状態でユーザに提供される記録媒体等で構成される。リムーバブルメディアは、例えば、磁気ディスク（フロッピディスクを含む）、光ディスク、または光磁気ディスク等により構成される。光ディスクは、例えば、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ），ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等により構成される。光磁気ディスクは、ＭＤ（Ｍｉｎｉ−Ｄｉｓｋ）等により構成される。また、装置本体に予め組み込まれた状態でユーザに提供される記録媒体は、例えば、プログラムが記録されている図１のメモリ１２内のＲＯＭや、図示していないハードディスク等で構成される。
【０１３３】
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、その順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
また、本明細書において、システムの用語は、複数の装置や複数の手段等により構成される全体的な装置を意味するものとする。
【０１３４】
以上、本発明のいくつかの実施形態について説明したが、これらの実施形態は、例示に過ぎず、本発明の技術的範囲を限定するものではない。本発明はその他の様々な実施形態を取ることが可能であり、さらに、本発明の要旨を逸脱しない範囲で、省略や置換等種々の変更を行うことができる。これら実施形態やその変形は、本明細書等に記載された発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【０１３５】
以下に、本願の出願当初の特許請求の範囲に記載された発明を付記する。
［付記１］
夫々割り当てられた波形データに基づき、所定の順序で楽音生成処理を行う複数の発音チャネルと、
当該複数の発音チャネル内の指定された発音チャネルに割り当てられるべき波形データの読み出し要求を受信した場合に、バスで接続されたメモリに記憶された波形データを読み出す読み出し手段と、
前記読み出し手段による前記波形データの読み出しが、前記指定された発音チャネルにおける楽音生成処理の開始前に完了されたか否かを判定する読み出し判定手段と、
前記読み出し判定手段により前記波形データの読み出しが完了しなかったと判定された場合に、前記指定された発音チャネルの発音に関して所定の制御を実行する制御手段と、
を備える楽音発生装置。
［付記２］
前記読み出し判定手段は、
前記発音チャネルに対応する前記波形データの読み出し要求を受信したことに応じて、前記発音チャネルに対応する第１フラグをオンにする第１フラグオン手段と、
前記読み出し判定手段によって前記波形データの読み出しが前記楽音生成処理の開始前に完了されたと判定された場合に、前記発音チャネルに対応する前記第１フラグをオフにする第１フラグオフ手段と、
前記楽音生成処理の開始時点において、前記発音チャネルに対応する前記第１フラグがオンである場合に、前記バスがオーバーフローしたことを検出して前記発音チャネルに対応する第２フラグをオンにする第２フラグオン手段と、
を有し、
前記制御手段は、
前記第２フラグがオンである場合、前記波形データの読み出し要求に対応する前記発音チャネルの発音に関して前記所定の制御を実行する、
付記１に記載の楽音発生装置。
［付記３］
前記制御手段は、前記所定の制御として、前記指定された発音チャネルにより発音すべき楽音を停止させる、
付記１に記載の楽音発生装置。
［付記４］
夫々割り当てられた波形データに基づき、所定の順序で楽音生成処理を行う複数の発音チャネルを有する楽音発生装置が実行する楽音発生方法であって、
当該複数の発音チャネル内の指定された発音チャネルに割り当てられるべき波形データの読み出し要求を受信した場合に、バスで接続されたメモリに記憶された波形データを読み出す読み出しステップと、
前記読み出しステップによる前記波形データの読み出しが、前記指定された発音チャネルにおける楽音生成処理の開始前に完了されたか否かを判定する読み出し判定ステップと、
前記読み出し判定ステップにより前記波形データの読み出しが完了しなかったと判定された場合に、前記指定された発音チャネルの発音に関して所定の制御を実行する制御ステップと、
を含む楽音発生方法。
［付記５］
夫々割り当てられた波形データに基づき、所定の順序で楽音生成処理を行う複数の発音チャネルを有する楽音発生装置として用いられるコンピュータに、
当該複数の発音チャネル内の指定された発音チャネルに割り当てられるべき波形データの読み出し要求を受信した場合に、バスで接続されたメモリに記憶された波形データを読み出す読み出しステップと、
前記読み出しステップによる前記波形データの読み出しが、前記指定された発音チャネルにおける楽音生成処理の開始前に完了されたか否かを判定する読み出し判定ステップと、
前記読み出し判定ステップにより前記波形データの読み出しが完了しなかったと判定された場合に、前記指定された発音チャネルの発音に関して所定の制御を実行する制御ステップと、
を実行させるプログラム。
【符号の説明】
【０１３６】
１・・・電子楽器、１１・・・ＣＰＵ、１２・・・メモリ、１３・・・メモリコントローラ、１４・・・バス、１５・・・入力部、２０・・・楽音発生装置、２１・・・ミキサ、１００・・・波形生成部、１０１・・・音源制御パラメータ用ＲＡＭ、１０２・・・モードレジスタ、１０３〜１０５・・・アドレスレジスタ、１０６・・・ピッチレジスタ、１０７〜１０９・・・セレクタ、１１０・・・減算器、１１１・・・歩進値レジスタ、１１２・・・加算器、１１３・・・エントリデータ生成部、１１４・・・リードアドレス演算回路、１１５・・・前回歩進値レジスタ、１１６・・・波形演算部、２００・・・波形メモリインターフェース部、２１０・・・エントリ処理部、２１１・・・エントリデータ制御部、２１２・・・書き込みポインタ用レジスタ、２１２ａ，２１３ａ，２１７ａ・・・インクリメンタ、２１３・・・読み出しポインタ用レジスタ、２１４・・・バス調停部、２１５・・・エントリデータ用レジスタ、２１６・・・ステータスデータ用レジスタ、２１７・・・バストラフィックモニタ部、２１７ｂ・・・セレクタ、２１７ｃ・・・レジスタ、２１８・・・メモリリクエスト制御部、２２０・・・エントリ用ＲＡＭ、２３０・・・リクエストステータス用ＲＡＭ、２４０・・・メモリバスインターフェース部、２５０・・・サンプルデータバッファ用ＲＡＭ、３００・・・バス破綻検出部、３０１・・・破綻判定フラグ制御部、３０２・・・破綻判定フラグレジスタ、３０３・・・破綻フラグレジスタ、３０４・・・ＯＲ回路、３０５・・・セレクタ
【図１】
2014016378.tif 000003
【図２】
2014016378.tif 000004
【図３】
2014016378.tif 000005
【図４】
2014016378.tif 000006
【図５】
2014016378.tif 000007
【図６】
2014016378.tif 000008
【図７】
2014016378.tif 000009
【図８】
2014016378.tif 000010
【図９】
2014016378.tif 000011
【図１０】
2014016378.tif 000012
【図１１】
2014016378.tif 000013
【図１２】
2014016378.tif 000014
【図１３】
2014016378.tif 000015
【図１４】
2014016378.tif 000016
【図１５】
2014016378.tif 000017
【図１６】
2014016378.tif 000018
【図１７】
2014016378.tif 000019
【図１８】
2014016378.tif 000020
【図１９】
2014016378.tif 000021
【図２０】
2014016378.tif 000022
【図２１】
2014016378.tif 000023