(57)【特許請求の範囲】
【請求項１】
異なる波形位置でそれぞれサンプリングされた複数の波高値を、複数ビットで表現された波形サンプル値として示す波形データであって、任意の波形サンプル値Ｌ0の波形位置を原点とした場合、該原点、原点の後のサンプリング点の波形サンプル値Ｌ+1、その更に後のサンプリング点の波形サンプル値Ｌ+2を通る第１の曲線Ｙ1（ｘ）と、前記原点の前のサンプリング点の波形サンプル値Ｌ-1、原点、及び当該原点の後のサンプリング点の波形サンプル値Ｌ+1を通る第２の曲線Ｙ2（ｘ）との平均値を通る第３の曲線ＹS（ｘ）を、
ＹS(ｘ)＝(１／４)(−δ+1＋δ-1)×ｘ(１−ｘ)＋δ0×ｘ＋Ｌ0
ただし、
δ+1＝Ｌ2−Ｌ1
δ0 ＝Ｌ1−Ｌ0
δ-1＝Ｌ0−Ｌ-1
とし、当該第３の曲線ＹS（ｘ）上の値を該任意の波形位置の波形サンプル値として算出する波形データ補間装置において、
前記ｘ(１−ｘ)を演算する演算手段として、
１＞ｘ≧０（符号無し）のとき、前記（１−ｘ）を、当該ｘを表現する全ビットの値を全て反転させたものに近似するとともに、前記ｘを表現する各ビットの値と当該近似した（１−ｘ）のビットの値夫々との論理積演算を行なう論理積演算手段と、
この論理積演算手段により得られた、前記ｘを表現するビット毎の演算結果を、排他的論理和に置き換えて計算する排他的論理和手段と、
この排他的論理和手段により得られた演算結果を、前記ｘを表現するビット毎に加算する加算手段と、
を具備することを特徴とする波形データ補間装置。
【請求項２】
前記データ補間装置はさらに、前記ｘを表す下位所定数ビットを切り捨てて得られる値を前記演算手段に入力する、
ことを特徴とする請求項１記載の波形データ補間装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、異なる波形位置でそれぞれサンプリングされた複数の波高値を波形サンプル値として示す波形データを対象に、任意の波形位置での波高値の算出を行う波形データ補間装置に関する。
【背景技術】
【０００２】
電子楽器などの楽音発音装置のなかには、異なる波形位置でそれぞれサンプリングされた複数の波高値を波形サンプル値として示す波形データを用いて発音させるべき楽音の波形サンプル値（波高値）を算出するものがある。そのような楽音発音装置では、一つの波形データで様々なピッチ（音高）の楽音を発音させるために、サンプリング点以外の波高値を補間により求めるようにしている。その補間により、鍵盤上の押鍵された鍵に割り当てられているピッチでの楽音の発音や、デチューン、ビブラートなどの音響効果の付加を行うことができる。
【０００３】
上記補間、つまりサンプリング点以外の波高値（以降「補間値」と呼ぶ）の算出は、従来、図６に示すように、隣接するサンプリング点の波形サンプル値を結ぶ直線上の点の値を補間値として算出することで行っていた（直線補間）。図中の丸は、サンプリング点の波形サンプル値を示し、隣接するサンプリング点の波形サンプル値を結ぶ直線上の四角は補間値を示している。
【０００４】
しかし、図６に示すような直線補間では、通常、曲線となる波形サンプル値間を直線で近似するため、求まる補間値と実際の波高値との間の差が比較的に大きくなりやすいという不具合がある。その不具合により、高い補間精度は得難く、発音される楽音が大きく歪んでしまうことも多いのが実情である。これは、波形データにサンプリング周波数の半分近くまでの成分が多い場合や、出力時のオーバーサンプリング比の高い場合に特に顕著になる。
【０００５】
直線補間には上述したような不具合があることから、より高い補間精度が得られる補間が行われている。その従来の補間を行う波形データ補間装置としては、例えば特許文献１に記載されたものがある。その従来の波形データ補間装置が行う補間について、図７を参照して具体的に説明する。その図７において、Ｘ軸は時間（波形位置）、Ｙ軸は波高値をそれぞれ示している。そのＸ軸では、サンプリング点を単位として時間を示している。
【０００６】
特許文献１に記載された従来の波形データ補間装置では、波形データにおける任意の波形位置の前２点、後１点のサンプリング点の波形サンプル値を通る第１の曲線Ｙ1（ｘ）と、その波形位置の前１点、後２点のサンプリング点の波形サンプル値を通る第２の曲線Ｙ2（ｘ）との間（の平均値）を通る第３の曲線ＹS（ｘ）上の値をその波形位置の補間値として算出するようにしている。このことから、図７では、任意の波形位置の直前に位置するサンプリング点の波形サンプル値を原点に移動させた座標系で各サンプリング点の波形サンプル値を表している。それにより、２つ前のサンプリング点の波形サンプル値は座標（−１，−ｄ0）、直後のサンプリング点の波形サンプル値は座標（１，ｄ1）、２つ後のサンプリング点の波形サンプル値は座標（２，ｄ2）となっている。
【０００７】
図７中のｄ0〜ｄ2は、原点とするサンプリング点の波形サンプル値を基準として算出される差分値をそれぞれ表している。δ-1〜δ+1は、隣接するサンプリング点の波形サンプル値の差分値をそれぞれ表している。このことから、２つ前のサンプリング点の波形サンプル値をＬ-1、原点とするサンプリング点の波形サンプル値をＬ0、直後のサンプリング点の波形サンプル値をＬ+1、２つ後のサンプリング点の波形サンプル値をＬ+2と表記すると、各差分値ｄ0〜ｄ2はそれぞれ以下のようにして求められる。
【０００８】
ｄ2＝Ｌ2−Ｌ0
ｄ1＝Ｌ1−Ｌ0
ｄ0＝Ｌ0−Ｌ-1      ・・・  （１）
また、各差分値δ-1〜δ+1はそれぞれ以下のようにして求めることができる。
【０００９】
δ+1＝Ｌ2−Ｌ1
δ0 ＝Ｌ1−Ｌ0
δ-1＝Ｌ0−Ｌ-1      ・・・  （２）
特許文献１に記載された従来の波形データ補間装置では、上述したような補間を行うことにより、より高い補間精度を実現させている。しかし、その補間を行うために、直線補間と比較して、計算量はより大きくなっている。
【００１０】
補間のための計算は、ソフトウェア処理により行うだけでなく、ハードウェアによっても行わせることができる。ソフトウェア処理で計算を行わせる場合、計算量が大きくなるに従い処理の負荷が重くなる。そのため、より重い負荷の処理を適切に行えるようにするには、より高性能の処理装置を用意するか、或いは専用の処理装置を用意するといった必要性が生じる。このようなことから、計算量はより少なくすることが望ましい。
【００１１】
補間のための計算を行わせるハードウェアは、計算量が大きくなるに従い、構成が複雑化する、規模が大きくなる、といったことが生じるのが普通である。それらは共に、製造コストをより増大させる。このことから、ハードウェアで計算を行わせる場合にも、計算量はより少なくすることが望ましいと言える。
【特許文献１】特許第３２２３２８０号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
本発明の課題は、より少ない計算量で補間精度の高い補間を行う波形データ補間装置を提供することにある。
【課題を解決するための手段】
【００１３】
本発明のデータ補間装置は、異なる波形位置でそれぞれサンプリングされた複数の波高値を、複数ビットで表現された波形サンプル値として示す波形データであって、任意の波形サンプル値Ｌ0の波形位置を原点とした場合、該原点、原点の後のサンプリング点の波形サンプル値Ｌ+1、その更に後のサンプリング点の波形サンプル値Ｌ+2を通る第１の曲線Ｙ1（ｘ）と、前記原点の前のサンプリング点の波形サンプル値Ｌ-1、原点、及び当該原点の後のサンプリング点の波形サンプル値Ｌ+1を通る第２の曲線Ｙ2（ｘ）との平均値を通る第３の曲線ＹS（ｘ）を、
ＹS(ｘ)＝(１／４)(−δ+1＋δ-1)×ｘ(１−ｘ)＋δ0×ｘ＋Ｌ0
ただし、
δ+1＝Ｌ2−Ｌ1
δ0 ＝Ｌ1−Ｌ0
δ-1＝Ｌ0−Ｌ-1
とし、当該第３の曲線ＹS（ｘ）上の値を該任意の波形位置の波形サンプル値として算出する波形データ補間装置において、
前記ｘ(１−ｘ)を演算する演算手段として、
１＞ｘ≧０（符号無し）のとき、前記（１−ｘ）を、当該ｘを表現する全ビットの値を全て反転させたものに近似するとともに、前記ｘを表現する各ビットの値と当該近似した（１−ｘ）のビットの値夫々との論理積演算を行なう論理積演算手段と、
この論理積演算手段により得られた、前記ｘを表現するビット毎の演算結果を、排他的論理和に置き換えて計算する排他的論理和手段と、
この排他的論理和手段により得られた演算結果を、前記ｘを表現するビット毎に加算する加算手段と、
を具備することを特徴とする。
【００１４】
なお、前記データ補間装置はさらに、前記ｘを表す下位所定数ビットを切り捨てて得られる値を前記演算手段に入力する、ことが望ましい。
【発明の効果】
【００１５】
本発明は、１から小数点以下の正の数値を減算して得られる減算値を、その数値の全ビットを反転させた値で近似し、その数値と減算値の乗算結果の算出を個別に行い、その乗算結果を用いて、波形データにおける任意の波形位置の前２点、後１点のサンプリング点の波形サンプル値を通る第１の曲線、及びその任意の波形位置の前１点、後２点のサンプリング点の波形サンプル値を通る第２の曲線の間を通る第３の曲線上の値をその任意の波形位置の波形サンプル値として算出する。
【００１６】
１から小数点以下の正の数値を減算して得られる減算値を、その数値の全ビットを反転させた値で近似することにより、その数値と減算値の乗算結果は、例えば排他的論理和の算出、及びその加算により算出できるようになる。演算の対象とすべきビットの組み合わせ数は、それらの乗算を行う場合と比較して、大幅に少なくすることができる。そのため、第３の曲線上の値を任意の波形位置の波形サンプル値として算出するために必要な計算量は大幅に低減させることができる。
【発明を実施するための最良の形態】
【００１７】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
＜第１の実施の形態＞
図１は、第１の実施の形態による波形データ補間装置を搭載した電子楽器の構成図である。
【００１８】
その電子楽器は、図１に示すように、楽器全体の制御を行うＣＰＵ１と、ＣＰＵ１が実行するプログラムや各種制御用データ等を格納したプログラムメモリ２と、複数の鍵を備えた鍵盤３と、各種スイッチを備えたスイッチ部４と、発音させるべき楽音の波高値を生成する音源部５と、その波高値生成用の波形データを格納した波形ＲＯＭ６と、ＣＰＵ１がワークに用いるデータメモリ７と、音源部５から出力される波高値をＤ／Ａ変換してアナログのオーディオ信号を出力するＤ／Ａ変換器（ＤＡＣ）８と、そのＤＡＣ８が出力するオーディオ信号を音声に変換して放音するオーディオシステム９と、を備えて構成されている。本実施の形態による波形データ補間装置は、音源部５に搭載されている。
【００１９】
上記ＣＰＵ１は、プログラムメモリ２に格納されたプログラムを実行することにより、楽器全体の制御を行う。それによりＣＰＵ１は、例えば鍵盤３、及びスイッチ部４をそれぞれ予め定められたタイミングで走査して、鍵盤３上の各鍵、及びスイッチ部４が有する各スイッチの状態を検出し、その検出結果を前回の検出結果と比較することにより、状態の変化した鍵、或いはスイッチ、及びその変化の内容を特定する。その結果、状態が変化した鍵、或いはスイッチが特定できた場合、その鍵、或いはスイッチ、及びその変化の内容に応じて音源部５に対する指示を行う。そのような指示を行うことにより、電子楽器はユーザによる鍵盤３への演奏操作に応じて楽音を放音させる。
【００２０】
波形ＲＯＭ６に格納された波形データは、異なる波形位置でそれぞれサンプリングされた複数の波高値を波形サンプル値として示すものである。ここでは、その波形データとして、サンプリング点毎に、直前の波形サンプル値との差分値δを有するものを想定する。その差分値δは、その順番に沿ってそれぞれ異なるアドレスに格納されている。それにより、発音させるべき楽音の波高値は、その楽音のピッチに応じたアドレス幅（歩進幅。以降「読みだしピッチΔ」と呼ぶ）で波形ＲＯＭ６から差分値δを読み出し、補間を行って生成（算出）するようになっている。その補間を行うために、本実施の形態による波形データ補間装置は音源部５に搭載されている。
【００２１】
図２は、音源部５の構成を説明する図である。次に図２を参照して、音源部５の構成について詳細に説明する。
ＣＰＵ１は、鍵盤３上の鍵の押鍵により発音させるべき楽音が生じた場合、音源部５に波形データの読み出しを開始すべきアドレス（波形スタートアドレス）の値、及びその楽音のピッチに応じた読みだしピッチΔを音源部５に出力する。また、楽音に付加するエンベロープを制御するために、エンベロープ目標レベル、及びレイトを必要に応じて音源部５に出力する。例えばエンベロープ目標レベルは、エンベロープを構成する各部のレベルを指定するためのものであり、レイトは次に移行させるべきレベルへの移行に使うべき時間を指定するためのものである。それにより、楽音に付加するエンベロープの形はエンベロープ目標レベル、及びレイトによって指定するようになっている。
【００２２】
エンベロープ目標レベル、及びレイトは、音源部５のＥＮＶ発生ブロック５−３に入力される。その発生ブロック５−３は、それらのデータによって指定されるエンベロープを発音される楽音に付加するためのエンベロープデータＥＮＶを生成して積和ブロック５−５に出力する。付加するエンベロープがサスティーン部分に到達した場合に、その旨を通知するための到達フラグをＣＰＵ１に出力する。
【００２３】
上記読みだしピッチΔは、小数点を含む数値である。小数アドレス計算ブロック５−２は、ＣＰＵ１から読みだしピッチΔを入力し、その累算を順次、行い、小数点以下の累算値を小数アドレスｘとして積和ブロック５−５に出力する。また、キャリーが生じた場合に、そのキャリーを整数アドレス計算ブロック５−１に出力する。
【００２４】
整数アドレス計算ブロック５−１は、ＣＰＵ１から波形スタートアドレス、及び波形ＲＯＭ６から波形データを繰り返し読み出す範囲を示す波形ループアドレスを入力する。整数アドレスは波形スタートアドレス（の値）を初期値として、小数アドレス計算ブロック５−２からキャリーを入力する度にインクリメントを行う。そのインクリメント後のアドレスが波形データを繰り返し読み出す範囲を越えた場合には、その範囲の先頭に戻す。それにより、楽音の発音期間の長さに係わらず、波高値の算出を可能とさせる。
【００２５】
波形ＲＯＭデータラッチブロック５−４は、整数アドレス計算ブロック５−１により計算された整数アドレスに基づいて波形ＲＯＭ６から読み出された差分値δを取り込み、取り込んだ差分値δの累算や減算等を行い、その累算によって得られる波形累算値（サンプリング点の波形サンプル値）、及びその減算によって得られる波形差分値を積和ブロック５−５に送る。
【００２６】
積和ブロック５−５は、波形ＲＯＭデータラッチブロック５−４から入力する波形差分値、波形累算値、及び小数アドレス計算ブロック５−２から入力する小数アドレスｘを用いて図７に示すような補間を行い、それによって得られる補間値にエンベロープデータＥＮＶを乗算した結果を時分割処理により音源のＤＣＯの個数分、累算ブロック５−６に出力する。累算ブロック５−６は、ＣＰＵ１から出力されるパンニングデータに従って、各ＤＣＯの出力をＲＩＧＨＴチャンネル用の累算レジスタ５−６ａ、及びＬＥＦＴチャンネル用の累算レジスタ５−６ｂに割り振り、累算を行う。それにより、各累算レジスタ５−６ａ、５−６ｂには、対応するチャンネルで発音させるべき楽音の波高値の累算値が格納される。それらの累算値がそれぞれＤＡＣ８に出力されることにより、ＲＩＧＨＴ、ＬＥＦＴの各チャンネルで楽音が放音される。
【００２７】
上記小数アドレスｘは、補間値を求めるべき波形位置を示すものである。ここで図７を参照し、その小数アドレスｘが与えられたと想定して、波形データにおけるその前２点、後１点のサンプリング点の波形サンプル値を通る２次曲線をＹ1（ｘ）、その前１点、後２点のサンプリング点の波形サンプル値を通る２次曲線をＹ2（ｘ）、それらの２次曲線Ｙ1（ｘ）、及びＹ2（ｘ）の平均値を通る曲線をＹS（ｘ）としたときに曲線ＹS（ｘ）がサンプリング点の波高値（波形サンプル値）或いは差分値δによってどのように表されるかを考える。
【００２８】
その図７に示す座標系は、小数アドレスｘの直前に位置するサンプリング点の波形サンプル値を原点に移動させたものである。原点とするサンプリング点の波形サンプル値をＬ0、その前のサンプリング点の波形サンプル値をＬ-1、原点の後のサンプリング点の波形サンプル値をＬ+1、その更に後のサンプリング点の波形サンプル値をＬ+2と表記すると、図７中のｄ0〜ｄ2、及びδ-1〜δ+1はそれぞれ（１）及び（２）式により表される。
【００２９】
原点、（１，ｄ1）、及び（２，ｄ2）を通る２次曲線Ｙ1（ｘ）をＹ1（ｘ）＝ａｘ2＋ｂｘとおくと、ｘ＝１では
Ｙ1（ｘ）＝ｄ1＝ａ＋ｂ      ・・・  （３）
となり、ｘ＝２では
Ｙ1（ｘ）＝ｄ2＝４ａ＋２ｂ      ・・・  （４）
となる。（４）式−（３）式×２より
２ａ＝ｄ2−２ｄ1    ∴ ａ＝（１／２）（ｄ2−２ｄ1）    ・・・  （５）
となる。また、（３）式×４−（４）式より
２ｂ＝４ｄ1−ｄ2    ∴ ｂ＝（１／２）（４ｄ1−ｄ2）    ・・・  （６）
となる。故に、（５）及び（６）式で表されるａ及びｂを代入すると
Ｙ1（ｘ）＝(１／２)（ｄ2−２ｄ1)ｘ2＋(１／２)(４ｄ1−ｄ2)ｘ  ・・・  （７）
が得られる。同様に（−１，−ｄ0）、原点、及び（１，ｄ1）を通る２次曲線Ｙ2（ｘ）をＹ2（ｘ）＝ａｘ2＋ｂｘとおくと、ｘ＝−１では
Ｙ2（ｘ）＝−ｄ0＝ａ−ｂ      ・・・  （８）
となり、ｘ＝１では
Ｙ2（ｘ）＝ｄ1＝ａ＋ｂ      ・・・  （９）
となる。（８）式＋（９）式より
２ａ＝ｄ1−ｄ0    ∴ ａ＝（１／２）（ｄ1−ｄ0）    ・・・  （１０）
となる。また、−（８）式＋（９）式より
２ｂ＝ｄ1＋ｄ0    ∴ ｂ＝（１／２）（ｄ1＋ｄ0）    ・・・  （１１）
となる。故に、（１０）及び（１１）式で表されるａ及びｂを代入すると
Ｙ2（ｘ）＝(１／２)（ｄ1−ｄ0)ｘ2＋(１／２)(ｄ1＋ｄ0)ｘ  ・・・  （１２）
が得られる。座標系を元に戻すために原点の実際の波高値Ｌ0を加えると、（７）及び（１２）式はそれぞれ以下のようになる。
【００３０】
Ｙ1（ｘ）＝(１／２)（ｄ2−２ｄ1)ｘ2＋(１／２)(４ｄ1−ｄ2)ｘ＋Ｌ0
・・・  （１３）
Ｙ2（ｘ）＝(１／２)（ｄ1−ｄ0)ｘ2＋(１／２)(ｄ1＋ｄ0)ｘ＋Ｌ0
・・・  （１４）
２次曲線Ｙ1（ｘ）、Ｙ2（ｘ）の平均値を曲線ＹS（ｘ）とすると
ＹS（ｘ）＝１／２｛Ｙ1（ｘ）＋Ｙ2（ｘ）｝＝（１／４）（ｄ2−ｄ1−ｄ0）ｘ2
＋（１／４）（−ｄ2＋５ｄ1＋ｄ0）ｘ＋Ｌ0
＝(１／４)ｘ｛ｄ2（ｘ−１）＋ｄ1（−ｘ＋５）＋ｄ0（−ｘ＋１）｝＋Ｌ0
＝（１／４）ｘ｛−ｄ2（１−ｘ）＋ｄ1（１−ｘ）＋ｄ0（１−ｘ）
＋４ｄ1｝＋Ｌ0
＝ｘ｛(１／４)(−ｄ2＋ｄ1＋ｄ0)(１−ｘ)＋ｄ1｝＋Ｌ0  ・・・（１５）
となる。ｄ0〜ｄ2とＬ-1〜Ｌ2は（１）式に表される関係があるから、（１５）式中の(−ｄ2＋ｄ1＋ｄ0)は
(−ｄ2＋ｄ1＋ｄ0)＝−（Ｌ2−Ｌ0）＋（Ｌ1−Ｌ0）＋（Ｌ0−Ｌ-1）
＝−（Ｌ2−Ｌ1）＋（Ｌ0−Ｌ-1）  ・・・  （１６）
により計算される。また、δ-1〜δ+1とＬ-1〜Ｌ2の（２）式に表される関係、及び（１６）式から（１５）式を変形すると
ＹS(ｘ)＝ｘ＊｛(１／４)(−δ+1＋δ-1)＊(１−ｘ)＋δ0｝＋Ｌ0  ・・・  （１７）
が得られる。
【００３１】
（１７）式では乗算は「＊」で示す２箇所で行われる。それらの乗算は、｛｝内での乗算、及びそれに続く加算が終了した後、残りの乗算が行われる形となる。
さてＬＳＩの回路設計では、同一のクロック信号に同期して、フリップフロップ（以下「ＦＦ」と記す）から出力された信号が組み合わせ回路を通過し、次の段のＦＦに入力されるという構成が採用されるのが普通である。乗算器は組み合わせ回路で構成することができるが、演算するビット幅が大きくなるに従い、多くのゲートといった基本素子を通る長いパスとなってしまう傾向がある。
【００３２】
そのパスは、乗算器を構成する組み合わせ回路の間にＦＦ等を追加することにより、より短い複数のパスに分割することができる。例えば乗算器の中間結果を保持させるために１段のＦＦを挿入することにより、パスを複数の短いパスに分割することができる。そのＦＦを挿入することにより、そのＦＦの前段、後段それぞれで結果の出力に１クロックの時間がかかるようになることから、乗算器が乗算結果を出力するのに２クロックの時間がかかることになる。しかし、前段、後段で異なる乗算を行わせることが可能なことから、乗算を続けて行わせる場合には、２クロックで２つの乗算結果を得ることが可能である（パイプライン演算）。ＦＦを２段以上、挿入した場合も同様に、１クロック当たりに１つの乗算結果を得ることが可能である。
【００３３】
上記（１７）式では、前の乗算結果は次の乗算に用いる入力値として扱う必要がある。上記のような乗算器の高い利用効率を実現させるためには、各段の計算結果が無駄にならないようにする必要がある。そのため、（１７）式中の乗算を行わせる場合には、前の乗算結果を用いた乗算を行わせるためのスケジューリングが複雑となる。これを回避するために、本実施の形態では（１７）式に対して以下のような変形を行っている。
【００３４】
ＹS(ｘ)＝(１／４)(−δ+1＋δ-1)＊ｘ(１−ｘ)＋δ0＊ｘ＋Ｌ0  ・・・  （１８）
本実施の形態では、（１８）式中のｘ(１−ｘ)に注目し、その計算は専用の演算器（ハードウェア）により行うようにしている。それにより、（１８）式では乗算は「＊」で示す２箇所、つまり(−δ+1＋δ-1)＊ｘ(１−ｘ)とδ0＊ｘの２箇所となる。しかし、それら２箇所の乗算は、一方の乗算結果を他方の乗算に用いるものでは無いことから、演算上の関連は存在していない。このため、単純なスケジューリングで（１８）式全体の計算を行わせることができるようになっている。
【００３５】
（１−ｘ）は、１＞ｘ≧０（符号無し）のとき、ｘを表現する全ビットの値を全て反転させ、ＬＳＢに１を加えたものである。本実施の形態では、ＬＳＢに１を加えずに、ｘを表現する全ビットの値を全て反転させたものに近似する。そのように近似すると、ｘ(１−ｘ)は以下のようにして計算することができる。図４を参照して具体的に説明する。その図４では、ｘは８ビットで表される小数点以下の数値として、各ビットの値をａ［７］〜ａ［０］と表記している。その全ビットの値を全て反転させて近似した（１−ｘ）は、各ビットの値を-ａ［７］〜-ａ［０］と表記している（ビット反転記号としては普通「〜」の上添字が用いられるが、ここではその記号として「−」の上添字を用いている）。ａ［０］、-ａ［０］はＬＳＢに相当するビットの値を示している。また、「＆」は論理積、「＾」は排他的論理和を示している。なお、ａ［７］〜ａ［０］については「ａ［７：０］」とも表記することにする。これは他でも同様である。
【００３６】
乗算を用いてｘ（１−ｘ）の値を求める場合、図４（ａ）に示すような計算を行う必要がある。その図４において、任意の数値ｙでｙ＆-ｙ＝０だから
ａ［０］＆-ａ［０］＝ａ［１］＆-ａ［１］＝・・・＝ａ［７］＆-ａ［７］＝０
となる。
【００３７】
また、任意の数値ｙ、ｚでｙ＆-ｚ＋-ｙ＆ｚ＝ｙ＾ｚだから、図４（ａ）中の０を結んだ線を対称軸にした場合に線対称となる位置関係にある２つの部分積の加算値は排他的論理和を用いて表すことができる。具体的には
ａ［１］＆-ａ［０］＋ａ［０］＆-ａ［１］＝ａ［１］＾ａ［０］
ａ［２］＆-ａ［０］＋ａ［０］＆-ａ［２］＝ａ［２］＾ａ［０］
ａ［３］＆-ａ［０］＋ａ［０］＆-ａ［３］＝ａ［３］＾ａ［０］
ａ［２］＆-ａ［１］＋ａ［１］＆-ａ［２］＝ａ［２］＾ａ［１］
・                  ・                  ・
ａ［７］＆-ａ［６］＋ａ［６］＆-ａ［７］＝ａ［７］＾ａ［６］
となる。このため、図４（ｂ）に示すように、各ビット同士の排他的論理和の和として計算することができる。その和は、図４（ｃ）に示す計算方法を用いて計算する。
【００３８】
図４（ｃ）に示すように、排他的論理和の和は、３段の加算により計算するようにしている。図４（ｃ）中のｓ２［６：０］、ｓ１［６：０］、及びｓ０［８：０］はそれぞれ対応する段、ビットの加算結果を示している。
【００３９】
本実施の形態では、各段で加算する２つの数値のうちの一方の上位２ビットは００とさせることにより、キャリーが各段で生じないようにさせている。このため、図４（ｃ）の下段に示すように、排他的論理和の和は（０，０，ｓ２［６：０］，ｓ１［１：０］，ｓ０［３：０］）の計１５ビットで表される値となる。
【００４０】
このように、ｘ、（１−ｘ）の一方を、他方の全ビットの値を全て反転させたものに近似すると、ｘ(１−ｘ)は排他的論理和の和の形で求めることができるようになる。演算の対象とすべきビットの組み合わせ数は大きく低減する。そのため、図４（ａ）、及び図４（ｃ）から明らかなように、計算量を大幅に低減させることができる。それにより、ハードウェアにより計算を行わせる場合には、より小さい規模のハードウェアでも計算を高速に行えるようになる。ハードウェアの制御もより簡単化する。ソフトウェア処理により計算を行わせる場合には、ソフトウェアを変更することで計算をより高速に行えることとなる。これらのことから、ハードウェア、ソフトウェアの何れにより補間の計算を行わせるとしても、より低コストで波形データ補間装置を実現できることとなる。
【００４１】
上記排他的論理和の和を求める計算は、音源部５のなかで波形ＲＯＭデータラッチブロック５−４、及び積和ブロック５−５により行われる。このことから、それらブロック５−４、５−５の構成と動作について図３を参照して詳細に説明する。その図３において、５０１〜５０４、５０９〜５１１、及び５２１〜５２３はレジスタ、５０５、５０６、５１６、及び５１７はマルチプレクサ、５０７は加減算器、５１４は右２ビットシフタ、５１５はｘ（１−ｘ）を計算するハードウェアである演算器、５１９は乗算器、５２０は加算器である。
【００４２】
始めに、波形ＲＯＭデータラッチブロック５−４の動作について詳細に説明する。
レジスタ５０１には、図７に示す座標系の原点に相当するサンプリング点での波高値Ｌ0が格納され、レジスタ５０３、５０２、５０４にはそれぞれ、そのサンプリング点の差分値δ0、その直後のサンプリング点の差分値δ+1、原点に相当するサンプリング点の直前に位置するサンプリング点の差分値δ-1が格納される。波形ＲＯＭデータラッチブロック５−４によって波形ＲＯＭ６から新たに差分値δの読み出しが行われる場合、読み出された差分値δはレジスタ５０２に格納される。レジスタ５０２、５０３にそれまで格納されていた差分値δはそれぞれ事前にレジスタ５０３、５０４に格納される。それらレジスタ５０３、５０４の値の更新を行う前に、マルチプレクサ５０５、５０６にそれぞれａ端子を選択させ、加減算器５０７に加算（ＡＤＤ）を指示して行わせる。その加算により、δ0＋Ｌ0＝Ｌ1−Ｌ0＋Ｌ0＝Ｌ1が計算され、その計算結果が新たな波高値Ｌ0としてレジスタ５０１に格納される。
【００４３】
レジスタ５０２に差分値δを格納した後は、マルチプレクサ５０５、５０６にそれぞれｂ端子を選択させ、加減算器５０７に減算（ＳＵＢ）を指示して行わせる。その減算により、−δ+1＋δ-1の計算結果がレジスタ５０９に格納される。
【００４４】
以上の動作が、波形ＲＯＭ６から新たな差分値δの読み出しに対応して行われる。各レジスタ５０１、５０３、及び５０４に格納された内容は、新たに波形データがアサインされた場合に、リセット信号によりリセットされる。そのリセット信号は、例えばＣＰＵ１により、或いはその指示により出力される。
【００４５】
次に、積和ブロック５−５の動作について詳細に説明する。
レジスタ５１０、５１１には、それぞれ小数アドレス計算ブロック５−２から出力された最新の小数アドレスｘ、ＥＮＶ発生ブロック５−３から出力された最新のエンベロープデータ（エンベロープ値）ＥＮＶが格納される。演算器５１５は、ｘ（１−ｘ）の値を図４（ｃ）に示す計算方法により算出する、排他的論理和の和を演算するハードウェアである。その値の算出は、例えばレジスタ５１０に新たな小数アドレスｘが格納された場合に行う。
【００４６】
演算器５１５がｘ（１−ｘ）の値を算出すると、次にマルチプレクサ５１６、５１７、及び５１８にそれぞれａ端子を選択させ、乗算器５１９、加算器５２０にそれぞれ演算を行わせる。それにより、乗算器５１９は、レジスタ５０９に格納された値を右２ビットシフタ５１４が右に２ビットシフトすることで１／４倍された値（＝（１／４）（−δ+1＋δ-1））とｘ（１−ｘ）の乗算結果を出力する。加算器５２０は、その乗算結果と波高値Ｌ0の加算結果（＝（１／４）ｘ（１−ｘ）＊（−δ+1＋δ-1）＋Ｌ0）を出力する。その加算結果はレジスタ５２１に格納される。
【００４７】
レジスタ５２１への加算結果の格納が終了すると、次にマルチプレクサ５１６、５１７、及び５１８にそれぞれｂ端子を選択させ、乗算器５１９、加算器５２０にそれぞれ演算を行わせる。それにより、乗算器５１９は、レジスタ５０３に格納された差分値δ0と小数アドレスｘの乗算結果を出力する。加算器５２０は、その乗算結果とレジスタ５２１に格納された値の加算結果（＝（１／４）ｘ（１−ｘ）＊（−δ+1＋δ-1）＋Ｌ0＋ｘδ0）を出力する。その加算結果はレジスタ５２２に格納される。
【００４８】
レジスタ５２２への加算結果の格納が終了すると、次にマルチプレクサ５１６、５１７、及び５１８にそれぞれｃ端子を選択させ、乗算器５１９、加算器５２０にそれぞれ演算を行わせる。それにより、乗算器５１９は、レジスタ５２２に格納された値とエンベロープ値ＥＮＶの乗算結果を出力する。加算器５２０は、その乗算結果と０の加算結果（＝ＥＮＶ＊［（１／４）ｘ（１−ｘ）＊（−δ+1＋δ-1）＋Ｌ0＋ｘδ0］）を出力する。その加算結果はレジスタ５２３に格納され、時分割処理のＤＣＯ出力として累算ブロック５−６に出力される。
＜第２の実施の形態＞
（１８）式右辺のδ0＊ｘ＋Ｌ0は、直線補間を行った場合に得られる補間値に相当する。それを除く部分、つまり(１／４)(−δ+1＋δ-1)＊ｘ(１−ｘ)は、直線補間で用いる区間（連続する２つのサンプリング点間）のその前の区間における差分値δ-1と、その次の区間における差分値δ+1を用いて算出する、補間値の補正値と見なすことができる。第２の実施の形態は、その視点で補間値を算出するようにしたものである。
【００４９】
第２の実施の形態による波形データ補間装置が搭載された電子楽器の構成は、第１の実施の形態におけるそれと基本的に同じである。また、動作も大部分は同じである。このことから、第１の実施の形態の説明で付した符号をそのまま用いて、第１の実施の形態から異なる部分についてのみ説明する。
【００５０】
図５は、補正値のビット数による変化を説明する図である。図５に示すグラフの横軸は小数アドレスｘの値、縦軸は補正値をそれぞれ示している。それにより、小数アドレスを１＞ｘ≧０の範囲で変化させたときの各種補正値を示している。図５では、その補正値として、小数アドレスｘの値を表すビット数が４、６、及び８ビットとした場合に、つまりそれらのビット数で小数アドレスｘを近似した場合に得られる補正値をそれぞれ実線、点線、及び一点鎖線で示し、補正値の理想値を太線で示している。
【００５１】
図５に示すように、小数アドレスｘを近似すると、その補正値は全て理想値よりも小さくなる（より正確には、理想値よりも縦軸の値が０の線側になる）。これは、実際の補間を行うと、その補間によって実際に得られる補正値（波高値）は、その補間を理想的に行った場合の波高値と、直線補間だけを行った場合の波高値と、の間になることを意味する。その実際に得られる波高値は、小数アドレスｘを表現するビット数が多くなるほど、補間を理想的に行って得られる波高値に近づくが、或る程度のビット数であれば理想の波高値に十分、近づけられることを図５は示している。
【００５２】
図３において、レジスタ５１０に格納された小数アドレスｘの上位４ビットのみを演算器５１５に入力した場合、その出力のビット数が８ビットとすると、そのＭＳＢから２ビット、及びＬＳＢは必ず０となる。そのため、乗算器５１９では、演算器５１５の出力を入力する側は５ビットで済むようになる。
【００５３】
演算器５１５の出力を入力する側のビット数をより少なくすると、その出力を用いて乗算を行う乗算器の規模はより小さくできるようになる。そのため、補間のための計算を行わせるハードウェアの規模もより小さくできることとなる。ソフトウェア処理によりその計算を行わせる場合には、処理に必要なメモリ量をより低減できることとなる。
【００５４】
（１８）式右辺の(−δ+1＋δ-1)＊ｘ(１−ｘ)には重み付けの係数として１／４がかかっているので、ＭＳＢの上位に２ビットの０が追加された形となり、演算器５１５の出力の精度は１０ビット相当となる。小数アドレスｘの上位４ビットのみを演算器５１５に入力しても、図５に示すように、補正値として十分な精度のものを得ることができる。同様に、小数アドレスｘの上位ｎビットのみを演算器５１５に入力した場合には、その出力の精度は２＊ｎ＋２ビット相当となり、その出力を入力する側は２＊ｎ−３ビットで済むこととなる。このようなことから、第２の実施の形態では、レジスタ５１０に格納された小数アドレスｘの上位ｎビットのみを演算器５１５に入力し、それ以下のビットを切り捨てるようになっている。
【００５５】
なお、本実施の形態（第１、及び第２の実施の形態）では、補間のための計算を音源部５に搭載のハードウェアにより行わせるようになっているが、ソフトウェア処理によりその計算を行わせるようにしても良い。そのハードウェアの構成については、本実施の形態のものに限定されるわけではなく、様々な変形を行うことができる。
【図面の簡単な説明】
【００５６】
【図１】第１の実施の形態による波形データ補間装置を搭載した電子楽器の構成図である。
【図２】音源部５の構成を説明する図である。
【図３】音源部５の波形ＲＯＭデータラッチブロック５−４、及び積和ブロック５−５の構成を説明する図である。
【図４】補間を行うために採用した計算方法を説明する図である。
【図５】補正値のビット数による変化を説明する図である。
【図６】従来、行われている直線補間を説明する図である。
【図７】特許文献１に記載された従来の補間を説明する図である。
【符号の説明】
【００５７】
１    ＣＰＵ
５    音源部
５−１    整数アドレス計算ブロック
５−２    小数アドレス計算ブロック
５−３    ＥＮＶ発生ブロック
５−４    波形ＲＯＭデータラッチブロック
５−５    積和ブロック
５−６    累算ブロック
６    波形ＲＯＭ
５０１〜５０４、５０９〜５１１、５２１〜５２３    レジスタ
５０５、５０６、５１６、５１７    マルチプレクサ
５０７    加減算器
５１４    右２ビットシフタ
５１５    演算器
５１９    乗算器
５２０    加算器
【図１】
0004645337.tif 000002
【図２】
0004645337.tif 000003
【図３】
0004645337.tif 000004
【図４】
0004645337.tif 000005
【図５】
0004645337.tif 000006
【図６】
0004645337.tif 000007
【図７】
0004645337.tif 000008