JP2013152477A - 電子楽器デジタルインターフェースハードウェア命令セット - Google Patents

電子楽器デジタルインターフェースハードウェア命令セット Download PDF

Info

Publication number
JP2013152477A
JP2013152477A JP2013044659A JP2013044659A JP2013152477A JP 2013152477 A JP2013152477 A JP 2013152477A JP 2013044659 A JP2013044659 A JP 2013044659A JP 2013044659 A JP2013044659 A JP 2013044659A JP 2013152477 A JP2013152477 A JP 2013152477A
Authority
JP
Japan
Prior art keywords
midi
voice
machine code
digital waveform
instruction
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.)
Pending
Application number
JP2013044659A
Other languages
English (en)
Inventor
Ramachandler Kamas Nidij
ニディッシュ・ラマチャンドラ・カマス
V Kulkarni Prajakt
プラジャクト・ブイ.・クルカルニ
Devalapalli Suresh
スレッシュ・デバラパッリ
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 JP2013152477A publication Critical patent/JP2013152477A/ja
Pending legal-status Critical Current

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
    • 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
    • G10H7/004Instruments 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 with one or more auxiliary processor in addition to the main processing unit
    • 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
    • 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
    • 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
    • G10H2230/00General physical, ergonomic or hardware implementation of electrophonic musical tools or instruments, e.g. shape or architecture
    • G10H2230/025Computing or signal processing architecture features
    • G10H2230/031Use of cache memory for electrophonic musical instrument processes, e.g. for improving processing capabilities or solving interfacing problems
    • 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
    • G10H2250/00Aspects of algorithms or signal processing methods without intrinsic musical character, yet specifically adapted for or used in electrophonic musical processing
    • G10H2250/541Details of musical waveform synthesis, i.e. audio waveshape processing from individual wavetable samples, independently of their origin or of the sound they represent

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Acoustics & Sound (AREA)
  • Multimedia (AREA)
  • General Engineering & Computer Science (AREA)
  • Electrophonic Musical Instruments (AREA)
  • Advance Control (AREA)

Abstract

【課題】MIDIボイスのデジタル波形の生成用にスペシャライズされた機械コード命令の組を使用して電子楽器デジタルインターフェース(MIDI)ボイスのデジタル波形を生成する。
【解決手段】プロセッサは、MIDIボイスのデジタル波形を生成するソフトウェアプログラムを実行する。ソフトウェアプログラムの命令は、MIDIボイスのデジタル波形の生成用にスペシャライズされた命令セットからの機械コード命令とする。
【選択図】図2

Description

関連出願
本出願は、2007年3月22日に出願された米国仮出願第60/896,402号の優先権を主張するものである。
本開示は、電子装置に関し、より詳細には、オーディオを生成する電子装置に関する。
電子楽器デジタルインターフェース(MIDI)は、ミュージック、スピーチ、トーン、アラートなどオーディオサウンドの作成、通信および再生用のフォーマットである。MIDIフォーマットをサポートする装置は、様々な「ボイス」を作成するために使用できるオーディオ情報の組を記憶することができる。各ボイスは、特定の楽器によるミュージカルノート(musical note)など、複数のサウンドに対応する。例えば、第1のボイスは、ピアノによって演奏される中央Cに対応し、第2のボイスは、トロンボーンによって演奏される中央Cに対応し、第3のボイスは、トロンボーンによって演奏されるD#に対応する。様々な楽器のサウンドを再現するために、MIDI準拠装置は、低周波発振器の挙動など様々なオーディオ特性、ビブラートなどの効果、およびサウンドの認識に影響を及ぼす、サウンドに関連するいくつかの他のオーディオ特性を指定する、ボイス用の情報の組を含むことができる。ほとんどどんなサウンドでも、定義されMIDIファイルで伝達されて、MIDIフォーマットをサポートする装置によって再生されることができる。
MIDIフォーマットをサポートする装置は、当該装置がミュージカルノート(または他のサウンド)の生成を開始すべきであることを示すイベントが発生すると、該ノートを生成することができる。同様に、該装置は、ミュージカルノートの生成を停止すべきであることを示すイベントが発生すると、該ノートの生成を停止する。楽曲全体は、いくつかのボイスがいつ開始し停止すべきかとボイスに対する様々なエフェクトとを示すイベントを指定することによって、MIDIフォーマットに従って符号化できる。このようにして、楽曲は、MIDIフォーマットに従ってコンパクトなファイルフォーマットで記憶および送信できる。
MIDI不オーマットは、多種多様な装置でサポートされている。例えば、無線電話機など無線通信装置は、呼出音や他のオーディオ出力などダウンロード可能なサウンド用のMIDIファイルをサポートすることができる。アップルコンピュータ・インコーポレイテッドが販売している「iPod」装置やマイクロソフト社が販売している「Zune」装置などのデジタルミュージックプレーヤも、MIDIファイルフォーマットをサポートすることができる。MIDIフォーマットをサポートする他の装置には、キーボード、シーケンサ、オーディオエンコーダ(ボコーダ)、およびリズムマシンなど様々なミュージックシンセサイザがある。さらに、無線モバイル装置、直接双方向通信装置(ウォーキートーキーと呼ばれることがある)、ネットワーク電話、パーソナルコンピュータ、デスクトップおよびラップトップコンピュータ、ワークステーション、衛星ラジオ装置、インターホン、ラジオ放送受信機、携帯ゲーム機、装置に取り付けられた回路基板、情報キオスク、ビデオゲームコンソール、児童用の様々なコンピュータ化された玩具、自動車や船舶や航空機で使用されるオンボードコンピュータ、ならびに多種多様な他の装置を含む、多種多様な装置が同じくMIDIファイルまたはトラックの再生をサポートすることができる。
概して、本開示では、電子楽器デジタルインターフェース(MIDI)ボイスのデジタル波形の生成用にスペシャライズされた機械コード命令の組(set of machine-code instructions)を使用してMIDIボイスのデジタル波形を生成するための技法について説明する。例えば、プロセッサは、MIDIボイスのデジタル波形を生成させるソフトウェアプログラムを実行することができる。ソフトウェアプログラムの命令は、MIDIフォーマットに従うデジタル波形の生成用にスペシャライズされた命令セットの機械コード命令とすることができる。
一態様では、方法は、MIDIフレーム中に存在するMIDIボイスのデジタル波形を生成するために処理要素を用いて機械コード命令の組を並列に実行することを備える。機械コード命令の組中の機械コード命令は、MIDIボイスのデジタル波形の生成用にスペシャライズされた命令セットにおいて定義された機械コード命令のインスタンス(instances)である。本方法はまた、MIDIフレームの全体的なデジタル波形を生成するためにMIDIボイスのデジタル波形を統合すること(aggregating)を備える。さらに、本方法は、全体的なデジタル波形を出力することを備える。
別の態様では、装置は、機械コード命令の組を記憶するプログラムメモリユニットの組を備える。機械コード命令の組中の機械コード命令は、MIDIボイスのデジタル波形の生成用にスペシャライズされた命令セットにおいて定義された機械コード命令のインスタンスである。この装置はまた、MIDIフレーム中のMIDIボイスのデジタル波形を生成するために機械コード命令の組を並列に実行する処理要素の組を備える。さらに、この装置は、MIDIフレームの全体的なデジタル波形を生成するためにMIDIボイスのデジタル波形を統合する総和バッファを備える。
別の態様では、コンピュータ可読媒体は、MIDIフレーム中に存在するMIDIボイスのデジタル波形を生成するために処理要素を用いて機械コード命令の組を並列に実行することを処理要素の組に行わせることをプログラマブルプロセッサに行わせる命令を備える。機械コード命令の組の中の機械コード命令は、MIDIボイスのデジタル波形生成用にスペシャライズされた命令セットにおいて定義された機械コード命令のインスタンスである。さらに、このコンピュータ可読媒体は、MIDIフレームの全体的なデジタル波形を生成するためにMIDIボイスのデジタル波形を統合することを総和バッファに行わせることをプロセッサに行わせる命令を備える。このコンピュータ可読媒体はまた、全体的なデジタル波形を出力することを総和バッファに行わせることをプロセッサに行わせる命令を備える。
別の態様では、装置は、機械コード命令の組を記憶するための手段を備える。機械コード命令の組の中の機械コード命令は、MIDIボイスのデジタル波形生成用にスペシャライズされた命令セットにおいて定義された機械コード命令のインスタンスである。この装置はまた、MIDIボイスのデジタル波形を生成するために機械コード命令の組を並列に実行するための手段を備える。さらに、この装置は、MIDIフレームの全体的なデジタル波形を生成するためにMIDIボイスのデジタル波形を統合するための手段を備える。この装置はまた、全体的なデジタル波形を出力するための手段を備える。
本開示の様々な詳細は、添付の図面および以下の説明において記述する。他の特徴、目的、および利点は、説明および図面、ならびに特許請求の範囲から明らかになるであろう。
図1は、サウンドを生成するオーディオ装置を含む例示的なシステムを示すブロック図である。 図2は、オーディオ装置の例示的な電子楽器デジタルインターフェース(MIDI)ハードウェアユニットを示すブロック図である。 図3は、オーディオ装置の例示的な動作を示す流れ図である。 図4は、オーディオ装置中のデジタル信号プロセッサ(DSP)の例示的な動作を示す流れ図である。 図5は、オーディオ装置のMIDIハードウェアユニット中の調整(coordination)モジュールの例示的な動作を示す流れ図である。 図6は、メモリアドレスを指定するボイスインジケータのリストを使用する例示的なDSPを示すブロック図である。 図7は、DSPがプロセッサからMIDIイベントの組を受け取る場合のDSPの例示的な動作を示す流れ図である。 図8は、DSPがボイスインジケータのリストにボイスインジケータを挿入する場合のDSPの例示的な動作を示す流れ図である。 図9は、DSPがボイスインジケータをリストに挿入する場合のDSPの例示的な動作を示す流れ図である。 図10は、リスト中のボイスインジケータの数がボイスインジケータの最大数を超えたとき、DSPがリストからボイスインジケータを削除する場合のDSPの例示的な動作を示す流れ図である。 図11は、メモリアドレスが導き出せる指標値を指定するボイスインジケータのリストを使用する例示的なDSPを示すブロック図である。 図12は、例示的な処理要素の詳細を示すブロック図である。 図13は、オーディオ装置のMIDIハードウェアユニット中の処理要素の例示的な動作を示す流れ図である。
本開示では、電子楽器デジタルインターフェース(MIDI)ボイスのデジタル波形の生成用にスペシャライズされた機械コード命令の組を使用してMIDIボイスのデジタル波形を生成する技法について説明する。例えば、プロセッサは、MIDIボイスのデジタル波形を生成するソフトウェアプログラムを実行することができる。ソフトウェアプログラムの命令は、MIDIボイスのデジタル波形の生成用にスペシャライズされた命令セットからの機械コード命令とすることができる。
図1は、サウンドを生成するオーディオ装置4を含む例示的なシステム2を示すブロック図である。オーディオ装置4は、いくつかの異なるタイプの装置のうちの1つとすることができる。例えば、オーディオ装置4は、携帯電話、ネットワーク電話、直接双方向通信装置(ウォーキートーキーと呼ばれることがある)、パーソナルコンピュータ、デスクトップまたはラップトップコンピュータ、ワークステーション、衛星ラジオ装置、インターホン、ラジオ放送受信機、携帯ゲーム機、キオスクなどの装置に取り付けられた回路基板、児童用の様々なコンピュータ化された玩具、自動車、船舶または航空機で使用されるオンボードコンピュータ、あるいは他のタイプの装置とすることができる。アップルコンピュータ・インコーポレイテッドが販売している「iPod」装置やマイクロソフト社が販売している「Zune」装置などデジタルミュージックプレーヤも、MIDIファイルフォーマットをサポートすることができる。MIDIフォーマットをサポートする他の装置には、キーボード、シーケンサ、ボイスエンコーダ(ボコーダ)、リズムマシンなど様々なミュージックシンセサイザがある。
図1に示される様々な構成要素は、本開示の諸態様を説明するために必要とされたものである。ただし、実装形態によっては、他の構成要素が存在することがあり、図示の構成要素のいくつかが含まれないことがある。例えば、オーディオ装置4が無線電話機である場合、オーディオファイルの無線通信を可能にするために、アンテナ、送信機、受信機およびモデム(変調復調器)を含めることができる。
図1の例に示すように、オーディオ装置4は、MIDIファイルを記憶するオーディオ記憶ユニット6を含む。オーディオ記憶ユニット6は任意の揮発性または不揮発性のメモリあるいは記憶装置を備えることができる。例えば、オーディオ記憶ユニット6は、ハードディスクドライブ、フラッシュメモリユニット、コンパクトディスク、フロッピー(登録商標)ディスク、デジタル多用途ディスク、リードオンリメモリユニット、ランダムアクセスメモリ、または情報記憶媒体である。オーディオ記憶ユニット6は電子楽器デジタルインターフェース(MIDI)ファイルおよび他のタイプのデータを記憶することができる。例えば、オーディオ装置4が携帯電話である場合、オーディオ記憶ユニット6は、個人の連絡先のリストや写真や他のタイプのデータを含むデータを記憶することができる。
オーディオ装置4はまた、オーディオ記憶ユニット6からデータを読み取り、オーディオ記憶ユニット6にデータを書き込むことができるプロセッサ8を含む。さらに、プロセッサ8は、ランダムアクセスメモリ(RAM)ユニット10からデータを読み取り、RAMユニット10にデータを書き込むことができる。例えば、プロセッサ8は、オーディオ記憶モジュール6からMIDIファイルの一部分を読み取り、MIDIファイルのその部分をRAMユニット10に書き込むことができる。プロセッサ8は、Intel Pentium(登録商標)4プロセッサ、英国チェリーヒントンのARMホールディングスによるARMアーキテクチャに適合する組込みマイクロプロセッサ、または他のタイプの汎用プロセッサなど、汎用マイクロプロセッサを備えることができる。RAMユニット10は1つまたは複数のスタティックまたはダイナミックRAMユニットを備えることができる。
プロセッサ8は、MIDIファイルを読み取った後、MIDIファイルを解析(parse)し、該MIDIファイルに関連するMIDIイベントをスケジュールすることができる。例えば、MIDIフレームごとに、プロセッサ8は、1つまたは複数のMIDIファイルを読み取り、該MIDIファイルからMIDIイベントを抽出することができる。MIDI命令に基づいて、プロセッサ8は、DSP12によって処理するためにMIDIイベントをスケジュールすることができる。MIDIイベントをスケジュールした後、プロセッサ8は、DSP12がイベントを処理することができるように、RAMユニット10またはDSP12にスケジューリングを提供することができる。代替として、プロセッサ8は、DSP12にMIDIイベントを時間同期方式でディスパッチ(dispatch)することによってスケジューリングを達成することができる。DSP12は、スケジュールされたイベントを、MIDIファイル中のタイミングパラメータによって指定されたように、同期方式で処理することができる。MIDIイベントは、音楽性能情報(musical performance information)を送信するために使用されるチャネルボイスメッセージを含むことができる。チャネルボイスメッセージは、特定のMIDIボイスをオンまたはオフにする命令、チェンジポリフォニックキープレッシャ(change polyphonic key pressure)、チャネルプレッシャ、ピッチベンド(pitch bend)チェンジ、コントロールチェンジメッセージ、アフタータッチ(aftertouch)エフェクト、ブレスコントロール(breath-control)エフェクト、プログラムチェンジ、ピッチベンド(pitch bend)エフェクト、パンレフト(pan left)またはパンライト、サスティンペダル(sustain pedal)、メインボリューム、ソステヌート(sostenuto)、および他のチャネルボイスメッセージを含むことができる。さらに、MIDIイベントは、MIDI装置がMIDIデータに応答する方法に影響を及ぼすチャネルモードメッセージを含むことができる。さらに、MIDIイベントは、MIDIシステム中のすべての受信機を対象とするシステムコモンメッセージ、クロックベースのMID
I構成要素間の同期に使用されるシステムリアルタイムメッセージ、他のシステム関連メッセージなど、システムメッセージを含むことができる。MIDIイベントは、MIDIショーコントロールメッセージ(例えば、ライトエフェクトキュー(lighting effect cues)、スライドプロジェクションキュー、マシーナリエフェクト(machinery effect)キュー、パイロテクニカル(pyrotechnical)キュー、および他のエフェクトキュー)とすることもできる。
DSP12は、プロセッサ8からMIDI命令を受け取ると、連続パルス符号変調(PCM)信号を生成するために、該MIDI命令を処理することができる。PCM信号は、波形が一定の間隔をおいてデジタルサンプルによって表されるアナログ信号のデジタル表現である。DSP12は、デジタルアナログ変換器(DAC)14に、このPCM信号を出力することができる。DAC14は、このデジタル波形をアナログ信号に変換することができる。駆動回路16は、ユーザに対して物理的なサウンドを出力するためにスピーカ19Aおよび19Bを駆動するために、このアナログ信号を使用することができる。本開示では、スピーカ19Aおよび19Bを集合的に「スピーカ19」と呼ぶ。オーディオ装置4は、フィルタと、プリアンプと、アンプと、スピーカ19によって最終的に出力するためのアナログ信号を準備する他のタイプの構成要素と、を含む1つまたは複数の追加の構成要素(図示せず)を含むことができる。このようにして、オーディオ装置4は、MIDIファイルに従ってサウンドを生成することができる。
デジタル波形を生成するために、DSP12は、個々のMIDIフレームのデジタル波形を生成するMIDIハードウェアユニット18を使用することができる。各MIDIフレームは10ミリ秒、または別の時間間隔に対応することができる。MIDIフレームが10ミリ秒に対応し、且つ、デジタル波形が48kHz(すなわち、毎秒48,000サンプル)でサンプリングされる場合には、各MIDIフレームには480個のサンプルがある。MIDIハードウェアユニット18は、オーディオ装置4のハードウェア構成要素として実装できる。例えば、MIDIハードウェアユニット18は、オーディオ装置4の回路基板に組み込まれたチップセットとすることができる。MIDIハードウェアユニット18を使用するために、DSP12は、MIDIハードウェアユニット18がアイドル状態かどうかを最初に判断することができる。MIDIハードウェアユニット18は、MIDIフレームのデジタル波形の生成を終了した後、アイドル状態になることができる。次いで、DSP12は、MIDIフレーム中に存在するMIDIボイスを示すボイスインジケータのリストを生成することができる。DSP12は、ボイスインジケータのリストを生成した後、MIDIハードウェアユニット18中に1つまたは複数のレジスタを設定することができる。DSP12は、これらのレジスタを設定するために、直接メモリ交換(DME)を使用することができる。DMEは、プロセッサが他の動作を実行している間でも、1つのメモリユニットから別のメモリユニットにデータを転送する手続きである。DSP12は、レジスタを設定した後、MIDIフレームのデジタル波形の生成を開始することをMIDIハードウェアユニット18に命令することができる。以下で詳細に説明するように、MIDIハードウェアユニット18は、ボイスインジケータのリスト中の各々のMIDIボイスのデジタル波形を生成し、これらのデジタル波形をMIDIボイスの波形に統合することによって、MIDIフレームのデジタル波形を生成することができる。MIDIハードウェアユニット18は、MIDIフレームのデジタル波形の生成を終了すると、DSP12に割込みを送信することができる。MIDIハードウェアユニット18から割込みを受け取ると、DSP12は、MIDIハードウェアユニット18にデジタル波形のDME要求を送信することができる。MIDIハードウェアユニット18は、その要求を受け取ると、DSP12にデジタル波形を送信することができる。
MIDIフレーム中に存在するMIDIボイスを示すボイスインジケータのリストを生成するために、DSP12は、どのMIDIボイスがMIDIフレーム中で少なくとも最小レベルの音響的重要性(acoustical significance)を有するかを判断することができる。MIDIフレーム中のMIDIボイスの音響的重要性のレベルは、MIDIフレームの人間の聞き手によって知覚される全体的なサウンドに対するそのMIDIボイスの重要性の関数であることができる。
MIDIボイスのデジタル波形を生成するために、MIDIハードウェアユニット18は、MIDIボイスを定義するボイスパラメータセット中の少なくともいくつかのボイスパラメータにアクセスすることができる。ボイスパラメータの組は、MIDIボイスのデジタル波形を生成するのに必要な情報を指定することによって、および/またはそのような情報がどこに位置するかを指定することによって、MIDIボイスを定義することができる。例えば、MIDIボイスパラメータの組は、共振レベル、ピッチ残響、音量、および他の音響特性を指定することができる。さらに、MIDIボイスパラメータの組は、ボイスのベース波形を含むRAMユニット10中の位置のアドレスへのポインタを含む。MIDIフレームのデジタル波形は、MIDIボイスのデジタル波形の集合であることができる。例えば、MIDIフレームのデジタル波形は、MIDIボイスのデジタル波形の総和であることができる。
以下で詳細に述べるように、MIDIハードウェア18は、いくつかの利点を提供することができる。例えば、MIDIハードウェアユニット18は、デジタル波形の効率的な生成を生じるいくつかの特徴を含むことができる。デジタル波形のこの効率的な生成の結果として、オーディオ装置4は、より高品質のサウンドを生成し、電力消費を少なくし、あるいはMIDIファイルの再生のための従来の技法を改善することができる。その上、MIDIハードウェアユニット18は、デジタル波形を効率的に生成することができるので、一定時間内により多くのMIDIボイスのデジタル波形を生成することができる。そのような追加のMIDIボイスの存在は、人間の聞き手によって知覚されるサウンドの品質を改善することができる。
図2は、オーディオ装置4の例示的なMIDIハードウェアユニット18を示すブロック図である。図2の例に示すように、MIDIハードウェアユニット18は、データを送信および受信するバスインターフェース30を含む。例えば、バスインターフェース30は、AMBA高性能バス(AHB)マスターインターフェース、AHBスレーブインターフェース、およびメモリバスインターフェースを含むことができる。代替として、バスインターフェース30は、AXIバスインターフェース、または別のタイプのバスインターフェースを含むことができる。AXIはadvanced extensible interfaceの略である。
さらに、MIDIハードウェアユニット18は調整モジュール32を含むことができる。調整モジュール32はMIDIハードウェアユニット18内のデータフローを調整する。MIDIハードウェアユニット18がMIDIフレームのデジタル信号の生成を開始する命令をDSP12から受け取ると、調整モジュール32は、RAMユニット10からMIDIハードウェアユニット18中のリンクリストメモリユニット42に、DSP12によって生成されたボイスインジケータのリストをロードすることができる。リスト中の各ボイスインジケータは、現在のMIDIフレーム中で音響的重要性を有するMIDIボイスを示す。ボイスインジケータのリスト中の各ボイスインジケータは、MIDIボイスを定義するボイスパラメータセットを記憶するRAMユニット10中のメモリ位置を指定することができる。例えば、各ボイスインジケータは、特定のボイスパラメータセットのメモリアドレスか、または調整モジュール32が特定のボイスパラメータセットのメモリアドレスを導き出すことができる指標値か、を含むことができる。
調整モジュール32は、リンクリストメモリユニット42にボイスインジケータのリストをロードした後、リンクリストメモリ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つを特定すると、当該特定された処理要素に関連するVPS RAMユニット46のうちの1つにMIDIボイスのボイスパラメータセットのボイスパラメータを記憶することができる。さらに、調整モジュール32は、波形フェッチユニット/低周波発振器(WFU/LFO)メモリユニット39にボイスパラメータセットのボイスパラメータを記憶することができる。
VPS RAMユニットおよびWFU/LFOメモリユニット39にボイスパラメータをロードした後、調整モジュール32は、MIDIボイスのデジタル波形の生成を開始することを処理要素に命令することができる。処理要素34の各々は、プログラムメモリユニット44A〜44N(集合的に「プログラムメモリユニット44」)のうちの1つに関連付けられることができる。プログラムメモリユニット44の各々は、プログラム命令の組を記憶する。MIDIボイスのデジタル波形を生成するために、処理要素は、その処理要素に関連するプログラムメモリユニット44のうちの1つに記憶されたプログラム命令の組を実行することができる。これらのプログラム命令は、処理要素に、その処理要素に関連するVPSメモリユニット46のうちの1つからボイスパラメータの組を取り出させることができる。さらに、プログラム命令は、処理要素に、ボイスのベース波形サンプルへのポインタによってボイスパラメータで指定された波形について波形フェッチユニット(WFU)36への要求を送信させることができる。処理要素34の各々は、WFU36を使用することができる。処理要素34のうちの1つからの要求に応答して、WFU36は、要求元の処理要素に1つまたは複数の波形サンプルを戻すことができる。波形は、例えば最大で波形の1周期だけサンプル内で位相シフトできるので、WFU36は、補間を使用して位相シフトを補正するために2つのサンプルを返すことができる。さらに、ステレオ信号は2つの別々の波形からなるので、WFU36は、最高4つのサンプルを返すことができる。WFU36によって返される最後のサンプルは、補間に使用できる小数部の位相(fractional phase)であることができる。WFU36は、キャッシュメモリ48を使用してベース波形を高速にフェッチすることができる。
WFU36が処理要素34のうちの1つにオーディオサンプルを返した後、それぞれの処理要素は、追加のプログラム命令を実行することができる。そのような追加の命令は、MIDIハードウェアユニット18中の低周波発振器(LFO)38から非対称三角波形のサンプルを要求することを含むことができる。WFU36によって戻された波形にLFO38によって戻された三角波を乗算することによって、処理要素は、その波形の様々な音響特性を操作することができる。例えば、波形に三角波を乗算すると、より所望の楽器らしく聞こえる波形が生じることがある。他の命令は、処理要素に、波形を特定の回数ループさせたり、波形の振幅を調整させたり、残響を追加させたり、ビブラートエフェクトを追加させたり、あるいは他の音響エフェクトを与えさせたりすることができる。このようにして、処理要素は、1つのMIDIフレームの間存続するボイスの波形を生成することができる。最終的に、処理要素は、終了命令に遭遇することができる。処理要素は、終了命令に遭遇すると、総和バッファ40へ、生成された波形を与えることができる。代替として、処理要素は、デジタル波形の各サンプルを生成すると、そのような生成されたサンプルを総和バッファ40に記憶することができる。
総和バッファ40は、処理要素34のうちの1つから波形を受け取ると、MIDIフレームの全体的な波形に、その波形を統合する。例えば、総和バッファ40は、最初にフラットな波形(すなわち、すべてのデジタルサンプルが0である波形)を記憶することができる。総和バッファ40は、処理要素34のうちの1つから波形を受け取ると、総和バッファ40中に記憶された波形のそれぞれのサンプルに、その波形の各デジタルサンプルを加算する。このようにして、総和バッファ40は、MIDIフレームの全体的な波形を生成記憶する。
最終的に、調整モジュール32は、処理要素34が、リンクリストメモリ42中のリストに示されたすべてのボイスのデジタル波形の生成を完了し、それらのデジタル波形を総和バッファ40に供給したと判断することができる。この時点で、総和バッファ40は、現在のMIDIフレーム全体の完成デジタル波形を含むことができる。調整モジュール32は、この判断を行うと、DSP12に割込みを送信することができる。この割込みに応答して、DSP12は、総和バッファ40の内容を受け取るために直接メモリ交換(DME)を介して要求を送信することができる。
図3は、オーディオ装置4の例示的な動作を示す流れ図である。最初に、プロセッサ8は、オーディオ記憶モジュール6からRAMユニット10にMIDIファイルをロードするプログラム命令に遭遇する(50)。例えば、オーディオ装置4が携帯電話である場合、オーディオ装置4が着信電話呼を受け取り、MIDIファイルが呼出音を記述すると、プロセッサ8は、固定記憶モジュール6からRAMユニット10にMIDIファイルをロードするプログラム命令に遭遇することができる。
RAMユニット10にMIDIファイルをロードした後、プロセッサ8は、RAMユニット10中のMIDIファイルからのMIDI命令を解析することができる(52)。次いで、プロセッサ8は、MIDIイベントをスケジュールし、このスケジュールに従ってDSP12にMIDIイベントを送出することができる(54)。MIDIイベントに応答して、DSP12は、MIDIハードウェアユニット18と協調して、リアルタイムで連続デジタル波形を出力することができる(56)。すなわち、DSP12によって出力されるデジタル波形は、個別のMIDIフレームにセグメント化されない。DSP12は、DAC14に連続デジタル波形を与える(58)。DAC14は、デジタル波形中の個々のデジタルサンプルを電圧に変換する(60)。DAC14は、多種多様なデジタルアナログ変換技術を使用して実現できる。例えば、DAC14は、パルス幅変調器、オーバーサンプリングDAC、重み付きバイナリDAC、R−2RラダーDAC、サーモメータ(thermometer)符号化DAC、セグメント型DAC、または別のタイプのデジタルアナログ変換器として実現できる。
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ボイスのボイスパラメータの組中の左チャネルパラメータに対してゲインを増加するMIDIイベントを受け取ることができる。このようにして、ピアノの中央Cボイスは、そのノートのサウンドが左側から出ているように聞こえることができる。DSP12は、MIDIイベントがMIDIボイスのパラメータを更新する命令であると判断した場合(72の「はい」)、RAMユニット10中の当該パラメータを更新することができる(74)。
一方、DSP12は、MIDIイベントがMIDIボイスのパラメータを更新する命令ではないと判断した場合(72の「いいえ」)、ボイスインジケータのリストを生成することができる(75)。リンクリスト中のボイスインジケータの各々は、MIDIボイスを定義するボイスパラメータセットを記憶するRAMユニット10中のメモリ位置を指定することによって、MIDIフレームのMIDIボイスを示す。MIDIハードウェアユニット18は、限られた時間の制約を受けるMIDIボイスのデジタル波形を生成することがあるので、MIDIハードウェアユニット18が、MIDIフレームについてMIDI命令によって指定されたすべてのMIDIボイスのデジタル波形を生成することは不可能であることがある。したがって、リンクリスト中のボイスインジケータによって示されるMIDIボイスは、MIDIフレーム中で最大の音響的重要性を有するMIDIボイスである。ボイスインジケータのリストは、リンクリストとすることができる。すなわち、リスト中の各ボイスインジケータは、リスト中の最後のボイスインジケータを除いて、リスト中の次のボイスインジケータのメモリアドレスへのポインタに関連付けることができる。
MIDIハードウェアユニット18が最も重要なMIDIボイスのデジタル波形のみを生成するように、DSP12は、音響的に最も重要なボイスを特定するために1つまたは複数の動的(heuristic)アルゴリズムを使用することができる。例えば、DSP12は、最も高い平均音量を持つボイス、必要な和声を形成するボイス、または他の音響特性を特定することができる。音響的に最も重要なボイスがリスト中で1番目であり、音響的に2番目に重要なボイスがリスト中で2番目であるなどのように、DSP12はボイスインジケータのリストを生成することができる。さらに、DSP12は、MIDIフレーム中のアクティブでないボイスをリストから削除することができる。
ボイスインジケータのリストを生成した後、DSP12は、MIDIハードウェアユニット18がアイドル状態かどうかを判断することができる(76)。MIDIハードウェアユニット18は、MIDIファイルの第1のMIDIフレームのデジタル波形を生成する前、またはMIDIフレームのデジタル波形の生成を完了した後、アイドル状態になることができる。MIDIハードウェアユニット18がアイドル状態でない場合(76の「いいえ」)、DSP12は、1つまたは複数のクロックサイクル待機し、次いでMIDIハードウェアユニット18がアイドル状態かどうかを再び判断することができる(76)。
MIDIハードウェアユニット18がアイドル状態の場合(76の「はい」)、DSP12は、MIDIハードウェアユニット18中のプログラムRAMユニット44に命令の組をロードすることができる(78)。例えば、DSP12は、命令がプログラムRAMユニット44にすでにロードされているかどうかを判断することができる。命令がプログラムRAMユニット44にロードされていない場合、DSP12は、直接メモリ交換(DME)を使用してプログラムRAMユニット44にそのような命令を転送することができる。あるいは、命令がプログラムRAMユニット44にすでにロードされている場合、DSP12はこのステップをスキップすることができる。
DSP12は、プログラムRAMユニット44にプログラム命令をロードした後、MIDIハードウェアユニット18を活動状態にすることができる(80)。例えば、DSP12は、MIDIハードウェアユニット18中のレジスタを更新することによって、またはMIDIハードウェアユニット18に制御信号を送信することによって、MIDIハードウェアユニット18を活動状態にすることができる。MIDIハードウェアユニット18を活動状態にした後、DSP12は、MIDIハードウェアユニット18から割込みを受け取るまで待機することができる(82)。割込みを待っている間、DSP12は、前のMIDIフレームのデジタル波形を処理して、出力することができる。さらに、DSP12は、次のMIDIフレームのボイスインジケータのリストを生成することもできる。割込みを受け取ると、DSP12の割込みサービスレジスタは、MIDIハードウェアユニット18中の総和バッファ40からMIDIフレームのデジタル波形を転送するためのDME要求を設定すること(84)。総和バッファ40中のデジタル波形が転送されているときに長期間ハードウェアがアイドル状態になるのを回避するために、直接メモリ交換要求は、総和バッファ40からデジタル波形を32個の32ビットワードブロックで転送することができる。デジタル波形のデータの完全性(data integrity)は、処理要素34が総和バッファ40中でデータを上書きすることを防止する、総和バッファ40中のロック機構によって守られることができる。このロック機構はブロックごとに解放できるので、直接メモリ交換転送は、ハードウェアの実行と並列に進行することができる。
DSP12は、MIDIハードウェアユニット18からMIDIフレームのオーディオサンプルを受け取った後、MIDIハードウェアユニット18から受け取ったMIDIフレームのデジタル波形に先行するMIDIフレームのデジタル波形をDAC14に完全に出力するまで、デジタル波形をバッファリングすることができる(86)。DSP12は、前のMIDIフレームのデジタル波形を完全に出力した後、MIDIハードウェアユニット18から受け取った現在のMIDIフレームのデジタル波形を出力することができる(88)。
図5は、オーディオ装置4のMIDIハードウェアユニット18中の調整モジュール32の例示的な動作を示す流れ図である。最初に、調整モジュール32は、MIDIフレームのデジタル波形の生成を開始するために、DSP12から命令を受け取ることができる(100)。DSP12から命令を受け取った後、調整モジュール32は、総和バッファ40の内容をクリアすることができる(102)。例えば、調整モジュール32は、総和バッファ40中のデジタル波形をすべて0に設定するよう総和バッファ40に命令することができる。調整モジュール32は、総和バッファ40の内容をクリアした後、DSP12によって生成されたボイスインジケータのリストをRAMユニット10からリンクリストメモリ42にロードすることができる(104)。
ボイスインジケータのリンクリストをロードした後、調整モジュール32は、処理要素34のうちの1つがMIDIボイスのデジタル波形の生成を終了したことを示す信号をその処理要素から受け取ったかどうかを判断することができる(106)。調整モジュール32が、処理要素34のうちの1つがMIDIボイスのデジタル波形の生成を終了したことを示す信号をその処理要素から受け取っていない場合(106の「いいえ」)、調整モジュール32はループバックし、そのような信号を待つことができる(106)。調整モジュール32は、処理要素34のうちの1つがMIDIボイスのデジタル波形の生成を終了したことを示す信号をその処理要素から受け取った場合(106の「はい」)、その処理要素に関連する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によって生成される三角波形の位相シフト、または他の音響特性を含むことができる。
調整モジュール32は、パラメータをRAMユニット10に書き戻した後、処理要素34がリスト中のボイスインジケータによって示される各MIDIボイスのデジタル波形を生成したかどうかを判断することができる(110)。例えば、調整モジュール32は、ボイスインジケータのリンクリスト中の現在のボイスインジケータを示すポインタを維持することができる。最初に、このポインタは、リンクリスト中の第1のボイスインジケータを示すことができる。処理要素34がリスト中で示されるMIDIボイスの各々のデジタル波形を生成した場合(110の「はい」)、調整モジュール32は、MIDIフレームの全体的なデジタル波形が完全であることを示すためにDSP12に割込みをアサートすることができる(112)。
一方、処理要素34がリスト中でボイスインジケータによって示されるMIDIボイスの各々のデジタル波形を生成していない場合(110の「いいえ」)、調整モジュール32はアイドル状態の処理要素34のうちの1つを特定することができる(114)。すべての処理要素34がアイドル状態でない(すなわち、ビジーである)場合、調整モジュール32は、処理要素34のうちの1つがアイドル状態になるまで待つことができる。アイドル状態の処理要素34のうちの1つを特定した後、調整モジュール32は、アイドル状態の処理要素に関連するVPS RAMユニット46のうちの1つに、現在のボイスインジケータによって示されるボイスパラメータセットのパラメータをロードすることができる(116)。調整モジュール32は、処理要素に関係するボイスパラメータセットのパラメータのみをVPS RAMユニットにロードすることができる。さらに、調整モジュール32は、WFU/LFO RAMユニット39に、WFU36およびLFO38に関係するボイスパラメータセットのパラメータをロードすることができる(118)。次いで、調整モジュール32は、MIDIボイスのデジタル波形の生成を開始するためにアイドル状態の処理要素をイネーブルにすることができる(120)。次に、調整モジュール32は、現在のボイスインジケータをリスト中の次のボイスインジケータに更新し、処理要素34のうちの1つがMIDIボイスのデジタル波形の生成を完了したことを示す信号を調整モジュール32が受け取ったかどうかを再び判断する(106)ために、ループバックすることができる。
図6は、メモリアドレスを指定するボイスインジケータのリストを使用する例示的なDSP12を示すブロック図である。図6の例に示すように、DSP12は、リストベースポインタ140を記憶するレジスタを含む。リストベースポインタ140は、リンクリストメモリ42中のボイスインジケータのリスト142中の第1のボイスインジケータのメモリアドレスを指定することができる。MIDIファイルの始めのように、リスト142中にボイスインジケータがない場合、リストベースポインタ140の値はヌル(null)アドレスであることがある。さらに、DSP12は、ボイスインジケータ数レジスタ(number of voice indicators register)144の値を記憶するレジスタを含む。ボイスインジケータ数レジスタ144の値は、リスト142中のボイスインジケータの数の集計を示す。図6に示す例示的なデータ構造では、リスト142中の各ボイスインジケータは、RAMユニット10中のボイスパラメータセットのメモリアドレスと、リンクリストメモリ42中の次のボイスインジケータのメモリアドレスとを含むことができる。リスト142中の最後のボイスインジケータは、リスト142中の次のボイスインジケータのアドレスにヌルアドレスを指定することができる。
RAMユニット10は、ボイスパラメータセット146の組を含むことができる。RAMユニット10中の各ボイスパラメータセットは、一つのボイスパラメータセット中のボイスパラメータの値を指定する連続するメモリ位置のブロックとすることができる。第1のボイスパラメータのメモリ位置のメモリアドレスは、ボイスパラメータセットのメモリアドレスとして働くことができる。
DSP12がMIDIファイルの第1のMIDIイベントを受け取る前、リスト142は、どのようなボイスインジケータも含んでいないことがある。リスト142がいかなるボイスインジケータも含んでいないことを反映するために、リストベースポインタ140の値は、ヌルメモリアドレスとすることができ、ボイスインジケータ数レジスタ144の値は、数0を指定することができる。MIDIファイルの第1のMIDIフレームの開始時に、プロセッサ8は、MIDIフレーム中に発生するMIDIイベントの組を調整モジュール32に与えることができる。例えば、プロセッサ8は、ボイスをオンにするMIDIイベント、ボイスをオフにするMIDIイベント、アフタータッチエフェクトに関連するMIDIイベント、および他のそのようなエフェクトを生成するMIDIイベントをDSP12に与えることができる。MIDIイベントを処理するために、DSP12中のリストジェネレータモジュール156はリンクリストメモリ42中にリンクリスト142を生成することができる。一般に、リストジェネレータモジュール156は各MIDIフレーム中にリスト142を完全に生成するわけではない。そうではなく、リストジェネレータモジュール156は、リスト142中にすでに存在するボイスインジケータを再利用することができる。
リンクリスト142を生成するために、リストジェネレータモジュール156は、DSP12によって与えられたMIDIイベントの組で指定された各MIDIボイスのボイスパラメータセット146のうちの1つのメモリアドレスを指定するボイスインジケータをリスト142がすでに含むかどうかを判断することができる。リストジェネレータモジュール156は、リスト142がMIDIボイスのうちの1つのボイスインジケータを含むと判断した場合、リスト142からそのボイスインジケータを削除することができる。リスト142からボイスインジケータを削除した後、リストジェネレータモジュール156は、そのボイスインジケータをリスト142に加え戻すことができる。リストジェネレータモジュール156は、ボイスインジケータをリスト142に戻した場合、リスト中の第1のボイスインジケータで開始し、削除されたボイスインジケータによって示されるMIDIボイスがリスト142中の第1のボイスインジケータによって示されるボイスよりも音響的に重要であるかどうかを判断することができる。言い換えれば、リストジェネレータモジュール156は、どちらのボイスがそのサウンドにとってより重要であるかどうかを判断することができる。リストジェネレータモジュール156は、MIDIイベントで指定されたMIDIボイスと、第1のボイスインジケータで指定されたMIDIボイスとの、どちらがより音響的に重要であるかを判断するために、1つまたは複数の動的アルゴリズムを適用することができる。例えば、リストジェネレータモジュール156は、2つのMIDIボイスのどちらが現在のMIDIフレーム中に最も大きい平均音量を有するかを判断することができる。音響的重要性を判断するために他の音響心理学的な技法を適用することができる。削除されたボイスインジケータによって示されるMIDIボイスがリスト142中の第1のボイスインジケータによって示されるボイスよりも重要な場合、リストジェネレータモジュール156は、削除されたボイスインジケータをリストの一番上に追加することができる。
リストジェネレータモジュール156は、削除されたボイスインジケータをリストの一番上に追加した場合、削除されたボイスインジケータのメモリアドレスに等しくなるように、リストベースポインタの値を変更することができる。削除されたボイスインジケータによって示されるMIDIボイスが第1のボイスインジケータによって示されるMIDIボイスよりも重要でない場合、リストジェネレータモジュール156は、削除されたボイスインジケータによって示されるMIDIボイスよりも重要でない、リスト142中のボイスインジケータのうちの1つによって示されるMIDIボイスを特定するまで、リスト142を下に進む。リストジェネレータモジュール156は、そのようなMIDIボイスを特定した場合、リスト142の当該特定されたMIDIボイスのボイスインジケータより上に(すなわち、前に)、削除されたボイスインジケータを挿入する。削除されたボイスインジケータによって示されるMIDIボイスがリスト142中のボイスインジケータによって示される他のすべてのボイスよりも音響的に重要でない場合は、リストジェネレータモジュール156は、削除されたボイスインジケータをリスト142の末尾に追加する。リストジェネレータモジュール156は、このプロセスをMIDIイベントの組中のMIDIボイスごとに実行することができる。
リストジェネレータモジュール156は、リスト142がMIDIイベントに関連するMIDIボイスのボイスインジケータを含まないと判断した場合、MIDIボイスのリンクリストメモリ42中に新しいボイスインジケータを作成することができる。新しいボイスインジケータを作成した後、リストジェネレータモジュール156は、削除されたボイスインジケータについて上述した方法で、リスト142にその新しいボイスインジケータを挿入することができる。このようにして、リストジェネレータモジュール156は、リンクリスト中のボイスインジケータが、リスト中のボイスインジケータによって示されるMIDIボイスの音響的重要性に従って順番に配置された、リンクリストを生成することができる。一例として、リストジェネレータモジュール156は、MIDIフレーム中の最も重要なボイスから最も重要でないボイスまでのMIDIボイスを示すボイスインジケータのリストを生成することができる。
図6の例では、DSP12は、リスト142の生成においてリストジェネレータモジュール156を支援するポインタの組を含む。このポインタの組は、リストジェネレータモジュール156が現在使用しているボイスインジケータのメモリアドレスを保持する現在のボイスインジケータポインタ148と、リストジェネレータモジュール156がリスト142に挿入しているボイスインジケータのメモリアドレスを保持するイベントボイスインジケータポインタ150と、現在使用しているボイスインジケータの前にリストジェネレータモジュール156が使用したボイスインジケータのメモリアドレスを保持する、前のボイスインジケータポインタ152と、を含む。
ボイスインジケータ数レジスタ144の値がボイスインジケータの最大数を超える場合、リストジェネレータモジュール156は、最も重要でないMIDIボイスを示すリスト142中のボイスインジケータに関連するメモリの割当てを解除することができる。リスト142中のボイスインジケータが最も重要なものから最も重要でないものへ配置されている場合、リストジェネレータモジュール156は、ヌルメモリアドレスを指定する次のボイスインジケータのメモリアドレスを含むボイスインジケータを特定するまで、次のボイスインジケータのメモリアドレスのチェーンに従うことによって、最も重要でないMIDIボイスを示すリスト142中のボイスインジケータを特定することができる。最後のボイスインジケータに関連するメモリの割当てを解除した後、リストジェネレータモジュール156は、ボイスインジケータ数レジスタ144の値を1だけデクリメントする。
リストジェネレータモジュール156は、リスト142を生成した後、リストベースポインタ140およびボイスインジケータ数144の値を調整モジュールに与えることができる。調整モジュール32は、リストベースポインタ140およびボイスインジケータ数144のこれらの値を保持するためにレジスタ(図示せず)を含むことができる。調整モジュール32は、リスト142にアクセスし、リスト142中のボイスインジケータによって示されるMIDIボイスを処理要素34に割り当てるために、これらの値を使用する。例えば、リストジェネレータモジュール156がリスト142の生成を終了すると、調整モジュール32は、リスト142をリンクリストメモリ42にロードするために、リストジェネレータモジュール156によって与えられたリストベースポインタ140の値を使用する。次いで、調整モジュール32は、アイドル状態の処理要素34のうちの1つを特定することができる。次いで、調整モジュール32は、現在のボイスインジケータを示す調整モジュール32中のポインタによって指定されたメモリ位置で、リスト142中のボイスインジケータによって示されるMIDIボイスを定義するボイスパラメータセットを記憶するRAMユニット10中のメモリ位置のメモリアドレスを得ることができる。次いで、調整モジュール32は、ボイスパラメータセット中の少なくともいくつかのボイスパラメータを、アイドル状態の処理要素に関連するVPS RAMユニット46のうちの1つに記憶するために、得られたメモリアドレスを使用することができる。ボイスパラメータセットをVPS RAMユニット中に記憶した後、調整モジュール32は、ボイスの波形の生成を開始するために処理要素に信号を送信することができる。処理要素34がリスト142中のボイスインジケータによって示される各ボイスの波形を生成するまで、調整モジュール32はこれを継続することができる。
DSP12および調整モジュール32がボイスインジケータのリンクリストを使用することは、いくつかの利点を提示する。例えば、DSP12は、ボイスパラメータセットを示すボイスインジケータのリンクリストをソートし、再編成するので、RAMユニット10中の実際のボイスパラメータセットをソートし、再編成する必要はない。ボイスインジケータは、ボイスパラメータセットよりもかなり小さくすることができる。したがって、DSP12は、RAMユニット10へのおよびRAMユニット10からのより少ないデータの移動(すなわち、書込みおよび読取り)を行う。したがって、DSP12は、ボイスパラメータセットをソートし、再編成する場合よりも、調整モジュール32からRAMユニット10へのバス上の帯域幅がより少なくて済む。さらに、DSP12は、RAMユニット10との間でより少ないデータを移動するので、実際のボイスパラメータセットを移動する場合よりも、消費する電力を少なくすることができる。また、ボイスインジケータのリンクリストを使用すると、DSP12は処理要素34にボイスパラメータセットを任意の順序で与えることが可能になる。ボイスパラメータセットを任意の順序で処理要素34に与えることは、いくつかのタイプのオーディオ処理に有用である。
さらに、インジケータのリンクリストの使用は、MIDIボイスセットパラメータの識別子以外のコンテキストにおいて適用性がある。例えば、インジケータは、MIDIボイスパラメータの組よりも、予めプログラムされたデジタルフィルタを示すことができる。各予めプログラムされたデジタルフィルタは、4次フィルタ用の5つの係数を与えることができる。4次フィルタは、ポールからさらに離れている周波数を取り除く2ポール2ゼロのデジタルフィルタである。4次フィルタは、オーディオイコライザをプログラムするために使用できる。MIDIボイスと同様に、第1のデジタルフィルタは、第2のデジタルフィルタよりも多少重要であることができる。したがって、デジタルフィルタを適用するモジュールは、デジタルフィルタの組を効率的に適用するために、デジタルフィルタパラメータに対するインジケータのソートされたリンクリストを使用することができる。例えば、DSP12がデジタル波形を生成した後、オーディオ装置4のモジュールは、そのデジタル波形にフィルタを適用することができる。
図7は、DSP12がプロセッサ8からMIDIイベントの組を受け取る場合のDSP12の例示的な動作を示す流れ図である。最初に、DSP12は、プロセッサ8からMIDIイベントの組を受け取ることができる(160)。DSP12がMIDIイベントの組を受け取った後、リストジェネレータモジュール156は、そのMIDIイベントの組が空かどうかを判断することができる(162)。MIDIイベントの組が空の場合(162の「はい」)、リストジェネレータモジュール156は、調整モジュール32にリストベースポインタ140の値を与えることができる(164)。
一方、MIDIイベントの組が空でない場合(162の「いいえ」)、リストジェネレータモジュール156は、そのMIDIイベントの組からイベントを削除することができる(166)。削除されたイベントを本明細書では「現在のイベント」と呼び、該現在のイベントに関連する1つまたは複数のMIDIボイスを本明細書では「現在のボイス」と呼ぶ。リストジェネレータモジュール156は、MIDIイベントの組から現在のイベントを削除した後、リストベースポインタ140の値がヌルアドレスであるかどうかを判断することができる(168)。リストベースポインタ140の値がヌルアドレスでない場合(168の「いいえ」)、リストジェネレータモジュール156はリスト142に現在のボイスのボイスインジケータを挿入することができる。図8および図9は、リスト142にボイスインジケータを挿入するための例示的な手順を示している。リストジェネレータモジュール156は、リスト142にボイスインジケータを挿入した後、ループバックし、MIDIイベントの組がヌルであるかどうかを再び判断することができる(162)。
リストベースポインタ140の値がヌルアドレスを指定する場合(168の「はい」)、リストジェネレータモジュール156は、現在のボイスのボイスインジケータのリンクリストメモリ42に連続するメモリブロックを割り当てることができる(170)。メモリブロックを割り当てた後、リストジェネレータモジュール156は、リストベースポインタ140中にメモリブロックのメモリアドレスを記憶することができる(172)。次いで、リストジェネレータモジュール156は、ボイスインジケータ数レジスタ144の値を1だけインクリメントすることができる(174)。さらに、リストジェネレータモジュール156は、現在のボイスのボイスインジケータを初期化することができる(176)。ボイスインジケータを初期化するために、リストジェネレータモジュール156は、ボイスインジケータの次のボイスインジケータポインタをヌルに設定し、ボイスインジケータのボイスパラメータセットポインタを、現在のボイスのボイスパラメータセットのボイスパラメータセット146中のメモリアドレスに設定することができる。ボイスインジケータを初期化した後、リストジェネレータモジュール156は、ループバックし、MIDIイベントの組が空であるかどうかを再び判断することができる(162)。
図8は、DSP12がボイスインジケータをボイスインジケータのリスト142に挿入する場合のDSP12の例示的な動作を示す流れ図である。特に、図8の例は、ボイスインジケータがその後リスト142中の適切な位置に挿入できるように、DSP12中のリストジェネレータモジュール156が現在のボイスのボイスインジケータをリスト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の「はい」)、前のボイスインジケータポインタ152の値がヌルアドレスであるかどうかを判断することができる(186)。リストジェネレータモジュール156は、前のボイスインジケータポインタ152の値がヌルアドレスでないと判断した場合(186の「いいえ」)、前のボイスインジケータ(すなわち、前のボイスインジケータポインタ152中のメモリアドレスに等しいメモリアドレスを有するインジケータ)の次のボイスインジケータポインタを、現在のボイスインジケータの次のボイスインジケータポインタの値に設定することができる(188)。前のボイスインジケータの次のボイスインジケータポインタを設定した後、リストジェネレータモジュール156は、イベントボイスインジケータポインタ150の値を現在のボイスインジケータポインタ148の値に設定することができる(190)。前のボイスインジケータポインタ152の値がヌルである場合(186の「はい」)、リストジェネレータモジュール156はまた、イベントボイスインジケータポインタ150の値を現在のボイスインジケータポインタ148の値に設定することができる。このようにして、リストジェネレータモジュール156は、ボイスインジケータの次のボイスインジケータポインタをヌルメモリアドレスに設定することは試みない。リストジェネレータモジュール156は、イベントボイスインジケータポインタ150の値を設定した後、現在のボイスインジケータポインタ148の値をリストベースポインタ140の値に設定することができる(192)。次いで、リストジェネレータモジュール156は、イベントボイスインジケータポインタ150によってポイントされるボイスインジケータを再挿入するために、図9に示された例示的な動作を使用することができる。
リストジェネレータモジュール156は、現在のボイスインジケータのボイスパラメータセットがボイスパラメータセットのメモリアドレスに等しくないと判断した場合(184の「いいえ」)、現在のボイスインジケータの次のボイスインジケータポインタの値がヌルであるかどうかを判断することができる(194)。言い換えれば、リストジェネレータモジュール156は、現在のボイスインジケータがリスト142中の最後のボイスインジケータであるかどうかを判断することができる。リストジェネレータモジュール156は、現在のボイスインジケータの次のボイスインジケータポインタの値がヌルでないと判断した場合(194の「いいえ」)、前のボイスインジケータポインタ152の値を現在のボイスインジケータポインタ148の値に設定することができる(196)。次いで、リストジェネレータモジュール156は、現在のボイスインジケータポインタ148の値を現在のボイスインジケータ中の次のボイスインジケータポインタの値に設定することができる(198)。このようにして、リストジェネレータモジュール156は、現在のボイスインジケータをリスト142中の次のボイスインジケータに進めることができる。次いで、リストジェネレータモジュール156は、ループバックして、新しい現在のボイスインジケータのボイスパラメータセットポインタが現在のボイスのボイスパラメータセットのアドレスに等しいかどうかを再び判断することができる(184)。
一方、リストジェネレータモジュール156は、現在のボイスインジケータの次のボイスインジケータポインタがヌルであると判断した場合(194の「はい」)、現在のボイスのボイスインジケータを位置特定することなしにリスト142の末尾に達する。このために、リストジェネレータモジュール156は、現在のボイスの新しいボイスインジケータを作成することができる。現在のボイスの新しいボイスインジケータを作成するために、リストジェネレータモジュール156は、新しいボイスインジケータにリンクリストメモリ42中のメモリを割り当てることができる(200)。次いで、リストジェネレータモジュール156は、イベントボイスインジケータポインタ150の値を新しいボイスインジケータのメモリアドレスに設定することができる(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の「はい」)、リストジェネレータモジュール156は、イベントボイスインジケータ中の次のボイスインジケータを現在のボイスインジケータポインタ148の値に設定することができる(216)。次のボイスインジケータを設定した後、リストジェネレータモジュール156は、現在のボイスインジケータポインタ148の値がリストベースポインタ140の値に等しいかどうかを判断することができる(218)。言い換えれば、リストジェネレータモジュール156は、現在のボイスインジケータがリスト142中の最初のボイスインジケータであるかどうかを判断することができる。現在のボイスインジケータポインタ148の値がリストベースポインタ140の値に等しい場合(218の「はい」)、リストジェネレータモジュール156は、リストベースポインタ140の値をイベントボイスインジケータポインタ150の値に設定することができる(220)。このようにして、イベントボイスインジケータは、リスト142中の第1のボイスインジケータになる。一方、現在のボイスインジケータポインタ148の値がリストベースポインタ140の値に等しくない場合(218の「いいえ」)、リストジェネレータモジュール156は、前のボイスインジケータ中の次のボイスインジケータポインタの値をイベントボイスインジケータポインタ150の値に設定することができる(222)。このようにして、リストジェネレータモジュール156は、イベントボイスインジケータをリスト142にリンクすることができる。
一方、イベントボイスインジケータによって示されるMIDIボイスが現在のボイスインジケータによって示されるMIDIボイスよりも重要でない場合(214の「いいえ」)、リストジェネレータモジュール156は、現在のボイスインジケータ中の次のボイスインジケータポインタの値がヌルであるかどうかを判断することができる(224)。次のボイスインジケータポインタの値がヌルである場合、現在のボイスインジケータは、リスト142中の最後のボイスインジケータである。現在のボイスインジケータ中の次のボイスインジケータポインタの値がヌルである場合(224の「はい」)、リストジェネレータモジュール156は、現在のボイスインジケータ中の次のボイスインジケータポインタの値をイベントボイスインジケータポインタ150の値に設定することができる(226)。このようにして、イベントボイスインジケータによって示されるボイスがリスト142中の最も重要でないボイスである場合、リストジェネレータモジュール156はイベントボイスインジケータをリスト142の末尾に追加することができる。
しかしながら、現在のボイスインジケータ中の次のボイスインジケータポインタがヌルでない場合(224の「いいえ」)、現在のボイスインジケータはリスト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の「いいえ」)、リスト142からボイスインジケータを削除する必要はない。しかしながら、いくつかの例では、リストジェネレータモジュール156は、リスト142を走査し、現在アクティブでないか、または所与の時間内にアクティブでなかったボイスのボイスインジケータを削除することができる。
ボイスインジケータ数レジスタ144の値がボイスインジケータの最大数よりも大きい場合(240の「はい」)、リストジェネレータモジュール156は、現在のボイスインジケータポインタ148の値をリストベースポインタ140の値に設定することができる(242)。次に、リストジェネレータモジュール156は、前のボイスインジケータポインタ152の値をヌルに設定することができる(244)。この時点で、リストジェネレータモジュール156は、現在のボイスインジケータの次のボイスインジケータポインタの値がヌルであるかどうか(すなわち、現在のボイスインジケータがリスト142中の最後のボイスインジケータであるかどうか)を判断することができる(248)。現在のボイスインジケータの次のボイスインジケータポインタの値がヌルでないと判断した場合(248の「いいえ」)、リストジェネレータモジュール156は、前のボイスインジケータポインタ152の値を現在のボイスインジケータポインタ148の値に設定することができる(250)。次いで、リストジェネレータモジュール156は、現在のボイスインジケータポインタ148の値を現在のボイスインジケータの次のボイスインジケータポインタの値に設定することができる(252)。次に、リストジェネレータモジュール156は、新しい現在のボイスインジケータの次のボイスインジケータポインタの値がヌルに等しいかどうかを再び判断する(248)ために、ループバックすることができる。
現在のボイスインジケータの次のボイスインジケータポインタがヌルに等しい場合(248の「はい」)、現在のボイスインジケータは、リスト142中の最後のボイスインジケータである。次いで、リストジェネレータモジュール156は、リスト142からの最後のボイスインジケータを削除することができる。リスト142から最後のボイスインジケータを削除するために、リストジェネレータモジュール156は、前のボイスインジケータの次のボイスインジケータポインタをヌルに設定することができる(254)。次に、調整モジュール32は、現在のボイスインジケータのリンクリストメモリ42中のメモリの割当てを解除する(256)。次いで、調整モジュール32はボイスインジケータ数レジスタ144の値をデクリメントすることができる(258)。ボイスインジケータ数レジスタ144の値をデクリメントした後、リストジェネレータモジュール156は、ボイスインジケータ数レジスタ144の値がボイスインジケータの最大許容数よりも大きいかどうかを再び判断する(240)ために、ループバックすることができる。
図11は、メモリアドレスが導き出せる指標値を指定するボイスインジケータのリストを使用する例示的なDSP12を示すブロック図である。図11の例では、リスト142中の各ボイスインジケータは、4つのボイスパラメータセット(VPS)指標値を含む32ビットワードと、リスト142中の次のボイスインジケータのメモリアドレスと、を含む。ブロック260中の各VPS指標値は、ボイスパラメータセットのブロック262中のボイスパラメータセットに関連する数を指定することができる。例えば、第1のVPS指標値は、ボイスパラメータセットのブロック262中の第2のボイスパラメータセットを示す数「2」を指定することができる。さらに、ブロック260中の各VPS指標値は、RAMユニット10中の4バイトワードのうちの1バイト(すなわち8ビット)で表せる。VPS指標値が1バイトで表されるので、1個のVPS指標値は、256(すなわち、2=256)個のボイスパラメータセットのうちの1つを示すことができる。
さらに、図11の例では、RAMユニット10は、メモリ位置の連続ブロック262中に各ボイスパラメータセットを記憶する。RAMユニット10が一つの連続ブロック中に各ボイスパラメータセットを記憶するので、あるボイスパラメータセットは、前のボイスパラメータセットの直後のメモリ位置で開始する。
DSP12または調整モジュール32は、ボイスパラメータセットのブロック262中のボイスパラメータセットへのアクセスを必要とする場合、最初に、ブロック260中のボイスパラメータセットの指標値に、セットサイズレジスタ268中に含まれる値を乗算することができる。セットサイズレジスタ268に含まれる値は、1個のボイスパラメータセットが占めるRAMユニット10の中のアドレス可能な位置の数に等しいことができる。次いで、DSP12または調整モジュール32は、セットベースポインタレジスタ266の値を加算することができる。セットベースポインタレジスタ266に含まれる値は、ブロック262中の第1のボイスパラメータセットのメモリアドレスに等しいことができる。このようにして、ボイスパラメータセットの指標にボイスパラメータセットのサイズを乗算し、第1のボイスパラメータセットのメモリアドレスを加算することによって、DSP12または調整モジュール32は、ブロック262中のボイスパラメータセットの第1のメモリアドレスを導き出すことができる。
調整モジュール32が図8〜図10のリスト142中のボイスインジケータを制御した方法とほとんど同じ方法で、DSP12は図11のリスト142中のボイスインジケータを制御することができる。しかしながら、この例示的なデータ構造を使用する場合、DSP12はボイスインジケータ内でVPS指標値をソートすることができる。
図11に示された例示的なデータ構造は、ボイスパラメータセットへの同数のポインタを記憶するために必要なリンクリストメモリ42中のメモリ位置がより少なくて済むので、図6に示された例示的なデータ構造に勝る利点を有することができる。しかしながら、図11に示されたデータ構造は、DSP12および調整モジュール32による追加の計算の実行を必要とすることがある。
図12は、例示的な処理要素34Aの詳細を示すブロック図である。図12の例は処理要素34Aの詳細を示すが、これらの詳細は処理要素34のうちの他の処理要素にも適用可能である。
図12の例に示すように、処理要素34Aは、いくつかの構成要素を備えることができる。これらの構成要素は、限定はしないが、制御ユニット280、論理演算ユニット(ALU)282、マルチプレクサ284、およびレジスタの組286を含むことができる。さらに、処理要素34Aは、VPS RAMユニット46A用の読取りインターフェース先入れ先出し(FIFO)292、VPS RAMユニット46A用の書込みインターフェースFIFO、LFO38用のインターフェースFIFO296、WFU36用のインターフェースFIFO298、総和バッファ40用のインターフェースFIFO300、および総和バッファ40中のRAM用のインターフェースFIFO302を含むことができる。
制御ユニット280は、命令を読み取り、その命令に基づいて処理要素34Aを制御する制御信号を出力する回路の組を備えることができる。制御ユニット280は、現在の命令のメモリアドレスを記憶するプログラムカウンタ290、処理要素34によって実行される第1のプログラムループのカウンタを記憶する第1のループカウンタ304、および処理要素34によって実行される第2のプログラムループのカウンタを記憶する第2のループカウンタ306を含むことができる。ALU282は、レジスタ286のうちの様々なレジスタに記憶された値に様々な算術演算を実行する回路を備えることができる。ALU282は、MIDIボイスのデジタル波形を生成するために特殊なユーティリティを有する算術動作の実行用にスペシャライズされることができる。レジスタ286は、符号付きまたは符号なし値を保持することができる8つの32ビットレジスタの組とすることができる。マルチプレクサ284は、制御ユニット280によって出力される制御信号に基づいて、ALU282、インターフェース読取りFIFO292、インターフェースFIFO296、インターフェースFIFO298、およびインターフェースFIFO302からの出力をレジスタ286のうちの特定のレジスタに導くことができる。
処理要素34Aは、MIDIボイスのデジタル波形の生成用にスペシャライズされたプログラム命令の組を使用することができる。言い換えれば、処理要素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
機能:制御ユニット280に、レジスタRとRの符号付き値の乗算を実行し、積を「shift」によって指定された量だけ左にシフトするようALU282に命令する制御信号を出力させる。積をシフトした後、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
機能:制御ユニット280に、Rの符号付き値とRの符号なし値の乗算を実行し、積を「shift」によって指定された量だけ左にシフトするようALU282に命令する制御信号を出力させる。積をシフトした後、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
機能:制御ユニット280に、レジスタRとRの符号なし値の乗算を実行し、積を「shift」によって指定された量だけ左にシフトするようALU282に命令する制御信号を出力させる。積をシフトした後、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
機能:制御ユニット280に、レジスタRとRの符号付き値の乗算を実行し、積を「shift」によって指定された量だけ左にシフトするようALU282に命令する制御信号を出力させる。積をシフトした後、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
機能:制御ユニット280に、Rの符号付き値とRの符号なし値の乗算を実行し、積を「shift」によって指定された量だけ左にシフトするようALU282に命令する制御信号を出力させる。積をシフトした後、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
機能:制御ユニット280に、レジスタRとRの符号なし値の乗算を実行し、積を「shift」によって指定された量だけ左にシフトするようALU282に命令する制御信号を出力させる。積をシフトした後、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
機能:制御ユニット280に、レジスタRとRの符号なし値の乗算を実行し、積を「shift」によって指定された量だけ左にシフトするようALU282に命令する制御信号を出力させる。次いで、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
機能:制御ユニット280に、レジスタRとRの符号付き値の乗算を実行し、積を「shift」によって指定された量だけ左にシフトするようALU282に命令する制御信号を出力させる。次いで、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:
構文:MACSUD R,R,shift,R,ACC
機能:制御ユニット280に、レジスタRの符号付き値とレジスタRの符号なし値の乗算を実行し、積を「shift」によって指定された量だけ左にシフトするようALU282に命令する制御信号を出力させる。次いで、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への制御信号を出力させる。
MACUUD:
構文:MACUUD R,R,shift,R,ACC
機能:制御ユニット280に、レジスタRとRの符号なし値の乗算を実行し、積を「shift」によって指定された量だけ左にシフトするようALU282に命令する制御信号を出力させる。次いで、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
機能:制御ユニット280に、レジスタRとRの符号付き値の乗算を実行し、積を「shift」によって指定された量だけ左にシフトするようALU282に命令する制御信号を出力させる。次いで、ALU282はACCによって指定された32ビットを積から抽出する。ビットを抽出した後、ALU282は、これらのビットをRの値から減算し、得られたビットを出力する。ACC=0の場合、ALU282は積の下位32ビットを抽出する。ACC=1の場合、ALU282は積の中位32ビットを抽出する。ACC=2の場合、ALU282は積の上位32ビットを抽出する。この命令はまた、ALU282からの出力をレジスタ286中のRに導くために、制御ユニット280にマルチプレクサ284への制御信号を出力させる。
MASSU:
構文:MASSU R,R,shift,R,ACC
機能:制御ユニット280に、レジスタRの符号付き値とレジスタRの符号なし値の乗算を実行し、積を「shift」によって指定された量だけ左にシフトするようALU282に命令する制御信号を出力させる。次いで、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
機能:制御ユニット280に、レジスタRとRの符号なし値の乗算を実行し、積を「shift」によって指定された量だけ左にシフトするようALU282に命令する制御信号を出力させる。制御信号はまた、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
機能:制御ユニット280に、処理要素34Aが現在処理しているMIDIボイスを定義するボイスパラメータセットの組の制御ワードに基づいて操作を選択させる。EGCOMP命令はまた、制御ユニット280に、選択された動作を実行するようALU280に命令する制御信号を出力させる。第1のモードでは、ALU282は、Rの値とRの値を加算し、得られた和を出力する。第2のモードでは、ALU282は、Rの値とRの値の符号なし乗算を実行し、積をshiftで指定された量だけ左にシフトし、シフトされた積の最上位32ビットを出力する。第3のモードでは、ALU282は、Rの値を出力する。第4のモードでは、ALU282は、Rの値を出力する。EGCOMP命令のコンテキストでは、ACC値0は、制御ユニット280に、現在のMIDIボイスの音量エンベロープの新しい値を計算するようALU282に命令する制御信号を出力させることができる。ACC値1は、制御ユニット280に、現在のMIDIボイスの新しい変調エンベロープを計算するようALU282に命令する制御信号を出力させることができる。EGCOMP命令はまた、ALU282からの出力をレジスタ286中のRに導くために、制御ユニット280にマルチプレクサ284への制御信号を出力させる。
モードに関連するEGCOMP命令の演算を行う前に、ALU282は、まずそのモードを計算する。例えば、ALU282は次の式を使用してモードを計算することができる。
Figure 2013152477
すなわち、「mode」の値は、現在のボイスパラメータセットの制御ワード中の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ビットを出力する。
エンベロープ生成とは、個々のミュージカルノートの音量または変調品質をモデル化する方法である。各ミュージカルノートはいくつかのフェーズを有することができる。例えば、ミュージカルノートは、ディレイフェーズ、アタックフェーズ、ホールドフェーズ、ディケイフェーズ、サスティンフェーズ、およびリリースフェーズを有することができる。ディレイフェーズは、アタックフェーズの開始前の時間量を定義することができる。アタックフェーズ中、音量または変調レベルがピークレベルに上げられる。ホールドフェーズ中、音量または変調レベルはピークレベルに維持される。ディケイフェーズ中、音量または変調レベルはサスティンレベルに下げられる。サスティンフェーズの間、音量または変調レベルはサスティンレベルに維持される。リリースフェーズ中、音量または変調レベルは0に減少する。さらに、音量または変調レベルの変化は線形または指数関数的になる。エンベロープ生成フェーズの長さは、サブフレームの見地から定義できる。「サブフレーム」という用語は、MIDIフレームの1/4を指すことができる。例えば、MIDIフレームが10ミリ秒である場合、サブフレームは2.5ミリ秒である。例えば、MIDIボイスのアタックフェーズは、1サブフレームだけ持続し、MIDIボイスのディケイフェーズは、1サブフレームだけ持続し、MIDIボイスのサスティンフェーズは、2サブフレームだけ持続することができる。
EGCOMP命令は、エンベロープ生成を行う演算を実行する。例えば、加算演算(すなわちモード00)は、サブフレームの間の音量または変調レベルの直線的な増加(ramp up)(例えばアタックフェーズ中)、または直線的な減少(ramp down)(すなわちディケイフェーズまたはリリースフェーズ中)に対応することができる。乗算演算(すなわちモード01)は、サブフレームの間の音量または変調レベルの指数関数的な増加または減少(すなわちディケイフェーズまたはリリースフェーズ中)に対応することができる。代入演算(すなわちモード10および11)は、サブフレームの間の音量または変調強度のサスティンに対応することができる。制御ワードでは、ビット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つから情報を読み取るか、またはそれに情報を書き込む命令である。制御ユニット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に等しい場合、addressにおける値をRにロードする。アドレスが偶数である場合、addressおよび(address+1)における値をそれぞれレジスタRおよびRにロードする。addressが奇数である場合、(address−1)およびaddressにおける値をそれぞれRおよびRにロードする。
STOREDATA:
構文:STOREDATA address,R,R
機能:RがRに等しい場合、Rの値をaddressにストアする。addressが偶数である場合、RおよびRにおける値をそれぞれaddressおよび(address+1)にストアする。addressが奇数である場合、RおよびRにおける値をそれぞれ(address−1)およびアドレスにストアする。
LOADSUM:
構文:LOADSUM R,R
機能:サンプルカウントによって示された総和バッファ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のループカウンタに絶対的(implicitly)に依存するサンプルカウンタを送信する。このサンプルカウンタは、処理要素34Aによって現在、デジタル波形のどのサンプルが処理されているかを記述する。制御ユニット280は、調整モジュール32からリセットコマンドを受け取ると、この値を0に初期化する。その後、制御ユニット280は、STORESUM命令に遭遇するたびにサンプルカウンタを1ずつインクリメントする。制御ユニット280は、サンプルカウンタを制御信号として総和バッファ40に出力することができる。acc_sat_modeパラメータは、総和バッファ40がサンプル用の値を飽和するかどうかを規定することができる。飽和は、サンプル用の値が、サンプルに対してストアできる最高数を上回るか、または最低数を下回るときに起こることができる。飽和がイネーブルである場合、Rの値とRの値を加算することにより、サンプル用の値が、サンプルに対して表し得る最高数を上回るか、または最低数を下回るときには、総和バッファ40は、その値を最高数または最低数に維持することができる。飽和がイネーブルでない場合、総和バッファ40は、Rの値とRの値を加算するとき、サンプル用の数をロールオーバすることができる。さらに、acc_sat_modeパラメータは、総和バッファ40が、サンプル用の値の代わりにレジスタRおよびR中の値を使用するか、あるいはレジスタRおよびR中の値を総和バッファ40中のサンプル用の値に加算するかを決定することができる。以下の表は、acc_sat_modeパラメータの例示的な動作を示す。
Figure 2013152477
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位相の両方を更新する
機能:「lfo_id」によって指定された識別子を有するLFO38からの値をRにロードする。さらに、この命令は、その値をRにロードした後、どのパラメータを更新すべきかをLFO38に命令する。
上述のように、LFO38は、1つまたは複数の正確な三角デジタル波形を生成することができる。処理要素34の各々に対して、LFO38は、変調ピッチ値、変調利得値、変調周波数コーナ値、およびビブラートピッチ値という4つの出力値を供給することができる。これらの出力値の各々は、三角デジタル波形の変化を表すことができる。
制御ユニット280は、LOADLFO命令を読み取ると、「lfo_id」パラメータを表す制御信号をLFO38に出力することができる。「lfo_id」パラメータを表すこの制御信号は、出力値のうちの1つの値を処理要素34A中のインターフェースFIFO296に送信するようLFO38に命令することができる。例えば、制御ユニット280が、「lfo_id」の値01を表す制御信号を送信する場合、LFO38は、変調利得出力値の値を送信することができる。さらに、制御ユニット280は、インターフェースFIFO296からの出力をレジスタ286中のレジスタRに導くための制御信号をマルチプレクサ284に出力することができる。
さらに、制御ユニット280は、LOADLFO命令を読み取ると、「lfo_update」パラメータを表す制御信号をLFO38に出力することができる。「lfo_update」パラメータを表すこの制御信号は、どのように出力値を更新すべきかをLFO38に命令する。LFO38は、「lfo_update」パラメータを表す制御信号を受けると、処理要素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 2013152477
この例示的な擬似コードは、処理要素34AおよびLFO38によって実行されるソフトウェア命令を表すものではない。そうではなく、この擬似コードは、処理要素34AおよびLFO38のハードウェアで実行される動作を記述することができる。
制御命令は、制御ユニット280の挙動を制御する命令である。1つの例示的なフォーマットでは、各制御命令は16ビット長である。例えば、ビット15:13は制御命令識別子を含み、ビット12:4はメモリアドレスを含み、ビット3:0は制御用マスクを含む。
処理要素34Aによって使用される制御命令の組は、以下の命令を含む。
JUMPD:
構文:JUMPD address,mask
機能:[mask]とVPS RAMユニット46A中の制御ワードのビット27:24とのビット毎の論理積演算が、0でない値に評価される場合、この命令は、[address]の値をプログラムカウンタ290にロードすることを制御ユニット280に行わせる。制御ワードのビット27は、波形がループされているかどうかを示すことができる。制御ワードのビット26は、波形が8ビット長であるか16ビット長であるかを示すことができる。制御ワードのビット25は、波形がステレオであるかどうかを示す。制御ワードのビット24は、フィルタがイネーブルであるかどうかを示すことができる。制御ユニット280はJUMPD命令に続く命令をすでにロードしているので、プログラムカウンタ290の値の更新は、JUMPD命令に続く命令の後に有効になることができる。
JUMPND:
構文:JUMPND address,mask
機能:[mask]とVPS RAMユニット46A中の制御ワードのビット27:24とのビット毎の論理積演算が、0の値に評価される場合、この命令は、[address]の値をプログラムカウンタ290にロードすることを制御ユニット280に行わせる。ビット毎の論理積演算の結果は、その結果が1をまったく含まない場合、偽に評価される。制御ユニット280はJUMPND命令に続く命令をすでにロードしているので、プログラムカウンタ290の値の更新は、JUMPND命令に続く命令の後に有効になることができる。
LOOP1BEGIN:
構文:LOOP1BEGIN count
機能:第1のループの開始を始動する。制御ユニット280は、LOOP1ENDD命令に[count]+1回遭遇すると、プログラムカウンタ290の値を、LOOP1BEGIN命令に続く命令のメモリアドレスに設定する。さらに、制御ユニット280は、第1のループカウンタ304の値を[count]に等しくなるように設定する。例えば、制御ユニット280は、命令「LOOP1BEGIN 119」に遭遇すると、プログラムカウンタ290の値を、120回のLOOP1BEGIN命令に続く命令のメモリアドレスに設定する。
LOOP1ENDD:
構文:LOOP1ENDD
機能:LOOP1ENDDの後の命令は第1のループ中の最後の命令である。制御ユニット280は、第1のループカウンタ304の値が0よりも大きいかどうかを判断する。第1のループカウンタ304の値が0よりも大きい場合、制御ユニット280は、第1のループカウンタ304の値をデクリメントし、プログラムカウンタ290の値を、LOOP1BEGIN命令に続く命令のメモリアドレスに設定する。そうではなく、第1のループカウンタ304の値が0よりも大きくない場合、制御ユニット280は単にプログラムカウンタ290の値をインクリメントする。
LOOP2BEGIN:
構文:LOOP2BEGIN count
機能:第2のループの開始を始動する。制御ユニット280は、LOOP2ENDD命令に[count]+1回だけ遭遇すると、プログラムカウンタ290の値を、LOOP2BEGIN命令に続く命令のメモリアドレスに設定する。さらに、制御ユニット280は、第2のループカウンタ306の値を[count]に等しくなるように設定する。
LOOP2ENDD:
構文:LOOP2ENDD
機能:LOOP2ENDDの後の命令は第2のループ中の最後の命令である。制御ユニット280は、第2のループカウンタ306をデクリメントし、第2のループカウンタが0でない場合、プログラムカウンタ290の値をLOOP2BEGIN命令のメモリアドレスに設定する。
CTRL_NOP:
構文:CTRL_NOP
機能:制御ユニット280は何も行わない。
EXIT:
構文:EXIT
機能:制御ユニット280は、EXIT命令に遭遇すると、処理要素34AがMIDIフレームの全体的なデジタル波形の生成を完了したことを調整モジュール32に通知するために、調整モジュール32に制御信号を出力する。制御信号を送信した後、調整モジュール32が、プログラムカウンタ290の値を初期値(例えば0)にリセットする信号を制御ユニット280に送信するまで、制御ユニット280は待機する。
処理要素34AがMIDIボイスのデジタル波形の生成を開始する前に、調整モジュール32は、制御ユニット280にリセット信号を送信することができる。制御ユニット280は、調整モジュール32からリセット信号を受け取ると、第1のループカウンタ304、第2のループカウンタ306、およびプログラムカウンタ290の値をそれらの初期値にリセットすることができる。例えば、制御ユニット280は、第1のループカウンタ304、第2のループカウンタ306、およびプログラムカウンタ290の値を0に設定することができる。
その後、調整モジュール32は、VPS RAMユニット46A中に記述されているMIDIボイスのデジタル波形の生成を開始することを処理要素34Aに命令するために、制御ユニット280にイネーブル信号を送信することができる。制御ユニット280がイネーブル信号を受け取ると、処理要素34は、プログラムRAMユニット44A中の連続するメモリ位置に記憶されている一連のプログラム命令(すなわちプログラム)の実行を開始することができる。プログラムRAMユニット44A中のプログラム命令の各々は、上述した命令の組中の命令のインスタンス(instances of instructions)とすることができる。
概して、処理要素34Aによって実行されるプログラムは、第1のループと、第1のループ内で入れ子にされた第2のループとからなることができる。第1のループの各サイクル中、処理要素34Aは、第2のループが終了するまで第2のループ全体を実行することができる。第2のループが終了したとき、処理要素34Aは、MIDIボイスの波形の1つのサンプルのシンボルを導き出していることができる。第1のループが終了したとき、処理要素34Aは、MIDIフレーム全体のMIDIボイスの波形の各サンプルの各シンボルを導き出している。例えば、上記の例示的な命令セットにおける以下の一連の命令は、処理要素34Aによって実行されるプログラムの基本構成を概説することができる。
Figure 2013152477
この例示的な一連の命令では、ダブルスラッシュより後のワードは、記述された動作を実行する1つまたは複数の命令を表す。さらに、この例では、それぞれLOOP1BEGIN命令またはLOOP2BEGIN命令を含むプログラムRAM34A中の位置にアクセスするために、制御ユニット280が、プログラムカウンタ290中の更新されたメモリアドレスを使用する前に、制御ユニット280はLOOP1ENDD命令またはLOOP2ENDD命令に続く命令の実行をすでに開始しているので、LOOP1ENDDおよびLOOP2ENDD命令の後にはCTRL_NOP操作が続く。言い換えれば、制御ユニット280は、すでに、ループ終了命令に続く命令を処理パイプラインに加えていることができる。
プログラムRAMユニット44A中のプログラムを実行するために、制御ユニット280は、プログラムカウンタ290に記憶されているメモリアドレスを有するプログラムRAMユニット44A中のメモリ位置を読み取るために、プログラムRAMユニット44Aに要求を送信することができる。この要求に応答して、プログラムRAMユニット44Aは、プログラムカウンタ290中に記憶されているメモリアドレスを有するプログラムRAMユニット44A中のメモリ位置の内容を制御ユニット280に送信することができる。
要求されたメモリ位置の内容は、処理要素34Aが並列に実行することができる2つのプログラム命令を含む40ビットワードとすることができる。例えば、プログラムRAMユニット44A中の1つのメモリ位置は、以下のうちの1つを含む。
(1)1ワードでのALU命令およびロード/ストア命令、
(2)1ワードでのロード/ストア命令および第2のロード/ストア命令、
(3)1ワードでの制御命令およびロード/ストア命令、または
(4)1ワードでのALU命令および制御命令。
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は、命令の各々をアトミック(atomically)に復号し、適用することができる。言い換えれば、制御ユニット280は、命令の実行を開始した後には、その命令の実行を終了するまで、その命令によって使用または影響されるいかなるデータをも変更しない。さらに、いくつかの例では、制御ユニット280は、プログラムRAMユニット44Aから受け取ったワード中の両方の命令を並列に復号し、適用することができる。制御ユニット280は、ワード中の命令を実行した後には、プログラムカウンタ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は、プログラムメモリからの多重ロードを必要としないので、別々の命令の組として実装した場合よりも少ないクロックサイクルで実行できる。
別の例では、ボイスパラメータセット中の値に基づいて様々な機能を実行するスペシャライズされた命令の使用は、そのような命令を使用するプログラムがよりコンパクトになるので、有利であることができる。例えば、1つのEGCOMP命令によって実行される演算を実装するために10個の別々の命令が必要であることがある。コンパクトなプログラムほど、プログラマにとって読み易くなる。さらに、コンパクトなプログラムほど、プログラムメモリ中で占有する空間が少なくなることができる。コンパクトなプログラムほどプログラムメモリ中で占有する空間が少なくなるので、プログラムメモリ容量が小さくなることができる。小さいプログラムメモリほど、実装費用が安くなり、チップセット上の空間を節約することができる。
図13は、オーディオ装置4のMIDIハードウェアユニット18中の処理要素34Aの例示的な動作を示す流れ図である。図13の例について処理要素34Aを参照しながら説明するが、プロセッサ34の各々は、この動作を同時に実行することができる。
最初に、処理要素34A中の制御ユニット280は、MIDIボイスの新規のデジタル波形の生成を準備するために内部レジスタの値をリセットする制御信号を調整モジュール32から受け取ることができる(320)。制御ユニット280は、リセット信号を受け取ると、第1のループカウンタ304、第2のループカウンタ306、プログラムカウンタ290、およびレジスタ286の値を0にリセットすることができる。
次に、制御ユニット280は、VPS RAMユニット46A中のパラメータを有するMIDIボイスのデジタル波形の生成を開始する為に、調整モジュール32から命令を受け取ることができる(322)。制御ユニット280は、MIDIボイスのデジタル波形の生成を開始するための命令を調整モジュール32から受け取った後、プログラムメモリ44Aからプログラム命令を読み取ることができる(324)。次いで、制御ユニット280は、そのプログラム命令が「Loop End」命令であるかどうかを判断することができる(326)。命令が「Loop End」命令である場合(326の「はい」)、制御ユニット280は、処理要素34A中のレジスタのループカウント値をインクリメントすることができる(328)。一方、命令が「Loop End」命令でない場合(326の「いいえ」)、制御ユニット280は、命令が「EXIT」命令であるかどうかを判断することができる(330)。命令が「EXIT」命令である場合(330の「はい」)、制御ユニット280は、処理要素34AがMIDIボイスのデジタル波形の生成を終了したことを調整モジュール32に通知する制御信号を出力することができる(332)。命令が「EXIT」命令でない場合(330の「いいえ」)、制御ユニット280は、命令を実行させるために、制御信号を出力するか、またはプログラムカウンタ290の値を変更することができる(334)。
1つまたは複数の例示的な実施形態では、記載の機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの組合せで実装できる。ソフトウェアで実装した場合、機能は1つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶できる。コンピュータ可読媒体は、
コンピュータ記憶媒体と通信媒体の両方を含む。記憶媒体は、コンピュータによってアクセスできる任意の使用可能な媒体とすることができる。限定ではなく例として、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD−ROMもしくは他の光ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶装置、または、命令もしくはデータ構造の形態の所望のプログラムコードを運搬または記憶するために使用でき、コンピュータによってアクセスできる他の任意の媒体を備えることができる。本明細書では、ディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザディスク(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)、およびブルーレイディスク(disc)を含み、ディスク(disk)は、通常、データを磁気的に再生し、一方、ディスク(disc)は、データをレーザで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含むべきである。
様々な例について説明した。これらおよび他の例は特許請求の範囲内にある。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
(1) 電子楽器デジタルインターフェース(MIDI)フレーム中に存在するMIDIボイスのデジタル波形を生成するために、処理要素を用いて機械コード命令の組を並列に実行することであって、前記機械コード命令の組中の機械コード命令が、MIDIボイスのデジタル波形の生成用にスペシャライズされた命令セットにおいて定義された機械コード命令のインスタンスである、機械コード命令の組を並列に実行することと、
前記MIDIフレームの全体的なデジタル波形を生成するために前記MIDIボイスの前記デジタル波形を統合することと、
前記全体的なデジタル波形を出力することと、
を備える方法。
(2) 機械コード命令の組を実行することは、前記処理要素のうちの1つの中で、複数の機械コード命令を含むワードをメモリユニットから取り出すことを含む、(1)の方法。
(3) 機械コード命令の組を実行することは、前記処理要素のうちの前記1つを用いて、前記ワード中の前記機械コード命令を並列に実行することをさらに含む、(2)の方法。
(4) 機械コード命令の組を実行することは、MIDIボイスのベース波形を得るために、前記処理要素中の制御ユニットを用いて、波形フェッチユニットに制御信号を出力することを含む、(1)の方法。
(5) 機械コード命令の組を実行することは、前記MIDIフレームの前記全体的なデジタル波形を生成するために、前記処理要素中の制御ユニットを用いて、総和バッファに値を記憶して他の値と統合するための制御信号を前記総和バッファに出力することを含む、(1)の方法。
(6) 機械コード命令の組を実行することは、
前記処理要素中の制御ユニットを用いて、算術動作を行うよう前記処理要素中の論理演算ユニット(ALU)に命令するための制御信号を前記ALUに出力すること
を備え、
前記ALUは、MIDIボイスのデジタル波形を生成するために特殊なユーティリティを有する算術動作の実行用にスペシャライズされている、
(1)の方法。
(7) 制御信号を出力することは、前記ALUに、レジスタの組中のレジスタ中の符号なし値と前記レジスタの組中のレジスタ中の符号なし値とを乗算することによって積を計算させ、シフトされた積を作るために前記積をシフトさせ、前記シフトされた積のビットのうちのいくつかを抽出させ、前記抽出されたビットが前記レジスタの組中のレジスタ中に記憶された数よりも小さい数を表すかどうかを判断させる制御信号を出力することを含む、(6)の方法。
(8) 機械コード命令の組を実行することは、前記処理要素がデジタル波形を生成しているMIDIボイスを定義するボイスパラメータセットのパラメータ中のビットの組とマスクパラメータとのビット毎の論理積演算から0でない値が得られたとき、前記処理要素のうちの1つのプログラムカウンタに機械コード命令のアドレス値をロードすることを含む、(1)の方法。
(9) 機械コード命令の組を実行することは、前記処理要素のうちの1つにおける制御ユニットを用いて、前記処理要素がMIDIボイスのデジタル波形の生成を終了したことを調整モジュールに示すための制御信号を前記調整モジュールに出力することを含む、(1)の方法。
(10) 前記方法は、デジタル信号プロセッサ(DSP)を用いて、前記機械コード命令の組を前記処理要素のプログラムメモリユニットにロードすることをさらに備える、(1)の方法。
(11) 前記方法は、前記DSPを用いて、前記MIDIフレームの前記全体的なデジタル波形を含む連続デジタル波形を出力することをさらに備え、
前記MIDIフレームの前記デジタル波形に基づいてサウンドを出力することは、前記DSPによって出力された前記連続デジタル波形に基づいてサウンドを出力することを含む、
(11)の方法。
(12) 前記方法は、
汎用プロセッサを使用して前記MIDIファイルを解析し、前記MIDIファイルに関連するMIDIイベントをスケジュールすることと、
連続デジタル波形を出力するためにデジタル信号プロセッサ(DSP)を使用して前記MIDIイベントを処理することと、
をさらに備え、
ハードウェアユニットが前記機械コード命令の組を実行する、
(1)の方法。
(13) 前記デジタル波形に基づいてサウンドを出力することは、
前記全体的なデジタル波形をアナログ出力に変換することと、
前記アナログ出力をサウンドとして出力することと、
を含む、(1)の方法。
(14) 前記方法は、ボイスインジケータのリンクリストを生成することをさらに備え、前記リンクリスト中の前記ボイスインジケータの各々は、前記MIDIボイスを定義するボイスパラメータセットを記憶するメモリ位置を指定することによってMIDIフレームのMIDIボイスを示し、前記リンクリスト中の前記ボイスインジケータによって示された前記MIDIボイスは、前記MIDIフレーム中で最大の音響的重要性を有するMIDIボイスであり、
前記リンクリストは、現在のMIDIボイスを示すボイスインジケータを含む、
(1)の方法。
(15) 機械コード命令の組を実行することは、
前記機械コード命令の組のうちの1つの中の機械コード命令を実行すること
を備え、
前記機械コード命令を実行することは、
制御ユニットを用いて前記機械コード命令を読み込むことと、
現在のMIDIボイスを定義するボイスパラメータの組に基づいて動作を選択することと、
前記選択された動作を行わせる制御信号を出力することと、
を備える、
(1)の方法。
(16) 動作を選択することは、前記ボイスパラメータの組中の制御パラメータ中のビットの値を識別することを含む、(15)の方法。
(17) 動作を選択することは、エンベロープ生成動作を選択することを含む、(15)の方法。
(18) 前記機械コード命令を実行することは、モジュールにパラメータ値を供給することをさらに備え、
前記モジュールは、前記動作を選択し、前記選択された動作を行う、
(17)の方法。
(19) モジュールにパラメータ値を供給することは、低周波発振器(LFO)モジュールに前記パラメータ値を供給することを含み、
前記命令を実行することは、
前記LFOモジュール中のレジスタからの値をローカルレジスタに記憶することと、
前記LFOモジュール中の前記レジスタの値を更新することと、
をさらに備える、
(18)の方法。
(20) 機械コード命令の組中の機械コード命令が、MIDIボイスのデジタル波形の生成用にスペシャライズされた命令セットにおいて定義された機械コード命令のインスタンスである、前記機械コード命令の組を記憶するプログラムメモリユニットの組と、
MIDIフレーム中のMIDIボイスのデジタル波形を生成するために前記機械コード命令の組を並列に実行する処理要素の組と、
前記MIDIフレームの全体的なデジタル波形を生成するために前記MIDIボイスの前記デジタル波形を統合する総和バッファと、
を備える装置。
(21) 前記処理要素は、ワードを読み込むことによって前記プログラムメモリユニットから命令を読み込む制御ユニットを備え、前記ワードの各々が複数の命令を含む、(20)の装置。
(22) 前記処理要素のうちの1つは、前記ワードのうちの1つに含まれる前記命令を並列に実行する、(21)の装置。
(23) 前記装置は、
MIDIボイスのベース波形の組を含むメモリユニットと、
前記メモリユニットから前記ベース波形の各々を得る波形フェッチユニットと
をさらに備え、
前記処理要素の各々は、前記命令のうちの1つに遭遇したときにMIDIボイスのベース波形を得るための制御信号を前記波形フェッチユニットに出力する制御ユニットを備える、
(20)の装置。
(24) 前記処理要素の各々は、前記総和バッファに値を記憶するための制御信号を前記総和バッファに出力する制御ユニットを備え、
前記総和バッファは、前記MIDIフレームの前記全体的なデジタル波形を生成するために前記値を統合する、
(20)の装置。
(25) 前記処理要素の各々は、
MIDIボイスのデジタル波形を生成するために特殊なユーティリティを有する算術動作の実行用にスペシャライズされた論理演算ユニット(ALU)と、
算術動作を行うよう前記ALUに命令するための制御信号を前記ALUに出力する制御ユニットと、
を備える、(20)の装置。
(26) 前記処理要素の各々は、レジスタの組をさらに備え、
前記制御ユニットは、前記ALUに、前記レジスタのうちの1つにおける符号なし値と前記レジスタのうちの1つにおける符号なし値とを乗算することによって積を計算させ、シフトされた積を作るために前記積をシフトさせ、前記シフトされた積のビットのうちのいくつかを抽出させ、次いで前記抽出されたビットが前記レジスタのうちの1つに記憶された数よりも小さい数を表すかどうかを判断させる制御信号を出力する、
(25)の装置。
(27) 前記処理要素の各々は、
前記プログラムメモリユニットのうちの1つにおける次の命令のメモリアドレスを含むプログラムカウンタと、
前記処理要素がデジタル波形を生成しているMIDIボイスを定義するボイスパラメータセットのパラメータ中のビットの組とマスクパラメータとのビット毎の論理積演算から0でない値が得られたとき、前記プログラムカウンタに機械コード命令のアドレス値をロードする制御ユニットと、
をさらに備える、(20)の装置。
(28) 前記装置は、前記MIDIフレーム中の前記MIDIボイスを前記処理要素の各々に割り当てる調整モジュールをさらに備え、
前記処理要素の各々は、前記処理要素がMIDIボイスのデジタル波形の生成を終了したことを前記調整モジュールに示すための制御信号を前記調整モジュールに出力する制御ユニットをさらに備える、
(20)の装置。
(29) 前記装置は、前記機械コード命令の組を前記プログラムメモリユニットにロードするデジタル信号プロセッサ(DSP)をさらに備える、(20)の装置。
(30) 前記DSPは、前記MIDIフレームの前記全体的なデジタル波形を含む連続デジタル波形を出力し、
スピーカが前記連続デジタル波形に基づいてサウンドを出力する、
(29)の装置。
(31) 前記装置は、
MIDIフレーム中のMIDIボイスの組のデジタル波形を生成するMIDIハードウェアユニットであって、前記処理要素が前記MIDIハードウェアユニットの構成要素である、MIDIハードウェアユニットと、
MIDIファイルを解析し、前記MIDIファイルに関連するMIDIイベントをスケジュールする汎用プロセッサと、
前記MIDIイベントに基づいて連続デジタル波形を出力するために前記MIDIイベントを処理するDSPと、
をさらに備える、(20)の装置。
(32) 前記装置は、
前記連続デジタル波形をアナログオーディオ信号に変換するデジタルアナログ変換器と、
サウンドを出力するためのスピーカを駆動するために前記アナログオーディオ信号を使用する駆動回路と、
をさらに備える、(31)の装置。
(33) 前記DSPは、
ボイスインジケータのリンクリストを生成するリストジェネレータモジュールであって、前記リンクリスト中の前記ボイスインジケータの各々が、前記MIDIボイスを定義するボイスパラメータセットを記憶するメモリ位置を指定することによってMIDIフレームのMIDIボイスを示す、リストジェネレータモジュール
を備え、
前記リンクリスト中の前記ボイスインジケータによって示された前記MIDIボイスは、前記MIDIフレーム中で最大の音響的重要性を有するMIDIボイスであり、
前記リンクリストは、現在のMIDIボイスを示すボイスインジケータを含み、
前記処理要素が、前記リンクリスト中の前記ボイスインジケータによって示されたMIDIボイスのデジタル波形を生成する、
(32)の装置。
(34) 前記処理ユニットの各々は、制御ユニットを備え、
前記命令の少なくとも1つは、現在のMIDIボイスを定義するボイスパラメータの組に基づいて動作を選択するための制御信号を出力することと、前記選択された動作を行わせる信号を出力することとを前記制御ユニットに行わせる、
(20)の装置。
(35) 前記処理要素は、数学的動作を行う論理演算ユニット(ALU)をさらに備え、
前記制御ユニットは、前記動作を選択し、
前記制御ユニットは、前記選択された動作を行うよう前記ALUに命令する制御信号を前記ALUに出力する、
(34)の装置。
(36) 前記制御ユニットは、エンベロープ生成計算命令を読み取ったとき、前記動作を選択する、(35)の装置。
(37) 前記装置は、三角デジタル波形を生成する低周波発振器(LFO)をさらに備え、
前記LFOは、前記動作を選択し、
前記LFOは、前記選択された動作を行う、
(34)の装置。
(38) 前記処理要素は、レジスタの組を備え、
前記制御ユニットは、前記三角波形のサンプルを前記レジスタのうちの1つに記憶し、前記LFOによって生成された前記三角波形を更新するための制御信号を前記LFOに出力する、
(37)の装置。
(39) 前記装置は、前記デジタル波形に基づいてサウンドを出力する1つまたは複数のスピーカをさらに備える、(20)の装置。
(40) プログラマブルプロセッサに、
MIDIフレーム中に存在するMIDIボイスのデジタル波形を生成するために、処理要素を用いて機械コード命令の組を並列に実行することを処理要素の組に行わせることと、
ここで、前記機械コード命令の組中の機械コード命令は、MIDIボイスのデジタル波形の生成用にスペシャライズされた命令セットにおいて定義された機械コード命令のインスタンスであり、
前記MIDIフレームの全体的なデジタル波形を生成するために前記MIDIボイスの前記デジタル波形を統合することを総和バッファに行わせることと、
前記全体的なデジタル波形を出力することを前記総和バッファに行わせることと、
を行わせる命令を備えるコンピュータ可読媒体。
(41) 機械コード命令の組を並列に実行することを処理要素の組に行わせることを前記プログラマブルプロセッサに行わせる前記命令は、MIDIボイスのベース波形を得るための制御信号を波形フェッチユニットに出力することを前記処理要素中の制御ユニットに行わせることを前記プログラマブルプロセッサに行わせる、(40)のコンピュータ可読媒体。
(42) 機械コード命令の組を並列に実行することを処理要素の組に行わせることを前記プログラマブルプロセッサに行わせる前記命令は、算術動作を行うよう前記処理要素中の論理演算ユニット(ALU)に命令するための制御信号を前記ALUに出力することを前記処理要素中の制御ユニットに行わせることを前記プログラマブルプロセッサに行わせ、前記ALUは、MIDIボイスのデジタル波形を生成するために特殊なユーティリティを有する算術動作の実行用にスペシャライズされている、(40)のコンピュータ可読媒体。
(43) 機械コード命令の組中の機械コード命令が、MIDIボイスのデジタル波形の生成用にスペシャライズされた命令セットにおける機械コード命令のインスタンスである、前記機械コード命令の組を記憶するための手段と、
MIDIボイスのデジタル波形を生成するために前記機械コード命令の組を並列に実行するための手段と、
前記MIDIフレームの全体的なデジタル波形を生成するために前記MIDIボイスの前記デジタル波形を統合するための手段と、
前記全体的なデジタル波形を出力するための手段と、
を備える装置。
(44) 前記装置は、
MIDIボイスのベース波形の組を収容するための手段と、
前記ベース波形の組を収容するための前記手段から前記ベース波形の各々を得るための手段と、
をさらに備え、
前記処理要素の各々は、前記命令のうちの1つに遭遇したときにMIDIボイスのベース波形を得るための制御信号を、前記ベース波形の各々を得るための前記手段に出力する手段を備える、
(43)の装置。
(45) 前記機械コード命令の組を実行するための前記手段は、
MIDIボイスのデジタル波形を生成するために特殊なユーティリティを有する算術動作を行うための手段と、
算術動作を行うよう前記算術動作を行うための手段に命令するための制御信号を、前記算術動作を行うための手段に出力するための手段と、
を備える、(43)の装置。

Claims (45)

  1. 電子楽器デジタルインターフェース(MIDI)フレーム中に存在するMIDIボイスのデジタル波形を生成するために、処理要素を用いて機械コード命令の組を並列に実行することであって、前記機械コード命令の組中の機械コード命令が、MIDIボイスのデジタル波形の生成用にスペシャライズされた命令セットにおいて定義された機械コード命令のインスタンスであり、前記ペシャライズされた命令セットにおいて定義された機械コード命令が汎用命令セット中または複合命令セットアーキテクチャ命令セット中に見つからないプログラム命令を含む、機械コード命令の組を並列に実行することと、
    前記MIDIフレームの全体的なデジタル波形を生成するために前記MIDIボイスの前記デジタル波形を統合することと、
    前記全体的なデジタル波形を出力することと、
    を備える方法。
  2. 機械コード命令の組を実行することは、前記処理要素のうちの1つの中で、複数の機械コード命令を含むワードをメモリユニットから取り出すことを含む、請求項1の方法。
  3. 機械コード命令の組を実行することは、前記処理要素のうちの前記1つを用いて、前記ワード中の前記機械コード命令を並列に実行することをさらに含む、請求項2の方法。
  4. 機械コード命令の組を実行することは、MIDIボイスのベース波形を得るために、前記処理要素中の制御ユニットを用いて、波形フェッチユニットに制御信号を出力することを含む、請求項1の方法。
  5. 機械コード命令の組を実行することは、前記MIDIフレームの前記全体的なデジタル波形を生成するために、前記処理要素中の制御ユニットを用いて、総和バッファに値を記憶して他の値と統合するための制御信号を前記総和バッファに出力することを含む、請求項1の方法。
  6. 機械コード命令の組を実行することは、
    前記処理要素中の制御ユニットを用いて、算術動作を行うよう前記処理要素中の論理演算ユニット(ALU)に命令するための制御信号を前記ALUに出力すること
    を備え、
    前記ALUは、MIDIボイスのデジタル波形を生成するために特殊なユーティリティを有する算術動作の実行用にスペシャライズされている、
    請求項1の方法。
  7. 制御信号を出力することは、前記ALUに、レジスタの組中のレジスタ中の符号なし値と前記レジスタの組中のレジスタ中の符号なし値とを乗算することによって積を計算させ、シフトされた積を作るために前記積をシフトさせ、前記シフトされた積のビットのうちのいくつかを抽出させ、前記抽出されたビットが前記レジスタの組中のレジスタ中に記憶された数よりも小さい数を表すかどうかを判断させる制御信号を出力することを含む、請求項6の方法。
  8. 機械コード命令の組を実行することは、前記処理要素がデジタル波形を生成しているMIDIボイスを定義するボイスパラメータセットのパラメータ中のビットの組とマスクパラメータとのビット毎の論理積演算から0でない値が得られたとき、前記処理要素のうちの1つのプログラムカウンタに機械コード命令のアドレス値をロードすることを含む、請求項1の方法。
  9. 機械コード命令の組を実行することは、前記処理要素のうちの1つにおける制御ユニットを用いて、前記処理要素がMIDIボイスのデジタル波形の生成を終了したことを調整モジュールに示すための制御信号を前記調整モジュールに出力することを含む、請求項1の方法。
  10. 前記方法は、デジタル信号プロセッサ(DSP)を用いて、前記機械コード命令の組を前記処理要素のプログラムメモリユニットにロードすることをさらに備える、請求項1の方法。
  11. 前記方法は、前記DSPを用いて、前記MIDIフレームの前記全体的なデジタル波形を含む連続デジタル波形を出力することをさらに備え、
    前記全体的なデジタル波形を出力することは、前記DSPによって出力された前記連続デジタル波形に基づいてサウンドを出力することを含む、
    請求項10の方法。
  12. 前記方法は、
    汎用プロセッサを使用して前記MIDIファイルを解析し、前記MIDIファイルに関連するMIDIイベントをスケジュールすることと、
    連続デジタル波形を出力するためにデジタル信号プロセッサ(DSP)を使用して前記MIDIイベントを処理することと、
    をさらに備え、
    ハードウェアユニットが前記機械コード命令の組を実行する、
    請求項1の方法。
  13. 前記全体的なデジタル波形を出力することは、
    前記全体的なデジタル波形をアナログ出力に変換することと、
    前記アナログ出力をサウンドとして出力することと、
    を含む、請求項1の方法。
  14. 前記方法は、ボイスインジケータのリンクリストを生成することをさらに備え、前記リンクリスト中の前記ボイスインジケータの各々は、前記MIDIボイスを定義するボイスパラメータセットを記憶するメモリ位置を指定することによってMIDIフレームのMIDIボイスを示し、前記リンクリスト中の前記ボイスインジケータによって示された前記MIDIボイスは、前記MIDIフレーム中で最大の音響的重要性を有するMIDIボイスであり、
    前記リンクリストは、現在のMIDIボイスを示すボイスインジケータを含む、
    請求項1の方法。
  15. 機械コード命令の組を実行することは、
    前記機械コード命令の組のうちの1つの中の機械コード命令を実行すること
    を備え、
    前記機械コード命令を実行することは、
    制御ユニットを用いて前記機械コード命令を読み込むことと、
    現在のMIDIボイスを定義するボイスパラメータの組に基づいて動作を選択することと、
    前記選択された動作を行わせる制御信号を出力することと、
    を備える、
    請求項1の方法。
  16. 動作を選択することは、前記ボイスパラメータの組中の制御パラメータ中のビットの値を識別することを含む、請求項15の方法。
  17. 動作を選択することは、エンベロープ生成動作を選択することを含む、請求項15の方法。
  18. 前記機械コード命令を実行することは、モジュールにパラメータ値を供給することをさらに備え、
    前記モジュールは、前記動作を選択し、前記選択された動作を行う、
    請求項17の方法。
  19. モジュールにパラメータ値を供給することは、低周波発振器(LFO)モジュールに前記パラメータ値を供給することを含み、
    前記命令を実行することは、
    前記LFOモジュール中のレジスタからの値をローカルレジスタに記憶することと、
    前記LFOモジュール中の前記レジスタの値を更新することと、
    をさらに備える、
    請求項18の方法。
  20. 機械コード命令の組中の機械コード命令が、MIDIボイスのデジタル波形の生成用にスペシャライズされた命令セットにおいて定義された機械コード命令のインスタンスであり、前記ペシャライズされた命令セットにおいて定義された機械コード命令が汎用命令セット中または複合命令セットアーキテクチャ命令セット中に見つからないプログラム命令を含む、前記機械コード命令の組を記憶するプログラムメモリユニットの組と、
    MIDIフレーム中のMIDIボイスのデジタル波形を生成するために前記機械コード命令の組を並列に実行する処理要素の組と、
    前記MIDIフレームの全体的なデジタル波形を生成するために前記MIDIボイスの前記デジタル波形を統合する総和バッファと、
    を備える装置。
  21. 前記処理要素は、ワードを読み込むことによって前記プログラムメモリユニットから命令を読み込む制御ユニットを備え、前記ワードの各々が複数の命令を含む、請求項20の装置。
  22. 前記処理要素のうちの1つは、前記ワードのうちの1つに含まれる前記命令を並列に実行する、請求項21の装置。
  23. 前記装置は、
    MIDIボイスのベース波形の組を含むメモリユニットと、
    前記メモリユニットから前記ベース波形の各々を得る波形フェッチユニットと
    をさらに備え、
    前記処理要素の各々は、前記命令のうちの1つに遭遇したときにMIDIボイスのベース波形を得るための制御信号を前記波形フェッチユニットに出力する制御ユニットを備える、
    請求項20の装置。
  24. 前記処理要素の各々は、前記総和バッファに値を記憶するための制御信号を前記総和バッファに出力する制御ユニットを備え、
    前記総和バッファは、前記MIDIフレームの前記全体的なデジタル波形を生成するために前記値を統合する、
    請求項20の装置。
  25. 前記処理要素の各々は、
    MIDIボイスのデジタル波形を生成するために特殊なユーティリティを有する算術動作の実行用にスペシャライズされた論理演算ユニット(ALU)と、
    算術動作を行うよう前記ALUに命令するための制御信号を前記ALUに出力する制御ユニットと、
    を備える、請求項20の装置。
  26. 前記処理要素の各々は、レジスタの組をさらに備え、
    前記制御ユニットは、前記ALUに、前記レジスタのうちの1つにおける符号なし値と前記レジスタのうちの1つにおける符号なし値とを乗算することによって積を計算させ、シフトされた積を作るために前記積をシフトさせ、前記シフトされた積のビットのうちのいくつかを抽出させ、次いで前記抽出されたビットが前記レジスタのうちの1つに記憶された数よりも小さい数を表すかどうかを判断させる制御信号を出力する、
    請求項25の装置。
  27. 前記処理要素の各々は、
    前記プログラムメモリユニットのうちの1つにおける次の命令のメモリアドレスを含むプログラムカウンタと、
    前記処理要素がデジタル波形を生成しているMIDIボイスを定義するボイスパラメータセットのパラメータ中のビットの組とマスクパラメータとのビット毎の論理積演算から0でない値が得られたとき、前記プログラムカウンタに機械コード命令のアドレス値をロードする制御ユニットと、
    をさらに備える、請求項20の装置。
  28. 前記装置は、前記MIDIフレーム中の前記MIDIボイスを前記処理要素の各々に割り当てる調整モジュールをさらに備え、
    前記処理要素の各々は、前記処理要素がMIDIボイスのデジタル波形の生成を終了したことを前記調整モジュールに示すための制御信号を前記調整モジュールに出力する制御ユニットをさらに備える、
    請求項20の装置。
  29. 前記装置は、前記機械コード命令の組を前記プログラムメモリユニットにロードするデジタル信号プロセッサ(DSP)をさらに備える、請求項20の装置。
  30. 前記DSPは、前記MIDIフレームの前記全体的なデジタル波形を含む連続デジタル波形を出力し、
    スピーカが前記連続デジタル波形に基づいてサウンドを出力する、
    請求項29の装置。
  31. 前記装置は、
    MIDIフレーム中のMIDIボイスの組のデジタル波形を生成するMIDIハードウェアユニットであって、前記処理要素が前記MIDIハードウェアユニットの構成要素である、MIDIハードウェアユニットと、
    MIDIファイルを解析し、前記MIDIファイルに関連するMIDIイベントをスケジュールする汎用プロセッサと、
    前記MIDIイベントに基づいて連続デジタル波形を出力するために前記MIDIイベントを処理するDSPと、
    をさらに備える、請求項20の装置。
  32. 前記装置は、
    前記連続デジタル波形をアナログオーディオ信号に変換するデジタルアナログ変換器と、
    サウンドを出力するためのスピーカを駆動するために前記アナログオーディオ信号を使用する駆動回路と、
    をさらに備える、請求項31の装置。
  33. 前記DSPは、
    ボイスインジケータのリンクリストを生成するリストジェネレータモジュールであって、前記リンクリスト中の前記ボイスインジケータの各々が、前記MIDIボイスを定義するボイスパラメータセットを記憶するメモリ位置を指定することによってMIDIフレームのMIDIボイスを示す、リストジェネレータモジュール
    を備え、
    前記リンクリスト中の前記ボイスインジケータによって示された前記MIDIボイスは、前記MIDIフレーム中で最大の音響的重要性を有するMIDIボイスであり、
    前記リンクリストは、現在のMIDIボイスを示すボイスインジケータを含み、
    前記処理要素が、前記リンクリスト中の前記ボイスインジケータによって示されたMIDIボイスのデジタル波形を生成する、
    請求項32の装置。
  34. 前記処理ユニットの各々は、制御ユニットを備え、
    前記命令の少なくとも1つは、現在のMIDIボイスを定義するボイスパラメータの組に基づいて動作を選択するための制御信号を出力することと、前記選択された動作を行わせる信号を出力することとを前記制御ユニットに行わせる、
    請求項20の装置。
  35. 前記処理要素は、数学的動作を行う論理演算ユニット(ALU)をさらに備え、
    前記制御ユニットは、前記動作を選択し、
    前記制御ユニットは、前記選択された動作を行うよう前記ALUに命令する制御信号を前記ALUに出力する、
    請求項34の装置。
  36. 前記制御ユニットは、エンベロープ生成計算命令を読み取ったとき、前記動作を選択する、請求項35の装置。
  37. 前記装置は、三角デジタル波形を生成する低周波発振器(LFO)をさらに備え、
    前記LFOは、前記動作を選択し、
    前記LFOは、前記選択された動作を行う、
    請求項34の装置。
  38. 前記処理要素は、レジスタの組を備え、
    前記制御ユニットは、前記三角波形のサンプルを前記レジスタのうちの1つに記憶し、前記LFOによって生成された前記三角波形を更新するための制御信号を前記LFOに出力する、
    請求項37の装置。
  39. 前記装置は、前記デジタル波形に基づいてサウンドを出力する1つまたは複数のスピーカをさらに備える、請求項20の装置。
  40. プログラマブルプロセッサに、
    MIDIフレーム中に存在するMIDIボイスのデジタル波形を生成するために、処理要素を用いて機械コード命令の組を並列に実行することを処理要素の組に行わせることと、
    ここで、前記機械コード命令の組中の機械コード命令は、MIDIボイスのデジタル波形の生成用にスペシャライズされた命令セットにおいて定義された機械コード命令のインスタンスであり、
    前記ペシャライズされた命令セットにおいて定義された機械コード命令は、汎用命令セット中または複合命令セットアーキテクチャ命令セット中に見つからないプログラム命令を含み、
    前記MIDIフレームの全体的なデジタル波形を生成するために前記MIDIボイスの前記デジタル波形を統合することを総和バッファに行わせることと、
    前記全体的なデジタル波形を出力することを前記総和バッファに行わせることと、
    を行わせる命令を備えるコンピュータ可読媒体。
  41. 機械コード命令の組を並列に実行することを処理要素の組に行わせることを前記プログラマブルプロセッサに行わせる前記命令は、MIDIボイスのベース波形を得るための制御信号を波形フェッチユニットに出力することを前記処理要素中の制御ユニットに行わせることを前記プログラマブルプロセッサに行わせる、請求項40のコンピュータ可読媒体。
  42. 機械コード命令の組を並列に実行することを処理要素の組に行わせることを前記プログラマブルプロセッサに行わせる前記命令は、算術動作を行うよう前記処理要素中の論理演算ユニット(ALU)に命令するための制御信号を前記ALUに出力することを前記処理要素中の制御ユニットに行わせることを前記プログラマブルプロセッサに行わせ、前記ALUは、MIDIボイスのデジタル波形を生成するために特殊なユーティリティを有する算術動作の実行用にスペシャライズされている、請求項40のコンピュータ可読媒体。
  43. 機械コード命令の組中の機械コード命令が、MIDIボイスのデジタル波形の生成用にスペシャライズされた命令セットにおける機械コード命令のインスタンスであり、前記ペシャライズされた命令セットにおいて定義された機械コード命令が汎用命令セット中または複合命令セットアーキテクチャ命令セット中に見つからないプログラム命令を含む、前記機械コード命令の組を記憶するための手段と、
    MIDIボイスのデジタル波形を生成するために前記機械コード命令の組を並列に実行するための手段と、
    前記MIDIフレームの全体的なデジタル波形を生成するために前記MIDIボイスの前記デジタル波形を統合するための手段と、
    前記全体的なデジタル波形を出力するための手段と、
    を備える装置。
  44. 前記装置は、
    MIDIボイスのベース波形の組を収容するための手段と、
    前記ベース波形の組を収容するための前記手段から前記ベース波形の各々を得るための手段と、
    をさらに備え、
    前記実行するための手段の各々は、前記ベース波形の各々を得るための前記手段に、前記命令のうちの1つに遭遇したときにMIDIボイスのベース波形を得るための制御信号を出力する手段を備える、
    請求項43の装置。
  45. 前記機械コード命令の組を実行するための前記手段は、
    MIDIボイスのデジタル波形を生成するために特殊なユーティリティを有する算術動作を行うための手段と、
    算術動作を行うよう前記算術動作を行うための手段に命令するための制御信号を、前記算術動作を行うための手段に出力するための手段と、
    を備える、請求項43の装置。
JP2013044659A 2007-03-22 2013-03-06 電子楽器デジタルインターフェースハードウェア命令セット Pending JP2013152477A (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US89640207P 2007-03-22 2007-03-22
US60/896,402 2007-03-22
US11/780,040 2007-07-19
US11/780,040 US7663052B2 (en) 2007-03-22 2007-07-19 Musical instrument digital interface hardware instruction set

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2010501070A Division JP2010522359A (ja) 2007-03-22 2008-03-17 電子楽器デジタルインターフェースハードウェア命令セット

Publications (1)

Publication Number Publication Date
JP2013152477A true JP2013152477A (ja) 2013-08-08

Family

ID=39775902

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2010501070A Pending JP2010522359A (ja) 2007-03-22 2008-03-17 電子楽器デジタルインターフェースハードウェア命令セット
JP2013044659A Pending JP2013152477A (ja) 2007-03-22 2013-03-06 電子楽器デジタルインターフェースハードウェア命令セット

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2010501070A Pending JP2010522359A (ja) 2007-03-22 2008-03-17 電子楽器デジタルインターフェースハードウェア命令セット

Country Status (7)

Country Link
US (1) US7663052B2 (ja)
EP (1) EP2126896A2 (ja)
JP (2) JP2010522359A (ja)
KR (1) KR101120968B1 (ja)
CN (1) CN101641732B (ja)
TW (1) TWI361425B (ja)
WO (1) WO2008118669A2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8295957B2 (en) * 2007-12-05 2012-10-23 Disney Enterprises, Inc. Method and system providing a customized audio presentation tailored to a predetermined event sequence
CN109119053B (zh) * 2018-08-08 2021-07-02 瓦纳卡(北京)科技有限公司 一种信号传输方法、装置、电子设备以及计算机可读存储介质
CN110351927A (zh) * 2019-07-16 2019-10-18 浙江创意声光电科技有限公司 灯光秀控制方法及系统
JP2021066199A (ja) * 2019-10-17 2021-04-30 本田技研工業株式会社 制御装置
US11317203B2 (en) * 2020-08-04 2022-04-26 Nuvoton Technology Corporation System for preventing distortion of original input signal

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05274143A (ja) * 1992-03-30 1993-10-22 Toshiba Corp 複合条件処理方式
JPH06301380A (ja) * 1993-04-12 1994-10-28 Kawai Musical Instr Mfg Co Ltd 電子楽器
JPH07191671A (ja) * 1993-12-27 1995-07-28 Yamaha Corp 楽音信号発生装置
JPH0922287A (ja) * 1995-07-05 1997-01-21 Yamaha Corp 楽音波形生成方法
JP2000089759A (ja) * 1995-05-19 2000-03-31 Yamaha Corp 音生成方法
JP2003223316A (ja) * 2002-01-31 2003-08-08 Matsushita Electric Ind Co Ltd 演算処理装置

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0715295B1 (en) 1994-11-29 2000-01-19 Yamaha Corporation Automatic playing apparatus substituting available pattern for absent pattern
US5744741A (en) 1995-01-13 1998-04-28 Yamaha Corporation Digital signal processing device for sound signal processing
US6326537B1 (en) 1995-09-29 2001-12-04 Yamaha Corporation Method and apparatus for generating musical tone waveforms by user input of sample waveform frequency
US6209096B1 (en) * 1996-07-02 2001-03-27 Yamaha Corporation Method and device for storing main information with associated additional information incorporated therein
JP3285137B2 (ja) * 1996-08-05 2002-05-27 ヤマハ株式会社 楽音発生装置および楽音発生方法、並びに該方法に係るプログラムを記憶した記憶媒体
EP0823699B1 (en) 1996-08-05 2001-05-30 Yamaha Corporation Software sound source
US6034314A (en) 1996-08-29 2000-03-07 Yamaha Corporation Automatic performance data conversion system
US6055619A (en) 1997-02-07 2000-04-25 Cirrus Logic, Inc. Circuits, system, and methods for processing multiple data streams
US5913258A (en) 1997-03-11 1999-06-15 Yamaha Corporation Music tone generating method by waveform synthesis with advance parameter computation
US6610917B2 (en) * 1998-05-15 2003-08-26 Lester F. Ludwig Activity indication, external source, and processing loop provisions for driven vibrating-element environments
US6740804B2 (en) 2001-02-05 2004-05-25 Yamaha Corporation Waveform generating method, performance data processing method, waveform selection apparatus, waveform data recording apparatus, and waveform data recording and reproducing apparatus
US7126051B2 (en) * 2001-03-05 2006-10-24 Microsoft Corporation Audio wave data playback in an audio generation system
CA2411622A1 (en) 2002-11-12 2004-05-12 Catena Networks Canada Inc. Silent ringing with reduced device sizes
US7112737B2 (en) * 2003-12-31 2006-09-26 Immersion Corporation System and method for providing a haptic effect to a musical instrument
JP4315110B2 (ja) * 2005-02-16 2009-08-19 ヤマハ株式会社 電子音楽装置及びプログラム

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05274143A (ja) * 1992-03-30 1993-10-22 Toshiba Corp 複合条件処理方式
JPH06301380A (ja) * 1993-04-12 1994-10-28 Kawai Musical Instr Mfg Co Ltd 電子楽器
JPH07191671A (ja) * 1993-12-27 1995-07-28 Yamaha Corp 楽音信号発生装置
JP2000089759A (ja) * 1995-05-19 2000-03-31 Yamaha Corp 音生成方法
JPH0922287A (ja) * 1995-07-05 1997-01-21 Yamaha Corp 楽音波形生成方法
JP2003223316A (ja) * 2002-01-31 2003-08-08 Matsushita Electric Ind Co Ltd 演算処理装置

Also Published As

Publication number Publication date
TWI361425B (en) 2012-04-01
US7663052B2 (en) 2010-02-16
WO2008118669A3 (en) 2009-04-09
KR101120968B1 (ko) 2012-03-13
CN101641732A (zh) 2010-02-03
WO2008118669A2 (en) 2008-10-02
KR20090130864A (ko) 2009-12-24
EP2126896A2 (en) 2009-12-02
CN101641732B (zh) 2013-02-13
TW200844977A (en) 2008-11-16
JP2010522359A (ja) 2010-07-01
US20080235494A1 (en) 2008-09-25

Similar Documents

Publication Publication Date Title
JP5134078B2 (ja) 楽器ディジタルインタフェースハードウエア命令
US7069058B2 (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) オーディオ・デバイスにおける参照波形の取得のための帯域幅制御
JP2010522362A5 (ja)
KR100502639B1 (ko) 채널들간에 파라미터들을 공유하는 톤 발생기 장치
JPH08160961A (ja) 音源装置
JP2010522364A (ja) 楽器用デジタルインターフェース(midi)ファイルを処理するためのパイプライン技法
US7893343B2 (en) Musical instrument digital interface parameter storage
KR20120127747A (ko) 오디오 파일을 처리하기 위해 공유된 버퍼 관리
JP2004309521A (ja) Pcm音源装置

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140117

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140304

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20140417

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20140422

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20141007