(57)【特許請求の範囲】
【請求項１】
所定の波形圧縮方式を用いて波形の振幅値の差分値が浮動小数点データである所定数Ｎの仮数部、及び前記所定数Ｎの仮数部に共通化させた指数部を差分値とした差分化指数部を同一の記憶場所に記憶した波形データと、予め設定されたループ範囲内の前記波形データから前記波形の振幅値を生成するための生成情報として、前記ループ範囲の先頭から、音高に対応する記憶場所の歩進量の最大値に基づく個数の記憶場所に対応した、前記波形の振幅値及び積分指数値を記憶した記憶手段と、
前記記憶手段から波形データを読み出す記憶場所を所定タイミングで順次指定するとともに、前記記憶手段に記憶された波形データの前記ループ範囲内の記憶場所を繰り返して指定する指定手段と、
前記指定手段が指定した記憶場所から波形データを読み出し、前記所定タイミングをＮ＋１分割した第１の演算処理タイミングにおいて、その差分化指数部を順次累算して積分指数値を生成し、第２以降の演算処理タイミングにおいて、該生成した積分指数値を用いて仮数部を伸長し、該演算処理タイミング各々に対応する差分値を生成し、該生成した差分値を順次累算することで前記波形を生成するとともに、前記指定手段が前記ループ範囲内の先頭部分に戻って記憶場所を指定したとき、該記憶場所から読み出した仮数部及び該記憶場所に対応した前記生成情報の積分指数値を用いて差分値を生成し、該記憶場所に対応した前記生成情報の振幅値を用いて前記波形を生成する波形生成手段と、
を具備したことを特徴とする波形読出装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、所定の波形圧縮方式を用いて波形の振幅値の差分値が仮数部、指数部からなる浮動小数点データに符号化された波形データを記憶手段から読み出して波形を生成する波形読出装置に関する。
【０００２】
【従来の技術及び発明が解決しようとする課題】
近年、例えば、電子楽器においてはデジタル化が進み、コンピュータ技術が広く導入されている。このため、電子楽器においては、波形をデジタル処理で生成（再生）するＰＣＭ方式のデジタル音源装置（ＰＣＭ音源装置）が広く搭載されている。
【０００３】
ＰＣＭ方式は、自然楽器等から発せられた音（楽音）を所定のサンプリング周期でサンプリングし、これにより得たサンプル値を量子化して２進符号に符号化したデータを波形データとするものであり、ＰＣＭ音源装置は、このような波形データを記憶した、或いは記憶するメモリを備えている。このようなＰＣＭ音源装置に搭載される波形読出装置は、メモリから波形データを読み出して波形を生成するものであり、ＰＣＭ音源装置は、この波形読出装置が生成した波形を用いて楽音を再生するものである。
【０００４】
ＰＣＭ方式では、自然界の様々な音の音色を常に忠実に再生できるという利点がある。しかし、周波数特性及びＳ／Ｎ比が優れた音を再生するためには、音を高いサンプリング周波数でサンプリングし、且つ、これにより得たサンプル値を大きなビット数で量子化する必要がある。このため、ＰＣＭ方式では波形データを記憶するために大容量のメモリが必要であるという不具合があった。
【０００５】
この不具合を回避するために、波形データを圧縮する波形圧縮方式が多く開発されている。例えば、波形データの差分値をメモリに記憶させるＤＰＣＭ方式はこれの代表的なものである。また、波形データを指数部、及び仮数部からなる浮動小数点データに変換することで、データの精度を高く維持するとともに、データ量の低減を図っているものがあり（浮動小数点方式）、この浮動小数点方式の一つの方式として差分化圧縮浮動小数点方式がある。
【０００６】
この差分化圧縮浮動小数点方式は、波形の振幅値の差分値を浮動小数点データで単に表現するのではなく、更にその指数部を差分値で表現、即ちそれまでの指数部を累算した値（以降、積分指数値と記す）からの差分値を指数部の値とするものである。従って、この方式を用いた場合、単にＤＰＣＭ方式と浮動小数点方式を組み合わせるよりも更にデータ量を低減することができる。また、この方式には、１つの指数部を複数の仮数部に共通とさせることで、さらにデータ量の低減を図っている方式もある。
【０００７】
なお、この方式により符号化された波形データは、先ず、指数部を順次累算することで復号し、次にこの復号した指数部（積分指数値）を用いて仮数部を復号、即ち波形の振幅値の差分値を復号し、最後にこの復号した差分値を順次累算することで波形の振幅値が復号される。
【０００８】
ところで、一般の波形読出装置には、メモリに記憶される波形データ量を低減するための機能として、ループ機能を備えている。この機能は、メモリに記憶された波形データの一部（ループ範囲）を繰り返し読み出して波形を生成する機能である。
【０００９】
大抵の自然楽器は音が長く持続するので、その音を全てサンプリングするとそのデータ量は膨大となる。しかし、このループ機能により波形の生成（楽音の再生）を持続させることができることから、メモリに記憶させるデータ量を大幅に低減させることができる。ループ機能により生成した波形は、エンベローブを付加することで減衰させることができる。
【００１０】
ループ機能により繰り返し読み出されるループ範囲は、通常、スタートアドレス（ポイント）とエンドアドレス（ポイント）で管理される。しかし、上記した差分化圧縮指数浮動小数点方式で波形データがメモリに記憶されている場合、例えばエンドアドレスまで波形データを読み出した後、スタートアドレスに戻って波形データを読み出すと、波形データの指数部、及び仮数部が各々差分値で符号化されているため、このスタートアドレスに記憶された波形データをそれまで累算した積分指数値等を用いて復号することになり、波形を正確に生成できないという問題点があった。
【００１１】
差分化圧縮指数浮動小数点方式により波形データ量を低減することはできるが、サンプリングする期間の長さに応じて波形データ量が増大することから、波形データ量の圧縮（低減）とともに、波形の生成を持続できる波形読出装置が望まれていた。
【００１２】
なお、このような問題点を回避するために、そこに記憶された波形データの振幅値が０となるようなアドレスをスタートアドレス、エンドアドレスとして選択する波形読出装置がある。しかし、この波形読出装置では任意のループ範囲を選択できないため、所望の部分の波形を生成できないという問題点や、そのアドレスを検出するための煩雑な作業が必要であるという問題点があった。
【００１３】
また、その他の波形読出装置としては、ループ範囲において、その範囲の波形データの平均値が０となるようにメモリに記憶された波形データ（差分値）を修正しているものもある。しかし、この装置では、数多くの種類（音色）の波形データを記憶した音源装置に適用された場合、各種類毎に上記した修正を行わなければならず、それに要する作業が非常に煩雑となるという問題点があった。また、この修正により、再生される楽音の音質を劣化させることがあるという問題点もあった。
【００１４】
本発明の課題は、波形の振幅値の差分値を符号化した波形データが記憶されている場合に、そのデータ量をさらに低減するとともに、波形の生成を正確に持続する波形読出装置を提供することにある。
【００１５】
【課題を解決するための手段】
本発明の波形読出装置は、先ず、所定の波形圧縮方式を用いて波形の振幅値の差分値が仮数部、及び指数部からなる浮動小数点データに符号化された波形データと、予め設定されたループ範囲内の波形データから波形の振幅値を生成するための生成情報を記憶した記憶手段を有する。
【００１６】
この記憶手段には、例えば、浮動小数点データである所定数Ｎの仮数部、及び該所定数Ｎの仮数部に共通化させた指数部を差分値とした差分化指数部を同一の記憶場所に記憶した波形データと、ループ範囲の先頭から、音高に対応する記憶場所の歩進量の最大値に基づく個数の記憶場所に対応した、波形の振幅値及び積分指数値が記憶される。
【００１７】
指定手段は、この記憶手段から波形データを読み出す記憶場所を所定タイミングで順次指定するとともに、記憶手段に記憶された波形データのループ範囲内の記憶場所を繰り返して指定する。
【００１８】
波形生成手段は、指定手段が指定した記憶場所から波形データを読み出し、該所定タイミングをＮ＋１分割した第１の演算処理タイミングにおいて、その差分化指数部を順次累算して積分指数値を生成し、第２以降の演算処理タイミングにおいて、該生成した積分指数値を用いて仮数部を伸長し、該演算処理タイミング各々に対応する差分値を生成し、該生成した差分値を順次累算することで波形を生成するとともに、指定手段がループ範囲内の先頭部分に戻って記憶場所を指定したとき、該記憶場所から読み出した仮数部及び該記憶場所に対応した生成情報の積分指数値を用いて差分値を生成し、該記憶場所に対応した生成情報の振幅値を用いて波形を生成する。
【００２０】
【作用】
本発明の波形読出装置は、ループ範囲の波形データから波形を生成するための生成情報を保持し、このループ範囲の指定が繰り返されたとき、それまで波形の生成に用いていた情報をこの生成情報に置き換え、このループ範囲内の波形データによる波形の生成を行う。これにより、ループ範囲の指定が任意に行えるとともに、このループ範囲内で生成すべき波形が正確に生成される。
【００２１】
例えば、波形圧縮方式として差分化圧縮浮動小数点方式が採用されている場合、例えばループ範囲の先頭の波形データを復号するために、この波形データに対応する積分指数値、及び積分波形値を生成情報として保持し、ループ範囲の指定が繰り返されて再びその先頭の波形データが指定されると、生成情報の積分指数値を用いて振幅値の差分値を復号し、この復号した差分値を生成情報の積分波形値に加算することで波形を生成する。
【００２２】
【実施例】
以下、本発明の実施例について、第１の実施例、第２の実施例の順序で図面を参照して詳細に説明する。
【００２３】
図１は、第１の実施例による波形読出装置１００の構成を示すブロック図であり、この波形読出装置１００は、電子楽器に搭載された音源装置に適用されたものである。
【００２４】
図１に示す如く、この波形読出装置１００は、差分化圧縮指数浮動小数点方式で楽音波形の振幅値の差分値（波形差分値）を圧縮した波形データ（記憶データ）を記憶した波形メモリ１０１と、後述するようにして波形メモリ１０１から波形データを読み出すアドレスを更新するアドレスジェネレータ１０２と、波形メモリ１０１から読み出された記憶データを入力し、アドレスジェネレータ１０２から入力した各種信号等に基づいてこれを復号し、楽音波形を生成する積分補間回路１０３とから構成されている。
【００２５】
以上の構成において、その概略動作を説明する。
アドレスジェネレータ１０２は、特には図示しない電子楽器の制御部からの音色、音高（ピッチ）等の指示に基づいて波形メモリ１０１から記憶データを読み出すアドレスを決定し、これをアドレスデータとして波形メモリ１０１に出力する。このアドレスデータは、後述するように、所定のタイミングで複数連続して出力されるものである。
【００２６】
また、アドレスジェネレータ１０２は、詳細は後述するが、積分補間回路１０３が波形メモリ１０１から入力した記憶データを用いて楽音波形を生成するための補間用小数部データ、積分値ステップ信号、及びループ信号を生成し、これらの信号を積分補間回路１０３に出力する。
【００２７】
ここで、波形メモリ１０１に記憶された記憶データについて説明する。図２（ａ）はこの波形メモリ１０１に記憶された記憶データのフォーマットを示す説明図であり、同図（ｂ）はこの記憶データにより生成される楽音波形を示す説明図である。
【００２８】
図２において、その先頭が“Ａ”である記号はアドレスを表し、他の記号においてその先頭が“Ｅ”は記憶データの指数部（の値）、“Ｄ”は波形差分値を各々表す。また、各記号におけるｎ、ｎ＋１等の添字は、ある任意の位置、この位置からの変位を表すものである（以降、他の記号についても同様とし、特に限定しないときは“ｘ”を添字とする）。
【００２９】
また、図２（ａ）において、各枠は各々１ビットを表しており（以降、他の図においても同様）、第１の実施例では指数部（差分化指数部）が２ビットで仮数部が６ビットの計８ビットのデータが１回のサンプリングにより得た記憶データとして波形メモリ１０１に記憶されていることを示している。
【００３０】
第１の実施例で採用した差分化圧縮指数浮動小数点方式は、楽音をサンプリングしたとき、今回と前回で得たそれの振幅値の差分値を浮動小数点データに符号化し、更にその指数部を指数部における差分値としたものである。
【００３１】
従って、この方式で波形メモリ１０１に記憶された記憶データから楽音波形をアドレス毎に生成するには、先ず、各アドレスに記憶された記憶データの差分化指数部を順次累算することで指数部を復号し、次にこの復号した指数部（積分指数値）を用いて仮数部を復号、即ち波形差分値を復号し、最後にこの波形差分値をこれまでに累算した値（積分波形値）に加算することで生成される。
【００３２】
この楽音波形の生成は、記憶データを読み出す速さ（アドレス歩進量）により、アドレス毎に行われるだけでなく、あるアドレスとその次のアドレスの間の振幅値を得なければならない、即ち補間（演算）しなければならない場合も多くある。
【００３３】
その場合の補間演算は、例えばアドレスＡｎ＋２とＡｎ＋３間で補間演算（直線補間演算）を行うとすると、図２（ｂ）に示した楽音波形からも分かるように、例えば、アドレスＡｎ＋１までの振幅値の積分値をＩＷ、アドレスＡｎ＋２に浮動小数点データとして記憶された差分値をＤＷ、Ａｎ＋２から振幅値を得たい位置までの差（通常、アドレスは１つずつ増えるので、この値は小数で表されたアドレス間との比となる）をＤＡとすると、その振幅値Ｗは以下のようにして算出することができる。
【００３４】
【数１】
Ｗ  ＝  ＩＷ  ＋  ＤＷ・ＤＡ
波形メモリ１０１は、アドレスジェネレータ１０２から出力されたアドレスデータに従って上記のように記憶された記憶データを読み出し、これを積分補間回路１０３に出力する。積分補間回路１０３は、詳細は後述するが、波形メモリ１０１から入力した記憶データに対し、アドレスジェネレータ１０２から入力した各種信号に基づいて楽音波形を生成し、これを特には図示しない楽音出力部に出力する。これにより、楽音出力部から楽音が放音されることになる。
【００３５】
以上が概略動作である。次に、図３を参照して、アドレスジェネレータ１０２について詳細に説明する。図３は、アドレスジェネレータ１０２の回路構成を示すブロック図であり、このアドレスジェネレータ１０２は、大別して、アドレス更新部、ステップ演算器３１０、及びアドレス生成器３１１から構成されたものである。
【００３６】
このアドレス更新部は、現在値アドレスＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０１、アドレス歩進量ＲＡＭ３０２、エンドアドレスＲＡＭ３０３、ループスタートアドレスＲＡＭ３０４、加算器３０５、データセレクタ３０６、比較器３０７、減算器３０８、加算器３０９から構成される。
【００３７】
この構成において、先ず、アドレス更新部の動作から説明する。上記した各ＲＡＭ３０１〜３０４は各々電子楽器の制御部により、現在値アドレスＲＡＭ３０１はユーザが指定した音色に対応する記憶データが記憶されている波形メモリ１０１のアドレスの初期値を保持し、アドレス歩進量ＲＡＭ３０２はユーザが操作した演奏操作子（図示せず）に割り当てられた音高に対応するアドレス歩進量を保持し、エンドアドレスＲＡＭ３０３はその音色の記憶データが記憶された最後のアドレスの値（エンドアドレス値）を保持し、ループスタートアドレスＲＡＭ３０４はその記憶データにおけるループ範囲の先頭アドレスの値（ループスタートアドレス値）を保持する。このエンドアドレス値は、記憶データが記憶された波形メモリ１０１の最後のアドレスを示すとともに、ループ範囲の最後のアドレスを示すものである。
【００３８】
現在値アドレスＲＡＭ３０１は、波形メモリ１０１から記憶データを読み出すアドレスの現在値（現在値アドレス）を随時更新してこれを保持する。加算器３０５は、この現在値アドレスとアドレス歩進量ＲＡＭ３０２に保持されたアドレス歩進量を加算し、この加算結果をデータセレクタ３０６、比較器３０７、及び減算器３０８に出力する。
【００３９】
図４は、各部から出力されるデータを示す説明図であり、上記の現在値アドレス、アドレス歩進量、及び加算器３０５出力（演算結果）の各データを示したものである。
【００４０】
上記したように、各枠は１ビットを表すことから、図４に示す如く、現在値アドレスは整数部１２ビットで小数部６ビットの計１８ビットのデータであり、アドレス歩進量は整数部２ビットで小数部６ビットの計８ビットのデータであることを示している。また、この現在値アドレスとアドレス歩進量を加算した値である加算器３０５の出力は、現在値アドレスと同様に、整数部１２ビットで小数部６ビットの計１８ビットのデータであることを示している。なお、第１の実施例では、アドレス歩進量は整数部が２ビットである８ビットデータであることから、このビットデータで表現できる範囲で音高を変化させることができるものである。
【００４１】
ここで、図４において、現在値アドレスと加算器３０５出力の整数部下位３ビットのデータであるｎａ、ｎｂは、後述するように、通常アドレス更新時においてステップ演算器３１０が積分ステップ信号を生成するための信号となるものである。
【００４２】
比較器３０７は、加算器３０５の出力値とエンドアドレスＲＡＭ３０３が保持しているエンドアドレス値を比較し、その比較結果を１ビットの信号（ループ信号）として出力する。この比較結果は、加算器３０５の出力値がエンドアドレス値よりも小さいと比較したときにはＬ（論理値が０）であり、そうでないと比較したときはＨ（論理値が１）である。
【００４３】
減算器３０８は、加算器３０５の出力値とエンドアドレス値の減算を行い、その演算結果を加算器３０９に出力する。加算器３０９は、この演算結果とループスタートアドレスＲＡＭ３０４が保持しているループスタートアドレス値を加算し、その演算結果をデータセレクタ３０６に出力する。
【００４４】
図６は、これらループスタートアドレス、減算器３０８出力、及び加算器３０９出力の各データを示す説明図である。この図６において、ループスタートアドレスと減算器３０８出力の整数部下位３ビットのデータであるｌａ、ｌｂは、後述するように、現在値アドレスをループ範囲の先頭部分に戻すループ動作時においてステップ演算器３１０が積分ステップ信号を生成するための信号となるものである。
【００４５】
データセレクタ３０６は、加算器３０５、及び３０９の演算結果を入力すると、比較器３０７から入力したその比較結果に従って何方か一方を選択、即ち比較結果がＬのときは加算器３０５の演算結果、Ｈのときは加算器３０９の演算結果を選択して出力する。このデータセレクタ３０６から出力された演算結果は、現在値アドレスＲＡＭ３０１に新たに保持されることで現在値アドレスが更新され、また、その小数部は補間用小数部データとして積分補間回路１０３に出力される。
【００４６】
比較器３０７がＨを出力したときは、上記したように、加算器３０５の出力値がエンドアドレス値以上であることから、ループ範囲の先頭部分に戻って記憶データの読み出しを行うときである。即ち、比較器３０７は、ループ動作を行うか否かを指示するものであり、これの比較結果がループ信号として積分補間回路１０３に出力される。
【００４７】
比較器３０７がＨを出力したときの減算器３０８は、加算器３０５の出力値からエンドアドレス値を引いた値（以降、超過分と記す）を出力し、加算器３０９はこの値とループスタートアドレス値を加算している。即ち、このときの加算器３０９の出力値は、エンドアドレス値の超過分をループスタートアドレス値に加算した値である。この加算器３０９の出力値は、データセレクタ３０６を介して現在値アドレスＲＡＭ３０１に入力され、現在値アドレスとして新たに保持される。
【００４８】
このアドレス更新部の動作を要略すると、次のようになる。
電子楽器の制御部により現在値アドレスＲＡＭ３０１に最初に保持された現在値アドレスは、エンドアドレス値を越えるまで、その値にアドレス歩進量が加算されることで順次更新される。アドレス歩進量を加算した値がエンドアドレス値を越えると、その超過分をループスタートアドレス値に加算し、この加算した値を新たな現在値アドレスとしてループを行うとともに、信号レベルをＨとしたループ信号を積分補間回路１０３に出力する。
【００４９】
次に、ステップ演算器３１０について説明する。
第１の実施例では、差分化圧縮浮動小数点方式を採用しているので、現在値アドレスの更新に対応させて積分指数値、及び積分波形値を更新しなければならない。しかし、上記したように、アドレス歩進量は整数部と小数部を有する値なので、現在値アドレスはアドレス歩進量が一定であってもその整数部の変化量が異なることになる。ステップ演算器３１０は、現在値アドレスの整数部における更新量、即ち波形メモリ１０１における読出アドレスの更新量を積分値ステップとして生成し、これを積分補間回路１０３に出力するものである。
【００５０】
このステップ演算器３１０は、積分値ステップ信号を生成するために、現在値アドレスＲＡＭ３０１から読み出された現在値アドレスの整数部下位３ビットデータである信号ｎａを始めとして、同様に加算器３０５の出力から信号ｎｂ、ループスタートアドレスＲＡＭ３０４から信号ｌａ、及び加算器３０９の出力から信号ｌｂを各々入力し（図４及び図６参照）、さらに比較器３０７からループ信号を入力する。
【００５１】
前述したように、現在値アドレスの更新は、その値がエンドアドレス値よりも小さいときに行われる通常アドレス更新時と、その値がエンドアドレス値以上となったときに行われるループ動作時とがある。
【００５２】
ステップ演算器３１０は、通常アドレス更新時、即ちループ信号がＬの場合、信号ｎｂから信号ｎａを減算した値を、ループ動作時、即ちループ信号がＨの場合、信号ｌｂから信号ｌａを減算した値を積分ステップ信号として積分補間回路１０３に出力する。
【００５３】
図５は、通常アドレス更新時における積分値ステップを示す説明図であり、図７は、ループ動作時における積分値ステップを示す説明図である。
第１の実施例では、上記したように、アドレス歩進量の整数部を２ビットとしている。このため、図５に示す如く、信号ｎａと信号ｎｂの値の組み合わせにより、積分値ステップの値は１〜４Ｄ（４Ｄ＝１００Ｂ）の範囲となる。これは、図７に示したループ動作時においても同じである。
【００５４】
次に、アドレス生成器３１１の動作について説明する。アドレス生成器３１１は、データセレクタ３０６の出力値を始め、比較器３０７の比較結果、エンドアドレスＲＡＭ３０３が保持したエンドアドレス値、ステップ演算器３１０が出力した積分値ステップ信号を各々入力し、比較器３０７の比較結果に応じてアドレスの生成を行うものである。
【００５５】
比較器３０７の比較結果がＬのとき、アドレス生成器３１１は、通常アドレス更新時として、入力したデータセレクタ３０６の出力値、即ち現在値アドレスを切り上げ、或いは切り下げることで整数化する。現在値アドレスを整数化すると、これを基準とし、その値を減算することで得る３種類のアドレス値を生成し、これらを所定のタイミングで波形メモリ１０１にアドレスデータとして順次出力する。
【００５６】
図８（ａ）は、この通常アドレス更新時にアドレス生成器３１１が出力するアドレスデータ例を示す説明図である。同図（ａ）に示す如く、その値が小さいほうから順に４つのアドレスデータが出力される。
【００５７】
一方、比較器３０７の比較結果がＨのとき、アドレス生成器３１１は、ループ動作時として、上記と同様に現在値アドレス値を整数化するとともに、エンドアドレス値に積分値ステップを加算したアドレス値と、そのアドレス値にさらに５を加算したアドレス値、及びループ範囲の先頭部分に戻した現在値アドレスを生成する。
【００５８】
図８（ｂ）は、このループ動作時にアドレス生成器３１１が出力するアドレスデータ例を示す説明図である。同図（ｂ）に示すように、生成したアドレスデータが出力される。
【００５９】
ここで、波形メモリ１０１に記憶されたループ範囲の記憶データについて図９を参照して説明する。図９（ａ）は、ループ範囲の先頭部分とエンドアドレス以降に記憶されたデータ例を示す説明図であり、同図（ｂ）は、そのループ範囲の先頭部分の記憶データにより生成される楽音波形を示す説明図である。図９において、Ｌｎはループスタートアドレス、ＥＡはエンドアドレスである。
【００６０】
第１の実施例では、上記したように、エンドアドレスＥＡからの超過分は最大で４Ｄであることから、ループ範囲の先頭部分に戻したときの現在値アドレスは、アドレスＬｎ〜Ｌｎ＋４の間となる。この先頭部分の記憶データから楽音波形を生成できるように、第１の実施例では、そのアドレスＬｎ〜Ｌｎ＋４の記憶データに対応した積分指数値、及び積分波形値を予め算出し、これをエンドアドレスＥＡ以降に記憶したものである。
【００６１】
即ち、ループスタートアドレスＬｎの記憶データまでの積分波形値ＩＷＶ０、及び積分指数値ＩＥＶ０をエンドアドレスＥＡ、及びアドレスＥＡ＋５に各々記憶し、アドレスＬｎ＋１〜Ｌｎ＋４の各記憶データに対応した積分波形値ＩＷＶ１〜４、及び積分指数値ＩＥＶ１〜４を同様にしてエンドアドレスＥＡ以降に記憶させたものである。
【００６２】
このため、例えば、ループスタートアドレスＬｎに現在値アドレスをループさせた場合、エンドアドレスＥＡ、アドレスＥＡ＋５に記憶されたデータを読み出すことでそれに対応した楽音波形を正確に生成することができる。他のアドレスＬｎ＋１〜４においてもこれは同様である。
次に、積分補間回路１０３について、図１０を参照して説明する。図１０は、この積分補間回路１０３の回路構成を示すブロック図である。
【００６３】
制御回路１００１は、アドレスジェネレータ１０２から積分値ステップ信号、及びループ信号を入力し、これらの信号に基づいて、ｓｕｂ、ｓｅｌ１、ｓｅｌ２、ｃｌｒ１、及びｃｌｒ２の各種信号を生成して出力することで、全体的な制御を行うものである（各種信号については後述する）。
【００６４】
データレジスタ１００２は、波形メモリ１０１が出力した記憶データをストアし、これをデータセレクタ１００３、及びシフタ１００４に出力する。この記憶データは浮動小数点データであることから、データレジスタ１００２は、記憶データとともに、その指数部のみのデータをデータセレクタ１００３に出力している。
【００６５】
データセレクタ１００３は、制御回路１００１からセレクト信号ｓｅｌ２、制御信号ｃｌｒ２を入力し、各信号に応じて動作する。具体的には、セレクト信号ｓｅｌ２の値が０のときはデータレジスタ１００２から入力した指数部データ、１のときはそれがストアした記憶データ（浮動小数点データ）、２のときはシフタ１００４から入力したデータを選択し、制御信号ｃｌｒ２の値により、この値が０のときはこのようにして選択したデータを加減算器１００５に出力し、この値が１のときはデータの出力を停止（このときのデータ値は０）する。
【００６６】
シフタ１００４は、データレジスタ１００２から入力した記憶データの仮数部を加減算器１００５から入力した演算結果に応じてシフトすることにより伸長する。即ち、波形差分値を復号するとともに、浮動小数点データから固定小数点データに変換するものである。
【００６７】
積分指数値ＲＡＭ１００７は、現在の積分指数値を記憶するものである。この積分指数値ＲＡＭ１００７は制御回路１００１により制御され、後述するタイミングで加減算器１００５の演算結果の書き込みを行うことで、波形メモリ１０１からの記憶データの読み出しに応じて積分指数値を更新する。
【００６８】
積分波形値ＲＡＭ１００８は、現在の積分波形値を記憶するものである。積分指数値ＲＡＭ１００７と同様に、この積分波形値ＲＡＭ１００８は制御回路１００１により制御され、後述するタイミングで加減算器１００５の演算結果の書き込みを行うことで、波形メモリ１０１からの記憶データの読み出しに応じて積分波形値を更新する。
【００６９】
データセレクタ１００６は、積分指数値ＲＡＭ１００７、及び積分波形値ＲＡＭ１００８から読み出されたデータを入力し、制御回路１００１から入力したセレクト信号ｓｅｌ１、制御信号ｃｌｒ１に応じて動作する。具体的には、セレクト信号ｓｅｌ１の値が０のときは積分波形値ＲＡＭ１００８から入力した積分波形値データ、１のときは積分指数値ＲＡＭ１００７から入力した積分指数値データを選択し、制御信号ｃｌｒ１の値により、この値が０のときはこのようにして選択したデータを加減算器１００５に出力し、この値が１のときはデータの出力を停止（このときのデータ値は０）する。
【００７０】
加減算器１００５は、データセレクタ１００３、及びデータセレクタ１００６から入力したデータの加減算を行うものである。この加減算器１００５は、制御回路１００１から制御信号ｓｕｂを入力し、その信号の値が０のときは加算、１のときは減算を行う。加減算器１００５の演算結果は、前述したシフタ１００４の他に、積分指数値ＲＡＭ１００７、積分波形値ＲＡＭ１００８、及びデータレジスタ１００９に各々出力される。
【００７１】
データレジスタ１００９は、補間演算を行うために、加減算器１００５の演算結果を保持するものである。乗算器１０１０は、アドレスジェネレータ１０２が出力した補間用小数部データとシフタ１００４が出力した波形差分値の乗算を行い、この乗算結果を加算器１０１１に出力する。加算器１０１１は、乗算器１０１０から乗算結果を入力すると、この乗算結果とデータレジスタ１００９が保持している積分波形値の加算を行い、この加算結果を出力する。この加算結果が補間演算回路１０３から出力される波形出力となる。
【００７２】
以上の補間演算回路１０３の動作を通常アドレス更新時、ループ動作時に分け、図１１、図１２を参照して説明する。図１１は、通常アドレス更新時における各部の動作状態を示すタイミングチャートであり、図１２は、ループ動作時における各部の動作状態を示すタイミングチャートである。
【００７３】
図２と同様に、図１１において、Ａｎ、Ａｎ＋１〜３はアドレスジェネレータ１０２から波形メモリ１０１に出力されたアドレスデータであり、ｄｎ、ｄｎ＋１〜３はそのアドレスデータにより読み出された記憶データである。
【００７４】
先ず、積分補間回路１０３の基本的な動作を、図１１（ａ）を参照して説明する。ここで、図１１（ａ）において、ｏｐ１〜ｏｐ８は加減算器１００５が行う演算処理を示すものであり、Ａｎ＋３は現在値アドレスである。
【００７５】
例えば、アドレスジェネレータ１０２から波形メモリ１０１にアドレスデータＡｎが出力されると、そのアドレスデータＡｎで指定されるアドレスから記憶データｄｎが読み出され、図に示すタイミングでデータレジスタ１００２にストアされる。
【００７６】
データセレクタ１００６に入力されるセレクト信号ｓｅｌ１は、データレジスタ１００２がデータｄｎをストアしている間に、その値を１から０、即ち積分指数値ＲＡＭ１００７から積分波形値ＲＡＭ１００８にその選択する出力を切り換える。一方のデータセレクタ１００３に入力されるセレクト信号ｓｅｌ２は、同様にしてその値を０から２、即ちデータレジスタ１００２にストアされた記憶データの指数部データから、加減算器１００５の演算結果によりシフタ１００４が復号した記憶データｄｎの波形差分値に選択する出力を切り換える。
【００７７】
加減算器１００５は、この間、即ちデータレジスタ１００２がデータｄｎをストアしている間、ｏｐ１、ｏｐ２で示す演算処理を実行し、この演算結果を出力する。以降、データレジスタ１００２が他の記憶データをストアする毎に、各部は同様な動作を行う。ここで、図１０では制御回路１００１から制御信号ｅｓｌがデータレジスタ１００３に出力され、補間用小数部データがシフタ１００４に入力されているが、これは後述するように、第２の実施例においてのものである。
【００７８】
積分指数値ＲＡＭ１００７、積分波形値ＲＡＭ１００８がその記憶している内容の更新を行う場合を例にとると、上記この動作の要略は以下のようになる。
即ち、演算処理ｏｐ１が行われるタイミングでは、データセレクタ１００３はデータレジスタ１００２から出力された差分化指数部のデータを選択し、データセレクタ１００６は積分指数値ＲＡＭ１００７から出力された積分指数値を選択し、加減算器１００５は、この差分化指数部データと積分指数値を加算する。この加算結果は、シフタ１００４に入力されるとともに、積分指数値ＲＡＭ１００７に新たな積分指数値として書き込まれ、積分指数値が更新される。
【００７９】
演算処理ｏｐ２が行われるタイミングでは、シフタ１００４は演算処理ｏｐ１で加減算器１００５から入力した演算結果に従ってデータｄｎの仮数部を伸長したデータ、即ち復号した波形差分値をデータセレクタ１００３に出力しており、この波形差分値は加減算器１００５にデータセレクタ１００３を介して出力される。このとき、データセレクタ１００６は、積分波形値ＲＡＭ１００８が出力した積分波形値を加減算器１００５に出力しており、加減算器１００５は、この積分波形値と波形差分値を加算する。この加算結果は、積分波形値ＲＡＭ１００８に書き込まれ、これにより、積分波形値が更新される。
【００８０】
データレジスタ１００２が波形メモリ１０１から読み出された記憶データをストアする毎にこのような動作が行われる。これにより、積分指数値ＲＡＭ１００７、及び積分波形値ＲＡＭ１００８が記憶している内容は、波形メモリ１０１から記憶データを読み出すアドレスに応じて更新される。
【００８１】
次に、積分値ステップの大きさに応じての各部の動作について説明する。この積分値ステップは、上述したように、アドレスジェネレータ１０２から積分補間回路１０３（実際には制御回路１００１）に出力される、波形メモリ１０１のアドレスの更新量である。
【００８２】
先ず、図１１（ａ）及び（ｂ）を参照して、この積分値ステップが０のときの動作について説明する。
図１１（ｂ）は、積分指数値ＲＡＭ１００７、及び積分波形値ＲＡＭ１００８がアドレスＡｎ＋３（現在値アドレス）までの積分指数値、積分波形値を各々既に記憶された場合の動作例を示している。このため、特には図示していないが、図１１（ｂ）において、これらのＲＡＭ１００７、１００８は各々書き込みは行われないように制御回路１００１が制御を行っている。
【００８３】
この積分値ステップが０のときにおいて、補間演算を行う場合、必要となるデータは数１から分かるように、アドレスＡｎ＋２までの積分波形値と、アドレスＡｎ＋３における波形差分値と、補間用小数部データである。補間用小数部データは、アドレスジェネレータ１０２から出力されるので、この積分波形値と波形差分値を得なければならない。
【００８４】
図１１（ｂ）において、演算処理ｏｐ８が行われるときだけ制御信号ｃｌｒ２は０（このとき、セレクト信号ｓｅｌ２で選択されたものが出力される）、制御信号ｓｕｂは１（減算）となっている。演算処理ｏｐ７において、シフタ１００４には加減算器１００５からアドレスＡｎ＋３までの積分指数値が出力されているので、シフタ１００４はこのアドレスＡｎ＋３に対応する波形差分値を出力している。
【００８５】
従って、この演算処理ｏｐ８では、アドレスＡｎ＋３までの積分波形値からそのときの波形差分値を減算した値が加減算器１００５からデータレジスタ１００９に出力される。一方、乗算器１０１０は、補間用小数部データとこのときのシフタ１００４の出力値を乗算した結果を出力している。このため、データレジスタ１００９がストアしている値と乗算器１０１０の乗算結果を加算器１０１１で加算することで、楽音波形（の振幅値）が生成されることになる。
【００８６】
なお、この加算器１０１１の加算結果が積分補間回路１０３が生成した波形の出力となるが、加算器１０１１の出力は演算処理ＯＰ８が行われるタイミングでこれが楽音出力部に入力されるようになっている。即ち、演算処理ｏｐ１〜ｏｐ７までの間、加算器１０１１からの出力は無視される。
【００８７】
図１１（ｃ）は、積分値ステップが１のときの動作例を示す。この動作例においては、演算処理ｏｐ７で積分指数値の更新が行われ、演算処理ｏｐ８で積分波形値の更新が行われたことを示している。
【００８８】
図１１（ｄ）、図１１（ｅ）、図１１（ｆ）は、積分値ステップが２のとき、積分値ステップが３のとき、積分値ステップが４のときの動作例を各々示している。これらの図から、積分値ステップの値に応じて積分指数値、積分波形値の更新が行われることが分かる。
【００８９】
次に、ループ動作時における各部の動作について、図１２を参照して説明する。図１２は、ループ動作時における各部の動作状態例を示すタイミングチャートである。
【００９０】
図１２に示す如く、このループ動作時においては、演算処理ｏｐ３〜６が行われる間、制御信号ｃｌｒ１は１、セレクト信号ｓｅｌ２は１、制御信号ｃｌｒ２は０である。このため、加減算器１００５からは、演算処理ｏｐ３及び４ではデータレジスタ１００２がストアしている積分波形値ＩＷＶｘが出力され、演算処理ｏｐ５及び６ではデータレジスタ１００２がストアしている積分指数値ＩＥＶｘが出力される。
【００９１】
制御回路１００１は、演算処理ｏｐ４が行われたときに加減算器１００５の演算結果を積分波形値ＲＡＭ１００８に書き込ませ、演算処理ｏｐ５が行われたときに加減算器１００５の演算結果を積分指数値ＲＡＭ１００７に書き込ませる。これにより、積分指数値ＲＡＭ１００７、及び積分波形値ＲＡＭ１００８は、ループ動作、即ち現在値アドレスのループ範囲の先頭部分への移行に対応してその記憶した内容を書き換えることになる。
【００９２】
演算処理ｏｐ７では、制御信号ｃｌｒ２が１であることから、加減算器１００５は積分指数値ＲＡＭ１００７から出力された積分指数値を演算結果として出力する。このとき積分指数値ＲＡＭ１００７が記憶している積分指数値は、記憶データｄｎ＋ｘまでの差分化指数部を累算したものである。このため、シフタ１００４は、加減算器１００５の演算結果に応じてこの記憶データｄｎ＋ｘの仮数部を伸長することで、この波形差分値を正確に復号することができる。
【００９３】
演算処理ｏｐ８では、積分波形値ＲＡＭ１００８から出力された積分波形値とこのシフタ１００４が復号した波形差分値の減算が行われる。これにより、加減算器１００５からは、このアドレスＬｎ＋ｘの一つまえまでの積分波形値がデータレジスタ１００９に出力される。
【００９４】
一方、このとき乗算器１０１０は、シフタ１００４から入力した波形差分値と補間用小数部データを乗算した値を加算器１０１１に出力している。この乗算器１０１０が乗算した値とデータレジスタ１００９にストアされた積分波形値を加算器１０１１により加算することで、ループ動作時における楽音波形が正確に生成される。
【００９５】
このように、ループ範囲の先頭部分に現在値アドレスを戻してもその先頭部分の記憶データから楽音波形を正確に生成できる。このため、音をサンプリングする期間を短縮できることから、記憶データ量を低減することができるとともに、楽音波形の生成を持続させることができる。また、ループ範囲の先頭部分の記憶データからの楽音波形の生成は、この先頭部分の楽音波形を生成するために保持したデータ（生成情報）を用いて行うことから、この保持するデータを変更することにより、ループ範囲を任意、且つ容易に変更することができる。なお、このループ動作時以降は、通常アドレス更新時の動作となる。
【００９６】
次に、第２の実施例について説明する。この第２の実施例は、２つの仮数部が１つの差分化指数部を共通とした記憶データを波形メモリ１０１に記憶したものであり、その構成は第１の実施例の構成と略同じである。このため、第１の実施例と同じ符号を用いて第１の実施例から異なる部分だけ説明する。
【００９７】
図１３（ａ）は、波形メモリ１０１に記憶された記憶データのフォーマットを示す説明図であり、同図（ｂ）は、この記憶データにより生成される楽音波形を示す説明図である。
【００９８】
図１３（ａ）に示す如く、第２の実施例は、波形メモリ１０１の１つのアドレスは１６ビットであり、この１６ビットのうち２ビットを差分化指数部、残りの１４ビットをそれぞれ７ビットの仮数部とした記憶データである。このため、波形メモリ１０１から１つのアドレスの記憶データを読み出すことで、図１３（ｂ）に示す如く、２つの波形差分値を得ることができる。
【００９９】
ここで、図１３（ｂ）における各記号は、例えば、Ｄｎ−１及びＤｍ−１はこのアドレスＡｎ−１に記憶された波形差分値、Ｅｎ−１はこのアドレスＡｎ−１に記憶された差分化指数部の値を示すものである。
【０１００】
上記したように、第２の実施例では、１つのアドレスに記憶された記憶データは２つの仮数部を有している。このため、アドレスジェネレータ１０２は、以下のように波形メモリ１０１から記憶データを読み出すアドレスを決定する。
【０１０１】
図１４は、各部から出力されるデータを示す説明図であり、同図（ａ）は現在値アドレスＲＡＭ３０１から出力されるデータ（現在値アドレス）、アドレス歩進量ＲＡＭ３０２から出力されるデータ（アドレス歩進量）、及び加算器３０５の出力データを示している。
【０１０２】
図１４（ａ）に示したように、第２の実施例では、１２ビットの整数部と５ビットの小数部の間にセレクトビットを割り当てている。このセレクトビットは、１つのアドレスに２つ記憶されている２つの仮数部の何方を選択するかを指示するためのものである。例えば、アドレスＡｎ−１が指定された場合において、セレクトビットの値が０のときは仮数部Ｄｎ−１が選択され、１のときは仮数部Ｄｍ−１が選択される。
【０１０３】
このセレクトビットは、第１の実施例における整数部の下位１ビットに対応するものである。このため、加算器３０５は、現在値アドレスとアドレス歩進量を単に加算し、この加算結果を出力する。
【０１０４】
図１４（ｂ）は、ループスタートアドレスＲＡＭ３０４から出力されるデータ、減算器３０８の出力データ、及び加算器３０９の出力データを示している。この説明図である。
【０１０５】
上記した加算器３０５の加算結果が現在値アドレスとされるのは通常アドレス更新時であり、加算器３０９の加算結果が現在値アドレスとされるときは、ループ動作時である。図１４（ｂ）に示す如く、このループ動作時においても通常アドレス更新時と同様にセレクトビットが割り当てられている。
【０１０６】
図１５（ａ）は、第２の実施例におけるループ範囲の先頭部分とエンドアドレス以降に記憶されたデータを示す説明図であり、同図（ｂ）は、この先頭部分の記憶データにより生成される楽音波形を示す説明図である。
【０１０７】
第２の実施例は、図１５（ａ）に示す如く、ループ範囲の先頭部分の記憶データに対応した積分波形値ＩＷＶ０〜４をエンドアドレスＥＡからアドレスＥＡ＋４に各々記憶させ、積分指数値ＩＥＶ０〜４をアドレスＥＡ＋５に全て記憶させたものである。この第２の実施例では、それを表現するためのビット数が少なくて済む積分指数値ＩＥＶ０〜４をアドレスＥＡ＋５に全て記憶させることで、波形メモリ１０１の使用効率の向上、即ち記憶データの記憶に要する領域を低減させている。
【０１０８】
このため、第２の実施例では、ループ動作時におけるアドレス生成器３１１から出力されるアドレスデータは、図８（ｂ）において、エンドアドレスＥＡと積分値ステップを加算したアドレスデータが出力された後、エンドアドレスＥＡに５を加算したアドレスデータが出力されることになる。ここで、第２の実施例では１つのアドレスに２つの仮数部を有する記憶データとしているが、各積分波形値ＩＷＶ０〜４、及び積分指数値ＩＥＶ０〜４は第１の実施例の場合と同様に、ループ範囲の先頭部分のそのアドレスまで累算した積分波形値、積分指数値である。
【０１０９】
次に、第２の実施例による積分補間回路１０３について説明する。先ず、図１０を参照して、第１の実施例から異なる主な点について説明する。
上記したように、第２の実施例による積分補間回路１０３は、制御回路１００１から制御信号ｅｓｌがデータセレクタ１００３に出力され、アドレスジェネレータ１０２が出力した補間用小数部データが乗算器１０１０の他にシフタ１００４に入力される。
【０１１０】
この制御信号ｅｓｌは、１つのアドレスにまとめて記憶された積分指数値（生成情報）を選択するための制御信号である。例えば、データセレクタ１００３がデータレジスタ１００２を介してアドレスＥＡ＋５に記憶された積分指数値ＩＥＶ０〜４を入力すると、制御信号ｅｓｌの値が０のときは積分指数値ＩＥＶ０を選択し、その値が１のときは積分指数値ＩＥＶ１を、その値が２のときは積分指数値ＩＥＶ２を、その値が３のときは積分指数値ＩＥＶ３を、その値が４のときは積分指数値ＩＥＶ４を選択する。
【０１１１】
シフタ１００４は、データレジスタ１００２から記憶データを入力し、加減算器１００５から入力した演算結果（積分指数値）に応じてその記憶データの２つの仮数部を伸長し、別々に順次データセレクタ１００３に出力する。また、入力した補間用小数部データのセレクトビット（この補間用小数部データの最上位ビットである）に従って復号した波形差分値を選択し、これを乗算器１０１０に出力する。
【０１１２】
以上が第１の実施例から異なる主な点である。次に図１６を参照して、通常アドレス更新時における動作を説明する。図１６は、通常アドレス更新時における各部の動作状態例を示すタイミングチャートである。
【０１１３】
図１６に示す如く、第２の実施例では１つのアドレスに記憶された記憶データが２つの仮数部を有することから、データレジスタ１００２が１つの記憶データを記憶している間に３回の演算処理が実行される。
【０１１４】
図１６（ａ）の基本動作において、例えば、データレジスタ１００２が記憶データｄｎをストアしている間には、以下のような基本動作が行われる。
演算処理ｏｐ１が行われるタイミングでは、セレクト信号ｓｅｌ１が１でセレクト信号ｓｅｌ２が０であることから、加減算器１００５は積分指数値ＲＡＭ１００７から入力した積分指数値とデータレジスタ１００２から入力した差分化指数部を加算する。この加算結果は、シフタ１００４に入力されるとともに、積分指数値ＲＡＭ１００７に書き込まれる。これにより、積分指数値が更新されることになる。
【０１１５】
演算処理ｏｐ２が行われるタイミングでは、セレクト信号ｓｅｌ１が０でセレクト信号ｓｅｌ２が２であり、このときシフタ１００４は演算処理ｏｐ１における加減算器１００５の演算結果に応じて復号した波形差分値の一方（セレクトビットが０で指定される方）をデータセレクタ１００３に出力している。加減算器１００５は、データセレクタ１００３を介して入力したこの復号した波形差分値と積分波形値ＲＡＭ１００８から入力した積分波形値の加算を行う。この加算結果は、積分波形値１００８に書き込まれ、その積分波形値が更新されるが、制御回路１００１はシフタ１００４がこの加算結果を入力しないように制御することで、シフタ１００４は演算処理ｏｐ１で入力した積分指数値を維持する。
【０１１６】
演算処理ｏｐ３が行われるタイミングでは、セレクト信号ｓｅｌ１が０でセレクト信号ｓｅｌ２が２である。このときシフタ１００４は、演算処理ｏｐ１で入力した演算結果に応じて伸長した仮数部の他方（セレクトビットが１で指定される方）をデータセレクタ１００３に出力している。加減算器１００５は、データセレクタ１００３を介して入力したこの復号した波形差分値と積分波形値ＲＡＭ１００８から入力した積分波形値の加算を行う。この加算結果は積分波形値ＲＡＭ１００８に書き込まれ、積分波形値が更新される。
【０１１７】
データレジスタ１００２が新たな記憶データをストアする毎にこのような動作が行われる。これにより、積分指数値ＲＡＭ１００７、積分波形値ＲＡＭ１００８は、波形メモリ１０１から記憶データを読み出す現在値アドレスの更新に応じてその記憶した内容を更新することになる。
【０１１８】
次に、図１６（ａ）、及び同図（ｂ）を参照して、積分値ステップが０のときの動作を説明する。
図１６（ｂ）は、積分指数値ＲＡＭ１００７、及び積分波形値ＲＡＭ１００８がアドレスＡｎ＋３（現在値アドレス）までの積分指数値、積分波形値を各々既に記憶された場合の動作例を示している。このため、特には図示していないが、これらのＲＡＭ１００７、１００８が各々書き込みを行わないように制御回路１００１が制御を行っている。
【０１１９】
図１６（ｂ）において、演算処理ｏｐ１１、及び１２が行われるときだけ制御信号ｃｌｒ２は０であり、このときの制御信号ｓｕｂは１（減算）となっている。演算処理ｏｐ１０において、加減算器１００５からアドレスＡｎ＋３までの積分指数値をシフタ１００４は入力しているので、このときのシフタ１００４はこのアドレスＡｎ＋３に対応する波形差分値を演算処理ｏｐ１１、及びｏｐ１２において各々出力している。
【０１２０】
従って、演算処理ｏｐ１１、及び１２が行われることで、データレジスタ１００９は記憶データｄｎ＋２までの積分波形値をストアすることになる。一方、乗算器１０１０は、補間用小数部データとこのときシフタ１００４が選択して出力している波形差分値を乗算しており、この乗算器１０１０の乗算結果とデータレジスタ１００９がストアしている積分波形値を加算器１０１１が加算することで、楽音波形が生成される。
【０１２１】
図１６（ｃ）は、積分値ステップが１のときの動作例を示す。この動作例においては、演算処理ｏｐ１０で積分指数値の更新が行われ、演算処理ｏｐ１１、及び１２で積分波形値の更新が行われたことを示している。
【０１２２】
図１６（ｄ）、図１６（ｅ）、図１６（ｆ）は、積分値ステップが２のとき、積分値ステップが３のとき、積分値ステップが４のときの動作例を各々示している。これらの図から、積分値ステップの値に応じて積分指数値、積分波形値の更新が行われることが分かる。
【０１２３】
次に、ループ動作時における各部の動作について、図１７を参照して説明する。図１７は、ループ動作時における各部の動作状態例を示すタイミングチャートである。
【０１２４】
図１７に示す如く、このループ動作時においては、演算処理ｏｐ４〜９が行われる間、制御信号ｃｌｒ１は１、セレクト信号ｓｅｌ２は１、制御信号ｃｌｒ２は０である。このため、加減算器１００５からは、演算処理ｏｐ４〜６ではデータレジスタ１００２がストアしている積分波形値ＩＷＶｘが出力され、演算処理ｏｐ７〜９ではデータレジスタ１００２がストアしている積分指数値ＩＥＶｘが出力される。
【０１２５】
制御回路１００１は、演算処理ｏｐ６が行われたときに加減算器１００５の演算結果を積分波形値ＲＡＭ１００８に書き込ませ、演算処理ｏｐ７が行われたときに加減算器１００５の演算結果を積分指数値ＲＡＭ１００７に書き込ませる。これにより、積分指数値ＲＡＭ１００７、及び積分波形値ＲＡＭ１００８は、ループ動作、即ち現在値アドレスのループ範囲の先頭部分への移行に対応してその記憶した内容を書き換えることになる。
【０１２６】
演算処理ｏｐ１０では、制御信号ｃｌｒ２が１であることから、セレクト信号ｓｅｌ２の値に係わらず、加減算器１００５は積分指数値ＲＡＭ１００７から出力された積分指数値を演算結果として出力する。このとき積分指数値ＲＡＭ１００７が記憶している積分指数値は、記憶データｄｎ＋ｘまでの差分化指数部を累算したものである。このため、シフタ１００４は、加減算器１００５の演算結果に応じてこの記憶データｄｎ＋ｘの２つの仮数部を伸長することで、波形差分値を正確に復号することができる。
【０１２７】
演算処理ｏｐ１１では、積分波形値ＲＡＭ１００８から出力された積分波形値からこのシフタ１００４が復号した一方の波形差分値を引く減算が行われ、演算処理ｏｐ１２では、演算処理ｏｐ１１で加減算器１００５が出力した積分波形値からシフタ１００４が復号した他方の波形差分値を引く減算が行われる。これにより、加減算器１００５からは、このアドレスＬｎ＋ｘの一つまえまで（Ｌｎ＋ｘ−１）の積分波形値がデータレジスタ１００９に出力される。
【０１２８】
一方、このときシフタ１００４は、補間用小数部データのセレクトビットで選択した波形差分値を乗算器１０１０に出力しており、乗算器１０１０は、シフタ１００４から入力した波形差分値と補間用小数部データを乗算した値を加算器１０１１に出力している。この乗算器１０１０が乗算した値とデータレジスタ１００９にストアされた積分波形値を加算器１０１１により加算することで、ループ動作時における楽音波形が正確に生成される。
【０１２９】
このように、第２の実施例においても第１の実施例と同様の効果があるが、この第２の実施例では、１つの差分化指数部を２つの仮数部に共通させ、更にループ動作時に用いる積分指数値を１つのアドレスにまとめて波形メモリ１０１に書き込んでいるため、波形メモリ１０１が記憶させるデータ量をより低減できるという効果がある。
【０１３０】
なお、第１及び第２の実施例（本実施例）では、ループ動作時に用いる生成情報（複数の積分波形値、及び積分指数値）を予めエンドアドレス以降に記憶させているが、楽音波形の生成には順次積分波形値、及び積分指数値を更新しなければならないことから、そのループ範囲の先頭部分の積分波形値、積分指数値を更新した時点でこれを生成情報として保持するようにしても良い。これは、数多くの音色を備えた音源装置等において、データ量を低減するのに効果的である。
【０１３１】
【発明の効果】
以上、説明したように本発明の波形読出装置は、ループ範囲の波形データから楽音波形を生成するための生成情報を保持し、このループ範囲の指定が繰り返されたとき、それまで楽音波形の生成に用いていた情報をこの生成情報に置き換え、このループ範囲内の波形データによる楽音波形の生成を行うため、楽音波形の生成を正確に持続させることができ、また、楽音波形の生成を正確に持続できることから、音（楽音）のサンプリング期間を短縮することができるので、波形データのデータ量を低減することができる。
【図面の簡単な説明】
【図１】第１の実施例による波形読出装置の構成を示すブロック図である。
【図２】記憶データのフォーマットを示す説明図（ａ）、記憶データにより生成される楽音波形を示す説明図（ｂ）である。
【図３】アドレスジェネレータの回路構成を示すブロック図である。
【図４】各部から出力されるデータを示す説明図である。
【図５】通常アドレス更新時における積分値ステップを示す説明図である。
【図６】各部から出力されるデータを示す説明図である。
【図７】ループ動作時における積分値ステップを示す説明図である。
【図８】アドレス生成器が出力するアドレスデータ例を示す説明図である。
【図９】ループ範囲の先頭部分とエンドアドレス以降に記憶されたデータを示す説明図（ａ）、ループ範囲の先頭部分の記憶データにより生成される楽音波形を示す説明図（ｂ）である。
【図１０】積分補間回路の回路構成を示すブロック図である。
【図１１】通常アドレス更新時における各部の動作状態例を示すタイミングチャートである（第１の実施例）。
【図１２】ループ動作時における各部の動作状態例を示すタイミングチャートである（第１の実施例）。
【図１３】記憶データのフォーマットを示す説明図（ａ）、記憶データにより生成される楽音波形を示す説明図（ｂ）である（第２の実施例）。
【図１４】各部から出力されるデータを示す説明図である（第２の実施例）。
【図１５】ループ範囲の先頭部分とエンドアドレス以降に記憶されたデータを示す説明図（ａ）、ループ範囲の先頭部分の記憶データにより生成される楽音波形を示す説明図（ｂ）である（第２の実施例）。
【図１６】通常アドレス更新時における各部の動作状態例を示すタイミングチャートである（第２の実施例）。
【図１７】ループ動作時における各部の動作状態例を示すタイミングチャートである（第２の実施例）。
【符号の説明】
１００  波形読出装置
１０１  波形メモリ
１０２  アドレスジェネレータ
１０３  積分補間回路
３０１  現在値アドレスＲＡＭ
３０２  アドレス歩進量ＲＡＭ
３０３  エンドアドレスＲＡＭ
３０４  ループスタートアドレスＲＡＭ
３１０  ステップ演算器
３１１  アドレス生成器
１００１  制御回路
１００３、１００６  データセレクタ
１００４  シフタ
１００５  加減算器
１００７  積分指数値ＲＡＭ
１００８  積分波形値ＲＡＭ
【図１】
0003603343.tif 000002
【図２】
0003603343.tif 000003
【図３】
0003603343.tif 000004
【図４】
0003603343.tif 000005
【図５】
0003603343.tif 000006
【図６】
0003603343.tif 000007
【図７】
0003603343.tif 000008
【図８】
0003603343.tif 000009
【図９】
0003603343.tif 000010
【図１０】
0003603343.tif 000011
【図１１】
0003603343.tif 000012
【図１２】
0003603343.tif 000013
【図１３】
0003603343.tif 000014
【図１４】
0003603343.tif 000015
【図１５】
0003603343.tif 000016
【図１６】
0003603343.tif 000017
【図１７】
0003603343.tif 000018