(57)【要約】ＭＩＤＩボイスのデジタル波形の生成用にスペシャライズされた機械コード命令の組を使用して電子楽器デジタルインターフェース（ＭＩＤＩ）ボイスのデジタル波形を生成すること。例えば、プロセッサは、ＭＩＤＩボイスのデジタル波形を生成するソフトウェアプログラムを実行することができる。ソフトウェアプログラムの命令は、ＭＩＤＩボイスのデジタル波形の生成用にスペシャライズされた命令セットからの機械コード命令とすることができる。
2010522359.tif 000002
【特許請求の範囲】
【請求項１】
電子楽器デジタルインターフェース（ＭＩＤＩ）フレーム中に存在するＭＩＤＩボイスのデジタル波形を生成するために、処理要素を用いて機械コード命令の組を並列に実行することであって、前記機械コード命令の組中の機械コード命令が、ＭＩＤＩボイスのデジタル波形の生成用にスペシャライズされた命令セットにおいて定義された機械コード命令のインスタンスである、機械コード命令の組を並列に実行することと、
前記ＭＩＤＩフレームの全体的なデジタル波形を生成するために前記ＭＩＤＩボイスの前記デジタル波形を統合することと、
前記全体的なデジタル波形を出力することと、
を備える方法。
【請求項２】
機械コード命令の組を実行することは、前記処理要素のうちの１つの中で、複数の機械コード命令を含むワードをメモリユニットから取り出すことを含む、請求項１の方法。
【請求項３】
機械コード命令の組を実行することは、前記処理要素のうちの前記１つを用いて、前記ワード中の前記機械コード命令を並列に実行することをさらに含む、請求項２の方法。
【請求項４】
機械コード命令の組を実行することは、ＭＩＤＩボイスのベース波形を得るために、前記処理要素中の制御ユニットを用いて、波形フェッチユニットに制御信号を出力することを含む、請求項１の方法。
【請求項５】
機械コード命令の組を実行することは、前記ＭＩＤＩフレームの前記全体的なデジタル波形を生成するために、前記処理要素中の制御ユニットを用いて、総和バッファに値を記憶して他の値と統合するための制御信号を前記総和バッファに出力することを含む、請求項１の方法。
【請求項６】
機械コード命令の組を実行することは、
前記処理要素中の制御ユニットを用いて、算術動作を行うよう前記処理要素中の論理演算ユニット（ＡＬＵ）に命令するための制御信号を前記ＡＬＵに出力すること
を備え、
前記ＡＬＵは、ＭＩＤＩボイスのデジタル波形を生成するために特殊なユーティリティを有する算術動作の実行用にスペシャライズされている、
請求項１の方法。
【請求項７】
制御信号を出力することは、前記ＡＬＵに、レジスタの組中のレジスタ中の符号なし値と前記レジスタの組中のレジスタ中の符号なし値とを乗算することによって積を計算させ、シフトされた積を作るために前記積をシフトさせ、前記シフトされた積のビットのうちのいくつかを抽出させ、前記抽出されたビットが前記レジスタの組中のレジスタ中に記憶された数よりも小さい数を表すかどうかを判断させる制御信号を出力することを含む、請求項６の方法。
【請求項８】
機械コード命令の組を実行することは、前記処理要素がデジタル波形を生成しているＭＩＤＩボイスを定義するボイスパラメータセットのパラメータ中のビットの組とマスクパラメータとのビット毎の論理積演算から０でない値が得られたとき、前記処理要素のうちの１つのプログラムカウンタに機械コード命令のアドレス値をロードすることを含む、請求項１の方法。
【請求項９】
機械コード命令の組を実行することは、前記処理要素のうちの１つにおける制御ユニットを用いて、前記処理要素がＭＩＤＩボイスのデジタル波形の生成を終了したことを調整モジュールに示すための制御信号を前記調整モジュールに出力することを含む、請求項１の方法。
【請求項１０】
前記方法は、デジタル信号プロセッサ（ＤＳＰ）を用いて、前記機械コード命令の組を前記処理要素のプログラムメモリユニットにロードすることをさらに備える、請求項１の方法。
【請求項１１】
前記方法は、前記ＤＳＰを用いて、前記ＭＩＤＩフレームの前記全体的なデジタル波形を含む連続デジタル波形を出力することをさらに備え、
前記ＭＩＤＩフレームの前記デジタル波形に基づいてサウンドを出力することは、前記ＤＳＰによって出力された前記連続デジタル波形に基づいてサウンドを出力することを含む、
請求項１１の方法。
【請求項１２】
前記方法は、
汎用プロセッサを使用して前記ＭＩＤＩファイルを解析し、前記ＭＩＤＩファイルに関連するＭＩＤＩイベントをスケジュールすることと、
連続デジタル波形を出力するためにデジタル信号プロセッサ（ＤＳＰ）を使用して前記ＭＩＤＩイベントを処理することと、
をさらに備え、
ハードウェアユニットが前記機械コード命令の組を実行する、
請求項１の方法。
【請求項１３】
前記デジタル波形に基づいてサウンドを出力することは、
前記全体的なデジタル波形をアナログ出力に変換することと、
前記アナログ出力をサウンドとして出力することと、
を含む、請求項１の方法。
【請求項１４】
前記方法は、ボイスインジケータのリンクリストを生成することをさらに備え、前記リンクリスト中の前記ボイスインジケータの各々は、前記ＭＩＤＩボイスを定義するボイスパラメータセットを記憶するメモリ位置を指定することによってＭＩＤＩフレームのＭＩＤＩボイスを示し、前記リンクリスト中の前記ボイスインジケータによって示された前記ＭＩＤＩボイスは、前記ＭＩＤＩフレーム中で最大の音響的重要性を有するＭＩＤＩボイスであり、
前記リンクリストは、現在のＭＩＤＩボイスを示すボイスインジケータを含む、
請求項１の方法。
【請求項１５】
機械コード命令の組を実行することは、
前記機械コード命令の組のうちの１つの中の機械コード命令を実行すること
を備え、
前記機械コード命令を実行することは、
制御ユニットを用いて前記機械コード命令を読み込むことと、
現在のＭＩＤＩボイスを定義するボイスパラメータの組に基づいて動作を選択することと、
前記選択された動作を行わせる制御信号を出力することと、
を備える、
請求項１の方法。
【請求項１６】
動作を選択することは、前記ボイスパラメータの組中の制御パラメータ中のビットの値を識別することを含む、請求項１５の方法。
【請求項１７】
動作を選択することは、エンベロープ生成動作を選択することを含む、請求項１５の方法。
【請求項１８】
前記機械コード命令を実行することは、モジュールにパラメータ値を供給することをさらに備え、
前記モジュールは、前記動作を選択し、前記選択された動作を行う、
請求項１７の方法。
【請求項１９】
モジュールにパラメータ値を供給することは、低周波発振器（ＬＦＯ）モジュールに前記パラメータ値を供給することを含み、
前記命令を実行することは、
前記ＬＦＯモジュール中のレジスタからの値をローカルレジスタに記憶することと、
前記ＬＦＯモジュール中の前記レジスタの値を更新することと、
をさらに備える、
請求項１８の方法。
【請求項２０】
機械コード命令の組中の機械コード命令が、ＭＩＤＩボイスのデジタル波形の生成用にスペシャライズされた命令セットにおいて定義された機械コード命令のインスタンスである、前記機械コード命令の組を記憶するプログラムメモリユニットの組と、
ＭＩＤＩフレーム中のＭＩＤＩボイスのデジタル波形を生成するために前記機械コード命令の組を並列に実行する処理要素の組と、
前記ＭＩＤＩフレームの全体的なデジタル波形を生成するために前記ＭＩＤＩボイスの前記デジタル波形を統合する総和バッファと、
を備える装置。
【請求項２１】
前記処理要素は、ワードを読み込むことによって前記プログラムメモリユニットから命令を読み込む制御ユニットを備え、前記ワードの各々が複数の命令を含む、請求項２０の装置。
【請求項２２】
前記処理要素のうちの１つは、前記ワードのうちの１つに含まれる前記命令を並列に実行する、請求項２１の装置。
【請求項２３】
前記装置は、
ＭＩＤＩボイスのベース波形の組を含むメモリユニットと、
前記メモリユニットから前記ベース波形の各々を得る波形フェッチユニットと
をさらに備え、
前記処理要素の各々は、前記命令のうちの１つに遭遇したときにＭＩＤＩボイスのベース波形を得るための制御信号を前記波形フェッチユニットに出力する制御ユニットを備える、
請求項２０の装置。
【請求項２４】
前記処理要素の各々は、前記総和バッファに値を記憶するための制御信号を前記総和バッファに出力する制御ユニットを備え、
前記総和バッファは、前記ＭＩＤＩフレームの前記全体的なデジタル波形を生成するために前記値を統合する、
請求項２０の装置。
【請求項２５】
前記処理要素の各々は、
ＭＩＤＩボイスのデジタル波形を生成するために特殊なユーティリティを有する算術動作の実行用にスペシャライズされた論理演算ユニット（ＡＬＵ）と、
算術動作を行うよう前記ＡＬＵに命令するための制御信号を前記ＡＬＵに出力する制御ユニットと、
を備える、請求項２０の装置。
【請求項２６】
前記処理要素の各々は、レジスタの組をさらに備え、
前記制御ユニットは、前記ＡＬＵに、前記レジスタのうちの１つにおける符号なし値と前記レジスタのうちの１つにおける符号なし値とを乗算することによって積を計算させ、シフトされた積を作るために前記積をシフトさせ、前記シフトされた積のビットのうちのいくつかを抽出させ、次いで前記抽出されたビットが前記レジスタのうちの１つに記憶された数よりも小さい数を表すかどうかを判断させる制御信号を出力する、
請求項２５の装置。
【請求項２７】
前記処理要素の各々は、
前記プログラムメモリユニットのうちの１つにおける次の命令のメモリアドレスを含むプログラムカウンタと、
前記処理要素がデジタル波形を生成しているＭＩＤＩボイスを定義するボイスパラメータセットのパラメータ中のビットの組とマスクパラメータとのビット毎の論理積演算から０でない値が得られたとき、前記プログラムカウンタに機械コード命令のアドレス値をロードする制御ユニットと、
をさらに備える、請求項２０の装置。
【請求項２８】
前記装置は、前記ＭＩＤＩフレーム中の前記ＭＩＤＩボイスを前記処理要素の各々に割り当てる調整モジュールをさらに備え、
前記処理要素の各々は、前記処理要素がＭＩＤＩボイスのデジタル波形の生成を終了したことを前記調整モジュールに示すための制御信号を前記調整モジュールに出力する制御ユニットをさらに備える、
請求項２０の装置。
【請求項２９】
前記装置は、前記機械コード命令の組を前記プログラムメモリユニットにロードするデジタル信号プロセッサ（ＤＳＰ）をさらに備える、請求項２０の装置。
【請求項３０】
前記ＤＳＰは、前記ＭＩＤＩフレームの前記全体的なデジタル波形を含む連続デジタル波形を出力し、
スピーカが前記連続デジタル波形に基づいてサウンドを出力する、
請求項２９の装置。
【請求項３１】
前記装置は、
ＭＩＤＩフレーム中のＭＩＤＩボイスの組のデジタル波形を生成するＭＩＤＩハードウェアユニットであって、前記処理要素が前記ＭＩＤＩハードウェアユニットの構成要素である、ＭＩＤＩハードウェアユニットと、
ＭＩＤＩファイルを解析し、前記ＭＩＤＩファイルに関連するＭＩＤＩイベントをスケジュールする汎用プロセッサと、
前記ＭＩＤＩイベントに基づいて連続デジタル波形を出力するために前記ＭＩＤＩイベントを処理するＤＳＰと、
をさらに備える、請求項２０の装置。
【請求項３２】
前記装置は、
前記連続デジタル波形をアナログオーディオ信号に変換するデジタルアナログ変換器と、
サウンドを出力するためのスピーカを駆動するために前記アナログオーディオ信号を使用する駆動回路と、
をさらに備える、請求項３１の装置。
【請求項３３】
前記ＤＳＰは、
ボイスインジケータのリンクリストを生成するリストジェネレータモジュールであって、前記リンクリスト中の前記ボイスインジケータの各々が、前記ＭＩＤＩボイスを定義するボイスパラメータセットを記憶するメモリ位置を指定することによってＭＩＤＩフレームのＭＩＤＩボイスを示す、リストジェネレータモジュール
を備え、
前記リンクリスト中の前記ボイスインジケータによって示された前記ＭＩＤＩボイスは、前記ＭＩＤＩフレーム中で最大の音響的重要性を有するＭＩＤＩボイスであり、
前記リンクリストは、現在のＭＩＤＩボイスを示すボイスインジケータを含み、
前記処理要素が、前記リンクリスト中の前記ボイスインジケータによって示されたＭＩＤＩボイスのデジタル波形を生成する、
請求項３２の装置。
【請求項３４】
前記処理ユニットの各々は、制御ユニットを備え、
前記命令の少なくとも１つは、現在のＭＩＤＩボイスを定義するボイスパラメータの組に基づいて動作を選択するための制御信号を出力することと、前記選択された動作を行わせる信号を出力することとを前記制御ユニットに行わせる、
請求項２０の装置。
【請求項３５】
前記処理要素は、数学的動作を行う論理演算ユニット（ＡＬＵ）をさらに備え、
前記制御ユニットは、前記動作を選択し、
前記制御ユニットは、前記選択された動作を行うよう前記ＡＬＵに命令する制御信号を前記ＡＬＵに出力する、
請求項３４の装置。
【請求項３６】
前記制御ユニットは、エンベロープ生成計算命令を読み取ったとき、前記動作を選択する、請求項３５の装置。
【請求項３７】
前記装置は、三角デジタル波形を生成する低周波発振器（ＬＦＯ）をさらに備え、
前記ＬＦＯは、前記動作を選択し、
前記ＬＦＯは、前記選択された動作を行う、
請求項３４の装置。
【請求項３８】
前記処理要素は、レジスタの組を備え、
前記制御ユニットは、前記三角波形のサンプルを前記レジスタのうちの１つに記憶し、前記ＬＦＯによって生成された前記三角波形を更新するための制御信号を前記ＬＦＯに出力する、
請求項３７の装置。
【請求項３９】
前記装置は、前記デジタル波形に基づいてサウンドを出力する１つまたは複数のスピーカをさらに備える、請求項２０の装置。
【請求項４０】
プログラマブルプロセッサに、
ＭＩＤＩフレーム中に存在するＭＩＤＩボイスのデジタル波形を生成するために、処理要素を用いて機械コード命令の組を並列に実行することを処理要素の組に行わせることと、
ここで、前記機械コード命令の組中の機械コード命令は、ＭＩＤＩボイスのデジタル波形の生成用にスペシャライズされた命令セットにおいて定義された機械コード命令のインスタンスであり、
前記ＭＩＤＩフレームの全体的なデジタル波形を生成するために前記ＭＩＤＩボイスの前記デジタル波形を統合することを総和バッファに行わせることと、
前記全体的なデジタル波形を出力することを前記総和バッファに行わせることと、
を行わせる命令を備えるコンピュータ可読媒体。
【請求項４１】
機械コード命令の組を並列に実行することを処理要素の組に行わせることを前記プログラマブルプロセッサに行わせる前記命令は、ＭＩＤＩボイスのベース波形を得るための制御信号を波形フェッチユニットに出力することを前記処理要素中の制御ユニットに行わせることを前記プログラマブルプロセッサに行わせる、請求項４０のコンピュータ可読媒体。
【請求項４２】
機械コード命令の組を並列に実行することを処理要素の組に行わせることを前記プログラマブルプロセッサに行わせる前記命令は、算術動作を行うよう前記処理要素中の論理演算ユニット（ＡＬＵ）に命令するための制御信号を前記ＡＬＵに出力することを前記処理要素中の制御ユニットに行わせることを前記プログラマブルプロセッサに行わせ、前記ＡＬＵは、ＭＩＤＩボイスのデジタル波形を生成するために特殊なユーティリティを有する算術動作の実行用にスペシャライズされている、請求項４０のコンピュータ可読媒体。
【請求項４３】
機械コード命令の組中の機械コード命令が、ＭＩＤＩボイスのデジタル波形の生成用にスペシャライズされた命令セットにおける機械コード命令のインスタンスである、前記機械コード命令の組を記憶するための手段と、
ＭＩＤＩボイスのデジタル波形を生成するために前記機械コード命令の組を並列に実行するための手段と、
前記ＭＩＤＩフレームの全体的なデジタル波形を生成するために前記ＭＩＤＩボイスの前記デジタル波形を統合するための手段と、
前記全体的なデジタル波形を出力するための手段と、
を備える装置。
【請求項４４】
前記装置は、
ＭＩＤＩボイスのベース波形の組を収容するための手段と、
前記ベース波形の組を収容するための前記手段から前記ベース波形の各々を得るための手段と、
をさらに備え、
前記処理要素の各々は、前記命令のうちの１つに遭遇したときにＭＩＤＩボイスのベース波形を得るための制御信号を、前記ベース波形の各々を得るための前記手段に出力する手段を備える、
請求項４３の装置。
【請求項４５】
前記機械コード命令の組を実行するための前記手段は、
ＭＩＤＩボイスのデジタル波形を生成するために特殊なユーティリティを有する算術動作を行うための手段と、
算術動作を行うよう前記算術動作を行うための手段に命令するための制御信号を、前記算術動作を行うための手段に出力するための手段と、
を備える、請求項４３の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
本出願は、２００７年３月２２日に出願された米国仮出願第６０／８９６，４０２号の優先権を主張するものである。
【０００２】
本開示は、電子装置に関し、より詳細には、オーディオを生成する電子装置に関する。
【背景技術】
【０００３】
電子楽器デジタルインターフェース（ＭＩＤＩ）は、ミュージック、スピーチ、トーン、アラートなどオーディオサウンドの作成、通信および再生用のフォーマットである。ＭＩＤＩフォーマットをサポートする装置は、様々な「ボイス」を作成するために使用できるオーディオ情報の組を記憶することができる。各ボイスは、特定の楽器によるミュージカルノート（musical note）など、複数のサウンドに対応する。例えば、第１のボイスは、ピアノによって演奏される中央Ｃに対応し、第２のボイスは、トロンボーンによって演奏される中央Ｃに対応し、第３のボイスは、トロンボーンによって演奏されるＤ＃に対応する。様々な楽器のサウンドを再現するために、ＭＩＤＩ準拠装置は、低周波発振器の挙動など様々なオーディオ特性、ビブラートなどの効果、およびサウンドの認識に影響を及ぼす、サウンドに関連するいくつかの他のオーディオ特性を指定する、ボイス用の情報の組を含むことができる。ほとんどどんなサウンドでも、定義されＭＩＤＩファイルで伝達されて、ＭＩＤＩフォーマットをサポートする装置によって再生されることができる。
【０００４】
ＭＩＤＩフォーマットをサポートする装置は、当該装置がミュージカルノート（または他のサウンド）の生成を開始すべきであることを示すイベントが発生すると、該ノートを生成することができる。同様に、該装置は、ミュージカルノートの生成を停止すべきであることを示すイベントが発生すると、該ノートの生成を停止する。楽曲全体は、いくつかのボイスがいつ開始し停止すべきかとボイスに対する様々なエフェクトとを示すイベントを指定することによって、ＭＩＤＩフォーマットに従って符号化できる。このようにして、楽曲は、ＭＩＤＩフォーマットに従ってコンパクトなファイルフォーマットで記憶および送信できる。
【０００５】
ＭＩＤＩ不オーマットは、多種多様な装置でサポートされている。例えば、無線電話機など無線通信装置は、呼出音や他のオーディオ出力などダウンロード可能なサウンド用のＭＩＤＩファイルをサポートすることができる。アップルコンピュータ・インコーポレイテッドが販売している「ｉＰｏｄ」装置やマイクロソフト社が販売している「Ｚｕｎｅ」装置などのデジタルミュージックプレーヤも、ＭＩＤＩファイルフォーマットをサポートすることができる。ＭＩＤＩフォーマットをサポートする他の装置には、キーボード、シーケンサ、オーディオエンコーダ（ボコーダ）、およびリズムマシンなど様々なミュージックシンセサイザがある。さらに、無線モバイル装置、直接双方向通信装置（ウォーキートーキーと呼ばれることがある）、ネットワーク電話、パーソナルコンピュータ、デスクトップおよびラップトップコンピュータ、ワークステーション、衛星ラジオ装置、インターホン、ラジオ放送受信機、携帯ゲーム機、装置に取り付けられた回路基板、情報キオスク、ビデオゲームコンソール、児童用の様々なコンピュータ化された玩具、自動車や船舶や航空機で使用されるオンボードコンピュータ、ならびに多種多様な他の装置を含む、多種多様な装置が同じくＭＩＤＩファイルまたはトラックの再生をサポートすることができる。
【発明の概要】
【０００６】
概して、本開示では、電子楽器デジタルインターフェース（ＭＩＤＩ）ボイスのデジタル波形の生成用にスペシャライズされた機械コード命令の組（set of machine-code instructions）を使用してＭＩＤＩボイスのデジタル波形を生成するための技法について説明する。例えば、プロセッサは、ＭＩＤＩボイスのデジタル波形を生成させるソフトウェアプログラムを実行することができる。ソフトウェアプログラムの命令は、ＭＩＤＩフォーマットに従うデジタル波形の生成用にスペシャライズされた命令セットの機械コード命令とすることができる。
【０００７】
一態様では、方法は、ＭＩＤＩフレーム中に存在するＭＩＤＩボイスのデジタル波形を生成するために処理要素を用いて機械コード命令の組を並列に実行することを備える。機械コード命令の組中の機械コード命令は、ＭＩＤＩボイスのデジタル波形の生成用にスペシャライズされた命令セットにおいて定義された機械コード命令のインスタンス（instances）である。本方法はまた、ＭＩＤＩフレームの全体的なデジタル波形を生成するためにＭＩＤＩボイスのデジタル波形を統合すること（aggregating）を備える。さらに、本方法は、全体的なデジタル波形を出力することを備える。
【０００８】
別の態様では、装置は、機械コード命令の組を記憶するプログラムメモリユニットの組を備える。機械コード命令の組中の機械コード命令は、ＭＩＤＩボイスのデジタル波形の生成用にスペシャライズされた命令セットにおいて定義された機械コード命令のインスタンスである。この装置はまた、ＭＩＤＩフレーム中のＭＩＤＩボイスのデジタル波形を生成するために機械コード命令の組を並列に実行する処理要素の組を備える。さらに、この装置は、ＭＩＤＩフレームの全体的なデジタル波形を生成するためにＭＩＤＩボイスのデジタル波形を統合する総和バッファを備える。
【０００９】
別の態様では、コンピュータ可読媒体は、ＭＩＤＩフレーム中に存在するＭＩＤＩボイスのデジタル波形を生成するために処理要素を用いて機械コード命令の組を並列に実行することを処理要素の組に行わせることをプログラマブルプロセッサに行わせる命令を備える。機械コード命令の組の中の機械コード命令は、ＭＩＤＩボイスのデジタル波形生成用にスペシャライズされた命令セットにおいて定義された機械コード命令のインスタンスである。さらに、このコンピュータ可読媒体は、ＭＩＤＩフレームの全体的なデジタル波形を生成するためにＭＩＤＩボイスのデジタル波形を統合することを総和バッファに行わせることをプロセッサに行わせる命令を備える。このコンピュータ可読媒体はまた、全体的なデジタル波形を出力することを総和バッファに行わせることをプロセッサに行わせる命令を備える。
【００１０】
別の態様では、装置は、機械コード命令の組を記憶するための手段を備える。機械コード命令の組の中の機械コード命令は、ＭＩＤＩボイスのデジタル波形生成用にスペシャライズされた命令セットにおいて定義された機械コード命令のインスタンスである。この装置はまた、ＭＩＤＩボイスのデジタル波形を生成するために機械コード命令の組を並列に実行するための手段を備える。さらに、この装置は、ＭＩＤＩフレームの全体的なデジタル波形を生成するためにＭＩＤＩボイスのデジタル波形を統合するための手段を備える。この装置はまた、全体的なデジタル波形を出力するための手段を備える。
【００１１】
本開示の様々な詳細は、添付の図面および以下の説明において記述する。他の特徴、目的、および利点は、説明および図面、ならびに特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００１２】
【図１】図１は、サウンドを生成するオーディオ装置を含む例示的なシステムを示すブロック図である。
【図２】図２は、オーディオ装置の例示的な電子楽器装置インターフェース（ＭＩＤＩ）ハードウェアユニットを示すブロック図である。
【図３】図３は、オーディオ装置の例示的な動作を示す流れ図である。
【図４】図４は、オーディオ装置中のデジタル信号プロセッサ（ＤＳＰ）の例示的な動作を示す流れ図である。
【図５】図５は、オーディオ装置のＭＩＤＩハードウェアユニット中の調整（coordination）モジュールの例示的な動作を示す流れ図である。
【図６】図６は、メモリアドレスを指定するボイスインジケータのリストを使用する例示的なＤＳＰを示すブロック図である。
【図７】図７は、ＤＳＰがプロセッサからＭＩＤＩイベントの組を受け取る場合のＤＳＰの例示的な動作を示す流れ図である。
【図８】図８は、ＤＳＰがボイスインジケータのリストにボイスインジケータを挿入する場合のＤＳＰの例示的な動作を示す流れ図である。
【図９】図９は、ＤＳＰがボイスインジケータをリストに挿入する場合のＤＳＰの例示的な動作を示す流れ図である。
【図１０】図１０は、リスト中のボイスインジケータの数がボイスインジケータの最大数を超えたとき、ＤＳＰがリストからボイスインジケータを削除する場合のＤＳＰの例示的な動作を示す流れ図である。
【図１１】図１１は、メモリアドレスが導き出せる指標値を指定するボイスインジケータのリストを使用する例示的なＤＳＰを示すブロック図である。
【図１２】図１２は、例示的な処理要素の詳細を示すブロック図である。
【図１３】図１３は、オーディオ装置のＭＩＤＩハードウェアユニット中の処理要素の例示的な動作を示す流れ図である。
【発明を実施するための形態】
【００１３】
本開示では、電子楽器デジタルインターフェース（ＭＩＤＩ）ボイスのデジタル波形の生成用にスペシャライズされた機械コード命令の組を使用してＭＩＤＩボイスのデジタル波形を生成する技法について説明する。例えば、プロセッサは、ＭＩＤＩボイスのデジタル波形を生成するソフトウェアプログラムを実行することができる。ソフトウェアプログラムの命令は、ＭＩＤＩボイスのデジタル波形の生成用にスペシャライズされた命令セットからの機械コード命令とすることができる。
【００１４】
図１は、サウンドを生成するオーディオ装置４を含む例示的なシステム２を示すブロック図である。オーディオ装置４は、いくつかの異なるタイプの装置のうちの１つとすることができる。例えば、オーディオ装置４は、携帯電話、ネットワーク電話、パーソナルコンピュータ、直接双方向通信装置（ウォーキートーキーと呼ばれることがある）、パーソナルコンピュータ、デスクトップまたはラップトップコンピュータ、ワークステーション、衛星ラジオ装置、インターホン、ラジオ放送受信機、携帯ゲーム機、キオスクなどの装置に取り付けられた回路基板、児童用の様々なコンピュータ化された玩具、自動車、船舶または航空機で使用されるオンボードコンピュータ、あるいは他のタイプの装置とすることができる。アップルコンピュータ・インコーポレイテッドが販売している「ｉＰｏｄ」装置やマイクロソフト社が販売している「Ｚｕｎｅ」装置などデジタルミュージックプレーヤも、ＭＩＤＩファイルフォーマットをサポートすることができる。ＭＩＤＩフォーマットをサポートする他の装置には、キーボード、シーケンサ、ボイスエンコーダ（ボコーダ）、リズムマシンなど様々なミュージックシンセサイザがある。
【００１５】
図１に示される様々な構成要素は、本開示の諸態様を説明するために必要とされたものである。ただし、実装形態によっては、他の構成要素が存在することがあり、図示の構成要素のいくつかが含まれないことがある。例えば、オーディオ装置４が無線電話機である場合、オーディオファイルの無線通信を可能にするために、アンテナ、送信機、受信機およびモデム（変調復調器）を含めることができる。
【００１６】
図１の例に示すように、オーディオ装置４は、ＭＩＤＩファイルを記憶するオーディオ記憶ユニット６を含む。オーディオ記憶ユニット６は任意の揮発性または不揮発性のメモリあるいは記憶装置を備えることができる。例えば、オーディオ記憶ユニット６は、ハードディスクドライブ、フラッシュメモリユニット、コンパクトディスク、フロッピー（登録商標）ディスク、デジタル多用途ディスク、リードオンリメモリユニット、ランダムアクセスメモリ、または情報記憶媒体である。オーディオ記憶ユニット６は電子楽器装置インターフェース（ＭＩＤＩ）ファイルおよび他のタイプのデータを記憶することができる。例えば、オーディオ装置４が携帯電話である場合、オーディオ記憶ユニット６は、個人の連絡先のリストや写真や他のタイプのデータを含むデータを記憶することができる。
【００１７】
オーディオ装置４はまた、オーディオ記憶ユニット６からデータを読み取り、オーディオ記憶ユニット６にデータを書き込むことができるプロセッサ８を含む。さらに、プロセッサ８は、ランダムアクセスメモリ（ＲＡＭ）ユニット１０からデータを読み取り、ＲＡＭユニット１０にデータを書き込むことができる。例えば、プロセッサ８は、オーディオ記憶モジュール６からＭＩＤＩファイルの一部分を読み取り、ＭＩＤＩファイルのその部分をＲＡＭユニット１０に書き込むことができる。プロセッサ８は、Ｉｎｔｅｌ  Ｐｅｎｔｉｕｍ（登録商標）４プロセッサ、英国チェリーヒントンのＡＲＭホールディングスによるＡＲＭアーキテクチャに適合する組込みマイクロプロセッサ、または他のタイプの汎用プロセッサなど、汎用マイクロプロセッサを備えることができる。ＲＡＭユニット１０は１つまたは複数のスタティックまたはダイナミックＲＡＭユニットを備えることができる。
【００１８】
プロセッサ８は、ＭＩＤＩファイルを読み取った後、ＭＩＤＩファイルを解析（parse）し、該ＭＩＤＩファイルに関連するＭＩＤＩイベントをスケジュールすることができる。例えば、ＭＩＤＩフレームごとに、プロセッサ８は、１つまたは複数のＭＩＤＩファイルを読み取り、該ＭＩＤＩファイルからＭＩＤＩイベントを抽出することができる。ＭＩＤＩ命令に基づいて、プロセッサ８は、ＤＳＰ１２によって処理するためにＭＩＤＩイベントをスケジュールすることができる。ＭＩＤＩイベントをスケジュールした後、プロセッサ８は、ＤＳＰ１２がイベントを処理することができるように、ＲＡＭユニット１０またはＤＳＰ１２にスケジューリングを提供することができる。代替として、プロセッサ８は、ＤＳＰ１２にＭＩＤＩイベントを時間同期方式でディスパッチ（dispatch）することによってスケジューリングを達成することができる。ＤＳＰ１２は、スケジュールされたイベントを、ＭＩＤＩファイル中のタイミングパラメータによって指定されたように、同期方式で処理することができる。ＭＩＤＩイベントは、音楽性能情報（musical performance information）を送信するために使用されるチャネルボイスメッセージを含むことができる。チャネルボイスメッセージは、特定のＭＩＤＩボイスをオンまたはオフにする命令、チェンジポリフォニックキープレッシャ（change polyphonic key pressure）、チャネルプレッシャ、ピッチベンド（pitch bend）チェンジ、コントロールチェンジメッセージ、アフタータッチ（aftertouch）エフェクト、ブレスコントロール（breath-control）エフェクト、プログラムチェンジ、ピッチベンド（pitch bend）エフェクト、パンレフト（pan left）またはパンライト、サスティンペダル（sustain pedal）、メインボリューム、ソステヌート（sostenuto）、および他のチャネルボイスメッセージを含むことができる。さらに、ＭＩＤＩイベントは、ＭＩＤＩ装置がＭＩＤＩデータに応答する方法に影響を及ぼすチャネルモードメッセージを含むことができる。さらに、ＭＩＤＩイベントは、ＭＩＤＩシステム中のすべての受信機を対象とするシステムコモンメッセージ、クロックベースのＭＩＤＩ構成要素間の同期に使用されるシステムリアルタイムメッセージ、他のシステム関連メッセージなど、システムメッセージを含むことができる。ＭＩＤＩイベントは、ＭＩＤＩショーコントロールメッセージ（例えば、ライトエフェクトキュー（lighting effect cues）、スライドプロジェクションキュー、マシーナリエフェクト（machinery effect）キュー、パイロテクニカル（pyrotechnical）キュー、および他のエフェクトキュー）とすることもできる。
【００１９】
ＤＳＰ１２は、プロセッサ８からＭＩＤＩ命令を受け取ると、連続パルス符号変調（ＰＣＭ）信号を生成するために、該ＭＩＤＩ命令を処理することができる。ＰＣＭ信号は、波形が一定の間隔をおいてデジタルサンプルによって表されるアナログ信号のデジタル表現である。ＤＳＰ１２は、デジタルアナログ変換器（ＤＡＣ）１４に、このＰＣＭ信号を出力することができる。ＤＡＣ１４は、このデジタル波形をアナログ信号に変換することができる。駆動回路１８は、ユーザに対して物理的なサウンドを出力するためにスピーカ１９Ａおよび１９Ｂを駆動するために、このアナログ信号を使用することができる。本開示では、スピーカ１９Ａおよび１９Ｂを集合的に「スピーカ１９」と呼ぶ。オーディオ装置４は、フィルタと、プリアンプと、アンプと、スピーカ１９によって最終的に出力するためのアナログ信号を準備する他のタイプの構成要素と、を含む１つまたは複数の追加の構成要素（図示せず）を含むことができる。このようにして、オーディオ装置４は、ＭＩＤＩファイルに従ってサウンドを生成することができる。
【００２０】
デジタル波形を生成するために、ＤＳＰ１２は、個々のＭＩＤＩフレームのデジタル波形を生成するＭＩＤＩハードウェアユニット１８を使用することができる。各ＭＩＤＩフレームは１０ミリ秒、または別の時間間隔に対応することができる。ＭＩＤＩフレームが１０ミリ秒に対応し、且つ、デジタル波形が４８ｋＨｚ（すなわち、毎秒４８，０００サンプル）でサンプリングされる場合には、各ＭＩＤＩフレームには４８０個のサンプルがある。ＭＩＤＩハードウェアユニット１８は、オーディオ装置４のハードウェア構成要素として実装できる。例えば、ＭＩＤＩハードウェアユニット１８は、オーディオ装置４の回路基板に組み込まれたチップセットとすることができる。ＭＩＤＩハードウェアユニット１８を使用するために、ＤＳＰ１２は、ＭＩＤＩハードウェアユニット１８がアイドル状態かどうかを最初に判断することができる。ＭＩＤＩハードウェアユニット１８は、ＭＩＤＩフレームのデジタル波形の生成を終了した後、アイドル状態になることができる。次いで、ＤＳＰ１２は、ＭＩＤＩフレーム中に存在するＭＩＤＩボイスを示すボイスインジケータのリストを生成することができる。ＤＳＰ１２は、ボイスインジケータのリストを生成した後、ＭＩＤＩハードウェアユニット１８中に１つまたは複数のレジスタを設定することができる。ＤＳＰ１２は、これらのレジスタを設定するために、直接メモリ交換（ＤＭＥ）を使用することができる。ＤＭＥは、プロセッサが他の動作を実行している間でも、１つのメモリユニットから別のメモリユニットにデータを転送する手続きである。ＤＳＰ１２は、レジスタを設定した後、ＭＩＤＩフレームのデジタル波形の生成を開始することをＭＩＤＩハードウェアユニット１８に命令することができる。以下で詳細に説明するように、ＭＩＤＩハードウェアユニット１８は、ボイスインジケータのリスト中の各々のＭＩＤＩボイスのデジタル波形を生成し、これらのデジタル波形をＭＩＤＩボイスの波形に統合することによって、ＭＩＤＩフレームのデジタル波形を生成することができる。ＭＩＤＩハードウェアユニット１８は、ＭＩＤＩフレームのデジタル波形の生成を終了すると、ＤＳＰ１２に割込みを送信することができる。ＭＩＤＩハードウェアユニット１８から割込みを受け取ると、ＤＳＰ１２は、ＭＩＤＩハードウェアユニット１８にデジタル波形のＤＭＥ要求を送信することができる。ＭＩＤＩハードウェアユニット１８は、その要求を受け取ると、ＤＳＰ１２にデジタル波形を送信することができる。
【００２１】
ＭＩＤＩフレーム中に存在するＭＩＤＩボイスを示すボイスインジケータのリストを生成するために、ＤＳＰ１２は、どのＭＩＤＩボイスがＭＩＤＩフレーム中で少なくとも最小レベルの音響的重要性（acoustical significance）を有するかを判断することができる。ＭＩＤＩフレーム中のＭＩＤＩボイスの音響的重要性のレベルは、ＭＩＤＩフレームの人間の聞き手によって知覚される全体的なサウンドに対するそのＭＩＤＩボイスの重要性の関数であることができる。
【００２２】
ＭＩＤＩボイスのデジタル波形を生成するために、ＭＩＤＩハードウェアユニット１８は、ＭＩＤＩボイスを定義するボイスパラメータセット中の少なくともいくつかのボイスパラメータにアクセスすることができる。ボイスパラメータの組は、ＭＩＤＩボイスのデジタル波形を生成するのに必要な情報を指定することによって、および／またはそのような情報がどこに位置するかを指定することによって、ＭＩＤＩボイスを定義することができる。例えば、ＭＩＤＩボイスパラメータの組は、共振レベル、ピッチ残響、音量、および他の音響特性を指定することができる。さらに、ＭＩＤＩボイスパラメータの組は、ボイスのベース波形を含むＲＡＭユニット１０中の位置のアドレスへのポインタを含む。ＭＩＤＩフレームのデジタル波形は、ＭＩＤＩボイスのデジタル波形の集合であることができる。例えば、ＭＩＤＩフレームのデジタル波形は、ＭＩＤＩボイスのデジタル波形の総和であることができる。
【００２３】
以下で詳細に述べるように、ＭＩＤＩハードウェア１８は、いくつかの利点を提供することができる。例えば、ＭＩＤＩハードウェアユニット１８は、デジタル波形の効率的な生成を生じるいくつかの特徴を含むことができる。デジタル波形のこの効率的な生成の結果として、オーディオ装置４は、より高品質のサウンドを生成し、電力消費を少なくし、あるいはＭＩＤＩファイルの再生のための従来の技法を改善することができる。その上、ＭＩＤＩハードウェアユニット１８は、デジタル波形を効率的に生成することができるので、一定時間内により多くのＭＩＤＩボイスのデジタル波形を生成することができる。そのような追加のＭＩＤＩボイスの存在は、人間の聞き手によって知覚されるサウンドの品質を改善することができる。
【００２４】
図２は、オーディオ装置４の例示的なＭＩＤＩハードウェアユニット１８を示すブロック図である。図２の例に示すように、ＭＩＤＩハードウェアユニット１８は、データを送信および受信するバスインターフェース３０を含む。例えば、バスインターフェース３０は、ＡＭＢＡ高性能バス（ＡＨＢ）マスターインターフェース、ＡＨＢスレーブインターフェース、およびメモリバスインターフェースを含むことができる。代替として、バスインターフェース３０は、ＡＸＩバスインターフェース、または別のタイプのバスインターフェースを含むことができる。ＡＸＩはadvanced extensible interfaceの略である。
【００２５】
さらに、ＭＩＤＩハードウェアユニット１８は調整モジュール３２を含むことができる。調整モジュール３２はＭＩＤＩハードウェアユニット１８内のデータフローを調整する。ＭＩＤＩハードウェアユニット１８がＭＩＤＩフレームのデジタル信号の生成を開始する命令をＤＳＰ１２から受け取ると、調整モジュール３２は、ＲＡＭユニット１０からＭＩＤＩハードウェアユニット１８中のリンクリストメモリユニット４２に、ＤＳＰ１２によって生成されたボイスインジケータのリストをロードすることができる。リスト中の各ボイスインジケータは、現在のＭＩＤＩフレーム中で音響的重要性を有するＭＩＤＩボイスを示す。ボイスインジケータのリスト中の各ボイスインジケータは、ＭＩＤＩボイスを定義するボイスパラメータセットを記憶するＲＡＭユニット１０中のメモリ位置を指定することができる。例えば、各ボイスインジケータは、特定のボイスパラメータセットのメモリアドレスか、または調整モジュール３２が特定のボイスパラメータセットのメモリアドレスを導き出すことができる指標値か、を含むことができる。
【００２６】
調整モジュール３２は、リンクリストメモリユニット４２にボイスインジケータのリストをロードした後、リンクリストメモリ４２中に記憶されたボイスインジケータのリスト中のボイスインジケータによって示されるＭＩＤＩボイスのうちの１つのデジタル波形を生成するために、処理要素３４Ａ〜３４Ｎのうちの１つを特定することができる。本明細書では、処理要素３４Ａ〜３４Ｎを集合的に「処理要素３４」と呼ぶ。処理要素３４は、互いに並列にＭＩＤＩボイスのデジタル波形を生成することができる。
【００２７】
処理要素３４の各々は、ボイスパラメータセット（ＶＰＳ）ＲＡＭユニット４６Ａ〜４６Ｎのうちの１つに関連付けられることができる。本開示では、ＶＰＳ  ＲＡＭユニット４６Ａ〜４６Ｎを集合的に「ＶＰＳ  ＲＡＭユニット４６」と呼ぶ。ＶＰＳ  ＲＡＭユニット４６は、処理要素３４によって使用されるボイスパラメータを記憶するレジスタとすることができる。調整モジュール３２は、ＭＩＤＩボイスのデジタル波形を生成するために処理要素３４のうちの１つを特定すると、当該特定された処理要素に関連するＶＰＳ  ＲＡＭユニット４６のうちの１つにＭＩＤＩボイスのボイスパラメータセットのボイスパラメータを記憶することができる。さらに、調整モジュール３２は、波形フェッチユニット／低周波発振器（ＷＦＵ／ＬＦＯ）メモリユニット３９にボイスパラメータセットのボイスパラメータを記憶することができる。
【００２８】
ＶＰＳ  ＲＡＭユニットおよびＷＦＵ／ＬＦＯメモリユニット３９にボイスパラメータをロードした後、調整モジュール３２は、ＭＩＤＩボイスのデジタル波形の生成を開始することを処理要素に命令することができる。処理要素３４の各々は、プログラムメモリユニット４４Ａ〜４４Ｎ（集合的に「プログラムメモリユニット４４」）のうちの１つに関連付けられることができる。プログラムメモリユニット４４の各々は、プログラム命令の組を記憶する。ＭＩＤＩボイスのデジタル波形を生成するために、処理要素は、その処理要素に関連するプログラムメモリユニット４４のうちの１つに記憶されたプログラム命令の組を実行することができる。これらのプログラム命令は、処理要素に、その処理要素に関連するＶＰＳメモリユニット４６のうちの１つからボイスパラメータの組を取り出させることができる。さらに、プログラム命令は、処理要素に、ボイスのベース波形サンプルへのポインタによってボイスパラメータで指定された波形について波形フェッチユニット（ＷＦＵ）３６への要求を送信させることができる。処理要素３４の各々は、ＷＦＵ３６を使用することができる。処理要素３４のうちの１つからの要求に応答して、ＷＦＵ３６は、要求元の処理要素に１つまたは複数の波形サンプルを戻すことができる。波形は、例えば最大で波形の１周期だけサンプル内で位相シフトできるので、ＷＦＵ３６は、補間を使用して位相シフトを補正するために２つのサンプルを返すことができる。さらに、ステレオ信号は２つの別々の波形からなるので、ＷＦＵ３６は、最高４つのサンプルを返すことができる。ＷＦＵ３６によって返される最後のサンプルは、補間に使用できる小数部の位相（fractional phase）であることができる。ＷＦＵ３６は、キャッシュメモリ４８を使用してベース波形を高速にフェッチすることができる。
【００２９】
ＷＦＵ３６が処理要素３４のうちの１つにオーディオサンプルを返した後、それぞれの処理要素は、追加のプログラム命令を実行することができる。そのような追加の命令は、ＭＩＤＩハードウェアユニット１８中の低周波発振器（ＬＦＯ）３８から非対称三角波形のサンプルを要求することを含むことができる。ＷＦＵ３６によって戻された波形にＬＦＯ３８によって戻された三角波を乗算することによって、処理要素は、その波形の様々な音響特性を操作することができる。例えば、波形に三角波を乗算すると、より所望の楽器らしく聞こえる波形が生じることがある。他の命令は、処理要素に、波形を特定の回数ループさせたり、波形の振幅を調整させたり、残響を追加させたり、ビブラートエフェクトを追加させたり、あるいは他の音響エフェクトを与えさせたりすることができる。このようにして、処理要素は、１つのＭＩＤＩフレームの間存続するボイスの波形を生成することができる。最終的に、処理要素は、終了命令に遭遇することができる。処理要素は、終了命令に遭遇すると、総和バッファ４０へ、生成された波形を与えることができる。代替として、処理要素は、デジタル波形の各サンプルを生成すると、そのような生成されたサンプルを総和バッファ４０に記憶することができる。
【００３０】
総和バッファ４０は、処理要素３４のうちの１つから波形を受け取ると、ＭＩＤＩフレームの全体的な波形に、その波形を統合する。例えば、総和バッファ４０は、最初にフラットな波形（すなわち、すべてのデジタルサンプルが０である波形）を記憶することができる。総和バッファ４０は、処理要素３４のうちの１つから波形を受け取ると、総和バッファ４０中に記憶された波形のそれぞれのサンプルに、その波形の各デジタルサンプルを加算する。このようにして、総和バッファ４０は、ＭＩＤＩフレームの全体的な波形を生成記憶する。
【００３１】
最終的に、調整モジュール３２は、処理要素３４が、リンクリストメモリ４２中のリストに示されたすべてのボイスのデジタル波形の生成を完了し、それらのデジタル波形を総和バッファ４０に供給したと判断することができる。この時点で、総和バッファ４０は、現在のＭＩＤＩフレーム全体の完成デジタル波形を含むことができる。調整モジュール３２は、この判断を行うと、ＤＳＰ１２に割込みを送信することができる。この割込みに応答して、ＤＳＰ１２は、総和バッファ４０の内容を受け取るために直接メモリ交換（ＤＭＥ）を介して要求を送信することができる。
【００３２】
図３は、オーディオ装置４の例示的な動作を示す流れ図である。最初に、プロセッサ８は、オーディオ記憶モジュール６からＲＡＭユニット１０にＭＩＤＩファイルをロードするプログラム命令に遭遇する（５０）。例えば、オーディオ装置４が携帯電話である場合、オーディオ装置４が着信電話呼を受け取り、ＭＩＤＩファイルが呼出音を記述すると、プロセッサ８は、固定記憶モジュール６からＲＡＭユニット１０にＭＩＤＩファイルをロードするプログラム命令に遭遇することができる。
【００３３】
ＲＡＭユニット１０にＭＩＤＩファイルをロードした後、プロセッサ８は、ＲＡＭユニット１０中のＭＩＤＩファイルからのＭＩＤＩ命令を解析することができる（５２）。次いで、プロセッサ８は、ＭＩＤＩイベントをスケジュールし、このスケジュールに従ってＤＳＰ１２にＭＩＤＩイベントを送出することができる（５４）。ＭＩＤＩイベントに応答して、ＤＳＰ１２は、ＭＩＤＩハードウェアユニット１８と協調して、リアルタイムで連続デジタル波形を出力することができる（５６）。すなわち、ＤＳＰ１２によって出力されるデジタル波形は、個別のＭＩＤＩフレームにセグメント化されない。ＤＳＰ１２は、ＤＡＣ１４に連続デジタル波形を与える（５８）。ＤＡＣ１４は、デジタル波形中の個々のデジタルサンプルを電圧に変換する（６０）。ＤＡＣ１４は、多種多様なデジタルアナログ変換技術を使用して実現できる。例えば、ＤＡＣ１４は、パルス幅変調器、オーバーサンプリングＤＡＣ、重み付きバイナリＤＡＣ、Ｒ−２ＲラダーＤＡＣ、サーモメータ（thermometer）符号化ＤＡＣ、セグメント型ＤＡＣ、または別のタイプのデジタルアナログ変換器として実現できる。
【００３４】
ＤＡＣ１４は、デジタル波形をアナログオーディオ信号に変換した後、駆動回路１６にアナログオーディオ信号を与えることができる（６２）。駆動回路１６は、スピーカ１９を駆動するために、アナログ信号を使用することができる（６４）。スピーカ１９は、電気的なアナログ信号を物理的なサウンドに変換する電気機械変換器とすることができる。スピーカ１９がサウンドを生成すると、オーディオ装置４のユーザは、そのサウンドを聞き、適宜に応答することができる。例えば、オーディオ装置４が携帯電話である場合、スピーカ１９が呼出音のサウンドを生成すると、ユーザは電話呼に答えることができる。
【００３５】
図４は、オーディオ装置４中のＤＳＰ１２の例示的な動作を示す流れ図である。最初に、ＤＳＰ１２はプロセッサ８からＭＩＤＩイベントを受け取る（７０）。ＭＩＤＩイベントを受け取った後、ＤＳＰ１２は、そのＭＩＤＩイベントがＭＩＤＩボイスのパラメータを更新する命令であるかどうかを判断する（７２）。例えば、ＤＳＰ１２は、ピアノの中央Ｃボイスのボイスパラメータの組中の左チャネルパラメータに対してゲインを増加するＭＩＤＩイベントを受け取ることができる。このようにして、ピアノの中央Ｃボイスは、そのノートのサウンドが左側から出ているように聞こえることができる。ＤＳＰ１２は、ＭＩＤＩイベントがＭＩＤＩボイスのパラメータを更新する命令であると判断した場合（７２の「はい」）、ＲＡＭユニット１０中の当該パラメータを更新することができる（７４）。
【００３６】
一方、ＤＳＰ１２は、ＭＩＤＩイベントがＭＩＤＩボイスのパラメータを更新する命令ではないと判断した場合（７２の「いいえ」）、ボイスインジケータのリストを生成することができる（７５）。リンクリスト中のボイスインジケータの各々は、ＭＩＤＩボイスを定義するボイスパラメータセットを記憶するＲＡＭユニット１０中のメモリ位置を指定することによって、ＭＩＤＩフレームのＭＩＤＩボイスを示す。ＭＩＤＩハードウェアユニット１８は、限られた時間の制約を受けるＭＩＤＩボイスのデジタル波形を生成することがあるので、ＭＩＤＩハードウェアユニット１８が、ＭＩＤＩフレームについてＭＩＤＩ命令によって指定されたすべてのＭＩＤＩボイスのデジタル波形を生成することは不可能であることがある。したがって、リンクリスト中のボイスインジケータによって示されるＭＩＤＩボイスは、ＭＩＤＩフレーム中で最大の音響的重要性を有するＭＩＤＩボイスである。ボイスインジケータのリストは、リンクリストとすることができる。すなわち、リスト中の各ボイスインジケータは、リスト中の最後のボイスインジケータを除いて、リスト中の次のボイスインジケータのメモリアドレスへのポインタに関連付けることができる。
【００３７】
ＭＩＤＩハードウェアユニット１８が最も重要なＭＩＤＩボイスのデジタル波形のみを生成するように、ＤＳＰ１２は、音響的に最も重要なボイスを特定するために１つまたは複数の動的（heuristic）アルゴリズムを使用することができる。例えば、ＤＳＰ１２は、最も高い平均音量を持つボイス、必要な和声を形成するボイス、または他の音響特性を特定することができる。音響的に最も重要なボイスがリスト中で１番目であり、音響的に２番目に重要なボイスがリスト中で２番目であるなどのように、ＤＳＰ１２はボイスインジケータのリストを生成することができる。さらに、ＤＳＰ１２は、ＭＩＤＩフレーム中のアクティブでないボイスをリストから削除することができる。
【００３８】
ボイスインジケータのリストを生成した後、ＤＳＰ１２は、ＭＩＤＩハードウェアユニット１８がアイドル状態かどうかを判断することができる（７６）。ＭＩＤＩハードウェアユニット１８は、ＭＩＤＩファイルの第１のＭＩＤＩフレームのデジタル波形を生成する前、またはＭＩＤＩフレームのデジタル波形の生成を完了した後、アイドル状態になることができる。ＭＩＤＩハードウェアユニット１８がアイドル状態でない場合（７６の「いいえ」）、ＤＳＰ１２は、１つまたは複数のクロックサイクル待機し、次いでＭＩＤＩハードウェアユニット１８がアイドル状態かどうかを再び判断することができる（７６）。
【００３９】
ＭＩＤＩハードウェアユニット１８がアイドル状態の場合（７６の「はい」）、ＤＳＰ１２は、ＭＩＤＩハードウェアユニット１８中のプログラムＲＡＭユニット４４に命令の組をロードすることができる（７８）。例えば、ＤＳＰ１２は、命令がプログラムＲＡＭユニット４４にすでにロードされているかどうかを判断することができる。命令がプログラムＲＡＭユニット４４にロードされていない場合、ＤＳＰ１２は、直接メモリ交換（ＤＭＥ）を使用してプログラムＲＡＭユニット４４にそのような命令を転送することができる。あるいは、命令がプログラムＲＡＭユニット４４にすでにロードされている場合、ＤＳＰ１２はこのステップをスキップすることができる。
【００４０】
ＤＳＰ１２は、プログラムＲＡＭユニット４４にプログラム命令をロードした後、ＭＩＤＩハードウェアユニット１８を活動状態にすることができる（８０）。例えば、ＤＳＰ１２は、ＭＩＤＩハードウェアユニット１８中のレジスタを更新することによって、またはＭＩＤＩハードウェアユニット１８に制御信号を送信することによって、ＭＩＤＩハードウェアユニット１８を活動状態にすることができる。ＭＩＤＩハードウェアユニット１８を活動状態にした後、ＤＳＰ１２は、ＭＩＤＩハードウェアユニット１８から割込みを受け取るまで待機することができる（８２）。割込みを待っている間、ＤＳＰ１２は、前のＭＩＤＩフレームのデジタル波形を処理して、出力することができる。さらに、ＤＳＰ１２は、次のＭＩＤＩフレームのボイスインジケータのリストを生成することもできる。割込みを受け取ると、ＤＳＰ１２の割込みサービスレジスタは、ＭＩＤＩハードウェアユニット１８中の総和バッファ４０からＭＩＤＩフレームのデジタル波形を転送するためのＤＭＥ要求を設定すること（８４）。総和バッファ４０中のデジタル波形が転送されているときに長期間ハードウェアがアイドル状態になるのを回避するために、直接メモリ交換要求は、総和バッファ４０からデジタル波形を３２個の３２ビットワードブロックで転送することができる。デジタル波形のデータの完全性（data integrity）は、処理要素３４が総和バッファ４０中でデータを上書きすることを防止する、総和バッファ４０中のロック機構によって守られることができる。このロック機構はブロックごとに解放できるので、直接メモリ交換転送は、ハードウェアの実行と並列に進行することができる。
【００４１】
ＤＳＰ１２は、ＭＩＤＩハードウェアユニット１８からＭＩＤＩフレームのオーディオサンプルを受け取った後、ＭＩＤＩハードウェアユニット１８から受け取ったＭＩＤＩフレームのデジタル波形に先行するＭＩＤＩフレームのデジタル波形をＤＡＣ１４に完全に出力するまで、デジタル波形をバッファリングすることができる（８６）。ＤＳＰ１２は、前のＭＩＤＩフレームのデジタル波形を完全に出力した後、ＭＩＤＩハードウェアユニット１８から受け取った現在のＭＩＤＩフレームのデジタル波形を出力することができる（８８）。
【００４２】
図５は、オーディオ装置４のＭＩＤＩハードウェアユニット１８中の調整モジュール３２の例示的な動作を示す流れ図である。最初に、調整モジュール３２は、ＭＩＤＩフレームのデジタル波形の生成を開始するために、ＤＳＰ１２から命令を受け取ることができる（１００）。ＤＳＰ１２から命令を受け取った後、調整モジュール３２は、総和バッファ４０の内容をクリアすることができる（１０２）。例えば、調整モジュール３２は、総和バッファ４０中のデジタル波形をすべて０に設定するよう総和バッファ４０に命令することができる。調整モジュール３２は、総和バッファ４０の内容をクリアした後、ＤＳＰ１２によって生成されたボイス識別子のリストをＲＡＭユニット１０からリンクリストメモリ４２にロードすることができる（１０４）。
【００４３】
ボイスインジケータのリンクリストをロードした後、調整モジュール３２は、処理要素３４のうちの１つがＭＩＤＩボイスのデジタル波形の生成を終了したことを示す信号をその処理要素から受け取ったかどうかを判断することができる（１０６）。調整モジュール３２が、処理要素３４のうちの１つがＭＩＤＩボイスのデジタル波形の生成を終了したことを示す信号をその処理要素から受け取っていない場合（１０６の「いいえ」）、処理要素３４はループバックし、そのような信号を待つことができる（１０６）。調整モジュール３２は、処理要素３４のうちの１つがＭＩＤＩボイスのデジタル波形の生成を終了したことを示す信号をその処理要素から受け取った場合（１０６の「はい」）、その処理要素に関連するＶＰＳ  ＲＡＭユニット４６のうちの１つに記憶された、および、その処理要素、波形フェッチユニット３６、またはＬＦＯ３８によって変更された可能性のあるＷＦＵ／ＬＦＯメモリ３９に記憶された、ボイスパラメータセットの１つまたは複数のパラメータをＲＡＭユニット１０に書き込むことができる（１０８）。例えば、ＭＩＤＩボイスの波形を生成している間、処理要素３４Ａは、ＶＰＳメモリ４６Ａ中のボイスパラメータセットのいくつかのパラメータを変更することができる。この場合、例えば、処理要素３４Ａは、ＭＩＤＩフレームの終了時のボイスの音量レベルを示すように、そのボイスのボイスパラメータを更新することができる。更新されたボイスパラメータをＲＡＭユニット１０に書き戻すことによって、所与の処理要素は、現在のＭＩＤＩフレームの終了時の音量レベルと同じ音量レベルで次のＭＩＤＩフレーム中のＭＩＤＩボイスのデジタル波形の生成を開始することができる。他の書込み可能なパラメータは、左右バランス、全体的な位相シフト、ＬＦＯ３８によって生成される三角波形の位相シフト、または他の音響特性を含むことができる。
【００４４】
調整モジュール３２は、パラメータをＲＡＭユニット１０に書き戻した後、処理要素３４がリスト中のボイスインジケータによって示される各ＭＩＤＩボイスのデジタル波形を生成したかどうかを判断することができる（１１０）。例えば、調整モジュール３２は、ボイスインジケータのリンクリスト中の現在のボイスインジケータを示すポインタを維持することができる。最初に、このポインタは、リンクリスト中の第１のボイスインジケータを示すことができる。処理要素３４がリスト中で示されるＭＩＤＩボイスの各々のデジタル波形を生成した場合（１１０の「はい」）、調整モジュール３２は、ＭＩＤＩフレームの全体的なデジタル波形が完全であることを示すためにＤＳＰ１２に割込みをアサートすることができる（１１２）。
【００４５】
一方、処理要素３４がリスト中でボイスインジケータによって示されるＭＩＤＩボイスの各々のデジタル波形を生成していない場合（１１０の「いいえ」）、調整モジュール３２はアイドル状態の処理要素３４のうちの１つを特定することができる（１１４）。すべての処理要素３４がアイドル状態でない（すなわち、ビジーである）場合、調整モジュール３２は、処理要素３４のうちの１つがアイドル状態になるまで待つことができる。アイドル状態の処理要素３４のうちの１つを特定した後、調整モジュール３２は、アイドル状態の処理要素に関連するＶＰＳ  ＲＡＭユニット４４のうちの１つに、現在のボイスインジケータによって示されるボイスパラメータセットのパラメータをロードすることができる（１１２）。調整モジュール３２は、処理要素に関係するボイスパラメータセットのパラメータのみをＶＰＳ  ＲＡＭユニットにロードすることができる。さらに、調整モジュール３２は、ＷＦＵ／ＬＦＯ  ＲＡＭユニット３９に、ＷＦＵ３６およびＬＦＯ３８に関係するボイスパラメータセットのパラメータをロードすることができる（１１８）。次いで、調整モジュール３２は、ＭＩＤＩボイスのデジタル波形の生成を開始するためにアイドル状態の処理要素をイネーブルにすることができる（１２０）。次に、調整モジュール３２は、現在のボイスインジケータをリスト中の次のボイスインジケータに更新し、処理要素３４のうちの１つがＭＩＤＩボイスのデジタル波形の生成を完了したことを示す信号を調整モジュール３２が受け取ったかどうかを再び判断する（１０６）ために、ループバックすることができる。
【００４６】
図６は、メモリアドレスを指定するボイスインジケータのリストを使用する例示的なＤＳＰ１２を示すブロック図である。図６の例に示すように、ＤＳＰ１２は、リストベースポインタ１４０を記憶するレジスタを含む。リストベースポインタ１４０は、リンクリストメモリ４２中のボイスインジケータのリスト１４２中の第１のボイスインジケータのメモリアドレスを指定することができる。ＭＩＤＩファイルの始めのように、リスト１４２中にボイスインジケータがない場合、リストベースポインタ１４０の値はヌル（null）アドレスであることがある。さらに、ＤＳＰ１２は、ボイスインジケータ数レジスタ（number of voice indicators register）１４４の値を記憶するレジスタを含む。ボイスインジケータ数レジスタ１４４の値は、リスト１４２中のボイスインジケータの数の集計を示す。図６に示す例示的なデータ構造では、リスト１４２中の各ボイスインジケータは、ＲＡＭユニット１０中のボイスパラメータセットのメモリアドレスと、リンクリストメモリ４２中の次のボイスインジケータのメモリアドレスとを含むことができる。リスト１４２中の最後のボイスインジケータは、リスト１４２中の次のボイスインジケータのアドレスにヌルアドレスを指定することができる。
【００４７】
ＲＡＭユニット１０は、ボイスパラメータセット１４６の組を含むことができる。ＲＡＭユニット１０中の各ボイスパラメータセットは、一つのボイスパラメータセット中のボイスパラメータの値を指定する連続するメモリ位置のブロックとすることができる。第１のボイスパラメータのメモリ位置のメモリアドレスは、ボイスパラメータセットのメモリアドレスとして働くことができる。
【００４８】
ＤＳＰ１２がＭＩＤＩファイルの第１のＭＩＤＩイベントを受け取る前、リスト１４２は、どのようなボイスインジケータも含んでいないことがある。リスト１４２がいかなるボイスインジケータも含んでいないことを反映するために、リストベースポインタ１４０の値は、ヌルメモリアドレスとすることができ、ボイスインジケータ数レジスタ１４４の値は、数０を指定することができる。ＭＩＤＩファイルの第１のＭＩＤＩフレームの開始時に、プロセッサ８は、ＭＩＤＩフレーム中に発生するＭＩＤＩイベントの組を調整モジュール３２に与えることができる。例えば、プロセッサ８は、ボイスをオンにするＭＩＤＩイベント、ボイスをオフにするＭＩＤＩイベント、アフタータッチエフェクトに関連するＭＩＤＩイベント、および他のそのようなエフェクトを生成するＭＩＤＩイベントをＤＳＰ１２に与えることができる。ＭＩＤＩイベントを処理するために、ＤＳＰ１２中のリストジェネレータモジュール１５６はリンクリストメモリ４２中にリンクリスト１４２を生成することができる。一般に、リストジェネレータモジュール１５６は各ＭＩＤＩフレーム中にリスト１４２を完全に生成するわけではない。そうではなく、リストジェネレータモジュール１５６は、リスト１４２中にすでに存在するボイスインジケータを再利用することができる。
【００４９】
リンクリスト１４２を生成するために、リストジェネレータモジュール１５６は、ＤＳＰ１２によって与えられたＭＩＤＩイベントの組で指定された各ＭＩＤＩボイスのボイスパラメータセット１４６のうちの１つのメモリアドレスを指定するボイスインジケータをリスト１４２がすでに含むかどうかを判断することができる。リストジェネレータモジュール１５６は、リスト１４２がＭＩＤＩボイスのうちの１つのボイスインジケータを含むと判断した場合、リスト１４２からそのボイスインジケータを削除することができる。リスト１４２からボイスインジケータを削除した後、リストジェネレータモジュール１５６は、そのボイスインジケータをリスト１４２に加え戻すことができる。リストジェネレータモジュール１５６は、ボイスインジケータをリスト１４２に戻した場合、リスト中の第１のボイスインジケータで開始し、削除されたボイスインジケータによって示されるＭＩＤＩボイスがリスト１４２中の第１のボイスインジケータによって示されるボイスよりも音響的に重要であるかどうかを判断することができる。言い換えれば、リストジェネレータモジュール１５６は、どちらのボイスがそのサウンドにとってより重要であるかどうかを判断することができる。リストジェネレータモジュール１５６は、ＭＩＤＩイベントで指定されたＭＩＤＩボイスと、第１のボイスインジケータで指定されたＭＩＤＩボイスとの、どちらがより音響的に重要であるかを判断するために、１つまたは複数の動的アルゴリズムを適用することができる。例えば、リストジェネレータモジュール１５６は、２つのＭＩＤＩボイスのどちらが現在のＭＩＤＩフレーム中に最も大きい平均音量を有するかを判断することができる。音響的重要性を判断するために他の音響心理学的な技法を適用することができる。削除されたボイスインジケータによって示されるＭＩＤＩボイスがリスト１４２中の第１のボイスインジケータによって示されるボイスよりも重要な場合、リストジェネレータモジュール１５６は、削除されたボイスインジケータをリストの一番上に追加することができる。
【００５０】
リストジェネレータモジュール１５６は、削除されたボイスインジケータをリストの一番上に追加した場合、削除されたボイスインジケータのメモリアドレスに等しくなるように、リストベースポインタの値を変更することができる。削除されたボイスインジケータによって示されるＭＩＤＩボイスが第１のボイスインジケータによって示されるＭＩＤＩボイスよりも重要でない場合、リストジェネレータモジュール１５６は、削除されたボイスインジケータによって示されるＭＩＤＩボイスよりも重要でない、リスト１４２中のボイスインジケータのうちの１つによって示されるＭＩＤＩボイスを特定するまで、リスト１４２を下に進む。リストジェネレータモジュール１５６は、そのようなＭＩＤＩボイスを特定した場合、リスト１４２の当該特定されたＭＩＤＩボイスのボイスインジケータより上に（すなわち、前に）、削除されたボイスインジケータを挿入する。削除されたボイスインジケータによって示されるＭＩＤＩボイスがリスト１４２中のボイスインジケータによって示される他のすべてのボイスよりも音響的に重要でない場合は、リストジェネレータモジュール１５６は、削除されたボイスインジケータをリスト１４２の末尾に追加する。リストジェネレータモジュール１５６は、このプロセスをＭＩＤＩイベントの組中のＭＩＤＩボイスごとに実行することができる。
【００５１】
リストジェネレータモジュール１５６は、リスト１４２がＭＩＤＩイベントに関連するＭＩＤＩボイスのボイスインジケータを含まないと判断した場合、ＭＩＤＩボイスのリンクリストメモリ４２中に新しいボイスインジケータを作成することができる。新しいボイスインジケータを作成した後、リストジェネレータモジュール１５６は、削除されたボイスインジケータについて上述した方法で、リスト１４２にその新しいボイスインジケータを挿入することができる。このようにして、リストジェネレータモジュール１５６は、リンクリスト中のボイスインジケータが、リスト中のボイスインジケータによって示されるＭＩＤＩボイスの音響的重要性に従って順番に配置された、リンクリストを生成することができる。一例として、リストジェネレータモジュール１５６は、ＭＩＤＩフレーム中の最も重要なボイスから最も重要でないボイスまでのＭＩＤＩボイスを示すボイスインジケータのリストを生成することができる。
【００５２】
図６の例では、ＤＳＰ１２は、リスト１４２の生成においてリストジェネレータモジュール１５６を支援するポインタの組を含む。このポインタの組は、リストジェネレータモジュール１５６が現在使用しているボイスインジケータのメモリアドレスを保持する現在のボイスインジケータポインタ１４８と、リストジェネレータモジュール１５６がリスト１４２に挿入しているボイスインジケータのメモリアドレスを保持するイベントボイスインジケータポインタ１５０と、現在使用しているボイスインジケータの前にリストジェネレータモジュール１５６が使用したボイスインジケータのメモリアドレスを保持する、前のボイスインジケータポインタ１５２と、を含む。
【００５３】
ボイスインジケータ数レジスタ１４４の値がボイスインジケータの最大数を超える場合、リストジェネレータモジュール１５６は、最も重要でないＭＩＤＩボイスを示すリスト１４２中のボイスインジケータに関連するメモリの割当てを解除することができる。リスト１４２中のボイスインジケータが最も重要なものから最も重要でないものへ配置されている場合、リストジェネレータモジュール１５６は、ヌルメモリアドレスを指定する次のボイスインジケータのメモリアドレスを含むボイスインジケータを特定するまで、次のボイスインジケータのメモリアドレスのチェーンに従うことによって、最も重要でないＭＩＤＩボイスを示すリスト１４２中のボイスインジケータを特定することができる。最後のボイスインジケータに関連するメモリの割当てを解除した後、リストジェネレータモジュール１５６は、ボイスインジケータ数レジスタ１４４の値を１だけデクリメントする。
【００５４】
リストジェネレータモジュール１５６は、リスト１４２を生成した後、リストベースポインタ１４０およびボイスインジケータ数１４４の値を調整モジュールに与えることができる。調整モジュール３２は、リストベースポインタ１４０およびボイスインジケータ数１４４のこれらの値を保持するためにレジスタ（図示せず）を含むことができる。調整モジュール３２は、リスト１４２にアクセスし、リスト１４２中のボイスインジケータによって示されるＭＩＤＩボイスを処理要素３２に割り当てるために、これらの値を使用する。例えば、リストジェネレータモジュール１５６がリスト１４２の生成を終了すると、調整モジュール３２は、リスト１４２をリンクリストメモリ４２にロードするために、リストジェネレータモジュール１５６によって与えられたリストベースポインタ１４０の値を使用する。次いで、調整モジュール３２は、アイドル状態の処理要素３４のうちの１つを特定することができる。次いで、調整モジュール３２は、現在のボイスインジケータを示す調整モジュール３２中のポインタによって指定されたメモリ位置で、リスト１４２中のボイスインジケータによって示されるＭＩＤＩボイスを定義するボイスパラメータセットを記憶するＲＡＭユニット１０中のメモリ位置のメモリアドレスを得ることができる。次いで、調整モジュール３２は、ボイスパラメータセット中の少なくともいくつかのボイスパラメータを、アイドル状態の処理要素に関連するＶＰＳ  ＲＡＭユニット４６のうちの１つに記憶するために、得られたメモリアドレスを使用することができる。ボイスパラメータセットをＶＰＳ  ＲＡＭユニット中に記憶した後、調整モジュール３２は、ボイスの波形の生成を開始するために処理要素に信号を送信することができる。処理要素３４がリスト１４２中のボイスインジケータによって示される各ボイスの波形を生成するまで、調整モジュール３２はこれを継続することができる。
【００５５】
ＤＳＰ１２および調整モジュール３２がボイスインジケータのリンクリストを使用することは、いくつかの利点を提示する。例えば、ＤＳＰ１２は、ボイスパラメータセットを示すボイスインジケータのリンクリストをソートし、再編成するので、ＲＡＭユニット１０中の実際のボイスパラメータセットをソートし、再編成する必要はない。ボイスインジケータは、ボイスパラメータセットよりもかなり小さくすることができる。したがって、ＤＳＰ１２は、ＲＡＭユニット１０へのおよびＲＡＭユニット１０からのより少ないデータの移動（すなわち、書込みおよび読取り）を行う。したがって、ＤＳＰ１２は、ボイスパラメータセットをソートし、再編成する場合よりも、調整モジュール３２からＲＡＭユニット１０へのバス上の帯域幅がより少なくて済む。さらに、ＤＳＰ１２は、ＲＡＭユニット１０との間でより少ないデータを移動するので、実際のボイスパラメータセットを移動する場合よりも、消費する電力を少なくすることができる。また、ボイスインジケータのリンクリストを使用すると、ＤＳＰ１２は処理要素３４にボイスパラメータセットを任意の順序で与えることが可能になる。ボイスパラメータセットを任意の順序で処理要素３４に与えることは、いくつかのタイプのオーディオ処理に有用である。
【００５６】
さらに、インジケータのリンクリストの使用は、ＭＩＤＩボイスセットパラメータの識別子以外のコンテキストにおいて適用性がある。例えば、インジケータは、ＭＩＤＩボイスパラメータの組よりも、予めプログラムされたデジタルフィルタを示すことができる。各予めプログラムされたデジタルフィルタは、４次フィルタ用の５つの係数を与えることができる。４次フィルタは、ポールからさらに離れている周波数を取り除く２ポール２ゼロのデジタルフィルタである。４次フィルタは、オーディオイコライザをプログラムするために使用できる。ＭＩＤＩボイスと同様に、第１のデジタルフィルタは、第２のデジタルフィルタよりも多少重要であることができる。したがって、デジタルフィルタを適用するモジュールは、デジタルフィルタの組を効率的に適用するために、デジタルフィルタパラメータに対するインジケータのソートされたリンクリストを使用することができる。例えば、ＤＳＰ１２がデジタル波形を生成した後、オーディオ装置４のモジュールは、そのデジタル波形にフィルタを適用することができる。
【００５７】
図７は、ＤＳＰ１２がプロセッサ８からＭＩＤＩイベントの組を受け取る場合のＤＳＰ１２の例示的な動作を示す流れ図である。最初に、ＤＳＰ１２は、プロセッサ８からＭＩＤＩイベントの組を受け取ることができる（１６０）。ＤＳＰ１２がＭＩＤＩイベントの組を受け取った後、リストジェネレータモジュール１５６は、そのＭＩＤＩイベントの組が空かどうかを判断することができる（１６２）。ＭＩＤＩイベントの組が空の場合（１６２の「はい」）、リストジェネレータモジュール１５６は、調整モジュール３２にリストベースポインタ１４０の値を与えることができる（１６４）。
【００５８】
一方、ＭＩＤＩイベントの組が空でない場合（１６２の「いいえ」）、リストジェネレータモジュール１５６は、そのＭＩＤＩイベントの組からイベントを削除することができる（１６６）。削除されたイベントを本明細書では「現在のイベント」と呼び、該現在のイベントに関連する１つまたは複数のＭＩＤＩボイスを本明細書では「現在のボイス」と呼ぶ。リストジェネレータモジュール１５６は、ＭＩＤＩイベントの組から現在のイベントを削除した後、リストベースポインタ１４０の値がヌルアドレスであるかどうかを判断することができる（１６８）。リストベースポインタ１４０の値がヌルアドレスでない場合（１６８の「いいえ」）、リストジェネレータモジュール１５６はリスト１４２に現在のボイスのボイスインジケータを挿入することができる。図８および図９は、リスト１４２にボイスインジケータを挿入するための例示的な手順を示している。リストジェネレータモジュール１５６は、リスト１４２にボイスインジケータを挿入した後、ループバックし、ＭＩＤＩイベントの組がヌルであるかどうかを再び判断することができる（１６２）。
【００５９】
リストベースポインタ１４０の値がヌルアドレスを指定する場合（１６８の「はい」）、リストジェネレータモジュール１５６は、現在のボイスのボイスインジケータのリンクリストメモリ４２に連続するメモリブロックを割り当てることができる（１７０）。メモリブロックを割り当てた後、リストジェネレータモジュール１５６は、リストベースポインタ１４０中にメモリブロックのメモリアドレスを記憶することができる（１７２）。次いで、リストジェネレータモジュール１５６は、ボイスインジケータ数レジスタ１４４の値を１だけインクリメントすることができる（１７４）。さらに、リストジェネレータモジュール１５６は、現在のボイスのボイスインジケータを初期化することができる（１７６）。ボイスインジケータを初期化するために、リストジェネレータモジュール１５６は、ボイスインジケータの次のボイスインジケータポインタをヌルに設定し、ボイスインジケータのボイスパラメータセットポインタを、現在のボイスのボイスパラメータセットのボイスパラメータセット１４６中のメモリアドレスに設定することができる。ボイスインジケータを初期化した後、リストジェネレータモジュール１５６は、ループバックし、ＭＩＤＩイベントの組が空であるかどうかを再び判断することができる（１６２）。
【００６０】
図８は、ＤＳＰ１２がボイスインジケータをボイスインジケータのリスト１４２に挿入する場合のＤＳＰ１２の例示的な動作を示す流れ図である。特に、図８の例は、ボイスインジケータがその後リスト１４２中の適切な位置に挿入できるように、ＤＳＰ１２中のリストジェネレータモジュール１５６が現在のボイスのボイスインジケータをリスト１４２から削除するか、または現在のボイスの新しいボイスインジケータを作成する動作を示している。図８、図９、図１０、および図１１では、「ボイスインジケータ」という用語を「Ｖ．Ｉ．」と略記し、「ボイスパラメータセット」という用語を「Ｖ．Ｐ．Ｓ」と略記する。図８の例に示された流れ図は「Ａ」で示された円で開始し、その円は図７の例において「Ａ」で示された円に対応する。
【００６１】
最初に、リストジェネレータモジュール１５６は、現在のボイスインジケータポインタ１４８の値をリストベースポインタ１４０の値に設定することができる（１８０）。次に、リストジェネレータモジュール１５６は、前のボイスインジケータポインタ１５２の値をヌルに設定することができる（１８２）。前のボイスインジケータポインタ１５２の値をヌルに設定した後、リストジェネレータモジュール１５６は、現在のボイスインジケータ（すなわち、現在のボイスインジケータポインタ１４８のメモリアドレスに等しいメモリアドレスを有するボイスインジケータ）のボイスパラメータポインタが現在のイベントのボイスのボイスパラメータセットのメモリアドレスに等しいかどうかを判断することができる（１８４）。
【００６２】
リストジェネレータモジュール１５６は、現在のボイスインジケータのボイスパラメータポインタがボイスパラメータセットのメモリアドレスに等しいと判断した場合（１８４の「はい」）、前のボイスインジケータポインタ１５２の値がヌルアドレスであるかどうかを判断することができる（１８６）。リストジェネレータモジュール１５６は、前のボイスインジケータポインタ１５２の値がヌルアドレスでないと判断した場合（１８６の「いいえ」）、前のボイスインジケータ（すなわち、前のボイスインジケータポインタ１５２中のメモリアドレスに等しいメモリアドレスを有するインジケータ）の次のボイスインジケータポインタを、現在のボイスインジケータの次のボイスインジケータポインタの値に設定することができる（１８８）。前のボイスインジケータの次のボイスインジケータポインタを設定した後、リストジェネレータモジュール１５６は、イベントボイスインジケータポインタ１５０の値を現在のボイスインジケータポインタ１４８の値に設定することができる（１９０）。前のボイスインジケータポインタ１５２の値がヌルである場合（１８６の「はい」）、リストジェネレータモジュール１５６はまた、イベントボイスインジケータポインタ１５０の値を現在のボイスインジケータポインタ１４８の値に設定することができる。このようにして、リストジェネレータモジュール１５６は、ボイスインジケータの次のボイスインジケータポインタをヌルメモリアドレスに設定することは試みない。リストジェネレータモジュール１５６は、イベントボイスインジケータポインタ１４８の値を設定した後、現在のボイスインジケータポインタ１４８の値をリストベースポインタ１４０の値に設定することができる（１９２）。次いで、リストジェネレータモジュール１５６は、イベントボイスインジケータポインタ１５０によってポイントされるボイスインジケータを再挿入するために、図９に示された例示的な動作を使用することができる。
【００６３】
リストジェネレータモジュール１５６は、現在のボイスインジケータのボイスパラメータセットがボイスパラメータセットのメモリアドレスに等しくないと判断した場合（１８４の「いいえ」）、現在のボイスインジケータの次のボイスインジケータポインタの値がヌルであるかどうかを判断することができる（１９４）。言い換えれば、リストジェネレータモジュール１５６は、現在のボイスインジケータがリスト１４２中の最後のボイスインジケータであるかどうかを判断することができる。リストジェネレータモジュール１５６は、現在のボイスインジケータの次のボイスインジケータポインタの値がヌルでないと判断した場合（１９４の「いいえ」）、前のボイスインジケータポインタ１５２の値を現在のボイスインジケータポインタ１４８の値に設定することができる（１９６）。次いで、リストジェネレータモジュール１５６は、現在のボイスインジケータポインタ１４８の値を現在のボイスインジケータ中の次のボイスインジケータポインタの値に設定することができる（１９８）。このようにして、リストジェネレータモジュール１５６は、現在のボイスインジケータをリスト１４２中の次のボイスインジケータに進めることができる。次いで、リストジェネレータモジュール１５６は、ループバックして、新しい現在のボイスインジケータのボイスパラメータセットポインタが現在のボイスのボイスパラメータセットのアドレスに等しいかどうかを再び判断することができる（１８４）。
【００６４】
一方、リストジェネレータモジュール１５６は、現在のボイスインジケータの次のボイスインジケータポインタがヌルであると判断した場合（１９４の「はい」）、現在のボイスのボイスインジケータを位置特定することなしにリスト１４２の末尾に達する。このために、リストジェネレータモジュール１５６は、現在のボイスの新しいボイスインジケータを作成することができる。現在のボイスの新しいボイスインジケータを作成するために、リストジェネレータモジュール１５６は、新しいボイスインジケータにリンクリストメモリ４２中のメモリを割り当てることができる（２００）。次いで、リストジェネレータモジュール１５６は、イベントボイスインジケータポインタ１４８の値を新しいボイスインジケータのメモリアドレスに設定することができる（２０２）。新しいボイスインジケータは現在、イベントボイスインジケータである。次に、リストジェネレータモジュール１５６は、ボイスインジケータ数レジスタ１４４の値を１だけインクリメントすることができる（２０４）。ボイスインジケータ数レジスタ１４４の値をインクリメントした後、リストジェネレータモジュール１５６は、現在のボイスのボイスパラメータセットのメモリアドレスを含むようにイベントボイスインジケータのボイスパラメータセットポインタを設定することができる（２０６）。次いで、リストジェネレータモジュール１５６は、現在のボイスインジケータポインタ１４８の値をリストベースポインタ１４０の値に設定し（１９２）、次いで、図９に示された例示的な動作に従ってリスト１４２にイベントボイスインジケータを挿入することができる。
【００６５】
図９は、ＤＳＰがボイスインジケータをリスト１４２に挿入する場合のＤＳＰ１２の例示的な動作を示す流れ図である。図９の例に示された流れ図は「Ｂ」で示された円で開始し、その円は図８の例において「Ｂ」で示された円に対応する。
【００６６】
最初に、ＤＳＰ１２中のリストジェネレータモジュール１５６は、イベントボイスインジケータによって示されるボイスパラメータセットを、ＲＡＭユニット１０から取り出すことができる（２１０）。次いで、リストジェネレータモジュール１５６は、現在のボイスインジケータによって示されるボイスパラメータセットを、ＲＡＭユニット１０から取り出すことができる（２１２）。両方のボイスパラメータセットを取り出した後、リストジェネレータモジュール１５６は、ボイスパラメータセット中の値に基づいて、ＭＩＤＩボイスの相対的な音響的重要性を判断することができる（２１４）。
【００６７】
イベントボイスインジケータによって示されるＭＩＤＩボイスが現在のボイスインジケータによって示されるＭＩＤＩボイスよりも重要である場合（２１４の「はい」）、リストジェネレータモジュール１５６は、イベントボイスインジケータ中の次のボイスインジケータを現在のボイスインジケータポインタ１４８の値に設定することができる（２１６）。次のボイスインジケータを設定した後、リストジェネレータモジュール１５６は、現在のボイスインジケータポインタ１４８の値がリストベースポインタ１４０の値に等しいかどうかを判断することができる（２１８）。言い換えれば、リストジェネレータモジュール１５６は、現在のボイスインジケータがリスト１４２中の最初のボイスインジケータであるかどうかを判断することができる。現在のボイスインジケータポインタ１４８の値がリストベースポインタ１４０の値に等しい場合（２１８の「はい」）、リストジェネレータモジュール１５６は、リストベースポインタ１４０の値をイベントボイスインジケータポインタ１５０の値に設定することができる（２２０）。このようにして、イベントボイスインジケータは、リスト１４２中の第１のボイスインジケータになる。一方、現在のボイスインジケータポインタ１４８の値がリストベースポインタ１４０の値に等しくない場合（２１８の「いいえ」）、リストジェネレータモジュール１５６は、前のボイスインジケータ中の次のボイスインジケータポインタの値をイベントボイスインジケータポインタ１５０の値に設定することができる（２２２）。このようにして、リストジェネレータモジュール１５６は、イベントボイスインジケータをリスト１４２にリンクすることができる。
【００６８】
一方、イベントボイスインジケータによって示されるＭＩＤＩボイスが現在のボイスインジケータによって示されるＭＩＤＩボイスよりも重要でない場合（２１４の「いいえ」）、リストジェネレータモジュール１５６は、現在のボイスインジケータ中の次のボイスインジケータポインタの値がヌルであるかどうかを判断することができる（２２４）。次のボイスインジケータポインタの値がヌルである場合、現在のボイスインジケータは、リスト１４２中の最後のボイスインジケータである。現在のボイスインジケータ中の次のボイスインジケータポインタの値がヌルである場合（２２４の「はい」）、リストジェネレータモジュール１５６は、現在のボイスインジケータ中の次のボイスインジケータポインタの値をイベントボイスインジケータポインタ１５０の値に設定することができる（２２６）。このようにして、イベントボイスインジケータによって示されるボイスがリスト１４２中の最も重要でないボイスである場合、リストジェネレータモジュール１５６はイベントボイスインジケータをリスト１４２の末尾に追加することができる。
【００６９】
しかしながら、現在のボイスインジケータ中の次のボイスインジケータポインタがヌルでない場合（２２４の「いいえ」）、現在のボイスインジケータはリスト１４２中の最後のボイスインジケータではない。このために、リストジェネレータモジュール１５６は、前のボイスインジケータ１５２の値を現在のボイスインジケータポインタ１４８の値に設定することができる（２２８）。次いで、リストジェネレータモジュール１５６は、現在のボイスインジケータポインタ１４８の値を現在のボイスインジケータ中の次のボイスインジケータポインタの値に設定することができる（２３０）。現在のボイスインジケータポインタ１４８の値を設定した後、リストジェネレータモジュール１５６は、ループバックして、現在のボイスインジケータによって示されるボイスパラメータセットを再び取り出すことができる（２１２）。
【００７０】
図１０は、リスト１４２中のボイスインジケータの数がボイスインジケータの最大数を超えたとき、ＤＳＰがリスト１４２からボイスインジケータを削除する場合のＤＳＰ１２の例示的な動作を示す流れ図である。例えば、ＤＳＰ１２は、リスト１４２中のボイスインジケータの最大数を１０に制限することができる。この例では、ＭＩＤＩハードウェアユニット１８は、ＭＩＤＩフレーム中の１０個の音響的に最も重要なＭＩＤＩボイスのデジタル波形のみを生成する。ボイスの数に制限なしには、ＭＩＤＩハードウェアユニット１８は、ＭＩＤＩフレームが許す時間内にリスト１４２中のすべてのボイスを処理することはできないので、ＤＳＰ１２はリスト１４２中のボイスインジケータの最大数を設定することができる。さらに、ＤＳＰ１２は、リンクリストメモリ４２中の空間を節約するためにリスト１４２中のボイスインジケータの最大数を設定することができる。さらに、リスト１４２のボイスインジケータの最大数は、リスト１４２に新しいボイスインジケータを挿入するために必要な計算数に上限を設定することができる。計算数に上限を設定することは、リアルタイムでＭＩＤＩフレームのデジタル波形を生成するための必要条件になる。
【００７１】
最初に、ＤＳＰ１２中のリストジェネレータモジュール１５６は、ボイスインジケータ数レジスタ１４４の値がリスト１４２中のボイスインジケータの最大数よりも大きいかどうかを判断することができる（２４０）。ボイスインジケータ数レジスタ１４４の値がボイスインジケータの最大数よりも大きくない場合（２４０の「いいえ」）、リスト１４２からボイスインジケータを削除する必要はない。しかしながら、いくつかの例では、リストジェネレータモジュール１５６は、リスト１４２を走査し、現在アクティブでないか、または所与の時間内にアクティブでなかったボイスのボイスインジケータを削除することができる。
【００７２】
ボイスインジケータ数レジスタ１４４の値がボイスインジケータの最大数よりも大きい場合（２４０の「はい」）、リストジェネレータモジュール１５６は、現在のボイスインジケータポインタ１４８の値をリストベースポインタ１４０の値に設定することができる（２４２）。次に、リストジェネレータモジュール１５６は、前のボイスインジケータポインタ１５２の値をヌルに設定することができる（２４４）。この時点で、リストジェネレータモジュール１５６は、現在のボイスインジケータの次のボイスインジケータポインタの値がヌルであるかどうか（すなわち、現在のボイスインジケータがリスト１４２中の最後のボイスインジケータであるかどうか）を判断することができる（２４８）。現在のボイスインジケータの次のボイスインジケータポインタの値がヌルでないと判断した場合（２４８の「いいえ」）、リストジェネレータモジュール１５６は、前のボイスインジケータポインタ１５２の値を現在のボイスインジケータポインタ１４８の値に設定することができる（２５０）。次いで、リストジェネレータモジュール１５６は、現在のボイスインジケータポインタ１４８の値を現在のボイスインジケータの次のボイスインジケータポインタの値に設定することができる（２５２）。次に、リストジェネレータモジュール１５６は、新しい現在のボイスインジケータの次のボイスインジケータポインタの値がヌルに等しいかどうかを再び判断する（２４８）ために、ループバックすることができる。
【００７３】
現在のボイスインジケータの次のボイスインジケータポインタがヌルに等しい場合（２４８の「はい」）、現在のボイスインジケータは、リスト１４２中の最後のボイスインジケータである。次いで、リストジェネレータモジュール１５６は、リスト１４２からの最後のボイスインジケータを削除することができる。リスト１４２から最後のボイスインジケータを削除するために、リストジェネレータモジュール１５６は、前のボイスインジケータの次のボイスインジケータポインタをヌルに設定することができる（２５４）。次に、調整モジュール３２は、現在のボイスインジケータのリンクリストメモリ４２中のメモリの割当てを解除する（２５６）。次いで、調整モジュール３２はボイスインジケータ数レジスタ１４４の値をデクリメントすることができる（２５８）。ボイスインジケータ数レジスタ１４４の値をデクリメントした後、リストジェネレータモジュール１５６は、ボイスインジケータ数レジスタ１４４の値がボイスインジケータの最大許容数よりも大きいかどうかを再び判断する（２４０）ために、ループバックすることができる。
【００７４】
図１１は、メモリアドレスが導き出せる指標値を指定するボイスインジケータのリストを使用する例示的なＤＳＰ１２を示すブロック図である。図１２の例では、リスト１４２中の各ボイスインジケータは、４つのボイスパラメータセット（ＶＰＳ）指標値を含む３２ビットワードと、リスト１４２中の次のボイスインジケータのメモリアドレスと、を含む。ブロック２６０中の各ＶＰＳ指標値は、ボイスパラメータセットのブロック２６２中のボイスパラメータセットに関連する数を指定することができる。例えば、第１のＶＰＳ指標値は、ボイスパラメータセットのブロック２６２中の第２のボイスパラメータセットを示す数「２」を指定することができる。さらに、ブロック２６０中の各ＶＰＳ指標値は、ＲＡＭユニット１０中の４バイトワードのうちの１バイト（すなわち８ビット）で表せる。ＶＰＳ指標値が１バイトで表されるので、１個のＶＰＳ指標値は、２５６（すなわち、２８＝２５６）個のボイスパラメータセットのうちの１つを示すことができる。
【００７５】
さらに、図１１の例では、ＲＡＭユニット１０は、メモリ位置の連続ブロック２６２中に各ボイスパラメータセットを記憶する。ＲＡＭユニット１０が一つの連続ブロック中に各ボイスパラメータセットを記憶するので、あるボイスパラメータセットは、前のボイスパラメータセットの直後のメモリ位置で開始する。
【００７６】
ＤＳＰ１２または調整モジュール３２は、ボイスパラメータセットのブロック２６２中のボイスパラメータセットへのアクセスを必要とする場合、最初に、ブロック２６０中のボイスパラメータセットの指標値に、セットサイズレジスタ２６８中に含まれる値を乗算することができる。セットサイズレジスタ２６８に含まれる値は、１個のボイスパラメータセットが占めるＲＡＭユニット１０の中のアドレス可能な位置の数に等しいことができる。次いで、ＤＳＰ１２または調整モジュール３２は、セットベースポインタレジスタ２６６の値を加算することができる。セットベースポインタレジスタ２６６に含まれる値は、ブロック２６２中の第１のボイスパラメータセットのメモリアドレスに等しいことができる。このようにして、ボイスパラメータセットの指標にボイスポインタセットのサイズを乗算し、第１のボイスパラメータセットのメモリアドレスを加算することによって、ＤＳＰ１２または調整モジュール３２は、ブロック２６２中のボイスパラメータセットの第１のメモリアドレスを導き出すことができる。
【００７７】
調整モジュール３２が図８〜図１０のリスト１４２中のボイスインジケータを制御した方法とほとんど同じ方法で、ＤＳＰ１２は図１１のリスト１４２中のボイスインジケータを制御することができる。しかしながら、この例示的なデータ構造を使用する場合、ＤＳＰ１２はボイスインジケータ内でＶＰＳ指標値をソートすることができる。
【００７８】
図１１に示された例示的なデータ構造は、ボイスパラメータセットへの同数のポインタを記憶するために必要なリンクリストメモリ４２中のメモリ位置がより少なくて済むので、図６に示された例示的なデータ構造に勝る利点を有することができる。しかしながら、図１１に示されたデータ構造は、ＤＳＰ１２および調整モジュール３２による追加の計算の実行を必要とすることがある。
【００７９】
図１２は、例示的な処理要素３４Ａの詳細を示すブロック図である。図１２の例は処理要素３４Ａの詳細を示すが、これらの詳細は処理要素３４のうちの他の処理要素にも適用可能である。
【００８０】
図１２の例に示すように、処理要素３４Ａは、いくつかの構成要素を備えることができる。これらの構成要素は、限定はしないが、制御ユニット２８０、論理演算ユニット（ＡＬＵ）２８２、マルチプレクサ２８４、およびレジスタの組２８６を含むことができる。さらに、処理要素３４Ａは、ＶＰＳ  ＲＡＭユニット４６Ａ用の読取りインターフェース先入れ先出し（ＦＩＦＯ）２９２、ＶＰＳ  ＲＡＭユニット４６Ａ用の書込みインターフェースＦＩＦＯ、ＬＦＯ３８用のインターフェースＦＩＦＯ２９６、ＷＦＵ３６用のインターフェースＦＩＦＯ２９８、総和バッファ４０用のインターフェースＦＩＦＯ３００、および総和バッファ４０中のＲＡＭ用のインターフェースＦＩＦＯ３０２を含むことができる。
【００８１】
制御ユニット２８０は、命令を読み取り、その命令に基づいて処理要素３４Ａを制御する制御信号を出力する回路の組を備えることができる。制御ユニット２８０は、現在の命令のメモリアドレスを記憶するプログラムカウンタ２９０、処理要素３４によって実行される第１のプログラムループのカウンタを記憶する第１のループカウンタ３０４、および処理要素３４によって実行される第２のプログラムループのカウンタを記憶する第２のループカウンタ３０６を含むことができる。ＡＬＵ２８２は、レジスタ２８６のうちの様々なレジスタに記憶された値に様々な算術演算を実行する回路を備えることができる。ＡＬＵ２８２は、ＭＩＤＩボイスのデジタル波形を生成するために特殊なユーティリティを有する算術動作の実行用にスペシャライズされることができる。レジスタ２８６は、符号付きまたは符号なし値を保持することができる８つの３２ビットレジスタの組とすることができる。マルチプレクサ２８４は、制御ユニット２８０によって出力される制御信号に基づいて、ＡＬＵ２８２、インターフェース読取りＦＩＦＯ２９２、インターフェースＦＩＦＯ２９６、インターフェースＦＩＦＯ２９８、およびインターフェースＦＩＦＯ３０２からの出力をレジスタ２８６のうちの特定のレジスタに導くことができる。
【００８２】
処理要素３４Ａは、ＭＩＤＩボイスのデジタル波形の生成用にスペシャライズされたプログラム命令の組を使用することができる。言い換えれば、処理要素３４Ａで使用されるプログラム命令の組は、縮小命令セットコンピュータ（ＲＩＳＣ）命令セットなど汎用命令セット中またはｘ８６命令セットなど複合命令セットアーキテクチャ命令セット中に見つからないプログラム命令を含むことができる。さらに、処理要素３４Ａで使用されるプログラム命令の組は、汎用命令セット中に見つかるいくつかのプログラム命令を除外することができる。
【００８３】
処理要素３４Ａによって使用されるプログラム命令は、論理演算ユニット（ＡＬＵ）命令、ロード／ストア命令、および制御命令として分類することができる。処理要素３４Ａによって使用されるプログラム命令の各クラスは、様々な長さとすることができる。例えば、ＡＬＵ命令は２０ビット長、ロード／ストア命令は１８ビット長、および制御命令は１６ビット長とすることができる。
【００８４】
ＡＬＵ命令は、制御ユニット２８０にＡＬＵ２８２への制御信号を出力させる命令である。１つの例示的なフォーマットでは、各ＡＬＵ命令は、２０ビット長とすることができる。例えば、ＡＬＵ命令のビット１９：１８は予約済みであり、ビット１７：１４はＡＬＵ命令識別子を含み、ビット１３：１１はレジスタ２８６のうちの第１のレジスタの識別子を含み、ビット１０：８はレジスタ２８６のうちの第２のレジスタの識別子を含み、ビット７：５はシフトすべきビットの数またはレジスタ２８６のうちの第３のレジスタの識別子を含み、ビット４：２はレジスタ２８６のうちの宛先レジスタの識別子を含み、ビット１：０はＡＬＵ制御ビットを含む。本明細書では、ＡＬＵ制御ビットを「ＡＣＣ」と略記する。以下でより詳細に述べるように、ＡＬＵ制御ビットはＡＬＵ命令の動作を制御する。
【００８５】
処理要素３４Ａによって使用されるＡＬＵ命令の組は、以下の命令を含む。
【００８６】
ＭＵＬＴＳＳ：
構文：ＭＵＬＴＳＳ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：制御ユニット２８０に、レジスタＲｘとＲｙの符号付き値の乗算を実行し、積を「ｓｈｉｆｔ」によって指定された量だけ左にシフトするようＡＬＵ２８２に命令する制御信号を出力させる。積をシフトした後、ＡＬＵ２８２はＡＣＣによって指定されたビットを積から抽出する。次いで、ＡＬＵ２８２はこれらのビットを出力する。ＡＣＣ＝０の場合、ＡＬＵ２８２は積の下位３２ビットを抽出する。ＡＣＣ＝１の場合、ＡＬＵ２８２は積の中位３２ビットを抽出する。ＡＣＣ＝２の場合、ＡＬＵ２８２は積の上位３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６中のＲｚに導くために、制御ユニット２８０にマルチプレクサ２８４への制御信号を出力させる。
【００８７】
ＭＵＬＴＳＵ：
構文：ＭＵＬＴＳＵ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：制御ユニット２８０に、Ｒｘの符号付き値とＲｙの符号なし値の乗算を実行し、積を「ｓｈｉｆｔ」によって指定された量だけ左にシフトするようＡＬＵ２８２に命令する制御信号を出力させる。積をシフトした後、ＡＬＵ２８２はＡＣＣによって指定されたビットを積から抽出する。次いで、ＡＬＵ２８２はこれらのビットを出力する。ＡＣＣ＝０の場合、ＡＬＵ２８２は積の下位３２ビットを抽出する。ＡＣＣ＝１の場合、ＡＬＵ２８２は積の中位３２ビットを抽出する。ＡＣＣ＝２の場合、ＡＬＵ２８２は積の上位３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６中のＲｚに導くために、制御ユニット２８０にマルチプレクサ２８４への制御信号を出力させる。
【００８８】
ＭＵＬＴＵＵ：
構文：ＭＵＬＴＵＵ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：制御ユニット２８０に、レジスタＲｘとＲｙの符号なし値の乗算を実行し、積を「ｓｈｉｆｔ」によって指定された量だけ左にシフトするようＡＬＵ２８２に命令する制御信号を出力させる。積をシフトした後、ＡＬＵ２８２はＡＣＣによって指定されたビットを積から抽出する。次いで、ＡＬＵ２８２はこれらのビットを出力する。ＡＣＣ＝０の場合、ＡＬＵ２８２は積の下位３２ビットを抽出し、これらの３２ビットをＲｚに記憶する。ＡＣＣ＝１の場合、ＡＬＵ２８２は積の中位３２ビットを抽出する。ＡＣＣ＝２の場合、ＡＬＵ２８２は積の上位３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６中のＲｚに導くために、制御ユニット２８０にマルチプレクサ２８４への制御信号を出力させる。
【００８９】
ＭＡＣＳＳ：
構文：ＭＡＣＳＳ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：制御ユニット２８０に、レジスタＲｘとＲｙの符号付き値の乗算を実行し、積を「ｓｈｉｆｔ」によって指定された量だけ左にシフトするようＡＬＵ２８２に命令する制御信号を出力させる。積をシフトした後、ＡＬＵ２８２はＡＣＣによって指定された３２ビットを積から抽出し、これらの３２ビットをＲｚの値に加算し、得られたビットを出力する。ＡＣＣ＝０の場合、ＡＬＵ２８２は積の下位３２ビットを抽出する。ＡＣＣ＝１の場合、ＡＬＵ２８２は積の中位３２ビットを抽出する。ＡＣＣ＝２の場合、ＡＬＵ２８２は積の上位３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６中のＲｚに導くために、制御ユニット２８０にマルチプレクサ２８４への制御信号を出力させる。
【００９０】
ＭＡＣＳＵ：
構文：ＭＡＣＳＵ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：制御ユニット２８０に、Ｒｘの符号付き値とＲｙの符号なし値の乗算を実行し、積を「ｓｈｉｆｔ」によって指定された量だけ左にシフトするようＡＬＵ２８２に命令する制御信号を出力させる。積をシフトした後、ＡＬＵ２８２はＡＣＣによって指定された３２ビットを積から抽出する。次いで、ＡＬＵ２８２は、これらの３２ビットをＲｚの値に加算し、得られたビットを出力する。ＡＣＣ＝０の場合、ＡＬＵ２８２は積の下位３２ビットを抽出する。ＡＣＣ＝１の場合、ＡＬＵ２８２は積の中位３２ビットを抽出する。ＡＣＣ＝２の場合、ＡＬＵ２８２は積の上位３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６中のＲｚに導くために、制御ユニット２８０にマルチプレクサ２８４への制御信号を出力させる。
【００９１】
ＭＡＣＵＵ：
構文：ＭＡＣＵＵ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：制御ユニット２８０に、レジスタＲｘとＲｙの符号なし値の乗算を実行し、積を「ｓｈｉｆｔ」によって指定された量だけ左にシフトするようＡＬＵ２８２に命令する制御信号を出力させる。積をシフトした後、ＡＬＵ２８２はＡＣＣによって指定された３２ビットを積から抽出し、これらの３２ビットをＲｚの値に加算する。次いで、ＡＬＵ２８２は得られたビットを出力する。ＡＣＣ＝０の場合、ＡＬＵ２８２は積の下位３２ビットを抽出する。ＡＣＣ＝１の場合、ＡＬＵ２８２は積の中位３２ビットを抽出する。ＡＣＣ＝２の場合、ＡＬＵ２８２は積の上位３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６中のＲｚに導くために、制御ユニット２８０にマルチプレクサ２８４への制御信号を出力させる。
【００９２】
ＭＵＬＴＵＵＭＩＮ：
構文：ＭＵＬＴＵＵＭＩＮ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：制御ユニット２８０に、レジスタＲｘとＲｙの符号なし値の乗算を実行し、積を「ｓｈｉｆｔ」によって指定された量だけ左にシフトするようＡＬＵ２８２に命令する制御信号を出力させる。次いで、ＡＬＵ２８２はＡＣＣによって指定されたビットを積から抽出し、これらのビットがＲｚに記憶された数よりも少ない数を表すかどうかを判断する。これらのビットがＲｚに記憶された数よりも少ない数を表す場合、ＡＬＵ２８２はこれらのビットを出力する。ＡＣＣ＝０の場合、ＡＬＵ２８２は積の下位３２ビットを抽出する。ＡＣＣ＝１の場合、ＡＬＵ２８２は積の中位３２ビットを抽出する。ＡＣＣ＝２の場合、ＡＬＵ２８２は積の上位３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６中のＲｚに導くために、制御ユニット２８０にマルチプレクサ２８４への制御信号を出力させる。
【００９３】
ＭＡＣＳＳＤ：
構文：ＭＡＣＳＳＤ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：制御ユニット２８０に、レジスタＲｘとＲｙの符号付き値の乗算を実行し、積を「ｓｈｉｆｔ」によって指定された量だけ左にシフトするようＡＬＵ２８２に命令する制御信号を出力させる。次いで、ＡＬＵ２８２はＡＣＣによって指定された３２ビットを積から抽出する。これらのビットを積から抽出した後、ＡＬＵ２８２はこれらの３２ビットをＲｚの後のレジスタ（すなわち、Ｒｚ＋１）に記憶された値に加算する。これらの値を加算した後、ＡＬＵ２８２は和を出力する。ＡＣＣ＝０の場合、ＡＬＵ２８２は積の下位３２ビットを抽出する。ＡＣＣ＝１の場合、ＡＬＵ２８２は積の中位３２ビットを抽出する。ＡＣＣ＝２の場合、ＡＬＵ２８２は積の上位３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６中のＲｚに導くために、制御ユニット２８０にマルチプレクサ２８４への制御信号を出力させる。
【００９４】
ＭＡＣＳＵＤ：
構文：ＭＡＣＳＳＤ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：制御ユニット２８０に、レジスタＲｘの符号付き値とレジスタＲｙの符号なし値の乗算を実行し、積を「ｓｈｉｆｔ」によって指定された量だけ左にシフトするようＡＬＵ２８２に命令する制御信号を出力させる。次いで、ＡＬＵ２８２はＡＣＣによって指定された３２ビットを積から抽出する。これらのビットを積から抽出した後、ＡＬＵ２８２はこれらの３２ビットをＲｚの後のレジスタ（すなわち、Ｒｚ＋１）に記憶された値に加算する。これらの値を加算した後、ＡＬＵ２８２は和を出力する。ＡＣＣ＝０の場合、ＡＬＵ２８２は積の下位３２ビットを抽出する。ＡＣＣ＝１の場合、ＡＬＵ２８２は積の中位３２ビットを抽出する。ＡＣＣ＝２の場合、ＡＬＵ２８２は積の上位３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６中のＲｚに導くために、制御ユニット２８０にマルチプレクサ２８４への制御信号を出力させる。
【００９５】
ＭＡＣＵＵＤ：
構文：ＭＡＣＳＳＤ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：制御ユニット２８０に、レジスタＲｘとＲｙの符号なし値の乗算を実行し、積を「ｓｈｉｆｔ」によって指定された量だけ左にシフトするようＡＬＵ２８２に命令する制御信号を出力させる。次いで、ＡＬＵ２８２はＡＣＣによって指定された３２ビットを積から抽出する。これらのビットを積から抽出した後、ＡＬＵ２８２はこれらの３２ビットをＲｚの後のレジスタ（すなわち、Ｒｚ＋１）に記憶された値に加算する。これらの値を加算した後、ＡＬＵ２８２は和を出力する。ＡＣＣ＝０の場合、ＡＬＵ２８２は積の下位３２ビットを抽出する。ＡＣＣ＝１の場合、ＡＬＵ２８２は積の中位３２ビットを抽出する。ＡＣＣ＝２の場合、ＡＬＵ２８２は積の上位３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６中のＲｚに導くために、制御ユニット２８０にマルチプレクサ２８４への制御信号を出力させる。
【００９６】
ＭＡＳＳＳ：
構文：ＭＡＳＳＳ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：制御ユニット２８０に、レジスタＲｘとＲｙの符号付き値の乗算を実行し、積を「ｓｈｉｆｔ」によって指定された量だけ左にシフトするようＡＬＵ２８２に命令する制御信号を出力させる。次いで、ＡＬＵ２８２はＡＣＣによって指定された３２ビットを積から抽出する。ビットを抽出した後、ＡＬＵ２８２は、これらのビットをＲｚの値から減算し、得られたビットを出力する。ＡＣＣ＝０の場合、ＡＬＵ２８２は積の下位３２ビットを抽出する。ＡＣＣ＝１の場合、ＡＬＵ２８２は積の中位３２ビットを抽出する。ＡＣＣ＝２の場合、ＡＬＵ２８２は積の上位３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６中のＲｚに導くために、制御ユニット２８０にマルチプレクサ２８４への制御信号を出力させる。
【００９７】
ＭＡＳＳＵ：
構文：ＭＡＳＳＳ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：制御ユニット２８０に、レジスタＲｘの符号付き値とレジスタＲｙの符号なし値の乗算を実行し、積を「ｓｈｉｆｔ」によって指定された量だけ左にシフトするようＡＬＵ２８２に命令する制御信号を出力させる。次いで、ＡＬＵ２８２はＡＣＣによって指定された３２ビットを積から抽出する。ビットを抽出した後、ＡＬＵ２８２は、これらのビットをＲｚの値から減算し、得られたビットを出力する。ＡＣＣ＝０の場合、ＡＬＵ２８２は積の下位３２ビットを抽出する。ＡＣＣ＝１の場合、ＡＬＵ２８２は積の中位３２ビットを抽出する。ＡＣＣ＝２の場合、ＡＬＵ２８２は積の上位３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６中のＲｚに導くために、制御ユニット２８０にマルチプレクサ２８４への制御信号を出力させる。
【００９８】
ＭＡＳＵＵ：
構文：ＭＡＳＵＵ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：制御ユニット２８０に、レジスタＲｘとＲｙの符号なし値の乗算を実行し、積を「ｓｈｉｆｔ」によって指定された量だけ左にシフトするようＡＬＵ２８２に命令する制御信号を出力させる。制御信号はまた、ＡＬＵ２８２に、ＡＣＣによって指定された３２ビットを積から抽出させる。ビットを抽出した後、ＡＬＵ２８２は、これらのビットをＲｚの値から減算し、得られた値を出力する。ＡＣＣ＝０の場合、ＡＬＵ２８２は積の下位３２ビットを抽出する。ＡＣＣ＝１の場合、ＡＬＵ２８２は積の中位３２ビットを抽出する。ＡＣＣ＝２の場合、ＡＬＵ２８２は積の上位３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６中のＲｚに導くために、制御ユニット２８０にマルチプレクサ２８４への制御信号を出力させる。
【００９９】
ＥＧＣＯＭＰ：
構文：ＥＧＣＯＭＰ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：制御ユニット２８０に、処理要素３４Ａが現在処理しているＭＩＤＩボイスを定義するボイスパラメータセットの組の制御ワードに基づいて操作を選択させる。ＥＧＣＯＭＰ命令はまた、制御ユニット２８０に、選択された動作を実行するようＡＬＵ２８０に命令する制御信号を出力させる。第１のモードでは、ＡＬＵ２８２は、Ｒｘの値とＲｙの値を加算し、得られた和を出力する。第２のモードでは、ＡＬＵ２８２は、Ｒｘの値とＲｙの値の符号なし乗算を実行し、積をｓｈｉｆｔで指定された量だけ左にシフトし、シフトされた積の最上位３２ビットを出力する。第３のモードでは、ＡＬＵ２８２は、Ｒｘの値を出力する。第４のモードでは、ＡＬＵ２８２は、Ｒｙの値を出力する。ＥＧＣＯＭＰ命令のコンテキストでは、ＡＣＣ値０は、制御ユニット２８０に、現在のＭＩＤＩボイスの音量エンベロープの新しい値を計算するようＡＬＵ２８２に命令する制御信号を出力させることができる。ＡＣＣ値１は、制御ユニット２８０に、現在のＭＩＤＩボイスの新しい変調エンベロープを計算するようＡＬＵ２８２に命令する制御信号を出力させることができる。ＥＧＣＯＭＰ命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６中のＲｚに導くために、制御ユニット２８０にマルチプレクサ２８４への制御信号を出力させる。
【０１００】
モードに関連するＥＧＣＯＭＰ命令の演算を行う前に、ＡＬＵ２８２は、まずそのモードを計算する。例えば、ＡＬＵ２８２は次の式を使用してモードを計算することができる。
【数１】
2010522359.tif 000003
【０１０１】
すなわち、「ｍｏｄｅ」の値は、現在のボイスパラメータセットの制御ワード中の２ビットに等しい。これらの２ビットのうちの上位ビットの指標は、以下のステップを行うことによって決定できる。
【０１０２】
（１）ＡＣＣ値に８を乗算する（すなわち、ＡＣＣ値のビット単位表現を３つ分だけ左にシフトする）ことによって第１の積を生成する。
【０１０３】
（２）第２のループカウンタの最下位２ビットに２を乗算する（すなわち、ＡＣＣ値のビット単位表現を１つ分だけ左にシフトする）ことによって第２の積を生成する。
【０１０４】
（３）第１の積と第２の積と数値１とを加算する。
【０１０５】
制御ワードの２ビットのうちの下位ビットの指標は、上記第３のステップにおける数値１の加算を行わない以外は同じステップを行うことによって決定できる。例えば、制御ワードは０ｘ００００８０７（すなわち、０ｂ００００  ００００  ００００  ００００  ０１００  ００００  ０１１１）に等しくなる。さらに、ＡＣＣ値は０ｂ０００１になり、第２のループカウンタの値は０ｂ０００１になる。この例では、制御ワードの上位ビットの指標は０ｂ００００１０１１（すなわち１０進法の１１）になり、制御ワードの下位ビットの指標は０ｂ００００１０１０（すなわち１０進法の１０）になる。前の文では、下線付きの指標値のビットはＡＣＣからのビットを表し、イタリック体の指標値のビットは第２のループカウンタからのビットを表す。したがって、値０および１がそれぞれ制御ワードの位置１１および１０にあるので、モードは０１（すなわち１０進法の１）である。モードが０１であるので、ＡＬＵ２８２は、Ｒｘの値とＲｙの値の符号なし乗算を実行し、積をｓｈｉｆｔで指定された量だけ左にシフトし、シフトされた積の最上位３２ビットを出力する。
【０１０６】
エンベロープ生成とは、個々のミュージカルノートの音量または変調品質をモデル化する方法である。各ミュージカルノートはいくつかのフェーズを有することができる。例えば、ミュージカルノートは、ディレイフェーズ、アタックフェーズ、ホールドフェーズ、ディケイフェーズ、サスティンフェーズ、およびリリースフェーズを有することができる。ディレイフェーズは、アタックフェーズの開始前の時間量を定義することができる。アタックフェーズ中、音量または変調レベルがピークレベルに上げられる。ホールドフェーズ中、音量または変調レベルはピークレベルに維持される。ディケイフェーズ中、音量または変調レベルはサスティンレベルに下げられる。サスティンレベルの間、音量または変調レベルはサスティンレベルに維持される。リリースフェーズ中、音量または変調レベルは０に減少する。さらに、音量またはモジュールレベルの変化は線形または指数関数的になる。エンベロープ生成フェーズの長さは、サブフレームの見地から定義できる。「サブフレーム」という用語は、ＭＩＤＩフレームの１／４を指すことができる。例えば、ＭＩＤＩフレームが１０ミリ秒である場合、サブフレームは２．５ミリ秒である。例えば、ＭＩＤＩボイスのアタックフェーズは、１サブフレームだけ持続し、ＭＩＤＩボイスのディケイフェーズは、１サブフレームだけ持続し、ＭＩＤＩボイスのサスティンフェーズは、２サブフレームだけ持続することができる。
【０１０７】
ＥＧＣＯＭＰ命令は、エンベロープ生成を行う演算を実行する。例えば、加算演算（すなわちモード００）は、サブフレームの間の音量または変調レベルの直線的な増加（ramp up）（例えばアタックフェーズ中）、または直線的な減少（ramp down）（すなわちディケイフェーズまたはリリースフェーズ中）に対応することができる。乗算演算（すなわちモード０１）は、サブフレームの間の音量または変調レベルの指数関数的な増加または減少（すなわちディケイフェーズまたはリリースフェーズ中）に対応することができる。代入演算（すなわちモード１０および１１）は、サブフレームの間の音量または変調強度のサスティンに対応することができる。制御ワードでは、ビット１：０は、音量用に第１のサブフレーム中でどのＥＧＣＯＭＰモードを使用すべきかを示し、ビット３：２は、音量用に第２のサブフレーム中でどのＥＧＣＯＭＰモードを使用すべきかを示し、ビット５：４は、音量用に第３のサブフレーム中でどのＥＧＣＯＭＰモードを使用すべきかを示し、ビット７：６は、音量用に第４のサブフレーム中でどのＥＧＣＯＭＰモードを使用すべきかを示し、ビット９：８は、変調用に第１のサブフレーム中でどのＥＧＣＯＭＰモードを使用すべきかを示し、ビット１１：１０は、変調用に第２のサブフレーム中でどのＥＧＣＯＭＰモードを使用すべきかを示し、ビット１３：１２は、変調用に第３のサブフレーム中でどのＥＧＣＯＭＰモードを使用すべきかを示し、ビット１５：１４は、変調用に第４のサブフレームでのどのＥＧＣＯＭＰモードを使用すべきかを示すことができる。
【０１０８】
ロード／ストア命令は、処理要素３４Ａの外部にあるいくつかのモジュールのうちの１つから情報を読み取るか、またはそれに情報を書き込む命令である。制御ユニット２８０は、ロード／ストア命令に遭遇すると、そのロード／ストア命令が完了するまでブロックする。１つの例示的なフォーマットでは、各ロード／ストア命令は、１８ビット長である。例えば、ロード／ストア命令のビット１７：１６は予約済みであり、ビット１５：１３はロード／ストア命令識別子を含み、ビット１２：６はロード元またはストア先アドレスを含み、ビット５：３はレジスタ２８６のうちの第１のレジスタの識別子を含み、ビット２：０はレジスタ２８６のうちの第２のレジスタの識別子を含む。
【０１０９】
処理要素３４Ａによって使用されるロード／ストア命令の組は、以下の命令を含む。
【０１１０】
ＬＯＡＤＤＡＴＡ：
構文：ＬＯＡＤＤＡＴＡ  ａｄｄｒｅｓｓ，Ｒｙ，Ｒｚ
機能：ＲｙがＲｚに等しい場合、ａｄｄｒｅｓｓにおける値をＲｙにロードする。アドレスが偶数である場合、ａｄｄｒｅｓｓおよび（ａｄｄｒｅｓｓ＋１）における値をそれぞれレジスタＲｙおよびＲｚにロードする。ａｄｄｒｅｓｓが奇数である場合、（ａｄｄｒｅｓｓ−１）およびａｄｄｒｅｓｓにおける値をそれぞれＲｙおよびＲｚにロードする。
【０１１１】
ＳＴＯＲＥＤＡＴＡ：
構文：ＳＴＯＲＥＤＡＴＡ  ａｄｄｒｅｓｓ，Ｒｙ，Ｒｚ
機能：ＲｙがＲｚに等しい場合、Ｒｙの値をａｄｄｒｅｓｓにストアする。ａｄｄｒｅｓｓが偶数である場合、ＲｙおよびＲｚにおける値をそれぞれａｄｄｒｅｓｓおよび（ａｄｄｒｅｓｓ＋１）にストアする。ａｄｄｒｅｓｓが奇数である場合、ＲｙおよびＲｚにおける値をそれぞれ（ａｄｄｒｅｓｓ−１）およびアドレスにストアする。
【０１１２】
ＬＯＡＤＳＵＭ：
構文：ＬＯＡＤＳＵＭ  Ｒｘ，Ｒｙ
機能：サンプルカウントによって示された総和バッファ４０中の値をレジスタＲｙおよびＲｚにロードする。ＬＯＡＤＳＵＭ命令で使用されるサンプルカウントは、下記のＳＴＯＲＥＳＵＭ命令で使用されるカウントと同じである。
【０１１３】
ＬＯＡＤＦＩＦＯ：
構文：ＬＯＡＤＦＩＦＯ  ｆｉｆｏ＿ｌｏｗ＿ｈｉｇｈ，ｆｉｆｏ＿ｓｉｇｎｅｄ＿ｕｎｓｉｇｎｅｄ，Ｒｘ
機能：ＷＦＵインターフェースＦＩＦＯ２９８のヘッドから値を削除し、その値をＲｘにストアする。値がロードされるレジスタ２８６のうちの１つ、および値がどのようにレジスタにロードされるかは、ｆｉｆｏ＿ｌｏｗ＿ｈｉｇｈフラグおよびｆｉｆｏ＿ｓｉｇｎｅｄ＿ｕｎｓｉｇｎｅｄフラグに依存する。ｆｉｆｏ＿ｌｏｗ＿ｈｉｇｈが０である場合、値はＲｘの下位１６ビットにロードされる。ｆｉｆｏ＿ｌｏｗ＿ｈｉｇｈが１である場合、値はＲｘの上位１６ビットにロードされる。ｆｉｆｏ＿ｓｉｇｎｅｄ＿ｕｎｓｉｇｎｅｄが０である場合、値は符号なし数値としてストアされる。ｆｉｆｏ＿ｓｉｇｎｅｄ＿ｕｎｓｉｇｎｅｄが１である場合、値は符号付き数値としてストアされ、その値は３２ビットに符号付き拡張される。ただし、ｆｉｆｏ＿ｌｏｗ＿ｈｉｇｈフラグが１に設定された場合、ｆｉｆｏ＿ｓｉｇｎｅｄ＿ｕｎｓｉｇｎｅｄフラグは効果をもたない。
【０１１４】
ＳＴＯＲＥＷＦＵ：
構文：ＳＴＯＲＥＷＦＵ  Ｒｘ
機能：Ｒｘ中の値をＷＦＵ３６に送信する。
【０１１５】
ＳＴＯＲＥＳＵＭ：
構文：ＳＴＯＲＥＳＵＭ  ａｃｃ＿ｓａｔ＿ｍｏｄｅ，Ｒｘ，Ｒｙ
機能：レジスタＲｘおよびＲｙ中の値を総和バッファ４０にストアする。さらに、この命令は、第１および第２のループカウンタに絶対的（implicitly）に依存するサンプルカウンタを送信する。このサンプルカウンタは、処理要素３４Ａによって現在、デジタル波形のどのサンプルが処理されているかを記述する。制御ユニット２８０は、調整モジュール３２からリセットコマンドを受け取ると、この値を０に初期化する。その後、制御ユニット２８０は、ＳＴＯＲＥＳＵＭ命令に遭遇するたびにサンプルカウンタを１ずつインクリメントする。制御ユニット２８０は、サンプルカウンタを制御信号として総和バッファ４０に出力することができる。ａｃｃ＿ｓａｔ＿ｍｏｄｅパラメータは、総和バッファ４０がサンプル用の値を飽和するかどうかを規定することができる。飽和は、サンプル用の値が、サンプルに対してストアできる最高数を上回るか、または最低数を下回るときに起こることができる。飽和がイネーブルである場合、Ｒｘの値とＲｙの値を加算することにより、サンプル用の値が、サンプルに対して表し得る最高数を上回るか、または最低数を下回るときには、総和バッファ４０は、その値を最高数または最低数に維持することができる。飽和がイネーブルでない場合、総和バッファ４０は、Ｒｘの値とＲｙの値を加算するとき、サンプル用の数をロールオーバすることができる。さらに、ａｃｃ＿ｓａｔ＿ｍｏｄｅパラメータは、総和バッファ４０が、サンプル用の値の代わりにレジスタＲｘおよびＲｙ中の値を使用するか、あるいはレジスタＲｘおよびＲｙ中の値を総和バッファ４０中のサンプル用の値に加算するかを決定することができる。以下の表は、ａｃｃ＿ｓａｔ＿ｍｏｄｅパラメータの例示的な動作を示す。
【表１】
2010522359.tif 000004
【０１１６】
ＬＯＡＤＬＦＯ：
構文：ＬＯＡＤＬＦＯ  ｌｆｏ＿ｉｄ，ｌｆｏ＿ｕｐｄａｔｅ，Ｒｘ
ここで、
｛ｌｆｏ＿ｉｄ｝＝読み取るＬＦＯのタイプ：２ビット
００：ｍｏｄＬｆｏ→ピッチ
０１：ｍｏｄＬｆｏ→利得
１０：ｍｏｄＬｆｏ→周波数コーナ
１１：ｖｉｂＬｆｏ→ピッチ
｛ｌｆｏ＿ｕｐｄａｔｅ｝＝現在の出力後に更新するパラメータ：２ビット
００：更新なし
０１：ＬＦＯ値のみを更新する
１０：ＬＦＯ位相のみを更新する
１１：ＬＦＯ値とＬＦＯ位相の両方を更新する
機能：「ｌｆｏ＿ｉｄ」によって指定された識別子を有するＬＦＯ３８からの値をＲｘにロードする。さらに、この命令は、その値をＲｘにロードした後、どのパラメータを更新すべきかをＬＦＯ３８に命令する。
【０１１７】
上述のように、ＬＦＯ３８は、１つまたは複数の正確な三角デジタル波形を生成することができる。処理要素３４の各々に対して、ＬＦＯ３８は、変調ピッチ値、変調利得値、変調周波数コーナ値、およびビブラートピッチ値という４つの出力値を供給することができる。これらの出力値の各々は、三角デジタル波形の変化を表すことができる。
【０１１８】
制御ユニット２８０は、ＬＯＡＤＬＦＯ命令を読み取ると、「ｌｆｏ＿ｉｄ」パラメータを表す制御信号をＬＦＯ３８に出力することができる。「ｌｆｏ＿ｉｄ」パラメータを表すこの制御信号は、出力値のうちの１つの値を処理要素３４Ａ中のインターフェースＦＩＦＯ２９６に送信するようＬＦＯ３８に命令することができる。例えば、制御ユニット２８０が、「ｌｆｏ＿ｉｄ」の値０１を表す制御信号を送信する場合、ＬＦＯ３８は、変調利得出力値の値を送信することができる。さらに、制御ユニット２８０は、インターフェースＦＩＦＯ２９６からの出力をレジスタ２８６中のレジスタＲｚに導くための制御信号をマルチプレクサ２８４に出力することができる。
【０１１９】
さらに、制御ユニット２８０は、ＬＯＡＤＬＦＯ命令を読み取ると、「ｌｆｏ＿ｕｐｄａｔｅ」パラメータを表す制御信号をＬＦＯ３８に出力することができる。「ｌｆｏ＿ｕｐｄａｔｅ」パラメータを表すこの制御信号は、どのように出力値を更新すべきかをＬＦＯ３８に命令する。ＬＦＯ３８は、「ｌｆｏ＿ｕｐｄａｔｅ」パラメータを表す制御信号を受けると、処理要素３４Ａが現在処理しているＭＩＤＩボイスのボイスパラメータの組に基づいて実行すべき動作を選択することができる。例えば、ＬＦＯ３８は、ＬＦＯ３８が「ディレイ」状態にあるのか「生成」状態にあるのかを判断するために、ボイスパラメータセットの制御ワードを使用することができる。
【０１２０】
ＬＦＯ３８が「ディレイ」状態にあるのか「生成」状態にあるのかを判断するために、ＬＦＯ３８は、ＶＰＳ  ＲＡＭ４６Ａ中に記憶されているボイスパラメータセットの制御ワードのビットにアクセスすることができる。例えば、制御ワードのビット２３：１６により、ＬＦＯが「生成」モードにあるのか「ディレイ」状態にあるのかを判断することができる。「生成」状態においては、ＬＦＯ３８は、ピッチ用のパラメータを乗算することができる。「ディレイ」状態においては、ＬＦＯ３８は、ピッチ用のパラメータを乗算しない。例えば、制御ワードのビット１６は、ＬＦＯ３８の変調モードが現在のＭＩＤＩフレームの第１のサブフレームについてディレイ状態にあるのか生成状態にあるのかを示し、ビット１７は、変調モードＬＦＯ３８が現在のＭＩＤＩフレームの第２のサブフレームについてディレイ状態にあるのか生成状態にあるのかを示し、ビット１８は、変調モードＬＦＯ３８が現在のＭＩＤＩフレームの第３のサブフレームについてディレイ状態にあるのか生成状態にあるのかを示し、ビット１９は、変調モードＬＦＯ３８が現在のＭＩＤＩフレームの第４のサブフレームについてディレイ状態にあるのか生成状態にあるのかを示すことができる。
【０１２１】
さらに、制御ワードのビット２０は、ＬＦＯ３８のビブラートモードが現在のＭＩＤＩフレームの第１のサブフレームについてディレイ状態にあるのか生成状態にあるのかを示し、制御ワードのビット２１は、ＬＦＯ３８のビブラートモードが現在のＭＩＤＩフレームの第２のサブフレームについてディレイ状態にあるのか生成状態にあるのかを示し、制御ワードのビット２２は、ＬＦＯ３８のビブラートモードが現在のＭＩＤＩフレームの第３のサブフレームについてディレイ状態にあるのか生成状態にあるのかを示し、制御ワードのビット２３は、ＬＦＯ３８のビブラートモードが現在のＭＩＤＩフレームの第４のサブフレームについてディレイ状態にあるのか生成状態にあるのかを示すことができる。
【０１２２】
動作（すなわち、「ディレイ」モードまたは「生成」モードのどちらで実行すべきか）を選択した後、ＬＦＯ３８は、その選択された動作を行うことができる。ＬＦＯ３８がディレイ状態にある場合、ＬＦＯ３８は、「ｌｆｏ＿ｉｄ」パラメータによって特定されたＬＦＯのモード用のバイアス値を、そのモード用のＬＦＯ３８の出力レジスタ中に記憶することができる。一方、ＬＦＯ３８が生成状態にある場合、ＬＦＯ３８は最初に、「ｌｆｏ＿ｕｐｄａｔｅ」パラメータの値が２または３に等しいのかを判断することができる。「ｌｆｏ＿ｕｐｄａｔｅ」の値が２または３に等しい場合、ＬＦＯ３８は、ＬＦＯ位相を更新する、またはＬＦＯ値および位相を更新することができる。「ｌｆｏ＿ｕｐｄａｔｅ」パラメータの値が２または３に等しい場合、ＬＦＯ３８は、ＬＦＯ比をＬＦＯの現在の位相に加算することによってＬＦＯの位相を更新することができる。次に、ＬＦＯ３８は、「ｌｆｏ＿ｕｐｄａｔｅ」パラメータの値が１または３に等しいかを判断する。「ｌｆｏ＿ｕｐｄａｔｅ」の値が１または３に等しい場合、ＬＦＯ３８は、ＬＦＯ３８中の現在のサンプルに利得を乗算し、バイアス値を加算することによって、「ｌｆｏ＿ｉｄ」パラメータによって特定されたＬＦＯ出力レジスタの更新値を計算することができる。
【０１２３】
以下の例示的な擬似コードは、ＬＯＡＤＬＦＯ命令の動作を要約したものである。
【数２】
2010522359.tif 000005
【０１２４】
この例示的な擬似コードは、処理要素３４ＡおよびＬＦＯ３８によって実行されるソフトウェア命令を表すものではない。そうではなく、この擬似コードは、処理要素３４ＡおよびＬＦＯ３８のハードウェアで実行される動作を記述することができる。
【０１２５】
制御命令は、制御ユニット２８０の挙動を制御する命令である。１つの例示的なフォーマットでは、各制御命令は１６ビット長である。例えば、ビット１５：１３は制御命令識別子を含み、ビット１２：４はメモリアドレスを含み、ビット３：０は制御用マスクを含む。
【０１２６】
処理要素３４Ａによって使用される制御命令の組は、以下の命令を含む。
【０１２７】
ＪＵＭＰＤ：
構文：ＪＵＭＰＤ  ａｄｄｒｅｓｓ，ｍａｓｋ
機能：［ｍａｓｋ］とＶＰＳ  ＲＡＭユニット４６Ａ中の制御ワードのビット２７：２４とのビット毎の論理積演算が、０でない値に評価される場合、この命令は、［ａｄｄｒｅｓｓ］の値をプログラムカウンタ２９０にロードすることを制御ユニット２８０に行わせる。制御ワードのビット２７は、波形がループされているかどうかを示すことができる。制御ワードのビット２６は、波形が８ビット長であるか１６ビット長であるかを示すことができる。制御ワードのビット２５は、波形がステレオであるかどうかを示す。制御ワードのビット２４は、フィルタがイネーブルであるかどうかを示すことができる。制御ユニット２８０はＪＵＭＰＤ命令に続く命令をすでにロードしているので、プログラムカウンタ２９０の値の更新は、ＪＵＭＰＤ命令に続く命令の後に有効になることができる。
【０１２８】
ＪＵＭＰＮＤ：
構文：ＪＵＭＰＮＤ  ａｄｄｒｅｓｓ，ｍａｓｋ
機能：［ｍａｓｋ］とＶＰＳ  ＲＡＭユニット４６Ａ中の制御ワードのビット２７：２４とのビット毎の論理積演算が、０の値に評価される場合、この命令は、［ａｄｄｒｅｓｓ］の値をプログラムカウンタ２９０にロードすることを制御ユニット２８０に行わせる。ビット毎の論理積演算の結果は、その結果が１をまったく含まない場合、偽に評価される。制御ユニット２８０はＪＵＭＰＮＤ命令に続く命令をすでにロードしているので、プログラムカウンタ２９０の値の更新は、ＪＵＭＰＮＤ命令に続く命令の後に有効になることができる。
【０１２９】
ＬＯＯＰ１ＢＥＧＩＮ：
構文：ＬＯＯＰ１ＢＥＧＩＮ  ｃｏｕｎｔ
機能：第１のループの開始を始動する。制御ユニット２８０は、ＬＯＯＰ１ＥＮＤＤ命令に［ｃｏｕｎｔ］＋１回遭遇すると、プログラムカウンタ２９０の値を、ＬＯＯＰ１ＢＥＧＩＮ命令に続く命令のメモリアドレスに設定する。さらに、制御ユニット２８０は、第１のループカウンタ３０４の値を［ｃｏｕｎｔ］に等しくなるように設定する。例えば、制御ユニット２８０は、命令「ＬＯＯＰ１ＢＥＧＩＮ  １１９」に遭遇すると、プログラムカウンタ２９０の値を、１２０回のＬＯＯＰ１ＢＥＧＩＮ命令に続く命令のメモリアドレスに設定する。
【０１３０】
ＬＯＯＰ１ＥＮＤＤ：
構文：ＬＯＯＰ１ＥＮＤＤ
機能：ＬＯＯＰ１ＥＮＤＤの後の命令は第１のループ中の最後の命令である。制御ユニット２８０は、第１のループカウンタ３０４の値が０よりも大きいかどうかを判断する。第１のループカウンタ３０４の値が０よりも大きい場合、制御ユニット２８０は、第１のループカウンタ３０４の値をデクリメントし、プログラムカウンタ２９０の値を、ＬＯＯＰ１ＢＥＧＩＮ命令に続く命令のメモリアドレスに設定する。そうではなく、第１のループカウンタ３０４の値が０よりも大きくない場合、制御ユニット２８０は単にプログラムカウンタ２９０の値をインクリメントする。
【０１３１】
ＬＯＯＰ２ＢＥＧＩＮ：
構文：ＬＯＯＰ２ＢＥＧＩＮ  ｃｏｕｎｔ
機能：第２のループの開始を始動する。制御ユニット２８０は、ＬＯＯＰ２ＥＮＤＤ命令に［ｃｏｕｎｔ］＋１回だけ遭遇すると、プログラムカウンタ２９０の値を、ＬＯＯＰ２ＢＥＧＩＮ命令に続く命令のメモリアドレスに設定する。さらに、制御ユニット２８０は、第２のループカウンタ３０６の値を［ｃｏｕｎｔ］に等しくなるように設定する。
【０１３２】
ＬＯＯＰ２ＥＮＤＤ：
構文：ＬＯＯＰ２ＥＮＤＤ
機能：ＬＯＯＰ２ＥＮＤＤの後の命令は第２のループ中の最後の命令である。制御ユニット２８０は、第２のループカウンタ３０６をデクリメントし、第２のループカウンタが０でない場合、プログラムカウンタ２９０の値をＬＯＯＰ２ＢＥＧＩＮ命令のメモリアドレスに設定する。
【０１３３】
ＣＴＲＬ＿ＮＯＰ：
構文：ＣＴＲＬ＿ＮＯＰ
機能：制御ユニット２８０は何も行わない。
【０１３４】
ＥＸＩＴ：
構文：ＥＸＩＴ
機能：制御ユニット２８０は、ＥＸＩＴ命令に遭遇すると、処理要素３４ＡがＭＩＤＩフレームの全体的なデジタル波形の生成を完了したことを調整モジュール３２に通知するために、調整モジュール３２に制御信号を出力する。制御信号を送信した後、調整モジュール３２が、プログラムカウンタ２９０の値を初期値（例えば０）にリセットする信号を制御ユニット２８０に送信するまで、制御ユニット２８０は待機する。
【０１３５】
処理要素３４ＡがＭＩＤＩボイスのデジタル波形の生成を開始する前に、調整モジュール３２は、制御ユニット２８０にリセット信号を送信することができる。制御ユニット２８０は、調整モジュール３２からリセット信号を受け取ると、第１のループカウンタ３０４、第２のループカウンタ３０６、およびプログラムカウンタ２９０の値をそれらの初期値にリセットすることができる。例えば、制御ユニット２８０は、第１のループカウンタ３０４、第２のループカウンタ３０６、およびプログラムカウンタ２９０の値を０に設定することができる。
【０１３６】
その後、調整モジュール３２は、ＶＰＳ  ＲＡＭユニット４６Ａ中に記述されているＭＩＤＩボイスのデジタル波形の生成を開始することを処理要素３４Ａに命令するために、制御ユニット２８０にイネーブル信号を送信することができる。制御ユニット２８０がイネーブル信号を受け取ると、処理要素３４は、プログラムＲＡＭユニット４４Ａ中の連続するメモリ位置に記憶されている一連のプログラム命令（すなわちプログラム）の実行を開始することができる。プログラムＲＡＭユニット４４Ａ中のプログラム命令の各々は、上述した命令の組中の命令のインスタンス（instances of instructions）とすることができる。
【０１３７】
概して、処理要素３４Ａによって実行されるプログラムは、第１のループと、第１のループ内で入れ子にされた第２のループとからなることができる。第１のループの各サイクル中、処理要素３４Ａは、第２のループが終了するまで第２のループ全体を実行することができる。第２のループが終了したとき、処理要素３４Ａは、ＭＩＤＩボイスの波形の１つのサンプルのシンボルを導き出していることができる。第１のループが終了したとき、処理要素３４Ａは、ＭＩＤＩフレーム全体のＭＩＤＩボイスの波形の各サンプルの各シンボルを導き出している。例えば、上記の例示的な命令セットにおける以下の一連の命令は、処理要素３４Ａによって実行されるプログラムの基本構成を概説することができる。
【数３】
2010522359.tif 000006
【０１３８】
この例示的な一連の命令では、ダブルスラッシュより後のワードは、記述された動作を実行する１つまたは複数の命令を表す。さらに、この例では、それぞれＬＯＯＰ１ＢＥＧＩＮ命令またはＬＯＯＰ２ＢＥＧＩＮ命令を含むプログラムＲＡＭ３４Ａ中の位置にアクセスするために、制御ユニット２８０が、プログラムカウンタ２９０中の更新されたメモリアドレスを使用する前に、制御ユニット２８０はＬＯＯＰ１ＥＮＤＤ命令またはＬＯＯＰ２ＥＮＤＤ命令に続く命令の実行をすでに開始しているので、ＬＯＯＰ１ＥＮＤＤおよびＬＯＯＰ２ＥＮＤＤ命令の後にはＣＴＲＬ＿ＮＯＰ操作が続く。言い換えれば、制御ユニット２８０は、すでに、ループ終了命令に続く命令を処理パイプラインに加えていることができる。
【０１３９】
プログラムＲＡＭユニット４４Ａ中のプログラムを実行するために、制御ユニット２８０は、プログラムカウンタ２９０に記憶されているメモリアドレスを有するプログラムＲＡＭユニット４４Ａ中のメモリ位置を読み取るために、プログラムＲＡＭユニット４４Ａに要求を送信することができる。この要求に応答して、プログラムＲＡＭユニット４４Ａは、プログラムカウンタ２９０中に記憶されているメモリアドレスを有するプログラムＲＡＭユニット４４Ａ中のメモリ位置の内容を制御ユニット２８０に送信することができる。
【０１４０】
要求されたメモリ位置の内容は、処理要素３４Ａが並列に実行することができる２つのプログラム命令を含む４０ビットワードとすることができる。例えば、プログラムＲＡＭユニット４４Ａ中の１つのメモリ位置は、以下のうちの１つを含む。
【０１４１】
（１）１ワードでのＡＬＵ命令およびロード／ストア命令、
（２）１ワードでのロード／ストア命令および第２のロード／ストア命令、
（３）１ワードでの制御命令およびロード／ストア命令、または
（４）１ワードでのＡＬＵ命令および制御命令。
【０１４２】
ＡＬＵ命令およびロード／ストア命令を含むワードでは、ビット０：１７はロード／ストア命令であり、ビット１８：３７はＡＬＵ命令であり、ビット３８および３９は、このワードがＡＬＵ命令およびロード／ストア命令を含むことを示すフラグであることができる。２つのロード命令を含むワードでは、ビット０：１７は第１のロード／ストア命令であり、ビット１８および１９は予約済みであり、ビット２０：３７は第２のロード／ストア命令であり、ビット３８および３９は、このワードが２つのロード／ストア命令を含むことを示すフラグであることができる。制御命令およびロード命令を含むワードでは、ビット０：１７はロード命令であり、ビット１８および１９は予約済みであり、ビット２０：３５は制御命令であり、ビット３６および３７は予約済みであり、ビット３８および３９は、このワードが制御命令およびロード／ストア命令を含むことを示すフラグであることができる。ＡＬＵ命令および制御命令を含むワードでは、ビット０：１５は制御命令であり、ビット１６および１７は予約済みであり、ビット１８：３７はＡＬＵ命令であり、ビット３８および３９は、このワードがＡＬＵ命令および制御命令を含むことを示すフラグであることができる。
【０１４３】
メモリ位置の内容を受け取った後、制御ユニット２８０は、メモリ位置の内容において指定された命令を復号し、適用することができる。制御ユニット２８０は、命令の各々をアトミック（atomically）に復号し、適用することができる。言い換えれば、制御ユニット２８０は、命令の実行を開始した後には、その命令の実行を終了するまで、その命令によって使用または影響されるいかなるデータをも変更しない。さらに、いくつかの例では、制御ユニット２８０は、プログラムＲＡＭユニット４４Ａから受け取ったワード中の両方の命令を並列に復号し、適用することができる。制御ユニット２８０は、ワード中の命令を実行した後には、プログラムカウンタ２９０をインクリメントし、そのインクリメントされたプログラムカウンタによって特定されるプログラムＲＡＭユニット４４Ａ中のメモリ位置の内容を要求することができる。
【０１４４】
処理要素３４用にスペシャライズされた命令セットの使用により１つまたは複数の利点が得られる。例えば、デジタル波形を生成するために様々なオーディオ処理動作が実行される。第１の手法では、オーディオ処理動作は、ハードウェアで実施できる。例えば、これらの動作を実施するように特定用途向け集積回路（ＡＳＩＣ）を設計することができる。ただし、これらの動作をハードウェアで実施することは、そのようなハードウェアを他の目的で再使用することを妨げる。すなわち、これらの動作を実施するように設計されたＡＳＩＣを装置に取り付けた後は、該ＡＳＩＣは一般に、異なる動作を実行するように変更することができない。第２の手法では、汎用命令セットを使用するプロセッサがオーディオ処理動作を実行することができる。ただし、そのようなプロセッサの使用は不経済である。例えば、汎用命令セットを使用するプロセッサは、デジタル波形の生成において決して使用されない命令を復号する回路構成を含む場合がある。スペシャライズされた命令セットの使用は、これらの２つの手法の弱点を解決することができる。例えば、スペシャライズされた命令セットの使用により、デジタル波形を生成する命令を使用するプログラムの更新が可能になる。同時に、スペシャライズされた命令セットの使用により、チップ設計者はプロセッサの実装を単純に保つことができる。
【０１４５】
さらに、ボイスパラメータセット中の値に基づいて様々な機能を実行するＥＧＣＯＭＰおよびＬＯＡＤＬＦＯなどのスペシャライズされた命令の使用により、１つまたは複数の追加の利点が得られる。例えば、ＥＧＣＯＭＰおよびＬＯＡＤＬＦＯは単一の命令として実装されるので、これらの命令を実行するための条件付きジャンプまたは分岐は不要である。ＥＧＣＯＭＰおよびＬＯＡＤＬＦＯは条件付きジャンプまたは分岐を含まないので、これらの条件付きジャンプまたは分岐中にプログラムカウンタを更新する必要がない。さらに、ＥＧＣＯＭＰおよびＬＯＡＤＬＦＯは単一の命令として実装されるので、ＥＧＣＯＭＰおよびＬＯＡＤＬＦＯの操作を実行するために別々の命令をロードする必要がない。例えば、ＥＧＣＯＭＰ命令のケース１は乗算動作を必要とする。しかしながら、ＥＧＣＯＭＰは単一の命令であるので、プログラムメモリから別の乗算動作をロードする必要はない。ＥＧＣＯＭＰおよびＬＯＡＤＬＦＯは、プログラムメモリからの多重ロードを必要としないので、別々の命令の組として実装した場合よりも少ないクロックサイクルで実行できる。
【０１４６】
別の例では、ボイスパラメータセット中の値に基づいて様々な機能を実行するスペシャライズされた命令の使用は、そのような命令を使用するプログラムがよりコンパクトになるので、有利であることができる。例えば、１つのＥＧＣＯＭＰ命令によって実行される演算を実装するために１０個の別々の命令が必要であることがある。コンパクトなプログラムほど、プログラマにとって読み易くなる。さらに、コンパクトなプログラムほど、プログラムメモリ中で占有する空間が少なくなることができる。コンパクトなプログラムほどプログラムメモリ中で占有する空間が少なくなるので、プログラムメモリ容量が小さくなることができる。小さいプログラムメモリほど、実装費用が安くなり、チップセット上の空間を節約することができる。
【０１４７】
図１３は、オーディオ装置４のＭＩＤＩハードウェアユニット１８中の処理要素３４Ａの例示的な動作を示す流れ図である。図１３の例について処理要素３４Ａを参照しながら説明するが、プロセッサ３４の各々は、この動作を同時に実行することができる。
【０１４８】
最初に、処理要素３４Ａ中の制御ユニット２８０は、ＭＩＤＩボイスの新規のデジタル波形の生成を準備するために内部レジスタの値をリセットする制御信号を調整モジュール３２から受け取ることができる（３２０）。制御ユニット２８０は、リセット信号を受け取ると、第１のループカウンタ３０４、第２のループカウンタ３０６、プログラムカウンタ２９０、およびレジスタ２８６の値を０にリセットすることができる。
【０１４９】
次に、制御ユニット２８０は、ＶＰＳ  ＲＡＭユニット４６Ａ中のパラメータを有するＭＩＤＩボイスのデジタル波形の生成を開始する為に、調整モジュール３２から命令を受け取ることができる（３２２）。制御ユニット２８０は、ＭＩＤＩボイスのデジタル波形の生成を開始するための命令を調整モジュール３２から受け取った後、プログラムメモリ４４Ａからプログラム命令を読み取ることができる（３２４）。次いで、制御ユニット２８０は、そのプログラム命令が「Ｌｏｏｐ  Ｅｎｄ」命令であるかどうかを判断することができる（３２６）。命令が「Ｌｏｏｐ  Ｅｎｄ」命令である場合（３２６の「はい」）、制御ユニット２８０は、処理要素３４Ａ中のレジスタのループカウント値をデクリメントすることができる（３２８）。一方、命令が「Ｌｏｏｐ  Ｅｎｄ」命令でない場合（３２６の「いいえ」）、制御ユニット２８０は、命令が「ＥＸＩＴ」命令であるかどうかを判断することができる（３３０）。命令が「ＥＸＩＴ」命令である場合（３３０の「はい」）、制御ユニット２８０は、処理要素３４ＡがＭＩＤＩボイスのデジタル波形の生成を終了したことを調整モジュール３２に通知する制御信号を出力することができる（３３２）。命令が「ＥＸＩＴ」命令でない場合（３３０の「いいえ」）、制御ユニット２８０は、命令を実行させるために、制御信号を出力するか、またはプログラムカウンタ２９０の値を変更することができる（３３４）。
【０１５０】
１つまたは複数の例示的な実施形態では、記載の機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの組合せで実装できる。ソフトウェアで実装した場合、機能は１つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶できる。コンピュータ可読媒体は、
コンピュータ記憶媒体と通信媒体の両方を含む。記憶媒体は、コンピュータによってアクセスできる任意の使用可能な媒体とすることができる。限定ではなく例として、そのようなコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭもしくは他の光ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶装置、または、命令もしくはデータ構造の形態の所望のプログラムコードを運搬または記憶するために使用でき、コンピュータによってアクセスできる他の任意の媒体を備えることができる。本明細書では、ディスク（disk）およびディスク（disc）は、コンパクトディスク（disc）（ＣＤ）、レーザディスク（disc）、光ディスク（disc）、デジタル多用途ディスク（disc）（ＤＶＤ）、フロッピーディスク（disk）、およびブルーレイディスク（disc）を含み、ディスク（disk）は、通常、データを磁気的に再生し、一方、ディスク（disc）は、データをレーザで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含むべきである。
【０１５１】
様々な例について説明した。これらおよび他の例は特許請求の範囲内にある。
【図１】
2010522359.tif 000007
【図２】
2010522359.tif 000008
【図３】
2010522359.tif 000009
【図４】
2010522359.tif 000010
【図５】
2010522359.tif 000011
【図６】
2010522359.tif 000012
【図７】
2010522359.tif 000013
【図８】
2010522359.tif 000014
【図９】
2010522359.tif 000015
【図１０】
2010522359.tif 000016
【図１１】
2010522359.tif 000017
【図１２】
2010522359.tif 000018
【図１３】
2010522359.tif 000019
【手続補正書】
【提出日】平成22年2月16日(2010.2.16)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００１２
【補正方法】変更
【補正の内容】
【００１２】
【図１】図１は、サウンドを生成するオーディオ装置を含む例示的なシステムを示すブロック図である。
【図２】図２は、オーディオ装置の例示的な電子楽器デジタルインターフェース（ＭＩＤＩ）ハードウェアユニットを示すブロック図である。
【図３】図３は、オーディオ装置の例示的な動作を示す流れ図である。
【図４】図４は、オーディオ装置中のデジタル信号プロセッサ（ＤＳＰ）の例示的な動作を示す流れ図である。
【図５】図５は、オーディオ装置のＭＩＤＩハードウェアユニット中の調整（coordination）モジュールの例示的な動作を示す流れ図である。
【図６】図６は、メモリアドレスを指定するボイスインジケータのリストを使用する例示的なＤＳＰを示すブロック図である。
【図７】図７は、ＤＳＰがプロセッサからＭＩＤＩイベントの組を受け取る場合のＤＳＰの例示的な動作を示す流れ図である。
【図８】図８は、ＤＳＰがボイスインジケータのリストにボイスインジケータを挿入する場合のＤＳＰの例示的な動作を示す流れ図である。
【図９】図９は、ＤＳＰがボイスインジケータをリストに挿入する場合のＤＳＰの例示的な動作を示す流れ図である。
【図１０】図１０は、リスト中のボイスインジケータの数がボイスインジケータの最大数を超えたとき、ＤＳＰがリストからボイスインジケータを削除する場合のＤＳＰの例示的な動作を示す流れ図である。
【図１１】図１１は、メモリアドレスが導き出せる指標値を指定するボイスインジケータのリストを使用する例示的なＤＳＰを示すブロック図である。
【図１２】図１２は、例示的な処理要素の詳細を示すブロック図である。
【図１３】図１３は、オーディオ装置のＭＩＤＩハードウェアユニット中の処理要素の例示的な動作を示す流れ図である。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１４
【補正方法】変更
【補正の内容】
【００１４】
図１は、サウンドを生成するオーディオ装置４を含む例示的なシステム２を示すブロック図である。オーディオ装置４は、いくつかの異なるタイプの装置のうちの１つとすることができる。例えば、オーディオ装置４は、携帯電話、ネットワーク電話、直接双方向通信装置（ウォーキートーキーと呼ばれることがある）、パーソナルコンピュータ、デスクトップまたはラップトップコンピュータ、ワークステーション、衛星ラジオ装置、インターホン、ラジオ放送受信機、携帯ゲーム機、キオスクなどの装置に取り付けられた回路基板、児童用の様々なコンピュータ化された玩具、自動車、船舶または航空機で使用されるオンボードコンピュータ、あるいは他のタイプの装置とすることができる。アップルコンピュータ・インコーポレイテッドが販売している「ｉＰｏｄ」装置やマイクロソフト社が販売している「Ｚｕｎｅ」装置などデジタルミュージックプレーヤも、ＭＩＤＩファイルフォーマットをサポートすることができる。ＭＩＤＩフォーマットをサポートする他の装置には、キーボード、シーケンサ、ボイスエンコーダ（ボコーダ）、リズムマシンなど様々なミュージックシンセサイザがある。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００１６
【補正方法】変更
【補正の内容】
【００１６】
図１の例に示すように、オーディオ装置４は、ＭＩＤＩファイルを記憶するオーディオ記憶ユニット６を含む。オーディオ記憶ユニット６は任意の揮発性または不揮発性のメモリあるいは記憶装置を備えることができる。例えば、オーディオ記憶ユニット６は、ハードディスクドライブ、フラッシュメモリユニット、コンパクトディスク、フロッピー（登録商標）ディスク、デジタル多用途ディスク、リードオンリメモリユニット、ランダムアクセスメモリ、または情報記憶媒体である。オーディオ記憶ユニット６は電子楽器デジタルインターフェース（ＭＩＤＩ）ファイルおよび他のタイプのデータを記憶することができる。例えば、オーディオ装置４が携帯電話である場合、オーディオ記憶ユニット６は、個人の連絡先のリストや写真や他のタイプのデータを含むデータを記憶することができる。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００１９
【補正方法】変更
【補正の内容】
【００１９】
ＤＳＰ１２は、プロセッサ８からＭＩＤＩ命令を受け取ると、連続パルス符号変調（ＰＣＭ）信号を生成するために、該ＭＩＤＩ命令を処理することができる。ＰＣＭ信号は、波形が一定の間隔をおいてデジタルサンプルによって表されるアナログ信号のデジタル表現である。ＤＳＰ１２は、デジタルアナログ変換器（ＤＡＣ）１４に、このＰＣＭ信号を出力することができる。ＤＡＣ１４は、このデジタル波形をアナログ信号に変換することができる。駆動回路１６は、ユーザに対して物理的なサウンドを出力するためにスピーカ１９Ａおよび１９Ｂを駆動するために、このアナログ信号を使用することができる。本開示では、スピーカ１９Ａおよび１９Ｂを集合的に「スピーカ１９」と呼ぶ。オーディオ装置４は、フィルタと、プリアンプと、アンプと、スピーカ１９によって最終的に出力するためのアナログ信号を準備する他のタイプの構成要素と、を含む１つまたは複数の追加の構成要素（図示せず）を含むことができる。このようにして、オーディオ装置４は、ＭＩＤＩファイルに従ってサウンドを生成することができる。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００４２
【補正方法】変更
【補正の内容】
【００４２】
図５は、オーディオ装置４のＭＩＤＩハードウェアユニット１８中の調整モジュール３２の例示的な動作を示す流れ図である。最初に、調整モジュール３２は、ＭＩＤＩフレームのデジタル波形の生成を開始するために、ＤＳＰ１２から命令を受け取ることができる（１００）。ＤＳＰ１２から命令を受け取った後、調整モジュール３２は、総和バッファ４０の内容をクリアすることができる（１０２）。例えば、調整モジュール３２は、総和バッファ４０中のデジタル波形をすべて０に設定するよう総和バッファ４０に命令することができる。調整モジュール３２は、総和バッファ４０の内容をクリアした後、ＤＳＰ１２によって生成されたボイスインジケータのリストをＲＡＭユニット１０からリンクリストメモリ４２にロードすることができる（１０４）。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００４３
【補正方法】変更
【補正の内容】
【００４３】
ボイスインジケータのリンクリストをロードした後、調整モジュール３２は、処理要素３４のうちの１つがＭＩＤＩボイスのデジタル波形の生成を終了したことを示す信号をその処理要素から受け取ったかどうかを判断することができる（１０６）。調整モジュール３２が、処理要素３４のうちの１つがＭＩＤＩボイスのデジタル波形の生成を終了したことを示す信号をその処理要素から受け取っていない場合（１０６の「いいえ」）、調整モジュール３２はループバックし、そのような信号を待つことができる（１０６）。調整モジュール３２は、処理要素３４のうちの１つがＭＩＤＩボイスのデジタル波形の生成を終了したことを示す信号をその処理要素から受け取った場合（１０６の「はい」）、その処理要素に関連するＶＰＳ  ＲＡＭユニット４６のうちの１つに記憶された、および、その処理要素、波形フェッチユニット３６、またはＬＦＯ３８によって変更された可能性のあるＷＦＵ／ＬＦＯメモリ３９に記憶された、ボイスパラメータセットの１つまたは複数のパラメータをＲＡＭユニット１０に書き込むことができる（１０８）。例えば、ＭＩＤＩボイスの波形を生成している間、処理要素３４Ａは、ＶＰＳメモリ４６Ａ中のボイスパラメータセットのいくつかのパラメータを変更することができる。この場合、例えば、処理要素３４Ａは、ＭＩＤＩフレームの終了時のボイスの音量レベルを示すように、そのボイスのボイスパラメータを更新することができる。更新されたボイスパラメータをＲＡＭユニット１０に書き戻すことによって、所与の処理要素は、現在のＭＩＤＩフレームの終了時の音量レベルと同じ音量レベルで次のＭＩＤＩフレーム中のＭＩＤＩボイスのデジタル波形の生成を開始することができる。他の書込み可能なパラメータは、左右バランス、全体的な位相シフト、ＬＦＯ３８によって生成される三角波形の位相シフト、または他の音響特性を含むことができる。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００４５
【補正方法】変更
【補正の内容】
【００４５】
一方、処理要素３４がリスト中でボイスインジケータによって示されるＭＩＤＩボイスの各々のデジタル波形を生成していない場合（１１０の「いいえ」）、調整モジュール３２はアイドル状態の処理要素３４のうちの１つを特定することができる（１１４）。すべての処理要素３４がアイドル状態でない（すなわち、ビジーである）場合、調整モジュール３２は、処理要素３４のうちの１つがアイドル状態になるまで待つことができる。アイドル状態の処理要素３４のうちの１つを特定した後、調整モジュール３２は、アイドル状態の処理要素に関連するＶＰＳ  ＲＡＭユニット４６のうちの１つに、現在のボイスインジケータによって示されるボイスパラメータセットのパラメータをロードすることができる（１１６）。調整モジュール３２は、処理要素に関係するボイスパラメータセットのパラメータのみをＶＰＳ  ＲＡＭユニットにロードすることができる。さらに、調整モジュール３２は、ＷＦＵ／ＬＦＯ  ＲＡＭユニット３９に、ＷＦＵ３６およびＬＦＯ３８に関係するボイスパラメータセットのパラメータをロードすることができる（１１８）。次いで、調整モジュール３２は、ＭＩＤＩボイスのデジタル波形の生成を開始するためにアイドル状態の処理要素をイネーブルにすることができる（１２０）。次に、調整モジュール３２は、現在のボイスインジケータをリスト中の次のボイスインジケータに更新し、処理要素３４のうちの１つがＭＩＤＩボイスのデジタル波形の生成を完了したことを示す信号を調整モジュール３２が受け取ったかどうかを再び判断する（１０６）ために、ループバックすることができる。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００５４
【補正方法】変更
【補正の内容】
【００５４】
リストジェネレータモジュール１５６は、リスト１４２を生成した後、リストベースポインタ１４０およびボイスインジケータ数１４４の値を調整モジュールに与えることができる。調整モジュール３２は、リストベースポインタ１４０およびボイスインジケータ数１４４のこれらの値を保持するためにレジスタ（図示せず）を含むことができる。調整モジュール３２は、リスト１４２にアクセスし、リスト１４２中のボイスインジケータによって示されるＭＩＤＩボイスを処理要素３４に割り当てるために、これらの値を使用する。例えば、リストジェネレータモジュール１５６がリスト１４２の生成を終了すると、調整モジュール３２は、リスト１４２をリンクリストメモリ４２にロードするために、リストジェネレータモジュール１５６によって与えられたリストベースポインタ１４０の値を使用する。次いで、調整モジュール３２は、アイドル状態の処理要素３４のうちの１つを特定することができる。次いで、調整モジュール３２は、現在のボイスインジケータを示す調整モジュール３２中のポインタによって指定されたメモリ位置で、リスト１４２中のボイスインジケータによって示されるＭＩＤＩボイスを定義するボイスパラメータセットを記憶するＲＡＭユニット１０中のメモリ位置のメモリアドレスを得ることができる。次いで、調整モジュール３２は、ボイスパラメータセット中の少なくともいくつかのボイスパラメータを、アイドル状態の処理要素に関連するＶＰＳ  ＲＡＭユニット４６のうちの１つに記憶するために、得られたメモリアドレスを使用することができる。ボイスパラメータセットをＶＰＳ  ＲＡＭユニット中に記憶した後、調整モジュール３２は、ボイスの波形の生成を開始するために処理要素に信号を送信することができる。処理要素３４がリスト１４２中のボイスインジケータによって示される各ボイスの波形を生成するまで、調整モジュール３２はこれを継続することができる。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】００６２
【補正方法】変更
【補正の内容】
【００６２】
リストジェネレータモジュール１５６は、現在のボイスインジケータのボイスパラメータポインタがボイスパラメータセットのメモリアドレスに等しいと判断した場合（１８４の「はい」）、前のボイスインジケータポインタ１５２の値がヌルアドレスであるかどうかを判断することができる（１８６）。リストジェネレータモジュール１５６は、前のボイスインジケータポインタ１５２の値がヌルアドレスでないと判断した場合（１８６の「いいえ」）、前のボイスインジケータ（すなわち、前のボイスインジケータポインタ１５２中のメモリアドレスに等しいメモリアドレスを有するインジケータ）の次のボイスインジケータポインタを、現在のボイスインジケータの次のボイスインジケータポインタの値に設定することができる（１８８）。前のボイスインジケータの次のボイスインジケータポインタを設定した後、リストジェネレータモジュール１５６は、イベントボイスインジケータポインタ１５０の値を現在のボイスインジケータポインタ１４８の値に設定することができる（１９０）。前のボイスインジケータポインタ１５２の値がヌルである場合（１８６の「はい」）、リストジェネレータモジュール１５６はまた、イベントボイスインジケータポインタ１５０の値を現在のボイスインジケータポインタ１４８の値に設定することができる。このようにして、リストジェネレータモジュール１５６は、ボイスインジケータの次のボイスインジケータポインタをヌルメモリアドレスに設定することは試みない。リストジェネレータモジュール１５６は、イベントボイスインジケータポインタ１５０の値を設定した後、現在のボイスインジケータポインタ１４８の値をリストベースポインタ１４０の値に設定することができる（１９２）。次いで、リストジェネレータモジュール１５６は、イベントボイスインジケータポインタ１５０によってポイントされるボイスインジケータを再挿入するために、図９に示された例示的な動作を使用することができる。
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】００６４
【補正方法】変更
【補正の内容】
【００６４】
一方、リストジェネレータモジュール１５６は、現在のボイスインジケータの次のボイスインジケータポインタがヌルであると判断した場合（１９４の「はい」）、現在のボイスのボイスインジケータを位置特定することなしにリスト１４２の末尾に達する。このために、リストジェネレータモジュール１５６は、現在のボイスの新しいボイスインジケータを作成することができる。現在のボイスの新しいボイスインジケータを作成するために、リストジェネレータモジュール１５６は、新しいボイスインジケータにリンクリストメモリ４２中のメモリを割り当てることができる（２００）。次いで、リストジェネレータモジュール１５６は、イベントボイスインジケータポインタ１５０の値を新しいボイスインジケータのメモリアドレスに設定することができる（２０２）。新しいボイスインジケータは現在、イベントボイスインジケータである。次に、リストジェネレータモジュール１５６は、ボイスインジケータ数レジスタ１４４の値を１だけインクリメントすることができる（２０４）。ボイスインジケータ数レジスタ１４４の値をインクリメントした後、リストジェネレータモジュール１５６は、現在のボイスのボイスパラメータセットのメモリアドレスを含むようにイベントボイスインジケータのボイスパラメータセットポインタを設定することができる（２０６）。次いで、リストジェネレータモジュール１５６は、現在のボイスインジケータポインタ１４８の値をリストベースポインタ１４０の値に設定し（１９２）、次いで、図９に示された例示的な動作に従ってリスト１４２にイベントボイスインジケータを挿入することができる。
【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】００７４
【補正方法】変更
【補正の内容】
【００７４】
図１１は、メモリアドレスが導き出せる指標値を指定するボイスインジケータのリストを使用する例示的なＤＳＰ１２を示すブロック図である。図１１の例では、リスト１４２中の各ボイスインジケータは、４つのボイスパラメータセット（ＶＰＳ）指標値を含む３２ビットワードと、リスト１４２中の次のボイスインジケータのメモリアドレスと、を含む。ブロック２６０中の各ＶＰＳ指標値は、ボイスパラメータセットのブロック２６２中のボイスパラメータセットに関連する数を指定することができる。例えば、第１のＶＰＳ指標値は、ボイスパラメータセットのブロック２６２中の第２のボイスパラメータセットを示す数「２」を指定することができる。さらに、ブロック２６０中の各ＶＰＳ指標値は、ＲＡＭユニット１０中の４バイトワードのうちの１バイト（すなわち８ビット）で表せる。ＶＰＳ指標値が１バイトで表されるので、１個のＶＰＳ指標値は、２５６（すなわち、２８＝２５６）個のボイスパラメータセットのうちの１つを示すことができる。
【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】００７６
【補正方法】変更
【補正の内容】
【００７６】
ＤＳＰ１２または調整モジュール３２は、ボイスパラメータセットのブロック２６２中のボイスパラメータセットへのアクセスを必要とする場合、最初に、ブロック２６０中のボイスパラメータセットの指標値に、セットサイズレジスタ２６８中に含まれる値を乗算することができる。セットサイズレジスタ２６８に含まれる値は、１個のボイスパラメータセットが占めるＲＡＭユニット１０の中のアドレス可能な位置の数に等しいことができる。次いで、ＤＳＰ１２または調整モジュール３２は、セットベースポインタレジスタ２６６の値を加算することができる。セットベースポインタレジスタ２６６に含まれる値は、ブロック２６２中の第１のボイスパラメータセットのメモリアドレスに等しいことができる。このようにして、ボイスパラメータセットの指標にボイスパラメータセットのサイズを乗算し、第１のボイスパラメータセットのメモリアドレスを加算することによって、ＤＳＰ１２または調整モジュール３２は、ブロック２６２中のボイスパラメータセットの第１のメモリアドレスを導き出すことができる。
【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】００９４
【補正方法】変更
【補正の内容】
【００９４】
ＭＡＣＳＵＤ：
構文：ＭＡＣＳＵＤ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：制御ユニット２８０に、レジスタＲｘの符号付き値とレジスタＲｙの符号なし値の乗算を実行し、積を「ｓｈｉｆｔ」によって指定された量だけ左にシフトするようＡＬＵ２８２に命令する制御信号を出力させる。次いで、ＡＬＵ２８２はＡＣＣによって指定された３２ビットを積から抽出する。これらのビットを積から抽出した後、ＡＬＵ２８２はこれらの３２ビットをＲｚの後のレジスタ（すなわち、Ｒｚ＋１）に記憶された値に加算する。これらの値を加算した後、ＡＬＵ２８２は和を出力する。ＡＣＣ＝０の場合、ＡＬＵ２８２は積の下位３２ビットを抽出する。ＡＣＣ＝１の場合、ＡＬＵ２８２は積の中位３２ビットを抽出する。ＡＣＣ＝２の場合、ＡＬＵ２８２は積の上位３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６中のＲｚに導くために、制御ユニット２８０にマルチプレクサ２８４への制御信号を出力させる。
【手続補正１４】
【補正対象書類名】明細書
【補正対象項目名】００９５
【補正方法】変更
【補正の内容】
【００９５】
ＭＡＣＵＵＤ：
構文：ＭＡＣＵＵＤ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：制御ユニット２８０に、レジスタＲｘとＲｙの符号なし値の乗算を実行し、積を「ｓｈｉｆｔ」によって指定された量だけ左にシフトするようＡＬＵ２８２に命令する制御信号を出力させる。次いで、ＡＬＵ２８２はＡＣＣによって指定された３２ビットを積から抽出する。これらのビットを積から抽出した後、ＡＬＵ２８２はこれらの３２ビットをＲｚの後のレジスタ（すなわち、Ｒｚ＋１）に記憶された値に加算する。これらの値を加算した後、ＡＬＵ２８２は和を出力する。ＡＣＣ＝０の場合、ＡＬＵ２８２は積の下位３２ビットを抽出する。ＡＣＣ＝１の場合、ＡＬＵ２８２は積の中位３２ビットを抽出する。ＡＣＣ＝２の場合、ＡＬＵ２８２は積の上位３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６中のＲｚに導くために、制御ユニット２８０にマルチプレクサ２８４への制御信号を出力させる。
【手続補正１５】
【補正対象書類名】明細書
【補正対象項目名】００９７
【補正方法】変更
【補正の内容】
【００９７】
ＭＡＳＳＵ：
構文：ＭＡＳＳＵ  Ｒｘ，Ｒｙ，ｓｈｉｆｔ，Ｒｚ，ＡＣＣ
機能：制御ユニット２８０に、レジスタＲｘの符号付き値とレジスタＲｙの符号なし値の乗算を実行し、積を「ｓｈｉｆｔ」によって指定された量だけ左にシフトするようＡＬＵ２８２に命令する制御信号を出力させる。次いで、ＡＬＵ２８２はＡＣＣによって指定された３２ビットを積から抽出する。ビットを抽出した後、ＡＬＵ２８２は、これらのビットをＲｚの値から減算し、得られたビットを出力する。ＡＣＣ＝０の場合、ＡＬＵ２８２は積の下位３２ビットを抽出する。ＡＣＣ＝１の場合、ＡＬＵ２８２は積の中位３２ビットを抽出する。ＡＣＣ＝２の場合、ＡＬＵ２８２は積の上位３２ビットを抽出する。この命令はまた、ＡＬＵ２８２からの出力をレジスタ２８６中のＲｚに導くために、制御ユニット２８０にマルチプレクサ２８４への制御信号を出力させる。
【手続補正１６】
【補正対象書類名】明細書
【補正対象項目名】０１０６
【補正方法】変更
【補正の内容】
【０１０６】
エンベロープ生成とは、個々のミュージカルノートの音量または変調品質をモデル化する方法である。各ミュージカルノートはいくつかのフェーズを有することができる。例えば、ミュージカルノートは、ディレイフェーズ、アタックフェーズ、ホールドフェーズ、ディケイフェーズ、サスティンフェーズ、およびリリースフェーズを有することができる。ディレイフェーズは、アタックフェーズの開始前の時間量を定義することができる。アタックフェーズ中、音量または変調レベルがピークレベルに上げられる。ホールドフェーズ中、音量または変調レベルはピークレベルに維持される。ディケイフェーズ中、音量または変調レベルはサスティンレベルに下げられる。サスティンフェーズの間、音量または変調レベルはサスティンレベルに維持される。リリースフェーズ中、音量または変調レベルは０に減少する。さらに、音量または変調レベルの変化は線形または指数関数的になる。エンベロープ生成フェーズの長さは、サブフレームの見地から定義できる。「サブフレーム」という用語は、ＭＩＤＩフレームの１／４を指すことができる。例えば、ＭＩＤＩフレームが１０ミリ秒である場合、サブフレームは２．５ミリ秒である。例えば、ＭＩＤＩボイスのアタックフェーズは、１サブフレームだけ持続し、ＭＩＤＩボイスのディケイフェーズは、１サブフレームだけ持続し、ＭＩＤＩボイスのサスティンフェーズは、２サブフレームだけ持続することができる。
【手続補正１７】
【補正対象書類名】明細書
【補正対象項目名】０１４９
【補正方法】変更
【補正の内容】
【０１４９】
次に、制御ユニット２８０は、ＶＰＳ  ＲＡＭユニット４６Ａ中のパラメータを有するＭＩＤＩボイスのデジタル波形の生成を開始する為に、調整モジュール３２から命令を受け取ることができる（３２２）。制御ユニット２８０は、ＭＩＤＩボイスのデジタル波形の生成を開始するための命令を調整モジュール３２から受け取った後、プログラムメモリ４４Ａからプログラム命令を読み取ることができる（３２４）。次いで、制御ユニット２８０は、そのプログラム命令が「Ｌｏｏｐ  Ｅｎｄ」命令であるかどうかを判断することができる（３２６）。命令が「Ｌｏｏｐ  Ｅｎｄ」命令である場合（３２６の「はい」）、制御ユニット２８０は、処理要素３４Ａ中のレジスタのループカウント値をインクリメントすることができる（３２８）。一方、命令が「Ｌｏｏｐ  Ｅｎｄ」命令でない場合（３２６の「いいえ」）、制御ユニット２８０は、命令が「ＥＸＩＴ」命令であるかどうかを判断することができる（３３０）。命令が「ＥＸＩＴ」命令である場合（３３０の「はい」）、制御ユニット２８０は、処理要素３４ＡがＭＩＤＩボイスのデジタル波形の生成を終了したことを調整モジュール３２に通知する制御信号を出力することができる（３３２）。命令が「ＥＸＩＴ」命令でない場合（３３０の「いいえ」）、制御ユニット２８０は、命令を実行させるために、制御信号を出力するか、またはプログラムカウンタ２９０の値を変更することができる（３３４）。
【手続補正１８】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１１
【補正方法】変更
【補正の内容】
【請求項１１】
前記方法は、前記ＤＳＰを用いて、前記ＭＩＤＩフレームの前記全体的なデジタル波形を含む連続デジタル波形を出力することをさらに備え、
前記全体的なデジタル波形を出力することは、前記ＤＳＰによって出力された前記連続デジタル波形に基づいてサウンドを出力することを含む、
請求項１０の方法。
【手続補正１９】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１３
【補正方法】変更
【補正の内容】
【請求項１３】
前記全体的なデジタル波形を出力することは、
前記全体的なデジタル波形をアナログ出力に変換することと、
前記アナログ出力をサウンドとして出力することと、
を含む、請求項１の方法。
【手続補正２０】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項４４
【補正方法】変更
【補正の内容】
【請求項４４】
前記装置は、
ＭＩＤＩボイスのベース波形の組を収容するための手段と、
前記ベース波形の組を収容するための前記手段から前記ベース波形の各々を得るための手段と、
をさらに備え、
前記実行するための手段の各々は、前記ベース波形の各々を得るための前記手段に、前記命令のうちの１つに遭遇したときにＭＩＤＩボイスのベース波形を得るための制御信号を出力する手段を備える、
請求項４３の装置。
【手続補正２１】
【補正対象書類名】図面
【補正対象項目名】図４
【補正方法】変更
【補正の内容】
【図４】
2010522359.tif 000020
【手続補正２２】
【補正対象書類名】図面
【補正対象項目名】図１１
【補正方法】変更
【補正の内容】
【図１１】
2010522359.tif 000021
【国際調査報告】
2010522359.tif 000022
2010522359.tif 000023
2010522359.tif 000024
2010522359.tif 000025
2010522359.tif 000026