JP5510813B2 - 楽音生成装置 - Google Patents

楽音生成装置 Download PDF

Info

Publication number
JP5510813B2
JP5510813B2 JP2010066569A JP2010066569A JP5510813B2 JP 5510813 B2 JP5510813 B2 JP 5510813B2 JP 2010066569 A JP2010066569 A JP 2010066569A JP 2010066569 A JP2010066569 A JP 2010066569A JP 5510813 B2 JP5510813 B2 JP 5510813B2
Authority
JP
Japan
Prior art keywords
page
waveform
error
transfer
channel
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.)
Active
Application number
JP2010066569A
Other languages
English (en)
Other versions
JP2011197550A (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.)
Yamaha Corp
Original Assignee
Yamaha Corp
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 Yamaha Corp filed Critical Yamaha Corp
Priority to JP2010066569A priority Critical patent/JP5510813B2/ja
Priority to US13/052,919 priority patent/US8183452B2/en
Priority to EP11159392A priority patent/EP2369581B1/en
Priority to CN201110076001.0A priority patent/CN102237126B/zh
Publication of JP2011197550A publication Critical patent/JP2011197550A/ja
Application granted granted Critical
Publication of JP5510813B2 publication Critical patent/JP5510813B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、波形メモリ方式の楽音生成装置に関し、特に、NAND型フラッシュメモリ等に波形データを格納しておき、そこから波形データをバッファ経由で波形メモリに読出しつつ再生を行う楽音生成装置に関する。
従来より、ハードディスク(HD)に波形データを格納しておき、該HDからバッファに波形データを読出しつつ、該バッファから波形データを波形メモリに読出して、再生する楽音生成装置が知られている(例えば、特許文献1,2)。このような楽音生成装置では、発音指示があってからHD上の波形データをバッファ経由で波形メモリに読出して再生するのでは発音開始に遅れがでてしまうので、装置の電源オン時に、予め各波形データの先頭部を波形メモリ上に読込むようにしている。そして、発音指示があったとき、直ちに波形メモリ上の当該先頭部のデータの再生を開始し、その先頭部の再生を行っている間に、引き続く波形データをHDからバッファ経由で波形メモリに読出す。先頭部の再生が終わった後は、前記波形メモリに読出してある波形データの再生を行いつつ、その再生の間に、次にさらに引き続く波形データをHDからバッファ経由で波形メモリに読出す。このような処理を繰り返して、再生を続ける。これにより、発音指示があったときに遅れなく発音開始することができる。
上記の方式では、バッファに読込まれた1クラスタ分の波形データ(サンプルデータ)が波形メモリに読出されるごとに(すなわち、バッファが空になると)、CPUに対して転送要求割込みが発生する。該転送要求割込みに応じて、CPUは、次に読出すべきHD上の1クラスタを特定して、そのクラスタのHDからバッファへの転送を転送部に指示する。従って、CPUの割り込み処理は必須である。
また、バースト転送を利用した波形メモリ音源として、下記特許文献3に記載の技術がある。これは、波形メモリから読出した波形サンプルを一旦バッファメモリに記憶し、バッファメモリから必要な波形サンプルを選択的に読出して楽音生成するものである。波形メモリからバッファメモリへの波形サンプルの読出しは、複数サンプル単位でバースト転送する。バースト転送することにより、アクセス時間を短縮することができる。
一方、近年ではNAND型フラッシュメモリの大容量化およびコスト低下が進み、種々の装置で、大容量のデータ格納手段として、HDとともにNAND型フラッシュメモリを使用する試みが為されている。NAND型フラッシュメモリは、ページ(HDのクラスタに相当する)の頭出しに時間がかかるが、読出しが始まった後のデータ転送速度は速い。また、エラー訂正コードによるエラー訂正が必須である。
特許第2671747号公報 特許第4089687号公報 特許第3163984号公報
上述のHDを利用した楽音生成装置では、HDのアクセス速度がボトルネックとなり、同時に再生できるch数が制限されるという問題がある。楽音生成装置では、できる限り同時発音ch数を増やすことが望まれる。そこで、HDを利用する代わりにNAND型フラッシュメモリを使用することが考えられる。NAND型フラッシュメモリは、HDと比べてデータの転送速度が格段に速いため、読出しの単位であるクラスタ(ページ)のサイズを大幅に小さくする(10分の1以下)ことができる。しかしながら、その場合、CPUに対する転送要求の割込みの頻度が大幅に増加してしまう(10倍以上)。すなわち、音源で使用する波形データを格納するメモリとしてNAND型フラッシュメモリを使用する場合は、音源を制御するCPUによる制御が必要とされる頻度が高くなり、CPUにかかる負荷が大きく増加するという問題がある。そのため、従来のHDを利用した楽音生成装置ではCPUが処理プログラムに従って行っていた制御を、NAND型フラッシュメモリを利用した楽音生成装置では音源のハードウェアに実行させ、CPU負荷を下げることが望まれる。
また、NAND型フラッシュメモリでは、他のメモリと比べて読出されるデータにエラーが含まれる可能性が高く、そのためデータを記憶する際には、ページ毎に適宜エラー訂正コードを付与して記憶することが必須である。HDにも同様のデータエラーの問題があったが、従来のHDを利用した楽音生成装置では、HD装置内のプロセッサのファームウェア処理としてデータ訂正が自動的に行われていた。そのため、その介在するプロセッサのためにアドレスを供給してからデータが得られるまでの時間遅れを生じていた。NAND型フラッシュメモリを利用した楽音生成装置では、アクセスの高速化のため、NAND型フラッシュメモリのLSIと楽音生成装置のLSIとの間にプロセッサを介在させないことが望まれる。その場合、NAND型フラッシュメモリ自身ではデータ訂正を行うことができない。
現在、市場には、NAND型フラッシュメモリに波形データを記憶した音源(楽音発生装置)があるが、その音源では、音源の楽音生成動作に先立って、CPUが、予めNAND型フラッシュメモリから必要とされる波形データを全て読出し、エラー訂正して、RAMで構成される波形メモリに記憶するようになっている。この場合、波形データのサイズは、RAMで構成される波形メモリのサイズにより制限されてしまうという問題がある。
本発明は、NAND型フラッシュメモリ等に波形データを格納しておき、そこから波形データをバッファ経由で波形メモリに読出しつつ再生を行う楽音生成装置において、CPUにかかる負荷を軽減し、NAND型フラッシュメモリ等から読出したデータについてのエラー検出と訂正を、CPUやフラッシュメモリ内のプロセッサを利用することなく、楽音生成部内のハードウェアを利用して実現できるようにすることを目的とするものである。
上記目的を達成するため、請求項1に係る発明は、制御部(CPU)への割り込み無しで、NAND型フラッシュメモリ等に格納した波形データのページ単位での読出しを行い、波形メモリのバッファにサンプル補充ができるようにするとともに、NAND型フラッシュメモリ等から読出したデータについてのエラー検出と訂正を楽音生成部内のエラー訂正部で行うようにしたことを特徴とする。まず、外部メモリ(NAND型フラッシュメモリ等)に、複数の各波形データの一連のサンプルデータを各ページ毎にエラー訂正コード付きで記憶しておく。制御部が発音開始を指示する際には、制御レジスタに、発音する楽音の音高に応じた速度情報、発音に使用する波形データの波形メモリの先頭波形領域を指す先頭波形アドレス、発音に使用する波形データの外部メモリ中の位置を示す波形位置情報、および発音する楽音の振幅を規定する振幅制御情報を設定する。発音開始時には、予め波形データの先頭ページのサンプルデータを記憶した先頭波形領域からサンプルデータを読出し、その先頭ページの読出しが終了する前に、次に読出すべきページをバッファに読込んでおく。以後は、1ページ分の読出しが終了するごとに次のページのサンプルをバッファに読込みつつ再生を続ける。また、サンプルデータ読出しの際には、ページごとに、エラー訂正部によりエラー訂正コードを用いてエラー検出と訂正を行って楽音生成を継続する。
請求項2に係る発明は、請求項1において、エラーが検出されたとき、エラー検出部が、そのエラーが発生した外部メモリ上のページを特定する情報と、そのエラーが訂正できたか否かを示す情報を含むエラー通知を、制御部に送り、制御部は、(1)前記エラー通知が訂正可のエラーであった場合は、そのエラーが発生した当該ページを特定する情報を、代替待ちページとして記録し、(2)前記エラー通知が訂正不可のエラーであった場合は、正常な楽音生成が行えない旨を示す警告を出力することを特徴とする。
請求項3に係る発明は、請求項2において、制御部は、代替待ちページとして記録されているページがあるとき、自動的に起動されたバックグラウンド処理で、または、ユーザの指示により起動された処理で、外部メモリ上に代替ページを確保し、代替待ちページとして記録されているページのデータを読出し、該読出しでエラーが発生した場合はエラー訂正を行って適正なデータを求め、該適正なデータを前記代替ページに格納して、エラーが発生したページを置き換えることを特徴とする。
請求項4に係る発明は、請求項1〜3において、エラー検出部は、転送部によるバッファ領域へのサンプルデータの書込みが読出部によるバッファ領域からのサンプルデータの読出しに間に合わなかったことを検出し、間に合わなかった場合は、当該チャンネルで生成中の楽音の音量を急速減衰させるとともに、そのような転送エラーが発生した旨を示すエラー通知を、制御部に送り、制御部は、エラー通知を受けて、正常な楽音生成が行えない旨を示す警告を出力することを特徴とする。
請求項5に係る発明は、請求項4において、制御部は、1ページ分のサンプルデータをサンプリング周期ごとに1サンプルの速度で再生した場合の再生時間である基本再生期間に外部メモリから読出し可能な最大ページ数を「全帯域幅」と呼び、チャンネル割り当てを行う際、該チャンネルで生成する楽音の速度情報に応じて基本再生期間のうちに読出す必要のあるサンプルデータのページ数を「帯域幅」と呼ぶとき、発音割り当てした全チャンネルの帯域幅の和が全帯域幅を超えないようにチャンネル割り当てを制御し、転送エラーのエラー通知を受けたとき、前記全帯域幅を所定数だけ下げることを特徴とする。
請求項6に係る発明は、請求項1〜5において、前記外部メモリは、独立した集積回路で構成されるNAND型フラッシュメモリであることを特徴とする。
本発明によれば、転送部によるページ単位の転送は、転送待ちキューからの指示に応じて、制御部(CPU)に対する割り込みを行うことなしに、自動的に行われる。従って、制御部の負荷は軽減できる。また、エラー訂正コードに基づく波形データの読出しエラーの検出と訂正可であった場合の訂正が自動で行われるので、そのようなエラーがあった場合でも楽音生成を継続することができる。また、訂正不可のエラーが発生した場合は、当該チャンネルの楽音信号が自動的に消音される。従って、制御部は、外部メモリに係る各種処理を行う必要がなく、負荷が軽減されレスポンスのよい制御を行うことができる。
また、訂正可のエラーが発生した場合は、該エラーがあったページの記録をとっておき、後の適宜のタイミングでエラーページの代替を行う。この場合、エラーが発生した時点ではユーザへの通知を行わないので、演奏中のユーザを邪魔しない。エラーページが代替されるので、訂正不可なデータエラーが発生する確率を下げることができる。それに対し、データエラーが訂正不可な場合は、直ちに、ユーザに警告を行い、正常な楽音生成が行えないことを通知する。さらに、転送エラーが発生した場合は、直ちに、ユーザに警告を行い、正常な楽音生成が行えないことを通知する。また、「全帯域幅」を所定数だけ下げて、転送エラーが起きにくくなるようにする。
本発明の実施の形態に係る楽音信号生成システムの全体構成図 NAND型フラッシュメモリのメモリマップを示す図 波形メモリのメモリマップを示す図 波形データの転送のタイミングを説明するためのタイムチャート図 音源部と転送制御部に関する詳細図 発音開始以降の各種アドレスの時間変化(1ch分)を示す図 メイン処理およびノートオンイベント処理のフローチャート 転送指示発生氏のVPアドレス発生部の処理およびB→M転送部の処理のフローチャート 代替待ちページの登録がある場合の処理のフローチャート
以下、図面を用いて本発明の実施の形態を説明する。
図1は、本発明の実施の形態に係る楽音生成装置の全体構成を示す。この楽音生成装置は、楽器用LSI(Large Scale Integrated circuit)100にメモリ等の所定の周辺機器を接続して構成される。
CPU101は、装置全体の動作を制御する処理装置である。メモリI/F(インターフェース)102は、本LSI100にNOR型フラッシュメモリ121を接続するためのインターフェースである。NOR型フラッシュメモリ121は、CPU101が実行するプログラムや音色データなどの各種のデータを格納した書き替え可能な不揮発性メモリである。ランダムアクセスメモリ(RAM)103は、各種ワーク領域に使用する揮発性メモリである。表示器I/F104、パラレルI/F105、およびシリアルI/F106は、それぞれ、表示器122、操作子123、およびMIDI I/O124を接続するためのインターフェースである。表示器122は、各種の情報を表示するためのディスプレイである。操作子123は、外部パネル等に設けられた各種のスイッチなどの操作子である。MIDI I/O124は、各種のMIDI機器と接続しMIDI信号を入出力するインターフェースである。
メモリI/F107は、NAND型フラッシュメモリ125にアクセスするためのインターフェースである。NAND型フラッシュメモリ125は、複数の波形データ等を格納した書き替え可能な不揮発性メモリであり、ページ単位でデータが読み書きされる。1ページのページデータの容量は2112バイトである。ページ単位のデータ読出しは、バースト転送で高速に行うことができる。NAND型フラッシュメモリ125のメモリマップは、図2で詳しく説明する。転送バッファ109は、NAND型フラッシュメモリ125から波形メモリ126への波形データ転送用のバッファメモリであり、同時読み書きが可能なデュアルポート(2−port)の半導体メモリにより構成されている。その容量は、1ページ分2112バイトである。転送バッファ109は、スタティックRAM(SRAM)で構成されている。波形メモリ126は、シンクロナスダイナミックRAM(SDRAM)で構成されている。波形メモリ126のメモリマップは、図3で詳しく説明する。メモリI/F112は、波形メモリ126にアクセスするためのインターフェースである。なお、転送バッファ109と波形メモリ126とは、ランダムアクセス(個別にアドレスを指定して行う読出しまたは書込み)を、フラッシュメモリ125に比較して、極めて高速に行うことができる。さらに、連続したアドレスへのアクセスは、バーストモードを用いて高速化することができる。
F→B転送部108は、NAND型フラッシュメモリ125から転送バッファ109にページデータをページ単位で転送する処理を行う。B→M転送部110は、転送バッファ109から波形メモリ126に波形データを(1ページ分を所定回数に分けて)転送する処理を行う。エラー訂正部111は、フラッシュメモリ125から読出したデータに対するエラー検出や訂正等の処理を行う。これらの転送部108,110およびエラー訂正部111は、転送制御部113による制御の元で動作する。転送の動作のタイミングについては、図4などで詳しく説明する。転送制御部113は、フラッシュメモリ125から転送バッファ109への転送と転送バッファ109から波形メモリ126への転送とを制御する。複数の転送要求が生じた場合は、(1度に1ページしか転送できないので)先着順に1ページずつ転送するよう制御する。なお、現在入手できるNAND型フラッシュメモリのデータ幅は8ビットに限定される。そのため、F→B転送部108は、NAND型フラッシュメモリ125の連続する2アドレスから読出した2データをつなげて16ビットのデータに変換し、データ幅が16ビットである転送バッファ109に書込む。また、波形メモリ126のデータ幅も16ビットであり、各アドレスに16ビットのデータが記憶される。従って、B→M転送部110は、上記F→B転送部108で行っているような変換を行わなくてよい。
音源114は、複数の発音ch(ここでは128chとする)を備えており、各発音ch毎に読出しアドレスを生成して波形メモリ126から波形データ(波形サンプルデータ)を読出し、読出された波形データに対してエンベロープ付与を行い、各発音ch毎の楽音信号を生成する。さらに、音源114は、生成された複数chの楽音信号を混合し、混合された楽音信号に対してリバーブなどの効果を付与する。音源114から出力された楽音信号は、DAC(ディジタルアナログ変換器)127によりアナログ音響信号に変換され、サウンドシステム128により放音される。115は各部を相互に接続するバスラインであり、コントロールバス、データバス、およびアドレスバスを総称したものである。
図2を参照して、NAND型フラッシュメモリ125のメモリマップを説明する。NAND型フラッシュメモリは、マスクROMよりもコストが安く、ページの頭出し(ここで言う「頭出し」とは、フラッシュメモリにリードコマンドとリードアドレスが与えられてからデータ読出しが開始されるまでの時間区間あるいはそこで行われる処理を指すものとする)に時間が掛かるが、読出しが始まった後のデータ転送速度は速い(バースト転送)という特徴を有する。NAND型フラッシュメモリ125の読出しと書込みはページ単位で行われる。
フラッシュメモリ125上の1ページのページデータ2112バイトは、2048バイトをデータエリアに、64バイトを付加情報に、それぞれ利用する。付加情報はエラー訂正コードを含む。データエリアに2048バイトのデータを書込む際には、その書込みデータから所定の演算によりエラー訂正コードを生成し、付加情報内に書込む。ページデータの読出し時には、付加情報内のエラー訂正コードにより、データエリアから読出した2048バイトのデータにエラーが無いかチェックすることができ、さらにエラーがある場合には(エラーのビット数が所定数以下であれば)訂正処理を行うことができる。なお、エラー訂正コードの生成には、ハミング符号法やBCH法等の周知の方法に基づく生成演算式を用いればよい。一般的に、各生成演算式毎に、エラーが生じた場合のエラーの状態(何ビットのエラーか、訂正できるか)を算出するエラー検出演算式、および、訂正できる場合の訂正すべきビット位置を算出するエラー訂正演算式が決まっている。演算式毎に、βビットのエラー訂正コードにより、データエリア内のαバイトのデータのうちの最大何ビットのエラーまで訂正できるかが決まっている。
図2(a)は、フラッシュメモリ125の全体のメモリマップを示す。フラッシュメモリ125は、実ページアドレスでアクセスできる複数の実ページを備え、それらのページにデータを格納する。フラッシュメモリ125には、予めアドレス変換テーブル(A変換TBL)201と波形データ(広義)202を格納しておく。アドレス変換テーブル201と波形データ202とはページを分けて格納するものとする。
図2(a)の波形データ(広義)202の実ページアドレス空間に対し、実ページアドレスと仮想ページアドレスが1対1に対応するように仮想ページアドレス空間を設定する。ここでは実ページアドレス空間と仮想ページアドレス空間は、何れも20ビットのページアドレスでアクセスできる範囲を想定するものとする。
図2(b)は、波形データの仮想アドレス空間上でのデータ構造を示す。波形データ202の領域には、複数の波形データWave1,Wave2,…が格納されている。各波形データは、例えば図中のWave2に示すように、仮想ページアドレスで連続する複数のページW2(0)+Inf,W2(1)+Inf,…に順に格納されている。各波形データWavex(xは1,2,…)の仮想ページアドレスで連続する各ページのデータエリア、あるいは該データエリアに記憶する波形サンプルデータ(1024ワード)を、Wx(0),Wx(1),…と表記する。1ページデータは、そのようなデータエリアの波形サンプルデータに付加情報Inf(64バイト)を付加したものであるので、各データエリアの記号に「+Inf」を付けて表記した。上述したとおり、付加情報Infはエラー訂正コードを含む。各波形データWavexは仮想ページアドレスで連続する複数のページに格納されているので、例えばWave2を読出す場合、先頭のページW2(0)+Infの仮想ページアドレスPが与えられれば、引き続く各ページW2(1)+Inf,W2(2)+Inf,…は、それぞれ仮想ページアドレスP+1,P+2,…で読出せる。なお、図2(b)では、各波形データWave1,Wave2,…の間に空きページが無いかのように図示したが、空きページがあってもよい。1つの波形データが仮想ページアドレス上で連続していればよい。図2(b)中、WAは、波形データの第2仮想ページWx(1)+Infの仮想ページアドレスを設定する制御レジスタの1つである(後に詳しく説明する)。
上記では「仮想ページアドレスで各ページを読出せる」と説明したが、実際には、与えられた仮想ページアドレスを実ページアドレスに変換して、フラッシュメモリ125からページを読出す必要がある。本実施形態のLSI100では、仮想ページアドレスと実ページアドレスとの変換方式として、モード1と2の2方式のうちの何れかを指定できる。
モード1について説明する。モード1では、図2(c)に示すように、連続する16ページを1ブロックとするブロックの概念を導入する。図2(a)の波形データ202の領域は、ブロック単位に分けて使用するものとし、1ブロック内では実ページアドレスの昇順に波形データを連続して格納する。例えば、1つの波形データWave2をフラッシュメモリ125に格納する際には、該波形データを格納するのに必要な数のブロックをフラッシュメモリ125内に確保し、第1のブロックに先頭ページW2(0)+InfからW2(15)+Infを順に格納し、次のブロックにW2(16)+InfからW2(31)+Infを格納し、…というように格納すればよい。別の波形データ(例えば、Wave1とWave2)は異なるブロックに格納するものとする。なお、ブロックは、ブロック同士の境界が16ページ単位でバウンダリ調整されるように設定する。
図2(d)に、モード1における仮想ページアドレスから実ページアドレスへの変換の具体的な手法を示す。20ビットの仮想ページアドレス(ページ番号)221が与えられたとする。該アドレス221の上位16ビットはブロックを特定するための仮想ブロック番号であり、下位4ビットはそのブロック内の16ページの中から1つのページを特定するデータである。上位16ビットの仮想ブロック番号は、アドレス変換テーブル222を用いて、実ページアドレス223の上位16ビットに変換される。仮想ページアドレス221の下位4ビットは、ブロック内の16ページの中から1つのページを特定するデータとして、そのまま実ページアドレス223の下位4ビットとされる。以上のようにして得た実ページアドレス223によりフラッシュメモリ125をアクセスして、当該仮想ページアドレス221のページデータを読出す。
アドレス変換テーブル222は、システム立ち上げ時にフラッシュメモリ125の領域201から読出して波形メモリ126に設定し、利用する。図2(a)では単に「アドレス変換テーブル201」と表記したが、実際には、この領域201の複数ページのデータエリア内のデータを合せることにより有意なアドレス変換テーブルが得られる。領域201の複数ページのデータエリアには、予めフラッシュメモリ125に波形データを格納したときに、仮想ブロック番号と実ブロック番号との対応関係を全て登録しておく。領域201を構成する複数ページの実ページアドレスは予め決めておく。なお、図2(b)の付加情報Inf中の「次ページへのポインタNP」は、次のモード2において利用するデータであり、モード1では不要である。
モード2について説明する。モード2の場合は、波形データをフラッシュメモリ125に格納する際に、図2(b)に示すように、各ページデータの付加情報Inf内に3バイトの「次ページへのポインタNP」を設定する。この「次ページへのポインタNP」には、波形データの進行順で次ページ(当該ページの次の波形サンプルが格納されているページ)の実ページアドレスを設定しておく。図2(e)に、Wave2のモード2における実アドレス上のページのデータ構造例を示す。仮想ページの先頭ページであるW2(0)+Infの実ページアドレスが与えられれば、該ページデータ中の「次ページへのポインタNP」を参照して次の仮想ページW2(1)+Infにアクセスでき、以下同様にしてページを辿ることができ、波形データを順に読出すことができる。
なお、詳しくは後述するが、モード1,2の何れの場合も各波形データWave1,2,…の全ての先頭ページWx(0)がシステム立上げ時に波形メモリ126のプリロード領域に設定されているので、モード2の場合、第2仮想ページWx(1)+Infの仮想ページアドレスWAから開始して次ページへのポインタNPによりページを辿ることになる。最初に与えられた第2仮想ページアドレスWAから実ページアドレスへの変換は、波形メモリ126上に読出されているアドレス変換テーブルを利用して行う。逆に言えば、アドレス変換テーブルには、各波形データWave1,Wave2,…の第2仮想ページアドレスと、その第2仮想ページアドレスを変換した実ページアドレスとを対応付けて格納しておけばよい。図2(d)で説明したモード1の場合のアドレス変換テーブルは、アドレスとして16ビットの仮想ブロック番号を与えると、そのアドレスに記憶されている16ビットの実ブロック番号を出力するテーブルであるが、モード2の場合は、各波形データWave1,Wave2,…の20ビットの第2仮想ページアドレスを与えると、アドレス変換テーブルに記憶されている第2仮想ページアドレス中から一致する第2仮想ページアドレスをサーチして、一致する第2仮想ページアドレスが見つかれば、その第2仮想ページアドレスに対応付けられ記憶されている20ビットの実ページアドレスを出力するテーブルである。図2(a)の領域201には、予めフラッシュメモリ125に波形データを格納したときに、上記第2仮想ページアドレスと実ページアドレスとの対応関係を全て登録しておく。
上記モード1および2では、何れも1つの波形が仮想アドレス上で連続した複数のページに記憶されているので、どのページを読出すかページ毎に指示しなくてもよく、ch毎に読出し開始時に読出し対象の波形データの最初の仮想ページアドレスを指示するだけで済む。なお、NAND型フラッシュメモリ125は、8ビット幅でデータを読み書きするものとする。
図3は、波形メモリ126のメモリマップを示す。波形メモリ126には、アドレス変換テーブル領域301、プリロード領域302、バッファ領域303、および次ページアドレス領域(NPA)304が設けられている。アドレス変換テーブル領域301には、システム立ち上げ時に、図2(a)のフラッシュメモリ125の所定領域201から読出したアドレス変換テーブルを設定する。プリロード領域302は、図2(b)に示したNAND型フラッシュメモリ125に記憶されている波形データWave1,2,…の数分の各先頭ページの波形データW1(0),W2(0),W3(0),…を記憶する領域である。プリロード領域302への各先頭ページの波形データの記憶は、システム立ち上げ時に行われる。バッファ領域303には、発音ch数×2のバッファ、すなわち各発音ch毎の2つのバッファ(1つのバッファの大きさは1ページ=1024ワードである)が設けられている。発音chi(iは1,2,…,128)に対応する領域をBia,Bibで表す。Bia,Bibは、波形メモリ126のアドレス空間内に連続して配置される。
なお、「ページ」および「ページデータ」の語は、フラッシュメモリ125および転送バッファ109上では、付加情報Infを含む2112バイトのページおよび該ページ中のデータを示すものであるが、波形メモリ126上では、付加情報Infを含まない1024ワードのデータエリアおよび該データエリア中の波形サンプルデータを示すものとする。要するに、フラッシュメモリ125や転送バッファ109上の「ページ」は読出しや書込みを行うときの単位に注目しており、フラッシュメモリ125から読出されエラー訂正され波形メモリ126に設定されたときには1ページが1024ワードの波形サンプルデータとしてとらえているものである。
システム立ち上げ時に実行する、波形メモリ126のアドレス変換テーブル領域301へのアドレス変換テーブルの設定、および、各波形データの先頭ページWx(0)のプリロード領域302への設定は、主として転送制御部113の初期設定処理により実行される。このプリロード領域302の初期設定処理を簡易に行うために、各波形データWave1,2,…のそれぞれの先頭ページをフラッシュメモリ125の実ページアドレスで連続する所定領域にまとめて記憶するようにしてもよい。
図3(a)中、PAは、音源114が波形メモリ126から波形サンプルを読出す際、最初に読出すべきプリロード領域302中の先頭ページの読出しアドレスを設定する制御レジスタの1つである。この図では第2chで波形データWave3の再生が指定されたケースを示しており、PAで波形メモリ126上のその先頭ページの波形データW3(0)が指定されている。矢印311は、音源114が当該先頭ページの波形サンプルを読出す際の読出しアドレス(ピッチカウンタ)の進行方向を示す。BAは、前記プリロード領域302の先頭ページを読み終えた後、バッファ領域303中のどのバッファから波形サンプルを読出すかを示す読出しアドレスを設定する制御レジスタの1つである。この図では第2chでの再生が指定されているので、ページW3(0)を読み終えた時点の初期値として、BAには、第2chが使用するバッファB2a,B2bの先頭アドレスが設定される。矢印312は、読出しアドレス(ピッチカウンタ)の進行方向を示す。矢印312のようにバッファB2aとB2bを読出した後、引き続きバッファの先頭に戻って矢印313,314のように読出しを続ける。このような波形メモリの読出しを行うためには、プリロード領域W3(0)の読出しを行っている間に、次に読出すべき波形サンプルデータをバッファB2aに格納し、さらにバッファB2aを読出している間にバッファB2bに波形サンプルデータを格納し、次にバッファB2bを読出している間にバッファB2aに波形サンプルデータを格納し、…というようにバッファB2aとB2bとを交互に使用して再生を続ける。なお、各chのバッファ数は3以上であってもよい。また、波形メモリ126は、16ビット幅でデータを読み書きするものとする。
次ページアドレス領域(NPA)304には、各発音chの次ページアドレスを格納する。図3(b)にNPA304のマップを示す。NPAiが、第ichの次ページアドレスを示す。次ページアドレスNPAiとは、第ichについて、次にフラッシュメモリ125から波形メモリ126のバッファ領域に読出すべきページの、フラッシュメモリ125上の実ページアドレスである。次ページアドレスNPAiの設定のタイミングや設定データの詳細については後に詳しく説明する。
図4は、転送制御部113の制御の元で転送部108,110が実行する波形データの転送のタイミングを説明するためのタイムチャートである。矢印tの向きに時間が進むものとする。複数の縦線401はサンプリングクロックの発生タイミングを示し、隣り合う縦線401の間の区間が1サンプリング周期(以下、1DACという)を示している。本実施形態では、1DACは22.67n秒である。「NAND型フラッシュ→転送バッファ」と記載したタイムチャートは、F→B転送部108によりNAND型フラッシュメモリ125から転送バッファ109に1ページ分の波形サンプルと付加情報を転送する処理のタイムチャートである。「転送バッファ→波形メモリ」と記載したタイムチャートは、B→M転送部110により転送バッファ109から波形メモリ126のバッファ領域303(その中の指定したchに対応するバッファ)に、1ページ分の波形サンプルを転送する処理、および、音源114が波形メモリ126から波形サンプルを読出す処理のタイムチャートである。
411は、NAND型フラッシュメモリ125に実ページアドレスを供給し始めてから、同メモリ125内にてその実ページアドレスが示すページのデータの出力準備が完了するまでの、ページ頭出しを行っている期間を示す。頭出し411の後、412,413に示すように、1ページ分のデータ(データエリアの2048バイトおよび付加情報Infの64バイト)がページ読出し(バースト転送)される。本実施形態では、411〜413に示すように、4DACでNAND型フラッシュメモリ125から1ページのデータおよび付加情報を読出して転送バッファ109に書込むことができる。この4DACという転送時間は、NAND型フラッシュメモリ125のページ読出し(バースト転送)に関する仕様に基づいて決まるものである。
421は、音源114が楽音生成のために波形メモリ126から128ch分の波形サンプルを読出す期間である。422は、転送バッファ109上のデータエリアの1ページ分の波形サンプルを波形メモリ126の対応するchのバッファに転送する期間を示す。この転送は、LSI100の内部レジスタからDRAMへのデータ転送であり、バーストモードによる高速なデータ転送を行うものとする。423は、波形メモリ126のリフレッシュを行う期間である。リフレッシュ423の区間の時間長さは、波形メモリ126の仕様により決まる。1DACからリフレッシュ423の区間を除いた区間を、波形サンプル読出し区間421とバースト転送区間422とで分けあう。
1DAC中の波形サンプル読出し区間421の時間長さは、本装置で何chの楽音生成を行うか、および、各chで何点補間を行うかという要求仕様、並びに、音源114が時分割で各chの波形サンプルを波形メモリ126から読出すときにどれ程の時間分解能で1DAC中に何サンプル読出し可能かという仕様に基づいて、設計者が決める。1DAC中のバースト転送422の区間の時間長さは、この区間で何サンプルの転送を行う必要があるかという要求仕様、および、転送バッファ109から波形メモリ126へのバースト転送に関する速度の仕様に基づいて、設計者が決める。ただし、転送バッファ109は読出しと書込みが同時に実行可能なメモリで、その大きさは1ページ分の波形データ+付加情報分であるから、フラッシュメモリ125から転送バッファ109へ読出した1ページ分の波形サンプル(2048バイト)は、基本的にフラッシュメモリ125から転送バッファ109へのページ読出しにかかるDAC数と同じDAC数で、転送バッファ109から波形メモリ126に転送する必要がある。従って、1回のバースト転送422の区間では、1ページデータのサンプル数を前記DAC数で割ったサンプル数(小数点以下切上げ)の転送を行う必要がある。本実施形態では、フラッシュメモリ125の1ページ分のデータエリアのデータ2048バイト=1024サンプルを転送バッファ109に読出すのに4DACかかるので、転送バッファ109に読出された1ページ分の波形サンプルを波形メモリ126に転送するのも4DACに分けて行う。従って、1回のバースト転送区間422では、1ページ分のデータ2048バイト=1024サンプルの4分の1に当たる256サンプルを転送する。
本実施形態では、各chは2点補間を行い、全部で128chの楽音生成を行うことを前提とし、その処理を可能にするために必要な波形サンプル読出し区間421の時間長さが確保されているものとする。また、1DACから波形サンプル読出し区間421とリフレッシュ423を除いた区間422で、256サンプル(ワード)のバースト転送が可能なハードウェアを用いているものとする。
ここで、エラー訂正部111によるエラー訂正処理について説明する。区間412,413のフラッシュメモリ125から転送バッファ109へのデータ転送は、F→B転送部108により行われるが、該転送中に、エラー訂正部111は、その転送データを解析してエラー訂正演算処理を行う。431は該エラー訂正演算処理を行う時間区間を示す。エラー訂正演算処理は、転送しているデータに所定の演算を施すことによりエラー訂正コードを算出し、付加情報Infに記録されているエラー訂正コードと比較することにより、転送データ中のエラーを検出し、検出されたエラーが訂正可能か否かを判定し、訂正可能である場合は該エラーが検出されたビット位置を特定する処理である。エラー検出処理は、区間412のフラッシュメモリ125から転送バッファ109へのデータ転送が開始された直後から順次行うことができるので、区間412のデータ転送の開始タイミングの直後からエラー訂正演算処理431を開始している。エラー訂正部111は、データ転送412の進行とともにエラー訂正演算処理431の区間でエラー検出の処理を実行してエラー訂正コードを算出し、付加情報Infの転送413が終了すると、該算出されたエラー訂正コードと該付加情報Infに含まれるエラー訂正コードとに基づいて所定のエラー判定演算を行い、最終的にエラーの有無とエラーがあった場合のエラー訂正の可否とエラー訂正が可の場合のエラー訂正箇所を確定する。一方、エラーの有無にかかわらず、B→M転送部110は、転送バッファ109上の1024サンプルを4回の区間422で波形メモリ126に書込む。エラー訂正部111は、エラー訂正演算処理431の結果に基づいて、エラーが検出され該エラーの訂正箇所が取得されている場合は、区間425で波形メモリ126上の当該波形データに対してエラー訂正を施す。なお、エラー訂正する対象は、モード1の場合はデータエリアの2048バイトのデータ、モード2の場合はデータエリアの2048バイトと次ページへのポインタNPを合わせたデータである。すなわち、モード2の場合は、データエリアと次ページへのポインタNPを合わせたデータに対するエラー訂正コードが各ページに格納されているものとする。
また、転送バッファ→波形メモリのバースト転送は、NAND型フラッシュ→転送バッファの転送が開始されたタイミングから2DAC遅れたDAC周期から開始する。これは、付番412に示した2048バイト=1024サンプルの1ページデータを付番422に示したバースト転送で256サンプルずつ4回に分けて転送することが可能となるように(要するに4回のバースト転送422のそれぞれについて、そのバースト転送が開始するまでに、そのバースト転送で転送する256サンプルのデータがNAND型フラッシュメモリ125から転送バッファ109に転送し終えているように)、2DAC遅れさせているものである。従って、転送バッファ109は、2−portでなくとも良く、例えば2個のRAMで読出しと書込みを交互に切り替えるものでも良いが、ここでは書込みと読出しを安全に行うために2−portのRAMを用いた。
図5は、音源部114と転送制御部113に関する詳細図である。本図では、主としてアドレスの入出力を表す矢印は普通の矢印で、アドレス以外のデータの入出力を表す矢印は先頭部を塗りつぶした三角形とした矢印で、それぞれ表している。
音源部114は、モードレジスタ501を備える。該レジスタ501は、仮想ページアドレスから実ページアドレスへの変換方式を規定するモード1または2の何れかを指定するモード情報Mをセットするレジスタである。予め本LSI100をモード1と2のどちらで動作させるかは設計者により決められている。また、そのモードに応じたデータ構造でフラッシュメモリ125にアドレス変換テーブルと波形データが格納されている。システム立ち上げ時に、レジスタ501にそのモード情報が設定される。
音源部114は、制御レジスタ(音源レジスタ)502を備える。制御レジスタ502は、各ch毎のパラメータおよびノートオンNONを記憶するレジスタである。CPU101は、例えばMIDI I/O124経由で楽音発生指示を受けたとき、楽音生成するchを割り当て、そのchに対応する制御レジスタ502に、その演奏情報に基づくパラメータを設定してノートオンを書込む。これにより、音源114は、そのchでの楽音生成処理を開始する。各レジスタの詳細を以下に示す。
(1)WA:図2(b)で説明したNAND型フラッシュメモリ125中の当該chで読出す波形データWavexの第2ページWx(1)+Infの仮想ページアドレスをセットする。
(2)PA:図3(a)で説明した波形メモリ126のプリロード領域302中の当該chで読出す波形データWavexの先頭ページWx(0)のアドレスをセットする。システム立ち上げ時に、NAND型フラッシュメモリ125の全波形データWave1,2,…の先頭ページW1(0),W2(0),…が、プリロード領域302に格納される。
(3)BA:図3(a)で説明した波形メモリ126のバッファ領域303中の当該chに対応する1組のダブルバッファBna,Bnbのアドレスをセットする。
(4)F:Fナンバをセットする。Fナンバは、整数部と小数部とを有し、読出される波形データのピッチをシフトするパラメータであり、その値は発生させたい楽音のピッチ(音高)に応じて決定される。すなわち、Fナンバの値は、波形データのピッチからシフトしなくてよい場合は「1」とされ、ピッチアップしたいときは「1」より大きな値とされ、ピッチダウンしたいときは「1」より小さな値とされる。
(5)IL,HT,1DR,1DL,2DR,2DL,RR:楽音のエンベロープを制御するためのパラメータをセットするレジスタである。ILはイニシャルレベル、HTはホールドタイムを示す。これらは、楽音発生開始からホールドタイムHTの時間区間は、エンベロープ波形として、イニシャルレベルILを固定的に出し続けることを指示するパラメータである。NAND型フラッシュメモリ125に用意してある波形データは、何れも、その立ち上がり部分については元のサンプリング波形における音量変化をそのまま利用する方がリアルな楽音が得られるような波形データとしてある。そこで、その立ち上がり部分のホールドタイムHTだけの時間区間ではイニシャルレベルILをエンベロープ波形としている。1DRは1stディケイレート、1DLは1stディケイレベルである。ホールドタイムHTの後、1stディケイレート1DRの変化率で目標値1stディケイレベル1DLに至るエンベロープ波形を出力するためのパラメータである。2ndディケイレート2DRと2ndディケイレベル2DLも同様であり、1stディケイの後、2ndディケイレート2DRの変化率で目標値2ndディケイレベル2DLに至るエンベロープ波形を出力するためのパラメータである。2ndディケイの後、ノートオフが来たら、リリースレートRRの変化率で徐々に音量レベルを減少させていく。音量レベルが所定レベル以下になったら消音する。
(6)NON:楽音の発生開始を指示するノートオンをセットするレジスタである。
CPU101が、あるchに対応する制御レジスタ502にノートオンNONも含めて上記パラメータをセットすると、音源部114は当該chにおける楽音発生の処理を開始する。なお、図5の音源部114内に示されている各種パラメータは、それぞれ、その時点で処理中のchのパラメータを示している。すなわち、処理するchが変われば、それに応じてパラメータの値も変化する。
以下、音源部114等の各ブロックにおける1ch分の処理を説明する。同様の処理が、各DAC毎に、時分割で全128chに対して行われ、複数の楽音が並行して生成される。
ピッチカウンタ504には、ノートオンNONおよびFナンバが入力する。ピッチカウンタ504は、ノートオン時点でゼロリセットされ、その後、1DAC毎にFナンバを累算する。この累算値は、整数部アドレスと小数部アドレスとして出力される。累算値の整数部の下位10ビットを除いたデータ(「整数部上位ビット」と呼ぶ)は、VPアドレス発生部505およびPBアドレス発生部506に入力する。累算値の整数部の下位10ビット(「整数部下位10ビット」と呼ぶ)は読出部507に入力する。累算値の小数部は、補間部508に入力する。ピッチカウンタ504は、所定のタイミングで転送指示信号をVPアドレス発生部505および転送待ちキュー521に出力する。上述の整数部や小数部の時間変化や転送指示のタイミング等については図6で詳しく説明する。ピッチカウンタ504は、ノートオフ後も累算を続けるが、そのchの楽音生成処理が停止されると累算を停止する。
PBアドレス発生部506は、上記制御レジスタの(2)と(3)で説明したアドレスPA(発音開始直後に読出すべき波形メモリ126のプリロード領域302の先頭ページのアドレス(図3(a)))とBA(波形メモリ126の当該chに対応するバッファアドレス(図3(a)))を入力し、PBアドレスを読出部507に出力する。PBアドレスは、波形メモリ126中の読出すべき領域の先頭を指定するための上位アドレスである(実際にはPBアドレスは上位部分のみであるので、このPBアドレスの下位に10ビット分の0を付けたアドレスが波形メモリ126中の読出すべき領域の先頭を指定する絶対アドレスになる)。具体的には、PBアドレス発生部506は、発音開始直後はPAをPBアドレスとして出力し、該PAで指定された波形メモリ126のプリロード領域302の先頭ページの波形サンプルデータを読み終えたら、BAをPBアドレスとして出力し、該BAで指定された波形メモリ126のバッファ領域303の当該chに対応するバッファBia(iはch番号)の波形サンプルデータを読み終えたら、BA+1をPBアドレスとして出力し(上述したようにBAは下位10ビット以下を除いた上位部分であるので、BA+1はバッファBibを指すことになる)、該BA+1で指定された波形メモリ126のバッファ領域303の当該chに対応するバッファBibの波形サンプルデータを読み終えたら、再びBAをPBアドレスとして出力し、以後、バッファBiaとBibを交互に読出すようにBAとBA+1を交互にPBアドレスとして出力する。このようなPBアドレスの下位に、ピッチカウンタ504から出力される整数部下位10ビットを付加し、読出しアドレス(絶対アドレス)が生成される。読出部507は、メモリI/F112を介して波形メモリ126から、該読出しアドレスで当該chの波形サンプルデータを読出す。ここでは該読出しアドレスの波形サンプルとその次の波形サンプルの2サンプルを読出すものとする。なお、波形メモリ126のデータ長は1ワードであり、各アドレスには1サンプルの波形データが記憶されている。
補間部508は、1DAC毎に、読出された2サンプルの間を小数部アドレス(ピッチカウンタ504から出力されたもの)に応じて2点補間(直線補間)して、1つの補間サンプルを算出する。楽音生成処理が停止されたchについては、補間サンプル「0」を出力する。
振幅エンベロープジェネレータ(EG)503は、当該chのエンベロープ波形生成用のパラメータに基づいて、振幅エンベロープ(AE)波形を生成し、音量制御部509に出力する。音量制御部509は、1DAC毎に、補間サンプルの振幅をAE波形の値に基づいて制御し、当該chの楽音サンプルとして出力する。累算部510は、1DAC毎に、全chの各楽音サンプルを累算し、全chを混合した結果の楽音サンプルとして出力する。なお、不図示の効果付与部でリバーブその他の効果を付与して出力しても良い。
ピッチカウンタ504から出力された整数部上位ビットは、VPアドレス発生部505およびPBアドレス発生部506に入力する。VPアドレス発生部505には、NAND型フラッシュメモリ125中の当該chで読出している波形データの第2仮想ページアドレスWAが入力する(図2(b))。VPアドレス発生部505は、入力したデータに基づいてVPアドレスを生成する。VPアドレスは、NAND型フラッシュメモリ125の波形データの当該chで次に読出すべきページを特定する仮想ページアドレスである。ノートオン直後で音源114が波形メモリ126のプリロード領域302のアドレスPAで特定されるページから波形サンプルを読出している間にフラッシュメモリ125から読出すべきページはアドレスWAで特定されるフラッシュメモリ125上のページであるから、このときのVPアドレスはWAである。図2で説明したように、波形データは仮想ページアドレス空間で連続したページに格納されているから、これ以降、VPアドレスは、WA+1,WA+2,WA+3,…と推移していく。VPアドレスの変化については、図6で詳しく説明する。
また、モード1の場合、VPアドレス発生部505は、転送指示が入力される毎に、メモリI/F112を介して波形メモリ126のアドレス変換テーブル301にアクセスし、その時点でのVPアドレスに対応する実ページアドレスを求め、該実ページアドレスを波形メモリ126上の当該chのNPAiに書込む。従って、モード1の場合は、VPアドレス発生部505が「次ページアドレス設定部」として機能する。モード2の場合、VPアドレス発生部505は、第1回目のVPアドレス(その値がWAのときが第1回目であり、初回の転送指示のときである)に対しては、上記モード1と同様にアドレス変換テーブル301を参照し、該VPアドレスに対応する実ページアドレスを求め、該実ページアドレスを波形メモリ126上の当該chのNPAiに書込む。モード2の場合は、それ以降、VPアドレスがWA+1,WA+2,WA+3,…と推移した場合の当該chのNPAiの設定は、B→M転送部110で行うので、VPアドレス発生部505では行わない。従って、モード2の場合、(第1回目を除き、)B→M転送部110が「次ページアドレス設定部」として機能する。波形メモリ126のNPAに設定するアドレスの変化については、図6などで詳しく説明する。
転送待ちキュー521は、先入れ先出しのキューである。ピッチカウンタ504から転送指示が出力されたとき、転送待ちキュー521は、VPアドレス発生部505から出力されるch番号を取り込んでキューに登録する。そのタイミングについては、図6で詳しく説明する。転送待ちキュー521に登録されたch番号は、要するに、当該ch番号のchについて、その時点で波形メモリ126から読出し再生しているページデータの読出しが終わるまでに、波形メモリ126の当該chのNPAiに設定されている実ページアドレスのページデータをNAND型フラッシュメモリ125から転送バッファ109経由で波形メモリ126に転送しておく必要がある、ということを意味している。図4で説明した、F→B転送部108による転送とB→M転送部110による転送とは、転送待ちキュー521から順次出力されるch番号をトリガとして実行される。複数のch番号が登録されている場合、転送待ちキュー521からは、先に登録されたch番号から順番にch番号が出力され、それに応じて、F→B転送部108とB→M転送部110とは、それぞれ、該出力されたch番号に応じた転送を実行する。
F→B転送指示部522は、NAND型フラッシュメモリ125から転送バッファ109へのページデータの転送が行われていないとき、転送待ちキュー521からch番号iを取り出し、F→B転送部108にそのch番号iを送って、NAND型フラッシュメモリ125中の次に読出すべきページデータを転送バッファ109へ転送する指示を出す。この指示に応じて、F→B転送部108は、メモリI/F112経由で波形メモリ126の当該ch番号iの次ページアドレスNPAiを読出し、フラッシュメモリ125にその次ページアドレスNPAiを指定した読出し命令を出力する。該読出し命令に応じて、フラッシュメモリ125から1ページデータ(2112バイト)がバースト転送されるので、F→B転送部108は、その転送データを転送バッファ109へ書込む。これにより、図4の「NAND型フラッシュ→転送バッファ」のタイムチャートで説明した1ページデータの転送(付番411〜413)が行われる。
また、F→B転送指示部522は、F→B転送部108に転送指示を出したとき、B→M転送指示部523に対して該転送指示とch番号を伝える。B→M転送指示部523は、この転送指示を受けて、B→M転送部110に当該ch番号と転送指示を出力し、B→M転送部110が転送バッファ109のページデータ(データエリアの2048バイト)を波形メモリ126の当該chに対応するバッファにバースト転送するように制御する。B→M転送部110は、B→M転送指示部523からch番号と転送指示を受けると、その転送指示のタイミングから2DAC周期後の1DAC周期の区間で、音源114による波形メモリ126のアクセス期間(図4の421)の後に、転送バッファ109にページデータのアドレスを指定した読出し命令を出力する。これにより、転送バッファ109から当該ページデータのうちの先頭の256ワードがバースト転送されてくるので、その転送データを波形メモリ126の当該chのバッファ領域へ図4の422に示したように書込む。さらに、引き続く256ワード×3ブロックのデータについても、B→M転送部110の制御の元で、引き続く3DACの区間を利用して、バースト転送により波形メモリ126の当該chのバッファ領域へ書込む。以上により、図4の「転送バッファ→波形メモリ」のタイムチャートで説明した転送バッファ109から波形メモリ126のバッファ領域へのバースト転送(付番422)が行われる。また、モード2の場合、B→M転送部110は、転送バッファ中のデータの「次ページへのポインタNP」を、波形メモリ126の当該chiのNPAiに書込む処理を行う。このNPAiへの書込み処理は、図4の区間425のタイミング(ただし、エラー訂正書込みが行われる前とする)で行う。
なお、転送バッファ→波形メモリのバースト転送で、256ワードを当該chの波形メモリ126のバッファ領域に転送する際、当該chのバッファはBia,Bibの2つあり、どちらに転送するかを決めておく必要がある。本実施形態のシステムでは、その時点で、当該chについて波形メモリ126のプリロード領域302またはバッファBia,Bibの何れかから波形サンプルの音源114による読出しが行われているはずであるから、プリロード領域302またはバッファBiaから読出しが行われているならバッファBibをバースト転送先とし、バッファBibから読出しが行われているならバッファBiaをバースト転送先としている。
エラー訂正部111は、上述のNAND型フラッシュ→転送バッファの転送が行われているとき、その転送データを解析し、図4の431に示したエラー訂正演算処理を実行する。付加情報INFの転送413まで終了したら、エラー訂正部111は、該転送データに関する、エラー発生の有無と、エラーが有った場合のエラー訂正の可否と、エラー訂正が可の場合のエラー訂正箇所とを確定する。エラーが有りそのエラーが訂正可でその訂正箇所が算出された場合、エラー訂正部111は、図4の区間425で、メモリI/F112経由で波形メモリ126の当該訂正箇所の訂正命令を発行しエラー訂正を実行する。モード2の場合は、NPAiもエラー訂正の対象になるので、このエラー訂正でNPAiが訂正されることがある。
エラー訂正部111は、訂正可のエラーが発生した旨を示すエラー訂正情報をエラー検出部524に出力する(点線541)。同様に、エラーが有りそのエラーが訂正不可である場合、エラー訂正部111は、訂正不可のエラーが発生した旨を示すエラー訂正情報をエラー検出部524に出力する(点線541)。なお、訂正が可/不可いずれの場合も、エラー訂正情報には、エラーが発生したフラッシュメモリ125上の実ページアドレスを含めるものとする。
エラー検出部524は、エラー訂正部111からのエラー訂正情報を入力する。訂正可のエラー訂正情報が入力した場合、エラー検出部524は、該エラー訂正情報をCPU101に通知する(点線542)。訂正不可のエラー訂正情報が入力した場合、エラー検出部524は、振幅EG503に対して当該chのフォースダンプを指示して当該chの楽音を急速減衰させる(点線545)とともに、該エラー訂正情報をCPU101に通知する(点線542)。
エラー検出部524には、読出部507から、現在音源114が読出しを実行している波形メモリ126上のバッファ領域を特定するアドレスであるPBアドレス(これを「読出PBアドレス」と呼ぶ)が入力する(点線544)。また、エラー検出部524には、B→M転送部110から、現在転送バッファ109からの転送の転送先となっている波形メモリ126上のバッファ領域を特定するアドレス(これを「転送中PBアドレス」と呼ぶ)と該転送が終了したときその旨を示す転送済み信号が入力する(点線543)。あるchについて、波形メモリ126上のバッファBiaとBibを用いた転送と読出しが正常に行われている場合、いま読出PBアドレスがBiaである状態とすると、次に転送中PBアドレスがBibとなって転送が始まり、その転送が終了して転送済み信号が入力し、次に読出PBアドレスがBibとなってBibからの読出しが開始し、次に転送中PBアドレスがBiaとなって転送が始まり、その転送が終了して転送済み信号が入力し、次に読出PBアドレスがBiaとなってBiaからの読出しが開始し、…というように処理が進むはずである。もし何らかの理由で転送が間に合わないと、転送中PBアドレスがBibの状態からその転送済み信号が発生する前に読出PBアドレスがBibとなる、または、転送中PBアドレスがBiaの状態からその転送済み信号が発生する前に読出PBアドレスがBiaとなってしまう。エラー検出部524は、このような転送エラーのチェックを行い、転送エラーが発生したときには、点線545に示すように、振幅EG503に対して当該chの強制的なダンプ(フォースダンプ)を指示して当該chの楽音を急速減衰させる。また、エラー検出部524は、上記転送エラーが発生した旨をそのch番号とともにCPU101に通知する(点線542)。
図6は、発音開始以降の各種アドレスの時間変化(1ch分)を示す。図中、「整数部下位10bits&小数部」は、図5のピッチカウンタ504で当該chのFナンバを累算した累算結果の整数部下位10ビットおよび小数部の時間変化を示す。Fナンバの累算に応じて値が増加していき、整数部下位10ビットが1023を越えたとき桁上がりが生じ、0に戻って(厳密には小数部の値が残っているので1以下の値である)再び増加する。これにより、図のような鋸歯状の変化を示す。「整数部上位bits」は、ピッチカウンタ504の整数部上位ビット(累算結果から整数部の下位10ビットおよび小数部を除いた上位部分)の時間変化を示す。発音開始直後は0であり、以後、「整数部下位10bits&小数部」の桁上がりが生じる毎に、1ずつ増加していく。
「転送指示」は、図5のピッチカウンタ504から転送待ちキュー521に出力される転送指示信号を示す。発音開始時に付番601のように出力され、以後、当該chの「整数部下位10bits&小数部」の桁上がりが生じる毎に付番602,603のように出力される。「PBアドレス」は、図5のPBアドレス発生部506から出力される当該chのPBアドレスの時間変化を示す。発音開始直後はPBアドレスとしてPA(波形メモリ126のプリロード領域302の先頭ページを指すアドレス(図3(a)))が出力され、以後は、「整数部上位bits」がカウントアップされる毎にBAとBA+1(BAは当該chに対応するバッファBiaのアドレス、BA+1は当該chに対応するバッファBibのアドレス)が交互にPBアドレスとして出力される。
「VPアドレス」は、図5のVPアドレス発生部505が内部的に生成する当該chのVPアドレスの時間変化を示す。発音開始直後は、次に波形メモリ126に読出しておくべきページは、当該波形データの第2ページアドレスWAで指されるページであるから(図2(b))、VPアドレスとしてWAが出力され、以後は、「整数部上位bits」がカウントアップされる毎に1ずつ増加していく。VPアドレス発生部505は、当該chの転送指示が来る毎に、当該chのWAに当該chの「整数部上位bits」の値を加算して当該chのVPアドレスを生成する。なお、波形データは仮想ページアドレスで連続するページに順に格納されているので、VPアドレスは、転送指示が来る毎にWAからインクリメントして生成してもよい。図2(b)の例で言えば、WAで第2ページW2(1)+Infを指し、WA+1で第3ページW2(2)+Infを指し、…という対応となる。
「P1アドレス(モード1)」は、モード1の場合に、VPアドレス発生部505が各時間区間で生成する仮想ページアドレスである当該chのVPアドレスに対応する実ページアドレスを示す。モード1の場合、仮想ページアドレスに対応する実ページアドレスはアドレス変換テーブル301を参照して求めるのが基本的な処理である。PBアドレス=PAで当該chの先頭ページWx(0)の波形サンプルを音源114が読出している間は、次にフラッシュメモリ125から読出すべきページの仮想ページアドレスであるVPアドレスはWAで与えられているから、VPアドレス発生部505は、アドレス変換テーブル301を参照してWAに対応する実ページアドレスT(WA)を求め、該実ページアドレスを波形メモリ126の当該chのNPAiに書込む。なお、T(*)はアドレス変換テーブル301により求めた仮想ページアドレス*に対応する実ページアドレスを示す。同様にして、VPアドレス発生部505は、転送指示がある毎に、VPアドレスWA+1,WA+2,…に対応する実ページアドレスを求めて、波形メモリ126のNPAiに設定する。
「P2アドレス(モード2)」は、モード2の場合に、VPアドレス発生部505が各時間区間で生成する当該chのVPアドレスに対応する実ページアドレスを示す。モード2の場合、フラッシュメモリ125から読出したページの付加情報Inf内の「次ページへのポインタNP」を辿って次に読出すべき実ページアドレスを取得するのが基本的な処理である。PBアドレス=PAで当該chの先頭ページWx(0)の波形サンプルを音源114が読出している間は、次にフラッシュメモリ125から読出すべきページの仮想ページアドレスであるVPアドレスはWAで与えられているから、VPアドレス発生部505は、アドレス変換テーブル301を参照してWAに対応する実ページアドレスT(WA)を求め、該実ページアドレスを波形メモリ126の当該chのNPAiに書込む。後述する転送実行タイミング611で当該実ページアドレスNPAiのページデータがフラッシュメモリ125から読出されて波形メモリ126のバッファに格納されるが、このときB→M転送部110は、転送バッファ109に読出されたページデータの付加情報Inf中の「次ページへのポインタNP」を波形メモリ126の当該chのNPAiに設定する。このNPAiに設定された「次ページへのポインタNP」が、次のVPアドレス=WA+1に対応する実ページアドレスとなる。次の転送指示602でVPアドレス=WA+1と更新されたときには、既に当該chのNPAiの設定は済んでいることになる。以下同様にして、各転送実行タイミング612,613,…で実行される転送において、「次ページへのポインタNP」が波形メモリ126のNPAiに設定され、これにより実質的に各VPアドレスに対応する実ページアドレスがNPAiに設定されるようにしている。
「転送実行タイミング」は、当該chに関して、図5のF→B転送指示部522およびB→M転送指示部523からの指示に応じて、F→B転送部108及びB→M転送部110が、図4で説明した転送を実際に実行するタイミングを示す。先述したように、F→B転送部およびB→M転送部による転送は、転送待ちキュー521にch番号が登録された順に実行されるので、転送指示601が出力され、転送待ちキュー521に当該chのch番号が登録されたとしても、その時点で他のchのch番号が転送待ちキュー521に登録されていれば、登録されているch番号に応じた転送が全て実行された後に、少し遅れた付番611のタイミングで当該chのch番号が転送待ちキュー521から出力され、対応する転送が行われる。同様に、転送指示602で転送待ちキュー521に登録されたch番号の転送は付番612で、転送指示603で転送待ちキュー521に登録されたch番号の転送は付番613で、…というように、転送指示から少し遅れて転送が実行される。その遅れは、他のchで実行されている転送の混み具合によるので、一定ではない。もちろん、転送指示601で転送待ちキュー521に登録した転送は転送指示602が来る前に実行し、転送指示602で転送待ちキュー521に登録した転送は転送指示603が来る前に実行し、…というように、次の転送指示が来る前に実行する必要はある。
次に、波形メモリ126のアクセスに関するタイミング設計について説明する。
本実施形態のシステムでは、1単位アクセス(フラッシュメモリ125からの1ページデータの読出し)で転送バッファ109に転送された1024サンプルを、4DACに分けて256サンプル(512バイト)ずつ転送バッファ109から波形メモリ126のバッファへバースト転送している(図4)。4DACに分けて256サンプルずつバースト転送するのは、1単位アクセスに4DACかかることに合わせたものである。1DAC周期からこのバースト転送の期間と波形メモリ126のリフレッシュの期間を除いた期間が、音源114が各発音chの楽音生成のために波形サンプルを読出す期間になる。従って、バースト転送の期間を大きく取らなければならないようなケースでは、発音chのための読出し期間を減らさないといけないので、それに応じて発音可能ch数を減らすように設計する必要がある。逆に、バースト転送の期間をもっと減らすことができれば、それに応じて発音可能ch数を増加することができる。
ここで、「帯域幅」と「全帯域幅」について説明しておく。「全帯域幅」とは、基本再生期間(1ページ分のサンプルデータをサンプリング周期ごとに1サンプルの速度で再生した場合の再生時間)にフラッシュメモリ125から読出し可能な最大ページ数(言い替えると、基本再生期間に転送指示を出すことができる回数の上限値)である。本実施形態では、基本再生期間が1024DACで、フラッシュメモリ125から1ページ読出しするのに4DACかかるので、全帯域幅は256である。「帯域幅」とは、ある1つのchで、基本再生期間に、フラッシュメモリ125から読出す最大ページ数(当該chが転送指示を出す最大回数)である。例えば、あるchにおいて、Fナンバ=1で楽音生成するなら、基本再生期間1024DACの間に1回だけ転送指示を出せば、その1回の転送で波形メモリに書込まれた1024サンプルで基本再生期間内におけるFナンバ=1の再生がまかなえるので、当該chの帯域幅は1である。もしFナンバ=2なら帯域幅は2である。もしFナンバ=1.1なら、基本再生期間の10期間分で11回の転送指示(11ページ分の転送)が必要だから、前記10期間のうちのどこかで2回の転送指示を出さなければならず、当該chの帯域幅は2となる。従って、Fナンバの小数部を切り上げた値が、そのchの帯域幅となる。また、全chの帯域幅の和が全帯域幅を越えることがないようにすることが必要である。越えてしまうと、何れかのchで発生した転送要求が処理できなくなるからである。
本実施形態のシステムでは、CPU101が各chに割り当てた帯域幅を管理する。予め各種設計条件に基づいて全帯域幅Tbwを決定しておく。また、割り当て済みの総帯域幅を示す内部変数Abwと第ichに割り当てた帯域幅を示す内部変数Cbw(i)を設けておき、CPU101は、初期設定時にこれらの内部変数を全て0に初期設定する。CPU101は、発音のためにchを割り当てるときには、該chの帯域幅bwと、全帯域幅Tbwから割り当て済み総帯域幅Abwを減算した値(空きの帯域幅を示している)とを比較し、前者が後者以下であることを確認する(前者が後者より大きければ、当該chの帯域幅を割り当てることができない)。前者が後者以下なら、割り当てる帯域幅があるということだから、割り当て済み総帯域幅Abwに該chの帯域幅bwを加算し、Cbw(i)にbwを記憶しておく。該chが消音して開放されたときには、AbwからCbw(i)を減算し、Cbw(i)を0にリセットする。このようにして、常に、割り当て済み帯域幅Abwと割り当て可能な帯域幅Tbw−Abwを管理する。本実施形態の方式では、Fナンバ上限値を制限せず、基本再生期間において全chについての単位アクセスの回数(帯域幅)の合計は上限である全帯域幅に抑えるようにしている。要するに、基本再生期間において、ピッチアップしたchについては多くの回数の単位アクセスが必要になるが、逆にピッチダウンしたchについては単位アクセスの数は減らせるので、全体として基本再生期間における単位アクセスの上限の数(全帯域幅)に抑えるようにしている。
図7(a)は、本実施形態のシステムの電源オン時あるいはリセット時にCPU101が実行するメイン処理のフローチャートである。ステップ701で初期設定を行い、ステップ702で転送制御部113に指示してアドレス変換テーブルと各波形データの先頭ページの波形メモリ126への転送を行う。また、モード1またはモード2を示すモード情報Mをモードレジスタ501に初期設定する。図2に関連して説明したように、ここで転送されるアドレス変換テーブルは、設定されるモード情報Mに応じて異なる。すなわち、モード1の場合は、16ビット入力16ビット出力のテーブルが転送され、モード2の場合は、20ビット入力20ビット出力のテーブルが転送される。以上の初期設定処理の後、ステップ703でイベントを検出し、イベントがあるときはステップ705でそのイベント処理を実行する処理を繰り返す。
図7(b)は、ノートオンイベント処理のフローチャートである。この処理は、CPU101が、例えばMIDI I/O124からMIDIノートオンイベントを入力したときに、ステップ705で実行する処理である。ステップ711では、入力したMIDIノートオンイベントの演奏情報に基づいて、ノートナンバとベロシティをレジスタnn,velにセットする。ステップ712では、フラッシュメモリ125中の現在選択されている音色に対応する複数の波形データの中から、nn,velに応じた1つの波形データを決定(選択)する。図1のNOR型フラッシュメモリ121には、各音色の音色データが用意されており、その音色データ中にはnn,velに応じた波形データを選択するための波形選択情報が含まれている。ステップ713では、発音chの割当てを行い、割り当てたch番号をレジスタaにセットする。
なお、ステップ713では、上述した帯域幅の確保を行う。すなわち、bw≦Tbw−Abwであることを確認し、Cbw(a)←bw、Abw←Abw+bwとする。bw>Tbw−Abwのとき、すなわち割り当て可能な帯域幅に割り当てるべき帯域幅が無かったときは、発音中のchから消音するchを決定し、該chの楽音を急速減衰させて該chを開放し、Abwからそのchの帯域幅を減算し、そのchのCbwを0としてから、再度、帯域幅の確保を行う。割り当てるべき空きchが無かったときは、何れかの発音中のchを消音して解放し、割り当てることができるようにする。
ステップ714では、音源114の制御レジスタ502のa chの領域に各種パラメータを設定する。ピッチシフトを制御するFナンバは、決定された波形データをピッチシフトしない場合のピッチ(セント)と、ノートナンバnnの示すピッチ(セント)との音高差(セント)から決めることができる。上述したWA,PAやエンベロープ関連のパラメータは音色データに含まれている。BAは、割り当てられたch番号から決めることができる。最後に、ステップ715で、ノートオンNONにa chの発音開始指示を書込み、処理を終了する。
以上により、a chについてノートオンNONを含む音源レジスタにデータが設定されたので、これ以後は図1〜図6で説明した動作によりa chでの発音が行われる。この発音処理は、図1のNAND型フラッシュメモリ125から音源114に至るハードウェアで実行され、CPU101に割込みがかかることはない。
図8(a)は、あるchの転送指示を受けたときのVPアドレス発生部505の処理を示す。この処理は、ハードウェアにより実行される処理である。ステップ801で、図6で説明したように、WAに「整数部上位bits」の値を加算してVPアドレスを生成する。ステップ802でモード1のとき、または、モード2でかつステップ803で1回目の処理のときは、ステップ804に進む。ステップ803で1回目でないときは、ステップ806に進む。ステップ804では、アドレス変換テーブル(図3(a)の301)を参照して、VPアドレスに対応する実ページアドレス(Pアドレス)を取得する。このPアドレスは、図6に示したモード1の場合のP1アドレスまたはモード2の場合の初回のP2アドレスに相当する。ステップ805では、NPAの当該ch領域NPAiに、該Pアドレスを書込む。ステップ806では、ch番号を転送待ちキュー521に出力する。
図8(b)は、B→M転送指示部523からの転送指示を受けたときのB→M転送部110の処理(ただしエラー検出部524へ転送中PBアドレス等を出力する処理などは除く)を示す。この処理は、ハードウェアにより実行される処理である。ステップ811で、B→M転送指示部523から渡されるch番号を取得する。ステップ812で、転送バッファ109上の1ページ分の波形データ1024ワードを、256ワードずつ4回に分けて波形メモリ126の当該chのバッファ領域へ転送する。転送のタイミングは図4の422で説明したように制御する。次に、ステップ813でモード2の場合、ステップ814で、転送バッファ109上の「次ページへのポインタNP」を、波形メモリ126の当該chのNPAiに書込む。
次に、エラーが発生した場合のCPU101の処理について説明する。図5のエラー訂正部111およびエラー検出部524で説明したように、本システムでは、(1)フラッシュメモリ125から読出したデータに訂正可のエラーが発生して該エラーを訂正した場合のエラー訂正情報、(2)フラッシュメモリ125から読出したデータに訂正不可のエラーが発生した旨を示すエラー訂正情報、(3)転送エラーが発生した旨を示すエラー訂正情報を、CPU101に通知する。該エラー訂正情報は、そのエラーが発生したchおよびフラッシュメモリ125の実ページアドレスを含んでいる。
まず、上記(1)の訂正可のエラーの場合について説明する。この場合、当該chでの楽音生成は、訂正された波形データで継続される。このエラー通知を受けたCPU101は、割込処理で、当該エラーが生じた実ページアドレスをNOR型フラッシュ121に「代替待ちページ」として登録する。訂正された波形データで楽音生成は継続されるので、訂正可のエラーが発生した旨を、即時にメッセージ表示や所定音の出力などでユーザに通知することはしない。ただし、楽音生成処理が終了した後に、そのような通知を行う。通知を受けたユーザは、フラッシュメモリ125へのアクセスが無いときに、所定の操作で(あるいはバックグラウンドで自動的に)図9の「代替待ちページ」の登録が有る場合の処理を起動する。
図9(a)は、モード1の場合のCPU101の処理である。ステップ901で、「代替待ちページ」に登録されているエラーページを含む1ブロックをフラッシュメモリ125からメモリI/F107経由で読出し、RAM103上で該ブロック内の該エラーページのデータ訂正を行う。訂正したデータにエラー訂正コードを付して、適正な1ページデータ(2112バイト)を得る。なお、エラーページだけでなく、当該ブロックの他のページについてもエラー訂正コードを用いてエラーチェックおよび訂正を行ってもよい。当該ブロック全体の適正なデータが得られたら、ステップ902で、フラッシュメモリ125上の未使用の実ブロックを1つ選択する。ステップ903で、前記訂正した1ブロック分のデータを、メモリI/F107経由で、前記選択した未使用ブロック(代替ブロックと呼ぶ)に書込む。ステップ904で、フラッシュメモリ125上のアドレス変換テーブルの前記エラーページを含む1ブロックの仮想ブロックアドレスが指す実ブロックアドレスを、前記代替ブロックの実ブロックアドレスに、変更する。以上により、エラーページを含む1ブロックを、代替ブロックで代替させることができる。
モード1の場合、予め、NOR型フラッシュ121(あるいはRAM103上でもよい)に、NAND型フラッシュ125内のアドレス変換テーブルと同じデータおよび未使用の実ブロックの所在を管理するための管理データを格納しておく。CPU101は、これらのデータを用いて、NAND型フラッシュ125の波形データの各ページの使用状況を常に管理している。
図9(b)は、モード2の場合のCPU101の処理である。ステップ911で、「代替待ちページ」に登録されているエラーページをフラッシュメモリ125からメモリI/F107経由で読出し、RAM103上で該エラーページのデータ訂正を行う。訂正したデータにエラー訂正コードを付して、適正な1ページデータ(2112バイト)を得る。ステップ912で、フラッシュメモリ125上の未使用ページを1つ選択する。ステップ913で、前記訂正後のページデータを前記未使用ページ(代替ページと呼ぶ)に書込み、かつ、当該ページの前ページの「次ページへのポインタNP」が前記代替ページを指すように更新する。なお、当該エラーページがその波形データの先頭ページの場合は、前ページの「次ページへのポインタNP」を更新する代わりに、フラッシュメモリ125上のアドレス変換テーブルの前記エラーページの仮想ページアドレスが指す実ページアドレスを、前記代替ページの実ページアドレスに、変更する。以上により、エラーページを代替ページで代替させることができる。
モード2の場合、予め、NOR型フラッシュ121(あるいはRAM103上でもよい)に、NAND型フラッシュ125内のアドレス変換テーブルと同じデータおよび未使用の実ページの所在を管理するための管理データを格納しておく。CPU101は、NOR型フラッシュ121内のアドレス変換テーブルを参照して、エラーページを含む波形データの先頭ページの実アドレスを取得でき、その先頭ページから「次ページへのポインタNP」を辿ってエラーページの前ページを特定することができる。なお、NOR型フラッシュ121に、各波形データにおける実ページの順序(ページ間のリンクの状況)を管理する管理データを設けておき、これによりエラーページの前ページを求めるようにしてもよい。また、付加情報Infに「次ページへのポインタNP」だけでなく「前ページへのポインタ」も含めるようにすれば、エラーページの前ページの実アドレスが直ぐに分かるので容易に前ページにアクセスできる。
なお、NAND型フラッシュメモリは、1動作では上書きを行うことができず、書込みたいページを含む連続する複数ページ(例えば32ページや64ページ)のブロック(図2(c)で説明したブロックと区別するためここでは「メモリブロック」と呼ぶものとする)を消去した後に書込みを行う必要がある。従って、上記ステップ903,904,913でのNAND型フラッシュメモリ125への書込みは、書込みたいページを含むメモリブロックのデータをRAM103上に一旦読出した後、該メモリブロックを消去し、RAM103上で読出したデータ中の必要な部分を変更し、変更後のデータを該消去済みのメモリブロックに書き戻す手順で実行する。
次に、上記(2)の訂正不可のエラーの場合について説明する。この場合、上述したように当該chで生成中の楽音は、(CPU101からの指示なしに)自動的にフォースダンプされる。このエラー通知を受けたCPU101は、割込処理で、当該chを開放chとして発音割り当てできるようにし、また当該chに割り当てた帯域幅を割り当て可能な帯域幅に戻すとともに、その旨をメッセージ表示や所定音の出力などでユーザに通知する。この通知は、即時に行う代わりに、楽音生成処理が終了した後に行ってもよい。通知を受けたユーザは、(訂正不可のエラーが発生した場合はフラッシュメモリ125が不良であると思われるので、)メーカに修理を依頼する。
なお、フラッシュメモリ125の1つのページに着目すると、エラー無しで正常に読出せている状態から訂正不可のエラーが突然発生する確率は極めて低く、まず訂正可能なエラーが何回か発生し、その後、訂正不可のエラーが発生するのが通常である。従って、訂正可能なエラーが発生したときに、該エラーを起こしたページを代替ページ(あるいは代替ブロック)に置き換えることで、訂正不可なエラーの発生を抑えることができる。
次に、上記(3)の転送エラーの場合について説明する。この場合、上述したように当該chで生成中の楽音はフォースダンプされる。このエラー通知を受けたCPU101は、割込処理で、当該chを開放chとして発音割り当てできるようにし、当該chに割り当てた帯域を割り当て可能な帯域幅に戻す。また、全帯域幅Tbwの値を所定数だけ下げて、帯域の制限をきつくし、転送エラーが起きにくくなるようにする。
なお、上記実施形態における各種の値は、それぞれ適宜変更することができる。フラッシュメモリ125のページのサイズは2112バイトに限らず任意のサイズであってよい例えば、データエリアを1024バイトや4096バイトとし、付加情報Infも任意のサイズとしてよい(フラッシュメモリ125の仕様による)。また、データ幅も8ビットには限らず、4ビット、16ビット等でもよい。図2(c)で説明したモード1の場合の1ブロックの大きさも16ページとは限らず、32ページや64ページ(2の累乗)などでもよい。また、1ブロックを1ページとしてもよい(この場合は結果としてブロックの概念が無いということになる)。基本再生期間における単位アクセス回数は256に限らず、300、450、512等、任意の数であってよい(フラッシュメモリ125の仕様による)。波形メモリ126からの読出しサンプルデータ数は256(1ch当たり2サンプルで128ch分)に限らず、310、460、512等、任意の数であってよい(音源114が波形メモリ126から波形サンプルを読出す際、どれほどの分解能のタイムスロットで1サンプル読出し可能かの仕様による)。発音可能ch数も128chに限らず、(上述のボトルネックとなる種々の条件のもとで)64、80、160等、任意の数で設計することが可能である。1サンプルのビット数も、16ビットに限らず、12ビット、14ビット等であってもよい。
図2(b)の例では、2048バイトの波形データの後にエラー訂正コードを設けるフォーマットとしたが、エラー訂正コードは任意の位置に配置してよいし分割して配置してもよい。例えば、エラー訂正演算を行う単位が256バイトであれば、256バイトの波形データの後に該256バイトのエラー訂正コードを配置してもよい。
また、上記実施形態において、補間部508による補間処理は2点補間であったが、3点補間、4点補間等、任意数の点間の補間であってよい。ただし、例えば4点補間を行う場合は、各chで波形メモリ126から波形サンプルを読出すときに、1回の読出しで連続する4サンプルを読出すことになるので、発音可能ch数を減らさなければならない場合はある。波形メモリ126から複数サンプルを読出す場合、バーストモードにより高速に読出すようにしてもよい。補間部508を、サンプルバッファを備えた補間部としてもよい。
また、上記実施形態において、読出部507は、各DACの期間に、波形メモリ126を1chあたり2回アクセスして、そのchの補間処理に必要な2サンプルを波形メモリ126から読み出すようになっていたが、特許2882464に開示されているように、読出部507の内部に、過去に読み出したサンプルのうちの最新のn個(nは補間処理に必要な数)を記憶する補間バッファ(先願のサンプルRAM1205に相当)を設けて、1chあたりの波形メモリ126のアクセス回数を減らすようにしてもよい。この場合、1chあたりの波形メモリ126のアクセス回数は、ピッチカウンタ504が出力する各chの整数部アドレスの進行数となる。例えば、各chのFナンバを「1」以下に制限すれば、上記実施形態と同じく1DACあたり256回のアクセスによって、256ch分のサンプルを読み出すことができるので、この音源LSI100は、最大発音可能ch数を256として設計される。Fナンバを制限しない場合は、各chに設定されるFナンバの小数部を切り上げた数の和の最大値に応じて、最大発音可能ch数が動的に変化する。何れで設計する場合であっても、フラッシュメモリ125の「帯域幅」(実施形態では256)と波形メモリのアクセス回数(実施形態では256回)とが、一致するよう設計するのが最適である。
上記実施形態では、モード2の場合、フラッシュメモリ125から最初に転送するページの仮想アドレスから実アドレスへの変換(図6におけるP2アドレスのT(WA)の取得)は、CPU101によらずVPアドレス発生部505により自動的に行うようにしていたが(図8(a)の803,804の処理)、この初回のアドレス変換は、CPU101で行ってもよい。そのためには、CPU101側で各波形データの仮想アドレスWAに対応する実アドレス(T(WA)に相当するデータ)を保持しておき、例えば発音開始指示の際に制御レジスタ502経由で波形メモリ126のNPAiに該実アドレスを設定するようにすればよい。モード1の場合に同様にしてもよい。第2ページ以降を転送する際に、CPU101に割り込みがかからないことが重要であり、第1ページについては、多少の処理が増えても余り影響がない。割り込みでは、CPU101のレジスタの退避等が必要なため、負荷が大きい。
また上記実施形態では、NAND型フラッシュメモリに波形データを記憶するようになっていたが、記憶媒体はNAND型フラッシュメモリに限らない。本発明は、ページ単位のアクセスを高速に行うことができ、かつ、データ訂正を必要とする程度のデータエラーを生じる各種の半導体メモリに波形データを記憶する場合に広く適用することができる。
上記実施形態では、1ワードが1サンプルのリニアな波形データを例として説明したが、波形データは任意の形式で圧縮したものでもよい。その場合、1ページ1024ワードのサンプル数が区々になるので上述の帯域幅を正確に算出することが難しくなるが、予め各波形データの1ページの平均的なサンプル数を求めておき、それを用いて帯域幅を計算するようにすればよい。
上記実施形態では、波形メモリ内にアドレス変換テーブルを配置しているが、波形メモリ内ではなく、LSI100の内部にアドレス変換テーブルを記憶するための記憶部を設けてもよい。また、音源LSI100の内部にCPU101を内蔵する構成としたが、CPU101を内蔵する代わりにCPUとのインターフェースを行うCPU_I/F部を内蔵し、該CPU_I/F部を介して外部のCPU101’から制御される構成としてもよい。さらに、メモリI/F部102、RAM103、表示器I/F部104、パラレルI/F部105、シリアルI/F部106のうちの任意の1ないし複数を、音源LSI100に内蔵しない構成としてもよい。逆に、波形メモリ126は、スタティックメモリ型に変更して音源LSI100の内部に取り込んでもよい。
101…CPU、103…RAM、103…RAM、104…表示器I/F、105…パラレルI/F、106…シリアルI/F、107…メモリI/F、108…F→B転送部、109…転送バッファ、110…B→M転送部、111…エラー訂正部、112…メモリI/F、113…転送制御部、114…音源、121…NOR型フラッシュメモリ、122…表示器、123…操作子、124…MIDI I/O、125…NAND型フラッシュメモリ、126…波形メモリ、127…DAC、128…サウンドシステム。

Claims (6)

  1. 複数のチャンネルを備え、それらの各チャンネルでそれぞれ楽音を生成する楽音生成装置であって、
    複数の各波形データの一連のサンプルデータを各ページ毎にエラー訂正コード付きで記憶した外部メモリと、楽音波形を生成する楽音生成部と、入力された演奏情報に応じて前記楽音生成部を制御する制御部とを備え、
    前記楽音生成部は、
    各波形データの先頭ページのサンプルデータを記憶した先頭波形領域と、各チャンネルのバッファ領域とを有する波形メモリと、
    前記制御部が発音開始を指示する際にパラメータを設定する制御レジスタであって、各チャンネルごとの領域に、少なくとも、発音する楽音の音高に応じた速度情報、発音に使用する波形データの前記波形メモリの先頭波形領域を指す先頭波形アドレス、発音に使用する波形データの前記外部メモリ中の位置を示す波形位置情報、および発音する楽音の振幅を規定する振幅制御情報が設定される、制御レジスタと、
    各チャンネルごとに、発音開始の指示に応じて前記速度情報の示す速度で増加するカウント値を生成するとともに、該カウント値が1ページ分進行するごとに転送指示を発生する、ピッチカウンタと、
    各チャンネルごとに、前記カウント値に応じて、前記波形メモリから、まず、前記先頭波形アドレスの示す波形データの先頭ページのサンプルデータを読出し、その後、当該チャンネルのバッファ領域からサンプルデータを繰り返し読出す、読出部と、
    各チャンネルごとに、前記外部メモリから次に読出すべきページを示す次ページアドレス情報を、前記波形位置情報に基づいて生成し、次ページアドレス記憶部に設定する次ページアドレス設定部と、
    各チャンネルの、前記発音開始の指示と前記転送指示とに応じて、当該チャンネルのチャンネル番号を取り込む、転送待ちキューと、
    前記転送待ちキューから、前記取り込まれたチャンネル番号を先入れ先出しの態様で順次取り出し、前記次ページアドレス記憶部に設定されている当該チャンネルの次ページアドレス情報が示すページのサンプルデータを、前記外部メモリからバースト読出して、前記波形メモリの該チャンネル番号の示すチャンネルのバッファ領域に書込む、転送部と、
    前記転送部により前記外部メモリから読出したページのデータに対して、エラー訂正コードを利用して該ページのサンプルデータのエラーの検出を行い、エラーの有無およびエラーが有った場合にはエラー訂正の可否を決定すると共に、検出されたエラーが訂正可である場合はその訂正を実行する、エラー訂正部と、
    前記エラー訂正部により訂正不可なエラーが検出された場合、当該チャンネルで生成中の楽音の音量を急速減衰させるエラー検出部と、
    各チャンネルごとに、前記振幅制御情報に応じて、前記読出部が読出したサンプルデータの振幅を制御し、楽音波形のサンプルデータを形成する、振幅制御部と
    を備え、
    前記制御部は、
    入力された新たな楽音の音高と発音開始を示す演奏情報に応じて、前記複数のチャンネルの1つを割り当て、前記制御レジスタの該チャンネルの領域に、該音高に応じた前記速度情報、前記先頭波形アドレス、前記波形位置情報、および前記振幅制御情報を設定し、さらに、該チャンネルの前記発音開始を指示する
    ことを特徴とする楽音生成装置。
  2. 請求項1に記載の楽音生成装置において、
    前記エラー検出部は、前記エラー訂正部によりエラーが検出されたとき、そのエラーが発生した前記外部メモリ上のページを特定する情報と、そのエラーが訂正できたか否かを示す情報を含むエラー通知を、前記制御部に送り、
    前記制御部は、
    (1)前記エラー通知が訂正可のエラーであった場合は、そのエラーが発生した当該ページを特定する情報を、代替待ちページとして記録し、
    (2)前記エラー通知が訂正不可のエラーであった場合は、正常な楽音生成が行えない旨を示す警告を出力する
    ことを特徴とする楽音生成装置。
  3. 請求項2に記載の楽音生成装置において、
    前記制御部は、前記代替待ちページとして記録されているページがあるとき、自動的に起動されたバックグラウンド処理で、または、ユーザの指示により起動された処理で、前記外部メモリ上に代替ページを確保し、前記代替待ちページとして記録されているページのデータを読出し、該読出しでエラーが発生した場合はエラー訂正を行って適正なデータを求め、該適正なデータを前記代替ページに格納して、エラーが発生したページを置き換えることを特徴とする楽音生成装置。
  4. 請求項1から3の何れか1つに記載の楽音生成装置において、
    前記エラー検出部は、前記転送部による前記バッファ領域へのサンプルデータの書込みが前記読出部による前記バッファ領域からのサンプルデータの読出しに間に合わなかったことを検出し、間に合わなかった場合は、当該チャンネルで生成中の楽音の音量を急速減衰させるとともに、そのような転送エラーが発生した旨を示すエラー通知を、前記制御部に送り、
    前記制御部は、前記エラー通知を受けて、正常な楽音生成が行えない旨を示す警告を出力する
    ことを特徴とする楽音生成装置。
  5. 請求項4に記載の楽音生成装置において、
    前記制御部は、
    前記1ページ分のサンプルデータをサンプリング周期ごとに1サンプルの速度で再生した場合の再生時間である基本再生期間に前記外部メモリから読出し可能な最大ページ数を「全帯域幅」と呼び、チャンネル割り当てを行う際、該チャンネルで生成する楽音の速度情報に応じて前記基本再生期間のうちに読出す必要のあるサンプルデータのページ数を「帯域幅」と呼ぶとき、
    発音割り当てした全チャンネルの帯域幅の和が全帯域幅を超えないようにチャンネル割り当てを制御し、
    前記転送エラーのエラー通知を受けたとき、前記全帯域幅を所定数だけ下げる
    ことを特徴とする楽音生成装置。
  6. 請求項1から5の何れか1つに記載の楽音生成装置において、
    前記外部メモリは、独立した集積回路で構成されるNAND型フラッシュメモリであることを特徴とする楽音生成装置。
JP2010066569A 2010-03-23 2010-03-23 楽音生成装置 Active JP5510813B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2010066569A JP5510813B2 (ja) 2010-03-23 2010-03-23 楽音生成装置
US13/052,919 US8183452B2 (en) 2010-03-23 2011-03-21 Tone generation apparatus
EP11159392A EP2369581B1 (en) 2010-03-23 2011-03-23 Tone generation apparatus
CN201110076001.0A CN102237126B (zh) 2010-03-23 2011-03-23 乐音产生设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010066569A JP5510813B2 (ja) 2010-03-23 2010-03-23 楽音生成装置

Publications (2)

Publication Number Publication Date
JP2011197550A JP2011197550A (ja) 2011-10-06
JP5510813B2 true JP5510813B2 (ja) 2014-06-04

Family

ID=44875794

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010066569A Active JP5510813B2 (ja) 2010-03-23 2010-03-23 楽音生成装置

Country Status (1)

Country Link
JP (1) JP5510813B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6008394B2 (ja) * 2012-08-15 2016-10-19 株式会社コルグ 楽音発生装置

Also Published As

Publication number Publication date
JP2011197550A (ja) 2011-10-06

Similar Documents

Publication Publication Date Title
JP5534388B2 (ja) 楽音生成装置
US8183452B2 (en) Tone generation apparatus
JP4655812B2 (ja) 楽音発生装置、及びプログラム
US5689080A (en) Computer system and method for performing wavetable music synthesis which stores wavetable data in system memory which minimizes audio infidelity due to wavetable data access latency
US5717154A (en) Computer system and method for performing wavetable music synthesis which stores wavetable data in system memory employing a high priority I/O bus request mechanism for improved audio fidelity
JP5614420B2 (ja) 楽音発生装置、電子楽器、プログラム及び楽音発生方法
US10373595B2 (en) Musical sound generation device
JP3672159B2 (ja) 音源システム
US5763801A (en) Computer system and method for performing wavetable music synthesis which stores wavetable data in system memory
US10474387B2 (en) Musical sound generation device, musical sound generation method, storage medium, and electronic musical instrument
US5809342A (en) Computer system and method for generating delay-based audio effects in a wavetable music synthesizer which stores wavetable data in system memory
JP3163984B2 (ja) 楽音発生装置
JP5510813B2 (ja) 楽音生成装置
JP5510814B2 (ja) 楽音生成装置
JP5510815B2 (ja) 楽音生成装置
JP5360474B2 (ja) 楽音生成装置
JP2000276172A (ja) 楽音生成装置および記憶媒体
JP5534389B2 (ja) 楽音生成装置
JP3003559B2 (ja) 楽音生成方法
JP3873160B2 (ja) 楽音発生装置及び楽音発生処理のプログラムを記録した記録 媒体
JP4254677B2 (ja) 楽音発生装置および楽音発生処理のプログラム
JP3695404B2 (ja) 波形処理デバイス
US20100217922A1 (en) Access module, storage module, musical sound generating system and data writing module
JPH1097258A (ja) 波形メモリ音源装置および楽音発生装置
JP3627590B2 (ja) 音生成方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130121

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: 20140228

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140313

R150 Certificate of patent or registration of utility model

Ref document number: 5510813

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150