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