以下、本発明の実施の形態について、図面を参照しながら説明する。なお、図中、同一又は相当部分については同一の参照符号を付してその説明を援用する。アドレス情報等の先頭に付した「0x」はその情報が16進数であることを意味する。
<原理>
本実施の形態の特徴として、D/A変換のタイミングに応じたウェーブデータの補間処理と、必要なメモリ容量を削減しながら従来と同様の効果を奏することができるエンベロープ制御とがある。以下、それらの原理について順に説明する。
−補間処理
図3に、図1に示したものと同様のウェーブデータ30と、ウェーブデータ30から得られる理想的な音声信号波形60とを示す。本実施の形態で使用されるサウンドプロセッサは、ピッチ変換を行ないながら、得られる音声信号波形を音声信号波形60に近づけるような補間処理を行なう点に一つの特徴を持つ。そのために本実施の形態では、D/A変換のタイミングとして、特許文献1に開示の累算器と同様の構成を使用しながら、累算器の整数部の値だけではなく、小数部の値を用いて補間を行なう。
なお、本実施の形態に係るマルチメディア装置では、PCMデータは1サンプルにつき8ビットを使用するものとする。さらに、サウンドチャンネルは64チャンネルが使用可能であるが、以下の説明では簡略のために原則として1チャンネルのみについて説明する。使用するデータも、基本的にチャンネル数だけ必要であり、メモリ上にもそれだけの記憶場所が必要である。しかし、以下の説明では、記載を分かりやすくするため、必要とされる記憶容量も1チャンネルのみのものとする。
図4及び図6を参照して、ウェーブデータの補間は本実施の形態では以下のようにして行なわれる。図4は、実際の音声波形信号70を示し、実際の音声波形信号70に対し、補間ポイント72でのウェーブデータを補間により得ることを考える。図4において横軸は時間軸だが、一定時間でD/A変換をするため、横軸はメモリ上でのウェーブデータのアドレスに対応する。右がアドレスの大きくなる方向、左がアドレスの小さくなる方向である。
補間ポイント72のウェーブデータを得るためには、補間ポイント72を中心とする前後8サンプルのウェーブデータを用いる。これらサンプルの値をDA〜DHとする。そして、補間ポイント72とサンプルDA〜DHとの間の距離をそれぞれXA〜XHとする。ここでの距離は、二つのアドレスの間の差により定義される。補間ポイント72のアドレスとサンプルDDのアドレスとの間の差XDは、補間ポイント72を指定している累算器の小数部の値に相当する。
補間ポイント72の値Wは以下の補間式により算出される。
また、このように計算された補間ポイント72の値Wが、ウェーブデータとして許容される範囲の外になる場合は、この範囲内に収まるようにデータが修正される。すなわちWの値は、許容される最大値より大きければ最大値に、許容される最小値より小さければ最小値に、それぞれ修正される。
この関数sinc(πx)のグラフ74を図5に示す。
図4の補間ポイント72のリードアドレスの算出を行なうアドレス算出回路80の基本的構成について図6に示す。図6を参照して、このアドレス算出回路80は、特許文献1に記載の累算器に相当する現在のウェーブデータアドレス記憶部90及び加算器94と、特許文献1に記載のピッチ制御情報(以下この情報を「ウェーブ周波数」と呼ぶ。)を格納する部分に相当するウェーブ周波数記憶部92とを含む。ウェーブデータアドレス記憶部90及びウェーブ周波数記憶部92は、32ビットの整数部100及び110、16ビットの小数部102及び112をそれぞれ有する記憶部である。ただしウェーブ周波数記憶部92の整数部110にはゼロが書込まれ、小数部112にはピッチを制御するためのデータがCPUにより与えられる。またウェーブデータアドレス記憶部90の整数部100の値が、メモリ内のウェーブデータのアドレスを与える。
加算器94は、所定のサンプリングレート記憶部96に格納された値により定まるサンプリングレートでウェーブデータアドレス記憶部90に格納された現在のウェーブデータアドレスとウェーブ周波数記憶部92に格納されたウェーブ周波数とを加算する。加算後の値はウェーブデータアドレス記憶部90に書込まれる。この加算の結果、ウェーブデータアドレス記憶部90の小数部102の値が1を超えると、キャリーが発生し、整数部100の値に1が加算され、それに応答してウェーブデータがメモリ内の整数部100により定められるアドレスから読出される。
読出されたウェーブデータと、ウェーブデータアドレス記憶部90の小数部102とを用いて上記した補間処理が行なわれる。なお、この補間の際には補間ポイント72の前だけでなく後のサンプル(図4におけるDE〜DH)も必要とされる。したがって、実際には処理対象のアドレスのサンプルよりもアドレスの小さなデータ及び大きなデータも読出される。
このような補間処理を行なうための補間回路114の構成例を図7に示す。図7を参照して、補間回路114はデジタルフィルタであり、直列接続された8個のレジスタ140〜158を含む、読出されたウェーブデータを順番に格納するためのシフトレジスタ120と、シフトレジスタ120の各レジスタ140〜158に格納されたサンプルデータの各々に対し、図6に示すウェーブデータアドレス記憶部90の小数部102の値(この値はサンプルの位相を表すと考えられるので、以下「WPHASE」と呼ぶ。)によって上記した式による係数を算出するための係数算出部122と、レジスタ140〜158に格納されたサンプルに対し、それぞれ係数算出部122で算出された係数を乗算するための8個の乗算器170〜184を含む乗算処理部124と、乗算器170〜184の出力を合計して補間後のPCMデータを出力するための合計部126とを含む。なお、合計部126による合計結果が0になるか、又は合計部126による合計結果の符号が変化したときに第1の値がセットされ、それ以外のときには第2の値がセットされるステータスレジスタ128が設けられている。ステータスレジスタ128の出力する信号は、本明細書ではゼロステータス信号と呼び、後述するようにエンベロープデータの適用タイミングの判定に用いられる。
−エンベロープ処理
特許文献1に記載の技術では、エンベロープデータはサンプリングデータとして保持されている。したがってエンベロープデータの格納のために必要となるメモリ領域は比較的大きい。それに対し本実施の形態では、メモリ領域を節約するために、図8の中段により表されるように、エンベロープ200を連続する線分の集まり(線分210、212及び214)で表す。なお、図8に示す例では、エンベロープ200の最終部分の点218からはそれまでの線分と異なり、比較的急速に減衰する部分216となっている。この部分216は、音声の発生を終了させるために、メモリに格納されたエンベロープデータを使用せず、発生する音声の振幅をある一定の比率で減衰させる部分である。この部分216の存在により、対応する音声波形信号230の最終部分も対応して振幅が減衰していく。エンベロープのどの部分からこうした部分が始まるかはCPUにより任意に決められる。このように一定の比率でエンベロープの大きさが減衰していくように動作するモードを、エンベロープのリリースモードと呼ぶ。これに対し、それより前のようにエンベロープにしたがって音声を振幅変調するような動作モードをシーケンシャルモードと呼ぶ。
図9に示すように、エンベロープデータ240は、これら線分を表す1又は複数のエントリ250,252,…,254と、エンベロープデータ240の終わりを表すエントリ256とを含む。
エントリ250〜254の各々は32ビットからなり、勾配領域260と、持続時間領域262とを含む。勾配領域260は16ビット符号付き固定小数点データであり、持続時間領域262は16ビット符号無し整数データである。エントリ256の持続時間領域262の部分には0x0000が格納されている。エンベロープデータ読出しの際、持続時間領域262に0x0000が格納されていれば、そこでそのエンベロープデータが終了すると判定できる。エンベロープデータの終了が検出された場合、最終的に算出されたエンベロープサンプルの値を保持する。
このようなデータからエンベロープによるウェーブデータの振幅変調を行なうためには、エンベロープのサンプル値を算出する処理が必要となる。本明細書では、この処理をエンベロープデータの「デコード」と呼ぶこととする。デコードは、基本的に、1サイクルごとに現在のエンベロープデータに対し勾配の値を加算する処理を、持続時間に相当するサイクル数だけ繰返すことにより行なわれる。
図10に、図9に示すようなデータ形式のエンベロープデータ270から作成したエンベロープ272の例を示す。図10に示す例では、エンベロープデータ270の第1番目のエントリによれば、勾配は0x3800、持続時間はサンプリングのサイクル数にして0x0009(=9)サイクルである。第2番目のエントリによれば、勾配は0xD000、持続時間は0x0002(=2)サイクル、第3番目のエントリによれば、勾配は0xF800、持続時間は0x0018(=24)サイクルである。なお、エンベロープサンプルの値が0xFFFF以上になる場合には0xFFFFに修正され、エンベロープエンベロープサンプルの値が0以下になる場合には0に修正される。したがって、図10に示すように、第1番目のエントリが示すエンベロープにおいては、エンベロープサンプルの値が0xFFFF以上になる部分において0xFFFFに修正され、第3番目のエントリが示すエンベロープにおいては、エンベロープサンプルの値が0以下になる部分において0に修正されている。デジタル処理をするため、エンベロープデータは所定のタイミングで更新される。したがって、エンベロープ272は図10に示したように階段状に変化する外形となるが、ウェーブデータの振幅変調にはこのようなエンベロープで十分である。
なお、エンベロープデータによる振幅変調でエンベロープデータの値が変化する際には、新たなエンベロープの値を適用するのはウェーブデータの振幅が0付近にある場合が望ましい。これは、ウェーブデータから得られる音声波形信号の振幅が大きいところでエンベロープの値を変化させると、得られる音声の振幅が急速に変化してしまい、音質が低下するためである。そこで、図11に示すように、音声波形信号280に対するエンベロープ290の変化をそのまま適用するのではなく、実線292により示されるように、音声波形信号280の振幅が0となった場合にはそのタイミングで、又はその値の符号が変化したときにはその直後のタイミングで、新たなエンベロープデータの値を適用する。図7に示すステータスレジスタ128の値がここで利用される。
図12に、上記したエンベロープ処理のうち、シーケンシャルモードを実現するためのエンベロープ処理回路300の例を示す。図12を参照して、エンベロープ処理回路300は、所定のメモリの、エンベロープデータ用の領域から読出されたエンベロープデータを一時格納するためのエンベロープデータ保持部310と、エンベロープデータ保持部310に格納されたエンベロープデータのうち、持続時間が設定され、D/A変換のためのサンプリングレートにしたがって1ずつカウントを減算していくための持続時間ダウンカウンタ312と、エンベロープデータ保持部310に格納されたエンベロープデータのうちの勾配データを格納するための勾配記憶部320とを含む。
エンベロープ処理回路300はさらに、持続時間ダウンカウンタ312のカウントが0となったことに応答して、エンベロープデータ保持部310から次のエンベロープデータを読出し、持続時間を持続時間ダウンカウンタ312に、勾配データを勾配記憶部320に、それぞれロードするためのロード回路314と、現在のエンベロープサンプルデータを保持するためのエンベロープサンプル保持部318と、エンベロープサンプル保持部318に保持されているエンベロープサンプルの値に、勾配記憶部320に保持されている勾配の値を加算してエンベロープサンプル保持部318に与えるための加算器322と、エンベロープ更新タイミング信号を発生するためのエンベロープ更新タイミング信号発生回路316とを含む。エンベロープサンプル保持部318は、エンベロープ更新タイミング信号発生回路316からエンベロープ更新タイミング信号が与えられたことに応答して、加算器322の出力を保持する。
ロード回路314がエンベロープデータ保持部310から次のエンベロープデータを読み出した際に、エンベロープデータ内の持続時間領域に0x0000を検出すると、ロード回路314は以降のロード動作を停止する。ロード回路314でのロード動作が停止すると、エンベロープ更新タイミング信号発生回路316もエンベロープ更新タイミング信号の発生を停止し、エンベロープサンプル保持部318は、現在保持している値を保持し続ける。
図13に、上記したエンベロープ処理のうち、リリースモードを実現するためのエンベロープ処理回路330の例を示す。図13を参照して、このエンベロープ処理回路330は、現在のエンベロープサンプルデータを保持するための、図12に示すものと同一のエンベロープサンプル保持部318と、エンベロープの減衰率(リリースレート)を格納するエンベロープリリースレート記憶部340と、エンベロープサンプル保持部318の保持するエンベロープサンプルの現在の値に、エンベロープリリースレート記憶部340に保持されたリリースレートを乗算し、エンベロープサンプル保持部318に与えるための乗算器342とを含む。
リリースモードでは、エンベロープリリースレート記憶部340にリリースレートが設定される。乗算器342はエンベロープサンプル保持部318に格納されたエンベロープサンプルの現在値にエンベロープリリースレート記憶部340に格納されたリリースレートを乗算し、エンベロープサンプル保持部318に与える。エンベロープサンプル保持部318は、エンベロープの更新タイミングで乗算器342の出力を格納する。こうして、リリースモードでは、現在のエンベロープサンプルの値にリリースレートを乗算して次のエンベロープサンプルの値が決まる。リリースレートは0より大きく1より小さな値に設定されるので、リリースモードではエンベロープ処理回路330によりエンベロープの大きさはリリースレートの値に応じた率で減衰していく。
本実施の形態では、上記したシーケンシャルモードとリリースモードとを切替可能とする。そのための回路構成を図14に示す。図14には、エンベロープ処理回路のうち、モードの切替に関連する部分のみと、エンベロープ処理回路により算出されたエンベロープの値に対し、所定のゲインを乗算することにより、ウェーブデータに関する振幅データを算出する部分とを示す。図14を参照して、このエンベロープ処理回路352は、勾配記憶部320、エンベロープサンプル保持部318、加算器322、エンベロープリリースレート記憶部340及び乗算器342に加えて、CPUにより設定されるゲインを格納するためのゲイン記憶部344と、加算器322又は乗算器342から出力されるエンベロープのサンプル値にゲイン記憶部344の保持されたゲインを乗算し、振幅データ348を出力するための乗算器346とを含む。乗算器346への入力はエンベロープサンプル保持部318にフィードバックされ保持される。
勾配記憶部320は16ビット符号付き固定小数点数記憶部(整数部7ビット、小数部8ビット)である。エンベロープサンプル保持部318は16ビット符号無し固定小数点数記憶部(整数部8ビット、小数部8ビット)である。エンベロープリリースレート記憶部340は8ビット符号無し固定小数点数記憶部であり、小数部のみからなる。ゲイン記憶部344も同じく8ビット符号無し固定小数点数記憶部であり、小数部のみからなる。振幅データ(アンプリチュードデータ)348は16ビット符号無し固定小数点データであり、整数部8ビット及び小数部8ビットからなる。振幅データ348のうち、整数部8ビットが振幅D/A変換器(以下「DAC」と呼ぶ。)に出力される。DACから出力されるアナログ信号が、後述するオーディオDACブロック386内で、ウェーブデータをD/A変換するウェーブD/A変換器から出力されるアナログ信号とアナログ乗算される。この乗算は、カスケード接続されたD/A変換器により行われる。このようにして、ウェーブデータに振幅変調が施される。
なお、上記説明では一つのサウンドチャンネルについての処理を説明したが、後述する本実施の形態に係るマルチメディアプロセッサは複数のサウンドチャンネルに対する処理を行なうことができる。したがって、上記した構成は複数のサウンドチャンネルに対して設けられており、サウンドチャンネルの数とシステムクロックの周波数とに応じた速度で各チャンネルに対する処理が実行される。
<構成>
図15は、本実施の形態によるマルチメディアプロセッサ360の内部構成を示すブロック図である。図15に示すように、このマルチメディアプロセッサ360は、外部バス362を介して外部メモリ364に接続される。マルチメディアプロセッサ360は、後述する内部の各ブロックで共有されるメインRAM(Random Access Memory)388と、各ブロックからのメインRAM388に対するアクセスを調停するためのメインRAMアクセスアービタ390とを含む。なお、メインRAM388にアクセスすることのあるブロックはいずれもメインRAMアクセスアービタ390を介し、その調停を受けるので、以下の説明ではそれらがメインRAMアクセスアービタ390を介してメインRAM388にアクセスすることについては特に触れない。
マルチメディアプロセッサ360はさらに、外部バス362に接続される外部メモリインタフェース380と、外部メモリ364とマルチメディアプロセッサ360の内部のメモリとの間のデータ転送を行なうためのDMAC(direct memory access controller)382と、ゲームを制御するためのプログラムを実行するためのCPU392と、CPU392に接続されたCPUローカルRAM394とを含む。
マルチメディアプロセッサ360はさらに、CPU392からのコマンドを受けて動作するレンダリングプロセッシングユニット(以下、「RPU」と呼ぶ。)396と、RPU396に接続されたカラーパレットRAM398と、CPU392からのコマンドを受けて動作するサウンドプロセシングユニット(以下、「SPU」と呼ぶ。)400と、SPU400に接続されたSPUローカルRAM402と、CPU392からのコマンドを受けて動作するジオメトリエンジン(以下、「GE」と呼ぶ。)404と、CPU392からの指示を受けて動作するYソーティングユニット(以下、「YSU」と呼ぶ。)406とを含む。
マルチメディアプロセッサ360はさらに、周辺装置368との間のインタフェースとなる外部インタフェースブロック408と、CPU392、RPU396、SPU400、GE404、YSU406、及び外部インタフェースブロック408が接続されるI/Oバス410と、RPU396の出力するデジタルビデオ信号を外部のビデオ出力機器370に与えるためのビデオDAC(digital to analog converter)384と、SPU400の出力するデジタルオーディオ信号を外部のオーディオ出力機器372に与えるためのオーディオDACブロック386と、外部のアナログ装置366からのアナログ信号をデジタル信号に変換し、CPU392の制御にしたがってI/Oバス410上に出力するためのA/Dコンバータ(以下、「ADC」と呼ぶ。)412とを含む。メインRAM388及び外部メモリ364を区別して説明する必要がないときは、「メモリMEM」と表記する。
CPU392は、メモリMEMに格納されたプログラムを実行して、各種演算やシステム全体の制御を行なう。また、CPU392は、DMAC382にプログラム及びデータの転送要求を行なうこともできるし、DMAC382を介さずに、外部メモリ364から直接プログラムコードをフェッチし、外部メモリ364に直接データアクセスを行なうこともできる。
I/Oバス410は、CPU392をバスマスタとするシステム制御用のバスであり、バススレイブである各機能ユニット(外部メモリインタフェース380、DMAC382、RPU396、SPU400、GE404、YSU406、及び外部インタフェースブロック408)の制御レジスタ及びローカルRAM394,398,402へのアクセスに用いられる。このようにして、これらの機能ユニットは、I/Oバス410を通じて、CPU392により制御される。
CPUローカルRAM394は、CPU392専用のRAMであり、サブルーチンコールや割り込み時におけるデータの退避等を行なうためのスタック領域、及びCPU392のみが扱う変数の格納領域等として使用される。
RPU396は、ポリゴン及びスプライトから構成される三次元イメージをリアルタイムに生成する。具体的には、RPU396は、YSU406によるソート済みの、ポリゴン構造体配列の各構造体インスタンス及びスプライト構造体配列の各構造体インスタンスを、メインRAM388から読出し、所定の処理を実行して、スクリーン(表示画面)のスキャンに合わせて水平ラインごとにイメージを生成する。生成されたイメージは、コンポジットビデオ信号波形を示すデータストリームに変換され、ビデオDAC384に出力される。また、RPU396は、DMAC382に対して、ポリゴン及びスプライトのテクスチャパターンデータの取込みのためのDMA転送要求を行なう機能を有する。
テクスチャパターンデータとは、ポリゴン又はスプライトに貼り付けられる2次元の画素配列データであり、各画素データは、カラーパレットRAM398のエントリを指定するための情報の一部である。以降、テクスチャパターンデータの画素を「テクセル」と呼称し、スクリーンに表示されるイメージを構成する画素を指す「ピクセル」とは区別して使用する。従って、テクスチャパターンデータは、テクセルデータの集合である。
ポリゴン構造体配列は、多角形状のグラフィック要素であるポリゴンのための構造体配列であり、スプライト構造体配列は、スクリーンに平行な矩形のグラフィック要素であるスプライトのための構造体配列である。ポリゴン構造体配列の要素を、「ポリゴン構造体インスタンス」と呼び、スプライト構造体配列の要素を、「スプライト構造体インスタンス」と呼ぶ。ただし、両者を区別して説明する必要がないときは、単に「構造体インスタンス」と呼ぶこともある。
ポリゴン構造体配列に格納された各ポリゴン構造体インスタンスは、ポリゴンごとの表示情報(スクリーンにおける頂点座標、テクスチャマッピングモードでのテクスチャパターンに関する情報及びグーローシェーディングモードでのカラーデータ(RGBのカラーコンポーネント)を含む。)であり、一つのポリゴン構造体インスタンスに一つのポリゴンが対応している。スプライト構造体配列に格納された各スプライト構造体インスタンスは、スプライトごとの表示情報(スクリーンにおける座標及びテクスチャパターンに関する情報を含む。)であり、一つのスプライト構造体インスタンスに一つのスプライトが対応している。
ビデオDAC384は、アナログのビデオ信号を生成するためのデジタル/アナログ変換器である。ビデオDAC384は、RPU396から入力されたデータストリームをアナログのコンポジットビデオ信号に変換し、ビデオ信号出力端子(図示せず)からテレビジョンモニタ等(図示せず)に出力する。
カラーパレットRAM398は、本実施の形態では512色すなわち512エントリのカラーパレットからなる。RPU396は、テクスチャパターンデータに含まれるテクセルデータをカラーパレットのエントリを指定するインデックスの一部として用いることにより、カラーパレットRAM398を参照し、テクスチャパターンデータをカラーデータ(RGBのカラーコンポーネント)に変換する。
本実施の形態の特徴の一つであるSPU400は、ウェーブデータ、アンプリチュードデータ、及びメインボリュームデータを生成する。具体的には、SPU400は、最大64チャンネル分のウェーブデータを生成して時分割多重化するとともに、最大64チャンネル分のエンベロープデータを生成してチャンネルボリュームデータ(ゲイン)と乗算し、アンプリチュードデータを時分割多重化する。そして、SPU400は、メインボリュームデータ、時分割多重化されたウェーブデータ、及び時分割多重化されたアンプリチュードデータを、オーディオDACブロック386に出力する。オーディオDACブロック386は、このようにSPU400から与えられた左右のチャンネルのウェーブデータに、左右のチャンネルのアンプリチュードデータを乗算し、さらにメインボリュームを乗算してアナログ信号として出力する機能を持つ。このアナログオーディオ信号は、オーディオ信号出力端子(図示せず)からテレビジョンモニタ等(図示せず)のオーディオ入力端子(図示せず)に出力される。また、SPU400は、DMAC382に対して、ウェーブデータ及びエンベロープデータの取込みのためのDMA転送要求を行なう機能を有する。SPU400の詳細は後述する。
SPUローカルRAM402は、SPU400がウェーブ再生及びエンベロープ生成を行なう際に用いるパラメータ(例えば、ウェーブデータやエンベロープデータの格納アドレスやウェーブ周波数小数部等)を格納する。
GE404は、三次元イメージを表示するための幾何演算を実行する。具体的には、GE404は、行列積、ベクトルアフィン変換、ベクトル直交変換、透視投影変換、頂点明度/ポリゴン明度計算(ベクトル内積)、及びポリゴン裏面カリング処理(ベクトル外積)等の演算を実行する。
YSU406は、メインRAM388に格納されているポリゴン構造体配列の各構造体インスタンス及びスプライト構造体配列の各構造体インスタンスを、ソートルール1〜4に従ってソートする。この場合、ポリゴン構造体配列とスプライト構造体配列とで、別個にソートが行なわれる。
以下、YSU406によるソートルール1〜4について説明するが、その前に座標系について説明する。テレビジョンモニタ等のディスプレイ装置(図示せず)への実際の表示に用いられる二次元座標系をスクリーン座標系と呼ぶ。本実施の形態では、スクリーン座標系は、水平方向2048ピクセル×垂直方向1024ピクセルの2次元ピクセル配列から構成される。座標原点は左上にあり、右方向がX軸の正、下方向がY軸の正に相当する。ただし、実際に表示される領域は、スクリーン座標系の全空間ではなく一部の空間である。この表示領域をスクリーンと呼ぶことにする。
ソートルール1は、最小Y座標が小さい順に、各ポリゴン構造体インスタンスを並べ替えることである。最小Y座標とは、ポリゴンの全頂点のY座標のうち、最も小さいY座標のことである。Y座標はスクリーンの垂直座標であり、下向きが正方向である。ソートルール2は、最小Y座標が同じである複数のポリゴンについては、デプス値が大きい順に、各ポリゴン構造体インスタンスを並べることである。なお、デプス値が大きいほど奥に描画される。
ただし、YSU406は、スクリーンの先頭ラインに表示されるピクセルを持つ複数のポリゴンについては、最小Y座標が異なっている場合でも、それらが同一であるとみなして、ソートルール1ではなく、ソートルール2に従って、各ポリゴン構造体インスタンスの並べ替えを行なう。つまり、スクリーンの先頭ラインに表示されるピクセルを持つポリゴンが複数存在する場合は、最小Y座標が同一であるとみなして、デプス値が大きい順に並べ替えられる。これがソートルール3である。
インタレーススキャンの場合でも、ソートルール1〜3が適用される。ただし、奇数フィールドを表示するためのソートでは、奇数ラインに表示されるポリゴンの最小Y座標及び/又はその奇数ラインの一つ前の偶数ラインに表示されるポリゴンの最小Y座標が同一であるとみなして、ソートルール2によるソートを行なう。ただし、先頭の奇数ラインは除く。なぜなら、その一つ前の偶数ラインが存在しないからである。一方、偶数フィールドを表示するためのソートでは、偶数ラインに表示されるポリゴンの最小Y座標及び/又はその偶数ラインの一つ前の奇数ラインに表示されるポリゴンの最小Y座標が同一であるとみなして、ソートルール2によるソートを行なう。これがソートルール4である。
スプライトに関するソートルール1〜4は、それぞれポリゴンに関するソートルール1〜4と同様である。
外部メモリインタフェース380は、外部バス362を介して、外部メモリ364からのデータの読出し、及び外部メモリ364へのデータの書込みを司る。この場合、外部メモリインタフェース380は、図示しないEBI(External Bus Interface)優先順位テーブルに従って、CPU392及びDMAC382からの外部バスアクセス要求要因(外部バス362へのアクセスを要求する要因)を調停して、いずれか一つの外部バスアクセス要求要因を選択する。そして、選択した外部バスアクセス要求要因に対して外部バス362へのアクセスを許可する。EBI優先順位テーブルは、CPU392からの複数種類の外部バスアクセス要求要因及びDMAC382からの外部バスアクセス要求要因の優先順位を定めたテーブルである。
外部バスアクセス要求要因として、CPUに含まれる図示しないIPL(initial program loader)によるブロック転送要求、CPU392によるデータアクセス要求、CPU392による命令フェッチ要求、及びDMAC382によるDMA要求がある。
DMAC382は、メインRAM388と、外部バス362に接続された外部メモリ364と、の間でDMA転送を行なう。この場合、DMAC382は、図示しないDMA優先順位テーブルに従って、CPU392、RPU396、及びSPU400からのDMA転送要求要因(DMA転送を要求する要因)を調停して、いずれか一つのDMA転送要求要因を選択する。そして、外部メモリインタフェース380に対して、DMA要求を行なう。DMA優先順位テーブルは、CPU392、RPU396、及びSPU400からのDMA要求要因の優先順位を定めたテーブルである。
SPU400のDMA要求要因として、(1)ウェーブデータをウェーブバッファに転送すること、(2)エンベロープデータをエンベロープバッファに転送すること、がある。ウェーブバッファ及びエンベロープバッファは、それぞれメインRAM388上に設定されるウェーブデータ及びエンベロープデータのテンポラリ格納領域である。なお、SPU400の2つのDMA要求要因間の調停は、SPU400内のハードウェア(図示せず)で行なわれ、DMAC382は関知しない。
RPU396のDMA要求要因として、テクスチャパターンデータをテクスチャバッファに転送すること、がある。テクスチャバッファは、メインRAM388上に設定されるテクスチャパターンデータのテンポラリ格納領域である。
CPU392のDMA要求要因として、(1)仮想記憶管理においてページミスが発生した場合のページ転送、(2)アプリケーションプログラム等が要求するデータ転送、がある。なお、CPU392内で複数のDMA転送要求が同時に発生した場合は、その調停はCPU392で実行されるソフトウェアにて行なわれ、DMAC382は関知しない。
外部インタフェースブロック408は、周辺装置368とのインタフェースであり、24チャンネルのプログラマブルなデジタル入出力(I/O)ポートを含む。24チャンネルのI/Oポートの各々は、4チャンネル分のマウスインタフェース機能、4チャンネル分のライトガンインタフェース機能、2チャンネル分の汎用タイマ/カウンタ、1チャンネル分の調歩同期式シリアルインタフェース機能、1チャンネル分の汎用パラレル/シリアル変換ポート機能のうち1又は複数に内部接続されている。
ADC412は、4チャンネルのアナログ入力ポートに接続され、これらを介して、アナログ入力装置366から入力されたアナログ信号をデジタル信号に変換する。例えば、マイク音声等のアナログ入力信号をサンプリングしてデジタルデータに変換する。
メインRAMアクセスアービタ390は、機能ユニット(CPU392、RPU396、SPU400、GE404、YSU406、DMAC382、及び外部インタフェースブロック408(汎用パラレル/シリアル変換ポート))からのメインRAM388へのアクセス要求を調停して、いずれかの機能ユニットにアクセス許可を出す。メインRAMアクセスアービタ390は、CPU392及びSPU400をバスマスタとする、メインRAM388へのアクセスのためのバスとしての機能も果たす。
メインRAM388は、CPU392のワーク領域、変数格納領域、及び仮想記憶管理領域等として利用される。また、メインRAM388は、CPU392が他の機能ユニットに受け渡すデータの格納領域、RPU396及びSPU400が外部メモリ364からDMAによって取得したデータの格納領域、GE404及びYSU406の入力データ及び出力データの格納領域等としても使用される。したがってメインRAM388は、CPU392、RPU396、SPU400、GE404及びYSU406により共有されるメモリである。この構成により、メインRAM388の領域を必要なときに必要な機能ユニットに動的に割当てることが可能になる。
各機能ユニットに専用のRAMを設ける場合には、各専用RAMの領域を、使用される可能性のある最大容量としておく必要がある。それに対し、本実施の形態におけるようにメインRAM388を複数の機能ユニットで共有し、必要なときに必要な容量だけを適切な機能ユニットに割当てることにより、使用されない領域が発生することを避けることができ、メインRAM388の領域全体を有効に利用できる。その結果、マルチメディアプロセッサ360全体として必要な記憶容量の総量が削減できる。
外部バス362は、外部メモリ364にアクセスするためのバスである。CPU392及びDMAC382から、外部メモリインタフェース380を介してアクセスされる。外部バス362のアドレスバスは、30ビットから成り、最大で1Gバイト(=8Gビット)の外部メモリ364を接続することができる。外部バス362のデータバスは、16ビットから成り、8ビット又は16ビットのデータバス幅を持つ外部メモリ364を接続できる。異なるデータバス幅を持つ外部メモリを同時に接続可能であり、アクセスする外部メモリによってデータバス幅を自動的に切替える機能が備えられる。
以下、SPU400の構成及び機能について詳細に説明していく。まず、以下の記載で使用する用語について説明する。
SPU400は、全部で64チャンネルのサウンドチャンネルで音声データを処理できる。ここで、物理線に対応するサウンドチャンネルを物理サウンドチャンネルと呼び、物理サウンドチャンネルに出力するウェーブデータを再生するサウンドチャンネルである論理サウンドチャンネルとは区別する。
以下では、単に「サウンドチャンネル」と言う場合は、論理サウンドチャンネルを意味する。また、本実施の形態では、左右2つの物理サウンドチャンネルを設定している。左音声信号(左ウェーブデータ)を再生する物理サウンドチャンネルを「左チャンネル」、右音声信号(右ウェーブデータ)を再生する物理サウンドチャンネルを「右チャンネル」と呼ぶ。
図16に、図15に示すSPU400の内部構成を概略的に示す。図16を参照して、SPU400は、データ処理ブロック438、コマンド処理ステートマシン430、制御レジスタセット432、DMAリクエスタ434、メインRAMインタフェース436、クロストーク低減回路442、及びSPUローカルRAMインタフェース440を含む。
コマンド処理ステートマシン430は、CPU392がI/Oバス410を通じて発行するコマンドに応じて、SPU400のコマンド実行における状態制御を行なう。発行されるコマンドの種類は、「START」、「STOP」、「UPDATE」、及び「NOP」の4種類である。これらのコマンドは、コマンド処理ステートマシン430のSPUコマンドレジスタ450に、対象となる論理サウンドチャンネルの番号と共に書込まれる。
コマンドSTARTは、指定された論理サウンドチャンネルの再生を開始させる命令である。CPU392は、このコマンドSTARTの発行前に、SPUローカルRAM402に再生に必要なパラメータを予め書込んでおく。コマンドSTOPは、指定された論理サウンドチャンネルの再生を停止させる命令である。
コマンドUPDATEは、指定された論理サウンドチャンネルの再生中に、再生に用いられるパラメータの一部を更新させる命令である。CPU392は、このコマンドUPDATEの発行前に、SPU400内の対応する制御レジスタ(次に説明する制御レジスタセット432に含まれる。)に更新するパラメータを予め書込んでおく。
コマンドNOPは、特に何の処理も行なわせない命令である。
制御レジスタセット432は、SPUコマンドレジスタ450以外のSPU400を制御するための複数の制御レジスタ(図示せず)を含む。通常、制御レジスタセット432には、SPU400の動作中に何らかの制御を実行するために必要なデータが書込まれる。制御レジスタセット432は、論理サウンドチャンネル再生に用いられるパラメータを更新するためのアップデートレジスタを含む。コマンドUPDATEを発行することにより、アップデートレジスタの値がSPU400により読出され、論理サウンドチャンネル再生に用いられるパラメータが更新される。
例えば、制御レジスタセット432は、補間モードレジスタ、ウェーブ周波数アップデートレジスタ、エンベロープリリースレートアップデートレジスタ、ゲインアップデートレジスタ、エンベロープモードアップデートレジスタ、ウェーブサンプリングレートレジスタ、エンベロープサンプリングレートレジスタ及びクロストーク低減回路制御レジスタ(いずれも図示せず)等を含む。補間モードレジスタには、前述した補間処理を行なうか否かを指定するデータが設定される。ウェーブ周波数アップデートレジスタには、音高を制御するウェーブ周波数(の小数部)の更新値が設定される。ゲインアップデートレジスタには、当該チャンネルのゲインの更新値が設定される。エンベロープモードアップデートレジスタには、エンベロープ処理におけるシーケンシャルモードとリリースモードとのいずれかを示す更新値が設定される。エンベロープリリースレートアップデートレジスタには、リリースモードにおけるエンベロープのリリースレートの更新値が設定される。ウェーブサンプリングレートレジスタには、ウェーブデータをD/A変換する周波数を指定する値が設定される。エンベロープサンプリングレートレジスタには、アンプリチュードデータ(エンベロープデータに左右のゲインを乗算したもの)をSPUローカルRAM402から読出しD/A変換する際の周波数を指定する値が設定される。クロストーク低減回路制御レジスタには、オーディオDACブロック386内でカスケード接続されたDAC間の伝達遅延に起因する、サウンドチャンネル間のクロストークノイズを低減するためのパラメータが設定される。これらのレジスタの内、ウェーブ周波数アップデートレジスタ、エンベロープリリースレートアップデートレジスタ、ゲインアップデートレジスタ、エンベロープモードアップデートレジスタに設定されるパラメータは、コマンドUPDATEが発行されると、データ処理ブロック438によりSPUローカルRAM402内の対応する記憶部に転記される。
DMAリクエスタ434は、コマンド処理ステートマシン430からの指示に従い、ウェーブデータ及びエンベロープデータを外部メモリ364から取得するために、DMAC382に対してDMA転送要求を発行する。また、DMA転送によって取得したデータをデータ処理ブロック438に出力する。
データ処理ブロック438は、ウェーブデータの取得及び再生、エンベロープデータの取得及びデコード、アンプリチュードデータの生成、エコー処理、並びにマイクエコー処理を行なう。
そして、データ処理ブロック438は、左チャンネルに対する複数の論理サウンドチャンネルのウェーブデータを時分割多重化し、左チャンネルウェーブデータMWLとして、クロストーク低減回路442に出力する。また、データ処理ブロック438は、右チャンネルに対する複数の論理サウンドチャンネルのウェーブデータを時分割多重化し、右チャンネルウェーブデータMWRとして、クロストーク低減回路442に出力する。
さらに、データ処理ブロック438は、左チャンネルに対する複数の論理サウンドチャンネルのアンプリチュードデータを時分割多重化し、左チャンネルアンプリチュードデータMAMLとして、クロストーク低減回路442に出力する。また、データ処理ブロック438は、右チャンネルに対する複数の論理サウンドチャンネルのアンプリチュードデータを時分割多重化し、右チャンネルアンプリチュードデータMAMRとして、クロストーク低減回路442に出力する。
このように、物理サウンドチャンネル毎に時分割多重化を行なうことにより、物理サウンドチャンネル毎に複数の論理サウンドチャンネルのウェーブデータのミキシング、及び、物理サウンドチャンネル毎に複数の論理サウンドチャンネルのアンプリチュードデータのミキシングを行なう。これは、時分割多重化されてデジタル/アナログ変換された音声出力が、聴覚上ミキシングされて聞こえることを利用している。
SPUローカルRAM402には、複数の論理サウンドチャンネルに対応して複数の記憶領域が設けられる。各記憶領域には、対応する論理サウンドチャンネルの再生に必要なパラメータが格納される。従って、SPUローカルRAM402に設けられている記憶領域の総数は64であり、この内、多重チャンネル数(=再生する論理サウンドチャンネル数)に等しい数の記憶領域が用いられる。また、各記憶領域に格納されるパラメータにはウェーブデータのアドレス情報も含まれ、これによって、論理サウンドチャンネルに割当てるウェーブデータが設定される。
これらのパラメータは、基本的には各チャンネルに対するSPU400の処理開始前にCPU392により設定される。しかし、SPU400の処理が開始された後には、処理途中の任意の時点でパラメータを変化させると再生される音声に悪影響が及ぶ。そのため、CPU392は、制御レジスタセット432内に制御用のパラメータを設定し、コマンドUPDATEを発行する。このコマンドに応答し、SPU400が、処理に悪影響の及ばないタイミングで制御レジスタセット432内のデータをSPUローカルRAM402内に転送し、新たなパラメータで動作を開始する。
図16に戻って、メインRAMインタフェース436は、データ処理ブロック438のメインRAM388へのアクセスを仲介する。メインRAM388へのアクセスは、(1)DMA転送によって取得したウェーブデータ及びエンベロープデータのメインRAM388への書込み、(2)論理サウンドチャンネルの再生のためのウェーブデータ及びエンベロープデータのメインRAM388からの読出し、(3)エコー処理及びマイクエコー処理のためのメインRAM388へのエコー成分たるウェーブデータ及びマイクエコー成分たるウェーブデータの読書きにおいて行なわれる。
SPUローカルRAMインタフェース440は、データ処理ブロック438のSPUローカルRAM402へのアクセスを仲介する。SPUローカルRAM402へのアクセスは、ウェーブデータ再生のためのパラメータ、並びに、エンベロープデータ及びアンプリチュードデータ生成のためのパラメータの読書きにおいて行なわれる。また、SPUローカルRAMインタフェース440は、CPU392がI/Oバス410を通じてSPUローカルRAM402へアクセスする際の仲介も行なう。
ウェーブデータは、8ビット単位のデータストリームであり、通常、予め外部メモリ364に格納される。論理サウンドチャンネルの再生が開始されると、SPU400は、DMAC382にウェーブデータの取得要求を開始する。DMAC382は、SPU400からの要求に応じて、ウェーブデータを外部メモリ364からメインRAM388上に確保されたウェーブバッファへと転送する。
但し、ウェーブデータが圧縮されており、伸張処理が必要な場合もある。その場合には、CPU392による圧縮ウェーブデータの伸張処理が行なわれ、DMAC382によるウェーブデータの取得は行なわない。この場合は、CPU392が直接メインRAM388上のウェーブバッファにウェーブデータを書込む。いずれの処理を選択するかはCPU392により実行されるプログラムがデータの内容により判定する。
図17に、データ処理ブロック438の詳細なブロック図を示す。なお、図17には、図の簡略化のため、ウェーブデータの再生(特にウェーブデータの補間処理とエンベロープ処理)に関連する部分のみを図示し、コマンドUPDATEによるパラメータ更新処理にかかわる部分、及びエコー処理を行なう部分については図示していない。また、図17のデータ処理ブロック438内に示される機能は全て、コマンド処理ステートマシン430からの指示を受けて、データ処理ブロック内部のステートマシンにより制御されるが、この部分についても図示していない。
図17を参照して、データ処理ブロック438は、ウェーブデータリードバッファ460、ウェーブ補間フィルタ462、マルチプレクサ(MUX)464、エンベロープアドレス算出部467、エンベロープデータリードバッファ468、エンベロープ算出部470、乗算器472L、乗算器472R、及びサウンドチャンネルデータ出力部458を含む。
ウェーブデータリードバッファ460及びエンベロープデータリードバッファ468は、メインRAM388から読出されたウェーブデータ及びエンベロープデータをそれぞれ格納するデータバッファである。ウェーブデータリードバッファ460は、64ビット単位でメインRAMから読み出されたウェーブデータを8ビット単位で出力する。エンベロープデータリードバッファ468は、64ビット単位でメインRAMから読み出されたエンベロープデータを32ビット単位で出力する。ウェーブ補間フィルタ462は、前述したウェーブデータの補間処理を行う。ウェーブ補間フィルタ462は、図7に示す補間回路114と同様の構成を持つ。
マルチプレクサ464は、制御レジスタセット432に含まれるウェーブ補間モード設定レジスタに設定されている値に従って、ウェーブ補間フィルタ462の出力及びウェーブデータリードバッファ460の出力のいずれかを選択して出力する。マルチプレクサ464から出力されたデータは、SPUローカルRAM402の当該論理チャンネルの領域に書出される。ウェーブアドレス算出部466は、メインRAM388からのウェーブデータ読出しのためのアドレス計算を実行し、DMAリクエスタ434及びメインRAMインタフェース436に算出したアドレスの整数部を出力するとともに、アドレスの小数部をWPHASEとしてウェーブ補間フィルタ462に与える。このアドレスはSPUローカルRAM402に格納され、次のアドレス計算に用いられる。
エンベロープアドレス算出部467は、メインRAM388からのエンベロープデータ読出しのためのアドレス計算を実行し、DMAリクエスタ434及びメインRAMインタフェース436に算出したアドレスを出力する。エンベロープ算出部470は、SPUローカルRAMの当該サウンドチャンネルの領域に格納されているエンベロープモードに従って、シーケンシャルモード又はリリースモードでのエンベロープのサンプル値の算出を行う。シーケンシャルモードでは、エンベロープ処理の開始、及び新たなエンベロープの読出処理の開始時に、エンベロープデータリードバッファ468から出力されたエンベロープデータを取得し、エンベロープデータに対するデコード処理を実行してエンベロープのサンプル値を算出し、算出したエンベロープのサンプル値をSPUローカルRAM402の当該サウンドチャネルの領域に格納する。リリースモードでは、SPUローカルRAM402の当該サウンドチャネルの領域にに格納されたエンベロープの現在のサンプル値に対し、エンベロープリリースレートを乗算することにより、リリースモードにおける次のサイクルのエンベロープサンプル値を算出し、算出したエンベロープのサンプル値をSPUローカルRAM402の当該サウンドチャンネルの領域に格納する。
乗算器472L及び乗算器472Rは、SPUローカルRAM402から読出された現在のエンベロープサンプルの値に対し、左チャンネル用のゲイン及び右チャンネル用のゲインをそれぞれ乗算して左右チャンネル用のアンプリチュードを算出し、算出したアンプリチュードデータをSPUローカルRAM402に格納する。サウンドチャンネルデータ出力部458は、制御レジスタセット432に含まれるウェーブサンプリングレートと現在処理中の論理サウンドチャンネルのナンバにしたがって、SPUローカルRAM402の当該サウンドチャンネルの領域から、ウェーブデータ及びアンプリチュードデータを読出し、クロストーク低減回路442へ出力する。論理サウンドチャンネルの処理は順次的かつ巡回的に行われるので、結果としてクロストーク低減回路442へのデータ出力は時分割多重化される。ここで、エンベロープデータはエンベロープサンプリングレートの値により定まる周波数で更新されているが、サウンドチャンネルデータ出力部458が出力するアンプリチュードデータが更新されるのはウェーブ補間フィルタ462のステータスレジスタ128(図7参照)からのゼロステータス信号の値によってウェーブデータの値がゼロであるか又はその符号が変化したタイミングである。SPUローカルRAM402の当該サウンドチャンネルの領域には、常に現在のアンプリチュードデータと次に用いられるアンプリチュードデータとの両方が格納されている。
<動作>
以上構成について説明したマルチメディアプロセッサ360は以下のように動作する。なお、以下の説明はサウンド処理について行ない、その他の制御についての説明は必要なときを除き行なわない。
図15を参照して、予め、処理に必要なデータ(PCMウェーブデータ及びエンベロープデータ)は外部メモリ364に格納されている。SPU400によるサウンド処理を実行する必要が生じた場合、CPU392はSPUローカルRAM402に対して、対象データのアドレス等のサウンド処理に必要なパラメータを設定した後、I/Oバス410を介してSPU400に対してコマンドSTARTを与える。CPU392はこの後、サウンド処理については基本的にSPU400に任せ、他の処理を実行する。ただし、再生中のサウンドチャンネルに対し、音声の大きさを変えたり、エンベロープ処理の動作モードを変更したりする必要が生じた場合、CPU392はそのためのパラメータをSPU400の制御レジスタセット432(図16参照)に設定し、コマンドUPDATEを発行する。
CPU392がSPUローカルRAM402に設定するパラメータとして、補間をするか否か(補間モード)を示す補間モード、音高を制御するためのウェーブ周波数(図6のウェーブ周波数記憶部92の小数部112)、各論理サウンドチャンネルの先頭音声の読出アドレス、エンベロープデータのサンプリングレート等がある。なお、本実施の形態では、処理の最初では、エンベロープモードはシーケンシャルモードに設定される。
−シーケンシャルモード−
シーケンシャルモードでは、図17に示すエンベロープ算出部470は現在のエンベロープサンプルの値に対しエンベロープリリースレートを乗算した値を算出する。
コマンドSTARTを受けると、SPU400のDMAリクエスタ434(図16参照)は、DMAC382に対し、CPU392によって指定された論理サウンドチャンネルのデータをメインRAM388に転送するようにDMACリクエストを発行する。DMAC382は、指定されたアドレスのデータを外部メモリ364から読出し、メインRAM388上のウェーブバッファに格納する。
DMAC転送が終了すると、SPU400はCPU392により指定された論理サウンドチャンネルのウェーブデータの再生を開始する。ウェーブデータの再生には、前述のように補間を使用するか否かという二つの動作モードがある。
補間を使用しない場合、マルチプレクサ464は、直接にウェーブデータリードバッファ460の内容を選択するように切替えられる。補間を使用する場合、マルチプレクサ464はウェーブ補間フィルタ462の出力を選択するように切替えられる。
ウェーブアドレス算出部466は、一定の時間間隔でSPUローカルRAM402中のウェーブデータアドレス記憶部90に記憶された値に、同じくSPUローカルRAM402内のウェーブ周波数記憶部92に記憶された値を加算する。加算後の値は、ウェーブデータアドレス記憶部90に書戻される。ウェーブアドレス算出部466は、この加算によりウェーブデータアドレス記憶部90の小数部から整数部への桁上がりが発生したことに応答して、メインRAM388からウェーブデータを読出し、ウェーブデータリードバッファ460に格納する。この際のアドレスにはウェーブデータアドレス記憶部90の整数部が用いられる。
ウェーブ周波数記憶部92に記憶された値は0より大きく1より小さい。この値が大きくなると、加算の結果桁上がりが生ずる頻度が高くなり、結果としてウェーブデータをメインRAM388から読出す頻度が高くなる。ウェーブ周波数記憶部92に記憶された値を小さくすると、ウェーブデータをメインRAM388から読出す頻度が低くなる。
このようにSPU400がメインRAM388からの読出し速度を変えることで、ピッチ変換が行なわれる。補間をすることが指定されている場合、ウェーブデータの補間がウェーブ補間フィルタ462により行なわれ、補間後のウェーブデータが後段に送出される。一方、補間を行なわない場合は、マルチプレクサ464がウェーブデータリードバッファ460の出力に直接短絡され、補間なしのウェーブデータがサウンドチャンネルデータ出力部458に送出される。
マルチプレクサ464からのウェーブデータは、複数の論理サウンドチャンネルに対し、左チャンネルと右チャンネル(左右の物理サウンドチャンネル)との両方の時分割多重化処理を行なうサウンドチャンネルデータ出力部458に出力される。
シーケンシャルモードでは、デジタルブロック456は以下のように動作する。DMAC382がSPU400からの要求に応じて外部メモリ364からメインRAM388上に確保されたエンベロープバッファにエンベロープデータ列を転送する。エンベロープ処理の開始時、又は新たに適用されるエンベロープが変更されると、このエンベロープデータからエンベロープデータが読出され、図17に示すエンベロープデータリードバッファ468に格納される。エンベロープ算出部470がこのエンベロープデータをデコードしてエンベロープサンプルを算出する。算出されたエンベロープサンプルがSPUローカルRAM402に格納される。
左乗算器472L及び右乗算器472Rが、SPUローカルRAM402中のエンベロープサンプルに対し、ゲインを乗算してアンプリチュードデータを算出し、SPUローカルRAM402に格納する。
サウンドチャンネルデータ出力部458は、制御レジスタセット432に含まれるウェーブサンプリングレートと現在処理中の論理サウンドチャンネルのナンバとにしたがって、SPUローカルRAM402の当該サウンドチャンネルの領域から、左右両チャンネルに対するウェーブデータ及びアンプリチュードデータを読出し、クロストーク低減回路442へ出力する。論理サウンドチャンネルの処理は順次的かつ巡回的に行われるので、結果としてクロストーク低減回路442へのデータ出力は時分割多重化される。なお、エンベロープデータはエンベロープサンプリングレートの値により定まる周波数で更新されているが、サウンドチャンネルデータ出力部458が出力するアンプリチュードデータが更新されるのはウェーブ補間フィルタ462のステータスレジスタ128(図7参照)からのゼロステータス信号の値によってウェーブデータの値がゼロであるか又はその符号が変化したタイミングである。
以上の動作がデータ処理ブロック438で繰返されることにより、シーケンシャルモードでの各論理サウンドチャンネルにおけるウェーブデータの生成が行なわれる。
CPU392が何らかの条件の充足により制御レジスタセット432内のエンベロープモードレジスタ(図示せず)にリリースモードを示す値を設定し、コマンドUPDATEをSPU400に対し発行することにより、SPU400の動作モードはリリースモードに移る。
−リリースモード−
リリースモードでは、エンベロープ算出部470はSPUローカルRAM402に格納された現在のエンベロープサンプルの値にエンベロープリリースレートを乗算して新たなエンベロープサンプルの値を算出する。したがって、前回のエンベロープサンプルに、指定されたエンベロープリリースレートを乗じた値のエンベロープサンプルが生成され、SPUローカルRAM402に格納される。
データ処理ブロック438でのこれ以後の動作はシーケンシャルモードと同様である。ただし、リリースモードでは、ウェーブデータの値がゼロとなった論理サウンドチャンネルの動作は停止する。
図15のオーディオDACブロック386は、カスケード接続されたDAC(図示せず)を含む。上記のように、複数の論理サウンドチャンネルのミキシングは、DACへの入力データを時分割多重化することによって行なわれる。また、複数のパラメータ間のアナログ乗算(例えば、ウェーブデータとアンプリチュードデータとの乗算)は、カスケード接続されたDACにより行われる。このように時分割多重化されたデータをそのままオーディオDACブロック386に入力すると、カスケード接続されたDAC間における伝播遅延が、論理サウンドチャンネル間のクロストークを引き起こす可能性がある。
図16のクロストーク低減回路442は、このような論理サウンドチャンネル間のクロストークの発生を防止する機能を持つ。このクロストーク低減回路442は、各論理サウンドチャンネルのデータをカスケード接続されたDACに出力する際に、論理サウンドチャンネル間に予め設定された長さの無音期間を挿入する。これにより、カスケード接続されたDAC間を、ある論理サウンドチャンネルの信号が伝播する際に、前後の論理サウンドチャンネルの信号と干渉が発生することを防止する。無音期間の長さは、CPU392がI/Oバス410を通じて、制御レジスタセット432内の対応する制御レジスタ(図示せず)に設定する。
詳細には、クロストーク低減回路442は、左チャンネルウェーブデータMWLの論理サウンドチャンネル間に無音期間を挿入して、左チャンネルウェーブデータMWLCとして、オーディオDACブロック386に出力する。また、クロストーク低減回路442は、右チャンネルウェーブデータMWRの論理サウンドチャンネル間に無音期間を挿入して、右チャンネルウェーブデータMWRCとして、オーディオDACブロック386に出力する。
さらに、クロストーク低減回路442は、左チャンネルアンプリチュードデータMAMLの論理サウンドチャンネル間に無音期間を挿入して、左チャンネルアンプリチュードデータMALCとして、オーディオDACブロック386に出力する。また、クロストーク低減回路442は、右チャンネルアンプリチュードデータMAMRの論理サウンドチャンネル間に無音期間を挿入して、右チャンネルアンプリチュードデータMARCとして、オーディオDACブロック386に出力する。
さらに、クロストーク低減回路442は、制御レジスタセット432の対応する制御レジスタ(図示せず)から入力されたメインボリュームデータMVを、そのままメインボリュームデータMVCとして、オーディオDACブロック386に出力する。
詳細は図示しないが、オーディオDACブロック386は、左チャンネルウェーブデータMWLCに左チャンネルアンプリチュードデータMALCを乗算し、さらにメインボリュームMVCを乗算することにより最終的な左音声信号を生成する。同様に、オーディオDACブロック386は、右チャンネルウェーブデータMWRCに右チャンネルアンプリチュードデータMARCを乗算し、さらにメインボリュームMVCを乗算することにより最終的な右音声信号を生成する。
以上のように本実施の形態に係るマルチメディアプロセッサ360では、各機能ユニットで共有するメインRAM388を設けている。したがって、各機能ユニットに個別の専用メモリを設ける場合に発生する無駄な記憶容量を削減でき、マルチメディアプロセッサ360全体として必要なメモリの容量を削減できる。CPU392だけでなく、SPU400もメインRAM388へのアクセスのためのメインRAMアクセスアービタ390のバスマスタとなることができるため、CPU392からの最小限の指示でサウンド処理を実行することができる。そのため、CPU392に係る負荷を小さくすることができ、CPU392としてそれほど性能の高いものを用いる必要がない。その結果、マルチメディアプロセッサ360のコストを下げることができる。又は、同じ性能のCPU392を用いる場合、より高度な処理を実行することができる。
さらに、マルチメディアプロセッサ360のSPU400では、PCMウェーブデータのピッチ変換を行なう際に、単にウェーブデータの読出速度を調整するだけでなく、ウェーブデータの読出アドレスの小数部まで考慮して補間を行なう。そのため、従来のように単純に読出速度をあげる場合と比較してエイリアスノイズの発生を抑えることができ、高品質の音声を出力できる。また、補間をするか否かをプログラムにより選択できるため、場面にあわせて音質とメインRAMへのバス帯域の負荷とのどちらかを重視した形の処理を選択的に行なうことができる。
またこのピッチ変換におけるPCMウェーブデータの読出速度は、オーディオDACブロック386への音声信号の出力速度とは全く無関係に設定できる。したがって、この装置を用いたプログラミングでは、音声信号の出力レートによる影響を考慮する必要がない。音声信号出力部のハードウェアの仕様に影響されず、音質の劣化の無いピッチ変換回路を実現できる。
また、SPU400では、エンベロープデータを従来のようにサンプルデータそのものの形ではなく、勾配とその持続時間の形で準備する。これらはいずれもデジタルデータであり、そのデータ量は少ない。その結果、サンプルデータをそのまま利用する場合と比較してエンベロープデータを記憶するために必要なメモリ容量を削減することができる。さらに、エンベロープ処理の動作モードとしてシーケンシャルモードとリリースモードとを用意し、両者を簡単に切替えることができる。その結果、音声の出力を停止したりする際に、音声信号に悪影響を及ぼすことなく、簡単に処理できる。また、どのようなエンベロープデータに対してもこのリリースモードを適用できるため、使用中のエンベロープについて確認する必要がなく、容易に音声の出力を停止できる。
なお、本発明は、上記の実施の形態に限られるものではなく、その要旨を逸脱しない範囲で種々の態様において実施することが可能であり、例えば、以下のような変形も可能である。
(1)上記実施の形態では、物理サウンドチャンネル数を複数にしたが、単数であっても、本発明は適用できる。また、上記実施の形態では、論理サウンドチャンネル数の最大値を64としているが、設計仕様と使用するハードウェアの性能とにより、この数を任意に増減することができる。
(2)上記実施の形態では、PCMウェーブデータの読出アドレスに、ウェーブ周波数記憶部92に記憶されたWPHASEデータ(ウェーブ周波数)を加算した後の、ウェーブデータアドレス記憶部90に記憶されたデータの整数部を用いている。これは、このようにすれば処理が最も簡単でかつ高速だからである。しかし本発明はそのような実施の形態には限定されない。例えば、この整数部の値に対して所定の関数を適用することによりウェーブデータの読出アドレスを算出するようにしてもよい。また、上記実施の形態ではウェーブデータアドレス記憶部90の整数部と小数部とでそれぞれウェーブデータのアドレスと補間量とを算出しているが、これらを全く別個の記憶領域に記憶するようにしてもよい。
(3)上記実施の形態では、補間のための関数として図5に示すような関数を用いている。しかし本発明はそのような実施の形態には限定されない。例えば、f(x)とf(x+1)間が直線補間される関数f(x)を用いても、ある程度の効果が期待できる。
(4)上記実施の形態では、複数の論理サウンドチャンネルの音声信号を時分割多重化することにより、物理サウンドチャンネルの信号を作成している。これは、そのような時分割多重化された音声信号で発生された音声について、人間には同時に発生された音声として感じられるという人間の聴覚特性に基づいている。しかし、本発明はそのような時分割多重化を行なう装置のみに適用可能なわけではなく、通常の方法により音声信号を混合する装置にも適用できる。
(5)上記実施の形態では、エンベロープデータとして勾配データと持続時間データとの双方を用いている。しかし、本発明はそのような実施の形態には限定されない。例えば、持続時間としてどの勾配データについても一定の持続時間を予め定めておくことにより、勾配データのみでエンベロープデータを定義することもできる。同じ勾配が長く続くときには、同じ値を持つ勾配データを連続して準備しておけばよい。この場合、同じ勾配のデータが続く個数が、その持続時間を表すことになる。
(6)上記実施の形態では、ピッチ変換のために、ウェーブデータアドレス記憶部90に記憶されたアドレスデータに、ウェーブ周波数記憶部92に記憶された値を加算している。しかし、本発明は加算を用いるような実施の形態のみには限定されない。例えば、減算を用いても全く同様の処理を実現することができることは明らかである。減算は実質的には加算と同じ処理であるから、当然である。
今回開示された実施の形態は単に例示であって、本発明が上記した実施の形態のみに制限されるわけではない。本発明の範囲は、発明の詳細な説明の記載を参酌した上で、特許請求の範囲の各請求項によって示され、そこに記載された文言と均等の意味及び範囲内でのすべての変更を含む。
72…補間ポイント、80…アドレス算出回路、110…補間回路、120…シフトレジスタ、122…係数算出部、124…乗算処理部、200…エンベロープ、240…エンベロープデータ、300,330,352…エンベロープ処理回路、312…持続時間ダウンカウンタ、320…勾配記憶部、360…マルチメディアプロセッサ、384…ビデオDAC、386…オーディオDACブロック、382…DMAC、388…メインRAM、390…メインRAMアクセスアービタ、392…CPU、396…RPU、400…SPU、404…GE、406…YSU、410…I/Oバス、430…コマンド処理ステートマシン、432…制御レジスタセット、434…DMAリクエスタ、436…メインRAMインタフェース、438…データ処理ブロック、442…クロストーク低減回路、450…コマンドレジスタ、460…ウェーブデータリードバッファ、462…ウェーブ補間フィルタ、464…マルチプレクサ、466…ウェーブアドレス算出部、467…エンベロープアドレス算出部、468…エンベロープデータリードバッファ、470…エンベロープ算出部、472L,472R…乗算器