まず、本実施形態に係る音声処理装置が取り扱うことができるフレーズグループである「ソング」の概念について説明する。ソングとは、音声の再生単位であるフレーズをまとめたフレーズグループの時系列的な再生順序を規定するシナリオ(曲)である。ソングは、複数のフレーズで構成してもよいし、単一のフレーズで構成してもよい。図1は、ソング編集の一例を示す図である。図1は、ソングは、遊技やゲームの展開に応じて、車の走行シーンを再現した動画と同期して再生される。ここに例示したソングは、ある車の走行音を発音するフレーズAと、この車と併走する別の車の走行音を発音するフレーズBとで構成されている。ソング番号#8は、フレーズグループ(ソング)を識別するグループ番号である。
ソングの作成・編集は、音声編集アプリケーションを用いて、音製作者によって行われる。扱うことができるソング数の上限は、製品仕様として予め決められている。ハードウェアでは、通常、ソングを識別するインデックス(ソング番号)のビット長が予め決められている。したがって、インデックスが12ビットならば最大4096種類といった如く、ソングの上限数は有限となる。また、個々のフレーズには音製作者によって仮想トラックが割り当てられる。扱うことができる仮想トラック数の上限は、テーブルメモリのビット幅に依存し、音製作者の作業利便性を考慮した上で製品仕様として予め決められている(例えば64仮想トラック)。音声を作成する音製作者、および、音製作者の作成物を素材として遊技やゲームのプログラムを作成するプログラマの双方は、ハードウェアの実トラック数が有限で、同時再生できるフレーズ数に制限があることに留意する。
音製作者は、音声編集アプリケーションといった開発環境上で、一例として最大4096種類のソングを任意に作成することができる。1つのソングでは、仮想トラックを例えば64種類まで自由に扱うことができる。特定の仮想トラック番号を効果音や警告音に使うことで、フレーズの配置を柔軟かつ効率的に行うことができる。音製作者は、あるソングを作成・編集する際、他のソングでどの仮想トラックを使用しているかを気にする必要はない。フレーズの再生、フレーズに対する発音開始タイミングの調整、ボリューム調整、音像調整などの作業は、すべて仮想トラックベースで行われる。音製作者によって作成されたソングは、次工程の作業を担当するプログラマに提供される。プログラマは、BGMはソング#6、走行音はソング#8といった曲情報を音製作者から受け取り、これに基づいてハードウェアを制御するプログラムを作成する。ソングを格納するハードウェア上の実行スロットは、ソングの再生に十分な数が用意されている(例えば64スロット)。したがって、通常、プログラマは、スロット不足に起因してソングが実行できない状況や、ソングがどの実行スロットで実行されているのかといった事項を意識する必要はない。
フレーズA,Bの再生開始タイミングの設定は、1画面の表示期間であるフレームを複数に分割したサブフレーム単位で行うことができる。図1の例では、1フレームが20個に均等に分割されており、1フレームの1/20の表示期間に相当するサブフレームが設定されている。音製作者は、簡略化された動画のシンボルが時間軸上に表示された編集画面を見ながら、時間軸上の所望の位置に音声の再生単位となるフレーズA,Bをサブフレーム単位で配置する。サブフレーム単位での配置を許容することで、フレーズの再生開始タイミングを規定するフレーズ開始点をフレームの途中に設定することもできる。フレーズ開始点は、動画およびソングの双方の開始位置である基準点からの待機時間として特定することができる。この場合、待機時間は、基準点からのサブフレーム数によって指定される。フレーズA,Bの待機時間のそれぞれは(ia,ja),(ib,jb)で表すことができる。ia,ibは基準点からのフレーム数を表し、ja,jbは、このフレーム数の余りの小数部分、すなわちサブフレーム数を表す。したがって、例えば待機時間(ia,ja)は、ia個分のフレームにja個分のサブフレームを加えた時間を意味し、これはia×20+ja個分のサブフレームと等価である。音声編集アプリケーションは、音製作者によって作成された内容に基づいて、音声処理装置に供給すべきソングのコマンド群を生成・出力する。このコマンド群の中には、待機時間をサブフレーム単位で指定する待機コマンドも含まれる。なお、編集画面上で指定された基準点ベースの待機時間(ia,ja),(ib,jb)は、後述する音声処理装置における待機コマンドの実行時点を基準とした待機時間(Fa,sfa),(Fb,sfb)に変換され、これが待機コマンドの引数として音声処理装置に供給される。音声処理装置の動作周波数および単位時間当たりのコマンドの実行数が既知であることを前提に、待機コマンドの実行時点からの待機時間(Fa,sfa),(Fb,sfb)は、待機コマンドよりも時系列的に前に位置するコマンド群を基準点まで遡ることによって一義的に算出することができる。
図2は、上述したソングを再生する音声処理装置のブロック構成図である。この音声処理装置1は、外部システムとの間のデータ転送を調停するインターフェース群2,3と、コマンド処理系4〜7と、再生処理系8,9と、画像同期系10,11とを主体に構成されている。MPUインターフェース2は、音声処理装置1の外部に接続されたMPU(図示せず)との間のデータ転送を調停し、MPUによって発行されたコマンド(例えばソングの起動コマンド)をコマンド解析回路6に供給する。また、ROMインターフェース3は、音声処理装置1の外部に接続された外部ROM(図示せず)との間のデータ転送を調停し、ROMから読み出されたソングのコマンド群を書込調停回路4に供給するとともに、ROMから読み出されたフレーズデータをシーケンサ8に供給する。音声処理装置1は、ソングのコマンド群に基づいて、仮想トラック付のフレーズを有限な実トラックTr1〜Tr8に割り当てながら音声をフレーズ単位で再生・出力する。本実施形態では、一例として、仮想トラック数が64個であるのに対して、実トラック数はそれよりも少ない8個である。
コマンド処理系は、書込調停回路4と、複数の実行スロット5と、コマンド解析回路6と、トラック管理回路7とによって構成されている。並列に設けられた実行スロット5の個数は、実トラック数(8個)よりも多ければ制御上支障はないが、処理過程でスロット不足が生じないような十分な数であることが好ましく、本実施形態では64個存在する。それぞれの実行スロット5は、ROMから読み出されたソングのコマンド群を時系列な順序で格納する。実行スロット5に格納されたコマンド群は、時系列的に早く書き込まれたものほど早く読み出され、コマンド毎に後段のコマンド解析回路6に順次供給される。64個の実行スロット5のそれぞれにはスロット番号#1〜#64のいずれかが割り当てられている。これらの実行スロット5からのコマンド群の読み出しは互いに同期かつ並行して行われ、具体的には、読み出すべき実行スロット5を順次シフトしながら1コマンドずつ順番に読み出される。また、それぞれの実行スロット5は、自己に格納されたソングを特定するために、ソング番号を記憶するソング番号記憶領域を備えている。この記憶領域に対するソング番号の書き込みは、ソングのコマンド群の格納時に書込調停回路4によって行われ、書き込まれたソングは、コマンド解析回路6によって随時読み出される。
ソングの起動は、MPUがコマンド解析回路6に直接指示することによって、或いは、実行スロット5内のコマンドをコマンド解析回路6が読み込むことによって行われる。これに応じて、コマンド解析回路6は、再生対象となるソングのソング番号を書込調停回路4に指示する。この指示を受けた書込調停回路4は、指定されたソングの読み出しをROMインターフェース3に要求する。それとともに、書込調停回路4は、ROMから読み出されたソングのコマンド群を実行スロット5のいずれかに割り当てて書き込む。その際、書込対象となる実行スロット5のソング番号記憶領域には、今回書き込まれるソングのソング番号が書き込まれる。書込調停回路4は、全ての実行スロット5の使用状況をリアルタイムで管理しており、コマンド群の書き込みは空きスロットに対して行われる。
ソングのデータサイズが実行スロット5の記憶容量よりも大きい場合には、ソングのコマンド群を複数に分割し、実行スロット5への書き込みを複数回行ってもよい。また、ROMへのアクセスが十分に高速な場合には、実行スロット5の記憶容量は少なくてよく、単なるバッファのようなものであってもよい。ただし、実行スロット5をどのように構成した場合であっても、あるソングを構成する一連のコマンド群は同じ実行スロット5に割り当てる必要がある。
コマンド解析回路6は、それぞれの実行スロット5に格納されたコマンド群を同期かつ並行して読み出してコマンドの内容を解析するとともに、その解析結果に応じて、実トラックTrを割り当てながらフレーズの再生処理をフレーズ処理系8,9に指示する。コマンドの解析および実トラック検索は仮想トラックベースで行われるが、フレーズ処理系8,9に対する指示は実トラックベースで行われる。
トラック管理回路7は、それぞれの実トラックTr1〜Tr8の使用状況を管理するとともに、あるフレーズに関する実トラックTrへの割り当てを、このフレーズに付加されている仮想トラックのみならず、実行スロット5にも対応付けて行う。このような管理および対応付けを行うために、トラック管理回路7はトラック割当テーブル7aを有する。
図3は、トラック割当テーブル7aの説明図である。それぞれの実トラックTr1〜Tr8に関する現在の使用状況は「使用フラグ(Flag)」によって管理され、実トラックTrが空き状態の場合には「空き」、使用状態の場合には「使用中」となる。「使用フラグ(Flag)」の内容は、実トラックTrの割り当てや、フレーズの再生終了(MPUによる強制終了を含む)によって随時更新される。また、トラック割当テーブル7aは、それぞれの実トラックTr1〜Tr8に関する管理内容として、「「スロット番号(Slot)」と、「ソング番号(Song)」と、「仮想トラック番号(仮想Tr)」とを対応付けて管理する。ここで、「スロット番号(Slot)」には、実行スロット毎に予め割り当てられたスロット番号のいずれか、「ソング番号(Song)」には、ソング毎に予め割り当てられたソング番号のいずれか、「仮想トラック番号(仮想Tr)」には、フレーズ毎に予め割り当てられた仮想トラック番号のいずれかがそれぞれ記述される。これにより、ある実トラックTrは、特定の仮想トラックのみならず、特定の実行スロット5および特定のソングにも対応付けられる。ただし、トラック割当という点だけに着目すると、仮想トラックおよび実行スロットへの対応付けは必須であるが、ソングへの対応付けは必ずしも必要ではない。ソングへの対応付けを行う理由は、ソング番号を検索キーとしたトラック割当テーブル7aの検索を可能にするためである。同図に示した例において、「使用中」である実トラックTr6は、実行スロット#37、ソング#3154および仮想トラック#32という3つの管理内容に対応付けられている。特定の実行スロット5への対応付けを行う理由は、仮想トラックが同じでも実行スロット5が異なれば、別個の実トラックTrに割り当てるべきものとして処理し、同じ仮想トラックの同時再生を可能にするためである。なお、実トラックTrに関する管理内容は、その実トラックTrの「使用フラグ(Flag)」が「使用中」の場合のみ有効とされる。したがって、「使用フラグ(Flag)」が「使用中」から「空き」に変更された時点で管理内容が無効または消去され、これにより、実トラックTrとの対応付けが解消される。
トラック管理回路7は、コマンド解析回路6の解析結果に応じて、再生すべきフレーズの実トラックTrへの割り当てを行う場合、空き状態にある実トラックTrに関する「使用フラグ(Flag)」を「使用中」に変更し、管理内容を更新する。これにより、この実トラックTrは、このコマンドを読み出した実行スロット5と、再生すべきフレーズに付加されている仮想トラックとに対応付けられる。また、シーケンサ8におけるフレーズの再生処理が終了した場合等において、トラック管理回路7は、このフレーズによって使用状態にある実トラックTrに関する「使用フラグ(Flag)」を「空き」に変更して、この実トラックTrを解放する。これにより、この実トラックTrに関する上記対応付けが解消される。
再生処理系は、シーケンサ8やフェード/パン回路9といった各種の再生処理回路によって構成されており、コマンド解析回路6の解析結果に応じた音声の再生処理を行う。シーケンサ8は、コマンド解析回路6によって指定されたフレーズ番号のフレーズデータをROMから読み出す。本実施形態において、ROMに格納されたフレーズデータは所定の圧縮形式に圧縮されているため、シーケンサ8は、ROMから読み出された圧縮フレーズデータを伸長するためのデコーダ8aを内蔵している。シーケンサ8によって生成されたフレーズ(音声信号)は、コマンド解析回路6によって指示された実トラックTrにフレーズ単位で出力される。また、フェード・パン回路9は、フレーズに対するボリューム/音像定位の調整を行う。具体的には、コマンド解析回路6から実トラックTrの指定付でボリューム演算の適用指示を受け、これに基づいて実トラックTr1〜Tr8のボリューム/音像定位の処理が行われる。そして、実トラックTr1〜Tr8の複数フレーズは、スピーカー出力の単位にミキシングされ、更にイコライザ等のエフェクトが施された後、音声出力回路(図示せず)を介して外部に出力される。
画像同期系は、複数のカウント回路10と、パルス生成回路11とによって構成されている。カウント回路10は、実行スロット5相互の実行時間を調整するために、或いは、動画再生との同期を取るために設けられており、実行スロット5と1対1で対応付けられている。ある実行スロット5に対応付けられたカウント回路10は、その実行スロット5から読み出された待機コマンドによって個別に起動される。この起動されたカウント回路10は、待機コマンドによってサブフレーム単位で指定された待機時間の経過を単位パルスに基づいてカウントする。待機時間のカウントのベースとなる単位パルスは、サブフレームの期間を規定し、かつ、画像表示装置における1フレームの表示期間と同期したパルスであり、パルス生成回路11によって生成される。コマンド解析回路6は、ある実行スロット5のカウント回路10が動作状態に応じて、その実行スロット5に関するコマンド解析を実行/停止する。具体的には、ある実行スロット5から読み出されたコマンドが待機コマンドの場合、その実行スロット5のカウント回路10によってカウントされた時間が待機時間に到達するまで、その実行スロット5に格納された待機コマンド以降のコマンドの解析が一時的に中断される。そして、カウント回路10によってカウントされた時間が待機時間に到達した場合、その実行スロット5に格納された待機コマンド以降のコマンドの解析が再開される。
単位パルスを生成するパルス生成回路11の構成には、以下に例示するようなバリエーションが考えられる。図4は、第1の例としてのパルス生成回路11の説明図であり、図5は、このパルス生成回路11によって生成される単位パルスの説明図である。このパルス生成回路11は、音声と同期させるべき動画を表示する画像表示装置12の垂直同期信号VSYNCおよび水平同期信号HSYNCに基づいて、水平走査期間(HSYNC時間)の整数倍に相当する単位パルスを生成する。これらの同期信号VSYNC,HSYNCは、図示しないドットクロック発信器からのドットクロック信号DCKLに基づいて生成される。同期信号VSYNC,HSYNCに基づいて生成された単位パルスは、画像表示装置12の同期信号と高精度に同期する。1サブフレームは水平走査期間(HSYNC時間)、1フレームは垂直走査期間(VSYNC時間)を単位として設定される。
図6は、第2の例としてのパルス生成回路の説明図であり、図7は、このパルス生成回路11によって生成される単位パルスの説明図である。このパルス生成回路11は、音声と同期させるべき動画を表示する画像表示装置12のドットクロック信号DCLKを分周することによって、単位パルスを生成する。ドットクロック信号DCLKは、ドットクロック発振器13によって生成され、上述した垂直同期信号VSYNCおよび水平同期信号HSYNCを生成する際のベース信号となる。その結果、単位パルスは、画像表示装置12の同期信号と高精度に同期する。1サブフレーム/1フレームは、ドットクロック信号DCLKを分周した「フレーム相当」/「1/Nフレーム相当」を単位として設定される。
図8は、第3の例としてのパルス生成回路の説明図であり、図9は、このパルス生成回路11によって生成される単位パルスの説明図である。このパルス生成回路11は、音声と同期させるべき動画を表示する画像表示装置12の垂直同期信号VSYNCと、サウンドクロック発振器14によって生成されたサウンドクロック信号SCLKとに基づいて、単位パルスを生成する。サウンドクロック信号SCLKは、音声の再生処理におけるサンプリング周波数Fs相当のベース信号である。この場合、サウンドクロック信号SCKLを分周したサンプリング周波数Fsの整数倍相当を1サブフレームとし、垂直同期信号VSYNCによって規定されるVSYNC時間を1フレームとする。ただし、垂直同期信号VSYNCおよびサウンドクロック信号SCLKは、通常、異なる発振器によって生成され、互いに非同期であるがゆえに、サブフレームの整数倍とフレームとの間に時間的な端数(ずれ)が生じる。そこで、非同期に起因したサブフレームの端数をフレーム毎に補正し、誤差としての端数がフレームを跨って累積しないようにする。具体的には、1フレーム中の特定のサブフレーム(例えば、最後のフレーム)のみ、端数が解消するような時間調整を行えばよい(それ以外のサブフレームについては同一期間とする)。
つぎに、図1に示したソング#8を一例に、動画と同期した音声再生について詳述する。図10は、ソング#8のコマンド群の説明図であり、時系列的に先に実行すべきコマンドから順番に記述されている。ここで、「待機(wait)」は、カウント回路10に指定値(Fa,sfa)をセットしてカウントダウンを行う待機コマンドである。この指定値としての待機時間は待機コマンドの引数であり、待機コマンドの実行時からの待機時間がFa個のフレームにsfa個のサブフレームを加算した時間相当であることを示す。「Tr割当」は、指定された仮想トラックを実トラックTrに割り当て、トラック割当テーブル7aを更新するコマンドである。仮想トラックの指定は、このコマンドの引数(仮想トラック番号)によって行われる。「フレーズ登録」は、指定された仮想トラックに割り当てられている実トラックTrを検索し、その実トラックTrに対して、指定されたフレーズを登録するコマンドである。仮想トラックおよびフレーズの指定は、このコマンドの引数(仮想トラック番号およびフレーズ番号)によって行われる。「再生実行」は、指定された仮想トラックに割り当てられている実トラックTrを検索し、その実トラックTrでの再生をシーケンサ8に開始させるコマンドである。仮想トラックの指定は、このコマンドの引数(仮想トラック番号)によって行われる。「フェード」および「パン」は、指定された仮想トラックに割り当てられている実トラックTrを検索し、その実トラックTrでフェード/パンを行うコマンドであり、処理に必要なパラメータを含む。仮想トラックの指定は、このコマンドの引数(仮想トラック番号)によって行われる。
図11から図12は、図10のコマンド群に基づく音声再生処理のフローチャートである。まず、図11において、遊技やゲームの進行により、動画と同期してソング#8を再生すべき状況になると、MPUによってソング#8の起動が指示される(ステップ1)。この指示を受けたコマンド解析回路6は、書込調停回路4にソング#8を格納すべき実行スロット5の確保を指示する。実行スロット5の空き状況を随時モニタリングしている書込調停回路4は、64個の実行スロット5の中から現時点での空スロットを一つ特定し(例えば#64)、このスロット#64にソング#8を割り当てる(ステップ2)。空スロットの検索方法としては、例えば、直前に割り当てられたスロット番号をポインタで保持しておき、今回の検索時に、ポインタによって示されたスロット番号以降における直近の空スロット(昇順の場合)を選択するといった手法が挙げられる。そして、書込調停回路4は、ROMインターフェイス3に対して、ソング#8のコマンド群の読み出しを要求し、これによって、ソング#8のコマンド群がROMから読み出される(ステップ3)。書込調停回路4は、読み出されたソング#8のコマンド群を実行スロット#64に格納するとともに、この実行スロット#64が備えるソング番号記憶領域にソング#8を書き込む(ステップ4)。コマンド解析回路6は、実行スロット#1〜#64を順番に探索し、実行可能なスロット(ソングの割り当てがあり、かつ、カウント回路10の値が0のもの)から1コマンドずつ同期かつ並行して読み出し、読み出したコマンドを解析する。
ソング#8の格納直後の読出タイミングで、実行スロット#64から最先の待機コマンド(wait)が読み出されると、その実行スロット#64のカウント回路10に待機時間(Fa,sfa)がセットされ、カウントダウンが開始する(ステップ5)。カウントダウン中の(Fa,sfa)時間は、実行スロット#64から2番目以降のコマンドが読み出されない待機状態となる。
なお、上記ステップ1〜4の処理時間は、フレームやサブフレームの期間に比べれば無視できるほど短い。したがって、カウントの開始と動画の再生開始とは、タイミング的にほぼ一致する。この点は、後述するステップ7〜11についても同様である。
図12において、実行スロット#64の経過時間が待機時間(Fa,sfa)に到達、すなわち、(ia+1)番目のフレームにおけるj番目のサブフレームに到達すると、待機状態にあった実行スロット#64からのコマンドの読み出しが再開される(ステップ6)。これにより、実行スロット#64から2番目の「Tr割当」コマンドが読み出される(ステップ7)。コマンド解析回路6は、このコマンドの解析結果に基づき、再生処理を開始すべきフレーズA(仮想Tr=#1)に関する実トラックTrへの割り当てをトラック管理回路7に依頼する。この依頼を受けたトラック管理回路7は、図3に示したトラック割当テーブル7aを参照して、使用トラックTr6を除く空トラックのいずれを特定する(例えば実トラックTr7)。空トラックの検索方法としては、例えば、直前に割り当てられた実トラックTrの位置をポインタで保持しておき、今回の検索時に、ポインタによって示された実トラックTr以降における直近の空きトラック(昇順の場合)を選択するといった手法が挙げられる。そして、この実トラックTr7の「使用フラグ(Flag)」が「空き」から「使用中」に変更されるとともに、その管理内容が「Tr割当」コマンドを読み出した実行スロット番号#64と、「Tr割当」コマンドが属するソング番号#8と、再生処理を開始すべきフレーズの仮想トラック番号#1とに更新される。ソング番号#8の特定は、引数によるコマンド指定ではなく、実行スロット#64のソング番号記憶領域から記憶内容を読み出すことによって行われる。
つぎに、実行スロット#64から3番目の「フレーズ登録」コマンドが読み出される(ステップ8)。コマンド解析回路6は、このコマンドの解析結果に基づき、トラック割当テーブル7aの検索をトラック管理回路7に依頼する。この依頼を受けたトラック管理回路7は、「フレーズ登録」コマンドによって指定された仮想トラック#1と、「フレーズ登録」コマンドが読み出された実行スロット#64とを検索キーとしてトラック割当テーブル7aを検索し、実トラックTr7を特定する。実トラックTrの通知を受けたコマンド解析回路6は、「フレーズ登録」コマンドによって指定されたフレーズAを実トラックTr7で再生すべき旨をシーケンサ8に指示する。これにより、シーケンサ8において、実トラックTr7にフレーズAが登録される。
つぎに、実行スロット#64から4番目の「再生実行」コマンドが読み出される(ステップ9)。コマンド解析回路6は、このコマンドの解析結果に基づき、トラック割当テーブル7aの検索をトラック管理回路7に依頼する。この依頼を受けたトラック管理回路7は、「再生実行」コマンドによって指定された仮想トラック#1と、「再生実行」コマンドが読み出された実行スロット#64とを検索キーとしてトラック割当テーブル7aを検索し、実トラックTr7を特定する。実トラックTrの通知を受けたコマンド解析回路6は、実トラックTr7の再生開始をシーケンサ8に指示する。これにより、シーケンサ8は、実トラックTr7に登録されているフレーズデータAをROMインターフェイス3を介してROMから取得し、このフレーズデータAの再生処理を実行し、実トラックTr7に出力する。
つぎに、実行スロット#64から5番目の「フェード」コマンドが読み出される(ステップ10)。コマンド解析回路6は、このコマンドの解析結果に基づき、トラック割当テーブル7aの検索をトラック管理回路7に依頼する。この依頼を受けたトラック管理回路7は、「フェード」コマンドによって指定された仮想トラック#1と、「フェード」コマンドが読み出された実行スロット#64とを検索キーとしてトラック割当テーブル7aを検索し、実トラックTr7を特定する。実トラックTr7の通知を受けたコマンド解析回路6は、実トラックTr7のフェード処理をフェード/パン回路9に指示する。これにより、フェード/パン回路9は、フレーズデータAが出力される実トラックTr7のフェード処理を実行する。
つぎに、実行スロット#64から6番目の「パン」コマンドが読み出される(ステップ11)。コマンド解析回路6は、このコマンドの解析結果に基づき、トラック割当テーブル7aの検索をトラック管理回路7に依頼する。この依頼を受けたトラック管理回路7は、「パン」コマンドによって指定された仮想トラック#1と、「パン」コマンドが読み出された実行スロット#64とを検索キーとしてトラック割当テーブル7aを検索し、実トラックTr7を特定する。実トラックTr7の通知を受けたコマンド解析回路6は、実トラックTr7のパン処理をフェード/パン回路9に指示する。これにより、フェード/パン回路9は、フレーズデータAが出力される実トラックTr7のパン処理を実行する。なお、遊技やゲームの展開によりシーンチェンジが生じた場合には、MPUからの指示によって、再生途中のソングを強制的に終了させることもできる。
このように、本実施形態によれば、1フレームよりも細かいサブフレーム単位で指定された待機時間(F,sf)の経過を、実際のサブフレームを規定する単位パルスに基づいてカウントする。単位パルスとして、画像表示装置における1フレームの表示期間と同期した高精度なものを用いることによって、音声処理装置1における音声の再生開始タイミングを高精度に制御できる。なお、待機時間の到達(ステップ6)をトリガとして実行される一連の処理(ステップ7〜9)はサブフレームの期間と比べると極短時間で実行されるので、音声と動画の同期性は何ら阻害されるものではない。例えば、1フレームを20個のサブフレームに分割した場合、1サブフレームは16/20m秒となる。これに対して、例えば100MHzで動作する音声処理装置(LSI)では、1マイクロ秒で100個のコマンドを実行可能である。したがって、コマンドの実行に要する時間は、サブフレームの期間の1/1000程度にすぎず、サブフレームの期間と比べると無視できる程度に小さいことがわかる。
また、本実施形態によれば、あるソングに関するコマンド群は、いずれかの実行スロット5に割り当てて書き込まれる。このソングに属するフレーズの実トラックTrへの割り当ては、フレーズ自体に割り当てられた仮想トラックのみならず、実行スロット5にも対応付けて行われる。したがって、同一のソングを複数の実トラックでオーバーラップ再生する場合、フレーズの仮想トラックが同じであったとしても、実行スロット5の違いを以て、それぞれを異なる実トラックTrに割り当てるべきものとして処理できる。その結果、同一ソングのオーバーラップ再生時における仮想トラックのコンフリクトを解消できる。また、仮想トラックのコンフリクトの問題をハードウェア側で解消することにより、音編集ソフトウェア上で作業する音製作者の利便性の向上を図ることが可能になる。さらに、オーバーラップするフレーズ毎に別個の仮想トラックを割り当てる必要がないので、仮想トラックのリソースの浪費を抑制できる。
また、本実施形態によれば、フレーズの再生処理が終了した時点で実トラックTrが解放されるので、解放後の仮想トラックベースの指示に対しては何も処理されないことが保証されるという効果がある。一般に、MPUは、ポーリングによって実トラックTrの使用状況を一定の間隔で随時取得している。ポーリングでは、トラック割当テーブル7aが更新されてからMPUがそれを取得するまでに時間差が生じる。この時間差に起因して、例えば、実際には再生が終了したフレーズに対して、MPUがボリューム調整やパン移動などを指示してしまうといった如く、MPUの指示と実際の状況との間に一時的な不整合が生じることがある。ここで、比較例として、MPUからの指示を実トラックベースで行う場合、たとえMPUの指示に係るフレーズの再生が既に終了し、これに続く別のフレーズの処理が始まっていたとしても、指定された実トラックTrの処理が一律に実行されてしまう。このような誤った処理の実行を防止するためには、ポーリングを高頻度で行う必要がある。これに対して、本実施形態のように、MPUからの指示を仮想トラックベースで行う場合、フレーズの再生が終了した時点で実トラックTrとの対応付けが解消されるので、その後に、仮想トラックを指定しても、該当する実トラックTrが存在しないことになる。したがって、上述した誤った処理が実行されてしまうことを防止できる。その結果、ポーリングを高頻度で行う必要がないので、ポーリングに要するMPUの負荷の軽減を図ることができるとともに、プログラマが実トラックTrの利用状況の詳細を把握することの煩雑さも解消できる。
なお、上述した実施形態では、ソングの起動を指示するMPU、および、ソングのコマンド群やフレーズデータを格納するROMが音声処理装置1の外部に存在するシステム構成について説明したが、音声処理装置1自体がMPUやROMを内蔵していてもよい。
また、上述した実施形態では、トラック割当テーブル7aで「「スロット番号(Slot)」、「ソング番号(Song)」および「仮想トラック番号(仮想Tr)」の3項目を管理しているが、「ソング番号(Song)」および「仮想トラック番号(仮想Tr)」の2項目で本発明の目的は達成されるので、「ソング番号(Song)」については省略しても構わない。ただし、管理内容に「ソング番号(Song)」を含めた場合には、ソング番号を検索キーとした実トラックTrの検索が可能になる。このような検索は、例えば、複数の実行スロット5で実行されている同一のソングを、MPUからのソング番号の指定にて強制終了させたい場合に実行される。この場合、MPUによって指定されたソング番号を検索キーにトラック割当テーブル7aを検索することによって、同一のソングが割り当てられている実トラックTrを特定することができる。
さらに、待機コマンドの待機時間は、待機コマンドの実行時からの経過時間(Fa,sfa)という形ではなく、基準点からの経過時間(ia,ja)という形で指定してもよい。