JP5134078B2 - 楽器ディジタルインタフェースハードウエア命令 - Google Patents

楽器ディジタルインタフェースハードウエア命令 Download PDF

Info

Publication number
JP5134078B2
JP5134078B2 JP2010501076A JP2010501076A JP5134078B2 JP 5134078 B2 JP5134078 B2 JP 5134078B2 JP 2010501076 A JP2010501076 A JP 2010501076A JP 2010501076 A JP2010501076 A JP 2010501076A JP 5134078 B2 JP5134078 B2 JP 5134078B2
Authority
JP
Japan
Prior art keywords
midi
voice
audio
machine code
control parameter
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2010501076A
Other languages
English (en)
Other versions
JP2010522363A (ja
Inventor
デバラパッリ、スレッシュ
クルカルニ、プラジャクト・ブイ.
カマス、ニディッシュ・ラマチャンドラ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Publication of JP2010522363A publication Critical patent/JP2010522363A/ja
Application granted granted Critical
Publication of JP5134078B2 publication Critical patent/JP5134078B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H1/00Details of electrophonic musical instruments
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H1/00Details of electrophonic musical instruments
    • G10H1/0033Recording/reproducing or transmission of music for electrophonic musical instruments
    • G10H1/0041Recording/reproducing or transmission of music for electrophonic musical instruments in coded form
    • G10H1/0058Transmission between separate instruments or between individual components of a musical system
    • G10H1/0066Transmission between separate instruments or between individual components of a musical system using a MIDI interface
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H7/00Instruments in which the tones are synthesised from a data store, e.g. computer organs
    • G10H7/002Instruments in which the tones are synthesised from a data store, e.g. computer organs using a common processing for different operations or calculations, and a set of microinstructions (programme) to control the sequence thereof
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10KSOUND-PRODUCING DEVICES; METHODS OR DEVICES FOR PROTECTING AGAINST, OR FOR DAMPING, NOISE OR OTHER ACOUSTIC WAVES IN GENERAL; ACOUSTICS NOT OTHERWISE PROVIDED FOR
    • G10K15/00Acoustics not otherwise provided for

Description

関連出願
米国特許法119条の下での優先権の主張
本特許出願は、2007年3月22日に出願され、この譲受人に譲渡され、ここに参照によって明白に組み込まれている「MUSICAL INSTRUMENT DIGITAL INTERFACE HARDWARE INSTRUCTIONS」(楽器ディジタルインタフェースハードウエア命令)と題する仮出願第60/896,450号に対する優先権を主張する。
本開示は、電子デバイス(電子機器)に関し、特にオーディオを生成する電子デバイスに関する。
楽器ディジタルインタフェース(MIDI)は、音楽、スピーチ、発信音、アラートなどといったオーディオサウンドの創作、通信および再生のためのフォーマットである。MIDIフォーマットをサポートするデバイスは、種々の「音声(ボイス)」を創作するために使用されるオーディオ情報のセットを記憶する。各音声は、ある特定の楽器による音符といった特定の音に対応する。例えば第1の音声はピアノで演奏されるような中央ハ(C)音に対応し、第2の音声はトロンボーンで演奏されるような中央ハ音に対応し、第3の音声はトロンボーンで演奏される嬰ニ(D#)音に対応する、などである。異なる楽器の音を複製するためにMIDI準拠デバイスは、低周波発振器の挙動といった音、ビブラートといった効果、および音の知覚に影響を及ぼし得る多数の他のオーディオ特性に関連する種々のオーディオ特性を指定する音声に関する1セットの情報を含む。ほとんど如何なる音も、MIDIファイルにおいて定義され、伝達され、またMIDIフォーマットをサポートするデバイスによって再生されることが可能である。
MIDIフォーマットをサポートするデバイスは、このデバイスが音符(musical note)を生成し始めるべきであることを示すイベントが発生するとき、音符(または他の音)を生成する。同様にこのデバイスは、デバイスが音符の生成を停止すべきであることを示すイベントが発生するとき、音符の生成を停止する。1つの楽曲全体は、ある幾つかの音声が開始および停止すべきときを示すイベントとこれらの音声に対する種々の効果とを指定することによって、MIDIフォーマットにしたがって符号化される。このようにして楽曲は、MIDIフォーマットに準拠したコンパクトなファイルフォーマットで記憶され、伝送されることが可能である。
MIDIフォーマットは、幅広い種々のデバイスでサポートされている。例えば、無線電話といった無線通信デバイスは、着信音または他のオーディオ出力といったダウンロード可能な音のためにMIDIファイルをサポートする。アップルコンピュータ社(Apple Computer, Inc.)によって販売されている「iPod」デバイスおよびマイクロソフト社(Microsoft Corp.)によって販売されている「Zune」デバイスといったディジタル音楽プレーヤーもまた、MIDIファイルフォーマットをサポートする。MIDIフォーマットをサポートする他のデバイスは、キーボード、シーケンサー、音声符号器(ボコーダー)およびリズムマシンといった種々の音楽シンセサイザーを含み得る。更に幅広い種々のデバイスもまた、無線移動デバイス、直接双方向通信デバイス(トランシーバーと呼ばれることもある)、ネットワーク電話、パソコン、デスクトップおよびラップトップコンピュータ、ワークステーション、衛星無線デバイス、インターコムデバイス(インターホン)、ラジオ(無線)放送デバイス、携帯型ゲーム機、デバイスにインストールされる回路基板、インフォメーションセンター、ビデオゲームコンソール、子供向けの種々のコンピュータ化された玩具、自動車、船舶および航空機で使用される車内(機内、船内)搭載型コンピュータ、および幅広い種々の他のデバイスを含むMIDIファイルまたはトラックの再生をサポートする。
一般に、MIDI音声のためのディジタル波形の生成のために特化された1セットのマシンコード(機械符号)命令を使用して楽器ディタルインタフェース(MIDI)音声のためのディジタル波形を生成する技法が説明される。例えばプロセッサは、MIDI音声のためのディジタル波形を生成するソフトウエアプログラムを実行する。このソフトウエアプログラムの命令は、MIDI音声のためのディジタル波形の生成のために特化された命令セットからのマシンコード命令である。特にこれらの命令の1つの実行は、MIDI音声を定義する1セットのパラメータに基づく演算の選択と、この選択された演算の実行とを含む。
一態様では、ある方法はMIDI音声のためのディジタル波形を生成するソフトウエアプログラム内のマシンコード命令を実行することを備える。このソフトウエアプログラム内の命令を実行することは、MIDI音声を定義する1セットの音声パラメータに基づいた演算を選択することと、この選択された演算が実行されるようにするための制御信号を出力することとを備える。この方法はまた、ディジタル波形を出力することを備える。
もう1つの態様では、あるデバイスはMIDI音声を定義する音声パラメータセットを記憶するメモリユニットを備える。このデバイスはまた、MIDI音声のためのディジタル波形を生成するためにソフトウエアプログラム内のマシンコード命令を実行する処理要素を備える。マシンコード命令の完全な実行は、音声パラメータセットに基づく演算の選択と、この選択された演算の実行とを含む。
もう1つの態様では、コンピュータ可読媒体は命令を備える。これらの命令は、1つ以上のプロセッサに、MIDI音声のためのディジタル波形を生成するソフトウエアプログラム内のマシンコード命令を実行させる。ソフトウエアプログラム内の命令を実行することは、MIDI音声を定義する1セットの音声パラメータに基づいた演算を選択することと、この選択された演算が実行されるようにするための制御信号を出力することとを備える。このコンピュータ可読媒体はまた、これら1つ以上のプロセッサにディジタル波形を出力させる命令も備える。
もう1つの態様では、あるデバイスはMIDI音声を定義する音声パラメータセットを記憶するための手段を備える。このデバイスはまた、MIDI音声のためのディジタル波形を生成するためにソフトウエアプログラム内のマシンコード命令を実行するための手段も備える。このマシンコード命令の完全な実行は、音声パラメータセットに基づく演算の選択と、この選択された演算の実行とを含む。
もう1つの態様では、回路はMIDI音声のためのディジタル波形を生成するソフトウエアプログラムのマシンコード命令を実行するように構成され、この回路は、MIDI音声を定義する1セットの音声パラメータに基づいた演算を選択し、この選択された演算が実行されるようにするための制御信号を出力し、そしてディジタル波形を出力するように構成される。
これらの詳細は、添付の図面と下記の説明において述べられる。他の特徴、目的および利点は、これらの説明および図面から、また特許請求の範囲から明らかになるであろう。
音を生成するオーディオデバイスを含む例示的システムを示すブロック図である。 オーディオデバイスの例示的楽器デバイスインタフェース(MIDI)ハードウエアユニットを示すブロック図である。 オーディオデバイスの例示的動作を示す流れ図である。 オーディオデバイス内のディジタル信号プロセッサ(DSP)の例示的動作を示す流れ図である。 オーディオデバイスのMIDIハードウエアユニット内の調整モジュールの例示的動作を示す流れ図である。 メモリアドレスを指定する音声インジケータのリストを使用する例示的DSPを示すブロック図である。 DSPがプロセッサから1セットのMIDIイベントを受信するときのDSPの例示的動作を示す流れ図である。 DSPが音声インジケータのリストに音声インジケータを挿入するときのDSPの例示的動作を示す流れ図である。 DSPがこのリストに音声インジケータを挿入するときのDSPの例示的動作を示す流れ図である。 リスト内の音声インジケータの数が音声インジケータの最大数を超えるときに、DSPがリストから音声インジケータを除去するときのDSPの例示的動作を示す流れ図である。 メモリアドレスが導き出され得るインデックス値を指定する音声インジケータのリストを使用する例示的DSPを示すブロック図である。 例示的処理要素の細部を示すブロック図である。 オーディオデバイスのMIDIハードウエアユニット内の処置要素の例示的動作を示す流れ図である。
発明の詳細な説明
本開示は、MIDI音声のためのディジタル波形の生成のために特化された1セットのマシンコード命令を使用して楽器ディジタルインタフェース(MIDI)音声のためのディジタル波形を生成する技法を説明する。例えば、プロセッサはMIDI音声のためのディジタル波形を生成するソフトウエアプログラムを実行する。このソフトウエアプログラムの命令は、MIDI音声のためのディジタル波形の生成のために特化された命令セットからのマシンコード命令である。
図1は、音を生成するオーディオデバイス4を含む例示的システム2を示すブロック図である。オーディオデバイス4は、幾つかの異なるタイプのデバイスの1つである。例えばオーディオデバイス4は、携帯電話、ネットワーク電話、パソコン、直接双方向通信デバイス(トランシーバーと呼ばれることもある)、パソコン、デスクトップまたはラップトップコンピュータ、ワークステーション、衛星無線デバイス、インターコムデバイス(インターホン)、ラジオ放送デバイス、携帯型ゲーム機、公衆電話ボックス(kiosk)といったデバイスにインストールされる回路基板、子供向けの種々のコンピュータ化された玩具、自動車、船舶、航空機、宇宙船に使用される車内(機内、船内)搭載型コンピュータ、または他のタイプのデバイスである。アップルコンピュータ社(Apple Computer, Inc.)によって販売されている「iPod」デバイス、およびマイクロソフト社(Microsoft Corp.)によって販売されている「Zune」デバイスといったディジタル音楽プレーヤーもまた、MIDIファイルフォーマットをサポートできる。MIDIフォーマットをサポートする他のデバイスは、キーボード、シーケンサー、音声符号器(ボコーダー)およびリズムマシンといった種々の音楽シンセサイザーを含み得る。
図1に示された種々の構成要素は、本開示の態様を説明するために必要とされるものである。しかしながら他の構成要素も存在する可能性があり、また図示の構成要素の一部はある幾つかの実現形態には含まれない可能性もある。例えば、もしオーディオデバイス4が無線電話であれば、オーディオファイルの無線通信を容易にするためにアンテナ、送信機、受信機およびモデム(変調復調器(modulator-demodulator))が包含される。
図1の例に示されているように、オーディオデバイス4は、MIDIファイルを記憶するオーディオ記憶ユニット6を含む。オーディオ記憶ユニット6は、任意の揮発性または不揮発性メモリまたは記憶装置を備える。例えばオーディオ記憶ユニット6は、ハードディスクドライブ、フラッシュメモリユニット、コンパクトディスク、フロッピー(登録商標)ディスク、ディジタルバーサタイルディスク(DVD)、読取り専用メモリユニット、ランダムアクセスメモリ、または情報記憶媒体である。オーディオ記憶ユニット6は、楽器デバイスインタフェース(MIDI)ファイルおよび他のタイプのデータを記憶する。例えば、もしオーディオデバイス4が携帯電話であれば、オーディオ記憶ユニット6は個人的つながり、写真、および他のタイプのデータのリストを備えるデータを記憶する。
オーディオデバイス4はまた、データをオーディオ記憶ユニット6から読み取り、これに書き込むことができるプロセッサ8を含む。更にプロセッサ8は、データをランダムアクセスメモリ(RAM)ユニット10から読み取り、またこれに書き込む。例えばプロセッサ8は、オーディオ記憶モジュール6からMIDIファイルの一部分を読み取って、MIDIファイルのこの部分をRAMユニット10に書き込む。プロセッサ8は、インテルペンティアム(登録商標)4プロセッサ、英国チェリーヒントン(Cherry Hinton, UK)のARMホールディングスによるARMアーキテクチャに準拠する埋込み型マイクロプロセッサ、あるいは他のタイプの汎用プロセッサといった汎用マイクロプロセッサを備える。RAMユニット10は、1つ以上のスタティックまたはダイナミックRAMユニットを備える。
プロセッサ8がMIDIファイルを読み取った後に、プロセッサ8は、MIDIファイルを構文解析して、これらのMIDIファイルに関連するMIDIイベントをスケジュールする。例えば各MIDIフレームに関して、プロセッサ8は、1つ以上のMIDIファイルを読み取り、またこれらのMIDIファイルからMIDIイベントを抽出する。MIDI命令に基づいて、プロセッサ8は、DSP12による処理のためにMIDIイベントをスケジュールする。MIDIイベントをスケジュールした後に、プロセッサ8は、DSP12がこれらのイベントを処理するように、このスケジューリングをRAMユニット10またはDSP12に供給する。代替としてプロセッサ8は、時間的に同期される仕方でMIDIイベントをDSP12に送出することによってスケジューリングを実行する。DSP12は、MIDIファイル内のパラメータを時間調整することによって指定されるように、同期される仕方でこれらのスケジュールされたイベントをサービスする。MIDIイベントは、音楽演奏情報を送るために使用されるチャネル音声メッセージを含む。チャネル音声メッセージは、ある特定のMIDI音声をオンまたはオフし、ポリフォニックキー圧力、チャネル圧力、ピッチベンドチェンジを変更し、変更メッセージ、アフタタッチ(残触覚)効果、呼吸制御効果、プログラム変更、ピッチベンド効果を制御し、左右にパン(pan)し、ペダル、メインボリューム、ソステヌートを持続するための命令、および他のチャネル音声メッセージを含む。更にMIDIイベントは、MIDIデバイスがMIDIデータに応答する仕方に影響を及ぼすチャネルモードメッセージを含む。更にMIDIイベントは、MIDIシステム内のすべての受信機のために意図されたシステム共通メッセージ、クロックベースのMIDIコンポーネント間の同期のために使用されるシステムリアルタイムメッセージ、および他のシステム関連メッセージといったシステムメッセージを含む。MIDIイベントはまた、MIDIショー制御メッセージ(例えば照明効果キュー、スライド映写キュー、機械効果キュー、花火キュー、および他の効果キュー)である。
DSP12がプロセッサ8からMIDI命令を受信すると、DSP12は連続的なパルスコード変調(PCM)信号を生成するためにMIDI命令を処理する。PCM信号は、波形が一定間隔でディジタルサンプルによって表されるアナログ信号のディジタル表現である。DSP12は、このPCM信号をディジタル・アナログ変換器(DAC)14に出力する。DAC14は、このディジタル波形をアナログ信号に変換する。駆動回路18は、ユーザへの物理的音の出力のためのスピーカ19Aおよび19Bを駆動するためにこのアナログ信号を使用できる。本開示は、スピーカ19Aおよび19Bをまとめて「スピーカ19」と呼ぶ。オーディオデバイス4は、フィルタ、前置増幅器、増幅器、およびスピーカ19による最終出力のためにアナログ信号を準備する他のタイプの構成要素を含む、1つ以上の更なる構成要素(図示せず)を含む。このようにしてオーディオデバイス4は、MIDIファイルにしたがって音を生成する。
ディジタル波形を生成するために、DSP12は、個別のMIDIフレームのためのディジタル波形を生成するMIDIハードウエアユニット18を使用する。各MIDIフレームは、10ミリ秒または他の時間間隔に対応する。1つのMIDIフレームが10ミリ秒に対応し、ディジタル波形が48kHzでサンプリングされる(すなわち、毎秒48,000サンプル)と、各MIDIフレームには480個のサンプルが存在する。MIDIハードウエアユニット18は、オーディオデバイス4のハードウエアコンポーネントとして実現される。例えばMIDIハードウエアユニット18は、オーディオデバイス4の回路基板に埋め込まれたチップセットである。MIDIハードウエアユニット18を使用するために、DSP12は最初に、MIDIハードウエアユニット18が遊んでいるかどうかを決定する。MIDIハードウエアユニット18は、MIDIハードウエアユニット18がMIDIフレームのためのディジタル波形を生成し終わった後に遊んでいる可能性がある。それからDSP12は、MIDIフレーム内に存在するMIDI音声を示す音声インジケータのリストを生成する。DSP12が音声インジケータのリストを生成した後に、DSP12は、MIDIハードウエアユニット18内に1つ以上のレジスタをセット(設定)する。DSP12は、これらのレジスタをセットするために直接メモリ交換(DME)を使用する。DMEは、プロセッサが他の動作を実行している間に、データを1つのメモリユニットからもう1つのメモリユニットに転送する手順である。DSP12がレジスタをセットした後に、DSP12は、MIDIハードウエアユニット18にMIDIフレームのためのディジタル波形を生成し始めるように命令する。以下詳細に説明されるように、MIDIハードウエアユニット18は、音声インジケータのリスト内のMIDI音声の各々のためのディジタル波形を生成して、これらのディジタル波形をMIDI音声のための波形に統合することによって、MIDIフレームのためのディジタル波形を生成する。MIDIハードウエアユニット18がMIDIフレームのためのディジタル波形を生成し終わったとき、MIDIハードウエアユニット18はDSP12に割込み(インタラプト)を送る。MIDIハードウエアユニット18からの割込みを受信すると、DSP12はディジタル波形のためのDME要求をMIDIハードウエアユニット18に送る。MIDIハードウエアユニット18がこの要求を受信すると、MIDIハードウエアユニット18はディジタル波形をDSP12に送る。
MIDIフレーム内に存在するMIDI音声を示す音声インジケータのリストを生成するために、DSP12は、MIDI音声のうちのどれがMIDIフレーム内で少なくとも最小レベルの音響的重要性を有しているかを決定する。MIDIフレーム内のMIDI音声の音響的重要性のレベルは、MIDIフレームの人間の聞き手によって知覚される全体的音に対するこのMIDI音声の重要性の関数である。
MIDI音声のためのディジタル波形を生成するために、MIDIハードウエアユニット18は、MIDI音声を定義する音声パラメータセット内の少なくとも幾つかの音声パラメータにアクセスする。1セットの音声パラメータは、MIDI音声のためのディジタル波形を生成するために必要な情報を指定することによって、および/またはこのような情報がどこに位置し得るかを指定することによって、MIDI音声を定義する。例えば1セットのMIDI音声パラメータは、共鳴のレベル、ピッチ残響、ボリューム、および他の音響特性を指定する。更に1セットのMIDI音声パラメータは、音声の基本波形を含むRAMユニット10内の位置のアドレスへのポインターを含む。MIDIフレームのためのディジタル波形は、複数のMIDI音声の複数のディジタル波形の集合である。例えば、MIDIフレームのためのディジタル波形は、複数のMIDI音声の複数のディジタル波形の合計である。
以下詳細に論じられるように、MIDIハードウエアユニット18は、幾つかの利点を提供する。例えば、MIDIハードウエアユニット18は、ディジタル波形の効率的な生成という結果をもたらす幾つかの特徴を含む。ディジタル波形のこの効率的な生成の結果として、オーディオデバイス4は、より高品質の音を生成し、より小さい電力を消費し、そうでなければMIDIファイルの再生のための従来の技法を改良することが可能である。更に、MIDIハードウエアユニット18はディジタル波形を効率的に生成できるので、MIDIハードウエアユニット18は一定時間内で、より多くのMIDI音声のためのディジタル波形を生成することが可能である。このような更なるMIDI音声の存在は、人間の聞き手によって知覚される音の品質を改善する。
図2は、オーディオデバイス4の例示的MIDIハードウエアユニット18を示すブロック図である。図2の例に示されるように、MIDIハードウエアユニット18は、データを送受信するバスインタフェース30を含む。例えばバスインタフェース30は、AMBA高性能バス(AHB)マスターインタフェースと、AHBスレーブインタフェースと、メモリバスインタフェースとを含む。代替として、バスインタフェース30は、AXIバスインタフェースまたはもう1つのタイプのバスインタフェースを含む。AXIは、高度拡張可能インタフェース(advanced extensible interface)を表す。
更にMIDIハードウエアユニット18は、調整モジュール32を含む。調整モジュール32は、MIDIハードウエアユニット18内のデータフローを調整する。MIDIハードウエアユニット18がMIDIフレームのためのディジタル信号を生成し始めるための命令をDSP12から受信すると、調整モジュール32はDSP12によって生成された音声インジケータのリストを、RAMユニット10からMIDIハードウエアユニット18内のリンクされたリストメモリユニット42内にロードする。このリスト内の各音声インジケータは、現在のMIDIフレームのときに音響的重要性を有するMIDI音声を示す。音声インジケータのリスト内の各音声インジケータは、MIDI音声を定義する音声パラメータセットを記憶するRAMユニット10内のメモリ位置を指定する。例えば各音声インジケータは、ある特定の音声パラメータセットのメモリアドレスを含むか、あるいは調整モジュール32がある特定の音声パラメータセットのメモリアドレスを導き出し得るインデックス値を含む。
調整モジュール32が音声インジケータのリストをリンクされたリストメモリユニット42にロードした後に、調整モジュール32は、リンクされたリストメモリ42に記憶された音声インジケータのリスト内の音声インジケータによって指示されたMIDI音声の1つのためのディジタル波形を生成するために、処理要素34Aから34Nの1つを識別する。処理要素34Aから34Nは、ここではまとめて「処理要素34」と呼ばれる。処理要素34は、互いに並行してMIDI音声のためのディジタル波形を生成する。
処理要素34の各々は、音声パラメータセット(VPS)RAMユニット46Aから46Nの1つに関連する。本開示は、VPS RAMユニット46Aから46Nをまとめて「VPS RAMユニット46」と呼ぶ可能性がある。VPS RAMユニット46は、処理要素34によって使用される音声パラメータを記憶するレジスタである。調整モジュール32がMIDI音声のためのディジタル波形を生成するために処理要素34の1つを識別すると、調整要素32は、MIDI音声の音声パラメータセットの音声パラメータをこの識別された処理要素に関連するVPS RAMユニット46の1つに記憶する。更に調整モジュール32は、音声パラメータセットの音声パラメータを波形フェッチユニット/低周波発振器(WFU/LFO)メモリユニット39に記憶する。
音声パラメータをVPS RAMユニットおよびWFU/LFOメモリユニット39にロードした後に、調整モジュール32は、MIDI音声のためのディジタル波形を生成し始めるように処理要素に命令する。処理要素34の各々は、プログラムメモリユニット44Aから44N(まとめて「プログラムメモリユニット44」)の1つに関連する。プログラムメモリユニット44の各々は、1セットのプログラム命令を記憶する。MIDI音声のためのディジタル波形を生成するために、処理要素は、この処理要素に関連するプログラムメモリユニット44の1つに記憶されたプログラム命令のセットを実行する。これらのプログラム命令は、処理要素に、この処理要素と関連するVPSメモリユニット46の1つから1セットの音声パラメータを検索させる。更にこれらのプログラム命令は、処理要素をして、音声のための基本波形サンプルへのポインターによって音声パラメータ内で指定された波形の要求を、波形フェッチユニット(WFU)36に送らせる。処理要素34の各々は、WFU36を使用する。処理要素34の1つからの要求に応じて、WFU36は、この要求している処理要素に1つ以上の波形サンプルを返す。波形は例えばこの波形の最大1サイクルだけサンプル内で位相シフトされるので、WFU36は、補間法を使用して位相シフトを補償するために2つのサンプルを返すことができる。更にステレオ信号は2つの別々の波形からなるので、WFU36は最大4個のサンプルを返すことができる。WFU36によって返された最後のサンプルは、補間のために使用され得る分数位相である。WFU36は、基本波形をより迅速にフェッチするためにキャッシュメモリ48を使用する。
WFU36がオーディオサンプルを処理要素34の1つに返した後に、それぞれの処理要素は、更なるプログラム命令を実行する。このような更なる命令は、MIDIハードウエアユニット18内の低周波発振器(LFO)38から非対称三角形の波形のサンプルを要求することを含む。WFU36によって返された波形をLFO38によって返された三角形の波形に乗算することによって、処理要素は、波形の種々の音響特性を操作することができる。例えば、波形を三角形の波形と乗算することは、所望の楽器によく類似した音の波形という結果を生じ得る。他の命令は、処理要素に、波形を指定回数ループさせるか、波形の振幅を調整させるか、残響を追加させるか、ビブラート効果を追加させるか、あるいは他の音響効果を与えさせる。このようにして処理要素は、1つのMIDIフレームを持続させる音声のための波形を生成することができる。最終的に処理要素は、退去命令に遭遇する可能性がある。処理要素が退去命令に遭遇すると、処理要素は生成された波形を加算バッファ40に供給する。代替として処理要素は、生成されたディジタル波形の各サンプルを生成しながらこのようなサンプルを加算バッファ40に記憶する。
加算バッファ40が処理要素34の1つから波形を受信すると、この加算バッファはこの波形をMIDIフレームの全体波形に統合する。例えば加算バッファ40は、最初にフラットな波形(すなわち、すべてのディジタルサンプルがゼロである波形)を記憶する。加算バッファ40が処理要素34の1つから波形を受信すると、加算バッファ40は、この波形の各ディジタルサンプルを加算バッファ40に記憶された波形のそれぞれのサンプルに加算する。このようにして加算バッファ40は、MIDIフレームのための全体波形を生成して記憶する。
最終的に調整モジュール32は、処理要素34がリンクされたリストメモリ42内のリストに示された音声のすべてのためのディジタル波形を生成し終わったことと、これらのディジタル波形を加算バッファ40に供給したこととを決定する。この時点で加算バッファ40は、現在のMIDIフレーム全体のための完成されたディジタル波形を含む。調整モジュール32がこの決定を行うと、調整モジュール32は、割込みをDSP12に送る。この割込みに応じてDSP12は、加算バッファ40の内容を受信するために直接メモリ交換(DME)を介して、加算バッファ40内の制御ユニット(図示せず)に要求を送る。代替としてDSP10はまた、DMEを実行するために予めプログラムされることも可能である。代替として、DSP12はまた、DMEを実行するために予めプログラムされることも可能である。
図3は、オーディオデバイス4の例示的動作を示す流れ図である。最初にプロセッサ8は、オーディオ記憶モジュール6からRAMユニット10にMIDIファイルをロードするためのプログラム命令に遭遇する(50)。例えば、もしオーディオデバイス4が携帯電話であれば、プロセッサ8は、オーディオデバイス4が着信電話呼出しを受信してMIDIファイルが着信音を表現するとき、固定(永続)記憶モジュール6からRAMユニット10にMIDIファイルをロードするためのプログラム命令に遭遇する。
MIDIファイルをRAMユニット10にロードした後に、プロセッサ8は、RAMユニット10内のMIDIファイルからのMIDI命令を構文解析する(52)。それからプロセッサ8は、MIDIイベントをスケジュールし、このスケジュールにしたがってMIDIイベントをDSP12に送達する(54)。MIDIイベントに応じてDSP12は、MIDIハードウエアユニット18と協同して、連続するディジタル波形をリアルタイムに出力する(56)。すなわち、DSP12によって出力されたディジタル波形は、個別のMIDIフレームに分割(セグメント化)されない。DSP12は、この連続するディジタル波形をDAC14に供給する(58)。DAC14は、ディジタル波形内の個別のディジタルサンプルを電圧に変換する(60)。DAC14は、種々のディジタル・アナログ変換技術を使用して実現される。例えばDAC14は、パルス幅変調器、オーバーサンプリングDAC、重み付け2進DAC、R−2RラダーDAC、温度計符号化DAC、セグメント化DAC、あるいは他のタイプのディジタル・アナログ変換器として実現される。
DAC14がディジタル波形をアナログオーディオ信号に変換した後に、DAC14は、このアナログオーディオ信号を駆動回路16に供給する(62)。駆動回路16は、このアナログ信号を使用してスピーカ19を駆動する(64)。スピーカ19は、アナログ電気信号を物理的音に変換する電気機械トランスデューサ(変換器)である。スピーカ19が音を生成すると、オーディオデバイス4のユーザはこの音を聞いて適切に反応する。例えば、もしオーディオデバイス4が携帯電話であれば、ユーザは、スピーカ19が着信音を生成したとき電話呼出しに応答する。
図4は、オーディオデバイス4内のDSP12の例示的動作を示す流れ図である。最初にDSP12は、プロセッサ8からMIDIイベントを受信する(70)。MIDIイベントを受信した後に、DSP12は、このMIDIイベントがMIDI音声のパラメータを更新するための命令であるかどうかを決定する(72)。例えばDSP12は、ピアノに関する中央ハ(C)音のための1セットの音声パラメータ内の左チャネルパラメータに関する利得を増加させるためのMIDIイベントを受信する。このようにして、ピアノに関する中央ハ音は音符が左から来ているように鳴る可能性がある。もしMIDIイベントがMIDI音声のパラメータを更新するための命令であるとDSP12が決定すれば(72の「YES」)、DSP12はRAMユニット10内のパラメータを更新する(74)。
他方、もしMIDIイベントがMIDI音声のパラメータを更新するための命令でないとDSP12が決定すれば(72の「NO」)、DSP12は音声インジケータのリストを生成する(75)。リンクされたリスト内の音声インジケータの各々は、MIDI音声を定義する音声パラメータセットを記憶するRAMユニット10内のメモリ位置を指定することによって、MIDIフレームのためのMIDI音声を指示する。MIDIハードウエアユニット18は限定された時間制限にしたがってMIDI音声のためのディジタル波形を生成するので、MIDIフレームに関してMIDI命令によって指定されたすべてのMIDI音声のためのディジタル波形をMIDIハードウエアユニット18が生成できない場合がある。その結果、リンクされたリスト内の音声インジケータによって指示されたMIDI音声は、MIDIフレームの期間中に最も大きな音響的重要性を有するMIDI音声である。音声インジケータのリストは、リンクされたリストである。すなわち、このリスト内の各音声インジケータは、リスト内の最後の音声インジケータを除いて、リスト内の次の音声インジケータのメモリアドレスへのポインターに関連している。
MIDIハードウエアユニット18だけが最も重要なMIDI音声のためのディジタル波形を生成することを保証するために、DSP12は、最も音響的に重要な音声を識別するための1つ以上の発見的アルゴリズムを使用する。例えばDSP12は、最も高い平均ボリュームを有する音声、必要なハーモニーを形成する音声、あるいは他の音響特性を識別する。DSP12は、最も音響的に重要な音声がリスト内で1番目に在り、2番目に音響的に重要な音声がリスト内で2番目に在る、などであるように音声インジケータのリストを生成する。更にDSP12は、MIDIフレーム内でアクティブでない任意の音声をリストから除去する。
音声インジケータのリストを生成した後に、DSP12は、MIDIハードウエアユニット18が遊んでいるかどうかを決定する(76)。MIDIハードウエアユニット18は、MIDIファイルの第1のMIDIフレームのためのディジタル波形を生成する前、またはMIDIフレームのためのディジタル波形の生成を完了した後に、遊んでいる可能性がある。もしMIDIハードウエアユニット18が遊んでいなければ(76の「NO」)、DSP12は、1クロックサイクル以上待って、それからMIDIハードウエアユニット18が遊んでいるかどうかを再び決定する(76)。
もしMIDIハードウエアユニット18が遊んでいれば(76の「YES」)、DSP12は、1セットの命令をMIDIハードウエアユニット18内のプログラムRAMユニット44にロードする(78)。例えばDSP12は、命令がプログラムRAMユニット44内に既にロードされたかどうかを決定する。もし命令がまだプログラムRAMユニット44内にロードされていなければ、DSP12は、直接メモリ交換(DME)を使用してこのような命令をプログラムRAMユニット44内に転送する。代替として、もし命令が既にプログラムRAMユニット44内にロードされていれば、DSP12はこのステップをスキップする。
DSP12がプログラム命令をプログラムRAMユニット44内にロードした後に、DSP12はMIDIハードウエアユニット18をアクティブ化する(80)。例えばDSP12は、MIDIハードウエアユニット18内のレジスタを更新することによって、あるいは制御信号をMIDIハードウエアユニット18に送ることによって、MIDIハードウエアユニット18をアクティブ化する。MIDIハードウエアユニット18をアクティブ化した後に、DSP12は、DSP12がMIDIハードウエアユニット18からの割込みを受信するまで待機する(82)。割込みを待機している間に、DSP12は、前のMIDIフレームに関するディジタル波形を処理して出力する。更にDSP12は、次のMIDIフレームのために音声インジケータのリストを生成する。割込みを受信するとDSP12内の割り込みサービスレジスタは、MIDIハードウエアユニット18内の加算バッファ40からMIDIフレームのためのディジタル波形を転送するために、DME要求をセットアップする(設ける)(84)。加算バッファ40内のディジタル波形が転送されているときに長時間のハードウエアアイドリングを回避するために、直接メモリ交換要求は、32個の32ビットワードブロックで加算バッファ40からディジタル波形を転送する。ディジタル波形のデータ完全性は、処理要素34が加算バッファ40内のデータを上書きしないようにする加算バッファ40内のロッキング機構(施錠機構)によって維持される。このロッキング機構は、1ブロックずつ解除され得るので、直接メモリ交換転送はハードウエア実行と並行して進む。
DSP12がMIDIハードウエアユニット18からMIDIフレームのためのオーディオサンプルを受信した後に、DSP12は、MIDIハードウエアユニット18から受信されたMIDIフレームのためのディジタル波形に先行するMIDIフレームのためのディジタル波形をDSP12がDAC14に完全に出力し終わるまで、ディジタル波形をバッファする(86)。DSP12が前のMIDIフレームのためのディジタル波形を完全に出力し終わった後に、DSP12は、現在のMIDIフレームのためにMIDIハードウエアユニット18から受信されたディジタル波形を出力する(88)。
図5は、オーディオデバイス4のMIDIハードウエアユニット18内の調整モジュール32の例示的動作を示す流れ図である。最初に調整モジュール32は、MIDIフレームのためのディジタル波形を生成し始めるための命令をDSP12から受信する(100)。DSP12から命令を受信した後に、調整モジュール32は、加算バッファ40の内容をクリア(消去)する(102)。例えば調整モジュール32は、加算バッファ40内のディジタル波形をすべてゼロにセットするように加算バッファ40に命令する。調整モジュール32が加算バッファ40の内容をクリアした後に、調整モジュール32は、DSP12によって生成された音声識別子のリストをRAMユニット10から、リンクされたリストメモリ42にロードする(104)。
音声インジケータのリンクされたリストをロードした後に、調整モジュール32は、処理要素がMIDI音声のためのディジタル波形を生成し終わったことを示す信号を調整モジュール32が処理要素34の1つから受信したかどうかを決定する(106)。処理要素がMIDI音声のためのディジタル波形を生成し終わったことを示す信号を、調整モジュール32が処理要素34の1つから受信しなかったとき(106の「NO」)、処理要素34はループバックしてこのような信号を待つ(106)。処理要素がMIDI音声のためのディジタル波形を生成し終わったことを示す信号を、調整モジュール32が処理要素34の1つから受信したとき(106の「YES」)、調整モジュール32は、処理要素に関連するVPS RAMユニット46の1つと、処理要素または波形フェッチユニット36またはLFO38によって変更された可能性のあるWFU/LFOメモリ39とに記憶された音声パラメータセットの1つ以上のパラメータを、RAMユニット10に書き込む(108)。例えばMIDI音声のための波形を生成しながら、処理要素34Aは、VPSメモリ46A内の音声パラメータセットのある幾つかのパラメータを変更する。この場合、例えば処理要素34Aは、MIDIフレームの終端で音声のボリュームレベルを示すために音声のための音声パラメータを更新する。更新された音声パラメータをRAMユニット10に書き戻すことによって、所定の処理要素は、現在のMIDIフレームが終了したボリュームレベルと同じであるボリュームレベルで、次のMIDIフレーム内のMIDI音声のためのディジタル波形を生成し始める。他の書き込み可能なパラメータは、LFO38によって生成された三角形の波形の左右バランス、全体的位相シフト、位相シフトまたは他の音響特性を含む。
調整モジュールがこれらのパラメータをRAMユニット10に書き戻した後に、調整モジュール32は、処理要素34がリスト内の音声インジケータによって示された各MIDI音声のためのディジタル波形を生成したかどうかを決定する(110)。例えば調整モジュール32は、音声インジケータのリンクされたリスト内の現在の音声インジケータを示すポインターを維持する。最初にこのポインターは、リンクされたリスト内の第1の音声インジケータを指示する。もし処理要素34がリスト内に示されたMIDI音声の各々のためのディジタル波形を生成したのであれば(110の「YES」)、調整モジュール32は、MIDIフレームのための全体的ディジタル波形が完全であることを示すために、DSP12に割込みをアサート(主張)する(112)。
他方、もし処理要素34がリスト内の音声インジケータによって示されたMIDI音声の各々のためのディジタル波形を生成していなかったならば(110の「NO」)、調整モジュール32は、遊んでいる処理要素34の1つを識別する(114)。もし処理要素34のすべてが遊んでいなければ(すなわち、ビジーであれば)、調整モジュール32は処理要素34の1つが遊び状態になるまで待つことがある。遊んでいる処理要素34の1つを識別した後に、調整モジュール32は、現在の音声インジケータによって示された音声パラメータセットのパラメータを、遊んでいる処理要素に関連するVPS RAMユニット44の1つにロードする(112)。調整モジュール32は、処理要素に関連する音声パラメータセットのこれらのパラメータを、VPS RAMユニットに単にロードする。更に調整モジュール32は、WFU36とLFO38とに関連する音声パラメータセットのパラメータを、WFU/LFO RAMユニット39にロードする(118)。それから調整モジュール32は、遊んでいる処理要素がMIDI音声のためのディジタル波形を生成し始める(120)。次に調整モジュール32は、現在の音声インジケータをリスト内の次の音声インジケータに更新し、処理要素34の1つがMIDI音声のためのディジタル波形の生成を完了したことを示す信号を、調整モジュール32が受信したかどうかを再び決定するためにループバックする(106)。
図6は、メモリアドレスを指定する音声インジケータのリストを使用する例示的DSP12を示すブロック図である。図6の例に示されるように、DSP12は、リストベースポインター140を記憶するレジスタを含む。リストベースポインター140は、リンクされたリストメモリ42内の音声インジケータのリスト142内の第1の音声インジケータのメモリアドレスを指定する。もしリスト142内に音声インジケータが存在しなければ、MIDIファイルの最初の状況であるように、リストベースポインター140の値は空アドレスである。更にDSP12は、音声インジケータレジスタの数144の値を記憶するレジスタを含む。音声インジケータレジスタの数144の値は、リスト142内の音声インジケータの数のタリー(勘定)を指定する。図6に示されたこの例示的データ構造では、リスト142内の各音声インジケータは、RAMユニット10内の音声パラメータセットのメモリアドレスと、リンクされたリストメモリ42内の次の音声インジケータのメモリアドレスとを備える。リスト142内の最後の音声インジケータは、リスト142内の次の音声インジケータのアドレスに関して空アドレスを指定する。
RAMユニット10は、1セットの音声パラメータセット146を含む。RAMユニット10内の各音声パラメータセットは、音声パラメータセット内の音声パラメータの値を指定する連続したメモリ位置のブロックである。第1の音声パラメータのメモリ位置のメモリアドレスは、この音声パラメータセットのためのメモリアドレスとして機能する。
DSP12がMIDIファイルの第1のMIDIイベントを受信する前に、リスト142は、如何なる音声インジケータも含まない可能性がある。リスト142が如何なる音声インジケータも含まないという事実を反映するために、リストベースポインター140の値は空メモリアドレスである可能性があり、また音声インジケータレジスタの数144の値は数ゼロを指定する可能性がある。MIDIファイルの第1のMIDIフレームの冒頭で、プロセッサ8は、MIDIフレームの期間中に発生する1セットのMIDIイベントを調整モジュール32に供給する。例えばプロセッサ8は、音声をオンにするMIDIイベントと、音声をオフにするMIDIイベントと、アフタタッチ(残触覚)効果に関連して他のこのような効果を生じるMIDIイベントとを、DSP12に供給する。MIDIイベントを処理するために、DSP12内のリスト生成(発生器)モジュール156は、リンクされたリストメモリ42内にリンクされたリスト142を生成する。一般にリスト生成モジュール156は、各MIDIフレームの期間中にリスト142を完全には生成しない。むしろリスト生成モジュール156は、リスト142内に既に存在する音声インジケータを再使用する。
リンクされたリスト142を生成するために、リスト生成モジュール156は、リスト142が、DSP12によって与えられたMIDIイベントのセット内に指定された各MIDI音声のための音声パラメータセット146の1つのメモリアドレスを指定する音声インジケータを既に含んでいるかどうかを決定する。もしリスト142が複数のMIDI音声のうちの1つのMIDI音声の音声インジケータを含んでいるとリスト生成モジュール156が決定すれば、リスト生成モジュール156はリスト142から音声インジケータを除去する。リスト142から音声インジケータを除去した後に、リスト生成モジュール156はリスト142に音声インジケータを戻して追加する。リスト生成モジュール156が音声インジケータをリスト142に戻して追加すると、リスト生成モジュール156は、リスト内の第1の音声インジケータから始めることが可能であり、そして除去された音声インジケータによって指示されたMIDI音声が、リスト142内の第1の音声インジケータによって指示された音声より音響的に重要であるかどうかを決定することが可能である。言い換えれば、リスト生成モジュール156は、どの音声が音にとってより重要であるかを決定する。リスト生成モジュール156は、MIDIイベントに指定されたMIDI音声または第1の音声インジケータによって指定されたMIDI音声がより音響的に重要であるかどうかを決定するために、1つ以上の発見的アルゴリズムを適用する。例えばリスト生成モジュール156は、2つのMIDI音声のうちのどちらが現在のMIDIフレームの期間中に最も音量の大きな平均ボリュームを有するかを決定する。音響的重要性を決定するために他の心理音響技法も適用される。もし除去された音声インジケータによって指示されたMIDI音声が、リスト142内の第1の音声インジケータによって指示された音声より重要であれば、リスト生成モジュール156は、この除去された音声インジケータをリストの最上部に追加する。
リスト生成モジュール156が除去された音声インジケータをリストの最上部に追加すると、リスト生成モジュール156は、リストベースポインターの値を、除去された音声インジケータのメモリアドレスに等しくなるように変更する。もし除去された音声インジケータによって指示されたMIDI音声が、第1の音声インジケータによって指示されたMIDI音声より重要でなければ、リスト生成モジュール156は、リスト生成モジュール156が、除去された音声インジケータによって指示されたMIDI音声より重要でないリスト142内の音声インジケータの1つによって指示されたMIDI音声を識別するまで、リスト142を下り続ける。リスト生成モジュール156がこのようなMIDI音声を識別すると、リスト生成モジュール156は、リスト142内でこの識別されたMIDI音声のための音声インジケータより上に(すなわち、前に)、除去された音声インジケータを挿入する。もし除去された音声インジケータによって指示されたMIDI音声が、リスト142内の音声インジケータによって指示された他のすべてのMIDI音声より音響的に重要でなければ、リスト生成モジュール156はこの除去された音声インジケータをリスト142の終端に追加する。リスト生成モジュール156は、MIDIイベントのセット内の各MIDI音声に関してこのプロセスを実行する。
もしリスト142がMIDIイベントに関連するMIDI音声のための音声インジケータを含まないとリスト生成モジュール156が決定すれば、リスト生成モジュール156はMIDI音声のために、リンクされたリストメモリ42内に新しい音声インジケータを創作する。新しい音声インジケータを創作した後に、リスト生成モジュール156は、除去された音声インジケータのために上記の仕方で新しい音声インジケータをリスト142に挿入する。このようにしてリスト生成モジュール156は、リンクされたリスト内の音声インジケータがリスト内の音声インジケータによって指示されたMIDI音声の音響的重要性にしたがって順次に配置されている、リンクされたリストを生成する。一例としてリスト生成モジュール156は、MIDIフレーム内で最も重要な音声から最も重要でない音声までのMIDI音声を指示する、音声インジケータのリストを生成する。
図6の例ではDSP12は、リスト142を生成する際にリスト生成モジュール156を援助する1セットのポインターを含む。ポインターのこのセットは、リスト生成モジュール156が現在使用している音声インジケータのメモリアドレスを保持する現在の音声インジケータポインター148と、リスト生成モジュール156がリスト142内に挿入している音声インジケータのメモリアドレスを保持するイベント音声インジケータポインター150と、リスト生成モジュール156が現在使用している音声インジケータの前にリスト生成モジュール156が使用した音声インジケータのメモリアドレスを保持する、前の音声インジケータポインター152と、を含む。
もし音声インジケータレジスタの数144の値が音声インジケータの最大数を超えれば、リスト生成モジュール156は、最も重要でないMIDI音声を示すリスト142内の音声インジケータに関連するメモリを割当て解除する。もしリスト142内の音声インジケータが最も重要なものから最も重要でないものに順次配列されていれば、リスト生成モジュール156は、リスト生成モジュール156が空メモリアドレスを指定する次の音声インジケータメモリアドレスを含む音声インジケータを識別するまで、次の音声インジケータメモリアドレスのチェーンに従うことによって、最も重要でないMIDI音声を示すリスト142内の音声インジケータを識別する。最後の音声インジケータに関連するメモリを割当て解除した後に、リスト生成モジュール156は、音声インジケータレジスタの数144の値を1だけ減らす。
リスト生成モジュール156がリスト142を生成した後に、リスト生成モジュール156は、リストベースポインター140の値と音声インジケータの数144の値とを調整モジュールに供給する。調整モジュール32は、リストベースポインター140と音声インジケータの数144とのこれらの値を保持するレジスタ(図示せず)を含む。調整モジュール32は、リスト142にアクセスしてリスト142内の音声インジケータによって示されたMIDI音声を処理要素32に割り当てるために、これらの値を使用する。例えばリスト生成モジュール156がリスト142を生成し終わったとき調整モジュール32は、リンクされたリストメモリ42内にリスト142をロードするためにリスト生成モジュール156によって与えられたリストベースポインター140の値を使用する。それから調整モジュール32は、遊んでいる処理要素34の1つを識別する。それから調整モジュール32は、現在の音声インジケータを指示する調整モジュール32内のポインターによって指定されたメモリ位置において、リスト142内の音声インジケータによって指示されたMIDI音声を定義する音声パラメータセットを記憶する、RAMユニット10内のメモリ位置のメモリアドレスを取得する。それから調整モジュール32は、音声パラメータセット内の少なくともある幾つかの音声パラメータを、遊んでいる処理要素に関連するVPS RAMユニット46の1つに記憶するために、取得されたメモリアドレスを使用する。音声パラメータセットをVPS RAMユニットに記憶した後に、調整モジュール32は、音声のための波形を生成し始めるための信号を処理要素に送る。調整モジュール32は、処理要素34がリスト142内の音声インジケータによって指示された各音声のために波形を生成し終わるまで、これを続ける。
DSP12と調整モジュール32とによる音声インジケータのリンクされたリストの使用は、幾つかの利点を提示する。例えばDSP12は、音声パラメータセットを指示する音声インジケータのリンクされたリストを分類して再配列するので、RAMユニット10内の実際の音声パラメータセットを分類して再配列することは必要でない。音声インジケータは、音声パラメータセットより極めて小さい。その結果、DSP12は、より少ないデータをRAMユニット10に、およびRAMユニット10から動かす(すなわち、書き込み、また読み取る)。したがってDSP12は、DSP12が音声パラメータセットを分類して再配列した場合より小さい帯域幅を、調整モジュール32からRAMユニット10へのバス上で必要とする。更にDSP12は、より少ないデータをRAMユニット10に、またRAMユニット10から動かすので、DSP12はDSP12が実際の音声パラメータセットを動かした場合より少ない電力を消費する。また、音声インジケータのリンクされたリストの使用は、DSP12が任意の順序で処理要素34に音声パラメータセットを供給することを可能にする。音声パラメータセットを任意の順序で処理要素34に供給することは、ある幾つかのタイプのオーディオ処理において有用である。
更に、インジケータのリンクされたリストの使用は、MIDI音声セットパラメータの識別子とは別の状況における適用可能性を有する。例えばこれらのインジケータは、MIDI音声パラメータのセットより、むしろ予めプログラムされたディジタルフィルタを指示する。予めプログラムされたディジタルフィルタの各々は、双二次フィルタ(bi-quadratic filter)のために5個の係数を提供する。双二次フィルタは、両極からより遠く離れた周波数をフィルタリング(濾波)する2極2ゼロのディジタルフィルタである。双二次フィルタは、オーディオ等化器をプログラムするために使用される。MIDI音声と同様に、第1のディジタルフィルタは、第2のディジタルフィルタとほぼ同じくらい重要である。したがって、ディジタルフィルタを適用するモジュールは、1セットのディジタルフィルタを効率的に適用するためにディジタルフィルタパラメータにインジケータの分類およびリンクされたリストを使用する。例えばオーディオデバイス4のモジュールは、DSP12がディジタル波形を生成した後にディジタル波形にフィルタを適用する。
図7は、DSP12がプロセッサ8から1セットのMIDIイベントを受信するときのDSP12の例示的動作を示す流れ図である。最初にDSP12は、プロセッサ8から1セットのMIDIイベントを受信する(160)。DSP12が1セットのMIDIイベントを受信した後に、リスト生成モジュール156は、このMIDIイベントのセットが空であるかどうかを決定する(162)。もしMIDIイベントのこのセットが空であれば(162の「YES」)、リスト生成モジュール156は、リストベースポインター140の値を調整モジュール32に供給する(164)。
他方、もしMIDIイベントのこのセットが空でなければ(162の「NO」)、リスト生成モジュール156はMIDIイベントのこのセットから1つのイベントを除去する(166)。この除去されたイベントはここでは「現在イベント」と呼ばれ、現在イベントに関連するMIDI音声(単数または複数)はここでは「現在音声」と呼ばれる。リスト生成モジュール156がMIDIイベントのセットから現在イベントを除去した後に、リスト生成モジュール156は、リストベースポインター140の値が空アドレスであるかどうかを決定する(168)。もしリストベースポインター140の値が空アドレスでなければ(168の「NO」)、リスト生成モジュール156は、現在音声のための音声インジケータをリスト142に挿入する。図8および図9は、音声インジケータをリスト142に挿入するための例示的手順を示す。リスト生成モジュール156が音声インジケータをリスト142に挿入した後に、リスト生成モジュール156はループバックすることが可能であり、MIDIイベントのセットが空であるかどうかを再び決定する(162)。
もしリストベースポインター140の値が空アドレスを指定すれば(168の「YES」)、リスト生成モジュール156は現在音声のための音声インジケータに関してリンクされたリストメモリ42内のメモリの連続ブロックを割り当てる(170)。メモリのブロックを割り当てた後に、リスト生成モジュール156は、メモリのブロックのメモリアドレスをリストベースポインター140に記憶する(172)。それからリスト生成モジュール156は、音声インジケータレジスタの数144の値を1だけ増加させる(174)。更にリスト生成モジュール156は、現在音声のための音声インジケータを初期化する(176)。音声インジケータを初期化するために、リスト生成モジュール156は、音声インジケータの次の音声インジケータポインターをゼロにセットし、音声インジケータの音声パラメータセットポインターを、現在音声の音声パラメータセットの音声パラメータセット146内のメモリアドレスにセットする。音声インジケータを初期化した後に、リスト生成モジュール156は、ループバックしてMIDIイベントのセットが空であるかどうかを再び決定する(162)。
図8は、DSP12が音声インジケータを音声インジケータのリスト142内に挿入するときのDSP12の例示的動作を示す流れ図である。特に図8の例は、DSP12内のリスト生成モジュール156がリスト142から現在音声の音声インジケータを除去する動作、あるいは音声インジケータがリスト142内の適当な位置に引き続いて挿入されるように、現在音声のための新しい音声インジケータを創作する動作を示す。図8、9、10および11において用語「音声インジケータ」は「V.I.」と略され、用語「音声パラメータセット」は「V.P.S.」と略されている。図8の例に示された流れ図は「A」とマークされた円から始まり、これは図7の例において「A」とマークされた円に対応している。
最初にリスト生成モジュール156は、現在音声インジケータポインター148の値をリストベースポインター140の値にセットする(180)。次にリスト生成モジュール156は、前の音声インジケータポインター152の値をゼロにセットする(182)。前の音声インジケータポインター152の値をゼロにセットした後に、リスト生成モジュール156は、現在音声インジケータ(すなわち、現在音声インジケータポインター148内のメモリアドレスに等しいメモリアドレスを有する音声インジケータ)の音声パラメータポインターが、現在イベントの音声の音声パラメータセットのメモリアドレスに等しいかどうかを決定する(184)。
もし現在音声インジケータの音声パラメータポインターが音声パラメータセットのメモリアドレスに等しいとリスト生成モジュール156が決定すれば(184の「YES」)、リスト生成モジュール156は、前の音声インジケータポインター152の値が空アドレスであるかどうかを決定する(186)。もし前の音声インジケータポインター152の値が空アドレスではないとリスト生成モジュール156が決定すれば(186の「NO」)、リスト生成モジュール156は、前の音声インジケータ(すなわち、前の音声インジケータポインター152内のメモリアドレスに等しいメモリアドレスを有するインジケータ)の次の音声インジケータポインターを、現在音声インジケータの次の音声インジケータポインターの値にセットする(188)。前の音声インジケータの次の音声インジケータポインターをセットした後に、リスト生成モジュール156は、イベント音声インジケータポインター150の値を現在音声インジケータポインター148の値にセットする(190)。リスト生成モジュール156はまた、前の音声インジケータポインター152の値がゼロであるとき(186の「YES」)、イベント音声インジケータポインター150の値を現在音声インジケータポインター148の値にセットする。このようにしてリスト生成モジュール156は、音声インジケータの次の音声インジケータポインターを空メモリアドレスにセットしようとは試みない。リスト生成モジュール156がイベント音声インジケータポインター148の値をセットした後に、リスト生成モジュール156は、現在音声インジケータポインター148の値をリストベースポインター140の値にセットする(192)。それからリスト生成モジュール156は、イベント音声インジケータポインター150によってポイントされた音声インジケータを再挿入するために、図9に示された例示的動作を使用する。
もし現在音声インジケータの音声パラメータセットが音声パラメータセットのメモリアドレスに等しくないとリスト生成モジュール156が決定すれば(184の「NO」)、リスト生成モジュール156は、現在音声インジケータの次の音声インジケータポインターの値がゼロであるかどうかを決定する(194)。言い換えれば、リスト生成モジュール156は、現在音声インジケータがリスト142内の最後の音声インジケータであるかどうかを決定する。もし現在音声インジケータの次の音声インジケータポインターの値がゼロでないとリスト生成モジュール156が決定すれば(194の「NO」)、リスト生成モジュール156は、前の音声インジケータポインター152の値を現在音声インジケータポインター148の値にセットする(196)。それからリスト生成モジュール156は、現在音声インジケータポインター148の値を現在音声インジケータの次の音声インジケータポインターの値にセットする(198)。このようにしてリスト生成モジュール156は、現在音声インジケータをリスト142内の次の音声インジケータに進めることが。それからリスト生成モジュール156は、ループバックして、新しい現在音声インジケータの音声パラメータセットポインターが現在音声の音声パラメータセットのアドレスに等しいかどうかを、再び決定する(184)。
他方、もし現在音声インジケータの次の音声インジケータポインターがゼロであるとリスト生成モジュール156が決定すれば(194の「YES」)、リスト生成モジュール156は現在音声のための音声インジケータを位置決めすることなく、リスト142の終端に到達している。この理由から、リスト生成モジュール156は、現在音声のための新しい音声インジケータを作り出すことができる。現在音声のための新しい音声インジケータを作り出すために、リスト生成モジュール156は、新しい音声インジケータのためのリンクされたリストメモリ42内のメモリを割り当て得る(200)。それからリスト生成モジュール156は、イベント音声インジケータポインター148の値を新しい音声インジケータのメモリアドレスにセットする(202)。ここで、この新しい音声インジケータがイベント音声インジケータである。次にリスト生成モジュール156は、音声インジケータレジスタの数144の値を1だけ増加させる(204)。音声インジケータレジスタの数144の値を増加させた後に、リスト生成モジュール156は、現在音声の音声パラメータセットのメモリアドレスを含むようにイベント音声インジケータの音声パラメータセットポインターをセットする(206)。それからリスト生成モジュール156は、現在音声インジケータポインター148の値をリストベースポインター140の値にセットすることが可能であり(192)、それから図9に示された例示的動作にしたがってイベント音声インジケータをリスト142に挿入する。
図9は、DSPが音声インジケータをリスト142に挿入するときのDSP12の例示的動作を示す流れ図である。図9の例に示された流れ図は、「B」とマークされた円から始まり、これは図8の例で「B」とマークされた円に対応している。
最初に、DSP12内のリスト生成モジュール156は、イベント音声インジケータによって指示された音声パラメータセットをRAMユニット10から検索する(210)。それからリスト生成モジュール156は、現在音声インジケータによって指示された音声パラメータセットをRAMユニット10から検索する(212)。両音声パラメータセットを検索した後に、リスト生成モジュール156は、これらの音声パラメータセットの値に基づいてMIDI音声の相対的音響的重要性を決定する(214)。
もしイベント音声インジケータによって指示されたMIDI音声が現在音声インジケータによって指示されたMIDI音声より重要であれば(214の「YES」)、リスト生成モジュール156は、イベント音声インジケータにおける次の音声インジケータを現在音声インジケータポインター148の値にセットする(216)。次の音声インジケータをセットした後に、リスト生成モジュール156は、現在音声インジケータポインター148の値がリストベースポインター140の値に等しいかどうかを決定する(218)。言い換えれば、リスト生成モジュール156は、現在音声インジケータがリスト142内の第1の音声インジケータであるかどうかを決定する。もし現在音声インジケータポインター148の値がリストベースポインター140の値に等しければ(218の「YES」)、リスト生成モジュール156は、リストベースポインター140の値をイベント音声インジケータポインター150の値にセットする(220)。このようにしてイベント音声インジケータは、リスト142内で第1の音声インジケータになる。そうではなく、もし現在音声インジケータポインター148の値がリストベースポインター140の値に等しくなければ(218の「NO」)、リスト生成モジュール156は、前の音声インジケータにおける次の音声インジケータポインターの値を、イベント音声インジケータポインター150の値にセットする(222)。このようにしてリスト生成モジュール156は、イベント音声インジケータをリスト142にリンクすることができる。
他方、もしイベント音声インジケータによって指示されたMIDI音声が現在音声インジケータによって指示されたMIDI音声より重要でなければ(214の「NO」)、リスト生成モジュール156は、現在音声インジケータにおける次の音声インジケータポインターの値がゼロであるかどうかを決定する(224)。もし次の音声インジケータポインターの値がゼロであれば、現在音声インジケータはリスト142内の最後の音声インジケータである。もし現在音声インジケータにおける次の音声インジケータポインターの値がゼロであれば(224の「YES」)、リスト生成モジュール156は、現在音声インジケータにおける次の音声インジケータポインターの値を、イベント音声インジケータポインター150の値にセットする(226)。このようにしてリスト生成モジュール156は、イベント音声インジケータによって指示された音声がリスト142内で最も重要でない音声であるとき、イベント音声インジケータをリスト142の終端に追加する。
しかしながら、もし現在音声インジケータにおける次の音声インジケータポインターがゼロでなければ(224の「NO」)、現在音声インジケータはリスト142内の最後の音声インジケータではない。この理由から、リスト生成モジュール156は、前の音声インジケータ152の値を現在音声インジケータポインター148の値にセットする(228)。それからリスト生成モジュール156は、現在音声インジケータポインター148の値を、現在音声インジケータにおける次の音声インジケータポインターの値にセットする(230)。現在音声インジケータポインター148の値をセットした後に、リスト生成モジュール156は、現在音声インジケータによって指示された音声パラメータセットを再び検索するためにループバックする(212)。
図10は、リスト142内の音声インジケータの数が音声インジケータの最大数を超えたときに、DSPがリスト142から音声インジケータを除去するときのDSP12の例示的動作を示す流れ図である。例えばDSP12は、リスト142内の音声インジケータの最大数を10に限定する。この例では、MIDIハードウエアユニット18は、MIDIフレーム内の10個の最も音響的に重要なMIDI音声のためのディジタル波形だけを生成するであろう。音声の限定数なしでは、MIDIハードウエアユニット18がMIDIフレームによって許された時間内でリスト142内の音声のすべてを処理することはできない可能性があるので、DSP12はリスト142内の音声インジケータの最大数をセットする。更にDSP12は、リンクされたリストメモリ42内に空間を保存するために、リスト142内の音声インジケータの最大数をセットする。更に、リスト142に関する音声インジケータの最大数は、新しい音声インジケータをリスト142に挿入するために必要とされる計算の回数に上限をセットする。計算回数に上限をセットすることは、MIDIフレームのためのディジタル波形をリアルタイムに生成するための要件である。
最初に、DSP12内のリスト生成モジュール156は、音声インジケータレジスタの数144の値がリスト142内の音声インジケータの最大数より大きいかどうかを決定する(240)。もし音声インジケータレジスタの数144の値が音声インジケータの最大数より大きくなければ(240の「NO」)、リスト142から如何なる音声インジケータも除去する必要はない。しかしながらある幾つかの例では、リスト生成モジュール156は、リスト142を通してスキャン(走査)し、現在アクティブでない、または所定時間内にアクティブでなかった音声のための音声インジケータを除去することができる。
もし音声インジケータレジスタの数144の値が音声インジケータの最大数より大きければ(240の「YES」)、リスト生成モジュール156は、現在音声インジケータポインター148の値をリストベースポインター140の値にセットする(242)。次にリスト生成モジュール156は、前の音声インジケータポインター152の値をゼロにセットする(244)。この時点で、リスト生成モジュール156は、現在音声インジケータの次の音声インジケータポインターの値がゼロであるかどうか(すなわち、現在音声インジケータがリスト142内の最後の音声インジケータであるかどうか)を決定する(248)。もし現在音声インジケータの次の音声インジケータポインターの値がゼロでなければ(248の「NO」)、リスト生成モジュール156は、前の音声インジケータポインター152の値を現在音声インジケータポインター148の値にセットする(250)。それからリスト生成モジュール156は、現在音声インジケータポインター148の値を現在音声インジケータの次の音声インジケータポインターの値にセットする(252)。次にリスト生成モジュール156は、新しい現在音声インジケータの次の音声インジケータポインターの値がゼロに等しいかどうかを再び決定するためにループバックする(248)。
もし現在音声インジケータの次の音声インジケータポインターの値がゼロに等しければ(248の「YES」)、現在音声インジケータは、リスト142内の最後の音声インジケータである。それからリスト生成モジュール156は、リスト142から最後の音声インジケータを除去する。リスト142から最後の音声インジケータを除去するために、リスト生成モジュール156は、前の音声インジケータの次の音声インジケータポインターをゼロにセットする(254)。次に調整モジュール32は、現在音声インジケータのためのリンクされたリストメモリ42内のメモリを割当て解除する(256)。それから調整モジュール32は、音声インジケータレジスタの数144の値を減らす(258)。音声インジケータレジスタの数144の値を減らした後に、リスト生成モジュール156は、音声インジケータレジスタの数144の値が音声インジケータの許された最大数より大きいかどうかを再び決定するためにループバックする(240)。
図11は、メモリアドレスが導き出され得るインデックス値を指定する音声インジケータのリストを使用する例示的DSP12を示すブロック図である。図12の例ではリスト142内の各音声インジケータは、4個の音声パラメータセット(VPS)インデックス値を含む32ビットワードと、リスト142内の次の音声インジケータのメモリアドレスとを含む。ブロック260内の各VPSインデックス値は、音声パラメータセットのブロック262内の1つの音声パラメータセットに関連する数を指定する。例えば第1のVPSインデックス値は、音声パラメータセットのブロック262内の第2の音声パラメータセットを示すための数「2」を指定する。更にブロック260内の各VPSインデックス値は、RAMユニット10内の4バイトワードの1バイト(すなわち、8ビット)で表される。1つのVPSインデックス値は1バイトで表されるので、単一のVPSインデックス値は、256(すなわち、2=256)個の音声パラメータセットのうちの1つを指示する。
更に図11の例では、RAMユニット10は、メモリ位置の連続したブロック262内に各音声パラメータセットを記憶する。RAMユニット10は、連続したブロック内に各音声パラメータセットを記憶するので、1つの音声パラメータセットは前の音声パラメータセットの直後のメモリ位置から始まる。
DSP12または調整モジュール32が音声パラメータセットのブロック262内の1つの音声パラメータセットにアクセスする必要があるとき、DSP12または調整モジュール32は最初に、ブロック260内の音声パラメータセットのインデックス値に、セットサイズレジスタ268に含まれた値を乗算する。セットサイズレジスタ268に含まれた値は、単一の音声パラメータセットが占めるRAMユニット10内のアドレス可能位置の数に等しい。それからDSP12または調整モジュール32は、セットベースポインターレジスタ266の値を加算する。セットベースポインターレジスタ266に含まれた値は、ブロック262内の第1の音声パラメータセットのメモリアドレスに等しい。したがって、音声パラメータセットのインデックスに音声パラメータセットのサイズを乗算し、それから第1の音声パラメータセットのメモリアドレスを加算することによって、DSP12または調整モジュール32は、ブロック262内の音声パラメータセットの第1のメモリアドレスを導き出すことができる。
DSP12は、図8から図10のリスト142内の音声インジケータを調整モジュール32が制御したのとほぼ同じ仕方で、図11のリスト142内の音声インジケータを制御する。しかしながら、この例示的データ構造を使用するときDSP12は、音声インジケータ内のVPSインデックス値を分類する。
図11に示された例示的データ構造は、この図11に示されたデータ構造が、音声パラメータセットへの同じ数のポインターを記憶するためにリンクされたリストメモリ42内で、より少ないメモリ位置を必要とするので、図6に示された例示的データ構造より利点を有する。しかしながら、図11に示されたデータ構造は、DSP12と調整モジュール32とに更なる計算を実行することを要求する。
図12は、例示的処理要素34Aの細部を示すブロック図である。図12の例は処理要素34Aの細部を示しているが、これらの細部は処理要素34の他のものにも適用可能である。
図12の例に示されているように、処理要素34Aは、幾つかの構成要素を備える。これらの構成要素は、制御ユニット280、算術論理演算ユニット(ALU)282、多重化装置284、および1セットのレジスタ286を含むが、これらに限定されない。更に処理要素34Aは、VPS RAMユニット46A用の読取りインタフェース・ファーストインファーストアウト(先入れ先出し)(FIFO)292、VPS RAMユニット46A用の書込みインタフェースFIFO、LFO38用のインタフェースFIFO296、WFU36用のインタフェースFIFO298、加算バッファ40用のインタフェースFIFO300、および加算バッファ40内のRAM用のインタフェースFIFO302を含む。
制御ユニット280は、命令を読み取り、これらの命令に基づいて処理要素34Aを制御する制御信号を出力する1セットの回路を備える。制御ユニット280は、現在命令のメモリアドレスを記憶するプログラムカウンタ290と、処理要素34によって実行される第1のプログラムループのためのカウンタを記憶する第1のループカウンタ304と、処理要素34によって実行される第2のプログラムループのためのカウンタを記憶する第2のループカウンタ306とを含む。ALU282は、レジスタ286のうちの種々のものに記憶された値に対して種々の算術演算を実行する回路を備える。ALU282は、MIDI音声のためのディジタル波形の生成のために特別の有用性を有する算術演算を実行するように特化される。レジスタ286は、符号付きまたは符号なしの値を保持し得る1セット8個の32ビットレジスタである。多重化装置284は、制御ユニット280によって出力された制御信号に基づいて、ALU282、インタフェース読取りFIFO292、インタフェースFIFO296、インタフェースFIFO298、およびインタフェースFIFO302からの出力を、レジスタ286の特定のものに方向付けることができる。
処理要素34Aは、MIDI音声のためのディジタル波形を生成するために特化された1セットのプログラム命令を使用する。言い換えれば、処理要素34Aにおいて使用されるプログラム命令のセットは、縮小命令セットコンピュータ(RISC)命令セットといった一般化された命令セット、またはx86命令セットといった複数命令セットアーキテクチャ命令セットには見られない、プログラム命令を含む。更に、処理要素34Aにおいて使用されるプログラム命令のセットは、一般化された命令セットに見られるある幾つかのプログラム命令を除外する。
処理要素34Aによって使用されるプログラム命令は、算術論理演算ユニット(ALU)命令、ロード/ストア命令、および制御命令として分類される。処理要素34Aによって使用されるプログラム命令の各クラスは、異なる長さであり得る。例えば、ALU命令は20ビット長であり、ロード/ストア命令は18ビット長であり、制御命令は16ビット長であり得る。
ALU命令は、制御ユニット280をしてALU282に制御信号を出力させる命令である。1つの例示的フォーマットでは、各ALU命令は、20ビット長であり得る。例えば、ALU命令のビット19:18は留保されており、ビット17:14はALU命令識別子を含んでおり、ビット13:11はレジスタ286のうちの第1のレジスタの識別子を含み、ビット10:8はレジスタ286のうちの第2のレジスタの識別子を含み、ビット7:5はシフトすべきビット数またはレジスタ286のうちの第3のレジスタの識別子を含み、ビット4:2はレジスタ286のうちの宛て先レジスタの識別子を含み、そしてビット1:0はALU制御ビットを含む。ALU制御ビットは、ここでは「ACC」と略される。以下、より詳細に論じられるように、ALU制御ビットはALU命令の動作を制御する。
処理要素34Aによって使用されるALU命令のセットは、下記の命令を含む:
MULTSS:
構文:MULTSS R,R,shift,R,ACC
機能:レジスタRおよびR内の符号付き値の乗算を実行するようにALU282に命令する制御信号を、制御ユニット280に出力させ、それから「shift」によって指定された量だけ積を左にシフトする。積をシフトした後に、ALU282はACCによって指定されたビットをこの積から抽出する。それからALU282は、これらのビットを出力する。もしACC=0であれば、ALU282は積の下側32ビットを抽出する。もしACC=1であれば、ALU282は積の中央32ビットを抽出する。もしACC=2であれば、ALU282は積の上側32ビットを抽出する。この命令はまた、ALU282からの出力をレジスタ286内のRに方向付けるために、制御ユニット280をして制御信号を多重化装置284に出力させる。
MULTSU:
構文:MULTSU R,R,shift,R,ACC
機能:R内の符号付き値とR内の無符号の値との乗算を実行し、それから「shift」によって指定された量だけ積を左にシフトするようにALU282に命令する制御信号を、制御ユニット280に出力させる。積をシフトした後に、ALU282はACCによって指定されたビットをこの積から抽出する。それからALU282はこれらのビットを出力する。もしACC=0であれば、ALU282は積の下側32ビットを抽出する。もしACC=1であれば、ALU282は積の中央32ビットを抽出する。もしACC=2であればALU282は積の上側32ビットを抽出する。この命令はまた、ALU282からの出力をレジスタ286内のRに方向付けるために、制御ユニット280をして制御信号を多重化装置284に出力させる。
MULTUU:
構文:MULTUU R,R,shift,R,ACC
機能:レジスタRおよびR内の無符号の値の乗算を実行し、それから「shift」によって指定された量だけ積を左にシフトするようにALU282に命令する制御信号を、制御ユニット280に出力させる。積をシフトした後に、ALU282はACCによって指定されたビットをこの積から抽出する。それからALU282はこれらのビットを出力する。もしACC=0であれば、ALU282は積の下側32ビットを抽出し、これらの32ビットをRに記憶する。もしACC=1であれば、ALU282は積の中央32ビットを抽出する。もしACC=2であれば、ALU282は積の上側32ビットを抽出する。この命令はまた、ALU282からの出力をレジスタ286内のRに方向付けるために、制御ユニット280をして制御信号を多重化装置284に出力させる。
MACSS:
構文:MACSS R,R,shift,R,ACC
機能:レジスタRとR内の符号付き値の乗算を実行するようにALU282に命令する制御信号を、制御ユニット280に出力させ、それから「shift」によって指定された量だけ積を左にシフトする。積をシフトした後に、ALU282はACCによって指定された32ビットをこの積から抽出し、それからこれらの32ビットをR内の値に加算し、その結果得られたビットを出力する。もしACC=0であれば、ALU282は積の下側32ビットを抽出する。もしACC=1であれば、ALU282は積の中央32ビットを抽出する。もしACC=2であれば、ALU282は積の上側32ビットを抽出する。この命令はまた、ALU282からの出力をレジスタ286内のRに方向付けるために、制御ユニット280をして制御信号を多重化装置284に出力させる。
MACSU:
構文:MACSU R,R,shift,R,ACC
機能:R内の符号付き値とR内の無符号の値との乗算を実行し、それから「shift」によって指定された量だけ積を左にシフトするようにALU282に命令する制御信号を、制御ユニット280に出力させる。積をシフトした後に、ALU282はACCによって指定された32ビットをこの積から抽出する。それからALU282は、これらの32ビットをR内の値に加算して、その結果得られたビットを出力する。もしACC=0であれば、ALU282は積の下側32ビットを抽出する。もしACC=1であれば、ALU282は積の中央32ビットを抽出する。もしACC=2であれば、ALU282は積の上側32ビットを抽出する。この命令はまた、ALU282からの出力をレジスタ286内のRに方向付けるために、制御ユニット280をして制御信号を多重化装置284に出力させる。
MACUU:
構文:MACUU R,R,shift,R,ACC
機能:レジスタRおよびR内の無符号の値の乗算を実行し、それから「shift」によって指定された量だけ積を左にシフトするようにALU282に命令する制御信号を、制御ユニット280に出力させる。積をシフトした後に、ALU282はACCによって指定された32ビットをこの積から抽出し、それからこれらの32ビットをR内の値に加算する。それからALU282は、その結果得られたビットを出力する。もしACC=0であれば、ALU282は積の下側32ビットを抽出する。もしACC=1であれば、ALU282は積の中央32ビットを抽出する。もしACC=2であれば、ALU282は積の上側32ビットを抽出する。この命令はまた、ALU282からの出力をレジスタ286内のRに方向付けるために、制御ユニット280をして制御信号を多重化装置284に出力させる。
MULTUUMIN:
構文:MULTUUMIN R,R,shift,R,ACC
機能:レジスタRおよびR内の無符号の値の乗算を実行し、それから「shift」によって指定された量だけ積を左にシフトするようにALU282に命令する制御信号を、制御ユニット280に出力させる。それからALU282は、ACCによって指定されたビットをこの積から抽出し、これらのビットがR内に記憶された数より小さい数を表しているかどうかを決定する。もしこれらのビットがR内に記憶された数より小さい数を表していれば、ALU282はこれらのビットを出力する。もしACC=0であれば、ALU282は積の下側32ビットを抽出する。もしACC=1であれば、ALU282は積の中央32ビットを抽出する。もしACC=2であれば、ALU282は積の上側32ビットを抽出する。この命令はまた、ALU282からの出力をレジスタ286内のRに方向付けるために、制御ユニット280をして制御信号を多重化装置284に出力させる。
MACSSD:
構文:MACSSD R,R,shift,R,ACC
機能:レジスタRおよびR内の符号付き値の乗算を実行し、それから「shift」によって指定された量だけ積を左にシフトするようにALU282に命令する制御信号を、制御ユニット280に出力させる。それからALU282はACCによって指定された32ビットをこの積から抽出する。積からこれらのビットを抽出した後に、ALU282はこれらの32ビットをRに続くレジスタ(すなわち、Rz+1)に記憶された値に加算する。これらの値を加算した後に、ALU282は、合計値を出力する。もしACC=0であれば、ALU282は積の下側32ビットを抽出する。もしACC=1であれば、ALU282は積の中央32ビットを抽出する。もしACC=2であれば、ALU282は積の上側32ビットを抽出する。この命令はまた、ALU282からの出力をレジスタ286内のRに方向付けるために、制御ユニット280をして制御信号を多重化装置284に出力させる。
MACSUD:
構文:MACSSD R,R,shift,R,ACC
機能:レジスタR内の符号付き値とレジスタR内の無符号の値との乗算を実行し、それから「shift」によって指定された量だけ積を左にシフトするようにALU282に命令する制御信号を、制御ユニット280に出力させる。それからALU282は、ACCによって指定された32ビットをこの積から抽出する。これらのビットを積から抽出した後に、ALU282は、Rに続くレジスタ(すなわち、Rz+1)内に記憶された値にこれらの32ビットを加算する。これらの値を加算した後に、ALU282は合計値を出力する。もしACC=0であれば、ALU282は積の下側32ビットを抽出する。もしACC=1であれば、ALU282は積の中央32ビットを抽出する。もしACC=2であれば、ALU282は積の上側32ビットを抽出する。この命令はまた、ALU282からの出力をレジスタ286内のRに方向付けるために、制御ユニット280をして制御信号を多重化装置284に出力させる。
MACUUD:
構文:MACSSD R,R,shift,R,ACC
機能:レジスタRおよびR内の無符号の値の乗算を実行し、それから「shift」によって指定された量だけ積を左にシフトするようにALU282に命令する制御信号を、制御ユニット280に出力させる。それからALU282は、ACCによって指定された32ビットをこの積から抽出する。積からこれらのビットを抽出した後に、ALU282はこれらの32ビットをRに続くレジスタ(すなわち、Rz+1)に記憶された値に加算する。これらの値を加算した後に、ALU282は、合計値を出力する。もしACC=0であれば、ALU282は積の下側32ビットを抽出する。もしACC=1であれば、ALU282は積の中央32ビットを抽出する。もしACC=2であれば、ALU282は積の上側32ビットを抽出する。この命令はまた、ALU282からの出力をレジスタ286内のRに方向付けるために、制御ユニット280をして制御信号を多重化装置284に出力させる。
MASSS:
構文:MASSS R,R,shift,R,ACC
機能:レジスタRおよびR内の符号付き値の乗算を実行し、それから「shift」によって指定された量だけ積を左にシフトするようにALU282に命令する制御信号を、制御ユニット280に出力させる。それからALU282は、ACCによって指定された32ビットをこの積から抽出する。これらのビットを抽出した後に、ALU282はこれらのビットをR内の値から減算し、その結果得られたビットを出力する。もしACC=0であれば、ALU282は積の下側32ビットを抽出する。もしACC=1であれば、ALU282は積の中央32ビットを抽出する。もしACC=2であれば、ALU282は積の上側32ビットを抽出する。この命令はまた、ALU282からの出力をレジスタ286内のRに方向付けるために、制御ユニット280をして制御信号を多重化装置284に出力させる。
MASSU:
構文:MASSS R,R,shift,R,ACC
機能:レジスタR内の符号付き値とR内の無符号の値との乗算を実行し、それから「shift」によって指定された量だけ積を左にシフトするようにALU282に命令する制御信号を、制御ユニット280に出力させる。それからALU282は、ACCによって指定された32ビットをこの積から抽出する。これらのビットを抽出した後に、ALU282は、R内の値からこれらのビットを減算し、その結果得られたビットを出力する。もしACC=0であれば、ALU282は積の下側32ビットを抽出する。もしACC=1であれば、ALU282は積の中央32ビットを抽出する。もしACC=2であれば、ALU282は積の上側32ビットを抽出する。この命令はまた、ALU282からの出力をレジスタ286内のRに方向付けるために、制御ユニット280をして制御信号を多重化装置284に出力させる。
MASUU:
構文:MASUU R,R,shift,R,ACC
機能:レジスタRおよびR内の無符号の値の乗算を実行し、それから「shift」によって指定された量だけ積を左にシフトするようにALU282に命令する制御信号を、制御ユニット280に出力させる。これらの制御信号はまた、ALU282をしてACCによって指定された32ビットをこの積から抽出させる。これらのビットを抽出した後にALU282はこれらのビットをR内の値から減算し、その結果得られた値を出力する。もしACC=0であれば、ALU282は積の下側32ビットを抽出する。もしACC=1であれば、ALU282は積の中央32ビットを抽出する。もしACC=2であれば、ALU282は積の上側32ビットを抽出する。この命令はまた、ALU282からの出力をレジスタ286内のRに方向付けるために、制御ユニット280をして制御信号を多重化装置284に出力させる。
EGCOMP:
構文:EGCOMP R,R,shift,R,ACC
機能:処理要素34Aが現在処理しているMIDI音声を定義する1セットの音声パラメータの制御ワードに基づいて、演算を制御ユニット280に選択させる。EGCOMP命令はまた、選択された演算を実行するようにALU282に命令する制御信号を、制御ユニット280に出力させる。第1のモードでALU282は、R内の値をR内の値に加算して、その結果得られた合計値を出力する。第2のモードでALU282は、R内の値とR内の値との無符号の乗算を実行し、shiftで指定された量だけ積を左にシフトし、それからこのシフトされた積の最も重要な32ビットを出力する。第3のモードで、ALU282はR内の値を出力する。第4のモードで、ALU282はRの値を出力する。EGCOMP命令との関連で、ゼロというACC値は、現在MIDI音声のボリュームエンベロープのための新しい値を計算するようにALU282に命令するための制御信号を、制御ユニット280に出力させ得る。1というACC値は、現在MIDI音声のための新しい変調エンベロープを計算するようにALU282に命令する制御信号を、制御ユニット280に出力させ得る。EGCOMP命令はまた、ALU282からの出力をレジスタ286内のRに方向付けるために、制御ユニット280をして制御信号を多重化装置284に出力させる。
あるモードに関連するEGCOMP命令の演算を実行する前に、ALU282は、最初にこのモードを計算する。例えばALU282は、下記の方程式:
モード=vps.制御ワード((ACC*8+第2ループカウンタ(1:0)*2+1):(ACC*8+第2ループカウンタ(1:0)*2))
を使用してモードを計算できる。
言い換えれば、「モード」の値は、現在音声パラメータセットの制御ワード内の2ビットに等しい。これら2ビットのうちのより重要なビットのインデックスは、下記のステップ:
(1)ACCの値に8を乗算すること(すなわち、ACCの値のビット単位の表現を3桁だけ左にシフトすること)によって、第1の積を生成することと、
(2)第2のループカウンタの最下位の2ビットに2を乗算すること(すなわち、ACCの値のビット単位の表現を1桁だけ左にシフトすること)によって、第2の積を生成することと、
(3)第1の積と第2の積と数1とを加算することと、を実行することによって決定される。
制御ワードの2ビットのうちのより重要でないビットのインデックスは、第3ステップでの数1を加算することを除いて同じステップを実行することによって決定される。例えば、制御ワードは、0x0000807(すなわち、0b0000,0000,0000,0000,0100,0000,0111)に等しい。更に、ACCの値は0b0001であり、また第2のループカウンタの値は0b0001である。この例では、制御ワードのより重要なビットのインデックスは0b00001011(すなわち、10進数における数、11)であり、制御ワードのより重要でないビットのインデックスは0b00001010(すなわち、10進数における数、10)である。前の文章では、アンダーラインされたインデックス値のビットはACCからのビットを表し、イタリック体で書かれたインデックス値のビットは第2のループカウンタからのビットを表す。したがって、このモードは、値0と1が制御ワードのそれぞれ位置11と10にあるので、01である(すなわち、10進数の数、1である)。モードは01であるので、ALU282はRの値とRの値との無符号の乗算を実行し、shiftによって指定された量だけ積を左にシフトし、それからこのシフトされた積の最も重要な32ビットを出力する。
エンベロープ生成は、個別の音符のボリュームまたは変調品質をモデル化する方法である。各音符は、幾つかの位相を有する。例えば1つの音符は、遅延位相、アタック位相、保持位相、減衰位相、持続位相および解放位相を有する。遅延位相は、アタック位相の開始に先立つ時間量を定義する。アタック位相の期間中に、ボリュームレベルまたは変調レベルはピークレベルに高められる。保持位相の期間中、ボリュームレベルまたは変調レベルはピークレベルに維持される。減衰位相の期間中に、ボリュームレベルまたは変調レベルは持続レベルに下げられる。持続レベルの期間中、ボリュームレベルまたは変調レベルは持続レベルに維持される。解放位相の期間中に、ボリュームレベルまたは変調レベルはゼロにまで低下する。更にボリュームレベルまたは変調レベルの変化は、直線的または指数関数的である。エンベロープ生成位相の長さは、サブフレームの点から定義される。用語「サブフレーム」は、MIDIフレームの1/4を指す。例えば、もしMIDIフレームが10ミリ秒であれば、サブフレームは2.5ミリ秒である。例えばMIDI音声のアタック位相は1サブフレーム持続することが可能であり、MIDI音声の減衰位相は1サブフレーム持続することが可能性であり、MIDI音声の持続位相は2サブフレーム持続することが可能である。
EGCOMP命令は、エンベロープ生成を実行するための演算を実行する。例えば加算演算(すなわち、モード00)は、1サブフレーム期間中のボリュームレベルまたは変調レベルの直線的ランプアップ(例えば、アタック位相の期間中)または直線的ランプダウン(すなわち、減衰位相または解放位相の期間中)に対応する。乗算演算(すなわち、モード01)は、1サブフレーム期間中のボリュームレベルまたは変調レベルの指数関数的ランプアップまたはランプダウン(すなわち、減衰位相または解放位相の期間中)に対応する。割当て演算(すなわち、モード10および11)は、1サブフレーム期間中のボリュームまたは変調強度の持続に対応する。制御ワードでは、ビット1:0はボリュームに関して第1のサブフレームにおいてどのEGCOMPモードを使用すべきかを示し、ビット3:2はボリュームに関して第2のサブフレームにおいてどのEGCOMPモードを使用すべきかを示し、ビット5:4はボリュームに関して第3のサブフレームにおいてどのEGCOMPモードを使用すべきかを示し、ビット7:6はボリュームに関して第4のサブフレームにおいてどのEGCOMPモードを使用すべきかを示し、ビット9:8は変調に関して第1のサブフレームにおいてどのEGCOMPモードを使用すべきかを示し、ビット11:10は変調に関して第2のサブフレームにおいてどのEGCOMPモードを使用すべきかを示し、ビット13:12は変調に関して第3のサブフレームにおいてどのEGCOMPモードを使用すべきかを示し、ビット15:14は変調に関して第4のサブフレームにおいてどのEGCOMPモードを使用すべきかを示す。
ロード/ストア命令は、処理要素34Aの外部の数個のモジュールのうちの1つから情報を読み取る、または数個のモジュールのうちの1つに情報を書き込むための命令である。制御ユニット280がロード/ストア命令に遭遇すると、制御ユニット280はロード/ストア命令が完了するまでブロックする。1つの例示的フォーマットでは、各ロード/ストア命令は18ビット長である。例えば、ロード/ストア命令のビット17:16は留保され、ビット15:13はロード/ストア命令識別子を含み、ビット12:6はロード発信元アドレスまたはストア宛て先アドレスを含み、ビット5:3はレジスタ286の第1のレジスタの識別子を含み、ビット2:0はレジスタ286の第2のレジスタの識別子を含む。
処理要素34Aによって使用されるロード/ストア命令のセットは下記の命令を含む:
LOADDATA
構文:LOADDATA address,R,R
機能:もしRがRに等しければ、Rにアドレスの値をロードする。もしアドレスが偶数であれば、レジスタRおよびRにそれぞれアドレスおよび(アドレス+1)の値をロードする。もしアドレスが奇数であれば、RおよびRにそれぞれ(アドレス−1)およびアドレスの値をロードする。
STOREDATA
構文:STOREDATA address,R,R
機能:もしRがRに等しければ、Rの値をアドレスに記憶する。もしアドレスが偶数であれば、RおよびRの値をアドレスおよび(アドレス+1)にそれぞれ記憶する。もしアドレスが奇数であれば、RおよびRの値をそれぞれ(アドレス−1)およびアドレスに記憶する。
LOADSUM
構文:LOADSUM Rx,Ry
機能:サンプルカウントによって指示された加算バッファ40内の値を、レジスタRおよびRにロードする。LOADSUM命令で使用されるサンプルカウントは、以下に説明されるSTORESUM命令で使用される同じカウントである。
LOADFIFO
構文:LOADFIFO fifo low high,fifo signed unsigned,R.
機能:WFUインタフェースFIFO298のヘッドからある値を除去して、その値をRに記憶する。この値がロードされるレジスタ286の1つ、および値がレジスタにロードされる仕方は、fifo low highフラグとfifo signed unsignedフラグとに依存する。もしfifo low highが0であれば、この値はRの下側16ビットにロードされる。もしfifo low highが1であれば、この値はRの上側16ビットにロードされる。もしfifo signed unsignedが0であれば、この値は無符号の数として記憶される。もしfifo signed unsignedが1であれば、この値は符号付き数として記憶され、この値は32ビットに符号付き拡張される。しかしながらfifo low highフラグが1にセットされれば、fifo signed unsignedフラグは如何なる効果も有しない。
STOREWFU
構文:STOREWFU R
機能:R内の値をWFU36に送る。
STORESUM
構文:STORESUM acc sat mode,R,R
機能:レジスタRおよびR内の値を加算バッファ40に記憶する。更にこの命令は、第1、第2のループカウンタに暗示的に依存するサンプルカウンタを送る。サンプルカウンタは、ディジタル波形のどのサンプルが処理要素34Aによって現在処理されているかを記述する。制御ユニット280が調整モジュール32からリセットコマンドを受信すると、制御ユニット280はこの値をゼロに初期化する。その結果、制御ユニット280は、制御ユニット280がSTORESUM命令に遭遇するたびにサンプルカウンタを1だけ増加させる。制御ユニット280は、サンプルカウンタを制御信号として加算バッファ40に出力し得る。acc sat modeパラメータは、加算バッファ40がサンプルのための値を飽和させているかどうかを確定する。飽和は、サンプルのための値がこのサンプルのために記憶され得る最大数より高く上がるか、最小数より低く下がるときに発生する。もし飽和が可能にされれば、加算バッファ40は、RおよびRの値を加算することが、このサンプルのための値をこのサンプルに関して表され得る最大数より高く上がらせるか、または最小数より低く下がらせるときに、この値を最大数または最小数に維持する。もし飽和が可能にされなければ、加算バッファ40は、RおよびRの値を加算するときにサンプルのためのこの数をロールオーバー(roll over)する。更にacc sat modeパラメータは、加算バッファ40がサンプルのための値をレジスタRおよびRの値と交換するかどうか、あるいはレジスタRおよびRの値を加算バッファ40内のサンプルのための値に加算するかどうかを決定する。下記のチャートはacc sat modeパラメータの例示的動作を示す:
Figure 0005134078
LOADLFO
構文:LOADLFO lfo id,lfo update,R
ここで
{lfo id}=読み取られるLFOのタイプ:2ビット
00: modLfo → ピッチ
01: modLfo → 利得
10: modLfo → 周波数コーナー
11: vibLfo → ピッチ
{lfo update}=現在出力の後にどのパラメータを更新すべきか:2ビット
00: 更新なし
01: LFO値だけを更新
10: LFO位相だけを更新
11: LFO値と位相の両者を更新
機能:「lfo id」によって指定された識別子を有するLFO38からの値を、Rにロードする。更にこの命令は、この値をRにロードした後にどのパラメータを更新すべきかをLFO38に命令する。
上記に論じられたように、LFO38は、1つ以上の正確な三角形のディジタル波形を生成する。処理要素34Aの各々のために、LFO38は、4個の出力値、すなわち変調ピッチ値、変調利得値、変調周波数コーナー値、およびビブラートピッチ値を供給する。これらの出力値の各々は、三角形のディジタル波形についての変形版を表す。
制御ユニット280がLOADLFO命令を読み取ると、制御ユニット280は、「lfo id」パラメータを表す制御信号をLFO38に出力する。「lfo id」パラメータを表す制御信号は、出力値の1つの値を処理要素34A内のインタフェースFIFO296に送るように、LFO38に命令する。例えば、もし制御ユニット280が「lfo id」に関する値01を表す制御信号を送れば、LFO38は変調利得出力値の値を送る。更に、制御ユニット280は、インタフェースFIFO296からの出力をレジスタ286内のレジスタRに方向付けるために、多重化装置284に制御信号を出力する。
更に、制御ユニット280がLOADLFO命令を読み取ると、制御ユニット280は、「lfo update」パラメータを表す制御信号をLFO38に出力する。「lfo update」パラメータを表す制御信号は、出力値を更新する方法をLFO38に命令する。LFO38が「lfo update」パラメータを表す制御信号を受信すると、LFO38は、処理要素34Aが現在処理しているMIDI音声の音声パラメータのセットに基づいて実行すべき演算を選択する。例えばLFO38は、LFO38が「遅延」状態または「生成」状態にあるかどうかを決定するために、音声パラメータセットの制御ワードを使用する。
LFO38が「遅延」状態または「生成」状態にあるかどうかを決定するために、LFO38は、VPS RAM46Aに記憶された音声パラメータセットの制御ワードのビットにアクセスする。例えば、制御ワードのビット23:16は、LFOが「生成」モードにあるか、または「遅延」状態にあるかどうかを決定する。「生成」状態では、LFO38は、ピッチのためのパラメータを乗算する。「遅延」状態では、LFO38は、ピッチのためのパラメータを乗算しない。例えば、制御ワードのビット16は、LFO38の変調モードが現在MIDIフレームの第1のサブフレームの期間中に遅延状態または生成状態にあるかどうかを示し、ビット17は、変調モードLFO38が現在MIDIフレームの第2のサブフレームの期間中に遅延状態または生成状態にあるかどうかを示し、ビット18は、変調モードLFO38が現在MIDIフレームの第3のサブフレームの期間中に遅延状態または生成状態にあるかどうかを示し、ビット19は、変調モードLFO38が現在MIDIフレームの第4のサブフレームの期間中に遅延状態または生成状態にあるかどうかを示す。
更に、制御ワードのビット20は、LFO38のビブラートモードが現在MIDIフレームの第1のサブフレームの期間中に遅延状態または生成状態にあるかどうかを示し、制御ワードのビット21は、LFO38のビブラートモードが現在MIDIフレームの第2のサブフレームの期間中に遅延状態または生成状態にあるかどうかを示し、制御ワードのビット22は、LFO38のビブラートモードが現在MIDIフレームの第3のサブフレームの期間中に遅延状態または生成状態にあるかどうかを示し、制御ワードのビット23は、LFO38のビブラートモードが現在MIDIフレームの第4のサブフレームの期間中に遅延状態または生成状態にあるかどうかを示す。
動作(すなわち、「遅延」モードまたは「生成」モードで実行すべきかどうか)を選択した後に、LFO38は選択された動作を実行する。もしLFO38が遅延状態にあれば、LFO38は、「lfo id」パラメータによって識別されるLFOのモードに関するバイアス値を、このモードに関するLFO38の出力レジスタに記憶する。他方、もしLFO38が生成状態にあれば、LFO38は、「lfo update」パラメータの値が2または3に等しいかどうかを最初に決定する。もし「lfo update」の値が2または3に等しければ、LFO38はLFO位相を更新し、またはLFO値および位相を更新する。もし「lfo update」パラメータの値が2または3に等しければ、LFO38はLFO比をLFOの現在位相に加算することによってLFOの位相を更新する。次にLFO38は、「lfo update」パラメータの値が1または3に等しいかどうかを決定する。もし「lfo update」の値が1または3に等しければ、LFO38は、LFO38内の現在サンプルに利得を乗算してバイアス値を加算することによって、「lfo id」パラメータによって識別されるLFO出力レジスタに関する更新値を計算する。
下記の例示的擬似コードは、LOADLFO命令の動作を要約する:
Figure 0005134078
この例示的擬似コードは、処理要素34AとLFO38とによって実行されるソフトウエア命令を表すことを意味しない。むしろこの擬似コードは、処理要素34AとLFO38とのハードウエアで実行される動作を記述する。
制御命令は、制御ユニット280の挙動を制御するための命令である。1つの例示的フォーマットでは、各制御命令は16ビット長である。例えば、ビット15:13は制御命令識別子を含み、ビット12:4はメモリアドレスを含み、ビット3:0は制御のためのマスクを含む。
処理要素34Aによって使用される制御命令のセットは、下記の命令を含む:
JUMPD
構文:JUMPD address,mask
機能:もし[mask]のビット単位のAND演算とVPS RAMユニット46A内の制御ワードのビット27:24が非ゼロ値に評価すれば、命令は制御ユニット280をしてプログラムカウンタ290に[address]の値をロードさせる。制御ワードのビット27は、波形がループされているかどうかを示す。制御ワードのビット26は、波形が8ビットまたは16ビット幅であるかどうかを示す。制御ワードのビット25は、波形がステレオであるかどうかを示す。制御ワードのビット24は、フィルタが使用され得るかどうかを示す。制御ユニット280はJUMPD命令に続く命令を既にロードしているので、プログラムカウンタ290の値の更新はJUMPD命令に続く命令に続いて有効になる。
JUMPND
構文:JUMPND address,mask
機能:もし[mask]のビット単位のAND演算とVPS RAMユニット46A内の制御ワードのビット27:24がゼロ値に評価すれば、命令は制御ユニット280をしてプログラムカウンタ290に[address]の値をロードさせる。ビット単位のAND演算の結果は、この結果が1を含まないときに偽と評価する。制御ユニット280はJUMPND命令に続く命令を既にロードしているので、プログラムカウンタ290の値の更新は、JUMPND命令に続く命令に続いて有効になる。
LOOP1BEGIN
構文:LOOP1BEGIN count
機能:第1のループの始まりを開始する。制御ユニット280は、制御ユニット280がLOOP1ENDD命令[count]プラス1回に遭遇したとき、プログラムカウンタ290の値をLOOP1BEGIN命令に続く命令のメモリアドレスにセットする。更に、制御ユニット280は、第1のループカウンタ304の値を[count]に等しくセットする。例えば、制御ユニット280が命令「LOOP1BEGIN119」に遭遇したとき、制御ユニット280は、プログラムカウンタ290の値をLOOP1BEGIN命令120回に続く命令のメモリアドレスにセットする。
LOOP1ENDD
構文:LOOP1ENDD
機能:LOOP1ENDDの後の命令は、第1のループ内の最後の命令である。制御ユニット280は、第1のループカウンタ304の値がゼロより大きいかどうかを決定する。もし第1のループカウンタ304の値がゼロより大ければ、制御ユニット280は第1のループカウンタ304の値を減らして、プログラムカウンタ290の値をLOOP1BEGIN命令に続く命令のメモリアドレスにセットする。そうではなくて、もし第1のループカウンタ304の値がゼロより大きくなければ、制御ユニット280は単にプログラムカウンタ290の値を増加させる。
LOOP2BEGIN
構文:LOOP2BEGIN count.
機能:第2のループの始まりを開始する。制御ユニット280は、制御ユニット280がLOOP2ENDD命令[count]プラス1回に遭遇したとき、プログラムカウンタ290の値をLOOP2BEGIN命令に続く命令のメモリアドレスにセットする。更に、制御ユニット280は、第2のループカウンタ306の値を[count]に等しくセットする。
LOOP2ENDD
構文:LOOP2ENDD
機能:LOOP2ENDDの後の命令は、第2のループ内の最後の命令である。制御ユニット280は、もし第2のループカウンタがゼロでなければ第2のループカウンタ306を減らして、プログラムカウンタ290の値をLOOP2BEGIN命令のメモリアドレスにセットする。
CTRL NOP
構文:CTRL NOP
機能:制御ユニット280は何もしない。
EXIT
構文:EXIT
機能:制御ユニット280がEXIT命令に遭遇したとき、制御ユニット280は、処理要素34AがMIDIフレームのディジタル波形全体の生成を完了したことを調整モジュール32に知らせるための制御信号を、調整モジュール32に出力する。制御信号を送出した後に、制御ユニット280は、調整モジュール32がプログラムカウンタ290の値を初期値に(例えばゼロに)リセットするための信号を制御ユニット280に送るまで待機する。
処理要素34AがMIDI音声のためのディジタル波形を生成し始める前に、調整モジュール32は、リセット信号を制御ユニット280に送出する。制御ユニット280がこのリセット信号を調整モジュール32から受信すると、制御ユニット280は、第1のループカウンタ304と第2のループカウンタ306とプログラムカウンタ290のそれぞれの値を、これらの初期値にリセットする。例えば制御ユニット280は、第1のループカウンタ304と第2のループカウンタ306とプログラムカウンタ290のそれぞれの値を、ゼロにリセットする。
引き続いて調整モジュール32は、VPS RAMユニット46Aに記述されたMIDI音声のためのディジタル波形を生成し始めるように処理要素34Aに命令するためのイネーブル(許可)信号を、制御ユニット280に送る。制御ユニット280がイネーブル信号を受信すると、処理要素34は、プログラムRAMユニット44A内の連続するメモリ位置に記憶された一連のプログラム命令(すなわち、プログラム)を実行し始める。プログラムRAMユニット44A内のこれらのプログラム命令の各々は、上記の命令のセット内の命令の事例である。
一般に、処理要素34Aによって実行されるプログラムは、第1のループとこの第1のループ内に入れ子にされた第2のループとからなる。第1のループの各サイクルの期間中に、処理要素34Aは、第2のループが終了するまで第2のループ全体を実行する。第2のループが終了したとき、処理要素34Aは、MIDI音声のための波形の1つのサンプルのために1つの記号を導き出している。第1のループが終了したとき、処理要素34Aは、1つのMIDIフレーム全体に関してMIDI音声のための波形の各サンプルのために各記号を既に導き出している。例えば、上記の例示的命令セット内の下記の一連の命令は、処理要素34Aによって実行されるプログラムの基本的構造を略述する:
Figure 0005134078
この例示的一連の命令では、二重前向きスラッシュ(double forward slash://)によって先行されたワードは、記述された演算を実行するための1つ以上の命令を表す。更にこの例では、CTRL NOP演算は、制御ユニット280が、それぞれのLOOP1BEGIN命令またはLOOP2BEGIN命令を含むプログラムRAM34Aの位置にアクセスするためにプログラムカウンタ290内の更新済みメモリアドレスを使用する前に、制御ユニット280がLOOP1ENDD命令またはLOOP2ENDD命令に続く命令の実行を既に開始しているので、LOOP1ENDD命令およびLOOP2ENDD命令に続いて行われる。言い換えれば、制御ユニット280は、ループ終了命令に続く命令を処理パイプラインに既に加えている。
プログラムRAMユニット44A内のプログラムを実行するために、制御ユニット280は、プログラムカウンタ290内に記憶されたメモリアドレスを有するプログラムRAMユニット44A内のメモリ位置を読み取るための要求を、プログラムRAMユニット44Aに送る。この要求に応じて、プログラムRAMユニット44Aは、プログラムカウンタ290に記憶されたメモリアドレスを有するプログラムRAMユニット44A内のメモリ位置の内容を、制御ユニット280に送る。
要求されたメモリ位置の内容は、処理要素34Aが並行して実行し得る2つのプログラム命令を含む1つの40ビットワードである。例えば、プログラムRAMユニット44A内の1つのメモリ位置は:
(1)1ワード内のALU命令およびロード/ストア命令;
(2)1ワード内のロード/ストア命令および第2のロード/ストア命令;
(3)1ワード内の制御命令およびロード/ストア命令;または
(4)1ワード内のALU命令および制御命令;
のうちの1つを含む。ALU命令とロード/ストア命令とを含むワードでは、ビット0:17はロード/ストア命令であり、ビット18:37はALU命令であり、ビット38および39はこのワードがALU命令とロード/ストア命令とを含むことを示すフラグである。2つのロード命令を含むワードでは、ビット0:17は第1のロード/ストア命令であり、ビット18および19は留保され、ビット20:37は第2のロード/ストア命令であり、ビット38および39はこのワードが2つのロード/ストア命令を含むことを示すフラグである。制御命令とロード命令とを含むワードでは、ビット0:17はロード命令であり、ビット18および19は留保され、ビット20:35は制御命令であり、ビット36および37は留保され、ビット38および39はこのワードが制御命令とロード/ストア命令とを含むことを示すフラグである。ALU命令と制御命令とを含むワードでは、ビット0:15は制御命令であり、ビット16および17は留保され、ビット18:37はALU命令であり、ビット38および39はこのワードがALU命令と制御命令とを含むことを示すフラグである。
メモリ位置の内容を受信した後に、制御ユニット280は、メモリ位置の内容に指定された命令を復号して適用する。制御ユニット280は、命令の各々を復号して原子的に適用する。言い換えれば、いったん制御ユニット280がある命令を実行し始めると、制御ユニット280は、制御ユニット280がこの命令を実行し終わるまでこの命令によって使用される、あるいは生み出される如何なるデータも変更しない。更にある幾つかの例では、制御ユニット280は、プログラムRAMユニット44Aから受信されたワード内の両方の命令を並行して復号して適用する。いったん制御ユニット280がワード内の命令を実行し終わると、制御ユニット280は、プログラムカウンタ290をインクリメントし(プログラムカウンタ290の値を増加させ)、このインクリメントされたプログラムカウンタによって識別されるプログラムRAMユニット44A内のメモリ位置の内容を要求する。
処理要素34のために特化された命令セットの使用は、1つ以上の利点を提供する。例えば、ディジタル波形を生成するために種々のオーディオ処理演算が実行される。第1のアプローチでは、オーディオ処理演算は、ハードウエアにおいて実現される。例えば、これらの演算を実施するために特定用途向け集積回路(ASIC)が設計されるであろう。しかしながら、これらの演算をハードウエアで実現することは、他の目的のためのこのようなハードウエアの再使用を妨げる。すなわち、いったんこれらの演算を実現するために設計されたASICがデバイスにインストールされると、ASICは一般に異なる演算を実行するように変更されることはできない。第2のアプローチでは、汎用命令セットを使用するプロセッサが、オーディオ処理演算を実行する。しかしながら、このようなプロセッサの使用は、浪費的である。例えば、汎用命令セットを使用するプロセッサは、ディジタル波形の生成に決して使用されない命令を復号するための回路を含む。特化された命令セットの使用は、これら2つのアプローチの弱点を解決する。例えば、特化された命令セットの使用は、ディジタル波形を生成するためにこれらの命令を使用するプログラムの更新を可能にする。同時に、特化された命令セットの使用は、チップ設計者がプロセッサの実現を単純にしておくことを可能にする。
更に、音声パラメータセット内の値に基づいて異なる機能を実行するEGCOMPおよびLOADLFOといった特化された命令の使用は、1つ以上の更なる利点をもたらす。例えば、EGCOMPおよびLOADLFOはそれぞれ単一の命令として実現されるので、これらの命令を実行するために条件付き飛び越しまたは分岐の必要がない。EGCOMPおよびLOADLFOが条件付き飛び越しまたは分岐を含まないため、これらの条件付き飛び越しまたは分岐の期間中にプログラムカウンタを更新する必要がない。更に、EGCOMPおよびLOADLFOはそれぞれ単一の命令として実現されるので、EGCOMPおよびLOADLFOの演算を実行するために別々の命令をロードする必要がない。例えば、EGCOMP命令のケース1は、乗算演算を必要とする。しかしながら、EGCOMPは単一の命令であるから、プログラムメモリから別の乗算演算をロードする必要はない。EGCOMPおよびLOADLFOはプログラムメモリからの多数のロードを必要としないので、EGCOMPおよびLOADLFOは、EGCOMPおよびLOADLFOが別々の命令のセットとして実現された場合より少ないクロックサイクルで実行される。
もう1つの例では、音声パラメータセットの値に基づいて異なる機能を実行する特化された命令の使用は、このような命令を使用するプログラムがよりコンパクトになり得るので、有利である。例えば、1つのEGCOMP命令によって実行される演算を実現するために、10個の別々の命令を必要とする。よりコンパクトなプログラムは、プログラマーにとってより読み易い。更に、よりコンパクトなプログラムはプログラムメモリ内で、より小さい空間を占める。よりコンパクトなプログラムは、プログラムメモリ内でより少ない空間を占めるので、プログラムメモリはより小さくなる。より小さなプログラムメモリはより安価に実現でき、チップセット上の空間を節約する。
図13は、オーディオデバイス4のMIDIハードウエアユニット18内の処理要素34Aの例示的動作を示す流れ図である。図13の例は処理要素34Aを参照しながら説明されるが、プロセッサ34の各々はこの動作を同時に実行する。
最初に、処理要素34A内の制御ユニット280は、MIDI音声のための新しいディジタル波形を生成する準備をするために内部レジスタの値をリセットするための制御信号を、調整モジュール32から受信する(320)。制御ユニット280がリセット信号を受信すると、制御ユニット280は、第1のループカウンタ304と第2のループカウンタ306とプログラムカウンタ290とレジスタ286とのそれぞれの値を、ゼロにリセットする。
次に、制御ユニット280は、VPS RAMユニット46A内のパラメータを有するMIDI音声のためのディジタル波形の生成を開始させる命令を、調整モジュール32から受信する(322)。制御ユニット280がMIDI音声のためのディジタル波形の生成を開始させるための命令を調整モジュール32から受信した後に、制御ユニット280は、プログラムメモリ44Aからプログラム命令を読み取る(324)。それから制御ユニット280は、このプログラム命令が「Loop End(ループエンド)」命令であるかどうかを決定する(326)。もしこの命令が「Loop End(ループエンド)」命令であれば(326の「YES」)、制御ユニット280は、処理要素34A内のレジスタのループカウント値を減らす(328)。他方、もし命令が「Loop End」命令でなければ(326の「NO」)、制御ユニット280は、命令が「EXIT(退去)」命令であるかどうかを決定する(330)。もし命令が「EXIT」命令であれば(330の「YES」)、制御ユニット280は、処理要素34AがMIDI音声のためのディジタル波形を生成し終わったことを調整モジュール32に知らせる制御信号を出力する(332)。もし命令が「EXIT」命令でなければ(330の「NO」)、制御ユニット280は、この命令を実行させるために制御信号を出力するか、プログラムカウンタ290の値を変更する(334)。
種々の例が説明されてきた。ここで説明された技法の1つ以上の態様は、ハードウエア、ソフトウエア、ファームウエア、またはこれらの組合せで実現され得る。モジュールまたは構成要素として説明された如何なる特徴も、統合された論理デバイス内に共に実現され得、あるいは個別ではあるが相互動作可能な論理デバイスとして別々に実現され得る。もしソフトウエアで実現されれば、これらの技法の1つ以上の態様は、少なくともある程度は、実行されるときに上記の方法の1つ以上を実行する命令を備えるコンピュータ可読媒体によって実現可能である。コンピュータ可読データ記憶媒体は、パッケージ資料を含むコンピュータプログラム製品の一部を形成する。コンピュータ可読媒体は、同期ダイナミックランダムアクセスメモリ(SDRAM)といったランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、不揮発性ランダムアクセスメモリ(NVRAM)、電気的消去可能プログラム可能読取り専用メモリ(EEPROM)、FLASHメモリ、磁気または光データ記憶媒体などを備え得る。これらの技法は更に、または代替として、少なくともある程度、命令またはデータ構造の形でコードを搬送または伝達する、およびコンピュータによってアクセス、読取りおよび/または実行され得るコンピュータ可読通信媒体によって、実現され得る。
これらの命令は、1つ以上のディジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、または他の同等な集積回路または個別論理回路といった、1つ以上のプロセッサによって実行され得る。したがって、ここで使用される用語「プロセッサ」は、前述の構造のいずれかを、またはここで説明された技法の実現に適した他の任意の構造を指すことができる。更にある幾つかの態様では、ここで説明された機能は、本開示の技法を実行するために構成された、または適合された、専用のソフトウエアモジュールまたはハードウエアモジュール内に備えられ得る。
もしハードウエアにおいて実現されれば、本開示の1つ以上の態様は、ここで説明された技法の1つ以上を実行するために構成された、または適合された、集積回路、チップセット、ASIC、FPGA、論理回路、またはこれらの種々の組合せといった回路に向けられ得る。この回路は、集積回路またはチップセット内に、ここで説明されたようなプロセッサと1つ以上のハードウエアユニットの両者を含み得る。
ある回路が上記の機能の一部または全部を実現し得ることを、当業者が認めることにも留意されたい。これらすべての機能を実現する1つの回路が存在し得るし、あるいはこれらの機能を実現する1つの回路の多数のセクションも存在し得る。現在の移動プラットホーム技術によれば、1つの集積回路は、少なくとも1つのDSPと、DSP(単数または複数)を制御および/または通信するための少なくとも1つの高度縮小命令セットコンピュータ(RISC)マシン(dvanced Reduced Instruction Set Computer(ISC) achine)(ARM)プロセッサとを備え得る。更に、1つの回路が数個のセクションに設計または実現されることが可能であり、またある場合には、複数のセクションが本開示で説明された異なる機能を実行するために再使用され得る。
種々の例が説明されてきた。これらおよび他の例は、下記の特許請求の範囲内にある。

Claims (41)

  1. メモリユニットからワードを検索することと、なお、前記ワードはソフトウェアプログラム内に複数の命令を含む
    楽器ディジタルインタフェース(MIDI)ファイルを構文解析して前記MIDIファイルに関連するMIDIイベントをスケジュールすることと、
    音声パラメータ及びマシンコード命令のセットを出力するために前記MIDIイベントを処理することと、なお、前記音声パラメータの少なくとも1つは制御パラメータであり、前記マシンコード命令の少なくとも1つは前記制御パラメータに依存する、
    MIDI音声のためのディジタル波形を生成するために、1つ以上のハードウェアユニットを介して前記マシンコード命令を実行することと、なお、前記制御パラメータに依存する少なくとも1つの前記マシンコード命令を実行することは、前記制御パラメータに基づいて前記音声パラメータ上で前記少なくとも1つのマシンコード命令によって実行されるべき演算を選択することと、前記選択された演算が前記1つ以上のハードウェアユニットによって実行されるようにするために、前記1つ以上のハードウェアユニットに制御信号を出力することとを備える、及び
    前記ディジタル波形を出力することと、
    を備える方法。
  2. 前記マシンコード命令は、ロード命令、ストア命令、算術演算命令及び制御命令を備える、請求項1に記載の方法。
  3. 前記マシンコード命令は固定長のマシンコード命令である、請求項1に記載の方法。
  4. 前記方法は、1つのMIDIフレームの1つのディジタル波形全体のための1つの全体サンプルを創作するために、前記ディジタル波形のサンプルを第2のディジタル波形の時間的に同等のサンプルに加えるために、前記マシンコード命令の少なくとも1つを実行することを更に備える、請求項1に記載の方法。
  5. 前記方法は、
    汎用プロセッサを使用して、前記MIDIファイルを構文解析し、前記MIDIファイルに関連するMIDIイベントをスケジュールすることと、
    ディジタル信号プロセッサ(DSP)を使用して前記MIDIイベントを処理することと
    更に備える、請求項1に記載の方法。
  6. 前記方法は、
    前記ディジタル波形をアナログ出力に変換することと、
    前記アナログ出力を音として出力することと、
    を更に備える、請求項1に記載の方法。
  7. 前記方法は、音声インジケータのリンクされたリストを生成することを更に備え、前記リンクされたリスト内の前記音声インジケータの各々は、特定のMIDI音声を定義する特定の音声パラメータセットを記憶するメモリ位置を指定することによってMIDIフレームに関する特定のMIDI音声を指示し、前記リンクされたリスト内の前記音声インジケータによって指示されたMIDI音声のセットは、前記MIDIフレームの期間中に最も大きな音響的重要性を有するMIDI音声であり、前記音響的重要性は前記MIDI音声の1つ以上の音響特性に基づいて定義される、
    前記リンクされたリストは現在のMIDI音声を指示する特定の音声インジケータを含む、請求項1に記載の方法。
  8. リンクされたリストを生成することは、
    第1の音声インジケータによって指示されたMIDI音声の音響的重要性を、第2の音声インジケータによって指示されたMIDI音声の音響的重要性と比較することと、
    前記第1の音声インジケータによって指示された前記MIDI音声の前記音響的重要性が前記第2の音声インジケータによって指示された前記MIDI音声の前記音響的重要性より大きいときに、前記リンクされたリスト内で、前記第2の音声インジケータの前に前記第1の音声インジケータを挿入することと、
    を備える、請求項に記載の方法。
  9. ある演算を選択することは、前記制御パラメータにおけるビットの値を識別することを含む、請求項1に記載の方法。
  10. ある演算を選択することは、あるエンベロープ生成演算を選択することを備え、前記エンベロープ生成演算は前記制御パラメータに依存する、請求項1に記載の方法。
  11. 前記選択された演算を実行することは、前記制御パラメータに基づいてエンベロープ生成変調のレベルを計算することを備える、請求項10に記載の方法。
  12. 前記選択された演算を実行することは、前記制御パラメータに基づいてエンベロープ生成振幅のレベルを計算することを備える、請求項10に記載の方法。
  13. 命令を実行することは、前記制御パラメータに関連するパラメータ値をモジュールに供給することを更に備え、
    前記モジュールは前記制御パラメータに基づいて、前記演算を選択し、前記選択された演算を実行する、請求項1に記載の方法。
  14. パラメータ値をモジュールに供給することは、前記パラメータ値を低周波発振器(LFO)モジュールに供給することを備え、
    前記マシンコード命令を実行することは、
    前記LFOモジュール内のレジスタからの値をローカルレジスタに記憶することと、
    前記LFOモジュール内の前記レジスタ内の値を更新することと、
    を更に備える、請求項13に記載の方法。
  15. 前記LFOモジュール内の前記レジスタ内の値を更新することは、前記制御パラメータに基づいて、前記LFOモジュールによって出力された三角形の波形の位相を示す前記LFOモジュール内の値を更新することを備える、請求項14に記載の方法。
  16. 前記LFOモジュール内の前記レジスタ内の値を更新することは、前記制御パラメータに基づいて、前記LFOモジュールによって出力された三角形の波形の利得を更新することを備える、請求項14に記載の方法。
  17. 前記演算はエンベロープ生成演算を含み、エンベロープ生成変調のレベル及びエンベロープ生成振幅のうちの少なくとも1つは前記制御パラメータに依存する、請求項1に記載の方法。
  18. 前記制御パラメータに依存する前記少なくとも1つのマシンコード命令を実行することは、低周波発振器(LFO)モジュールを介して三角形の波形を生成することを備え、三角波形の位相及び利得のうちの少なくとも1つは前記制御パラメータに基づく、請求項1に記載の方法。
  19. メモリユニットと、なお、1つ以上のハードウェア命令が前記メモリからワードを読み、前記ワードは複数のマシンコード命令を含む、
    楽器ディジタルインタフェース(MIDI)ファイルを構文解析して前記MIDIファイルに関連するMIDIイベントをスケジュールする汎用プロセッサと、
    音声パラメータ及びマシンコード命令のセットを出力するために前記MIDIイベントを処理するディジタル信号プロセッサと、なお、前記音声パラメータの少なくとも1つは制御パラメータであり、前記マシンコード命令の少なくとも1つは前記制御パラメータに依存する、
    MIDI音声のためのディジタル波形を生成するために、1つ以上のハードウェアユニットを介して前記マシンコード命令を実行する1つ以上のハードウェアユニットと、なお、前記制御パラメータに依存する少なくとも1つの前記マシンコード命令の実行において、前記1つ以上のハードウェアユニットは、前記制御パラメータに基づいて前記音声パラメータに関する前記少なくとも1つのマシンコード命令の演算を選択して、前記選択された演算を実行し、前記1つ以上のハードウェアユニットは、ディジタル波形を出力する、
    を備える装置。
  20. 前記マシンコード命令は、ロード命令、ストア命令、算術演算命令及び制御命令を含む、請求項19に記載の装置。
  21. 前記マシンコード命令は固定長のマシンコード命令である、請求項19に記載の装置。
  22. 前記1つ以上のハードウェアユニットは、1つのMIDIフレームの1つのディジタル波形全体のための1つの全体サンプルを創作するために、前記ディジタル波形のサンプルを第2のディジタル波形の時間的に同等のサンプルに加えるために、前記マシンコード命令の少なくとも1つを実行する、請求項19に記載の装置。
  23. 音声インジケータのリンクされたリストを記憶するメモリを更に備え、前記リンクされたリスト内の前記音声インジケータの各々は、特定のMIDI音声を定義する特定の音声パラメータセットを記憶するメモリ位置を指定することによってMIDIフレームに関する特定のMIDI音声を指示し、前記リンクされたリスト内の前記音声インジケータによって指示されたMIDI音声のセットは、前記MIDIフレームの期間中に最も大きな音響的重要性を有するMIDI音声であり、前記音響的重要性は前記MIDI音声の1つ以上の音響特性に基づいて定義され、前記リンクされたリストは現在のMIDI音声を指示する特定の音声インジケータを含む、請求項19記載の装置。
  24. 前記音声パラメータに関する前記少なくとも1つの演算は、前記制御パラメータにおけるビットの値に基づいて選択される、請求項19記載の装置。
  25. 前記演算はエンベロープ生成演算を備え、前記エンベロープ生成演算は前記制御パラメータに依存する、請求項19に記載の装置。
  26. 前記1つ以上のハードウェアユニットは、前記制御パラメータに基づいてエンベロープ生成変調のレベルを計算する、請求項25に記載の装置。
  27. 前記1つ以上のハードウェアユニットは、前記制御パラメータに基づいてエンベロープ
    生成振幅のレベルを計算する、請求項25に記載の装置。
  28. 前記1つ以上のハードウェアユニットは低周波発振器(LFO)モジュールを含み、
    前記マシンコード命令の実行にあたり、前記1つ以上のハードウェアユニットは、
    前記LFOモジュール内のレジスタからの値をローカルレジスタに記憶し、
    前記LFOモジュール内の前記レジスタ内の値を更新する、
    請求項19に記載の装置。
  29. 前記LFOモジュール内の前記レジスタ内の値を更新することは、前記制御パラメータに基づいて、前記LFOモジュールによって出力された三角形の波形の位相を示す前記LFOモジュール内の値を更新することを備える、請求項28に記載の装置。
  30. 前記LFOモジュール内の前記レジスタ内の値を更新することは、前記制御パラメータに基づいて、前記LFOモジュールによって出力された三角形の波形の利得を更新することを備える、請求項28に記載の装置。
  31. 前記演算はエンベロープ生成演算を備え、エンベロープ生成変調のレベル及びエンベロープ生成振幅のうちの少なくとも1つは前記制御パラメータに依存する、請求項19に記載の装置。
  32. 前記制御パラメータに依存する前記少なくとも1つのマシンコード命令を実行するにあたり、前記1つ以上のハードウェアユニットは、三角形の波形を生成する低周波発振器(LFO)モジュールを備え、三角波形の位相及び利得のうちの少なくとも1つは前記制御パラメータに基づく、請求項19に記載の装置。
  33. 命令を記憶するコンピュータ可読媒体であって、前記命令は1つ以上のプロセッサに、
    メモリユニットからワードを検索することと、なお、前記ワードはソフトウェアプログラム内に複数の命令を含む、
    楽器ディジタルインタフェース(MIDI)ファイルを構文解析して前記MIDIファイルに関連するMIDIイベントをスケジュールすることと、
    音声パラメータ及びマシンコード命令のセットを出力するために前記MIDIイベントを処理することと、なお、前記音声パラメータの少なくとも1つは制御パラメータであり、前記マシンコード命令の少なくとも1つは前記制御パラメータに依存する、
    MIDI音声のためのディジタル波形を生成するために、1つ以上のハードウェアユニットを介して前記マシンコード命令を実行することと、なお、前記制御パラメータに依存する少なくとも1つの前記マシンコード命令を実行することは、前記制御パラメータに基づいて前記音声パラメータ上で前記少なくとも1つのマシンコード命令によって実行されるべき演算を選択することと、前記選択された演算が前記1つ以上のハードウェアユニットによって実行されるようにするために、前記1つ以上のハードウェアユニットに制御信号を出力することとを備える、及び
    前記ディジタル波形を出力することと、
    を備える動作を実行させる、コンピュータ可読媒体。
  34. 前記演算はエンベロープ生成演算を備え、エンベロープ生成変調のレベル及びエンベロープ生成振幅のうちの少なくとも1つは前記制御パラメータに依存する、請求項33に記載のコンピュータ可読媒体。
  35. 前記制御パラメータに依存する前記少なくとも1つのマシンコード命令を実行することは、低周波発振器(LFO)モジュールを介して三角形の波形を生成することを備え、三角波形の位相及び利得のうちの少なくとも1つは前記制御パラメータに基づく、請求項33に記載のコンピュータ可読媒体。
  36. メモリユニットからワードを検索するための手段と、なお、前記ワードはソフトウェアプログラム内に複数の命令を含む、
    楽器ディジタルインタフェース(MIDI)ファイルを構文解析して前記MIDIファイルに関連するMIDIイベントをスケジュールするための手段と、
    音声パラメータ及びマシンコード命令のセットを出力するために前記MIDIイベントを処理するための手段と、なお、前記音声パラメータの少なくとも1つは制御パラメータであり、前記マシンコード命令の少なくとも1つは前記制御パラメータに依存する、
    MIDI音声のためのディジタル波形を生成するために、1つ以上のハードウェアユニットを介して前記マシンコード命令を実行するための手段と、なお、前記制御パラメータに依存する少なくとも1つの前記マシンコード命令を実行することは、前記制御パラメータに基づいて前記音声パラメータ上で前記少なくとも1つのマシンコード命令によって実行されるべき演算を選択することと、前記選択された演算が前記1つ以上のハードウェアユニットによって実行されるようにするために、前記1つ以上のハードウェアユニットに制御信号を出力することとを備える、及び
    前記ディジタル波形を出力するための手段と、
    を備えるデバイス。
  37. 前記演算はエンベロープ生成演算を備え、エンベロープ生成変調のレベル及びエンベロープ生成振幅のうちの少なくとも1つは前記制御パラメータに依存する、請求項36に記載のデバイス。
  38. 前記制御パラメータに依存する前記少なくとも1つのマシンコード命令を実行することは、低周波発振器(LFO)モジュールを介して三角形の波形を生成することを備え、三角波形の位相及び利得のうちの少なくとも1つは前記制御パラメータに基づく、請求項36に記載のデバイス。
  39. メモリユニットからワードを検索し、なお、前記ワードはソフトウェアプログラム内に複数の命令を含む、
    楽器ディジタルインタフェース(MIDI)ファイルを構文解析して前記MIDIファイルに関連するMIDIイベントをスケジュールし、
    音声パラメータ及びマシンコード命令のセットを出力するために前記MIDIイベントを処理し、なお、前記音声パラメータの少なくとも1つは制御パラメータであり、前記マシンコード命令の少なくとも1つは前記制御パラメータに依存する、
    MIDI音声のためのディジタル波形を生成するために、1つ以上のハードウェアユニットを介して前記マシンコード命令を実行し、なお、前記制御パラメータに依存する少なくとも1つの前記マシンコード命令を実行することは、前記制御パラメータに基づいて前記音声パラメータ上で前記少なくとも1つのマシンコード命令によって実行されるべき演算を選択することと、前記選択された演算が前記1つ以上のハードウェアユニットによって実行されるようにするために、前記1つ以上のハードウェアユニットに制御信号を出力することとを備える、及び
    前記ディジタル波形を出力する、
    ように構成された回路。
  40. 前記演算はエンベロープ生成演算を備え、エンベロープ生成変調のレベル及びエンベロープ生成振幅のうちの少なくとも1つは前記制御パラメータに依存する、請求項39に記載の回路。
  41. 前記制御パラメータに依存する前記少なくとも1つのマシンコード命令を実行することは、低周波発振器(LFO)モジュールを介して三角形の波形を生成することを備え、三角波形の位相及び利得のうちの少なくとも1つは前記制御パラメータに基づく、請求項39に記載の回路。
JP2010501076A 2007-03-22 2008-03-17 楽器ディジタルインタフェースハードウエア命令 Expired - Fee Related JP5134078B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US89645007P 2007-03-22 2007-03-22
US60/896,450 2007-03-22
US12/042,146 US7678986B2 (en) 2007-03-22 2008-03-04 Musical instrument digital interface hardware instructions
US12/042,146 2008-03-04
PCT/US2008/057251 WO2008118674A1 (en) 2007-03-22 2008-03-17 Musical instrument digital interface hardware instructions

Publications (2)

Publication Number Publication Date
JP2010522363A JP2010522363A (ja) 2010-07-01
JP5134078B2 true JP5134078B2 (ja) 2013-01-30

Family

ID=39773423

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010501076A Expired - Fee Related JP5134078B2 (ja) 2007-03-22 2008-03-17 楽器ディジタルインタフェースハードウエア命令

Country Status (7)

Country Link
US (1) US7678986B2 (ja)
EP (1) EP2126890A1 (ja)
JP (1) JP5134078B2 (ja)
KR (1) KR101166735B1 (ja)
CN (1) CN101641730B (ja)
TW (1) TW200903446A (ja)
WO (1) WO2008118674A1 (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9251776B2 (en) 2009-06-01 2016-02-02 Zya, Inc. System and method creating harmonizing tracks for an audio input
US8779268B2 (en) 2009-06-01 2014-07-15 Music Mastermind, Inc. System and method for producing a more harmonious musical accompaniment
US9257053B2 (en) * 2009-06-01 2016-02-09 Zya, Inc. System and method for providing audio for a requested note using a render cache
US8785760B2 (en) 2009-06-01 2014-07-22 Music Mastermind, Inc. System and method for applying a chain of effects to a musical composition
US9293127B2 (en) * 2009-06-01 2016-03-22 Zya, Inc. System and method for assisting a user to create musical compositions
US9177540B2 (en) 2009-06-01 2015-11-03 Music Mastermind, Inc. System and method for conforming an audio input to a musical key
US9310959B2 (en) 2009-06-01 2016-04-12 Zya, Inc. System and method for enhancing audio
US8183452B2 (en) * 2010-03-23 2012-05-22 Yamaha Corporation Tone generation apparatus
US10536553B1 (en) * 2015-09-04 2020-01-14 Cadence Design Systems, Inc. Method and system to transfer data between components of an emulation system

Family Cites Families (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3809788A (en) * 1972-10-17 1974-05-07 Nippon Musical Instruments Mfg Computor organ using parallel processing
JPS5441497B2 (ja) * 1974-11-14 1979-12-08
US4915007A (en) * 1986-02-13 1990-04-10 Yamaha Corporation Parameter setting system for electronic musical instrument
US5091951A (en) * 1989-06-26 1992-02-25 Pioneer Electronic Corporation Audio signal data processing system
JP2630651B2 (ja) * 1989-07-26 1997-07-16 ヤマハ株式会社 フェーダ装置
US5109419A (en) * 1990-05-18 1992-04-28 Lexicon, Inc. Electroacoustic system
US5584034A (en) * 1990-06-29 1996-12-10 Casio Computer Co., Ltd. Apparatus for executing respective portions of a process by main and sub CPUS
US5526431A (en) * 1992-06-25 1996-06-11 Kabushiki Kaisha Kawai Gakki Seisakusho Sound effect-creating device for creating ensemble effect
US5635658A (en) * 1993-06-01 1997-06-03 Yamaha Corporation Sound control system for controlling an effect, tone volume and/or tone color
US5541354A (en) * 1994-06-30 1996-07-30 International Business Machines Corporation Micromanipulation of waveforms in a sampling music synthesizer
JP2746157B2 (ja) * 1994-11-16 1998-04-28 ヤマハ株式会社 電子楽器
EP0722162B1 (en) * 1995-01-13 2001-12-05 Yamaha Corporation Digital signal processing device for sound signal processing
CN1591564B (zh) * 1995-06-19 2010-10-06 雅马哈株式会社 形成乐音波形的方法和装置
JP2962217B2 (ja) * 1995-11-22 1999-10-12 ヤマハ株式会社 楽音生成装置及び方法
US5596159A (en) * 1995-11-22 1997-01-21 Invision Interactive, Inc. Software sound synthesis system
JP2904088B2 (ja) * 1995-12-21 1999-06-14 ヤマハ株式会社 楽音生成方法および装置
EP1026662B1 (en) * 1996-08-05 2004-09-22 Yamaha Corporation Software sound source
US5763807A (en) * 1996-09-12 1998-06-09 Clynes; Manfred Electronic music system producing vibrato and tremolo effects
US5917917A (en) * 1996-09-13 1999-06-29 Crystal Semiconductor Corporation Reduced-memory reverberation simulator in a sound synthesizer
US5734119A (en) 1996-12-19 1998-03-31 Invision Interactive, Inc. Method for streaming transmission of compressed music
JP3535957B2 (ja) * 1997-07-29 2004-06-07 パイオニア株式会社 雑音低減装置及び雑音低減方法
JP3620264B2 (ja) * 1998-02-09 2005-02-16 カシオ計算機株式会社 効果付加装置
JP3539188B2 (ja) * 1998-02-20 2004-07-07 日本ビクター株式会社 Midiデータ処理装置
US6610917B2 (en) * 1998-05-15 2003-08-26 Lester F. Ludwig Activity indication, external source, and processing loop provisions for driven vibrating-element environments
AU5009399A (en) * 1998-09-24 2000-05-04 Sony Corporation Impulse response collecting method, sound effect adding apparatus, and recording medium
KR100674406B1 (ko) * 1998-12-17 2007-01-26 가부시키가이샤 소니 컴퓨터 엔터테인먼트 음악 데이터 생성을 위한 장치 및 방법
JP3614061B2 (ja) * 1999-12-06 2005-01-26 ヤマハ株式会社 自動演奏装置及び自動演奏プログラムを記録したコンピュータ読取り可能な記録媒体
US6738479B1 (en) * 2000-11-13 2004-05-18 Creative Technology Ltd. Method of audio signal processing for a loudspeaker located close to an ear
US7065380B2 (en) 2001-07-19 2006-06-20 Texas Instruments Incorporated Software partition of MIDI synthesizer for HOST/DSP (OMAP) architecture
JP2003330464A (ja) 2002-05-14 2003-11-19 Casio Comput Co Ltd 自動演奏装置および自動演奏方法
JP4124343B2 (ja) * 2003-04-11 2008-07-23 ローランド株式会社 電子打楽器
JP5063363B2 (ja) * 2005-02-10 2012-10-31 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 音声合成方法
JP4821532B2 (ja) * 2006-09-21 2011-11-24 ヤマハ株式会社 アルペジオ演奏装置及びプログラム

Also Published As

Publication number Publication date
KR101166735B1 (ko) 2012-07-19
KR20090130865A (ko) 2009-12-24
CN101641730B (zh) 2013-08-07
CN101641730A (zh) 2010-02-03
WO2008118674A1 (en) 2008-10-02
US7678986B2 (en) 2010-03-16
US20080229917A1 (en) 2008-09-25
TW200903446A (en) 2009-01-16
EP2126890A1 (en) 2009-12-02
JP2010522363A (ja) 2010-07-01

Similar Documents

Publication Publication Date Title
JP5134078B2 (ja) 楽器ディジタルインタフェースハードウエア命令
EP1304678A1 (en) Musical composition reproducing apparatus, portable terminal, musical composition reproducing method, and storage medium
JP2013152477A (ja) 電子楽器デジタルインターフェースハードウェア命令セット
US7718882B2 (en) Efficient identification of sets of audio parameters
JP5566876B2 (ja) オーディオ・デバイスにおける参照波形の取得のための帯域幅制御
EP0752697B1 (en) Tone waveform generating method and apparatus based on software
US7807914B2 (en) Waveform fetch unit for processing audio files
JP2010522362A5 (ja)
JP2010522364A (ja) 楽器用デジタルインターフェース(midi)ファイルを処理するためのパイプライン技法
US7893343B2 (en) Musical instrument digital interface parameter storage
JP2013083984A (ja) オーディオファイルを処理するための共有バッファ管理
JPS63316095A (ja) 自動演奏装置

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111129

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20120229

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20120307

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120319

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20121009

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121108

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151116

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees