(57)【特許請求の範囲】
【請求項１】
波形データが読み書き可能な波形メモリと、
該波形メモリから波形データを読み出し、読み出した波形データに基づいて周期がサンプリング周期とされている楽音波形データを生成する楽音生成手段と、
前記楽音生成手段の生成した楽音波形データを含む波形データが入力され、ミキシング処理を行って、周期がサンプリング周期とされている混合された波形データを出力するミキシング手段と、
前記楽音生成手段および前記ミキシング手段の動作を制御する制御手段と、
前記楽音生成手段が前記波形メモリをアクセスしていない時間において、前記制御手段の制御の基で、前記波形メモリの波形データの連続的な読み出しあるいは書き込みのアクセスを行うとともに、前記ミキシング手段からサンプリング周期ごとに入力する波形データを前記制御手段へ受け渡しするアクセス手段と、
該アクセス手段に内蔵されている記憶手段とを備え、
前記アクセス手段は、前記記憶手段の第１領域を、前記制御手段の制御の基で行われる前記波形メモリの読み出し時に読み出された波形データを前記制御手段に受け渡しするために一時的に記憶するバッファ、および、書き込み時の波形データを前記波形メモリに受け渡しするために一時的に記憶するバッファとして使用するとともに、前記記憶手段の第２領域を、前記ミキシング手段から入力する波形データを前記制御手段に受け渡しするために一時的に記憶するバッファとして使用可能とされていることを特徴とする音源装置。
【請求項２】
波形データが読み書き可能な波形メモリと、
該波形メモリから波形データを読み出し、読み出した波形データに基づいて周期がサンプリング周期とされている楽音波形データを生成する楽音生成手段と、
前記楽音生成手段の生成した楽音波形データを含む波形データが入力され、ミキシング処理を行って、周期がサンプリング周期とされている混合された波形データを出力するミキシング手段と、
前記楽音生成手段および前記ミキシング手段の動作を制御する制御手段と、
前記楽音生成手段が前記波形メモリをアクセスしていない時間において、前記制御手段の制御の基で、前記波形メモリの波形データの連続的な読み出しあるいは書き込みのアクセスを行うとともに、前記制御手段から順次入力される波形データをサンプリング周期ごとに前記ミキシング手段へ出力するアクセス手段と、
該アクセス手段に内蔵されている記憶手段とを備え、
前記アクセス手段は、前記記憶手段の第１領域を、前記制御手段の制御の基で行われる前記波形メモリの読み出し時に読み出された波形データを前記制御手段に受け渡しするために一時的に記憶するバッファ、および、書き込み時の波形データを前記波形メモリに受け渡しするために一時的に記憶するバッファとして使用するとともに、該記憶手段の第２領域を、前記制御手段から前記ミキシング手段に入力される波形データを一時的に記憶するバッファとして使用可能とされていることを特徴とする音源装置。
【請求項３】
前記記憶手段における前記第１領域のサイズと前記第２領域のサイズとを、ユーザの指示あるいは動作状況に応じてそれぞれ変更可能とされていることを特徴とする請求項１あるいは２記載の音源装置。
【請求項４】
さらに、前記第１領域および前記第２領域であるバッファにおける波形データの状態を検出し、前記制御手段に対してデータ受取あるいはデータ供給の要求を発生する検出手段と、
該検出手段における検出条件を変更する条件変更手段とを有し、
前記制御手段は、該データ受取あるいはデータ供給の要求に応じて、該要求に対応する領域であるバッファからのデータ受取あるいは該バッファへのデータ供給を実行するようにしたことを特徴とする請求項１ないし２記載の音源装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、波形メモリへ制御手段がアクセスすることのできる音源装置に関するものである。
【０００２】
【従来の技術】
従来より、発音しようとするピッチに応じて波形メモリから読み出した波形データに基づいて楽音を生成するようにした波形メモリ音源が知られている。このような波形メモリ音源を内蔵する従来の楽音生成装置における音源部の構成例を図９に示す。
図９において、波形メモリ１２１は読み書き可能なＳＤＲＡＭ（Synchronous DRAM）により構成されており、複数の短期間のサンプリング波形が記憶されている。音源部１２０では、波形メモリ１２１から読み出された波形データに基づいて楽音を生成している。楽音を生成する際に、楽音生成装置における図示しないＣＰＵ（Central Processing Unit）は音源制御レジスタ１３０に各種音源パラメータ情報を供給すると共に、発音の開始指示を出す。この音源パラメータ情報はＣＰＵからデータバス（DATA102）を介して音源制御レジスタ１３０に供給され、音源制御レジスタ１３０においてＣＰＵからアドレスバス（AD102）を介して与えられるアドレスで示されるレジスタに格納される。
【０００３】
音源パラメータ情報は、割り当てチャンネル、波形メモリ読み出しピッチ（周波数ナンバ）、波形メモリ読み出し区間、エンベロープパラメータ、ミキサ１３３に対する設定情報、およびエフェクト用係数などがある。この内の波形メモリ読み出し区間パラメータは、読み出す波形データの開始アドレスＡＳおよびそのデータ長ＬＰＡとされる。音源制御レジスタ１３０および読出書込回路１３１は、処理Ａ、処理Ｂ、取り込み処理、補間処理、およびＸアクセス処理の５つの処理を行なうことにより各チャンネルの楽音を生成している。各処理の概要は次の通りである。処理Ａは、音源制御レジスタ１３０から供給される波形データの開始アドレスＡＳおよびそのデータ長ＬＰＡやピッチＰＩＴＣＨ等の情報に基づいて、楽音生成のために時分割チャンネルタイミングにしたがって各チャンネルの波形データ読出アドレスを作成する処理である。各チャンネルの波形データ読出アドレスは相対アドレスであり、読出書込回路１３１内の図示しないレジスタに保持される。処理Ｂは、読出書込回路１３１において実行される処理であり、時分割チャンネルタイミングとは異なるチャンネルのタイミングで、波形メモリ１２１に対応する絶対アドレスの波形データ読出アドレスに変換して、この波形データ読出アドレスをアドレスバス（AD101）を介して波形メモリ１２１に供給する処理である。
【０００４】
また、取り込み処理は、読出書込回路１３１により実行される処理であり、処理Ｂにより波形メモリ１２１に供給された波形データ読出アドレスにしたがって読み出された波形データをデータバス（DATA101）を介して取り込み、各チャンネル別に内蔵する波形バッファに書き込む処理である。補間処理は、読出書込回路１３１における図示しない補間回路により実行される処理であり、時分割チャンネルタイミングにしたがって、波形バッファから各チャンネルの波形サンプルを読み出し、補間を行なって各チャンネルの波形データを生成して時分割で出力する処理である。補間された波形データは、読出書込回路１３１からＥＧ付与回路１３２に供給される。
【０００５】
Ｘアクセス処理は、音源制御レジスタ１３０に内蔵されているＸアクセス回路１４０の制御の基で実行される処理であり、前述した処理Ｂや取り込み処理において処理を行うタイムスロットが空いた際に、そのタイムスロットで、ＣＰＵが波形メモリ１２１から波形データを読出／書込する処理、および、ミキサ１３３から出力されたミキシングされた波形データを波形メモリ１２１へ書き込む処理である。ＣＰＵが波形メモリ１２１から波形データを読み出すＸアクセス処理の際には、ＣＰＵはＸアクセス回路１４０に内蔵されたＸＡレジスタ１４２を指定するアドレスをアドレスバス（AD102）へ出力して、ＸＡレジスタ１４２にデータバス（DATA102）へ出力した波形データ読出アドレスを書き込む。読出書込回路１３１は、処理Ｂや取り込み処理において空いたタイムスロットを使用して、波形メモリ１２１にＸＡレジスタ１４２に書き込まれた波形データ読出アドレスをアドレスバス（AD101）を介して供給する。この際に、読出書込回路１３１は、リードイネーブル信号も波形メモリ１２１に供給する。
【０００６】
これにより波形メモリ１２１から供給されたアドレスに従ってデータバス（DATA101）上に波形データが読み出される。この波形データは、読出書込回路１３１を介してＸアクセス回路１４０に内蔵されているＦＩＦＯ（First In First Out）１４１に書き込まれる。ＦＩＦＯ１４１は先入れ先出し方式のバッファメモリである。ＣＰＵは読み出された波形データがＦＩＦＯ１４１に所定量書き込まれた際に、ＣＰＵの動作タイミングでＦＩＦＯ１４１を指定するアドレスをアドレスバス（AD102）へ出力して、ＦＩＦＯ１４１からその波形データをデータバス（DATA102）を介して読み出す。
【０００７】
また、ＣＰＵはＸアクセス回路１４０へ読み出す波形データの開始アドレスとデータ長の情報を供給し、Ｘアクセス回路１４０は波形メモリ１２１からデータを読み出す毎に開始アドレスからデータ長に対応するまで順次アドレスをインクリメントして連続する波形データ読出アドレスを発生する。この波形データ読出アドレスは内蔵するＸＡレジスタ１４２に書き込まれ、最終的に波形メモリ１２１に供給される。これにより、連続するアドレス位置に書き込まれている所定サンプル数の波形データを順次読み出してＦＩＦＯ１４１に順次格納することができるようになる。ＦＩＦＯ１４１に格納された波形データは書き込まれるタイミングと異なるＣＰＵの動作タイミングで、ＣＰＵによりＦＩＦＯ１４１から順次読み出される。
【０００８】
また、ミキサ１３３から出力される波形データを波形メモリ１２１へ書き込むＸアクセス処理の際には、ミキサ１３３から出力される波形データがＦＩＦＯ１４１に書き込まれる。ＣＰＵはＸアクセス回路１４０に内蔵されたＸＡレジスタ１４２に波形データ書込アドレス（先頭アドレス）を書き込む。読出書込回路１３１は、処理Ｂや取り込み処理において空いたタイムスロットを使用して、アドレスバス（AD101）を介して波形メモリ１２１にＸＡレジスタ１４２に書き込まれた波形データ書込アドレスを供給する。同時にＦＩＦＯ１４１から読み出された波形データが読出書込回路１３１を介してデータバス（DATA101）に出力されて、波形メモリ１２１に供給される。さらに、読出書込回路１３１から波形メモリ１２１へライトイネーブル信号が供給される。これにより、波形メモリ１２１へ波形データが書き込まれるようになる。
【０００９】
なお、ＣＰＵはＸアクセス回路１４０へ書込アドレスの開始アドレスと波形データのデータ長の情報を供給し、Ｘアクセス回路１４０は波形データを書き込む毎に開始アドレスからデータ長に対応するまで順次アドレスをインクリメントして連続する波形データ書込アドレスを発生する。この波形データ書込アドレスは内蔵するＸＡレジスタ１４２に書き込まれ、最終的に波形メモリ１２１に供給される。これにより、ミキサ１３３からＦＩＦＯ１４１に書き込まれた所定サンプル数の波形データを波形メモリ１２１の連続するアドレス位置に書き込むことができるようになる。この場合、ＦＩＦＯ１４１には、その空き状態に関わらず、ミキサ１３３からサンプリング周期ごとに１サンプルずつ順次波形データが書き込まれる。ＦＩＦＯ１４１から波形メモリ１２１への書き込み速度は、最悪でもサンプリング周期ごとに１サンプル以上とされているので、ＦＩＦＯが満杯になることはない。一方、ＣＰＵから波形データを波形メモリ１２１へ書き込むＸアクセス処理の際には、ＣＰＵはＦＩＦＯ１４１の空き状態を確認し、空きがある場合のみＦＩＦＯ１４１へ波形データを書き込むようになっている。
【００１０】
読出書込回路１３１から時分割で出力される各チャンネルの波形データは、ＥＧ付与回路１３２においてエンベロープが付与される。付与されるエンベロープは、ＣＰＵから与えられて音源制御レジスタ１３０に格納されている各チャンネルのエンベロープパラメータに基づいて決定される。
エンベロープが付与された、例えば３２チャンネル分の波形データはミキサ１３３に供給される。さらに、ミキサ１３３には信号処理回路（ＤＳＰ）１３４から出力されるエフェクト処理等がされた、例えば８チャンネル分の波形データ、および外部回路１２２からフィルタ処理やエフェクト処理等がされた、例えば８チャンネル分の波形データが供給されている。ミキサ１３３は、これらの供給された各チャンネルの波形データにそれぞれ係数値を乗算してミキシングする。
【００１１】
係数値はＣＰＵから音源制御レジスタ１３０に音源パラメータとして与えられて、内蔵するレジスタに格納されている。ミキサ１３３においてミキシングされた波形データは、８チャンネル分がＤＳＰ１３４に、８チャンネル分が外部回路１２２に、１チャンネル分が音源制御レジスタ１３０内のＸアクセス回路１４０に、音源部１２０の最終的な出力となる２チャンネル（ＬおよびＲ出力）分がＤＡＣ１２３に、それぞれ出力されるようになされている。このように、ミキサ１３３はＣＰＵから指定されたチャンネルの波形データに指定された係数値を乗算してミキシングし、そのミキシング結果をＣＰＵの指定に基づく出力部へ指定されたチャンネルで送出するようにしている。
【００１２】
【発明が解決しようとする課題】
ところで、音源部１２０においてＣＰＵ側から波形データを扱うために、音源部１２０にコーデック機能を持たせることが考えられる。この場合、音源部はＤＡＣにおけるＤＡＣ周期を基準として動作しているが、ＣＰＵはＤＡＣ周期とは直接関係しない動作タイミングで動作していることから、コーデック機能を持たせるためにはバッファを増設しなければならないという問題点があった。
【００１３】
そこで本発明は、もともとＣＰＵによる波形メモリアクセス用に用意されていた回路を活用して、少ない回路の増設によりコーデック機能を有させることのできる音源装置を提供することを目的としている。
【００１４】
【課題を解決するための手段】
上記目的を達成するため、本発明にかかる第１の音源装置は、波形データが読み書き可能な波形メモリと、該波形メモリから波形データを読み出し、読み出した波形データに基づいて周期がサンプリング周期とされている楽音波形データを生成する楽音生成手段と、前記楽音生成手段の生成した楽音波形データを含む波形データが入力され、ミキシング処理を行って、周期がサンプリング周期とされている混合された波形データを出力するミキシング手段と、前記楽音生成手段および前記ミキシング手段の動作を制御する制御手段と、前記楽音生成手段が前記波形メモリをアクセスしていない時間において、前記制御手段の制御の基で、前記波形メモリの波形データの連続的な読み出しあるいは書き込みのアクセスを行うとともに、前記ミキシング手段からサンプリング周期ごとに入力する波形データを前記制御手段へ受け渡しするアクセス手段と、該アクセス手段に内蔵されている記憶手段とを備え、前記アクセス手段は、前記記憶手段の第１領域を、前記制御手段の制御の基で行われる前記波形メモリの読み出し時に読み出された波形データを前記制御手段に受け渡しするために一時的に記憶するバッファ、および、書き込み時の波形データを前記波形メモリに受け渡しするために一時的に記憶するバッファとして使用するとともに、前記記憶手段の第２領域を、前記ミキシング手段から入力する波形データを前記制御手段に受け渡しするために一時的に記憶するバッファとして使用可能とされている。
【００１５】
次に、上記目的を達成することのできる本発明にかかる第２の音源装置は、波形データが読み書き可能な波形メモリと、
該波形メモリから波形データを読み出し、読み出した波形データに基づいて周期がサンプリング周期とされている楽音波形データを生成する楽音生成手段と、前記楽音生成手段の生成した楽音波形データを含む波形データが入力され、ミキシング処理を行って、周期がサンプリング周期とされている混合された波形データを出力するミキシング手段と、前記楽音生成手段および前記ミキシング手段の動作を制御する制御手段と、前記楽音生成手段が前記波形メモリをアクセスしていない時間において、前記制御手段の制御の基で、前記波形メモリの波形データの連続的な読み出しあるいは書き込みのアクセスを行うとともに、前記制御手段から順次入力される波形データをサンプリング周期ごとに前記ミキシング手段へ出力するアクセス手段と、該アクセス手段に内蔵されている記憶手段とを備え、前記アクセス手段は、前記記憶手段の第１領域を、前記制御手段の制御の基で行われる前記波形メモリの読み出し時に読み出された波形データを前記制御手段に受け渡しするために一時的に記憶するバッファ、および、書き込み時の波形データを前記波形メモリに受け渡しするために一時的に記憶するバッファとして使用するとともに、該記憶手段の第２領域を、前記制御手段から前記ミキシング手段に入力される波形データを一時的に記憶するバッファとして使用可能とされている。
【００１６】
また、上記本発明の第１および第２の音源装置において、前記記憶手段における前記第１領域のサイズと前記第２領域のサイズとを、ユーザの指示あるいは動作状況に応じてそれぞれ変更可能とされていてもよい。
また、上記本発明の第１および第２の音源装置において、さらに、前記第１領域および前記第２領域であるバッファにおける波形データの状態を検出し、前記制御手段に対してデータ受取あるいはデータ供給の要求を発生する検出手段と、該検出手段における検出条件を変更する条件変更手段とを有し、前記制御手段は、該データ受取あるいはデータ供給の要求に応じて、該要求に対応する領域であるバッファからのデータ受取あるいは該バッファへのデータ供給を実行するようにしてもよい。
【００２１】
このような本発明によれば、制御手段の制御の基で、波形メモリへのアクセスを行うアクセス手段に内蔵された記憶手段が、波形メモリへの波形データの書き込みや、波形メモリからの波形データの読み出しを行う際に波形データを一次記憶するバッファと、制御手段が波形データを扱うために一次記憶するコーデック用のバッファとに分割されている。これにより、バッファを増設することなくコーデック機能を音源装置に有させることができるようになる。この場合、分割されて構成された各バッファにおいては制御手段への割込条件やデータ要求発生条件を変更できるようにされているので、記憶手段を分割してバッファを構成するようにしても、効率よく各バッファを使用することができるようになる。
【００２２】
【発明の実施の形態】
本発明の実施の形態にかかる波形メモリを備えている音源装置を有する楽音生成装置の構成例を示すブロック図を図１に示す。
図１に示す楽音生成装置１おいて、ＣＰＵ１０は各種プログラムを実行することにより楽音生成装置１における楽音生成の動作を制御する中央処理装置（Central Processing Unit）であり、タイマ１１は動作時の経過時間を示したり、特定の間隔でタイマ割込を発生するタイマであり、自動演奏の時間管理等に使用される。ＲＯＭ１２は、ＣＰＵ１０が実行する楽音生成処理のプログラムや、各種データが格納されているＲＯＭ（Read Only Memory）である。ＲＡＭ１３は楽音生成装置１におけるメインメモリであり、ＣＰＵ１０のワークエリア等が設定されるＲＡＭ（Random Access Memory）である。
【００２３】
また、ディスク１４はハードディスク、フロッピーディスク、リムーバブルディスク等の記録媒体であり、波形メモリ２１にロードする波形データなどが格納されている。ドライブ１５はセットされたディスク１４の読出／書込を行うディスクドライブである。ＭＩＤＩインタフェース１６は、楽音生成装置１内部で作成したＭＩＤＩメッセージを外部へ送出したり、外部からのＭＩＤＩメッセージを受信するＭＩＤＩインターフェースである。ネットワークインタフェース１７は、ＬＡＮ（Local Area Network ）やインターネット、電話回線等の通信ネットワークを介してサーバコンピュータに接続するためのネットワークインターフェースである。パネルスイッチ（パネルＳＷ）１８は、楽音生成装置１のパネルに設けられている各種スイッチであり、これを操作することにより楽音生成装置１に各種指示を与えることができる。パネル表示器１９は、楽音生成時に各種情報が表示されるディスプレイである。
【００２４】
音源部２０は、ＣＰＵ１０からの発音開始指示に基づいて、波形メモリ２１から波形データ（波形サンプル）を読み出し、補間、エンベロープ付与、チャンネル累算（ミキシング）、および効果（エフェクト）付与などの処理を行って、楽音波形データとして出力している。音源部２０から出力された楽音波形データは、ＤＡＣ２３によりアナログ信号に変換され、サウンドシステム２４により放音される。波形メモリ２１は、ＳＤＲＡＭ等の高速のメモリにより構成されており、所定のレートでサンプリングされた多数の波形サンプルデータが格納されている。１ワードの波形サンプルは、例えば１６ビットあるいは３２ビットで表され、アドレスは波形サンプル単位に付けられている。すなわち、１アクセスで１つの波形サンプルを読み出すようにしている。波形メモリ２１には、楽音の生成に先立ってディスク１４等から読み出された波形データが格納されている。
【００２５】
外部回路２２は、外部から音声や楽音等のオーディオデータを取り込むためのアナログ・ディジタル変換器（ＡＤＣ）、効果（エフェクト）付与処理を行なう外部ＤＳＰ、あるいはディジタルフィルタなどで構成される。音源部２０から外部回路２２へ供給された波形データには、外部回路２２においてエフェクト付与処理やディジタルフィルタ処理が施されて、音源部２０へ戻される。音源部２０においては、戻された波形データが他のチャンネルの波形データにミキシングされて出力されるようになる。なお、外部回路２２は楽音生成装置１に内蔵してもよいし、楽音生成装置１の外部に設けてもよい。ディジタル・アナログ変換器（ＤＡＣ）２３は、音源部２０から最終的に出力されるステレオの楽音データをディジタルの楽音信号に変換してサウンドシステムから放音している。また、バス２５はアドレスバス、コントロールバス、データバスの各バスを備える前記した各部を相互接続しているＣＰＵバスである。
【００２６】
次に、本発明の実施の形態にかかる波形メモリを備えている音源装置である音源部２０の詳細構成を図２に示し、図３に音源部２０における動作タイミングを示す。この音源部２０において発音チャンネル数が１２８チャンネルとされている場合は、音源部２０は時分割１２８チャンネルで動作する。このため、音源部２０内の各部には、時分割を行なうための基準信号となる制御クロック信号やチャンネルカウント値などの制御信号が供給されている。
図２において、波形メモリ２１は読み書き可能な、例えばＳＤＲＡＭ（Synchronous DRAM）により構成されており、音源部２０において楽音を生成する際には予めディスク１４等から読み出した複数の比較的短期間のサンプリング波形が記憶されている。音源部２０では、この波形メモリ２１からチャンネル毎に時分割で読み出された波形データに基づいて各チャンネルの楽音を生成している。
【００２７】
ノートオンに応じて楽音を発生する際に、楽音生成装置１におけるＣＰＵ１０は、前記１２８チャンネルから該ノートオンに応じた楽音生成に使用するチャンネル（割り当てチャンネル）を選択し、音源制御レジスタ３０の割り当てチャンネルに対応する記憶領域に各種音源パラメータを設定し、選択されたチャンネルの発音の開始指示を出す。この音源制御レジスタ３０にはＣＰＵ１０からアドレスバス（AD4）を介してアドレスが供給されると共に、データバス（DATA4）を介して各種データのやりとりが行われる。図２においては、データバス（DATA4）が複数本示されているが、説明の便宜上複数本として示しているだけであり、実際には１本のバスとされている。上記した音源パラメータ情報はＣＰＵ１０からデータバス（DATA4）を介して音源制御レジスタ３０に供給され、音源制御レジスタ３０においてＣＰＵ１０からアドレスバス（AD4）を介して与えられるレジスタアドレスで示されるレジスタに格納される。
【００２８】
発音開始指示と共に音源制御レジスタ３０に供給される音源パラメータ情報は、波形メモリ読み出し速度（楽音ピッチに対応）、波形メモリ読み出し区間、エンベロープパラメータ、ミキサ３３に対する設定情報、およびエフェクト用係数等とされる。この内の波形メモリ読み出し区間パラメータは、読み出す波形データの開始アドレスＡＳおよびそのデータ長ＬＰＡとされる。この場合、アドレスバス（AD4）上のレジスタアドレスで示される音源制御レジスタ３０内の特定のレジスタに、データバス（DATA４）を介して供給される音源パラメータが格納される。これにより、複数のそれぞれのレジスタに対応する音源パラメータがそれぞれ格納されていくようになる。
【００２９】
音源制御レジスタ３０および読出書込回路３１は、処理Ａ、処理Ｂ、取り込み処理、および補間処理、Ｘアクセス処理、およびコーデック入出力処理の６つの処理を行なう。各処理の概要および処理タイミングは次の通りである。処理Ａは、音源制御レジスタ３０から供給される波形データの開始アドレスＡＳおよびそのデータ長ＬＰＡやピッチＰＩＴＣＨ等の情報に基づいて、楽音生成のために時分割チャンネルタイミングにしたがって各発音チャンネルの波形データ読出アドレスを作成する処理である。各チャンネルのアドレスは、読出書込回路３１内の図示しないレジスタに保持される。発音チャンネル数が１２８チャンネルとされている場合は、処理ＡはＤＡＣ２３における１ＤＡＣ周期内において１２８チャンネル分の波形データ読出アドレスを作成する。なお、後述するように、本発明にかかる楽音生成装置１では、ミキサ３３から出力される波形データを波形メモリ２１に書き込むための書込チャンネルとして、この１２８チャンネルのうちの最後の１６チャンネルを転用することが可能である。
【００３０】
この場合、図３に示すように１ＤＡＣ周期は前半と後半とに２分割されて、前半の期間では１ｃｈ〜６４ｃｈの波形データ読出アドレスが作成され（処理Ａ前半ｃｈ）、後半の期間では６５ｃｈ〜１２８ｃｈの波形データ読出アドレスが作成される（処理Ａ後半ｃｈ）。処理Ａでは、全チャンネルについて読出アドレスの生成を行ない、かつ、各チャンネルの読出アドレスの整数部の進行量に応じて波形データを読み出すべきチャンネルを決定し、決定されたチャンネルのチャンネル番号とそのチャンネルでの読み出すべきサンプル数（前記進行量に対応）を制御ＲＡＭに格納する。なお、補間処理における４点補間では連続する４サンプルの波形データが必要になるが、そのうちの過去に波形メモリ２１から読み出された波形データは波形バッファに既に保存されている。なお、１ｃｈ〜１２８ｃｈの各チャンネルの処理を行うタイムスロットは１ＤＡＣ周期を等分割して与えられる。すなわち、処理Ａにおける各チャネルに割り当てられるタイムスロットは１ＤＡＣ周期をＴとするとＴ／１２８とされ、このタイムスロットにおいて図示するようにチャンネル順に処理される。
【００３１】
処理Ｂは、読出書込回路３１において処理Ａよりほぼ１／２ＤＡＣ周期だけ遅れて実行される処理であり、後述するタイミングで処理Ａが終了したチャンネルについて行われる。処理Ｂは、制御ＲＡＭに読み出すべきチャンネルとして記憶されているチャンネルについて、当該チャンネルの読出アドレスに基づいて制御ＲＡＭに記憶されているアクセス回数だけ波形メモリをアクセスし、該回数分の波形サンプルを読み出している。この場合、図３に示すように１ＤＡＣ周期の前半の期間では１ｃｈ〜６４ｃｈについての波形メモリ２１からの読み出しが実行され（処理Ｂ前半ｃｈ）、後半の期間では６５ｃｈ〜１２８ｃｈについての波形メモリ２１からの読み出しが実行される（処理Ｂ後半ｃｈ）。この場合、処理Ａにおいて、波形データを読み出すべきチャンネルとしてチャンネル番号が制御ＲＡＭに格納されなかったチャンネルについては、処理Ｂの処理は行われない。処理Ｂが行われるタイムスロットは処理Ａの１タイムスロットの１／４とされ、１ＤＡＣ周期をＴとするとＴ／５１２とされる。１ＤＡＣ周期ごとに５１２回ということは、音源の１チャンネル当たり４サンプルの波形データを読み出すことができることを意味している。
【００３２】
そして、処理Ａにおいて記憶されたアクセス回数が複数であったチャンネル（すなわち、読出アドレスの整数部が複数進行したチャンネル）については、それぞれの波形データ読出アドレスに対する処理Ｂが該アクセス回数に対応したタイムスロット数ずつ順次実行されるようになる。例えば、図３の処理Ｂに示すように１ｃｈについては処理Ｂが１タイムスロットで行われ、２ｃｈについては処理Ｂは行われず、３ｃｈについては処理Ｂが３タイムスロットで行われ、４ｃｈについては処理Ｂは行われず、５ｃｈについては処理Ｂが１タイムスロットで行われ、６ｃｈについては処理Ｂは行われず、７ｃｈについては処理Ｂが２タイムスロットで行われ、発音されていない８ｃｈ〜６４ｃｈについては処理Ｂは行われないようになる。なお、書込チャンネルとして設定されたチャンネルについては、処理Ｂにおいて、波形データ書込アドレスが生成される。この書込チャンネルのアクセス回数は、それぞれ、常に１回とされる。
【００３３】
このように、処理Ｂが行われないチャンネルがあることから処理Ｂの前半期間においては７ｃｈの処理が終了してから後半期間が始まるまでのタイムスロットが空くようになると共に、後半期間においても後には次の前半期間が始まるまでにタイムスロットに空きが生じるようになる。そこで、この空いたタイムスロットを使用してＸアクセス回路４０によるＸアクセス処理が行われるようになる。なお、処理Ｂにおいてタイムスロットが空くまでは読出書込回路３１がセレクタ制御信号（CONT1）をセレクタ３５に与えて、セレクタ３５を読出書込回路３１側へ切り換える。これにより、読出書込回路３１からアドレスバス（AD2）を介して波形データ読出アドレスを波形メモリ２１へ供給することができるようになる。また、処理Ｂにおいてタイムスロットに空きが生じるようになると、読出書込回路３１がセレクタ制御信号（CONT1）によりセレクタ３５をＸアクセス回路４０側へ切り換える。さらに、読出書込回路３１はセレクタ制御信号（CONT2）をＸアクセス回路４０へ与えて後述するＸアクセス処理を実行できるようにする。
【００３４】
また、取り込み処理は、読出書込回路３１により実行される処理であり、処理Ｂにより波形メモリ２１に供給された波形データ読出アドレスにしたがって読み出された波形データをデータバス（DATA1）を介して取り込み、各チャンネル別に内蔵する波形バッファに書き込む処理である。この波形バッファは、サンプル間補間用の波形データを記憶するバッファであり、各チャンネルごとに波形メモリ２１から読み出された最新の波形データを４サンプル分記憶する。処理Ｂにおいて波形データ読出アドレスが波形メモリ２１に供給されると、波形メモリ２１から直ちに波形データが読み出されることから、取り込み処理は、図３に示すように処理Ｂからわずか遅れて開始されるようになる。この場合、１つの波形データ読出アドレスで１つの波形サンプルが読み出されることから、図３の取り込み処理に示すように１ｃｈについては波形データが１サンプル分取り込まれ、２ｃｈについては波形データは取り込まれず、３ｃｈについては波形データが３サンプル分取り込まれ、４ｃｈについては波形データは取り込まれず、５ｃｈについては波形データが１サンプル分取り込まれ、６ｃｈについては波形データは取り込まれず、７ｃｈについて波形データが２サンプル分取り込まれ、８ｃｈ〜６４ｃｈについては波形データは取り込まれないようになる。なお、書込チャンネルとして設定されたチャンネルについては、この取り込み処理の代わりに、前記波形メモリ書込アドレスに対し、ミキサ３３から１ＤＡＣ周期ごとに１サンプルずつ供給される波形データを書き込む書込処理が行われる。
【００３５】
このように、波形データが取り込まれないチャンネルがあることから取り込み処理の前半期間においては７ｃｈの処理が終了してから後半期間が始まるまでのタイムスロットが空くようになると共に、後半期間においても後には次の前半期間が始まるまでのタイムスロットに空きが生じるようになる。そこで、この空いたタイムスロットを後述するＸアクセス処理を行うＸアクセス回路４０が波形メモリ２１にアクセスする際のタイムスロットとして割り当てるようにする。なお、取り込み処理における１タイムスロットは処理Ｂの１タイムスロットと同様とされ、１ＤＡＣ周期をＴとするとＴ／５１２とされる。なお、取り込み処理においてタイムスロットが空くまでは読出書込回路３１がセレクタ制御信号（CONT1）をセレクタ３５に与えて、セレクタ３５を読出書込回路３１側へ切り換える。これにより、波形メモリ２１から読み出した波形データをデータバス（DATA1）、セレクタ３５およびデータバス（DATA2）を介して読出書込回路３１の波形バッファに取り込むことができるようになる。また、取り込み処理においてタイムスロットに空きが生じるようになると、読出書込回路３１がセレクタ制御信号（CONT1）によりセレクタ３５をＸアクセス回路４０側へ切り換える。さらに、読出書込回路３１はセレクタ制御信号（CONT2）をＸアクセス回路４０へ与えて後述するＸアクセス処理を実行できるようにする。
【００３６】
補間処理は、読出書込回路３１における図示しない補間回路により実行される処理であり、時分割チャンネルタイミングにしたがって、波形バッファから各チャンネルの必要とする波形サンプルを読み出し、２点補間や４点補間を行なった波形データを出力する処理である。この場合、波形バッファには取り込み処理により取り込まれた波形データが格納されていることから、補間処理は取り込み処理より若干遅れて開始されるようになる。補間された波形データは、読出書込回路３１からＥＧ付与回路３２に供給される。この場合、図３に示すように１ＤＡＣ周期の前半の期間では１ｃｈ〜６４ｃｈの補間処理が行われ（補間前半ｃｈ）、後半の期間では６５ｃｈ〜１２８ｃｈの補間処理が行われる（補間後半ｃｈ）。なお、１ｃｈ〜１２８ｃｈの各チャンネルの補間処理時間は１ＤＡＣ周期を等分割して与えられる。すなわち、補間処理における各チャネルに割り当てられるタイムスロットは１ＤＡＣ周期をＴとするとＴ／１２８とされ、このタイムスロットにおいて図示するようにチャンネル順に処理される。
【００３７】
Ｘアクセス処理は、音源制御レジスタ３０内に設けられているＸアクセス回路４０の制御の基で実行される処理である。このＸアクセス処理は、前述した処理Ｂや取り込み処理において処理を行うタイムスロットが空いた際に、そのタイムスロットで、ＣＰＵ１０が波形メモリ２１から波形データを読出／書込する処理である。この際には、読出書込回路３１から制御信号（CONT2）がＸアクセス回路４０に供給されることにより上記したタイムスロットにおいて実行可能となる。さらに、セレクタ３５が制御信号（CONT1）によりＸアクセス回路４０側へ切り換えられて、アドレスバス（AD3）とデータバス（DATA３）が波形メモリ２１へ接続されるようになる。
【００３８】
ＣＰＵ１０が波形メモリ２１から波形データを読み出すＸアクセス処理を実行する際には、ＣＰＵ１０はＸアクセス回路４０に内蔵されたＸＡレジスタ４２を指定するアドレスをアドレスバス（AD4）へ出力して、ＸＡレジスタ４２にデータバス（DATA4）へ出力した波形データ読出アドレスの先頭アドレスを書き込むとともに、図示しないデータ長レジスタにデータ長を書き込む。読出書込回路３１は、処理Ｂや取り込み処理においてタイムスロットが空くと、制御信号（CONT1）をセレクタ３５に供給して切り換え、波形メモリ２１にＸＡレジスタ４２に書き込まれた波形データ読出アドレスをアドレスバス（AD3）、セレクタ３５およびアドレスバス（AD1）を介して供給する。この際に、読出書込回路３１は、リードイネーブル信号も波形メモリ２１に供給する。
【００３９】
これにより、供給されたアドレスに従ってデータバス（DATA1）上に波形メモリ２１から波形データが読み出される。この波形データは、セレクタ３５およびデータバス（DATA3）を介してＸアクセス回路４０に内蔵されているＦＩＦＯ４１のＣＰＵアクセス用領域４１ａに書き込まれる。後述するようにＦＩＦＯ４１には３つの領域が設定されるが、それぞれ、先入れ先出し方式のバッファメモリとして使用され、３つの領域の記憶容量の合計は５１２ワードとされている。波形メモリ２１から読み出された波形データがＦＩＦＯ４１のＣＰＵアクセス領域４１ａに書き込まれた後、ＣＰＵ１０は、ＤＡＣ周期とは独立した独自のタイミングでＦＩＦＯ４１を指定するアドレスをアドレスバス（AD4）へ出力して、ＦＩＦＯ４１のＣＰＵアクセス領域４１ａからデータバス（DATA4）を介して波形データを読み出す。
【００４０】
また、ＣＰＵ１０はＸアクセス回路４０へ読み出す波形データの先頭アドレスとデータ長の情報を供給し、Ｘアクセス回路４０は波形メモリ２１からデータを読み出す毎に先頭アドレスからデータ長に対応するまで順次アドレスをインクリメントして連続する波形データ読出アドレスを発生する。この波形データ読出アドレスは内蔵するＸＡレジスタ４２に書き込まれ、最終的に波形メモリ２１に供給される。これにより、連続するアドレス位置に書き込まれている所定サンプル数の波形データを順次読み出してＦＩＦＯ４１に順次格納することができるようになる。ＦＩＦＯ４１に格納された波形データは書き込まれるタイミングと異なるＣＰＵ１０の動作タイミングにより読み出されてＣＰＵ１０に取り込まれる。
【００４１】
また、波形メモリ２１へ波形データを書き込むＸアクセス処理の際には、ＣＰＵ１０はＸアクセス回路４０に内蔵されたＸＡレジスタ４２を指定するアドレスをアドレスバス（AD4）へ出力して、ＸＡレジスタ４２にデータバス（DATA4）へ出力した波形データ書込アドレスの先頭アドレスを書き込む。さらに、ＣＰＵ１０はＸアクセス回路４０に内蔵されたＦＩＦＯ４１のＣＰＵアクセス領域４１ａを指定するアドレスをアドレスバス（AD4）へ出力して、波形メモリ２１へ書き込まれる波形データをＦＩＦＯ４１のＣＰＵアクセス領域４１ａに所定量だけ書き込むとともに、図示しないデータ長レジスタにデータ長を書き込む。読出書込回路３１は、処理Ｂや取り込み処理においてタイムスロットが空くと、制御信号（CONT1）をセレクタ３５に供給して切り換え、波形メモリ２１にＸＡレジスタ４２に書き込まれた波形データ書込アドレスをアドレスバス（AD3）、セレクタ３５およびアドレスバス（AD1）を介して供給する。同時に、ＦＩＦＯ４１から波形データを読み出してデータバス（DATA3）、セレクタ３５およびデータバス（DATA1）を介して波形メモリ２１に供給する。この際に、読出書込回路３１は、ライトイネーブル信号も波形メモリ２１に供給する。これにより、供給された書込アドレスにしたがって、波形メモリ２１へ供給された波形データが書き込まれるようになる。
【００４２】
なお、ＣＰＵ１０はＸアクセス回路４０へ書込アドレスの先頭アドレスと波形データのデータ長の情報を供給し、Ｘアクセス回路４０は波形データを書き込む毎に開始アドレスからデータ長に対応するまで順次アドレスをインクリメントして連続する波形データ書込アドレスを発生する。この波形データ書込アドレスは内蔵するＸＡレジスタ４２に書き込まれ、最終的に波形メモリ２１に供給される。これにより、ＦＩＦＯ４１のＣＰＵアクセス領域４１ａに所定量ずつ書き込まれた所定サンプル数の波形データを波形メモリ２１の連続するアドレス位置に書き込むことができるようになる。この場合、ＦＩＦＯ４１のＣＰＵアクセス領域４１ａにおける空き状態に応じてＣＰＵ１０に割込要求が発生し、ＦＩＦＯ４１のＣＰＵアクセス領域４１ａにＣＰＵ１０から順次波形データが書き込まれるようになる。
【００４３】
なお、Ｘアクセス処理においてＸＡレジスタ４２は２個のレジスタを備え、それぞれのレジスタに２系統のアドレスを格納することができる。この２系統のアドレスはステレオのＬチャンネル用とＲチャンネル用とされ、その先頭アドレスはＣＰＵ１０から供給される。例えば、Ｘアクセス処理により波形メモリ２１からステレオの波形データをＣＰＵ１０が取り込む場合は、ＸＡレジスタ４２に格納されたＬチャンネル用のアドレスとＲチャンネル用のアドレスとが時分割されて交互に波形メモリ２１に供給される。これにより、波形メモリ２１からステレオのＬデータとＲデータとが交互に読み出されるようになる。このＬデータとＲデータとが、ＦＩＦＯ４１にインターリーブされて交互に書き込まれるようになる。ＣＰＵ１０はＦＩＦＯ４１に書き込まれたインターリーブされて格納されているＬデータとＲデータとを読み出して取り込めばよい。Ｘアクセス処理によりＣＰＵ１０が波形メモリ２１からステレオの波形データを読み込む際、Ｘアクセス回路４０によって波形メモリ２１から波形メモリ２１の個別の領域に記録されたＬチャンネルの波形データとＲチャンネルの波形データが自動的にインターリーブされる。また、Ｘアクセス処理によりＣＰＵ１０がステレオの波形データを波形メモリ２１に書き込む際も同様に、ＸＡレジスタ４２に格納されたＬチャンネル用のアドレスとＲチャンネル用のアドレスが交互に波形メモリ２１に供給され、ＣＰＵ１０からのインターリーブされた波形データがＬチャンネルの波形データとＲチャンネルの波形データに分離されて波形メモリ２１の異なる領域に書き込まれる。このように、ＣＰＵ１０がステレオ波形データのインターリーブやその解除を行う必要がなく、ＣＰＵ１０の負荷が軽減される。
【００４４】
ここで、ミキサ３１から出力される波形データを、読出書込回路３１により波形メモリ２１へ書き込む処理について説明する。ＣＰＵ１０は、読出書込回路３１の最後の１６チャンネルから書き込みに使用するチャンネルを選択し、音源制御レジスタ３０にそのチャンネルを書込チャンネルとするための設定を行うとともに、ミキサ３１でミキシングした波形データから１つの波形データを選択し、当該書込チャンネルに供給するための設定を行う。さらに、ＣＰＵ１０は、音源制御レジスタ３０の該チャンネルの開始アドレスＡＳに波形データ書込アドレス（先頭アドレス）、データ長ＬＰＡに書き込むデータ長をそれぞれ設定し、書き込み処理の開始を指示する。
【００４５】
読出書込回路３１は、処理Ｂの書込チャンネルに対応したタイムスロットで、アドレスバス（AD2）、セレクタ３５およびアドレスバス（AD1）を介して波形メモリ２１に当該書込チャンネルのアドレスカウンタに格納されている波形データ書込アドレスを供給する。同時にミキサ３３から当該書込チャンネルに供給されている波形データを、データバス（DATA2）、セレクタ３５およびデータバス（DATA1）を介して波形メモリ２１に供給する。さらに、読出書込回路３１から波形メモリ２１へライトイネーブル信号が供給される。これにより、波形メモリ２１へ波形データが書き込まれるようになる。
ところで、書込チャンネルのアドレスカウンタには、書き込み開始時に先頭アドレスＡＳに設定された先頭アドレスがロードされる。該アドレスカウンタのカウント値は、当該書込チャンネルの書き込みが行われる毎にデータ長ＬＰＡに設定されたデータ長に対応するまで順次アドレスがインクリメントされ、連続する波形データ書込アドレスとなる。この波形データ書込アドレスが波形メモリ２１に供給され、波形メモリ２１の当該アドレスの示す記憶位置にミキサ３３から供給される波形データが書き込まれるようになる。
【００４６】
次に、読出書込回路３１から時分割で出力される各チャンネルの補間された波形データは、ＥＧ付与回路３２においてエンベロープが付与される。付与されるエンベロープは、ＣＰＵ１０から与えられて音源制御レジスタ３０のレジスタに格納されている各チャンネルのエンベロープパラメータに基づいて決定される。エンベロープが付与された、例えば１２８チャンネル分の波形データはミキサ３３に供給される。さらに、ミキサ３３には信号処理回路（ＤＳＰ）３４から出力されるエフェクト処理等がされた、例えば８チャンネル分の波形データ、および外部回路２２からフィルタ処理やエフェクト処理等がされた、例えば８チャンネル分の波形データが供給されている。ミキサ３３は、これらの供給された各チャンネルの波形データにそれぞれ係数値を乗算してミキシングする。係数値はＣＰＵ１０から音源制御レジスタ３０に与えられて、内蔵するレジスタに格納されている。ミキサ３３においてミキシングされた波形データは、８チャンネル分がＤＳＰ３４に、８チャンネル分が外部回路２２に、音源部２０の最終的な出力となる２チャンネル（ＬおよびＲ出力）分がＤＡＣ２３に、それぞれ出力されるようになされている。そして、ＤＡＣ２３によりアナログ信号に変換された楽音信号はサウンドシステム２４から放音されるようになる。このように、ミキサ３３はＣＰＵ１０から指定されたチャンネルの波形データに指定された係数値を乗算してミキシングし、そのミキシング結果をＣＰＵ１０の指定に基づく出力部へ指定されたチャンネルで送出するようにしている。
【００４７】
次に、コーデック入出力処理を説明するが、ここでいうコーデックとは、ＣＰＵ１０が、音源部２０に対しＤＡＣ周期で波形データを供給したり、音源部２０からＤＡＣ周期で出力される波形データを受け取ったりするためのコーデック入出力機能を意味している。このコーデック入出力機能により、ＣＰＵ１０から直接に波形データを入出力することができるようになる。コーデック入出力処理においては、ＤＡＣ周期を基準として動作する音源部２０と、これとは異なる動作タイミングで動作しているＣＰＵ１０との間で波形データの受け渡しが行われるため、波形バッファが必要になる。この波形バッファとしてＦＩＦＯ４１を用いるため、ＦＩＦＯ４１は図６（ｃ）に示すように３分割されている。例えば、ＦＩＦＯ４１の約１／２が前述したＸアクセス処理を行う際の波形バッファとして割り当てられ、この領域をＣＰＵアクセス用領域４１ａというものとする。そして、残る領域の内の約１／２（全体の約１／４）ずつを出力コーデック用領域４１ｃと入力コーデック用領域４１ｂとして割り当てる。
【００４８】
コーデック入出力処理では、例えば、外部回路２２としてＡＤ変換器を接続し、該ＡＤ変換器で入力波形をディジタルの波形データに変換してミキサ３３に入力されている場合、入力コーデック機能によりその波形データ（ストリームデータ）をＣＰＵ１０が取り込んで録音することができる。この場合、１ＤＡＣ周期毎に、ＡＤ変換器から入力される波形データが、ミキサ３３を介して音源制御レジスタ３０に内蔵されているＦＩＦＯ４１の入力コーデック領域４１ｂに書き込まれる。ＦＩＦＯ４１の入力コーデック用領域４１ｂに所定量の波形データが書き込まれると、ＣＰＵ１０にデータ読出要求が通知されＣＰＵ１０はＦＩＦＯ４１の入力コーデック用領域４１ｂから波形データを読み出して、ＲＡＭ１３に書き込むようにする。これにより、外部回路２２から入力されたオーディオ信号をＣＰＵ１０が取り込んで録音できるようになる。なお、ＣＰＵ１０の代わりにＤＭＡ（Direct Memory Access）コントローラがＦＩＦＯ４１の入力コーデック用領域４１ｂから波形データを読み出して、ＲＡＭ１３に直接書き込むようにしてもよい。この場合は、ＣＰＵ１０に余り負担をかけずに、波形データの転送を行うことができる。
【００４９】
また、コーデック入出力処理では、ＲＡＭ１３に格納されている波形データ（ストリームデータ）を、ＣＰＵ１０が取り出して再生すること（出力コーデック）ができる。この処理は、ＲＡＭ１３から読み出された波形データが音源制御レジスタ３０に内蔵されているＦＩＦＯ４１の出力コーデック用領域４１ｃに、該領域４１ｃからデータがあふれないようにＣＰＵ１０のタイミングで波形データを書き込む。ＦＩＦＯ４１の出力コーデック用領域４１ｃに書き込まれた波形データは、１ＤＡＣ周期ごとに１サンプルずつ、順次ミキサ３３にミキサ入力として入力される。例えば、ミキサ３３において該波形データをＤＳＰ３４に供給するよう設定されている場合には、ＤＳＰ３４において該波形データに対してエフェクト処理を施すことができる。
【００５０】
この波形データはミキサ３３において生成された楽音データにミキシングされて、ＤＡＣ２３に供給され楽音信号と共に放音されるようになる。この場合、ＦＩＦＯ４１の出力コーデック用領域４１ｃに書き込まれた波形データが所定量以下となった場合は、ＣＰＵ１０にデータ書込要求が通知されて、ＣＰＵ１０はＲＡＭ１３から出力コーデック領域４１ｃの空き容量に対応する量の波形データを読み出して、ＦＩＦＯ４１の出力コーデック用領域４１ｃに書き込むようにする。これにより、ＲＡＭ１３に格納されている波形データをＣＰＵ１０が取り出して再生することができるようになる。なお、ＣＰＵ１０の代わりにＤＭＡ（Direct Memory Access）コントローラがＲＡＭ１３からストリームデータを読み出して、ＦＩＦＯ４１の出力コーデック用領域４１ｃに直接書き込むようにしてもよい。この場合は、ＣＰＵ１０に余り負担をかけずに、波形データの転送を行うことができる。
【００５１】
ところで、図２に示す音源部２０におけるＦＩＦＯ４１は図６（ｃ）に示すように分割して使用しなければならないものではない。すなわち、図６（ａ）に示すようにＦＩＦＯ４１の全体をＣＰＵアクセス用領域４１ａとして割り当てるようにしても良いし、図６（ｂ）に示すようにＦＩＦＯ４１の３／４をＣＰＵアクセス用領域４１ａとして割り当て、残る１／４を出力コーデック用領域４１ｃとして割り当てるようにしても良い。後述するように、各領域の位置およびサイズはＦＩＦＯ制御レジスタ４４の分割データにより制御されている。この設定は、ユーザからの指示や楽音生成装置１の動作状況に応じて随時変更すると良い。例えば、入出力コーデック機能を全く使用していないときは図６（ａ）のように設定する。また、Ｘアクセス機能と出力コーデック機能を使用しているときは図６（ｂ）のように設定すればよいし、さらに出力コーデック領域を増やして出力コーデックの安定度を高めたければ、図６（ｂ）においてＣＰＵアクセス領域４１ａの容量を減らして、出力コーデック領域４１ｃを増やすこともできる。
【００５２】
このように分割して使用可能なＦＩＦＯ４１の各領域においては図６（ａ）（ｂ）（ｃ）に示すように、データを書き込むアドレス位置がライトポインタＷＰで示されており、読み出すアドレス位置がリードポインタＲＰで示されている。ライトポインタＷＰとリードポインタＲＰは、書込／読出が行われる毎に１アドレスずつ矢印で図示する上方向の上位アドレスに移行していく。そして、最上位アドレスからは最下位アドレスに折り返すようになる。例えば、ＣＰＵアクセス用領域４１ａではライトポインタＷＰ１とＲＰ１で示されており、この領域４１ａにおいてライトポインタＷＰ１とリードポインタＲＰ１の間にデータが書き込まれていることになる。また、ＦＩＦＯ４１のＣＰＵアクセス領域４１ａに波形データを書き込む場合は、ライトポインタＷＰ１を１つ進めるとともにライトポインタＷＰ１の示す記憶位置に波形データを書き込む。ＣＰＵアクセス領域４１ａから波形データを読み出す場合は、リードポインタＲＰ１を１つ進めるとともにリードポインタＲＰ１の示す記憶位置から波形データを読み出す。さらに、出力コーデック用領域４１ｃではライトポインタＷＰ２とリードポインタＲＰ２で示されており、この領域４１ｃにおいてライトポインタＷＰ２とリードポインタＲＰ２の間にデータが書き込まれていることになる。さらに、入力コーデック用領域４１ｂではライトポインタＷＰ３とリードポインタＲＰ３で示されており、この領域４１ｂにおいてライトポインタＷＰ３とリードポインタＲＰ３の間にデータが書き込まれていることになる。なお、ライトポインタＷＰとリードポインタＲＰの進行はＸアクセス回路４０が管理しており、ＣＰＵ１０がそれらを制御する必要はない。
【００５３】
これらの６つのポインタは図２に示すＸアクセス回路４０に内蔵されているポインタレジスタ４３に格納されている。ポインタレジスタ４３における各ポインタには、アドレスカウンタでカウントしたカウント値が格納されているが、この場合、１つのアドレスカウンタを時分割使用してそれぞれのポインタ値を得るようにしている。すなわち、アドレスカウンタは各領域のデータの書込／読出に応じてインクリメントしたカウント値がそれぞれ格納されるようになる。なお、リードポインタＲＰがライトポインタＷＰを追い越さないようにＦＩＦＯ４１における各領域の書込／読み出しが制御される。これらの情報をＣＰＵ１０がＦＩＦＯ制御レジスタ４４に設定しようとする際には、ＣＰＵ１０は、該情報をデータバス（DATA4）に供給するとともに、音源制御レジスタ３０のＦＩＦＯ制御レジスタ４４を示すアドレスをアドレスバス（AD4）に供給して通常の書き込み動作を行う。
【００５４】
このように分割して使用可能なＦＩＦＯ４１はＦＩＦＯ制御レジスタ４４により制御されている。ＦＩＦＯ制御レジスタ４４には、ＣＰＵ１０からデータバス（DATA4）を介してＦＩＦＯ４１がどの位置で分割されて何の領域に割り当てられているかを示す分割データ、ＦＩＦＯ４１における各領域における書込データや読出データの残存データ量が所定量以下となった際に発生するＣＰＵ割込やデータ要求の発生条件を示す通知制御情報、ＦＩＦＯ４１における各領域に格納されるデータがステレオであるか否かを示すステレオ指示情報、ＦＩＦＯ４１における各領域をクリアするクリア情報、ＦＩＦＯ４１における各領域に格納されるデータが１６ビットであるか３２ビットであるかを示すビット数情報が供給されている。これらの情報がＣＰＵ１０からデータバス（DATA4）に供給される際には、ＣＰＵ１０から音源制御レジスタ３０にＦＩＦＯ制御レジスタ４４を示すレジスタアドレスがアドレスバス（AD4）を介して供給されて、ＦＩＦＯ制御レジスタ４４に格納される。
【００５５】
そして、ＦＩＦＯ制御レジスタ４４にＦＩＦＯ４１を分割する分割データが供給されると、ＦＩＦＯ制御レジスタ４４はＦＩＦＯ４１を分割データに従って分割し、分割数に対応するポインタをポインタレジスタ４３に設定するようにする。これにより、ＦＩＦＯ４１を分割して使用することができるようになる。そして、ＦＩＦＯ制御レジスタ４４に通知制御情報が供給されると、ＦＩＦＯ制御レジスタ４４はＦＩＦＯ４１に設定されている各領域における残存データ量の閾値が通知制御情報に従って定められるようになる。残存データ量がこの閾値以下となった際にＣＰＵ１０にＣＰＵ割込やＤＭＡコントローラにデータ要求が発生して、データの書込／読出が通知されるようになる。この通知制御ではＦＩＦＯ４１を３分割しても対応できるように最大３系統の通知制御情報とされている。
【００５６】
この通知制御情報により設定される閾値を、図７に示すＣＰＵアクセス用領域にＣＰＵ１０が書き込む際の例を説明する。図７（ｂ）に示すようにわずかデータが読み出された際に書込を要求するＣＰＵ割込やデータ要求を通知する閾値ａとすると、その領域のサイズが小さい場合に好適であるが通知回数が多くなってしまうようになる。図７（ｃ）に示すように領域のほぼ半分データが読み出された際に書込を要求するＣＰＵ割込やデータ要求を通知する閾値ｂとすると、その領域のサイズが中くらいの場合に好適となり、通知回数をある程度抑制することができるようになる。図７（ｄ）に示すように領域の数分の一になるまでデータが読み出された際に書込を要求するＣＰＵ割込やデータ要求を通知する閾値ｃとすると、その領域のサイズが大きい場合に好適となり、通知回数を抑制することができるようになる。図７（ｅ）に示すように領域の全てのデータが読み出された際に書込を要求するＣＰＵ割込やデータ要求を通知する閾値ｄとすると、リアルタイム性が必要とされないデータの場合に好適となり、通知回数をわずかな回数とすることができる。
【００５７】
次に、図８に示すＣＰＵアクセス用領域からＣＰＵ１０が読み出す際の例を説明する。図８（ｂ）に示すようにわずかデータが書き込まれた際に読出を要求するＣＰＵ割込やデータ要求を通知する閾値ｅとすると、その領域のサイズが小さい場合に好適であるが通知回数が多くなってしまうようになる。図８（ｃ）に示すように領域のほぼ半分データが書き込まれた際に読出を要求するＣＰＵ割込やデータ要求を通知する閾値ｆとすると、その領域のサイズが中くらいの場合に好適となり、通知回数をある程度抑制することができるようになる。図８（ｄ）に示すように領域の数分の一を残してデータが書き込まれた際に読出を要求するＣＰＵ割込やデータ要求を通知する閾値ｇとすると、その領域のサイズが大きい場合に好適となり、通知回数を抑制することができるようになる。図８（ｅ）に示すように領域のほとんどにデータが書き込まれた際に読出を要求するＣＰＵ割込やデータ要求を通知する閾値ｈとすると、リアルタイム性が必要とされないデータの場合に好適となり、通知回数をわずかな回数とすることができる。
【００５８】
また、ＦＩＦＯ制御レジスタ４４にステレオ指示情報が供給されると、ＦＩＦＯ制御レジスタ４４はＬデータとＲデータとをＦＩＦＯ４１に交互に書き込むインターリーブ処理を行って波形データを書き込むように制御する。このステレオ指示情報はＦＩＦＯ４１を３分割した際に、それぞれの領域でステレオ指示できるように最大３系統のステレオ指示情報とされている。
さらに、ＦＩＦＯ制御レジスタ４４にクリア情報が供給されると、ＦＩＦＯ制御レジスタ４４はＦＩＦＯ４１をクリアする。このクリア情報はＦＩＦＯ４１を３分割した際に、それぞれの領域でクリアできるように３系統のクリア情報とされている。
さらにまた、ＦＩＦＯ制御レジスタ４４にビット数情報が供給されると、ＦＩＦＯ制御レジスタ４４は波形データを１６ビットあるいは３２ビットとして扱う。ＦＩＦＯ４１は５１２ワード×１６ビットとされているので、指示されたビット数に応じてＦＩＦＯ４１を制御するようにする。すなわち、ビット数情報により３２ビットと指示されると、ＦＩＦＯ制御レジスタ４４は１つの波形データを読出／書込する際に２ワードをＦＩＦＯ４１から読出／書込するように制御する。このビット数情報はＦＩＦＯ４１を３分割した際に、それぞれの領域でビット数を指示できるように最大３系統のビット数情報とされている。
【００５９】
次に、図２に示す構成の音源部２０におけるデータ流れ図を図４に、その動作タイミングを図５に、ＦＩＦＯ４１の分割形態を図６に示し、これらの図を参照しながら、Ｘアクセス処理およびコーデック入出力処理におけるデータの流れを説明する。
図４において、制御手段５はＣＰＵ１０とシステムＲＡＭ（図１に示すＲＡＭ１３）とＤＭＡコントローラからなり、波形メモリ２１における波形データの書込／読出の制御や波形データの転送制御を行っている。ＦＩＦＯ４１は、ＣＰＵアクセス用ＦＩＦＯ４１ａ、入力コーデック用ＦＩＦＯ４１ｂおよび出力コーデック用ＦＩＦＯ４１ｃに３分割されている。
【００６０】
また、書込手段５２は読出書込回路３１の一機能であり、楽音生成用のチャンネルの内の特定のチャンネルを使用して波形メモリ２１へ波形データを書き込む手段である。音源手段５１は、読出書込回路３１により読み出された波形データに基づいて楽音データを生成する音源手段である。この楽音データは最大１２８チャンネルからなっている。ミキサ手段５３は、ミキサ３３とＤＳＰ３４の機能を備え時分割で生成された各チャンネルの楽音データをミキシングして最終的な楽音データを作成してＤＡＣ２３に供給したり、外部回路２２に波形データを供給してエフェクト処理された波形データを受け取ってミキシングしたりしている。外部回路２２，ＤＡＣ２３，音源手段５１，書込手段５２，ミキサ手段５３は、１ＤＡＣ周期を基準とするサンプリング周波数Ｆｓに同期して動作している。これに対して、ミキサ手段５３から入力コーデック用ＦＩＦＯ４１ｂにはサンプリング周波数Ｆｓに同期してデータが書き込まれるが、制御手段５における独自の動作タイミングで読み出される。同様に出力コーデック用ＦＩＦＯ４１ｃには、制御手段５から独自の動作タイミングでデータが書き込まれるが、サンプリング周波数Ｆｓに同期してデータが読み出されてミキサ手段５３に供給されるようになる。
【００６１】
ここで、書込手段５２により実行される書込処理は、図５（ａ）に示す期間ｃにおいて実行されるようになる。図５（ａ）には前述した処理Ｂの処理期間ａ、ｂ、ｄとして示されており、期間ｃは後半ＤＡＣ周期における処理Ｂが実行される期間ｂの直後とされている。これは、楽音データ生成用のチャンネルが１２８チャンネルとされている場合に、書込手段５２が最後の１６チャンネルを利用して波形メモリ２１に波形データを書き込めるようにしていることに基づいている。なお、図５（ａ）に示す動作タイミングはＸアクセス処理が実行されず、ＣＰＵ１０によるアクセスがない場合の動作タイミングとされている。
【００６２】
また、Ｘアクセス処理が実行される場合は、制御手段５（ＣＰＵ１０ないしＤＭＡコントローラ）はＣＰＵアクセス用ＦＩＦＯ４１ａをバッファメモリとして使用して、波形メモリ２１へ波形データを書き込んだり、波形メモリ２１から波形データを読み出したりするようになる。Ｘアクセス処理で波形メモリ２１にデータを書き込む場合の動作タイミングの例を図５（ｂ）に示す。ＣＰＵ１０あるいはＤＭＡコントローラがＣＰＵアクセス用ＦＩＦＯ４１ａに書き込むタイミングはＣＰＵ書込として示す期間ｈであり、Ｘアクセス回路４０がＣＰＵアクセス用ＦＩＦＯ４１ａに書き込まれている波形データを波形メモリ２１に書き込むタイミングは期間ｅ、ｆ、ｇとされる。このように、書き込むデータ量が１ＤＡＣ期間で転送できるデータ量より多い場合は、期間ｅ、ｆ、ｇのように複数の期間にわたりＸアクセス回路４０が波形メモリ２１に書き込みを行う。また、書き込むデータ量がＣＰＵアクセス用ＦＩＦＯ４１ａの容量より大きい場合は、ＣＰＵ１０あるいはＤＭＡコントローラからＣＰＵアクセス用ＦＩＦＯ４１ａへの書き込みも連続する１つの期間ではなく複数の期間に分けて行われる。その場合の２回目以降の期間は、前述したＣＰＵ割込やデータ要求の通知に応じて開始される。Ｘアクセス処理で波形メモリ２１からデータを読み出す場合も同様であり、Ｘアクセス処理で波形メモリ２１からＣＰＵアクセス用ＦＩＦＯ４１ａに読み込むデータ量が１ＤＡＣ期間で転送できるデータ量より多い場合は複数期間にわたる転送が行われ、また、そのデータ量がＦＩＦＯ４１ａの容量より大きい場合はＣＰＵ１０あるいはＤＭＡコントローラは、ＣＰＵアクセス用ＦＩＦＯ４１ａからのデータの読み出しを複数期間に分けて実行する。なお、波形メモリ２１から読み出した波形データをＣＰＵアクセス用ＦＩＦＯ４１ａに記憶し、当該波形データを読み出したアドレスとはオフセットされたアドレスを書込アドレスとして発生するようにし、ＣＰＵアクセス用ＦＩＦＯ４１ａから読み出した波形データを波形メモリ２１へ書き込むことにより、波形データのコピーを行うことができる。
【００６３】
さらにまた、コーデック入出力処理が実行される場合には、入力コーデック用ＦＩＦＯ４１ｂには、ミキサ手段５３からＤＡＣ周期ごとに入力される波形データ、例えば外部回路２２においてディジタル信号に変換されたオーディオ信号が格納され、制御手段５により入力コーデック用ＦＩＦＯ４１ｂから読み出されて制御手段５へ取り込まれるようになる。そして、出力コーデック用ＦＩＦＯ４１ｃには、制御手段５から転送された波形データが格納され、ＤＡＣ周期ごとに出力コーデック用ＦＩＦＯ４１ｃから読み出されてミキサ手段５３に供給され、楽音データにミキシングされてＤＡＣ２３に出力されるようになる。なお、入力コーデック用ＦＩＦＯ４１ｂおよび出力コーデック用ＦＩＦＯ４１ｃには、１／２ダウンサンプリングした波形データを入出力することができ、このようにダウンサンプリングするとそれぞれのコーデック用ＦＩＦＯ４１ｂ，４１ｃへのアクセス回数を低減することができる。波形データをダウンサンプリングした際には、ＤＳＰ３４によりＬＰＦ処理を行うことにより折り返しノイズの発生を防止するのが好適である。さらに、入力コーデック用ＦＩＦＯ４１ｂおよび出力コーデック用ＦＩＦＯ４１ｃでは、ビット列の最上位ビットが左側に位置するビッグエンディアンと、ビット列の最下位ビットが左側に位置するリトルエンディアンとの設定ができるようにされている。
【００６４】
なお、上記の説明では音源部２０における処理を図３に示すように１ＤＡＣ周期を前半と後半に分割した区間で実行するようにしているが、本発明はこれに限るものではなく、１ＤＡＣ周期を１／３，１／４，・・・に分割し、それらの区間を単位にして各処理を行なうようにしてもよい。また、１ＤＡＣ周期を分割することなく各処理を行うようにしてもよく、１ＤＡＣ周期を分割する場合は区間の期間長は等分割に分割しなくてもよい。さらに言えば、１ＤＡＣ周期がどのように分割されているかは問題ではなく、とにかく、読出書込回路３１による波形メモリアクセスとＸアクセス回路による波形メモリアクセスとが時分割化できていればよい。
【００６５】
【発明の効果】
本発明は以上説明したように、制御手段の制御の基で、波形メモリへのアクセスを行うアクセス手段に内蔵された記憶手段が、波形メモリへの波形データの書き込みや、波形メモリからの波形データの読み出しを行う際に波形データを一次記憶するバッファと、制御手段が波形データを扱うために一次記憶するコーデック用のバッファとに分割されている。これにより、バッファを増設することなくコーデック機能を音源装置に有させることができるようになる。この場合、分割されて構成された各バッファにおいては制御手段への割込条件やデータ要求発生条件を変更できるようにされているので、記憶手段を分割してバッファを構成するようにしても、効率よく各バッファを使用することができるようになる。
また、コーデック機能により、所定のサンプリング周期に同期して動作する音源装置のミキサ手段と、サンプリング周期とは独立したタイミングで動作する制御手段（ＣＰＵ）の間で、波形データのやりとりをすることができる。特に、コーデック機能の出力先／入力元がミキサ手段であるため、ミキサの設定により次のような動作が可能となる。
（１)楽音生成手段の生成した波形データに、効果付与手段で効果を付与して制御手段に渡す（レコーディング）ことができる。
（２）制御手段が供給する波形データ（ソフト音源等）に、効果付与手段で効果を付与することができる。
（３）楽音生成手段の生成した波形データを制御手段に渡し、制御手段で効果を付与して（ソフトエフェクト）ミキサ手段に戻すことができる。
【図面の簡単な説明】
【図１】  本発明の実施の形態にかかる波形メモリを備えている音源装置を有する楽音生成装置の構成例を示すブロック図である。
【図２】  本発明の実施の形態にかかる波形メモリを備えている音源装置である音源部の詳細構成を示す図である。
【図３】  本発明の実施の形態にかかる波形メモリを備えている音源装置の動作タイミングを示す図である。
【図４】  本発明の実施の形態にかかる音源装置のデータの流れを説明するための機能ブロック図である。
【図５】  本発明の実施の形態にかかる音源装置におけるＣＰＵアクセスのタイミングを示す図である。
【図６】  本発明の実施の形態にかかる音源装置におけるＦＩＦＯの分割形態を示す図である。
【図７】  本発明の実施の形態にかかる音源装置におけるＦＩＦＯからの読出時における割込やデータ要求の閾値の態様を示す図である。
【図８】  本発明の実施の形態にかかる音源装置におけるＦＩＦＯからの書込時における割込やデータ要求の閾値の態様を示す図である。
【図９】  従来の波形メモリ音源の構成を示すブロック図である。
【符号の説明】
１  楽音生成装置、５  制御手段、１０  ＣＰＵ、１１  タイマ、１２  ＲＯＭ、１３  ＲＡＭ、１４  ディスク、１５  ドライブ、１６  ＭＩＤＩインタフェース、１７  ネットワークインタフェース、１８  パネルＳＷ、１９  パネル表示器、２０  音源部、２１  波形メモリ、２２  外部回路、２３  ＤＡＣ、２４サウンドシステム、２５  バス、３０  音源制御レジスタ、３１  読出書込回路、３２  ＥＧ付与回路、３３  ミキサ、３５  セレクタ、４０  Ｘアクセス回路、４１ａ  ＣＰＵアクセス用領域、４１ｂ  入力コーデック用領域、４１ｃ  出力コーデック用領域、４２  ＸＡレジスタ、４３  ポインタレジスタ、４４  ＦＩＦＯ制御レジスタ、５１  音源手段、５２  書込手段、５２  書込手段、５３  ミキサ手段、１２０  音源部、１２１  波形メモリ、１２２  外部回路、１３０  音源制御レジスタ、１３１  読出書込回路、１３２  ＥＧ付与回路、１３３  ミキサ、１３４  ＤＳＰ、１４０  Ｘアクセス回路、１４１  ＦＩＦＯ、１４２  ＸＡレジスタ
【図１】
0003695405.tif 000002
【図２】
0003695405.tif 000003
【図３】
0003695405.tif 000004
【図４】
0003695405.tif 000005
【図５】
0003695405.tif 000006
【図６】
0003695405.tif 000007
【図７】
0003695405.tif 000008
【図８】
0003695405.tif 000009
【図９】
0003695405.tif 000010