以下、図面を用いて本発明の実施の形態を説明する。
図1は、本発明に係るDSPを用いたミキサの構成例を示す。このミキサは、中央処理装置(CPU)101、リードオンリメモリ(ROM)102、ランダムアクセスメモリ(RAM)103、表示器104、操作子105、時分割DSP106、サブDSP107、外部RAM108、波形入力部109、波形出力部110、及びバスライン111を備える。
CPU101は、このミキサ全体の動作を制御する処理装置である。ROM102は、CPU101が実行する制御プログラムや各種のデータを格納する不揮発性メモリである。RAM103は、CPU101が実行する制御プログラムのロード領域や各種のワーク用メモリ領域が確保される揮発性メモリである。表示器104は、CPU101からの指示に基づき与えられたデータを表示するディスプレイである。操作子105は、本ミキサの外部パネル上に設けられた、ユーザが操作するための各種の操作子である。波形入力部109は、外部からアナログないしディジタルの複数チャンネル(ch)の音響信号を入力して、対応する複数chのディジタル音響信号を時分割DSP106のインターフェース(I/O)部316に供給し、波形出力部110は、時分割DSP106のI/O部316から供給される複数chのディジタル音響信号を、ディジタル音響信号のまま、ないしアナログ音響信号に変換して外部へ出力する。
時分割DSP106は、波形入力部109から入力した複数chのディジタル音響信号を任意の組み合わせでミキシングしたり、各種の効果付与処理及び音量レベル制御処理などを行う処理装置である。時分割DSP106は、CPU101からの指令によりロードした各種のμプログラムを実行することにより上述した処理を行うが、そのμプログラムを適宜変更することにより各種のミキサ処理を実現できる。外部RAM108は、DSP106が動作する際に、遅延した楽音波形データを使用する場合に利用する外部メモリである。サブDSP107は、ディジタル音響信号のレベル検出処理に特化されたディジタル信号処理装置である。時分割DSP106及びサブDSP107は、ワンチップの集積回路で構成されているものとする。なお、時分割DSP106、サブDSP107、CPU101、及び表示器104と操作子105のインターフェースを含む範囲(図1の点線の範囲)をワンチップ化してもよい。
図2は、時分割DSP106の概念図を示す。時分割DSP106は、各ステップの期間を複数に分割した時分割処理により、各ステップの期間内に複数の波形信号処理を切り替えることによって、等価的に複数のDSPの機能を実現する。ここでは、物理的には1つである時分割DSP106により、4つのDSP1〜4の並列動作を実現している。各DSP1〜4は、1DAC周期(1サンプリング周期)の間にそれぞれ256ステップのμプログラムを実行できる。その256ステップのμプログラムは、複数のブロックに分けられており、各ブロック毎に独立した、入力chの処理プログラム、楽音信号のミキシングを行う処理プログラム、出力chの処理プログラム、及び楽音信号に各種のエフェクトを付与するプログラムなどを実行できる。実際には、時分割DSP106がパイプライン処理を行っており、1DAC周期の間に、DSP1の第1番目のμ命令、DSP2の第1番目のμ命令、DSP3の第1番目のμ命令、DSP4の第1番目のμ命令、DSP1の第2番目のμ命令、DSP2の第2番目のμ命令、DSP3の第2番目のμ命令、DSP4の第2番目のμ命令、…、DSP1の第256番目のμ命令、DSP2の第256番目のμ命令、DSP3の第256番目のμ命令、DSP4の第256番目のμ命令という順に実行しているものである。
図3は、図1の時分割DSP106及びサブDSP107の内部詳細図を示す。まず時分割DSP106の内部構成について詳しく説明する。時分割DSP106は、演算部311、I−RAM312、T−RAM313、Y−RAM314、バスライン315、I/O部316、係数発生部317、書き込み部318、読出し部319、外部RAMアドレス発生部320、及びμプログラム読出し部321を備える。また、時分割DSP106は、係数などのデータを入力するため、各種の入力レジスタ群を備える。入力レジスタとしては、係数RAM322、その他レジスタ323、μプログラムレジスタ324、先頭ステップレジスタ325、外部RAMアクセスアドレスレジスタ326、外部RAMブロック情報レジスタ327を備える。
演算部311の内部構成については図4で詳しく説明する。I−RAM312、T(テンポラリ)−RAM313、Y−RAM314は、演算部311に入力されるデータのレジスタ部である。バスライン315には、演算部311の演算結果が出力される。I/O部316は、図1に示した波形入力部109及び波形出力部110との間の楽音信号のデータ転送の入出力インターフェースであり、時分割で16ch(図2の各DSP1〜4毎に16ch)の楽音信号入出力ができる。I−RAM312には、I/O部316の各出力及びバスライン315のデータが入力され、図5を参照して後述するように、それぞれに対応した領域に一時記憶される。I−RAM312は、一時記憶したデータを演算部312またはI/O部316に出力する。I−RAM312は、後述するサブDSP107のI−RAM332と表裏の関係を有するが、これについては後に詳しく説明する。T−RAM313及びY−RAM314は、バスライン315上に出力される、演算部311の出力データまたは外部RAM108から遅延して読み出された楽音信号のデータを一時記憶する。演算部311には、係数発生部317から出力される係数も入力する。係数発生部317は、係数RAM322に記憶されている係数に補間演算を行って出力するものである。この係数は、係数RAM322において、μプログラムの各ステップに対応して記憶されている。
μプログラムレジスタ324には、この時分割DSP106で実行するμプログラムを設定する。図2で説明したように、時分割DSP106はパイプライン処理により4つのDSP1〜4の並列動作を行うが、μプログラムレジスタ324には、これら4つのDSP1〜4のそれぞれで実行するμプログラムを格納する4つの領域が設けられている。1つの領域、例えばDSP1に対応する領域には、該DSP1が1DAC周期で実行する256ステップのμ命令が格納される。図5(a)で詳述するが、この領域に格納されるμプログラムは複数ブロックに分けられており、各ブロック毎に独立した信号処理を実行することができる。例えば、各ブロック毎に独立したエフェクトアルゴリズムでエフェクト付与することも可能である。先頭ステップレジスタ325は、μプログラムの前記複数ブロックのそれぞれの先頭ステップ番号を記憶している。μプログラム読出し部321は、1DAC周期の間に、複数の時分割DSP1〜4のμプログラムそれぞれの全ステップを1回実行し、その各ステップにおいて、当該ステップのステップ番号と先頭ステップレジスタ325の記憶する先頭ステップ番号に基づいて現在実行中のブロックのブロック番号を出力するとともに、当該ステップのμ命令に基づいて制御信号を出力し、これらによって、演算部311、I−RAM312、T−RAM313、Y−RAM314、及び、外部RAMアドレス発生部320などを制御し、図8,9で後述するミキサの動作を実現する。
書き込み部318は、バスライン315上のデータを、外部RAM108に書き込む書き込み回路である。読出し部319は、外部RAM108からデータを読出してバスライン315上に出力する読出し回路である。外部RAM108は、μプログラム中の各ブロック毎に、そのブロックが使用する領域が割り当てられている。外部RAMアクセスアドレスレジスタ326は、μプログラム中で外部RAM108にアクセス可能なステップに対応する記憶エリアに、各ステップでアクセスする際のアドレスを記憶している。外部RAMブロック情報レジスタ327は、外部RAM108におけるμプログラムの各ブロックが使用する領域の先頭アドレス及びブロックサイズを格納している。外部RAMアドレス発生部320は、外部RAMアクセスアドレスレジスタ326から出力されるアドレスと、外部RAMブロック情報レジスタ327から出力される先頭アドレス及びブロックサイズを用いて、外部RAM108のアクセスアドレスを演算し、アドレス線に出力する。 次に、サブDSP107について説明する。サブDSP107は、演算部331、I−RAM332、T−RAM333、Y−RAM334、バスライン335、係数発生部337、取込部338、及びロジック回路339を備える。またサブDSP107は、係数データなどの入力用のレジスタ群として、係数RAM340、chレジスタ341、及びレベルレジスタ342を備える。なお、サブDSP107において、I−RAM332により楽音信号を入力し、そのレベル検出(エンベロープフォロワ)の処理を行い、検出したレベル値を出力する一連の処理を行う一系統を、レベル検出チャンネル(ch)と呼ぶものとする。本実施形態のサブDSP107は、時分割処理により96個のレベル検出chを実現している。
演算部331は、演算部311と同様のものである。ただし、時分割DSP106では楽音信号の処理を行うため32ビットデータの演算を行っているが、サブDSP107は、楽音信号ほど演算精度の必要ないレベル検出処理を行うため、演算部331はそれより少ない24ビットデータの演算を行うものとしている。なお、この時分割DSP106の32ビットとサブDSP107の24ビットは、それぞれ一例であって、時分割DSPに比べてサブDSPが少ないビット数である、どのようなビット数の組み合わせで設計してもよい。I−RAM332、T−RAM333、Y−RAM334、バスライン335、係数発生部337、及び計数RAM340は、時分割DSP106のI−RAM312、T−RAM313、Y−RAM314、バスライン315、係数発生部317、及び係数RAM322とそれぞれ同様のものである。I−RAM332とI−RAM312の内部構成と表裏の関係については、図5(b)及び(c)で説明する。
時分割DSP106が備えている書き込み部318、読出し部319、外部RAMアドレス発生部320、外部RAMアクセスアドレスレジスタ326、及び外部RAMブロック情報レジスタ327は、サブDSP107では不要であるから無い。また、時分割DSP106では、μプログラムレジスタ324と先頭ステップレジスタ325から読出したデータに基づいてμプログラム読出し部321が制御信号やブロック番号をDSP内の各部に供給して動作させているが、そのような構成に代えて、サブDSP107ではロジック回路339を備えている。ロジック回路339は、96個のレベル検出chを実現するため、1DAC周期中に設けた96個の各タイムスロットで、1つのレベル検出chの処理を行うための全ステップを実行するように、所定のタイミングで制御信号やレベル検出ch番号を出力し、サブDSP107内の各部に供給する。1つのレベル検出chの処理を行うタイムスロットは、さらにマスタークロックの周期のタイムスロットに分けられており、該マスタークロックの周期のタイムスロット毎に制御信号やレベル検出ch番号がサブDSP107内の各部に供給され、これにより1ch分のレベル検出が実現されるものである。このロジック回路339は、ハードウエアで構成されているので、μプログラムを用いるより構成が簡易である。
chレジスタ341は、CPU101がレベル値を取得したいレベル検出chを指定(複数指定できる)するレジスタである。取込部338は、ロジック回路339が出力するレベル検出ch番号とchレジスタ341で指定されているレベル検出ch番号とを比較し、一致しているとき(すなわち、現タイムスロットで当該レベル検出ch番号の処理を行っているということである)には、バスライン335上にレベル検出結果が出力されたタイミングでそのレベル検出結果を取込み、レベルレジスタ342に書込む。CPU101は、レベルレジスタ342からそのレベル検出結果を読込み、メータ表示などに使用する。
図4は、時分割DSP106の演算部311の内部詳細図を示す。演算部311は、セレクタ401,402,403、遅延回路404、変換回路405、乗算器406、及び加算器407を備える。なお、図4では時分割DSP106の演算部311について説明するが、サブDSP107の演算部331も、処理できるデータのビット数が異なるだけで、同様の構成である。
セレクタ401は、バスライン315からのデータ、I−RAM312からの入力データ、またはT−RAM313からの入力データの何れかを選択的に出力するセレクタである。セレクタ402は、T−RAM313またはI−RAM312からの入力データの何れかを選択的に出力するセレクタである。セレクタ403は、Y−RAM314からの入力データまたは係数発生部317からの入力データの何れかを選択的に出力するセレクタである。これらの各セレクタ401,402,403における選択処理は、μプログラム読出し部321によって読出されたμ命令に従って出力される制御信号とブロック信号に基づいて行われる。遅延回路404は、セレクタ401からの出力データを所定時間だけ遅延(加算器407への入力タイミングを合わせるためである)した後、加算器407に入力する。変換回路405は、セレクタ403からの出力をリニア−指数変換して出力する(リニア−指数変換せずに信号をスルーするように制御することも可能)。乗算器406は、セレクタ402からのデータと、変換回路405からのデータとを乗算し、乗算結果は加算器407に入力する。加算器407は、遅延回路404からのデータと乗算器406からのデータとを加算し、加算結果をバスライン315に出力する。これらの演算部内のハードウエアは、μプログラムの1ステップよりも高速で動作する。
図5(a)は、時分割DSP106のμプログラムレジスタ324のプログラム構成の説明図である。CPU101からμプログラムレジスタ324に設定されるμプログラムは、図2のDSP1〜4のそれぞれで実行される4つの独立したμプログラム(それぞれが256ステップ)に分かれている。さらに1つのμプログラム、例えばDSP1で実行するμプログラムは、複数のブロックに分かれている。各ブロックのμプログラムはそれぞれ独立した信号処理を行うものであり、1DAC周期で全ブロックのステップが1回実行される。
図5(b)は、時分割DSP106のI−RAM(表)312の内部構成を示す。共通アクセス領域Aは、各時分割DSP1〜4のそれぞれに専用の領域(複数のブロックには共通の領域)が独立して設けられ、それぞれ16ワードある。I/O領域は、各時分割DSP1〜4のそれぞれに専用の領域が独立して設けられ、I/O部316への書込みと読出しとを行う領域であって、16ch分あり、各chは何れかのブロックに割り当てられる。このI/O領域は、I/O部316への出力を行うための書込み領域と、I/O部316からの入力を行うための読出し領域の2つの領域を有しており、1DAC周期毎に書込み領域と読出し領域が入れ替わるようになっている。例えば、DSP1が、ある1DAC周期の間にI/O領域にデータを書込むと、次の1DAC周期でI/O部316が該データを波形出力部110に出力することができる。このDSP集積回路は、時分割DSP1〜4のトータルで、64chの外部入力と64chの外部出力と(それぞれ16ch×4)を備えていることになる。
ダイナミクス領域は、時分割DSP106とサブDSP107との間でデータのやり取りを行うための領域である。96個のレベル検出chのそれぞれに割り当てられたデータエリアが順番に確保されている。これらのデータエリアは、何れかのブロックに割り当てて使用する。このダイナミクス領域と表裏の関係にあるダイナミクス領域が、図5(c)に示すように、サブDSP107のI−RAM(裏)332に設けてある。図5(b)と図5(c)のダイナミクス領域は1DAC周期毎に入れ替わる。これにより、時分割DSP106側で図5(b)の表側ダイナミクス領域にデータを書込むと、次の1DAC周期ではその領域が裏側ダイナミクス領域となり、サブDSP107で読出すことができる。
個別アクセス領域は、この領域を適当に分割して各DSPの各ブロックに割り当てることができる領域であり、256ワードが用意されている。各ブロックでは、割り当てられた領域をそのブロックの専用領域として使用できる。基本的には、他のブロックからの書き込みが行われないそのブロック専用の領域として使われるが、他のブロックからそのブロックへデータを渡すための受け渡し領域として使うこともできる。
図示しないが、T−RAM313には、I−RAM312と同様の共通アクセス領域A及び個別アクセス領域が設けられている。T−RAM313の領域は、I−RAM312より大きな容量で確保されている。同様に、Y−RAM314には、共通アクセス領域A及び個別アクセス領域が設けられている。Y−RAM314は、演算に使用する係数を一時的に保存するための領域であり、記憶容量は少なくてよい。信号処理過程において、楽音波形データを短時間遅延させるのであれば、これらのI−RAM312やT−RAM313を用いればよい。長時間にわたる遅延は、外部RAM502に書込んで読出すことにより実現する。
図5(c)は、サブDSP107のI−RAM(裏)332の内部構成を示す。ダイナミクス領域については、図5(b)の表側ダイナミクス領域で説明した。テンポラリ領域は、サブDSP107で一時的に使用するワーク用データ領域である。
図6は、時分割DSP106で実現しているミキサの機能ブロック図を示す。本ミキサは、24個の入力ch601を備える。各入力chは、それぞれ独立に、波形入力部109から入力したディジタル音響信号に対する信号処理(図7で後述する)を施す。各入力ch601の信号は、12本のMIXバス602またはステレオバス603に選択的に入力される。各MIXバス602またはステレオバス603は、それぞれ入力ch601から入力する信号をミキシングする。ミキシングされた信号は、対応するMIX出力ch604(12ch)またはステレオ出力ch605に出力される。MIX出力ch604やステレオ出力ch605の出力は波形出力部110に供給され、例えば、ディジタル/アナログ変換された後、不図示のサウンドシステムを介して放音される。
図7は、図6で説明した入力ch601の1ch分の概略構成を示す機能ブロック図である。入力ch700は、アッテネータ(ATT)701、イコライザ(EQ)702、コンプレッサ(Comp)703、インサーション・エフェクタ(Ins.effect)704、ボリューム(Vol)705、chオンスイッチ(CH_ON)706、ステレオオンスイッチ(TO_ST)707、パンニング調節器(PAN)708、プリ・ポスト(PP)スイッチ711、センドレベル調節器(SND_L)712、及びセンドオン(SND_ON)スイッチ713を備える。
アッテネータ701は、入力chの先頭部分でのレベル制御を行う。イコライザ702は、周波数特性を調整する。コンプレッサ703は、自動ゲイン調整を行う。インサーション・エフェクタ704は、当該入力chから信号を取り出して各種のエフェクトを付与し再び当該入力chに信号を戻す処理を行う。ボリューム705は、信号レベルを調整する処理を行う。本ミキサでは、外部パネル上の操作子105として複数のフェーダを備えており、それらのフェーダを入力chのボリューム705に割り当て、割り当てたフェーダの操作でボリューム705によるレベル調整が行えるようになっている。chオンスイッチ706は、当該chの信号出力のオン/オフを行うスイッチである。ステレオオンスイッチ707は、当該chの信号のステレオバスへの出力のオン/オフを行うスイッチである。PPスイッチ711は、当該chの信号をMIXバスの1つに出力するに際し、プリフェーダ(ch出力をボリューム705の前側から取出す)とポストフェーダ(ch出力をボリューム705の前側から取出す)とを切り換えるスイッチである。センドレベル調節器712は、MIXバスへの送出レベル調整用である。センドオンスイッチ713は、MIXバスへの送出のオン/オフを行うスイッチである。なお、これらのスイッチ706,707,711,713は、外部パネル上に設けられた操作子105である所定のスイッチに割り当てられている。また、センドレベル調節器712も、外部パネル上に設けられた操作子105である所定のロータリエンコーダに割り当てられている。外部パネル上に設けられた操作子に割り当てる代わりに、表示器104にロータリエンコーダや各種スイッチを表示し、画面上のこれらの操作子をマウスやタッチパッドにより(あるいは直接タッチパネル上で)操作してもよい。
図6に示したようなミキサの信号処理は、時分割DSP106およびサブDSP107で実現している。すなわち、時分割DSP106内のDSP1〜4(図2)がそれぞれ1DAC周期中に実行するμプログラム(図5(a))には、図6および図7に示される各機能を実現するμプログラムのブロックが設定される。例えば、入力ch1〜12とその出力の混合(602、603)をDSP1に、入力ch13〜24とその出力の混合(602、603)をDSP2に、出力ch1〜12をDSP3に、ST出力chとその他図示しないモニタやエフェクタをDSP4に、それぞれ受け持たせ実行させる。ここで、各chの処理には、メータ表示のための検出ポイント処理(図11(a))を含む。また、サブDSP107は、DSP1〜4が実行している入力chや出力chの処理のうちの、コンプレッサ機能やメータ機能に係るレベル検出の処理の部分を分担して実行する。
図7中のIM1〜IM5はレベル検出する端子を示す。外部パネル上または画面上の操作子で、当該入力chのレベル検出用端子IM1〜IM5のどこからレベル検出するかを選択することができ、選択された端子からセレクタで取り出した信号に対してレベル検出処理を行い、検出したレベルを入力系メータで表示することができる。これにより、ユーザは、当該入力chのIM1〜IM5の位置における信号レベルを知ることができる。本実施形態のミキサでは、このようなレベル検出を図1のサブDSP107で行っている。すなわち、時分割DSP106で図7の入力chの処理を行う際に、IM1〜IM5のうちの選択された位置のデータを時分割DSP106からサブDSP107に渡すと、サブDSP107がレベル検出処理を行いその結果を返すので、CPU101による表示更新処理がそのレベル検出結果に基づいてメータ表示を行う。時分割DSP106からサブDSP107へのデータの渡し方は、図3で説明したようにI−RAM312,332のダイナミクス領域を用いる。例えば、IM5のレベル検出を行いたい場合は、図3の時分割DSP106中のバスライン315に該IM5の位置のデータが流れるタイミングでそのデータを後述する検出ポイント処理(図11(a))に渡し、検出ポイント処理の中でそのデータをI−RAM312のダイナミクス領域の第jレベル検出ch(どのレベル検出chを使用するかはCPUから指定できる)に対応するデータエリアに書込めばよい。これにより、次の1DAC周期で、サブDSP107がI−RAM332から当該データを読出し、レベル検出処理を行う。検出したレベル値は、取込み部338とレベルレジスタ342経由でCPU101が読出し、メータ表示を行う。
さらに、図7の入力chの機能のうち、コンプレッサ703では、入力信号を整流してエンベロープフォロワをかけてエンベロープを取り(このエンベロープが信号レベルを示している)、そのエンベロープの値が所定の閾値を超えたとき、その超えた部分の信号レベルを落とす処理を行っている。このエンベロープを取る処理は、要するにレベル検出を行う処理であるので、サブDSP107により実行している。この場合は、コンプレッサ703の処理中でレベル検出処理を行いたい位置のデータを時分割DSP106からサブDSP107に渡すと、サブDSP107がレベル検出処理を行いその結果を返すので、コンプレッサ703の処理は、返された結果を用いて処理を続ければよい。時分割DSP106からサブDSP107へのデータの渡し方は上述の通りである。また、時分割DSP106からサブDSP107へデータを渡すのに使用したI−RAM312,332のダイナミクス領域のデータエリアを用いて、レベル検出結果をサブDSP107から時分割DSP106に返すようにしている。
図8は、サブDSP107の第jレベル検出chにおけるレベル検出処理の詳細を示す。I−RAM332のダイナミクス領域(図5(c))の第jレベル検出chに対応するデータエリア801にデータが書込まれたとする。このデータに対して、クリップ検出処理802、対数変換処理803、及び閾値処理804を施す。ここで、クリップ検出処理は、入力するデータが所定のクリップレベルを超えたことを検出する処理、対数変換処理は、入力するデータを対数変換して出力する処理、閾値処理は、入力するデータのうちのユーザにより設定された閾値を超えた分のデータ(閾値との差分)を適宜スケーリングして出力する処理である。閾値処理804の出力は、加算器805、乗算器806、加算器807、および遅延回路808で構成されるローパスフィルタ(LPF)に入力する。乗算器806では、加算器805の出力が正のときはユーザにより設定されたアタックレートに応じた係数が乗算され、負のときはユーザにより設定されたリリースレートに応じた係数が乗算される。このLPFのカットオフ周波数は、入力するデータのレベルが大きくなるとき、アタックレートに応じた高いカットオフ周波数となり、レベルが下がるとき、リリースレートに応じた低いカットオフ周波数となる。
このようなレベル検出処理は、楽音信号ほど高い分解能で処理する必要がないので、時分割DSP106よりも少ない処理ビット数のDSP107で実行されている。図3で説明したサブDSP107のロジック回路339が生成する制御信号により、サブDSP107の各部が制御され、図8のレベル検出処理を実現される。レベル検出ch1chあたりの処理は、μプログラムの約20ステップに相当する。
図9は、図3で説明した時分割DSP106とサブDSP107のタイムチャートを示す。時分割DSP106内のDSP1〜4は、それぞれ、1DAC周期内のμプログラム実行区間(残りは猶予区間)を256の区間に分けた1区間でステップi(iは0〜255の整数)を実行する。すなわち、各ステップiの区間は4つのタイムスロットに分割されており、パイプライン処理により各タイムスロットでDSP1〜DSP4の各処理を1ステップずつ実行する。これを繰り返すことによりパイプライン処理で、図2で説明した時分割DSP1〜4を実現する。サブDSP107は時分割DSP106と同じサンプリングクロックおよびシステムクロックに基づいて動作しており、1DAC周期中に0〜95の区間を確保し、残りを猶予期間とする。第j区間において第jレベル検出chの処理を行う。なお、ここで示す時分割DSP106のステップ数、および、サブDSP107のレベル検出処理ch数は一例であって、システムクロックの周波数、サンプリング周波数、その他の事情に応じて、それぞれ、適宜変更して設計してよい。また、サブDSP107の実行するレベル検出処理については、楽音信号ほど高い時間分解能も必要ないので、入力するデータを1/nの周波数にダウンサンプリングして、所定ch数(例えば96ch)のレベル検出処理をnDAC周期ごとに実行するようにしてもよい。その場合でも、システムクロック周波数については、時分割DSP106とサブDSP107で同じにすることが望ましい。
図10は、時分割DSP106とサブDSP107とCPU101のタイムチャートを示す。ここでは、時分割DSP106で実現される4つのDSP1〜4のうちDSP1に注目している。例えば、DSP1で各DAC周期毎の所定のステップで処理している信号のレベル検出処理(エンベロープフォロワ)を行いたい場合は、μプログラムのそのステップより後の何れかのステップに、その信号のデータをI−RAM312に書き込むμ命令を配置すればよい。図10の区間1001では、1DAC周期内の4つのステップで処理されていた4つの信号のデータを、I−RAM312のダイナミクス領域の当該DSP1に割り当てられた4ch分のデータエリアに書き込んでいる(1011)。書込まれたデータは、次の1DAC周期1002でサブDSP107の読み出せるデータとなり、サブDSP107はそのデータを読み出して図8の処理を施し、検出したレベル値をI−RAM332のダイナミクス領域のデータ入力に使ったデータエリアに書き込む(1012)。書込まれたレベル値は、次の1DAC周期1003でDSP1の読み出せるデータとなり、DSP1は、楽音信号処理の所望のステップでこのデータを読み出して使用する。ここでは区間1001でI−RAM312に書込まれるデータに注目して説明したが、以上の処理は各DAC周期毎に繰り返し実行される。
CPU101が、サブDSP107が出力するレベル検出結果を受け取りたい場合は、図3で説明したように取込み部338とレベルレジスタ342を経由して受け取ることができる。この場合のタイミングは図10に示すとおりであり、CPUがあるレベル検出chの読み出しをタイミング1022に実行する場合、CPUは、サブDSP107がその直前に更新タイミング1021に更新したそのレベル検出chのレベル検出結果(サブDSP内に保持されている)を読み出すことになる。
図11(a)は、メータ表示のために時分割DSP106側で実行される検出ポイント処理のμプログラムのフローチャートを示す。例えば、時分割DSP106のDSP1で実現している入力ch1〜12のメータ表示を行う場合、DSP1にその12chに対応する12回の検出ポイント処理を実行させ、各入力chの所望の検出ポイントのデータを対応する検出ポイント処理に渡すようにすればよい。ステップ1101で、T−RAM(x)313に、対応するchの処理から受け取った信号のデータ(IM1〜IM5の何れかの信号)を書込む。ステップ1102で、該データに対しハイパスフィルタ(HPF)処理及び整流を施し、ステップ1103で、I−RAM312のダイナミクス領域の当該検出ポイント処理に割り当てられた第jレベル検出chに対応するデータエリアに、HPF処理済信号を書き込み、終了する。ステップ1102は、信号の直流分をカットしてからレベル検出処理に渡す方が精度良くレベル検出できるので、そのためのHPF処理及び整流を行うものである。そして、あるDAC周期に時分割DSP106によりI−RAM(表)312のダイナミクス領域に書込まれたデータは、その次のDAC周期において、サブDSP107によりI−RAM(裏)から読み出され、図8に示すレベル検出処理が施されてその検出結果が保持される。
図11(b)は、メータ表示のためにCPU101側で実行される表示更新処理のフローチャートを示す。予めレベル検出したいポイントに対して図11(a)の処理を行うように設定してあるので、CPU101は、その検出ポイントに対応する第jレベル検出chの検出結果を読出してメータ表示更新を行う。この処理は、定期的(例えば、数m秒おき)に実行すればよい。まず、ステップ1111で、jに1つめのレベル検出ch番号を書き込む。ステップ1112で、サブDSP107のchレジスタ341にjのレベル検出ch番号を書き込む。ステップ1113,1114は、取込み部338が当該レベル検出chの検出結果をレベルレジスタ342に書込むまで待機する処理である。準備ができたらステップ1115で、レベルレジスタ342から第jレベル検出chのレベル検出結果を読出す。ステップ1116で、読出したレベル検出結果から、複数セグメントのレベルメータの表示を何セグメントまで点灯させるかを判定し、判定されたセグメントまで点灯させる。このとき、図8のクリップ検出処理802で、入力データが所定のクリップレベルを超えたことが検出されていた場合、その旨を示す表示を行う。ステップ1117で、jに次のレベル検出ch番号を書込み、まだ処理すべきレベル検出chがあればステップ1118から1112に戻って処理を続ける。メータ表示している全てのレベル検出chについて表示更新が終了したら、処理を終了する。
図11(c)は、時分割DSP106によるコンプレッサ処理(図7の703)のフローチャートを示す。この処理は、DSP1〜4が、各chの処理の中のコンプレッサの処理を行いたい所望のステップで実行する。ステップ1121で、コンプレッサに入力する信号データをT−RAM(x)313に書き込む。ステップ1122で、該データに対してHPF処理及び整流を施すが、処理結果はT−RAM(x)には上書きせず、T−RAM内の一時記憶エリアに保持する。ステップ1123で、I−RAM312のダイナミクス領域の当該コンプレッサ処理に割り当てられた第jレベル検出chのデータエリアから、検出結果のデータを読出して、T−RAM(x+1)313に書込む。このデータは、2DAC周期前に当該コンプレッサ処理がI−RAM(表)312のダイナミクス領域に書き込んだデータに対し、1DAC周期前にサブDSP107が図8に示すレベル検出処理を施してI−RAM(裏)332に書き戻した検出結果のデータである。ステップ1124で、一時記憶エリアに保持されているHPF処理及び整流済の信号のデータを、I−RAM312のダイナミクス領域の第jレベル検出chのデータエリアに書込む。このデータは、次の1DAC周期でサブDSP107に渡すデータである。その後、ステップ1125でT−RAM(x+1)313のデータを元にゲインテーブルを参照してデシベルのゲイン値を得、ステップ1126で逆ログ変換(対数−リニア変換)してリニアのゲイン値とする。ステップ1127で、変換結果をT−RAM(x)に乗算し、終了する。
なお、サブCPUに、レベル検出以外の固定処理、例えばLFO(低周波発振器)やEG(エンベロープ発生器)の処理を行わせるようにしても良い。これらの処理は、レベル検出処理と同様、楽音信号ほど高いレベル分解能、時間分解能を要求されない。
上記実施形態において、各検出ポイント処理や各コンプレッサ処理へのレベル検出chの割り当ては、ディジタルミキサの設計時に設計者により行われる。
上記実施形態では、DSP1〜4のうちの入力chや出力chを実行するDSPで、そのchのメータ表示のための検出ポイント処理を実行するようになっていたが、あるDSPで処理されているchのデータを、それとは別のDSPに渡して検出ポイント処理するようにしてもよい。また、全chのメータ表示を行う場合で説明したが、メータ表示のための検出ポイント処理等は、全部のchではなく、表示するメータの数だけ行えば充分である。さらに、ディジタルミキサで説明したが、このDSP集積回路は、ギターエフェクタ、音場制御装置、スピーカプロセッサ、サラウンドアンプなど、コンプレッサ処理やメータ表示が必要になる様々な機器に広く適用できる。
本実施形態では、DSP集積回路を、外部の遅延メモリのI/Oを備え、楽音信号の処理に必要なビット数での処理が可能な(さらに、楽音信号の処理に必要なサンプリング周波数の)相対的にスペックの高いDSP(メインDSP)と、外部の遅延メモリのI/Oを備えず、それより少ないビット数での処理(ピッチやレベルの制御には充分)が可能な(さらに、それより低いサンプリング周波数の)相対的にスペックの低いDSP(サブDSP)とで構成し、楽音信号処理装置で実行される楽音信号処理のうちの、外部の遅延メモリによる長時間の遅延を必要とせず、値や時間の分解能が低くても良い処理をスペックの低いDSPに担当させ、スペックの高いDSPには、それ以外の長時間遅延や分解能が必要な処理を担当させるようにした。その際、DSP間の通信は、サンプリング周期毎に表裏が入れ替わる内部メモリで行うようになっているので、楽音信号処理の任意の部分をサブDSPに受け持たせることができる。このように、集積回路が有する演算能力が無駄なく使用できるので、同じ規模の集積回路でより高度な処理を行わせることができるようになった。
101…中央処理装置(CPU)、102…リードオンリメモリ(ROM)、10…3ランダムアクセスメモリ(RAM)、104…表示器、105…操作子、106…時分割DSP、107…サブDSP、108…外部RAM、109…波形入力部、110…波形出力部、111…バスライン。