(57)【要約】  楽器ディジタルインタフェース（ＭＩＤＩ）音声のためのディジタル波形の生成のために特化された１セットのマシンコード命令を使用して、ＭＩＤＩ音声のためのディジタル波形を生成する技法が説明される。例えばプロセッサは、ＭＩＤＩ音声のためのディジタル波形を生成するソフトウエアプログラムを実行する。このソフトウエアプログラムの命令は、ＭＩＤＩ音声のためのディジタル波形の生成のために特化された命令セットからのマシンコード命令である。特に、これらの命令のうちの１つの命令の実行は、ＭＩＤＩ音声を定義する１セットのパラメータに基づく演算の選択と、この選択された演算の実行とを含む。
2010522363.tif 000002
【特許請求の範囲】
【請求項１】
楽器ディジタルインタフェース（ＭＩＤＩ）音声のためのディジタル波形を生成するソフトウエアプログラムにおけるマシンコード命令を実行することと、
前記ディジタル波形を出力することと、
を備える方法であって、
前記ソフトウエアプログラムにおける前記命令を実行することは、
前記ＭＩＤＩ音声を定義する１セットの音声パラメータに基づいて演算を選択することと、
前記選択された演算が実行されるようにするための制御信号を出力することと、
を備える、方法。
【請求項２】
前記方法はメモリユニットからワードを検索することを更に備え、前記ワードは前記ソフトウエアプログラム内に複数の命令を含む、請求項１に記載の方法。
【請求項３】
前記ソフトウエアプログラムは、ロード／ストア命令と算術演算命令と制御命令とを備える、請求項１に記載の方法。
【請求項４】
前記命令は固定長である、請求項１に記載の方法。
【請求項５】
前記方法は、１つのＭＩＤＩフレームの１つのディジタル波形全体のための１つのサンプル全体を創作するために、前記ディジタル波形のサンプルを第２のディジタル波形の時間的に同等のサンプルに加えるための、前記ソフトウエアプログラム内の命令を実行することを更に備える、請求項１に記載の方法。
【請求項６】
前記方法は、
汎用プロセッサを使用して、ＭＩＤＩファイルを構文解析して前記ＭＩＤＩファイルに関連するＭＩＤＩイベントをスケジュールすることと、
連続するディジタル波形を出力するために、ディジタル信号プロセッサ（ＤＳＰ）を使用して前記ＭＩＤＩイベントを処理することと、
を更に備え、
ハードウエアユニットが前記ソフトウエアプログラムを実行する、請求項１に記載の方法。
【請求項７】
前記方法は、
前記ディジタル波形をアナログ出力に変換することと、
前記アナログ出力を音として出力することと、
を更に備える、請求項１に記載の方法。
【請求項８】
前記方法は、音声インジケータのリンクされたリストを生成することを更に備え、前記リンクされたリスト内の前記音声インジケータの各々は、前記ＭＩＤＩ音声を定義する音声パラメータセットを記憶するメモリ位置を指定することによってＭＩＤＩフレームに関するＭＩＤＩ音声を示し、前記リンクされたリスト内の前記音声インジケータによって指示された前記ＭＩＤＩ音声は、前記ＭＩＤＩフレームの期間中に最も大きな音響的重要性を有するＭＩＤＩ音声であり、
前記リンクされたリストは現在ＭＩＤＩ音声を示す音声インジケータを含む、請求項１に記載の方法。
【請求項９】
リンクされたリストを生成することは、
第１の音声インジケータによって指示されたＭＩＤＩ音声の音響的重要性を、第２の音声インジケータによって指示されたＭＩＤＩ音声の音響的重要性と比較することと、
前記第１の音声インジケータによって指示された前記ＭＩＤＩ音声の前記音響的重要性が前記第２の音声インジケータによって指示された前記ＭＩＤＩ音声の前記音響的重要性より大きいときに、前記リンクされたリスト内で、前記第２の音声インジケータの前に前記第１の音声インジケータを挿入することと、
を備える、請求項８に記載の方法。
【請求項１０】
ある演算を選択することは、前記１セットの音声パラメータ内の制御パラメータにおけるビットの値を識別することを備える、請求項１に記載の方法。
【請求項１１】
ある演算を選択することは、あるエンベロープ生成演算を選択することを備える、請求項１に記載の方法。
【請求項１２】
前記選択された演算を実行することは、エンベロープ生成変調のレベルを計算することを備える、請求項１１に記載の方法。
【請求項１３】
前記選択された演算を実行することは、エンベロープ生成振幅のレベルを計算することを備える、請求項１１に記載の方法。
【請求項１４】
命令を実行することが、パラメータ値をモジュールに与えることを更に備え、また
前記モジュールは前記演算を選択して前記選択された演算を実行する、請求項１に記載の方法。
【請求項１５】
パラメータ値をモジュールに供給することは、前記パラメータ値を低周波発振器（ＬＦＯ）モジュールに供給することを備え、
前記マシンコード命令を実行することは、
前記ＬＦＯモジュール内のレジスタからの値をローカルレジスタに記憶することと、
前記ＬＦＯモジュール内の前記レジスタ内の値を更新することと、
を更に備える、請求項１４に記載の方法。
【請求項１６】
前記ＬＦＯモジュール内の前記レジスタ内の値を更新することは、前記ＬＦＯモジュールによって出力された三角形の波形の位相を示す前記ＬＦＯモジュール内の値を更新することを備える、請求項１５に記載の方法。
【請求項１７】
前記ＬＦＯモジュール内の前記レジスタ内の値を更新することは、前記ＬＦＯモジュールによって出力された三角形の波形の利得を更新することを備える、請求項１５に記載の方法。
【請求項１８】
ＭＩＤＩ音声を定義する音声パラメータセットを記憶するメモリユニットと、
前記ＭＩＤＩ音声のためのディジタル波形を生成するために、ソフトウエアプログラム内のマシンコード命令を実行する処理要素と、
を備えるデバイスであって、
前記マシンコード命令の完全な実行は、前記音声パラメータセットに基づく演算の選択と前記選択された演算の実行とを含む、デバイス。
【請求項１９】
前記処理要素は、複数の命令を含むワードを読み取ることによってプログラムメモリからの命令を読み取る、請求項１８に記載のデバイス。
【請求項２０】
前記命令は固定長の命令である、請求項１８に記載のデバイス。
【請求項２１】
前記処理要素は第１の処理要素であり、
前記メモリユニットは、ＭＩＤＩ音声を定義する複数の音声パラメータセットを記憶し、
前記ＭＩＤＩ音声は、前記ＭＩＤＩ音声のうちの第１のＭＩＤＩ音声であり、
前記デバイスは、前記第１の処理要素が前記第１のＭＩＤＩ音声のためのディジタル波形を生成するためにソフトウエアプログラム内の命令を実行している間に、前記ＭＩＤＩ音声のうちの第２のＭＩＤＩ音声のための前記ディジタル波形を生成するために前記ソフトウエアプログラム内のマシンコード命令を実行する第２の処理要素を更に備える、請求項１８に記載のデバイス。
【請求項２２】
前記デバイスは、前記第１のＭＩＤＩ音声のための前記ディジタル波形と前記第２のＭＩＤＩ音声のための前記ディジタル波形とを統合したディジタル波形を記憶するための加算バッファを更に備える、請求項２１に記載のデバイス。
【請求項２３】
前記デバイスは、
ＭＩＤＩフレーム内の１セットのＭＩＤＩ音声のためのディジタル波形を生成するＭＩＤＩハードウエアユニットと、
ＭＩＤＩファイルを構文解析して、前記ＭＩＤＩファイルに関連するＭＩＤＩイベントをスケジュールする汎用プロセッサと、
前記ＭＩＤＩフレーム内の前記１セットのＭＩＤＩ音声のための前記ディジタル波形を含む連続するディジタル波形を出力するために、前記ＭＩＤＩイベントを処理するＤＳＰと、
を更に備え、
前記処理要素は、前記ＭＩＤＩハードウエアユニットの構成要素である、請求項１８に記載のデバイス。
【請求項２４】
前記デバイスは、
前記連続するディジタル波形をアナログオーディオ信号に変換するディジタル・アナログ変換器と、
音を出力するためのスピーカを駆動するために前記アナログオーディオ信号を使用する駆動回路と、
を更に備える、請求項２３に記載のデバイス。
【請求項２５】
前記ＤＳＰは、
音声インジケータのリンクされたリストを生成するリスト生成モジュールを備え、
前記リンクされたリスト内の前記音声インジケータの各々は、前記ＭＩＤＩ音声を定義する音声パラメータセットを記憶するメモリ位置を指定することによって、ＭＩＤＩフレームに関するＭＩＤＩ音声を指示し、
前記リンクされたリスト内の前記音声インジケータによって指示された前記ＭＩＤＩ音声は、前記ＭＩＤＩフレームの期間中に最も大きな音響的重要性を有するＭＩＤＩ音声であり、
前記リンクされたリストは前記現在ＭＩＤＩ音声を指示する音声インジケータを含む、請求項２３に記載のデバイス。
【請求項２６】
前記処理要素は、数学的演算を実行する算術論理演算ユニット（ＡＬＵ）を更に備え、
前記制御ユニットは前記演算を選択し、
前記制御ユニットは、前記選択された演算を実行するように前記ＡＬＵに命令するための制御信号を前記ＡＬＵに出力する、請求項１８に記載のデバイス。
【請求項２７】
前記制御ユニットは、前記制御ユニットがエンベロープ生成計算命令を読み取ったときに前記演算を選択する、請求項２６に記載のデバイス。
【請求項２８】
前記制御ユニットは、現在のＭＩＤＩ音声のために変調エンベロープに関する新しい値を計算するための制御信号を前記ＡＬＵに出力する、請求項２７に記載のデバイス。
【請求項２９】
前記制御ユニットは、現在のＭＩＤＩ音声のためにボリュームエンベロープに関する新しい値を計算するための制御信号を前記ＡＬＵに出力する、請求項２７に記載のデバイス。
【請求項３０】
前記オーディオ合成装置は、三角形のディジタル波形を生成する低周波発振器（ＬＦＯ）を更に備え、
前記ＬＦＯは前記演算を選択し、
前記ＬＦＯは前記選択された演算を実行する、請求項１８に記載のデバイス。
【請求項３１】
前記処理要素は１セットのレジスタを備えており、
前記制御ユニットは、前記三角形の波形のサンプルを前記レジスタの１つに記憶して、前記ＬＦＯによって生成された前記三角形の波形を更新するための制御信号を前記ＬＦＯに出力する、請求項３０に記載のデバイス。
【請求項３２】
前記制御ユニットは、前記三角形の波形の位相を更新するように前記ＬＦＯに命令するための制御信号を出力する、請求項３１に記載のデバイス。
【請求項３３】
前記制御ユニットは、前記三角形の波形の利得を更新するように前記ＬＦＯに命令するための制御信号を出力する、請求項３１に記載のデバイス。
【請求項３４】
１つ以上のプロセッサに、ＭＩＤＩ音声のためのディジタル波形を生成するソフトウエアプログラム内のマシンコード命令を実行させて、前記ディジタル波形を出力させる命令であって、
前記１つ以上のプロセッサに前記マシンコード命令を実行させる前記命令は、前記ＭＩＤＩ音声を定義する１セットの音声パラメータに基づいた演算の選択と、前記選択された演算が実行されるようにするための制御信号の出力とを引き起こす、前記命令を備える、コンピュータ可読媒体。
【請求項３５】
前記演算はエンベロープ生成演算である、請求項３４に記載のコンピュータ可読媒体。
【請求項３６】
前記命令は、前記１つ以上のプロセッサをして前記１つ以上のプロセッサ以外のモジュールにパラメータ値を供給させ、前記モジュールは前記演算を選択して前記選択された演算を実行する、請求項３４に記載のコンピュータ可読媒体。
【請求項３７】
ＭＩＤＩ音声を定義する音声パラメータセットを記憶する手段と、
前記ＭＩＤＩ音声のためのディジタル波形を生成するために、ソフトウエアプログラム内のマシンコード命令を実行するための手段と、
を備えるデバイスであって、
前記マシンコード命令の完全な実行は、前記音声パラメータセットに基づく演算の選択と前記選択された演算の実行とを含む、デバイス。
【請求項３８】
前記マシンコード命令を実行するための前記手段は、前記マシンコード命令を実行するための前記手段がエンベロープ生成計算命令を読み取ったときに前記演算を選択する、請求項３７に記載のデバイス。
【請求項３９】
前記デバイスは、三角形のディジタル波形を生成するための手段を備え、前記三角形のディジタル波形を生成するための前記手段は前記演算を選択し、前記三角形のディジタル波形を生成するための前記手段は前記選択された演算を実行する、請求項３７に記載のデバイス。
【請求項４０】
ＭＩＤＩ音声のためのディジタル波形を生成するソフトウエアプログラムのマシンコード命令を実行して、前記ディジタル波形を出力するように構成された回路であって、
前記回路は、前記ＭＩＤＩ音声を定義する１セットの音声パラメータに基づいた演算を選択し、前記選択された演算が実行されるようにするための制御信号を出力するように構成された、回路。
【請求項４１】
前記演算はエンベロープ生成演算である、請求項４０に記載の回路。
【発明の詳細な説明】
【関連出願】
【０００１】
米国特許法１１９条の下での優先権の主張
本特許出願は、２００７年３月２２日に出願され、この譲受人に譲渡され、ここに参照によって明白に組み込まれている「ＭＵＳＩＣＡＬ  ＩＮＳＴＲＵＭＥＮＴ  ＤＩＧＩＴＡＬ  ＩＮＴＥＲＦＡＣＥ  ＨＡＲＤＷＡＲＥ  ＩＮＳＴＲＵＣＴＩＯＮＳ」（楽器ディジタルインタフェースハードウエア命令）と題する仮出願第６０／８９６，４５０号に対する優先権を主張する。
【技術分野】
【０００２】
本開示は、電子デバイス（電子機器）に関し、特にオーディオを生成する電子デバイスに関する。
【背景技術】
【０００３】
楽器ディジタルインタフェース（ＭＩＤＩ）は、音楽、スピーチ、発信音、アラートなどといったオーディオサウンドの創作、通信および再生のためのフォーマットである。ＭＩＤＩフォーマットをサポートするデバイスは、種々の「音声（ボイス）」を創作するために使用されるオーディオ情報のセットを記憶する。各音声は、ある特定の楽器による音符といった特定の音に対応する。例えば第１の音声はピアノで演奏されるような中央ハ（Ｃ）音に対応し、第２の音声はトロンボーンで演奏されるような中央ハ音に対応し、第３の音声はトロンボーンで演奏される嬰ニ（Ｄ＃）音に対応する、などである。異なる楽器の音を複製するためにＭＩＤＩ準拠デバイスは、低周波発振器の挙動といった音、ビブラートといった効果、および音の知覚に影響を及ぼし得る多数の他のオーディオ特性に関連する種々のオーディオ特性を指定する音声に関する１セットの情報を含む。ほとんど如何なる音も、ＭＩＤＩファイルにおいて定義され、伝達され、またＭＩＤＩフォーマットをサポートするデバイスによって再生されることが可能である。
【０００４】
ＭＩＤＩフォーマットをサポートするデバイスは、このデバイスが音符(musical note)を生成し始めるべきであることを示すイベントが発生するとき、音符（または他の音）を生成する。同様にこのデバイスは、デバイスが音符の生成を停止すべきであることを示すイベントが発生するとき、音符の生成を停止する。１つの楽曲全体は、ある幾つかの音声が開始および停止すべきときを示すイベントとこれらの音声に対する種々の効果とを指定することによって、ＭＩＤＩフォーマットにしたがって符号化される。このようにして楽曲は、ＭＩＤＩフォーマットに準拠したコンパクトなファイルフォーマットで記憶され、伝送されることが可能である。
【０００５】
ＭＩＤＩフォーマットは、幅広い種々のデバイスでサポートされている。例えば、無線電話といった無線通信デバイスは、着信音または他のオーディオ出力といったダウンロード可能な音のためにＭＩＤＩファイルをサポートする。アップルコンピュータ社（Apple Computer, Inc.）によって販売されている「ｉＰｏｄ」デバイスおよびマイクロソフト社（Microsoft Corp.）によって販売されている「Ｚｕｎｅ」デバイスといったディジタル音楽プレーヤーもまた、ＭＩＤＩファイルフォーマットをサポートする。ＭＩＤＩフォーマットをサポートする他のデバイスは、キーボード、シーケンサー、音声符号器（ボコーダー）およびリズムマシンといった種々の音楽シンセサイザーを含み得る。更に幅広い種々のデバイスもまた、無線移動デバイス、直接双方向通信デバイス（トランシーバーと呼ばれることもある）、ネットワーク電話、パソコン、デスクトップおよびラップトップコンピュータ、ワークステーション、衛星無線デバイス、インターコムデバイス（インターホン）、ラジオ（無線）放送デバイス、携帯型ゲーム機、デバイスにインストールされる回路基板、インフォメーションセンター、ビデオゲームコンソール、子供向けの種々のコンピュータ化された玩具、自動車、船舶および航空機で使用される車内（機内、船内）搭載型コンピュータ、および幅広い種々の他のデバイスを含むＭＩＤＩファイルまたはトラックの再生をサポートする。
【発明の概要】
【０００６】
一般に、ＭＩＤＩ音声のためのディジタル波形の生成のために特化された１セットのマシンコード（機械符号）命令を使用して楽器ディタルインタフェース（ＭＩＤＩ）音声のためのディジタル波形を生成する技法が説明される。例えばプロセッサは、ＭＩＤＩ音声のためのディジタル波形を生成するソフトウエアプログラムを実行する。このソフトウエアプログラムの命令は、ＭＩＤＩ音声のためのディジタル波形の生成のために特化された命令セットからのマシンコード命令である。特にこれらの命令の１つの実行は、ＭＩＤＩ音声を定義する１セットのパラメータに基づく演算の選択と、この選択された演算の実行とを含む。
【０００７】
一態様では、ある方法はＭＩＤＩ音声のためのディジタル波形を生成するソフトウエアプログラム内のマシンコード命令を実行することを備える。このソフトウエアプログラム内の命令を実行することは、ＭＩＤＩ音声を定義する１セットの音声パラメータに基づいた演算を選択することと、この選択された演算が実行されるようにするための制御信号を出力することとを備える。この方法はまた、ディジタル波形を出力することを備える。
【０００８】
もう１つの態様では、あるデバイスはＭＩＤＩ音声を定義する音声パラメータセットを記憶するメモリユニットを備える。このデバイスはまた、ＭＩＤＩ音声のためのディジタル波形を生成するためにソフトウエアプログラム内のマシンコード命令を実行する処理要素を備える。マシンコード命令の完全な実行は、音声パラメータセットに基づく演算の選択と、この選択された演算の実行とを含む。
【０００９】
もう１つの態様では、コンピュータ可読媒体は命令を備える。これらの命令は、１つ以上のプロセッサに、ＭＩＤＩ音声のためのディジタル波形を生成するソフトウエアプログラム内のマシンコード命令を実行させる。ソフトウエアプログラム内の命令を実行することは、ＭＩＤＩ音声を定義する１セットの音声パラメータに基づいた演算を選択することと、この選択された演算が実行されるようにするための制御信号を出力することとを備える。このコンピュータ可読媒体はまた、これら１つ以上のプロセッサにディジタル波形を出力させる命令も備える。
【００１０】
もう１つの態様では、あるデバイスはＭＩＤＩ音声を定義する音声パラメータセットを記憶するための手段を備える。このデバイスはまた、ＭＩＤＩ音声のためのディジタル波形を生成するためにソフトウエアプログラム内のマシンコード命令を実行するための手段も備える。このマシンコード命令の完全な実行は、音声パラメータセットに基づく演算の選択と、この選択された演算の実行とを含む。
【００１１】
もう１つの態様では、回路はＭＩＤＩ音声のためのディジタル波形を生成するソフトウエアプログラムのマシンコード命令を実行するように構成され、この回路は、ＭＩＤＩ音声を定義する１セットの音声パラメータに基づいた演算を選択し、この選択された演算が実行されるようにするための制御信号を出力し、そしてディジタル波形を出力するように構成される。
【００１２】
これらの詳細は、添付の図面と下記の説明において述べられる。他の特徴、目的および利点は、これらの説明および図面から、また特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００１３】
【図１】音を生成するオーディオデバイスを含む例示的システムを示すブロック図である。
【図２】オーディオデバイスの例示的楽器デバイスインタフェース（ＭＩＤＩ）ハードウエアユニットを示すブロック図である。
【図３】オーディオデバイスの例示的動作を示す流れ図である。
【図４】オーディオデバイス内のディジタル信号プロセッサ（ＤＳＰ）の例示的動作を示す流れ図である。
【図５】オーディオデバイスのＭＩＤＩハードウエアユニット内の調整モジュールの例示的動作を示す流れ図である。
【図６】メモリアドレスを指定する音声インジケータのリストを使用する例示的ＤＳＰを示すブロック図である。
【図７】ＤＳＰがプロセッサから１セットのＭＩＤＩイベントを受信するときのＤＳＰの例示的動作を示す流れ図である。
【図８】ＤＳＰが音声インジケータのリストに音声インジケータを挿入するときのＤＳＰの例示的動作を示す流れ図である。
【図９】ＤＳＰがこのリストに音声インジケータを挿入するときのＤＳＰの例示的動作を示す流れ図である。
【図１０】リスト内の音声インジケータの数が音声インジケータの最大数を超えるときに、ＤＳＰがリストから音声インジケータを除去するときのＤＳＰの例示的動作を示す流れ図である。
【図１１】メモリアドレスが導き出され得るインデックス値を指定する音声インジケータのリストを使用する例示的ＤＳＰを示すブロック図である。
【図１２】例示的処理要素の細部を示すブロック図である。
【図１３】オーディオデバイスのＭＩＤＩハードウエアユニット内の処置要素の例示的動作を示す流れ図である。
【発明の詳細な説明】
【００１４】
本開示は、ＭＩＤＩ音声のためのディジタル波形の生成のために特化された１セットのマシンコード命令を使用して楽器ディジタルインタフェース（ＭＩＤＩ）音声のためのディジタル波形を生成する技法を説明する。例えば、プロセッサはＭＩＤＩ音声のためのディジタル波形を生成するソフトウエアプログラムを実行する。このソフトウエアプログラムの命令は、ＭＩＤＩ音声のためのディジタル波形の生成のために特化された命令セットからのマシンコード命令である。
【００１５】
図１は、音を生成するオーディオデバイス４を含む例示的システム２を示すブロック図である。オーディオデバイス４は、幾つかの異なるタイプのデバイスの１つである。例えばオーディオデバイス４は、携帯電話、ネットワーク電話、パソコン、直接双方向通信デバイス（トランシーバーと呼ばれることもある）、パソコン、デスクトップまたはラップトップコンピュータ、ワークステーション、衛星無線デバイス、インターコムデバイス（インターホン）、ラジオ放送デバイス、携帯型ゲーム機、公衆電話ボックス（kiosk）といったデバイスにインストールされる回路基板、子供向けの種々のコンピュータ化された玩具、自動車、船舶、航空機、宇宙船に使用される車内（機内、船内）搭載型コンピュータ、または他のタイプのデバイスである。アップルコンピュータ社（Apple Computer, Inc.）によって販売されている「ｉＰｏｄ」デバイス、およびマイクロソフト社(Microsoft Corp.)によって販売されている「Ｚｕｎｅ」デバイスといったディジタル音楽プレーヤーもまた、ＭＩＤＩファイルフォーマットをサポートできる。ＭＩＤＩフォーマットをサポートする他のデバイスは、キーボード、シーケンサー、音声符号器（ボコーダー）およびリズムマシンといった種々の音楽シンセサイザーを含み得る。
【００１６】
図１に示された種々の構成要素は、本開示の態様を説明するために必要とされるものである。しかしながら他の構成要素も存在する可能性があり、また図示の構成要素の一部はある幾つかの実現形態には含まれない可能性もある。例えば、もしオーディオデバイス４が無線電話であれば、オーディオファイルの無線通信を容易にするためにアンテナ、送信機、受信機およびモデム（変調復調器（modulator-demodulator））が包含される。
【００１７】
図１の例に示されているように、オーディオデバイス４は、ＭＩＤＩファイルを記憶するオーディオ記憶ユニット６を含む。オーディオ記憶ユニット６は、任意の揮発性または不揮発性メモリまたは記憶装置を備える。例えばオーディオ記憶ユニット６は、ハードディスクドライブ、フラッシュメモリユニット、コンパクトディスク、フロッピー（登録商標）ディスク、ディジタルバーサタイルディスク（ＤＶＤ）、読取り専用メモリユニット、ランダムアクセスメモリ、または情報記憶媒体である。オーディオ記憶ユニット６は、楽器デバイスインタフェース（ＭＩＤＩ）ファイルおよび他のタイプのデータを記憶する。例えば、もしオーディオデバイス４が携帯電話であれば、オーディオ記憶ユニット６は個人的つながり、写真、および他のタイプのデータのリストを備えるデータを記憶する。
【００１８】
オーディオデバイス４はまた、データをオーディオ記憶ユニット６から読み取り、これに書き込むことができるプロセッサ８を含む。更にプロセッサ８は、データをランダムアクセスメモリ（ＲＡＭ）ユニット１０から読み取り、またこれに書き込む。例えばプロセッサ８は、オーディオ記憶モジュール６からＭＩＤＩファイルの一部分を読み取って、ＭＩＤＩファイルのこの部分をＲＡＭユニット１０に書き込む。プロセッサ８は、インテルペンティアム（登録商標）４プロセッサ、英国チェリーヒントン（Cherry Hinton, UK）のＡＲＭホールディングスによるＡＲＭアーキテクチャに準拠する埋込み型マイクロプロセッサ、あるいは他のタイプの汎用プロセッサといった汎用マイクロプロセッサを備える。ＲＡＭユニット１０は、１つ以上のスタティックまたはダイナミックＲＡＭユニットを備える。
【００１９】
プロセッサ８がＭＩＤＩファイルを読み取った後に、プロセッサ８は、ＭＩＤＩファイルを構文解析して、これらのＭＩＤＩファイルに関連するＭＩＤＩイベントをスケジュールする。例えば各ＭＩＤＩフレームに関して、プロセッサ８は、１つ以上のＭＩＤＩファイルを読み取り、またこれらのＭＩＤＩファイルからＭＩＤＩイベントを抽出する。ＭＩＤＩ命令に基づいて、プロセッサ８は、ＤＳＰ１２による処理のためにＭＩＤＩイベントをスケジュールする。ＭＩＤＩイベントをスケジュールした後に、プロセッサ８は、ＤＳＰ１２がこれらのイベントを処理するように、このスケジューリングをＲＡＭユニット１０またはＤＳＰ１２に供給する。代替としてプロセッサ８は、時間的に同期される仕方でＭＩＤＩイベントをＤＳＰ１２に送出することによってスケジューリングを実行する。ＤＳＰ１２は、ＭＩＤＩファイル内のパラメータを時間調整することによって指定されるように、同期される仕方でこれらのスケジュールされたイベントをサービスする。ＭＩＤＩイベントは、音楽演奏情報を送るために使用されるチャネル音声メッセージを含む。チャネル音声メッセージは、ある特定のＭＩＤＩ音声をオンまたはオフし、ポリフォニックキー圧力、チャネル圧力、ピッチベンドチェンジを変更し、変更メッセージ、アフタタッチ（残触覚）効果、呼吸制御効果、プログラム変更、ピッチベンド効果を制御し、左右にパン(pan)し、ペダル、メインボリューム、ソステヌートを持続するための命令、および他のチャネル音声メッセージを含む。更にＭＩＤＩイベントは、ＭＩＤＩデバイスがＭＩＤＩデータに応答する仕方に影響を及ぼすチャネルモードメッセージを含む。更にＭＩＤＩイベントは、ＭＩＤＩシステム内のすべての受信機のために意図されたシステム共通メッセージ、クロックベースのＭＩＤＩコンポーネント間の同期のために使用されるシステムリアルタイムメッセージ、および他のシステム関連メッセージといったシステムメッセージを含む。ＭＩＤＩイベントはまた、ＭＩＤＩショー制御メッセージ（例えば照明効果キュー、スライド映写キュー、機械効果キュー、花火キュー、および他の効果キュー）である。
【００２０】
ＤＳＰ１２がプロセッサ８からＭＩＤＩ命令を受信すると、ＤＳＰ１２は連続的なパルスコード変調（ＰＣＭ）信号を生成するためにＭＩＤＩ命令を処理する。ＰＣＭ信号は、波形が一定間隔でディジタルサンプルによって表されるアナログ信号のディジタル表現である。ＤＳＰ１２は、このＰＣＭ信号をディジタル・アナログ変換器（ＤＡＣ）１４に出力する。ＤＡＣ１４は、このディジタル波形をアナログ信号に変換する。駆動回路１８は、ユーザへの物理的音の出力のためのスピーカ１９Ａおよび１９Ｂを駆動するためにこのアナログ信号を使用できる。本開示は、スピーカ１９Ａおよび１９Ｂをまとめて「スピーカ１９」と呼ぶ。オーディオデバイス４は、フィルタ、前置増幅器、増幅器、およびスピーカ１９による最終出力のためにアナログ信号を準備する他のタイプの構成要素を含む、１つ以上の更なる構成要素（図示せず）を含む。このようにしてオーディオデバイス４は、ＭＩＤＩファイルにしたがって音を生成する。
【００２１】
ディジタル波形を生成するために、ＤＳＰ１２は、個別のＭＩＤＩフレームのためのディジタル波形を生成するＭＩＤＩハードウエアユニット１８を使用する。各ＭＩＤＩフレームは、１０ミリ秒または他の時間間隔に対応する。１つのＭＩＤＩフレームが１０ミリ秒に対応し、ディジタル波形が４８ｋＨｚでサンプリングされる（すなわち、毎秒４８，０００サンプル）と、各ＭＩＤＩフレームには４８０個のサンプルが存在する。ＭＩＤＩハードウエアユニット１８は、オーディオデバイス４のハードウエアコンポーネントとして実現される。例えばＭＩＤＩハードウエアユニット１８は、オーディオデバイス４の回路基板に埋め込まれたチップセットである。ＭＩＤＩハードウエアユニット１８を使用するために、ＤＳＰ１２は最初に、ＭＩＤＩハードウエアユニット１８が遊んでいるかどうかを決定する。ＭＩＤＩハードウエアユニット１８は、ＭＩＤＩハードウエアユニット１８がＭＩＤＩフレームのためのディジタル波形を生成し終わった後に遊んでいる可能性がある。それからＤＳＰ１２は、ＭＩＤＩフレーム内に存在するＭＩＤＩ音声を示す音声インジケータのリストを生成する。ＤＳＰ１２が音声インジケータのリストを生成した後に、ＤＳＰ１２は、ＭＩＤＩハードウエアユニット１８内に１つ以上のレジスタをセット（設定）する。ＤＳＰ１２は、これらのレジスタをセットするために直接メモリ交換（ＤＭＥ）を使用する。ＤＭＥは、プロセッサが他の動作を実行している間に、データを１つのメモリユニットからもう１つのメモリユニットに転送する手順である。ＤＳＰ１２がレジスタをセットした後に、ＤＳＰ１２は、ＭＩＤＩハードウエアユニット１８にＭＩＤＩフレームのためのディジタル波形を生成し始めるように命令する。以下詳細に説明されるように、ＭＩＤＩハードウエアユニット１８は、音声インジケータのリスト内のＭＩＤＩ音声の各々のためのディジタル波形を生成して、これらのディジタル波形をＭＩＤＩ音声のための波形に統合することによって、ＭＩＤＩフレームのためのディジタル波形を生成する。ＭＩＤＩハードウエアユニット１８がＭＩＤＩフレームのためのディジタル波形を生成し終わったとき、ＭＩＤＩハードウエアユニット１８はＤＳＰ１２に割込み（インタラプト）を送る。ＭＩＤＩハードウエアユニット１８からの割込みを受信すると、ＤＳＰ１２はディジタル波形のためのＤＭＥ要求をＭＩＤＩハードウエアユニット１８に送る。ＭＩＤＩハードウエアユニット１８がこの要求を受信すると、ＭＩＤＩハードウエアユニット１８はディジタル波形をＤＳＰ１２に送る。
【００２２】
ＭＩＤＩフレーム内に存在するＭＩＤＩ音声を示す音声インジケータのリストを生成するために、ＤＳＰ１２は、ＭＩＤＩ音声のうちのどれがＭＩＤＩフレーム内で少なくとも最小レベルの音響的重要性を有しているかを決定する。ＭＩＤＩフレーム内のＭＩＤＩ音声の音響的重要性のレベルは、ＭＩＤＩフレームの人間の聞き手によって知覚される全体的音に対するこのＭＩＤＩ音声の重要性の関数である。
【００２３】
ＭＩＤＩ音声のためのディジタル波形を生成するために、ＭＩＤＩハードウエアユニット１８は、ＭＩＤＩ音声を定義する音声パラメータセット内の少なくとも幾つかの音声パラメータにアクセスする。１セットの音声パラメータは、ＭＩＤＩ音声のためのディジタル波形を生成するために必要な情報を指定することによって、および／またはこのような情報がどこに位置し得るかを指定することによって、ＭＩＤＩ音声を定義する。例えば１セットのＭＩＤＩ音声パラメータは、共鳴のレベル、ピッチ残響、ボリューム、および他の音響特性を指定する。更に１セットのＭＩＤＩ音声パラメータは、音声の基本波形を含むＲＡＭユニット１０内の位置のアドレスへのポインターを含む。ＭＩＤＩフレームのためのディジタル波形は、複数のＭＩＤＩ音声の複数のディジタル波形の集合である。例えば、ＭＩＤＩフレームのためのディジタル波形は、複数のＭＩＤＩ音声の複数のディジタル波形の合計である。
【００２４】
以下詳細に論じられるように、ＭＩＤＩハードウエアユニット１８は、幾つかの利点を提供する。例えば、ＭＩＤＩハードウエアユニット１８は、ディジタル波形の効率的な生成という結果をもたらす幾つかの特徴を含む。ディジタル波形のこの効率的な生成の結果として、オーディオデバイス４は、より高品質の音を生成し、より小さい電力を消費し、そうでなければＭＩＤＩファイルの再生のための従来の技法を改良することが可能である。更に、ＭＩＤＩハードウエアユニット１８はディジタル波形を効率的に生成できるので、ＭＩＤＩハードウエアユニット１８は一定時間内で、より多くのＭＩＤＩ音声のためのディジタル波形を生成することが可能である。このような更なるＭＩＤＩ音声の存在は、人間の聞き手によって知覚される音の品質を改善する。
【００２５】
図２は、オーディオデバイス４の例示的ＭＩＤＩハードウエアユニット１８を示すブロック図である。図２の例に示されるように、ＭＩＤＩハードウエアユニット１８は、データを送受信するバスインタフェース３０を含む。例えばバスインタフェース３０は、ＡＭＢＡ高性能バス（ＡＨＢ）マスターインタフェースと、ＡＨＢスレーブインタフェースと、メモリバスインタフェースとを含む。代替として、バスインタフェース３０は、ＡＸＩバスインタフェースまたはもう１つのタイプのバスインタフェースを含む。ＡＸＩは、高度拡張可能インタフェース（advanced extensible interface）を表す。
【００２６】
更にＭＩＤＩハードウエアユニット１８は、調整モジュール３２を含む。調整モジュール３２は、ＭＩＤＩハードウエアユニット１８内のデータフローを調整する。ＭＩＤＩハードウエアユニット１８がＭＩＤＩフレームのためのディジタル信号を生成し始めるための命令をＤＳＰ１２から受信すると、調整モジュール３２はＤＳＰ１２によって生成された音声インジケータのリストを、ＲＡＭユニット１０からＭＩＤＩハードウエアユニット１８内のリンクされたリストメモリユニット４２内にロードする。このリスト内の各音声インジケータは、現在のＭＩＤＩフレームのときに音響的重要性を有するＭＩＤＩ音声を示す。音声インジケータのリスト内の各音声インジケータは、ＭＩＤＩ音声を定義する音声パラメータセットを記憶するＲＡＭユニット１０内のメモリ位置を指定する。例えば各音声インジケータは、ある特定の音声パラメータセットのメモリアドレスを含むか、あるいは調整モジュール３２がある特定の音声パラメータセットのメモリアドレスを導き出し得るインデックス値を含む。
【００２７】
調整モジュール３２が音声インジケータのリストをリンクされたリストメモリユニット４２にロードした後に、調整モジュール３２は、リンクされたリストメモリ４２に記憶された音声インジケータのリスト内の音声インジケータによって指示されたＭＩＤＩ音声の１つのためのディジタル波形を生成するために、処理要素３４Ａから３４Ｎの１つを識別する。処理要素３４Ａから３４Ｎは、ここではまとめて「処理要素３４」と呼ばれる。処理要素３４は、互いに並行してＭＩＤＩ音声のためのディジタル波形を生成する。
【００２８】
処理要素３４の各々は、音声パラメータセット（ＶＰＳ）ＲＡＭユニット４６Ａから４６Ｎの１つに関連する。本開示は、ＶＰＳ  ＲＡＭユニット４６Ａから４６Ｎをまとめて「ＶＰＳ  ＲＡＭユニット４６」と呼ぶ可能性がある。ＶＰＳ  ＲＡＭユニット４６は、処理要素３４によって使用される音声パラメータを記憶するレジスタである。調整モジュール３２がＭＩＤＩ音声のためのディジタル波形を生成するために処理要素３４の１つを識別すると、調整要素３２は、ＭＩＤＩ音声の音声パラメータセットの音声パラメータをこの識別された処理要素に関連するＶＰＳ  ＲＡＭユニット４６の１つに記憶する。更に調整モジュール３２は、音声パラメータセットの音声パラメータを波形フェッチユニット／低周波発振器（ＷＦＵ／ＬＦＯ）メモリユニット３９に記憶する。
【００２９】
音声パラメータをＶＰＳ  ＲＡＭユニットおよびＷＦＵ／ＬＦＯメモリユニット３９にロードした後に、調整モジュール３２は、ＭＩＤＩ音声のためのディジタル波形を生成し始めるように処理要素に命令する。処理要素３４の各々は、プログラムメモリユニット４４Ａから４４Ｎ（まとめて「プログラムメモリユニット４４」）の１つに関連する。プログラムメモリユニット４４の各々は、１セットのプログラム命令を記憶する。ＭＩＤＩ音声のためのディジタル波形を生成するために、処理要素は、この処理要素に関連するプログラムメモリユニット４４の１つに記憶されたプログラム命令のセットを実行する。これらのプログラム命令は、処理要素に、この処理要素と関連するＶＰＳメモリユニット４６の１つから１セットの音声パラメータを検索させる。更にこれらのプログラム命令は、処理要素をして、音声のための基本波形サンプルへのポインターによって音声パラメータ内で指定された波形の要求を、波形フェッチユニット（ＷＦＵ）３６に送らせる。処理要素３４の各々は、ＷＦＵ３６を使用する。処理要素３４の１つからの要求に応じて、ＷＦＵ３６は、この要求している処理要素に１つ以上の波形サンプルを返す。波形は例えばこの波形の最大１サイクルだけサンプル内で位相シフトされるので、ＷＦＵ３６は、補間法を使用して位相シフトを補償するために２つのサンプルを返すことができる。更にステレオ信号は２つの別々の波形からなるので、ＷＦＵ３６は最大４個のサンプルを返すことができる。ＷＦＵ３６によって返された最後のサンプルは、補間のために使用され得る分数位相である。ＷＦＵ３６は、基本波形をより迅速にフェッチするためにキャッシュメモリ４８を使用する。
【００３０】
ＷＦＵ３６がオーディオサンプルを処理要素３４の１つに返した後に、それぞれの処理要素は、更なるプログラム命令を実行する。このような更なる命令は、ＭＩＤＩハードウエアユニット１８内の低周波発振器（ＬＦＯ）３８から非対称三角形の波形のサンプルを要求することを含む。ＷＦＵ３６によって返された波形をＬＦＯ３８によって返された三角形の波形に乗算することによって、処理要素は、波形の種々の音響特性を操作することができる。例えば、波形を三角形の波形と乗算することは、所望の楽器によく類似した音の波形という結果を生じ得る。他の命令は、処理要素に、波形を指定回数ループさせるか、波形の振幅を調整させるか、残響を追加させるか、ビブラート効果を追加させるか、あるいは他の音響効果を与えさせる。このようにして処理要素は、１つのＭＩＤＩフレームを持続させる音声のための波形を生成することができる。最終的に処理要素は、退去命令に遭遇する可能性がある。処理要素が退去命令に遭遇すると、処理要素は生成された波形を加算バッファ４０に供給する。代替として処理要素は、生成されたディジタル波形の各サンプルを生成しながらこのようなサンプルを加算バッファ４０に記憶する。
【００３１】
加算バッファ４０が処理要素３４の１つから波形を受信すると、この加算バッファはこの波形をＭＩＤＩフレームの全体波形に統合する。例えば加算バッファ４０は、最初にフラットな波形（すなわち、すべてのディジタルサンプルがゼロである波形）を記憶する。加算バッファ４０が処理要素３４の１つから波形を受信すると、加算バッファ４０は、この波形の各ディジタルサンプルを加算バッファ４０に記憶された波形のそれぞれのサンプルに加算する。このようにして加算バッファ４０は、ＭＩＤＩフレームのための全体波形を生成して記憶する。
【００３２】
最終的に調整モジュール３２は、処理要素３４がリンクされたリストメモリ４２内のリストに示された音声のすべてのためのディジタル波形を生成し終わったことと、これらのディジタル波形を加算バッファ４０に供給したこととを決定する。この時点で加算バッファ４０は、現在のＭＩＤＩフレーム全体のための完成されたディジタル波形を含む。調整モジュール３２がこの決定を行うと、調整モジュール３２は、割込みをＤＳＰ１２に送る。この割込みに応じてＤＳＰ１２は、加算バッファ４０の内容を受信するために直接メモリ交換（ＤＭＥ）を介して、加算バッファ４０内の制御ユニット（図示せず）に要求を送る。代替としてＤＳＰ１０はまた、ＤＭＥを実行するために予めプログラムされることも可能である。代替として、ＤＳＰ１２はまた、ＤＭＥを実行するために予めプログラムされることも可能である。
【００３３】
図３は、オーディオデバイス４の例示的動作を示す流れ図である。最初にプロセッサ８は、オーディオ記憶モジュール６からＲＡＭユニット１０にＭＩＤＩファイルをロードするためのプログラム命令に遭遇する（５０）。例えば、もしオーディオデバイス４が携帯電話であれば、プロセッサ８は、オーディオデバイス４が着信電話呼出しを受信してＭＩＤＩファイルが着信音を表現するとき、固定（永続）記憶モジュール６からＲＡＭユニット１０にＭＩＤＩファイルをロードするためのプログラム命令に遭遇する。
【００３４】
ＭＩＤＩファイルをＲＡＭユニット１０にロードした後に、プロセッサ８は、ＲＡＭユニット１０内のＭＩＤＩファイルからのＭＩＤＩ命令を構文解析する（５２）。それからプロセッサ８は、ＭＩＤＩイベントをスケジュールし、このスケジュールにしたがってＭＩＤＩイベントをＤＳＰ１２に送達する（５４）。ＭＩＤＩイベントに応じてＤＳＰ１２は、ＭＩＤＩハードウエアユニット１８と協同して、連続するディジタル波形をリアルタイムに出力する（５６）。すなわち、ＤＳＰ１２によって出力されたディジタル波形は、個別のＭＩＤＩフレームに分割（セグメント化）されない。ＤＳＰ１２は、この連続するディジタル波形をＤＡＣ１４に供給する（５８）。ＤＡＣ１４は、ディジタル波形内の個別のディジタルサンプルを電圧に変換する（６０）。ＤＡＣ１４は、種々のディジタル・アナログ変換技術を使用して実現される。例えばＤＡＣ１４は、パルス幅変調器、オーバーサンプリングＤＡＣ、重み付け２進ＤＡＣ、Ｒ−２ＲラダーＤＡＣ、温度計符号化ＤＡＣ、セグメント化ＤＡＣ、あるいは他のタイプのディジタル・アナログ変換器として実現される。
【００３５】
ＤＡＣ１４がディジタル波形をアナログオーディオ信号に変換した後に、ＤＡＣ１４は、このアナログオーディオ信号を駆動回路１６に供給する（６２）。駆動回路１６は、このアナログ信号を使用してスピーカ１９を駆動する（６４）。スピーカ１９は、アナログ電気信号を物理的音に変換する電気機械トランスデューサ（変換器）である。スピーカ１９が音を生成すると、オーディオデバイス４のユーザはこの音を聞いて適切に反応する。例えば、もしオーディオデバイス４が携帯電話であれば、ユーザは、スピーカ１９が着信音を生成したとき電話呼出しに応答する。
【００３６】
図４は、オーディオデバイス４内のＤＳＰ１２の例示的動作を示す流れ図である。最初にＤＳＰ１２は、プロセッサ８からＭＩＤＩイベントを受信する（７０）。ＭＩＤＩイベントを受信した後に、ＤＳＰ１２は、このＭＩＤＩイベントがＭＩＤＩ音声のパラメータを更新するための命令であるかどうかを決定する（７２）。例えばＤＳＰ１２は、ピアノに関する中央ハ（Ｃ）音のための１セットの音声パラメータ内の左チャネルパラメータに関する利得を増加させるためのＭＩＤＩイベントを受信する。このようにして、ピアノに関する中央ハ音は音符が左から来ているように鳴る可能性がある。もしＭＩＤＩイベントがＭＩＤＩ音声のパラメータを更新するための命令であるとＤＳＰ１２が決定すれば（７２の「ＹＥＳ」）、ＤＳＰ１２はＲＡＭユニット１０内のパラメータを更新する（７４）。
【００３７】
他方、もしＭＩＤＩイベントがＭＩＤＩ音声のパラメータを更新するための命令でないとＤＳＰ１２が決定すれば（７２の「ＮＯ」）、ＤＳＰ１２は音声インジケータのリストを生成する（７５）。リンクされたリスト内の音声インジケータの各々は、ＭＩＤＩ音声を定義する音声パラメータセットを記憶するＲＡＭユニット１０内のメモリ位置を指定することによって、ＭＩＤＩフレームのためのＭＩＤＩ音声を指示する。ＭＩＤＩハードウエアユニット１８は限定された時間制限にしたがってＭＩＤＩ音声のためのディジタル波形を生成するので、ＭＩＤＩフレームに関してＭＩＤＩ命令によって指定されたすべてのＭＩＤＩ音声のためのディジタル波形をＭＩＤＩハードウエアユニット１８が生成できない場合がある。その結果、リンクされたリスト内の音声インジケータによって指示されたＭＩＤＩ音声は、ＭＩＤＩフレームの期間中に最も大きな音響的重要性を有するＭＩＤＩ音声である。音声インジケータのリストは、リンクされたリストである。すなわち、このリスト内の各音声インジケータは、リスト内の最後の音声インジケータを除いて、リスト内の次の音声インジケータのメモリアドレスへのポインターに関連している。
【００３８】
ＭＩＤＩハードウエアユニット１８だけが最も重要なＭＩＤＩ音声のためのディジタル波形を生成することを保証するために、ＤＳＰ１２は、最も音響的に重要な音声を識別するための１つ以上の発見的アルゴリズムを使用する。例えばＤＳＰ１２は、最も高い平均ボリュームを有する音声、必要なハーモニーを形成する音声、あるいは他の音響特性を識別する。ＤＳＰ１２は、最も音響的に重要な音声がリスト内で１番目に在り、２番目に音響的に重要な音声がリスト内で２番目に在る、などであるように音声インジケータのリストを生成する。更にＤＳＰ１２は、ＭＩＤＩフレーム内でアクティブでない任意の音声をリストから除去する。
【００３９】
音声インジケータのリストを生成した後に、ＤＳＰ１２は、ＭＩＤＩハードウエアユニット１８が遊んでいるかどうかを決定する（７６）。ＭＩＤＩハードウエアユニット１８は、ＭＩＤＩファイルの第１のＭＩＤＩフレームのためのディジタル波形を生成する前、またはＭＩＤＩフレームのためのディジタル波形の生成を完了した後に、遊んでいる可能性がある。もしＭＩＤＩハードウエアユニット１８が遊んでいなければ（７６の「ＮＯ」）、ＤＳＰ１２は、１クロックサイクル以上待って、それからＭＩＤＩハードウエアユニット１８が遊んでいるかどうかを再び決定する（７６）。
【００４０】
もしＭＩＤＩハードウエアユニット１８が遊んでいれば（７６の「ＹＥＳ」）、ＤＳＰ１２は、１セットの命令をＭＩＤＩハードウエアユニット１８内のプログラムＲＡＭユニット４４にロードする（７８）。例えばＤＳＰ１２は、命令がプログラムＲＡＭユニット４４内に既にロードされたかどうかを決定する。もし命令がまだプログラムＲＡＭユニット４４内にロードされていなければ、ＤＳＰ１２は、直接メモリ交換（ＤＭＥ）を使用してこのような命令をプログラムＲＡＭユニット４４内に転送する。代替として、もし命令が既にプログラムＲＡＭユニット４４内にロードされていれば、ＤＳＰ１２はこのステップをスキップする。
【００４１】
ＤＳＰ１２がプログラム命令をプログラムＲＡＭユニット４４内にロードした後に、ＤＳＰ１２はＭＩＤＩハードウエアユニット１８をアクティブ化する（８０）。例えばＤＳＰ１２は、ＭＩＤＩハードウエアユニット１８内のレジスタを更新することによって、あるいは制御信号をＭＩＤＩハードウエアユニット１８に送ることによって、ＭＩＤＩハードウエアユニット１８をアクティブ化する。ＭＩＤＩハードウエアユニット１８をアクティブ化した後に、ＤＳＰ１２は、ＤＳＰ１２がＭＩＤＩハードウエアユニット１８からの割込みを受信するまで待機する（８２）。割込みを待機している間に、ＤＳＰ１２は、前のＭＩＤＩフレームに関するディジタル波形を処理して出力する。更にＤＳＰ１２は、次のＭＩＤＩフレームのために音声インジケータのリストを生成する。割込みを受信するとＤＳＰ１２内の割り込みサービスレジスタは、ＭＩＤＩハードウエアユニット１８内の加算バッファ４０からＭＩＤＩフレームのためのディジタル波形を転送するために、ＤＭＥ要求をセットアップする（設ける）（８４）。加算バッファ４０内のディジタル波形が転送されているときに長時間のハードウエアアイドリングを回避するために、直接メモリ交換要求は、３２個の３２ビットワードブロックで加算バッファ４０からディジタル波形を転送する。ディジタル波形のデータ完全性は、処理要素３４が加算バッファ４０内のデータを上書きしないようにする加算バッファ４０内のロッキング機構（施錠機構）によって維持される。このロッキング機構は、１ブロックずつ解除され得るので、直接メモリ交換転送はハードウエア実行と並行して進む。
【００４２】
ＤＳＰ１２がＭＩＤＩハードウエアユニット１８からＭＩＤＩフレームのためのオーディオサンプルを受信した後に、ＤＳＰ１２は、ＭＩＤＩハードウエアユニット１８から受信されたＭＩＤＩフレームのためのディジタル波形に先行するＭＩＤＩフレームのためのディジタル波形をＤＳＰ１２がＤＡＣ１４に完全に出力し終わるまで、ディジタル波形をバッファする（８６）。ＤＳＰ１２が前のＭＩＤＩフレームのためのディジタル波形を完全に出力し終わった後に、ＤＳＰ１２は、現在のＭＩＤＩフレームのためにＭＩＤＩハードウエアユニット１８から受信されたディジタル波形を出力する（８８）。
【００４３】
図５は、オーディオデバイス４のＭＩＤＩハードウエアユニット１８内の調整モジュール３２の例示的動作を示す流れ図である。最初に調整モジュール３２は、ＭＩＤＩフレームのためのディジタル波形を生成し始めるための命令をＤＳＰ１２から受信する（１００）。ＤＳＰ１２から命令を受信した後に、調整モジュール３２は、加算バッファ４０の内容をクリア（消去）する（１０２）。例えば調整モジュール３２は、加算バッファ４０内のディジタル波形をすべてゼロにセットするように加算バッファ４０に命令する。調整モジュール３２が加算バッファ４０の内容をクリアした後に、調整モジュール３２は、ＤＳＰ１２によって生成された音声識別子のリストをＲＡＭユニット１０から、リンクされたリストメモリ４２にロードする（１０４）。
【００４４】
音声インジケータのリンクされたリストをロードした後に、調整モジュール３２は、処理要素がＭＩＤＩ音声のためのディジタル波形を生成し終わったことを示す信号を調整モジュール３２が処理要素３４の１つから受信したかどうかを決定する（１０６）。処理要素がＭＩＤＩ音声のためのディジタル波形を生成し終わったことを示す信号を、調整モジュール３２が処理要素３４の１つから受信しなかったとき（１０６の「ＮＯ」）、処理要素３４はループバックしてこのような信号を待つ（１０６）。処理要素がＭＩＤＩ音声のためのディジタル波形を生成し終わったことを示す信号を、調整モジュール３２が処理要素３４の１つから受信したとき（１０６の「ＹＥＳ」）、調整モジュール３２は、処理要素に関連するＶＰＳ  ＲＡＭユニット４６の１つと、処理要素または波形フェッチユニット３６またはＬＦＯ３８によって変更された可能性のあるＷＦＵ／ＬＦＯメモリ３９とに記憶された音声パラメータセットの１つ以上のパラメータを、ＲＡＭユニット１０に書き込む（１０８）。例えばＭＩＤＩ音声のための波形を生成しながら、処理要素３４Ａは、ＶＰＳメモリ４６Ａ内の音声パラメータセットのある幾つかのパラメータを変更する。この場合、例えば処理要素３４Ａは、ＭＩＤＩフレームの終端で音声のボリュームレベルを示すために音声のための音声パラメータを更新する。更新された音声パラメータをＲＡＭユニット１０に書き戻すことによって、所定の処理要素は、現在のＭＩＤＩフレームが終了したボリュームレベルと同じであるボリュームレベルで、次のＭＩＤＩフレーム内のＭＩＤＩ音声のためのディジタル波形を生成し始める。他の書き込み可能なパラメータは、ＬＦＯ３８によって生成された三角形の波形の左右バランス、全体的位相シフト、位相シフトまたは他の音響特性を含む。
【００４５】
調整モジュールがこれらのパラメータをＲＡＭユニット１０に書き戻した後に、調整モジュール３２は、処理要素３４がリスト内の音声インジケータによって示された各ＭＩＤＩ音声のためのディジタル波形を生成したかどうかを決定する（１１０）。例えば調整モジュール３２は、音声インジケータのリンクされたリスト内の現在の音声インジケータを示すポインターを維持する。最初にこのポインターは、リンクされたリスト内の第１の音声インジケータを指示する。もし処理要素３４がリスト内に示されたＭＩＤＩ音声の各々のためのディジタル波形を生成したのであれば（１１０の「ＹＥＳ」）、調整モジュール３２は、ＭＩＤＩフレームのための全体的ディジタル波形が完全であることを示すために、ＤＳＰ１２に割込みをアサート（主張）する（１１２）。
【００４６】
他方、もし処理要素３４がリスト内の音声インジケータによって示されたＭＩＤＩ音声の各々のためのディジタル波形を生成していなかったならば（１１０の「ＮＯ」）、調整モジュール３２は、遊んでいる処理要素３４の１つを識別する（１１４）。もし処理要素３４のすべてが遊んでいなければ（すなわち、ビジーであれば）、調整モジュール３２は処理要素３４の１つが遊び状態になるまで待つことがある。遊んでいる処理要素３４の１つを識別した後に、調整モジュール３２は、現在の音声インジケータによって示された音声パラメータセットのパラメータを、遊んでいる処理要素に関連するＶＰＳ  ＲＡＭユニット４４の１つにロードする（１１２）。調整モジュール３２は、処理要素に関連する音声パラメータセットのこれらのパラメータを、ＶＰＳ  ＲＡＭユニットに単にロードする。更に調整モジュール３２は、ＷＦＵ３６とＬＦＯ３８とに関連する音声パラメータセットのパラメータを、ＷＦＵ／ＬＦＯ  ＲＡＭユニット３９にロードする（１１８）。それから調整モジュール３２は、遊んでいる処理要素がＭＩＤＩ音声のためのディジタル波形を生成し始める（１２０）。次に調整モジュール３２は、現在の音声インジケータをリスト内の次の音声インジケータに更新し、処理要素３４の１つがＭＩＤＩ音声のためのディジタル波形の生成を完了したことを示す信号を、調整モジュール３２が受信したかどうかを再び決定するためにループバックする（１０６）。
【００４７】
図６は、メモリアドレスを指定する音声インジケータのリストを使用する例示的ＤＳＰ１２を示すブロック図である。図６の例に示されるように、ＤＳＰ１２は、リストベースポインター１４０を記憶するレジスタを含む。リストベースポインター１４０は、リンクされたリストメモリ４２内の音声インジケータのリスト１４２内の第１の音声インジケータのメモリアドレスを指定する。もしリスト１４２内に音声インジケータが存在しなければ、ＭＩＤＩファイルの最初の状況であるように、リストベースポインター１４０の値は空アドレスである。更にＤＳＰ１２は、音声インジケータレジスタの数１４４の値を記憶するレジスタを含む。音声インジケータレジスタの数１４４の値は、リスト１４２内の音声インジケータの数のタリー（勘定）を指定する。図６に示されたこの例示的データ構造では、リスト１４２内の各音声インジケータは、ＲＡＭユニット１０内の音声パラメータセットのメモリアドレスと、リンクされたリストメモリ４２内の次の音声インジケータのメモリアドレスとを備える。リスト１４２内の最後の音声インジケータは、リスト１４２内の次の音声インジケータのアドレスに関して空アドレスを指定する。
【００４８】
ＲＡＭユニット１０は、１セットの音声パラメータセット１４６を含む。ＲＡＭユニット１０内の各音声パラメータセットは、音声パラメータセット内の音声パラメータの値を指定する連続したメモリ位置のブロックである。第１の音声パラメータのメモリ位置のメモリアドレスは、この音声パラメータセットのためのメモリアドレスとして機能する。
【００４９】
ＤＳＰ１２がＭＩＤＩファイルの第１のＭＩＤＩイベントを受信する前に、リスト１４２は、如何なる音声インジケータも含まない可能性がある。リスト１４２が如何なる音声インジケータも含まないという事実を反映するために、リストベースポインター１４０の値は空メモリアドレスである可能性があり、また音声インジケータレジスタの数１４４の値は数ゼロを指定する可能性がある。ＭＩＤＩファイルの第１のＭＩＤＩフレームの冒頭で、プロセッサ８は、ＭＩＤＩフレームの期間中に発生する１セットのＭＩＤＩイベントを調整モジュール３２に供給する。例えばプロセッサ８は、音声をオンにするＭＩＤＩイベントと、音声をオフにするＭＩＤＩイベントと、アフタタッチ（残触覚）効果に関連して他のこのような効果を生じるＭＩＤＩイベントとを、ＤＳＰ１２に供給する。ＭＩＤＩイベントを処理するために、ＤＳＰ１２内のリスト生成（発生器）モジュール１５６は、リンクされたリストメモリ４２内にリンクされたリスト１４２を生成する。一般にリスト生成モジュール１５６は、各ＭＩＤＩフレームの期間中にリスト１４２を完全には生成しない。むしろリスト生成モジュール１５６は、リスト１４２内に既に存在する音声インジケータを再使用する。
【００５０】
リンクされたリスト１４２を生成するために、リスト生成モジュール１５６は、リスト１４２が、ＤＳＰ１２によって与えられたＭＩＤＩイベントのセット内に指定された各ＭＩＤＩ音声のための音声パラメータセット１４６の１つのメモリアドレスを指定する音声インジケータを既に含んでいるかどうかを決定する。もしリスト１４２が複数のＭＩＤＩ音声のうちの１つのＭＩＤＩ音声の音声インジケータを含んでいるとリスト生成モジュール１５６が決定すれば、リスト生成モジュール１５６はリスト１４２から音声インジケータを除去する。リスト１４２から音声インジケータを除去した後に、リスト生成モジュール１５６はリスト１４２に音声インジケータを戻して追加する。リスト生成モジュール１５６が音声インジケータをリスト１４２に戻して追加すると、リスト生成モジュール１５６は、リスト内の第１の音声インジケータから始めることが可能であり、そして除去された音声インジケータによって指示されたＭＩＤＩ音声が、リスト１４２内の第１の音声インジケータによって指示された音声より音響的に重要であるかどうかを決定することが可能である。言い換えれば、リスト生成モジュール１５６は、どの音声が音にとってより重要であるかを決定する。リスト生成モジュール１５６は、ＭＩＤＩイベントに指定されたＭＩＤＩ音声または第１の音声インジケータによって指定されたＭＩＤＩ音声がより音響的に重要であるかどうかを決定するために、１つ以上の発見的アルゴリズムを適用する。例えばリスト生成モジュール１５６は、２つのＭＩＤＩ音声のうちのどちらが現在のＭＩＤＩフレームの期間中に最も音量の大きな平均ボリュームを有するかを決定する。音響的重要性を決定するために他の心理音響技法も適用される。もし除去された音声インジケータによって指示されたＭＩＤＩ音声が、リスト１４２内の第１の音声インジケータによって指示された音声より重要であれば、リスト生成モジュール１５６は、この除去された音声インジケータをリストの最上部に追加する。
【００５１】
リスト生成モジュール１５６が除去された音声インジケータをリストの最上部に追加すると、リスト生成モジュール１５６は、リストベースポインターの値を、除去された音声インジケータのメモリアドレスに等しくなるように変更する。もし除去された音声インジケータによって指示されたＭＩＤＩ音声が、第１の音声インジケータによって指示されたＭＩＤＩ音声より重要でなければ、リスト生成モジュール１５６は、リスト生成モジュール１５６が、除去された音声インジケータによって指示されたＭＩＤＩ音声より重要でないリスト１４２内の音声インジケータの１つによって指示されたＭＩＤＩ音声を識別するまで、リスト１４２を下り続ける。リスト生成モジュール１５６がこのようなＭＩＤＩ音声を識別すると、リスト生成モジュール１５６は、リスト１４２内でこの識別されたＭＩＤＩ音声のための音声インジケータより上に（すなわち、前に）、除去された音声インジケータを挿入する。もし除去された音声インジケータによって指示されたＭＩＤＩ音声が、リスト１４２内の音声インジケータによって指示された他のすべてのＭＩＤＩ音声より音響的に重要でなければ、リスト生成モジュール１５６はこの除去された音声インジケータをリスト１４２の終端に追加する。リスト生成モジュール１５６は、ＭＩＤＩイベントのセット内の各ＭＩＤＩ音声に関してこのプロセスを実行する。
【００５２】
もしリスト１４２がＭＩＤＩイベントに関連するＭＩＤＩ音声のための音声インジケータを含まないとリスト生成モジュール１５６が決定すれば、リスト生成モジュール１５６はＭＩＤＩ音声のために、リンクされたリストメモリ４２内に新しい音声インジケータを創作する。新しい音声インジケータを創作した後に、リスト生成モジュール１５６は、除去された音声インジケータのために上記の仕方で新しい音声インジケータをリスト１４２に挿入する。このようにしてリスト生成モジュール１５６は、リンクされたリスト内の音声インジケータがリスト内の音声インジケータによって指示されたＭＩＤＩ音声の音響的重要性にしたがって順次に配置されている、リンクされたリストを生成する。一例としてリスト生成モジュール１５６は、ＭＩＤＩフレーム内で最も重要な音声から最も重要でない音声までのＭＩＤＩ音声を指示する、音声インジケータのリストを生成する。
【００５３】
図６の例ではＤＳＰ１２は、リスト１４２を生成する際にリスト生成モジュール１５６を援助する１セットのポインターを含む。ポインターのこのセットは、リスト生成モジュール１５６が現在使用している音声インジケータのメモリアドレスを保持する現在の音声インジケータポインター１４８と、リスト生成モジュール１５６がリスト１４２内に挿入している音声インジケータのメモリアドレスを保持するイベント音声インジケータポインター１５０と、リスト生成モジュール１５６が現在使用している音声インジケータの前にリスト生成モジュール１５６が使用した音声インジケータのメモリアドレスを保持する、前の音声インジケータポインター１５２と、を含む。
【００５４】
もし音声インジケータレジスタの数１４４の値が音声インジケータの最大数を超えれば、リスト生成モジュール１５６は、最も重要でないＭＩＤＩ音声を示すリスト１４２内の音声インジケータに関連するメモリを割当て解除する。もしリスト１４２内の音声インジケータが最も重要なものから最も重要でないものに順次配列されていれば、リスト生成モジュール１５６は、リスト生成モジュール１５６が空メモリアドレスを指定する次の音声インジケータメモリアドレスを含む音声インジケータを識別するまで、次の音声インジケータメモリアドレスのチェーンに従うことによって、最も重要でないＭＩＤＩ音声を示すリスト１４２内の音声インジケータを識別する。最後の音声インジケータに関連するメモリを割当て解除した後に、リスト生成モジュール１５６は、音声インジケータレジスタの数１４４の値を１だけ減らす。
【００５５】
リスト生成モジュール１５６がリスト１４２を生成した後に、リスト生成モジュール１５６は、リストベースポインター１４０の値と音声インジケータの数１４４の値とを調整モジュールに供給する。調整モジュール３２は、リストベースポインター１４０と音声インジケータの数１４４とのこれらの値を保持するレジスタ（図示せず）を含む。調整モジュール３２は、リスト１４２にアクセスしてリスト１４２内の音声インジケータによって示されたＭＩＤＩ音声を処理要素３２に割り当てるために、これらの値を使用する。例えばリスト生成モジュール１５６がリスト１４２を生成し終わったとき調整モジュール３２は、リンクされたリストメモリ４２内にリスト１４２をロードするためにリスト生成モジュール１５６によって与えられたリストベースポインター１４０の値を使用する。それから調整モジュール３２は、遊んでいる処理要素３４の１つを識別する。それから調整モジュール３２は、現在の音声インジケータを指示する調整モジュール３２内のポインターによって指定されたメモリ位置において、リスト１４２内の音声インジケータによって指示されたＭＩＤＩ音声を定義する音声パラメータセットを記憶する、ＲＡＭユニット１０内のメモリ位置のメモリアドレスを取得する。それから調整モジュール３２は、音声パラメータセット内の少なくともある幾つかの音声パラメータを、遊んでいる処理要素に関連するＶＰＳ  ＲＡＭユニット４６の１つに記憶するために、取得されたメモリアドレスを使用する。音声パラメータセットをＶＰＳ  ＲＡＭユニットに記憶した後に、調整モジュール３２は、音声のための波形を生成し始めるための信号を処理要素に送る。調整モジュール３２は、処理要素３４がリスト１４２内の音声インジケータによって指示された各音声のために波形を生成し終わるまで、これを続ける。
【００５６】
ＤＳＰ１２と調整モジュール３２とによる音声インジケータのリンクされたリストの使用は、幾つかの利点を提示する。例えばＤＳＰ１２は、音声パラメータセットを指示する音声インジケータのリンクされたリストを分類して再配列するので、ＲＡＭユニット１０内の実際の音声パラメータセットを分類して再配列することは必要でない。音声インジケータは、音声パラメータセットより極めて小さい。その結果、ＤＳＰ１２は、より少ないデータをＲＡＭユニット１０に、およびＲＡＭユニット１０から動かす（すなわち、書き込み、また読み取る）。したがってＤＳＰ１２は、ＤＳＰ１２が音声パラメータセットを分類して再配列した場合より小さい帯域幅を、調整モジュール３２からＲＡＭユニット１０へのバス上で必要とする。更にＤＳＰ１２は、より少ないデータをＲＡＭユニット１０に、またＲＡＭユニット１０から動かすので、ＤＳＰ１２はＤＳＰ１２が実際の音声パラメータセットを動かした場合より少ない電力を消費する。また、音声インジケータのリンクされたリストの使用は、ＤＳＰ１２が任意の順序で処理要素３４に音声パラメータセットを供給することを可能にする。音声パラメータセットを任意の順序で処理要素３４に供給することは、ある幾つかのタイプのオーディオ処理において有用である。
【００５７】
更に、インジケータのリンクされたリストの使用は、ＭＩＤＩ音声セットパラメータの識別子とは別の状況における適用可能性を有する。例えばこれらのインジケータは、ＭＩＤＩ音声パラメータのセットより、むしろ予めプログラムされたディジタルフィルタを指示する。予めプログラムされたディジタルフィルタの各々は、双二次フィルタ（bi-quadratic filter）のために５個の係数を提供する。双二次フィルタは、両極からより遠く離れた周波数をフィルタリング（濾波）する２極２ゼロのディジタルフィルタである。双二次フィルタは、オーディオ等化器をプログラムするために使用される。ＭＩＤＩ音声と同様に、第１のディジタルフィルタは、第２のディジタルフィルタとほぼ同じくらい重要である。したがって、ディジタルフィルタを適用するモジュールは、１セットのディジタルフィルタを効率的に適用するためにディジタルフィルタパラメータにインジケータの分類およびリンクされたリストを使用する。例えばオーディオデバイス４のモジュールは、ＤＳＰ１２がディジタル波形を生成した後にディジタル波形にフィルタを適用する。
【００５８】
図７は、ＤＳＰ１２がプロセッサ８から１セットのＭＩＤＩイベントを受信するときのＤＳＰ１２の例示的動作を示す流れ図である。最初にＤＳＰ１２は、プロセッサ８から１セットのＭＩＤＩイベントを受信する（１６０）。ＤＳＰ１２が１セットのＭＩＤＩイベントを受信した後に、リスト生成モジュール１５６は、このＭＩＤＩイベントのセットが空であるかどうかを決定する（１６２）。もしＭＩＤＩイベントのこのセットが空であれば（１６２の「ＹＥＳ」）、リスト生成モジュール１５６は、リストベースポインター１４０の値を調整モジュール３２に供給する（１６４）。
【００５９】
他方、もしＭＩＤＩイベントのこのセットが空でなければ（１６２の「ＮＯ」）、リスト生成モジュール１５６はＭＩＤＩイベントのこのセットから１つのイベントを除去する（１６６）。この除去されたイベントはここでは「現在イベント」と呼ばれ、現在イベントに関連するＭＩＤＩ音声（単数または複数）はここでは「現在音声」と呼ばれる。リスト生成モジュール１５６がＭＩＤＩイベントのセットから現在イベントを除去した後に、リスト生成モジュール１５６は、リストベースポインター１４０の値が空アドレスであるかどうかを決定する（１６８）。もしリストベースポインター１４０の値が空アドレスでなければ（１６８の「ＮＯ」）、リスト生成モジュール１５６は、現在音声のための音声インジケータをリスト１４２に挿入する。図８および図９は、音声インジケータをリスト１４２に挿入するための例示的手順を示す。リスト生成モジュール１５６が音声インジケータをリスト１４２に挿入した後に、リスト生成モジュール１５６はループバックすることが可能であり、ＭＩＤＩイベントのセットが空であるかどうかを再び決定する（１６２）。
【００６０】
もしリストベースポインター１４０の値が空アドレスを指定すれば（１６８の「ＹＥＳ」）、リスト生成モジュール１５６は現在音声のための音声インジケータに関してリンクされたリストメモリ４２内のメモリの連続ブロックを割り当てる（１７０）。メモリのブロックを割り当てた後に、リスト生成モジュール１５６は、メモリのブロックのメモリアドレスをリストベースポインター１４０に記憶する（１７２）。それからリスト生成モジュール１５６は、音声インジケータレジスタの数１４４の値を１だけ増加させる（１７４）。更にリスト生成モジュール１５６は、現在音声のための音声インジケータを初期化する（１７６）。音声インジケータを初期化するために、リスト生成モジュール１５６は、音声インジケータの次の音声インジケータポインターをゼロにセットし、音声インジケータの音声パラメータセットポインターを、現在音声の音声パラメータセットの音声パラメータセット１４６内のメモリアドレスにセットする。音声インジケータを初期化した後に、リスト生成モジュール１５６は、ループバックしてＭＩＤＩイベントのセットが空であるかどうかを再び決定する（１６２）。
【００６１】
図８は、ＤＳＰ１２が音声インジケータを音声インジケータのリスト１４２内に挿入するときのＤＳＰ１２の例示的動作を示す流れ図である。特に図８の例は、ＤＳＰ１２内のリスト生成モジュール１５６がリスト１４２から現在音声の音声インジケータを除去する動作、あるいは音声インジケータがリスト１４２内の適当な位置に引き続いて挿入されるように、現在音声のための新しい音声インジケータを創作する動作を示す。図８、９、１０および１１において用語「音声インジケータ」は「Ｖ．Ｉ．」と略され、用語「音声パラメータセット」は「Ｖ．Ｐ．Ｓ．」と略されている。図８の例に示された流れ図は「Ａ」とマークされた円から始まり、これは図７の例において「Ａ」とマークされた円に対応している。
【００６２】
最初にリスト生成モジュール１５６は、現在音声インジケータポインター１４８の値をリストベースポインター１４０の値にセットする（１８０）。次にリスト生成モジュール１５６は、前の音声インジケータポインター１５２の値をゼロにセットする（１８２）。前の音声インジケータポインター１５２の値をゼロにセットした後に、リスト生成モジュール１５６は、現在音声インジケータ（すなわち、現在音声インジケータポインター１４８内のメモリアドレスに等しいメモリアドレスを有する音声インジケータ）の音声パラメータポインターが、現在イベントの音声の音声パラメータセットのメモリアドレスに等しいかどうかを決定する（１８４）。
【００６３】
もし現在音声インジケータの音声パラメータポインターが音声パラメータセットのメモリアドレスに等しいとリスト生成モジュール１５６が決定すれば（１８４の「ＹＥＳ」）、リスト生成モジュール１５６は、前の音声インジケータポインター１５２の値が空アドレスであるかどうかを決定する（１８６）。もし前の音声インジケータポインター１５２の値が空アドレスではないとリスト生成モジュール１５６が決定すれば（１８６の「ＮＯ」）、リスト生成モジュール１５６は、前の音声インジケータ（すなわち、前の音声インジケータポインター１５２内のメモリアドレスに等しいメモリアドレスを有するインジケータ）の次の音声インジケータポインターを、現在音声インジケータの次の音声インジケータポインターの値にセットする（１８８）。前の音声インジケータの次の音声インジケータポインターをセットした後に、リスト生成モジュール１５６は、イベント音声インジケータポインター１５０の値を現在音声インジケータポインター１４８の値にセットする（１９０）。リスト生成モジュール１５６はまた、前の音声インジケータポインター１５２の値がゼロであるとき（１８６の「ＹＥＳ」）、イベント音声インジケータポインター１５０の値を現在音声インジケータポインター１４８の値にセットする。このようにしてリスト生成モジュール１５６は、音声インジケータの次の音声インジケータポインターを空メモリアドレスにセットしようとは試みない。リスト生成モジュール１５６がイベント音声インジケータポインター１４８の値をセットした後に、リスト生成モジュール１５６は、現在音声インジケータポインター１４８の値をリストベースポインター１４０の値にセットする（１９２）。それからリスト生成モジュール１５６は、イベント音声インジケータポインター１５０によってポイントされた音声インジケータを再挿入するために、図９に示された例示的動作を使用する。
【００６４】
もし現在音声インジケータの音声パラメータセットが音声パラメータセットのメモリアドレスに等しくないとリスト生成モジュール１５６が決定すれば（１８４の「ＮＯ」）、リスト生成モジュール１５６は、現在音声インジケータの次の音声インジケータポインターの値がゼロであるかどうかを決定する（１９４）。言い換えれば、リスト生成モジュール１５６は、現在音声インジケータがリスト１４２内の最後の音声インジケータであるかどうかを決定する。もし現在音声インジケータの次の音声インジケータポインターの値がゼロでないとリスト生成モジュール１５６が決定すれば（１９４の「ＮＯ」）、リスト生成モジュール１５６は、前の音声インジケータポインター１５２の値を現在音声インジケータポインター１４８の値にセットする（１９６）。それからリスト生成モジュール１５６は、現在音声インジケータポインター１４８の値を現在音声インジケータの次の音声インジケータポインターの値にセットする（１９８）。このようにしてリスト生成モジュール１５６は、現在音声インジケータをリスト１４２内の次の音声インジケータに進めることが。それからリスト生成モジュール１５６は、ループバックして、新しい現在音声インジケータの音声パラメータセットポインターが現在音声の音声パラメータセットのアドレスに等しいかどうかを、再び決定する（１８４）。
【００６５】
他方、もし現在音声インジケータの次の音声インジケータポインターがゼロであるとリスト生成モジュール１５６が決定すれば（１９４の「ＹＥＳ」）、リスト生成モジュール１５６は現在音声のための音声インジケータを位置決めすることなく、リスト１４２の終端に到達している。この理由から、リスト生成モジュール１５６は、現在音声のための新しい音声インジケータを作り出すことができる。現在音声のための新しい音声インジケータを作り出すために、リスト生成モジュール１５６は、新しい音声インジケータのためのリンクされたリストメモリ４２内のメモリを割り当て得る（２００）。それからリスト生成モジュール１５６は、イベント音声インジケータポインター１４８の値を新しい音声インジケータのメモリアドレスにセットする（２０２）。ここで、この新しい音声インジケータがイベント音声インジケータである。次にリスト生成モジュール１５６は、音声インジケータレジスタの数１４４の値を１だけ増加させる（２０４）。音声インジケータレジスタの数１４４の値を増加させた後に、リスト生成モジュール１５６は、現在音声の音声パラメータセットのメモリアドレスを含むようにイベント音声インジケータの音声パラメータセットポインターをセットする（２０６）。それからリスト生成モジュール１５６は、現在音声インジケータポインター１４８の値をリストベースポインター１４０の値にセットすることが可能であり（１９２）、それから図９に示された例示的動作にしたがってイベント音声インジケータをリスト１４２に挿入する。
【００６６】
図９は、ＤＳＰが音声インジケータをリスト１４２に挿入するときのＤＳＰ１２の例示的動作を示す流れ図である。図９の例に示された流れ図は、「Ｂ」とマークされた円から始まり、これは図８の例で「Ｂ」とマークされた円に対応している。
【００６７】
最初に、ＤＳＰ１２内のリスト生成モジュール１５６は、イベント音声インジケータによって指示された音声パラメータセットをＲＡＭユニット１０から検索する（２１０）。それからリスト生成モジュール１５６は、現在音声インジケータによって指示された音声パラメータセットをＲＡＭユニット１０から検索する（２１２）。両音声パラメータセットを検索した後に、リスト生成モジュール１５６は、これらの音声パラメータセットの値に基づいてＭＩＤＩ音声の相対的音響的重要性を決定する（２１４）。
【００６８】
もしイベント音声インジケータによって指示されたＭＩＤＩ音声が現在音声インジケータによって指示されたＭＩＤＩ音声より重要であれば（２１４の「ＹＥＳ」）、リスト生成モジュール１５６は、イベント音声インジケータにおける次の音声インジケータを現在音声インジケータポインター１４８の値にセットする（２１６）。次の音声インジケータをセットした後に、リスト生成モジュール１５６は、現在音声インジケータポインター１４８の値がリストベースポインター１４０の値に等しいかどうかを決定する（２１８）。言い換えれば、リスト生成モジュール１５６は、現在音声インジケータがリスト１４２内の第１の音声インジケータであるかどうかを決定する。もし現在音声インジケータポインター１４８の値がリストベースポインター１４０の値に等しければ（２１８の「ＹＥＳ」）、リスト生成モジュール１５６は、リストベースポインター１４０の値をイベント音声インジケータポインター１５０の値にセットする（２２０）。このようにしてイベント音声インジケータは、リスト１４２内で第１の音声インジケータになる。そうではなく、もし現在音声インジケータポインター１４８の値がリストベースポインター１４０の値に等しくなければ（２１８の「ＮＯ」）、リスト生成モジュール１５６は、前の音声インジケータにおける次の音声インジケータポインターの値を、イベント音声インジケータポインター１５０の値にセットする（２２２）。このようにしてリスト生成モジュール１５６は、イベント音声インジケータをリスト１４２にリンクすることができる。
【００６９】
他方、もしイベント音声インジケータによって指示されたＭＩＤＩ音声が現在音声インジケータによって指示されたＭＩＤＩ音声より重要でなければ（２１４の「ＮＯ」）、リスト生成モジュール１５６は、現在音声インジケータにおける次の音声インジケータポインターの値がゼロであるかどうかを決定する（２２４）。もし次の音声インジケータポインターの値がゼロであれば、現在音声インジケータはリスト１４２内の最後の音声インジケータである。もし現在音声インジケータにおける次の音声インジケータポインターの値がゼロであれば（２２４の「ＹＥＳ」）、リスト生成モジュール１５６は、現在音声インジケータにおける次の音声インジケータポインターの値を、イベント音声インジケータポインター１５０の値にセットする（２２６）。このようにしてリスト生成モジュール１５６は、イベント音声インジケータによって指示された音声がリスト１４２内で最も重要でない音声であるとき、イベント音声インジケータをリスト１４２の終端に追加する。
【００７０】
しかしながら、もし現在音声インジケータにおける次の音声インジケータポインターがゼロでなければ（２２４の「ＮＯ」）、現在音声インジケータはリスト１４２内の最後の音声インジケータではない。この理由から、リスト生成モジュール１５６は、前の音声インジケータ１５２の値を現在音声インジケータポインター１４８の値にセットする（２２８）。それからリスト生成モジュール１５６は、現在音声インジケータポインター１４８の値を、現在音声インジケータにおける次の音声インジケータポインターの値にセットする（２３０）。現在音声インジケータポインター１４８の値をセットした後に、リスト生成モジュール１５６は、現在音声インジケータによって指示された音声パラメータセットを再び検索するためにループバックする（２１２）。
【００７１】
図１０は、リスト１４２内の音声インジケータの数が音声インジケータの最大数を超えたときに、ＤＳＰがリスト１４２から音声インジケータを除去するときのＤＳＰ１２の例示的動作を示す流れ図である。例えばＤＳＰ１２は、リスト１４２内の音声インジケータの最大数を１０に限定する。この例では、ＭＩＤＩハードウエアユニット１８は、ＭＩＤＩフレーム内の１０個の最も音響的に重要なＭＩＤＩ音声のためのディジタル波形だけを生成するであろう。音声の限定数なしでは、ＭＩＤＩハードウエアユニット１８がＭＩＤＩフレームによって許された時間内でリスト１４２内の音声のすべてを処理することはできない可能性があるので、ＤＳＰ１２はリスト１４２内の音声インジケータの最大数をセットする。更にＤＳＰ１２は、リンクされたリストメモリ４２内に空間を保存するために、リスト１４２内の音声インジケータの最大数をセットする。更に、リスト１４２に関する音声インジケータの最大数は、新しい音声インジケータをリスト１４２に挿入するために必要とされる計算の回数に上限をセットする。計算回数に上限をセットすることは、ＭＩＤＩフレームのためのディジタル波形をリアルタイムに生成するための要件である。
【００７２】
最初に、ＤＳＰ１２内のリスト生成モジュール１５６は、音声インジケータレジスタの数１４４の値がリスト１４２内の音声インジケータの最大数より大きいかどうかを決定する（２４０）。もし音声インジケータレジスタの数１４４の値が音声インジケータの最大数より大きくなければ（２４０の「ＮＯ」）、リスト１４２から如何なる音声インジケータも除去する必要はない。しかしながらある幾つかの例では、リスト生成モジュール１５６は、リスト１４２を通してスキャン（走査）し、現在アクティブでない、または所定時間内にアクティブでなかった音声のための音声インジケータを除去することができる。
【００７３】
もし音声インジケータレジスタの数１４４の値が音声インジケータの最大数より大きければ（２４０の「ＹＥＳ」）、リスト生成モジュール１５６は、現在音声インジケータポインター１４８の値をリストベースポインター１４０の値にセットする（２４２）。次にリスト生成モジュール１５６は、前の音声インジケータポインター１５２の値をゼロにセットする（２４４）。この時点で、リスト生成モジュール１５６は、現在音声インジケータの次の音声インジケータポインターの値がゼロであるかどうか（すなわち、現在音声インジケータがリスト１４２内の最後の音声インジケータであるかどうか）を決定する（２４８）。もし現在音声インジケータの次の音声インジケータポインターの値がゼロでなければ（２４８の「ＮＯ」）、リスト生成モジュール１５６は、前の音声インジケータポインター１５２の値を現在音声インジケータポインター１４８の値にセットする（２５０）。それからリスト生成モジュール１５６は、現在音声インジケータポインター１４８の値を現在音声インジケータの次の音声インジケータポインターの値にセットする（２５２）。次にリスト生成モジュール１５６は、新しい現在音声インジケータの次の音声インジケータポインターの値がゼロに等しいかどうかを再び決定するためにループバックする（２４８）。
【００７４】
もし現在音声インジケータの次の音声インジケータポインターの値がゼロに等しければ（２４８の「ＹＥＳ」）、現在音声インジケータは、リスト１４２内の最後の音声インジケータである。それからリスト生成モジュール１５６は、リスト１４２から最後の音声インジケータを除去する。リスト１４２から最後の音声インジケータを除去するために、リスト生成モジュール１５６は、前の音声インジケータの次の音声インジケータポインターをゼロにセットする（２５４）。次に調整モジュール３２は、現在音声インジケータのためのリンクされたリストメモリ４２内のメモリを割当て解除する（２５６）。それから調整モジュール３２は、音声インジケータレジスタの数１４４の値を減らす（２５８）。音声インジケータレジスタの数１４４の値を減らした後に、リスト生成モジュール１５６は、音声インジケータレジスタの数１４４の値が音声インジケータの許された最大数より大きいかどうかを再び決定するためにループバックする（２４０）。
【００７５】
図１１は、メモリアドレスが導き出され得るインデックス値を指定する音声インジケータのリストを使用する例示的ＤＳＰ１２を示すブロック図である。図１２の例ではリスト１４２内の各音声インジケータは、４個の音声パラメータセット（ＶＰＳ）インデックス値を含む３２ビットワードと、リスト１４２内の次の音声インジケータのメモリアドレスとを含む。ブロック２６０内の各ＶＰＳインデックス値は、音声パラメータセットのブロック２６２内の１つの音声パラメータセットに関連する数を指定する。例えば第１のＶＰＳインデックス値は、音声パラメータセットのブロック２６２内の第２の音声パラメータセットを示すための数「２」を指定する。更にブロック２６０内の各ＶＰＳインデックス値は、ＲＡＭユニット１０内の４バイトワードの１バイト（すなわち、８ビット）で表される。１つのＶＰＳインデックス値は１バイトで表されるので、単一のＶＰＳインデックス値は、２５６（すなわち、２８＝２５６）個の音声パラメータセットのうちの１つを指示する。
【００７６】
更に図１１の例では、ＲＡＭユニット１０は、メモリ位置の連続したブロック２６２内に各音声パラメータセットを記憶する。ＲＡＭユニット１０は、連続したブロック内に各音声パラメータセットを記憶するので、１つの音声パラメータセットは前の音声パラメータセットの直後のメモリ位置から始まる。
【００７７】
ＤＳＰ１２または調整モジュール３２が音声パラメータセットのブロック２６２内の１つの音声パラメータセットにアクセスする必要があるとき、ＤＳＰ１２または調整モジュール３２は最初に、ブロック２６０内の音声パラメータセットのインデックス値に、セットサイズレジスタ２６８に含まれた値を乗算する。セットサイズレジスタ２６８に含まれた値は、単一の音声パラメータセットが占めるＲＡＭユニット１０内のアドレス可能位置の数に等しい。それからＤＳＰ１２または調整モジュール３２は、セットベースポインターレジスタ２６６の値を加算する。セットベースポインターレジスタ２６６に含まれた値は、ブロック２６２内の第１の音声パラメータセットのメモリアドレスに等しい。したがって、音声パラメータセットのインデックスに音声パラメータセットのサイズを乗算し、それから第１の音声パラメータセットのメモリアドレスを加算することによって、ＤＳＰ１２または調整モジュール３２は、ブロック２６２内の音声パラメータセットの第１のメモリアドレスを導き出すことができる。
【００７８】
ＤＳＰ１２は、図８から図１０のリスト１４２内の音声インジケータを調整モジュール３２が制御したのとほぼ同じ仕方で、図１１のリスト１４２内の音声インジケータを制御する。しかしながら、この例示的データ構造を使用するときＤＳＰ１２は、音声インジケータ内のＶＰＳインデックス値を分類する。
【００７９】
図１１に示された例示的データ構造は、この図１１に示されたデータ構造が、音声パラメータセットへの同じ数のポインターを記憶するためにリンクされたリストメモリ４２内で、より少ないメモリ位置を必要とするので、図６に示された例示的データ構造より利点を有する。しかしながら、図１１に示されたデータ構造は、ＤＳＰ１２と調整モジュール３２とに更なる計算を実行することを要求する。
【００８０】
図１２は、例示的処理要素３４Ａの細部を示すブロック図である。図１２の例は処理要素３４Ａの細部を示しているが、これらの細部は処理要素３４の他のものにも適用可能である。
【００８１】
図１２の例に示されているように、処理要素３４Ａは、幾つかの構成要素を備える。これらの構成要素は、制御ユニット２８０、算術論理演算ユニット（ＡＬＵ）２８２、多重化装置２８４、および１セットのレジスタ２８６を含むが、これらに限定されない。更に処理要素３４Ａは、ＶＰＳ  ＲＡＭユニット４６Ａ用の読取りインタフェース・ファーストインファーストアウト（先入れ先出し）（ＦＩＦＯ）２９２、ＶＰＳ  ＲＡＭユニット４６Ａ用の書込みインタフェースＦＩＦＯ、ＬＦＯ３８用のインタフェースＦＩＦＯ２９６、ＷＦＵ３６用のインタフェースＦＩＦＯ２９８、加算バッファ４０用のインタフェースＦＩＦＯ３００、および加算バッファ４０内のＲＡＭ用のインタフェースＦＩＦＯ３０２を含む。
【００８２】
制御ユニット２８０は、命令を読み取り、これらの命令に基づいて処理要素３４Ａを制御する制御信号を出力する１セットの回路を備える。制御ユニット２８０は、現在命令のメモリアドレスを記憶するプログラムカウンタ２９０と、処理要素３４によって実行される第１のプログラムループのためのカウンタを記憶する第１のループカウンタ３０４と、処理要素３４によって実行される第２のプログラムループのためのカウンタを記憶する第２のループカウンタ３０６とを含む。ＡＬＵ２８２は、レジスタ２８６のうちの種々のものに記憶された値に対して種々の算術演算を実行する回路を備える。ＡＬＵ２８２は、ＭＩＤＩ音声のためのディジタル波形の生成のために特別の有用性を有する算術演算を実行するように特化される。レジスタ２８６は、符号付きまたは符号なしの値を保持し得る１セット８個の３２ビットレジスタである。多重化装置２８４は、制御ユニット２８０によって出力された制御信号に基づいて、ＡＬＵ２８２、インタフェース読取りＦＩＦＯ２９２、インタフェースＦＩＦＯ２９６、インタフェースＦＩＦＯ２９８、およびインタフェースＦＩＦＯ３０２からの出力を、レジスタ２８６の特定のものに方向付けることができる。
【００８３】
処理要素３４Ａは、ＭＩＤＩ音声のためのディジタル波形を生成するために特化された１セットのプログラム命令を使用する。言い換えれば、処理要素３４Ａにおいて使用されるプログラム命令のセットは、縮小命令セットコンピュータ（ＲＩＳＣ）命令セットといった一般化された命令セット、またはｘ８６命令セットといった複数命令セットアーキテクチャ命令セットには見られない、プログラム命令を含む。更に、処理要素３４Ａにおいて使用されるプログラム命令のセットは、一般化された命令セットに見られるある幾つかのプログラム命令を除外する。
【００８４】
処理要素３４Ａによって使用されるプログラム命令は、算術論理演算ユニット（ＡＬＵ）命令、ロード／ストア命令、および制御命令として分類される。処理要素３４Ａによって使用されるプログラム命令の各クラスは、異なる長さであり得る。例えば、ＡＬＵ命令は２０ビット長であり、ロード／ストア命令は１８ビット長であり、制御命令は１６ビット長であり得る。
【００８５】
ＡＬＵ命令は、制御ユニット２８０をしてＡＬＵ２８２に制御信号を出力させる命令である。１つの例示的フォーマットでは、各ＡＬＵ命令は、２０ビット長であり得る。例えば、ＡＬＵ命令のビット１９：１８は留保されており、ビット１７：１４はＡＬＵ命令識別子を含んでおり、ビット１３：１１はレジスタ２８６のうちの第１のレジスタの識別子を含み、ビット１０：８はレジスタ２８６のうちの第２のレジスタの識別子を含み、ビット７：５はシフトすべきビット数またはレジスタ２８６のうちの第３のレジスタの識別子を含み、ビット４：２はレジスタ２８６のうちの宛て先レジスタの識別子を含み、そしてビット１：０はＡＬＵ制御ビットを含む。ＡＬＵ制御ビットは、ここでは「ＡＣＣ」と略される。以下、より詳細に論じられるように、ＡＬＵ制御ビットはＡＬＵ命令の動作を制御する。
【００８６】
処理要素３４Ａによって使用されるＡＬＵ命令のセットは、下記の命令を含む：
ＭＵＬＴＳＳ：
構文：ＭＵＬＴＳＳ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：レジスタＲｘおよびＲｙ内の符号付き値の乗算を実行するようにＡＬＵ２８２に命令する制御信号を、制御ユニット２８０に出力させ、それから「ｓｈｉｆｔ」によって指定された量だけ積を左にシフトする。積をシフトした後に、ＡＬＵ２８２はＡＣＣによって指定されたビットをこの積から抽出する。それからＡＬＵ２８２は、これらのビットを出力する。もしＡＣＣ＝０であれば、ＡＬＵ２８２は積の下側３２ビットを抽出する。もしＡＣＣ＝１であれば、ＡＬＵ２８２は積の中央３２ビットを抽出する。もしＡＣＣ＝２であれば、ＡＬＵ２８２は積の上側３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６内のＲｚに方向付けるために、制御ユニット２８０をして制御信号を多重化装置２８４に出力させる。
【００８７】
ＭＵＬＴＳＵ：
構文：ＭＵＬＴＳＵ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：Ｒｘ内の符号付き値とＲｙ内の無符号の値との乗算を実行し、それから「ｓｈｉｆｔ」によって指定された量だけ積を左にシフトするようにＡＬＵ２８２に命令する制御信号を、制御ユニット２８０に出力させる。積をシフトした後に、ＡＬＵ２８２はＡＣＣによって指定されたビットをこの積から抽出する。それからＡＬＵ２８２はこれらのビットを出力する。もしＡＣＣ＝０であれば、ＡＬＵ２８２は積の下側３２ビットを抽出する。もしＡＣＣ＝１であれば、ＡＬＵ２８２は積の中央３２ビットを抽出する。もしＡＣＣ＝２であればＡＬＵ２８２は積の上側３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６内のＲｚに方向付けるために、制御ユニット２８０をして制御信号を多重化装置２８４に出力させる。
【００８８】
ＭＵＬＴＵＵ：
構文：ＭＵＬＴＵＵ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：レジスタＲｘおよびＲｙ内の無符号の値の乗算を実行し、それから「ｓｈｉｆｔ」によって指定された量だけ積を左にシフトするようにＡＬＵ２８２に命令する制御信号を、制御ユニット２８０に出力させる。積をシフトした後に、ＡＬＵ２８２はＡＣＣによって指定されたビットをこの積から抽出する。それからＡＬＵ２８２はこれらのビットを出力する。もしＡＣＣ＝０であれば、ＡＬＵ２８２は積の下側３２ビットを抽出し、これらの３２ビットをＲｚに記憶する。もしＡＣＣ＝１であれば、ＡＬＵ２８２は積の中央３２ビットを抽出する。もしＡＣＣ＝２であれば、ＡＬＵ２８２は積の上側３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６内のＲｚに方向付けるために、制御ユニット２８０をして制御信号を多重化装置２８４に出力させる。
【００８９】
ＭＡＣＳＳ：
構文：ＭＡＣＳＳ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：レジスタＲｘとＲｙ内の符号付き値の乗算を実行するようにＡＬＵ２８２に命令する制御信号を、制御ユニット２８０に出力させ、それから「ｓｈｉｆｔ」によって指定された量だけ積を左にシフトする。積をシフトした後に、ＡＬＵ２８２はＡＣＣによって指定された３２ビットをこの積から抽出し、それからこれらの３２ビットをＲｚ内の値に加算し、その結果得られたビットを出力する。もしＡＣＣ＝０であれば、ＡＬＵ２８２は積の下側３２ビットを抽出する。もしＡＣＣ＝１であれば、ＡＬＵ２８２は積の中央３２ビットを抽出する。もしＡＣＣ＝２であれば、ＡＬＵ２８２は積の上側３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６内のＲｚに方向付けるために、制御ユニット２８０をして制御信号を多重化装置２８４に出力させる。
【００９０】
ＭＡＣＳＵ：
構文：ＭＡＣＳＵ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：Ｒｘ内の符号付き値とＲｙ内の無符号の値との乗算を実行し、それから「ｓｈｉｆｔ」によって指定された量だけ積を左にシフトするようにＡＬＵ２８２に命令する制御信号を、制御ユニット２８０に出力させる。積をシフトした後に、ＡＬＵ２８２はＡＣＣによって指定された３２ビットをこの積から抽出する。それからＡＬＵ２８２は、これらの３２ビットをＲｚ内の値に加算して、その結果得られたビットを出力する。もしＡＣＣ＝０であれば、ＡＬＵ２８２は積の下側３２ビットを抽出する。もしＡＣＣ＝１であれば、ＡＬＵ２８２は積の中央３２ビットを抽出する。もしＡＣＣ＝２であれば、ＡＬＵ２８２は積の上側３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６内のＲｚに方向付けるために、制御ユニット２８０をして制御信号を多重化装置２８４に出力させる。
【００９１】
ＭＡＣＵＵ：
構文：ＭＡＣＵＵ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：レジスタＲｘおよびＲｙ内の無符号の値の乗算を実行し、それから「ｓｈｉｆｔ」によって指定された量だけ積を左にシフトするようにＡＬＵ２８２に命令する制御信号を、制御ユニット２８０に出力させる。積をシフトした後に、ＡＬＵ２８２はＡＣＣによって指定された３２ビットをこの積から抽出し、それからこれらの３２ビットをＲｚ内の値に加算する。それからＡＬＵ２８２は、その結果得られたビットを出力する。もしＡＣＣ＝０であれば、ＡＬＵ２８２は積の下側３２ビットを抽出する。もしＡＣＣ＝１であれば、ＡＬＵ２８２は積の中央３２ビットを抽出する。もしＡＣＣ＝２であれば、ＡＬＵ２８２は積の上側３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６内のＲｚに方向付けるために、制御ユニット２８０をして制御信号を多重化装置２８４に出力させる。
【００９２】
ＭＵＬＴＵＵＭＩＮ：
構文：ＭＵＬＴＵＵＭＩＮ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：レジスタＲｘおよびＲｙ内の無符号の値の乗算を実行し、それから「ｓｈｉｆｔ」によって指定された量だけ積を左にシフトするようにＡＬＵ２８２に命令する制御信号を、制御ユニット２８０に出力させる。それからＡＬＵ２８２は、ＡＣＣによって指定されたビットをこの積から抽出し、これらのビットがＲｚ内に記憶された数より小さい数を表しているかどうかを決定する。もしこれらのビットがＲｚ内に記憶された数より小さい数を表していれば、ＡＬＵ２８２はこれらのビットを出力する。もしＡＣＣ＝０であれば、ＡＬＵ２８２は積の下側３２ビットを抽出する。もしＡＣＣ＝１であれば、ＡＬＵ２８２は積の中央３２ビットを抽出する。もしＡＣＣ＝２であれば、ＡＬＵ２８２は積の上側３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６内のＲｚに方向付けるために、制御ユニット２８０をして制御信号を多重化装置２８４に出力させる。
【００９３】
ＭＡＣＳＳＤ：
構文：ＭＡＣＳＳＤ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：レジスタＲｘおよびＲｙ内の符号付き値の乗算を実行し、それから「ｓｈｉｆｔ」によって指定された量だけ積を左にシフトするようにＡＬＵ２８２に命令する制御信号を、制御ユニット２８０に出力させる。それからＡＬＵ２８２はＡＣＣによって指定された３２ビットをこの積から抽出する。積からこれらのビットを抽出した後に、ＡＬＵ２８２はこれらの３２ビットをＲｚに続くレジスタ（すなわち、Ｒｚ＋１）に記憶された値に加算する。これらの値を加算した後に、ＡＬＵ２８２は、合計値を出力する。もしＡＣＣ＝０であれば、ＡＬＵ２８２は積の下側３２ビットを抽出する。もしＡＣＣ＝１であれば、ＡＬＵ２８２は積の中央３２ビットを抽出する。もしＡＣＣ＝２であれば、ＡＬＵ２８２は積の上側３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６内のＲｚに方向付けるために、制御ユニット２８０をして制御信号を多重化装置２８４に出力させる。
【００９４】
ＭＡＣＳＵＤ：
構文：ＭＡＣＳＳＤ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：レジスタＲｘ内の符号付き値とレジスタＲｙ内の無符号の値との乗算を実行し、それから「ｓｈｉｆｔ」によって指定された量だけ積を左にシフトするようにＡＬＵ２８２に命令する制御信号を、制御ユニット２８０に出力させる。それからＡＬＵ２８２は、ＡＣＣによって指定された３２ビットをこの積から抽出する。これらのビットを積から抽出した後に、ＡＬＵ２８２は、Ｒｚに続くレジスタ（すなわち、Ｒｚ＋１）内に記憶された値にこれらの３２ビットを加算する。これらの値を加算した後に、ＡＬＵ２８２は合計値を出力する。もしＡＣＣ＝０であれば、ＡＬＵ２８２は積の下側３２ビットを抽出する。もしＡＣＣ＝１であれば、ＡＬＵ２８２は積の中央３２ビットを抽出する。もしＡＣＣ＝２であれば、ＡＬＵ２８２は積の上側３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６内のＲｚに方向付けるために、制御ユニット２８０をして制御信号を多重化装置２８４に出力させる。
【００９５】
ＭＡＣＵＵＤ：
構文：ＭＡＣＳＳＤ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：レジスタＲｘおよびＲｙ内の無符号の値の乗算を実行し、それから「ｓｈｉｆｔ」によって指定された量だけ積を左にシフトするようにＡＬＵ２８２に命令する制御信号を、制御ユニット２８０に出力させる。それからＡＬＵ２８２は、ＡＣＣによって指定された３２ビットをこの積から抽出する。積からこれらのビットを抽出した後に、ＡＬＵ２８２はこれらの３２ビットをＲｚに続くレジスタ（すなわち、Ｒｚ＋１）に記憶された値に加算する。これらの値を加算した後に、ＡＬＵ２８２は、合計値を出力する。もしＡＣＣ＝０であれば、ＡＬＵ２８２は積の下側３２ビットを抽出する。もしＡＣＣ＝１であれば、ＡＬＵ２８２は積の中央３２ビットを抽出する。もしＡＣＣ＝２であれば、ＡＬＵ２８２は積の上側３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６内のＲｚに方向付けるために、制御ユニット２８０をして制御信号を多重化装置２８４に出力させる。
【００９６】
ＭＡＳＳＳ：
構文：ＭＡＳＳＳ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：レジスタＲｘおよびＲｙ内の符号付き値の乗算を実行し、それから「ｓｈｉｆｔ」によって指定された量だけ積を左にシフトするようにＡＬＵ２８２に命令する制御信号を、制御ユニット２８０に出力させる。それからＡＬＵ２８２は、ＡＣＣによって指定された３２ビットをこの積から抽出する。これらのビットを抽出した後に、ＡＬＵ２８２はこれらのビットをＲｚ内の値から減算し、その結果得られたビットを出力する。もしＡＣＣ＝０であれば、ＡＬＵ２８２は積の下側３２ビットを抽出する。もしＡＣＣ＝１であれば、ＡＬＵ２８２は積の中央３２ビットを抽出する。もしＡＣＣ＝２であれば、ＡＬＵ２８２は積の上側３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６内のＲｚに方向付けるために、制御ユニット２８０をして制御信号を多重化装置２８４に出力させる。
【００９７】
ＭＡＳＳＵ：
構文：ＭＡＳＳＳ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：レジスタＲｘ内の符号付き値とＲｙ内の無符号の値との乗算を実行し、それから「ｓｈｉｆｔ」によって指定された量だけ積を左にシフトするようにＡＬＵ２８２に命令する制御信号を、制御ユニット２８０に出力させる。それからＡＬＵ２８２は、ＡＣＣによって指定された３２ビットをこの積から抽出する。これらのビットを抽出した後に、ＡＬＵ２８２は、Ｒｚ内の値からこれらのビットを減算し、その結果得られたビットを出力する。もしＡＣＣ＝０であれば、ＡＬＵ２８２は積の下側３２ビットを抽出する。もしＡＣＣ＝１であれば、ＡＬＵ２８２は積の中央３２ビットを抽出する。もしＡＣＣ＝２であれば、ＡＬＵ２８２は積の上側３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６内のＲｚに方向付けるために、制御ユニット２８０をして制御信号を多重化装置２８４に出力させる。
【００９８】
ＭＡＳＵＵ：
構文：ＭＡＳＵＵ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：レジスタＲｘおよびＲｙ内の無符号の値の乗算を実行し、それから「ｓｈｉｆｔ」によって指定された量だけ積を左にシフトするようにＡＬＵ２８２に命令する制御信号を、制御ユニット２８０に出力させる。これらの制御信号はまた、ＡＬＵ２８２をしてＡＣＣによって指定された３２ビットをこの積から抽出させる。これらのビットを抽出した後にＡＬＵ２８２はこれらのビットをＲｚ内の値から減算し、その結果得られた値を出力する。もしＡＣＣ＝０であれば、ＡＬＵ２８２は積の下側３２ビットを抽出する。もしＡＣＣ＝１であれば、ＡＬＵ２８２は積の中央３２ビットを抽出する。もしＡＣＣ＝２であれば、ＡＬＵ２８２は積の上側３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６内のＲｚに方向付けるために、制御ユニット２８０をして制御信号を多重化装置２８４に出力させる。
【００９９】
ＥＧＣＯＭＰ：
構文：ＥＧＣＯＭＰ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：処理要素３４Ａが現在処理しているＭＩＤＩ音声を定義する１セットの音声パラメータの制御ワードに基づいて、演算を制御ユニット２８０に選択させる。ＥＧＣＯＭＰ命令はまた、選択された演算を実行するようにＡＬＵ２８２に命令する制御信号を、制御ユニット２８０に出力させる。第１のモードでＡＬＵ２８２は、Ｒｘ内の値をＲｙ内の値に加算して、その結果得られた合計値を出力する。第２のモードでＡＬＵ２８２は、Ｒｘ内の値とＲｙ内の値との無符号の乗算を実行し、ｓｈｉｆｔで指定された量だけ積を左にシフトし、それからこのシフトされた積の最も重要な３２ビットを出力する。第３のモードで、ＡＬＵ２８２はＲｘ内の値を出力する。第４のモードで、ＡＬＵ２８２はＲｙの値を出力する。ＥＧＣＯＭＰ命令との関連で、ゼロというＡＣＣ値は、現在ＭＩＤＩ音声のボリュームエンベロープのための新しい値を計算するようにＡＬＵ２８２に命令するための制御信号を、制御ユニット２８０に出力させ得る。１というＡＣＣ値は、現在ＭＩＤＩ音声のための新しい変調エンベロープを計算するようにＡＬＵ２８２に命令する制御信号を、制御ユニット２８０に出力させ得る。ＥＧＣＯＭＰ命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６内のＲｚに方向付けるために、制御ユニット２８０をして制御信号を多重化装置２８４に出力させる。
【０１００】
あるモードに関連するＥＧＣＯＭＰ命令の演算を実行する前に、ＡＬＵ２８２は、最初にこのモードを計算する。例えばＡＬＵ２８２は、下記の方程式：
モード＝ｖｐｓ．制御ワード（（ＡＣＣ＊８＋第２ループカウンタ（１：０）＊２＋１）：（ＡＣＣ＊８＋第２ループカウンタ（１：０）＊２））
を使用してモードを計算できる。
【０１０１】
言い換えれば、「モード」の値は、現在音声パラメータセットの制御ワード内の２ビットに等しい。これら２ビットのうちのより重要なビットのインデックスは、下記のステップ：
（１）ＡＣＣの値に８を乗算すること（すなわち、ＡＣＣの値のビット単位の表現を３桁だけ左にシフトすること）によって、第１の積を生成することと、
（２）第２のループカウンタの最下位の２ビットに２を乗算すること（すなわち、ＡＣＣの値のビット単位の表現を１桁だけ左にシフトすること）によって、第２の積を生成することと、
（３）第１の積と第２の積と数１とを加算することと、を実行することによって決定される。
【０１０２】
制御ワードの２ビットのうちのより重要でないビットのインデックスは、第３ステップでの数１を加算することを除いて同じステップを実行することによって決定される。例えば、制御ワードは、０ｘ００００８０７（すなわち、０ｂ００００，００００，００００，００００，０１００，００００，０１１１）に等しい。更に、ＡＣＣの値は０ｂ０００１であり、また第２のループカウンタの値は０ｂ０００１である。この例では、制御ワードのより重要なビットのインデックスは０ｂ００００１０１１（すなわち、１０進数における数、１１）であり、制御ワードのより重要でないビットのインデックスは０ｂ００００１０１０（すなわち、１０進数における数、１０）である。前の文章では、アンダーラインされたインデックス値のビットはＡＣＣからのビットを表し、イタリック体で書かれたインデックス値のビットは第２のループカウンタからのビットを表す。したがって、このモードは、値０と１が制御ワードのそれぞれ位置１１と１０にあるので、０１である(すなわち、１０進数の数、１である)。モードは０１であるので、ＡＬＵ２８２はＲｘの値とＲｙの値との無符号の乗算を実行し、ｓｈｉｆｔによって指定された量だけ積を左にシフトし、それからこのシフトされた積の最も重要な３２ビットを出力する。
【０１０３】
エンベロープ生成は、個別の音符のボリュームまたは変調品質をモデル化する方法である。各音符は、幾つかの位相を有する。例えば１つの音符は、遅延位相、アタック位相、保持位相、減衰位相、持続位相および解放位相を有する。遅延位相は、アタック位相の開始に先立つ時間量を定義する。アタック位相の期間中に、ボリュームレベルまたは変調レベルはピークレベルに高められる。保持位相の期間中、ボリュームレベルまたは変調レベルはピークレベルに維持される。減衰位相の期間中に、ボリュームレベルまたは変調レベルは持続レベルに下げられる。持続レベルの期間中、ボリュームレベルまたは変調レベルは持続レベルに維持される。解放位相の期間中に、ボリュームレベルまたは変調レベルはゼロにまで低下する。更にボリュームレベルまたは変調レベルの変化は、直線的または指数関数的である。エンベロープ生成位相の長さは、サブフレームの点から定義される。用語「サブフレーム」は、ＭＩＤＩフレームの１／４を指す。例えば、もしＭＩＤＩフレームが１０ミリ秒であれば、サブフレームは２．５ミリ秒である。例えばＭＩＤＩ音声のアタック位相は１サブフレーム持続することが可能であり、ＭＩＤＩ音声の減衰位相は１サブフレーム持続することが可能性であり、ＭＩＤＩ音声の持続位相は２サブフレーム持続することが可能である。
【０１０４】
ＥＧＣＯＭＰ命令は、エンベロープ生成を実行するための演算を実行する。例えば加算演算（すなわち、モード００）は、１サブフレーム期間中のボリュームレベルまたは変調レベルの直線的ランプアップ（例えば、アタック位相の期間中）または直線的ランプダウン（すなわち、減衰位相または解放位相の期間中）に対応する。乗算演算（すなわち、モード０１）は、１サブフレーム期間中のボリュームレベルまたは変調レベルの指数関数的ランプアップまたはランプダウン（すなわち、減衰位相または解放位相の期間中）に対応する。割当て演算（すなわち、モード１０および１１）は、１サブフレーム期間中のボリュームまたは変調強度の持続に対応する。制御ワードでは、ビット１：０はボリュームに関して第１のサブフレームにおいてどのＥＧＣＯＭＰモードを使用すべきかを示し、ビット３：２はボリュームに関して第２のサブフレームにおいてどのＥＧＣＯＭＰモードを使用すべきかを示し、ビット５：４はボリュームに関して第３のサブフレームにおいてどのＥＧＣＯＭＰモードを使用すべきかを示し、ビット７：６はボリュームに関して第４のサブフレームにおいてどのＥＧＣＯＭＰモードを使用すべきかを示し、ビット９：８は変調に関して第１のサブフレームにおいてどのＥＧＣＯＭＰモードを使用すべきかを示し、ビット１１：１０は変調に関して第２のサブフレームにおいてどのＥＧＣＯＭＰモードを使用すべきかを示し、ビット１３：１２は変調に関して第３のサブフレームにおいてどのＥＧＣＯＭＰモードを使用すべきかを示し、ビット１５：１４は変調に関して第４のサブフレームにおいてどのＥＧＣＯＭＰモードを使用すべきかを示す。
【０１０５】
ロード／ストア命令は、処理要素３４Ａの外部の数個のモジュールのうちの１つから情報を読み取る、または数個のモジュールのうちの１つに情報を書き込むための命令である。制御ユニット２８０がロード／ストア命令に遭遇すると、制御ユニット２８０はロード／ストア命令が完了するまでブロックする。１つの例示的フォーマットでは、各ロード／ストア命令は１８ビット長である。例えば、ロード／ストア命令のビット１７：１６は留保され、ビット１５：１３はロード／ストア命令識別子を含み、ビット１２：６はロード発信元アドレスまたはストア宛て先アドレスを含み、ビット５：３はレジスタ２８６の第１のレジスタの識別子を含み、ビット２：０はレジスタ２８６の第２のレジスタの識別子を含む。
【０１０６】
処理要素３４Ａによって使用されるロード／ストア命令のセットは下記の命令を含む：
ＬＯＡＤＤＡＴＡ
構文：ＬＯＡＤＤＡＴＡ  ａｄｄｒｅｓｓ，Ｒｙ，Ｒｚ．
機能：もしＲｙがＲｚに等しければ、Ｒｙにアドレスの値をロードする。もしアドレスが偶数であれば、レジスタＲｙおよびＲｚにそれぞれアドレスおよび（アドレス＋１）の値をロードする。もしアドレスが奇数であれば、ＲｙおよびＲｚにそれぞれ（アドレス−１）およびアドレスの値をロードする。
【０１０７】
ＳＴＯＲＥＤＡＴＡ
構文：ＳＴＯＲＥＤＡＴＡ  ａｄｄｒｅｓｓ，Ｒｙ，Ｒｚ．
機能：もしＲｙがＲｚに等しければ、Ｒｙの値をアドレスに記憶する。もしアドレスが偶数であれば、ＲｙおよびＲｚの値をアドレスおよび（アドレス＋１）にそれぞれ記憶する。もしアドレスが奇数であれば、ＲｙおよびＲｚの値をそれぞれ（アドレス−１）およびアドレスに記憶する。
【０１０８】
ＬＯＡＤＳＵＭ
構文：ＬＯＡＤＳＵＭ  Ｒx，Ｒy．
機能：サンプルカウントによって指示された加算バッファ４０内の値を、レジスタＲｙおよびＲｚにロードする。ＬＯＡＤＳＵＭ命令で使用されるサンプルカウントは、以下に説明されるＳＴＯＲＥＳＵＭ命令で使用される同じカウントである。
【０１０９】
ＬＯＡＤＦＩＦＯ
構文：ＬＯＡＤＦＩＦＯ  ｆｉｆｏ ｌｏｗ ｈｉｇｈ，ｆｉｆｏ ｓｉｇｎｅｄ ｕｎｓｉｇｎｅｄ，Ｒｘ.
機能：ＷＦＵインタフェースＦＩＦＯ２９８のヘッドからある値を除去して、その値をＲｘに記憶する。この値がロードされるレジスタ２８６の１つ、および値がレジスタにロードされる仕方は、ｆｉｆｏ ｌｏｗ ｈｉｇｈフラグとｆｉｆｏ ｓｉｇｎｅｄ ｕｎｓｉｇｎｅｄフラグとに依存する。もしｆｉｆｏ ｌｏｗ ｈｉｇｈが０であれば、この値はＲｘの下側１６ビットにロードされる。もしｆｉｆｏ ｌｏｗ ｈｉｇｈが１であれば、この値はＲｘの上側１６ビットにロードされる。もしｆｉｆｏ ｓｉｇｎｅｄ ｕｎｓｉｇｎｅｄが０であれば、この値は無符号の数として記憶される。もしｆｉｆｏ ｓｉｇｎｅｄ ｕｎｓｉｇｎｅｄが１であれば、この値は符号付き数として記憶され、この値は３２ビットに符号付き拡張される。しかしながらｆｉｆｏ ｌｏｗ ｈｉｇｈフラグが１にセットされれば、ｆｉｆｏ ｓｉｇｎｅｄ ｕｎｓｉｇｎｅｄフラグは如何なる効果も有しない。
【０１１０】
ＳＴＯＲＥＷＦＵ
構文：ＳＴＯＲＥＷＦＵ  Ｒｘ．
機能：Ｒｘ内の値をＷＦＵ３６に送る。
【０１１１】
ＳＴＯＲＥＳＵＭ
構文：ＳＴＯＲＥＳＵＭ  ａｃｃ ｓａｔ ｍｏｄｅ，Ｒｘ，Ｒｙ．
機能：レジスタＲｘおよびＲｙ内の値を加算バッファ４０に記憶する。更にこの命令は、第１、第２のループカウンタに暗示的に依存するサンプルカウンタを送る。サンプルカウンタは、ディジタル波形のどのサンプルが処理要素３４Ａによって現在処理されているかを記述する。制御ユニット２８０が調整モジュール３２からリセットコマンドを受信すると、制御ユニット２８０はこの値をゼロに初期化する。その結果、制御ユニット２８０は、制御ユニット２８０がＳＴＯＲＥＳＵＭ命令に遭遇するたびにサンプルカウンタを１だけ増加させる。制御ユニット２８０は、サンプルカウンタを制御信号として加算バッファ４０に出力し得る。ａｃｃ ｓａｔ ｍｏｄｅパラメータは、加算バッファ４０がサンプルのための値を飽和させているかどうかを確定する。飽和は、サンプルのための値がこのサンプルのために記憶され得る最大数より高く上がるか、最小数より低く下がるときに発生する。もし飽和が可能にされれば、加算バッファ４０は、ＲｘおよびＲｙの値を加算することが、このサンプルのための値をこのサンプルに関して表され得る最大数より高く上がらせるか、または最小数より低く下がらせるときに、この値を最大数または最小数に維持する。もし飽和が可能にされなければ、加算バッファ４０は、ＲｘおよびＲｙの値を加算するときにサンプルのためのこの数をロールオーバー（roll over）する。更にａｃｃ ｓａｔ ｍｏｄｅパラメータは、加算バッファ４０がサンプルのための値をレジスタＲｘおよびＲｙの値と交換するかどうか、あるいはレジスタＲｘおよびＲｙの値を加算バッファ４０内のサンプルのための値に加算するかどうかを決定する。下記のチャートはａｃｃ ｓａｔ ｍｏｄｅパラメータの例示的動作を示す：
【表１】
2010522363.tif 000003
【０１１２】
ＬＯＡＤＬＦＯ
構文：ＬＯＡＤＬＦＯ  ｌｆｏ ｉｄ，ｌｆｏ ｕｐｄａｔｅ，Ｒｘ 
ここで
｛ｌｆｏ ｉｄ｝＝読み取られるＬＦＯのタイプ：２ビット
００：  ｍｏｄＬｆｏ  →  ピッチ
０１：  ｍｏｄＬｆｏ  →  利得
１０：  ｍｏｄＬｆｏ  →  周波数コーナー
１１：  ｖｉｂＬｆｏ  →  ピッチ
｛ｌｆｏ ｕｐｄａｔｅ｝＝現在出力の後にどのパラメータを更新すべきか：２ビット
００：  更新なし
０１：  ＬＦＯ値だけを更新
１０：  ＬＦＯ位相だけを更新
１１：  ＬＦＯ値と位相の両者を更新
機能：「ｌｆｏ ｉｄ」によって指定された識別子を有するＬＦＯ３８からの値を、Ｒｘにロードする。更にこの命令は、この値をＲｘにロードした後にどのパラメータを更新すべきかをＬＦＯ３８に命令する。
【０１１３】
上記に論じられたように、ＬＦＯ３８は、１つ以上の正確な三角形のディジタル波形を生成する。処理要素３４Ａの各々のために、ＬＦＯ３８は、４個の出力値、すなわち変調ピッチ値、変調利得値、変調周波数コーナー値、およびビブラートピッチ値を供給する。これらの出力値の各々は、三角形のディジタル波形についての変形版を表す。
【０１１４】
制御ユニット２８０がＬＯＡＤＬＦＯ命令を読み取ると、制御ユニット２８０は、「ｌｆｏ ｉｄ」パラメータを表す制御信号をＬＦＯ３８に出力する。「ｌｆｏ ｉｄ」パラメータを表す制御信号は、出力値の１つの値を処理要素３４Ａ内のインタフェースＦＩＦＯ２９６に送るように、ＬＦＯ３８に命令する。例えば、もし制御ユニット２８０が「ｌｆｏ ｉｄ」に関する値０１を表す制御信号を送れば、ＬＦＯ３８は変調利得出力値の値を送る。更に、制御ユニット２８０は、インタフェースＦＩＦＯ２９６からの出力をレジスタ２８６内のレジスタＲｚに方向付けるために、多重化装置２８４に制御信号を出力する。
【０１１５】
更に、制御ユニット２８０がＬＯＡＤＬＦＯ命令を読み取ると、制御ユニット２８０は、「ｌｆｏ ｕｐｄａｔｅ」パラメータを表す制御信号をＬＦＯ３８に出力する。「ｌｆｏ ｕｐｄａｔｅ」パラメータを表す制御信号は、出力値を更新する方法をＬＦＯ３８に命令する。ＬＦＯ３８が「ｌｆｏ ｕｐｄａｔｅ」パラメータを表す制御信号を受信すると、ＬＦＯ３８は、処理要素３４Ａが現在処理しているＭＩＤＩ音声の音声パラメータのセットに基づいて実行すべき演算を選択する。例えばＬＦＯ３８は、ＬＦＯ３８が「遅延」状態または「生成」状態にあるかどうかを決定するために、音声パラメータセットの制御ワードを使用する。
【０１１６】
ＬＦＯ３８が「遅延」状態または「生成」状態にあるかどうかを決定するために、ＬＦＯ３８は、ＶＰＳ  ＲＡＭ４６Ａに記憶された音声パラメータセットの制御ワードのビットにアクセスする。例えば、制御ワードのビット２３：１６は、ＬＦＯが「生成」モードにあるか、または「遅延」状態にあるかどうかを決定する。「生成」状態では、ＬＦＯ３８は、ピッチのためのパラメータを乗算する。「遅延」状態では、ＬＦＯ３８は、ピッチのためのパラメータを乗算しない。例えば、制御ワードのビット１６は、ＬＦＯ３８の変調モードが現在ＭＩＤＩフレームの第１のサブフレームの期間中に遅延状態または生成状態にあるかどうかを示し、ビット１７は、変調モードＬＦＯ３８が現在ＭＩＤＩフレームの第２のサブフレームの期間中に遅延状態または生成状態にあるかどうかを示し、ビット１８は、変調モードＬＦＯ３８が現在ＭＩＤＩフレームの第３のサブフレームの期間中に遅延状態または生成状態にあるかどうかを示し、ビット１９は、変調モードＬＦＯ３８が現在ＭＩＤＩフレームの第４のサブフレームの期間中に遅延状態または生成状態にあるかどうかを示す。
【０１１７】
更に、制御ワードのビット２０は、ＬＦＯ３８のビブラートモードが現在ＭＩＤＩフレームの第１のサブフレームの期間中に遅延状態または生成状態にあるかどうかを示し、制御ワードのビット２１は、ＬＦＯ３８のビブラートモードが現在ＭＩＤＩフレームの第２のサブフレームの期間中に遅延状態または生成状態にあるかどうかを示し、制御ワードのビット２２は、ＬＦＯ３８のビブラートモードが現在ＭＩＤＩフレームの第３のサブフレームの期間中に遅延状態または生成状態にあるかどうかを示し、制御ワードのビット２３は、ＬＦＯ３８のビブラートモードが現在ＭＩＤＩフレームの第４のサブフレームの期間中に遅延状態または生成状態にあるかどうかを示す。
【０１１８】
動作（すなわち、「遅延」モードまたは「生成」モードで実行すべきかどうか）を選択した後に、ＬＦＯ３８は選択された動作を実行する。もしＬＦＯ３８が遅延状態にあれば、ＬＦＯ３８は、「ｌｆｏ ｉｄ」パラメータによって識別されるＬＦＯのモードに関するバイアス値を、このモードに関するＬＦＯ３８の出力レジスタに記憶する。他方、もしＬＦＯ３８が生成状態にあれば、ＬＦＯ３８は、「ｌｆｏ ｕｐｄａｔｅ」パラメータの値が２または３に等しいかどうかを最初に決定する。もし「ｌｆｏ ｕｐｄａｔｅ」の値が２または３に等しければ、ＬＦＯ３８はＬＦＯ位相を更新し、またはＬＦＯ値および位相を更新する。もし「ｌｆｏ ｕｐｄａｔｅ」パラメータの値が２または３に等しければ、ＬＦＯ３８はＬＦＯ比をＬＦＯの現在位相に加算することによってＬＦＯの位相を更新する。次にＬＦＯ３８は、「ｌｆｏ ｕｐｄａｔｅ」パラメータの値が１または３に等しいかどうかを決定する。もし「ｌｆｏ ｕｐｄａｔｅ」の値が１または３に等しければ、ＬＦＯ３８は、ＬＦＯ３８内の現在サンプルに利得を乗算してバイアス値を加算することによって、「ｌｆｏ ｉｄ」パラメータによって識別されるＬＦＯ出力レジスタに関する更新値を計算する。
【０１１９】
下記の例示的擬似コードは、ＬＯＡＤＬＦＯ命令の動作を要約する：
【数１】
2010522363.tif 000004
【０１２０】
この例示的擬似コードは、処理要素３４ＡとＬＦＯ３８とによって実行されるソフトウエア命令を表すことを意味しない。むしろこの擬似コードは、処理要素３４ＡとＬＦＯ３８とのハードウエアで実行される動作を記述する。
【０１２１】
制御命令は、制御ユニット２８０の挙動を制御するための命令である。１つの例示的フォーマットでは、各制御命令は１６ビット長である。例えば、ビット１５：１３は制御命令識別子を含み、ビット１２：４はメモリアドレスを含み、ビット３：０は制御のためのマスクを含む。
【０１２２】
処理要素３４Ａによって使用される制御命令のセットは、下記の命令を含む：
ＪＵＭＰＤ
構文：ＪＵＭＰＤ  ａｄｄｒｅｓｓ，ｍａｓｋ
機能：もし［ｍａｓｋ］のビット単位のＡＮＤ演算とＶＰＳ  ＲＡＭユニット４６Ａ内の制御ワードのビット２７：２４が非ゼロ値に評価すれば、命令は制御ユニット２８０をしてプログラムカウンタ２９０に［ａｄｄｒｅｓｓ］の値をロードさせる。制御ワードのビット２７は、波形がループされているかどうかを示す。制御ワードのビット２６は、波形が８ビットまたは１６ビット幅であるかどうかを示す。制御ワードのビット２５は、波形がステレオであるかどうかを示す。制御ワードのビット２４は、フィルタが使用され得るかどうかを示す。制御ユニット２８０はＪＵＭＰＤ命令に続く命令を既にロードしているので、プログラムカウンタ２９０の値の更新はＪＵＭＰＤ命令に続く命令に続いて有効になる。
【０１２３】
ＪＵＭＰＮＤ
構文：ＪＵＭＰＮＤ  ａｄｄｒｅｓｓ，ｍａｓｋ
機能：もし［ｍａｓｋ］のビット単位のＡＮＤ演算とＶＰＳ  ＲＡＭユニット４６Ａ内の制御ワードのビット２７：２４がゼロ値に評価すれば、命令は制御ユニット２８０をしてプログラムカウンタ２９０に［ａｄｄｒｅｓｓ］の値をロードさせる。ビット単位のＡＮＤ演算の結果は、この結果が１を含まないときに偽と評価する。制御ユニット２８０はＪＵＭＰＮＤ命令に続く命令を既にロードしているので、プログラムカウンタ２９０の値の更新は、ＪＵＭＰNＤ命令に続く命令に続いて有効になる。
【０１２４】
ＬＯＯＰ１ＢＥＧＩＮ
構文：ＬＯＯＰ１ＢＥＧＩＮ  ｃｏｕｎｔ
機能：第１のループの始まりを開始する。制御ユニット２８０は、制御ユニット２８０がＬＯＯＰ１ＥＮＤＤ命令［ｃｏｕｎｔ］プラス１回に遭遇したとき、プログラムカウンタ２９０の値をＬＯＯＰ１ＢＥＧＩＮ命令に続く命令のメモリアドレスにセットする。更に、制御ユニット２８０は、第１のループカウンタ３０４の値を［ｃｏｕｎｔ］に等しくセットする。例えば、制御ユニット２８０が命令「ＬＯＯＰ１ＢＥＧＩＮ１１９」に遭遇したとき、制御ユニット２８０は、プログラムカウンタ２９０の値をＬＯＯＰ１ＢＥＧＩＮ命令１２０回に続く命令のメモリアドレスにセットする。
【０１２５】
ＬＯＯＰ１ＥＮＤＤ
構文：ＬＯＯＰ１ＥＮＤＤ
機能：ＬＯＯＰ１ＥＮＤＤの後の命令は、第１のループ内の最後の命令である。制御ユニット２８０は、第１のループカウンタ３０４の値がゼロより大きいかどうかを決定する。もし第１のループカウンタ３０４の値がゼロより大ければ、制御ユニット２８０は第１のループカウンタ３０４の値を減らして、プログラムカウンタ２９０の値をＬＯＯＰ１ＢＥＧＩＮ命令に続く命令のメモリアドレスにセットする。そうではなくて、もし第１のループカウンタ３０４の値がゼロより大きくなければ、制御ユニット２８０は単にプログラムカウンタ２９０の値を増加させる。
【０１２６】
ＬＯＯＰ２ＢＥＧＩＮ
構文：ＬＯＯＰ２ＢＥＧＩＮ  ｃｏｕｎｔ．
機能：第２のループの始まりを開始する。制御ユニット２８０は、制御ユニット２８０がＬＯＯＰ２ＥＮＤＤ命令［ｃｏｕｎｔ］プラス１回に遭遇したとき、プログラムカウンタ２９０の値をＬＯＯＰ２ＢＥＧＩＮ命令に続く命令のメモリアドレスにセットする。更に、制御ユニット２８０は、第２のループカウンタ３０６の値を［ｃｏｕｎｔ］に等しくセットする。
【０１２７】
ＬＯＯＰ２ＥＮＤＤ
構文：ＬＯＯＰ２ＥＮＤＤ
機能：ＬＯＯＰ２ＥＮＤＤの後の命令は、第２のループ内の最後の命令である。制御ユニット２８０は、もし第２のループカウンタがゼロでなければ第２のループカウンタ３０６を減らして、プログラムカウンタ２９０の値をＬＯＯＰ２ＢＥＧＩＮ命令のメモリアドレスにセットする。
【０１２８】
ＣＴＲＬ ＮＯＰ
構文：ＣＴＲＬ ＮＯＰ
機能：制御ユニット２８０は何もしない。
【０１２９】
ＥＸＩＴ
構文：ＥＸＩＴ
機能：制御ユニット２８０がＥＸＩＴ命令に遭遇したとき、制御ユニット２８０は、処理要素３４ＡがＭＩＤＩフレームのディジタル波形全体の生成を完了したことを調整モジュール３２に知らせるための制御信号を、調整モジュール３２に出力する。制御信号を送出した後に、制御ユニット２８０は、調整モジュール３２がプログラムカウンタ２９０の値を初期値に（例えばゼロに）リセットするための信号を制御ユニット２８０に送るまで待機する。
【０１３０】
処理要素３４ＡがＭＩＤＩ音声のためのディジタル波形を生成し始める前に、調整モジュール３２は、リセット信号を制御ユニット２８０に送出する。制御ユニット２８０がこのリセット信号を調整モジュール３２から受信すると、制御ユニット２８０は、第１のループカウンタ３０４と第２のループカウンタ３０６とプログラムカウンタ２９０のそれぞれの値を、これらの初期値にリセットする。例えば制御ユニット２８０は、第１のループカウンタ３０４と第２のループカウンタ３０６とプログラムカウンタ２９０のそれぞれの値を、ゼロにリセットする。
【０１３１】
引き続いて調整モジュール３２は、ＶＰＳ  ＲＡＭユニット４６Ａに記述されたＭＩＤＩ音声のためのディジタル波形を生成し始めるように処理要素３４Ａに命令するためのイネーブル（許可）信号を、制御ユニット２８０に送る。制御ユニット２８０がイネーブル信号を受信すると、処理要素３４は、プログラムＲＡＭユニット４４Ａ内の連続するメモリ位置に記憶された一連のプログラム命令（すなわち、プログラム）を実行し始める。プログラムＲＡＭユニット４４Ａ内のこれらのプログラム命令の各々は、上記の命令のセット内の命令の事例である。
【０１３２】
一般に、処理要素３４Ａによって実行されるプログラムは、第１のループとこの第１のループ内に入れ子にされた第２のループとからなる。第１のループの各サイクルの期間中に、処理要素３４Ａは、第２のループが終了するまで第２のループ全体を実行する。第２のループが終了したとき、処理要素３４Ａは、ＭＩＤＩ音声のための波形の１つのサンプルのために１つの記号を導き出している。第１のループが終了したとき、処理要素３４Ａは、１つのＭＩＤＩフレーム全体に関してＭＩＤＩ音声のための波形の各サンプルのために各記号を既に導き出している。例えば、上記の例示的命令セット内の下記の一連の命令は、処理要素３４Ａによって実行されるプログラムの基本的構造を略述する：
【数２】
2010522363.tif 000005
【０１３３】
この例示的一連の命令では、二重前向きスラッシュ（double forward slash：//）によって先行されたワードは、記述された演算を実行するための１つ以上の命令を表す。更にこの例では、ＣＴＲＬ ＮＯＰ演算は、制御ユニット２８０が、それぞれのＬＯＯＰ１ＢＥＧＩＮ命令またはＬＯＯＰ２ＢＥＧＩＮ命令を含むプログラムＲＡＭ３４Ａの位置にアクセスするためにプログラムカウンタ２９０内の更新済みメモリアドレスを使用する前に、制御ユニット２８０がＬＯＯＰ１ＥＮＤＤ命令またはＬＯＯＰ２ＥＮＤＤ命令に続く命令の実行を既に開始しているので、ＬＯＯＰ１ＥＮＤＤ命令およびＬＯＯＰ２ＥＮＤＤ命令に続いて行われる。言い換えれば、制御ユニット２８０は、ループ終了命令に続く命令を処理パイプラインに既に加えている。
【０１３４】
プログラムＲＡＭユニット４４Ａ内のプログラムを実行するために、制御ユニット２８０は、プログラムカウンタ２９０内に記憶されたメモリアドレスを有するプログラムＲＡＭユニット４４Ａ内のメモリ位置を読み取るための要求を、プログラムＲＡＭユニット４４Ａに送る。この要求に応じて、プログラムＲＡＭユニット４４Ａは、プログラムカウンタ２９０に記憶されたメモリアドレスを有するプログラムＲＡＭユニット４４Ａ内のメモリ位置の内容を、制御ユニット２８０に送る。
【０１３５】
要求されたメモリ位置の内容は、処理要素３４Ａが並行して実行し得る２つのプログラム命令を含む１つの４０ビットワードである。例えば、プログラムＲＡＭユニット４４Ａ内の１つのメモリ位置は：
（１）１ワード内のＡＬＵ命令およびロード／ストア命令；
（２）１ワード内のロード／ストア命令および第２のロード／ストア命令；
（３）１ワード内の制御命令およびロード／ストア命令；または
（４）１ワード内のＡＬＵ命令および制御命令；
のうちの１つを含む。ＡＬＵ命令とロード／ストア命令とを含むワードでは、ビット０：１７はロード／ストア命令であり、ビット１８：３７はＡＬＵ命令であり、ビット３８および３９はこのワードがＡＬＵ命令とロード／ストア命令とを含むことを示すフラグである。２つのロード命令を含むワードでは、ビット０：１７は第１のロード／ストア命令であり、ビット１８および１９は留保され、ビット２０：３７は第２のロード／ストア命令であり、ビット３８および３９はこのワードが２つのロード／ストア命令を含むことを示すフラグである。制御命令とロード命令とを含むワードでは、ビット０：１７はロード命令であり、ビット１８および１９は留保され、ビット２０：３５は制御命令であり、ビット３６および３７は留保され、ビット３８および３９はこのワードが制御命令とロード／ストア命令とを含むことを示すフラグである。ＡＬＵ命令と制御命令とを含むワードでは、ビット０：１５は制御命令であり、ビット１６および１７は留保され、ビット１８：３７はＡＬＵ命令であり、ビット３８および３９はこのワードがＡＬＵ命令と制御命令とを含むことを示すフラグである。
【０１３６】
メモリ位置の内容を受信した後に、制御ユニット２８０は、メモリ位置の内容に指定された命令を復号して適用する。制御ユニット２８０は、命令の各々を復号して原子的に適用する。言い換えれば、いったん制御ユニット２８０がある命令を実行し始めると、制御ユニット２８０は、制御ユニット２８０がこの命令を実行し終わるまでこの命令によって使用される、あるいは生み出される如何なるデータも変更しない。更にある幾つかの例では、制御ユニット２８０は、プログラムＲＡＭユニット４４Ａから受信されたワード内の両方の命令を並行して復号して適用する。いったん制御ユニット２８０がワード内の命令を実行し終わると、制御ユニット２８０は、プログラムカウンタ２９０をインクリメントし（プログラムカウンタ２９０の値を増加させ）、このインクリメントされたプログラムカウンタによって識別されるプログラムＲＡＭユニット４４Ａ内のメモリ位置の内容を要求する。
【０１３７】
処理要素３４のために特化された命令セットの使用は、１つ以上の利点を提供する。例えば、ディジタル波形を生成するために種々のオーディオ処理演算が実行される。第１のアプローチでは、オーディオ処理演算は、ハードウエアにおいて実現される。例えば、これらの演算を実施するために特定用途向け集積回路（ＡＳＩＣ）が設計されるであろう。しかしながら、これらの演算をハードウエアで実現することは、他の目的のためのこのようなハードウエアの再使用を妨げる。すなわち、いったんこれらの演算を実現するために設計されたＡＳＩＣがデバイスにインストールされると、ＡＳＩＣは一般に異なる演算を実行するように変更されることはできない。第２のアプローチでは、汎用命令セットを使用するプロセッサが、オーディオ処理演算を実行する。しかしながら、このようなプロセッサの使用は、浪費的である。例えば、汎用命令セットを使用するプロセッサは、ディジタル波形の生成に決して使用されない命令を復号するための回路を含む。特化された命令セットの使用は、これら２つのアプローチの弱点を解決する。例えば、特化された命令セットの使用は、ディジタル波形を生成するためにこれらの命令を使用するプログラムの更新を可能にする。同時に、特化された命令セットの使用は、チップ設計者がプロセッサの実現を単純にしておくことを可能にする。
【０１３８】
更に、音声パラメータセット内の値に基づいて異なる機能を実行するＥＧＣＯＭＰおよびＬＯＡＤＬＦＯといった特化された命令の使用は、１つ以上の更なる利点をもたらす。例えば、ＥＧＣＯＭＰおよびＬＯＡＤＬＦＯはそれぞれ単一の命令として実現されるので、これらの命令を実行するために条件付き飛び越しまたは分岐の必要がない。ＥＧＣＯＭＰおよびＬＯＡＤＬＦＯが条件付き飛び越しまたは分岐を含まないため、これらの条件付き飛び越しまたは分岐の期間中にプログラムカウンタを更新する必要がない。更に、ＥＧＣＯＭＰおよびＬＯＡＤＬＦＯはそれぞれ単一の命令として実現されるので、ＥＧＣＯＭＰおよびＬＯＡＤＬＦＯの演算を実行するために別々の命令をロードする必要がない。例えば、ＥＧＣＯＭＰ命令のケース１は、乗算演算を必要とする。しかしながら、ＥＧＣＯＭＰは単一の命令であるから、プログラムメモリから別の乗算演算をロードする必要はない。ＥＧＣＯＭＰおよびＬＯＡＤＬＦＯはプログラムメモリからの多数のロードを必要としないので、ＥＧＣＯＭＰおよびＬＯＡＤＬＦＯは、ＥＧＣＯＭＰおよびＬＯＡＤＬＦＯが別々の命令のセットとして実現された場合より少ないクロックサイクルで実行される。
【０１３９】
もう１つの例では、音声パラメータセットの値に基づいて異なる機能を実行する特化された命令の使用は、このような命令を使用するプログラムがよりコンパクトになり得るので、有利である。例えば、１つのＥＧＣＯＭＰ命令によって実行される演算を実現するために、１０個の別々の命令を必要とする。よりコンパクトなプログラムは、プログラマーにとってより読み易い。更に、よりコンパクトなプログラムはプログラムメモリ内で、より小さい空間を占める。よりコンパクトなプログラムは、プログラムメモリ内でより少ない空間を占めるので、プログラムメモリはより小さくなる。より小さなプログラムメモリはより安価に実現でき、チップセット上の空間を節約する。
【０１４０】
図１３は、オーディオデバイス４のＭＩＤＩハードウエアユニット１８内の処理要素３４Ａの例示的動作を示す流れ図である。図１３の例は処理要素３４Ａを参照しながら説明されるが、プロセッサ３４の各々はこの動作を同時に実行する。
【０１４１】
最初に、処理要素３４Ａ内の制御ユニット２８０は、ＭＩＤＩ音声のための新しいディジタル波形を生成する準備をするために内部レジスタの値をリセットするための制御信号を、調整モジュール３２から受信する（３２０）。制御ユニット２８０がリセット信号を受信すると、制御ユニット２８０は、第１のループカウンタ３０４と第２のループカウンタ３０６とプログラムカウンタ２９０とレジスタ２８６とのそれぞれの値を、ゼロにリセットする。
【０１４２】
次に、制御ユニット２８０は、ＶＰＳ  ＲＡＭユニット４６Ａ内のパラメータを有するＭＩＤＩ音声のためのディジタル波形の生成を開始させる命令を、調整モジュール３２から受信する（３２２）。制御ユニット２８０がＭＩＤＩ音声のためのディジタル波形の生成を開始させるための命令を調整モジュール３２から受信した後に、制御ユニット２８０は、プログラムメモリ４４Ａからプログラム命令を読み取る（３２４）。それから制御ユニット２８０は、このプログラム命令が「Ｌｏｏｐ  Ｅｎｄ（ループエンド）」命令であるかどうかを決定する（３２６）。もしこの命令が「Ｌｏｏｐ  Ｅｎｄ（ループエンド）」命令であれば（３２６の「ＹＥＳ」）、制御ユニット２８０は、処理要素３４Ａ内のレジスタのループカウント値を減らす（３２８）。他方、もし命令が「Ｌｏｏｐ  Ｅｎｄ」命令でなければ（３２６の「ＮＯ」）、制御ユニット２８０は、命令が「ＥＸＩＴ（退去）」命令であるかどうかを決定する（３３０）。もし命令が「ＥＸＩＴ」命令であれば（３３０の「ＹＥＳ」）、制御ユニット２８０は、処理要素３４ＡがＭＩＤＩ音声のためのディジタル波形を生成し終わったことを調整モジュール３２に知らせる制御信号を出力する（３３２）。もし命令が「ＥＸＩＴ」命令でなければ（３３０の「ＮＯ」）、制御ユニット２８０は、この命令を実行させるために制御信号を出力するか、プログラムカウンタ２９０の値を変更する（３３４）。
【０１４３】
種々の例が説明されてきた。ここで説明された技法の１つ以上の態様は、ハードウエア、ソフトウエア、ファームウエア、またはこれらの組合せで実現され得る。モジュールまたは構成要素として説明された如何なる特徴も、統合された論理デバイス内に共に実現され得、あるいは個別ではあるが相互動作可能な論理デバイスとして別々に実現され得る。もしソフトウエアで実現されれば、これらの技法の１つ以上の態様は、少なくともある程度は、実行されるときに上記の方法の１つ以上を実行する命令を備えるコンピュータ可読媒体によって実現可能である。コンピュータ可読データ記憶媒体は、パッケージ資料を含むコンピュータプログラム製品の一部を形成する。コンピュータ可読媒体は、同期ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）といったランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ）、電気的消去可能プログラム可能読取り専用メモリ（ＥＥＰＲＯＭ）、ＦＬＡＳＨメモリ、磁気または光データ記憶媒体などを備え得る。これらの技法は更に、または代替として、少なくともある程度、命令またはデータ構造の形でコードを搬送または伝達する、およびコンピュータによってアクセス、読取りおよび／または実行され得るコンピュータ可読通信媒体によって、実現され得る。
【０１４４】
これらの命令は、１つ以上のディジタル信号プロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブル論理アレイ（ＦＰＧＡ）、または他の同等な集積回路または個別論理回路といった、１つ以上のプロセッサによって実行され得る。したがって、ここで使用される用語「プロセッサ」は、前述の構造のいずれかを、またはここで説明された技法の実現に適した他の任意の構造を指すことができる。更にある幾つかの態様では、ここで説明された機能は、本開示の技法を実行するために構成された、または適合された、専用のソフトウエアモジュールまたはハードウエアモジュール内に備えられ得る。
【０１４５】
もしハードウエアにおいて実現されれば、本開示の１つ以上の態様は、ここで説明された技法の１つ以上を実行するために構成された、または適合された、集積回路、チップセット、ＡＳＩＣ、ＦＰＧＡ、論理回路、またはこれらの種々の組合せといった回路に向けられ得る。この回路は、集積回路またはチップセット内に、ここで説明されたようなプロセッサと１つ以上のハードウエアユニットの両者を含み得る。
【０１４６】
ある回路が上記の機能の一部または全部を実現し得ることを、当業者が認めることにも留意されたい。これらすべての機能を実現する１つの回路が存在し得るし、あるいはこれらの機能を実現する１つの回路の多数のセクションも存在し得る。現在の移動プラットホーム技術によれば、１つの集積回路は、少なくとも１つのＤＳＰと、ＤＳＰ（単数または複数）を制御および／または通信するための少なくとも１つの高度縮小命令セットコンピュータ（ＲＩＳＣ）マシン（Ａｄｖａｎｃｅｄ  Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｅｒ（ＲＩＳＣ）  Ｍａｃｈｉｎｅ）（ＡＲＭ）プロセッサとを備え得る。更に、１つの回路が数個のセクションに設計または実現されることが可能であり、またある場合には、複数のセクションが本開示で説明された異なる機能を実行するために再使用され得る。
【０１４７】
種々の例が説明されてきた。これらおよび他の例は、下記の特許請求の範囲内にある。
【図１】
2010522363.tif 000006
【図２】
2010522363.tif 000007
【図３】
2010522363.tif 000008
【図４】
2010522363.tif 000009
【図５】
2010522363.tif 000010
【図６】
2010522363.tif 000011
【図７】
2010522363.tif 000012
【図８】
2010522363.tif 000013
【図９】
2010522363.tif 000014
【図１０】
2010522363.tif 000015
【図１１】
2010522363.tif 000016
【図１２】
2010522363.tif 000017
【図１３】
2010522363.tif 000018
【国際調査報告】
2010522363.tif 000019
2010522363.tif 000020
2010522363.tif 000021