(57)【特許請求の範囲】
【請求項１】
各サンプリング点の波形データからなる波形データ列を入力する入力手段と、
該入力手段から入力された波形データ列を記憶する記憶手段と、
該記憶手段の書込みアドレスを発生する書込みアドレス発生手段とを備え、
該書込みアドレス発生手段は、その発生する書込みアドレスに小数部を設けて、該書込みアドレスを該各サンプリング点毎に小数単位で更新するよう構成され、該書込みアドレスのうちの整数部が該記憶手段ヘの書込みアドレスとして用いられるようにした波形記憶装置。
【請求項２】
該書込みアドレス発生手段は、該サンプリング点毎に更新する書込みアドレスの歩進値を整数値または小数値に切り換える歩進値切換え手段をさらに備えた請求項１記載の波形記憶装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、波形データを記憶する波形記憶装置に関する。
本発明の波形記憶装置は、例えば電子楽器分野では、波形データをサンプリング記憶するサンプラーや、波形データの読出しにディレイを与えたりピッチシフトしたりする効果付加装置などとして利用できる。
【０００２】
従来、例えばディレイを与える効果付加装置では、入力された波形データ列を一旦メモリに蓄え、所定時間後に読み出すことで遅延を与えている。この装置で、長い遅延時間が必要なときには
▲１▼メモリ容量を増す、
▲２▼システム全体のサンプリング・レート（サンプリング・クロックの速度）を下げる、
などの対策が必要である。
また、同様なことは、長い波形データ列を記憶しようとする場合にも必要となる。
【０００３】
【発明が解決しようとする課題】
▲１▼の従来方法では、メモリ容量が大きくなってしまう。
また、▲２▼の従来方法では、普通時のサンプリング・レートと、長い遅延時間などが必要なときのサンプリング・レートを二種類設けておいて、これを必要に応じて切り換えなければならず、このレート切換えのためにハードウェア回路が必要となる。また、この切換えをソフトウェア的に行おうとした場合にはソフトウェア処理が複雑になる。
【０００４】
本発明はかかる問題点に鑑みてなされたものであり、メモリ容量を増すことなく、あるいはシステムのサンプリング・レートを一定に保ったまま、長い波形データ列の記憶や長い遅延時間の実現などを可能にすることを目的とする。
【０００５】
【課題を解決するための手段および作用】
上述の課題を解決するために、本発明に係る波形記憶装置は、各サンプリング点の波形データからなる波形データ列を入力する入力手段と、該入力手段から入力された波形データ列を記憶する記憶手段と、該記憶手段の書込みアドレスを発生する書込みアドレス発生手段とを備え、該書込みアドレス発生手段は、その発生する書込みアドレスに小数部を設けて、該書込みアドレスを該各サンプリング点毎に小数単位で更新するよう構成され、該書込みアドレスのうちの整数部が該記憶手段ヘの書込みアドレスとして用いられるようにしたものである。
この波形記憶装置では、入力手段から入力された波形データ列を記憶手段に書き込むにあたり、書込みアドレス発生手段の発生する書込みアドレスのうちの整数部を該記憶手段ヘの書込みアドレスとして用いるとともに、この書込みアドレスを該各サンプリング点毎に小数単位で更新する。これにより、記憶手段の同じアドレスに波形データが重複して書き込まれることになり、結果として波形データが間引かれることになり、よってメモリ容量が少なくとも、長い波形データ列の記憶が可能となる。
【０００６】
上記の書込みアドレス発生手段は、該サンプリング点毎に更新する書込みアドレスの歩進値を整数値または小数値に切り換える歩進値切換え手段をさらに備えるよう構成できる。
これにより、単に歩進値をハードウェア的あるいはソフトウェア的に変えるだけで、小数単位で歩進値を変える場合には波形データ列の書込みにあたっての間引き割合を簡単に変更でき、また歩進値を整数に戻すことで全波形データ列を記憶する通常の使用態様に簡単に戻すことができる。
具体的には、ノーマル遅延モードと、このノーマル遅延モードと同じ容量の記憶手段で長い遅延時間を得ることができるロング遅延モードとの少なくとも２つのモードを有したディレイ効果装置において、前記サンプリング点毎に更新する書込みアドレスの歩進値を、ノーマル遅延モードのときは整数値に、ロング遅延モードのときは小数値に、モードの選択に従って設定する歩進値切換え手段を備えるように構成することにより、非常に簡単にモード切換えを行うことができるディレイ効果装置を提供することができる。
【０００７】
【発明の実施の形態】
以下、図面を参照して本発明の実施形態を説明する。
図１には本発明の一実施例としての波形記憶装置が示される。図中、５はアナログ波形信号が入力されてこれをディジタル信号の波形データに変換するＡ／Ｄ変換器である。このＡ／Ｄ変換器５の動作クロックのタイミングでアナログ波形信号がサンプリングされて各サンプリング点毎の波形データに変換される。このＡ／Ｄ変換器５から出力された波形データの列は入出力装置４を介して記憶装置２に書き込まれる。入出力装置４は記憶装置２との入出力インタフェースとなるもので、ＣＰＵ１からの入出力切換え信号に応じて交互に書込みサイクルと読出しサイクルに切り換えられる。この入出力装置４の出力側部分には後述する補間装置（図示しない）が備えられている。
【０００８】
記憶装置２はＡ／Ｄ変換器５でサンプリングした各サンプリング点の波形データからなる波形データ列を記憶するもので、そのアドレスのビット幅をここではＭビット（例えば４ビット）とする。Ｒ／Ｗ制御装置３は記憶装置２の読出し／書込みの制御を行うもので、ＣＰＵ１からの入出力切換え信号に応じて書込みアドレスＷＡと読出しアドレスＲＡをアドレス・カウンタで発生させて記憶装置２に供給する。このアドレス・カウンタで発生するアドレスのビット幅は（Ｍ＋１）ビットとされており、本実施例ではこのアドレスのうちの上位側Ｍビットを整数部、下位側１ビット（すなわち最下位ビットＬＳＢ）を小数部とし、このうちの整数部により記憶装置２の実アドレス（Ｍビット）を指定するようになっている。すなわち、このアドレス・カウンタが発生するアドレスは、記憶装置２の全領域をアクセスし得るビット長より長いビット長を持ち、整数部と小数部に分けられ、整数部は記憶装置２のアドレスを指定し、小数部は後述の補間処理に使用されるものである。
【０００９】
このＲ／Ｗ制御装置３にはＣＰＵ１からカウンタ歩進制御信号が供給されており、このカウンタ歩進制御信号に応じて、アドレス・カウンタで発生するアドレスの歩進値が整数値または小数値に切り換えられる。整数値に切り換えられた場合には歩進値は整数（カウンタ発生アドレスの上位Ｍビットで表現される値で本実施例では十進数の「１」とする）となり、小数値に切り換えられた場合には歩進値は小数（カウンタ発生アドレスの最下位ビットＬＳＢで表現される値で本実施例では十進数の「０．５」とする）となる。
【００１０】
記憶装置２から読み出された波形データは入出力装置４に入力される。入出力装置４は補間装置を備えており、記憶装置２から読み出した波形データを必要に応じ補間して出力する。この入出力装置４にはＲ／Ｗ制御装置３から補間データが入力されている。この補間データはＲ／Ｗ制御装置３におけるカウンタ発生アドレスの小数部（すなわちくＬＳＢ）の状態を示すデータであり、この補間データを使用して補間装置における波形データの補間処理を行う。入出力装置４から出力されたディジタル波形データはＤ／Ａ変換器６に入力されてアナログ波形信号に変換されて出力される。
【００１１】
なお、この図１では省略してあるが、ＣＰＵ１にはユーザインタフェース（ＵＩ）などの周辺機器が接続される。また、Ａ／Ｄ変換器５と入出力装置４間、入出力装置４とＤ／Ａ変換器６間には折返し防止のためのフィルタを入れてもよい。
【００１２】
以下、この実施例の動作を説明する。
Ａ／Ｄ変換器５は入力されたアナログ波形信号をサンプリングしてディジタル波形データに変換し、そのサンプリングした波形データを各サンプリング点毎に入出力装置４に送る。入出力装置４では、ＣＰＵ１から入出力装置４に送られる入出力切換え信号に応じて、Ａ／Ｄ変換器５でサンプリングした波形データの記憶装置２への書込み動作と、記憶装置２から読み出した波形データをＤ／Ａ変換器６に出力する動作とが切り換えられる。
【００１３】
この書込み動作時には、Ａ／Ｄ変換器５から入力された各サンプリング点の波形データが一つ置きに間引かれて記憶装置２に書き込まれる。以下、この動作について説明する。
【００１４】
図２は通常書込み時におけるアドレス・カウンタと入力波形：記憶波形の対応を示すものである。この通常書込み時には、ＣＰＵ１からのカウンタ歩進制御信号によって、Ｒ／Ｗ制御装置３におけるアドレス・カウンタは各サンプリング毎にアドレスが「１」ずつインクリメントされるよう、すなわち歩進値が「１」となるよう制御される。よって、記憶装置２に記憶される波形データ列は、図２に示すように、Ａ／Ｄ変換器５でサンプリングされた入力波形データ列がそのまま記憶されることになる。
【００１５】
図３は本発明による間引き書込み時におけるアドレス・カウンタと入力波形：記憶波形の対応を示すものである。この間引き書込み時には、ＣＰＵ１からのカウンタ歩進制御信号によって、Ｒ／Ｗ制御装置３におけるアドレス・カウンタは各サンプリング毎にアドレスが「０．５」ずつインクリメントされるよう、すなわち歩進値が「０．５」となるよう制御される。よって、このアドレス・カウンタの発生するカウンタ発生アドレスは、「０．０、０．５、１．０、１．５、２．０、２．５・・・」というようにインクリメントされていく。アドレス・カウンタから記憶装置２に与えられるアドレスは、このカウンタ発生アドレスの整数部としてあるので、各サンプリング点毎に記憶装置２に与えられる書込みアドレス（実アドレス）は、「０、０、１、１、２、２、・・・ｎ、ｎ」というように、整数が２度ずつ重複するものとなる。よって、入出力装置４から入力された波形データ列は、カウンタ発生アドレスの小数部が「．０」のときに書き込まれた入力波形データが、次にカウンタ発生アドレスがインクリメントされてその小数部が「．５」となったときの入力波形データで重ね書き（オーバーライト）されるという形で、記憶装置２の各アドレスに２度書きされ、結果として波形データの間引きが行われる。
【００１６】
記憶装置２から波形データを読み出すときには、上記同様にアドレス・カウンタのカウンタ発生アドレスの整数部を用いて読み出せばよく、この場合、同じアドレスから２度ずつ読出しを行うので、同じ波形データが２度ずつ続くことになるが、入力波形とほぼ同じ出力波形が得られる。一方、元の入力波形により近い波形を再生するためには、入力側で間引いた波形データを入出力装置４の補間装置で直線補間などの補間により再現する。直線補間を行う場合は、カウンタ発生アドレスの小数部を使用し、上記の例ではその小数部が「．５」のときに読み出した波形データをその前後の波形データで直線補間（前後のデータの平均値とする補間）すればよい。
【００１７】
本発明の実施にあたっては種々の変形形態が可能である。例えば上述の実施例では、間引き書込み時のカウンタ発生アドレスの歩進値を「０．５」としたが、本発明はこれに限られるものではなく、任意に変え得る。例えばこの歩進値を「０．２５」とすれば、波形データの４サンプリング毎に１回ずつ書込みを行う（すなわち４つの波形データのうち３つを間引く）ようにすることができる。また、出力側の補間機能はもちろん省くことも可能である。
【００１８】
次に、本発明に係る波形記憶装置を電子楽器の効果付加装置に適用した場合の実施例を図４〜図７を参照して説明する。この効果付加装置は、付加する効果として入力信号に所定の遅延時間Ｄを与えるディレイ機能を持つものである。
【００１９】
図４にはこの実施例装置のブロック構成が示される。図４において、入力端子から入力されたアナログ波形信号は、Ａ／Ｄ変換器１３において所定のサンプリング周期でディジタル信号の波形データに変換され、この波形データの列はＤＳＰ（ディジタル・シグナル・プロセッサ）１４に入力される。このＤＳＰ１４では、入力された波形データ列をＲＡＭ（ランダム・アクセス・メモリ）１６に書き込み、所望の遅延時間後に読み出してＤ／Ａ変換器１５に出力する処理を行っている。このＤＳＰ１４では、ソフトウェア処理によりアドレス・カウンタが作られ、このアドレス・カウンタの歩進値αは、ソフトウェア処理により適宜任意の値を設定できるようになっている。ＣＰＵ１１は装置全体の制御を司るもので、このＣＰＵ１１には各種の操作子群１２が接続されており、これらの操作子群１２はＣＰＵ１１によってその設定状態が検出され、その設定状態に従ってＣＰＵ１１からＤＳＰ１４にパラメータが供給される。
【００２０】
この実施例装置は、遅延処理に関してノーマル遅延モードとロング遅延モードの二つの動作モードを有しており、操作子群１２のうちのモードスイッチによって動作モードの切換え設定が行われる。またこの操作子群１２は遅延時間（ディレイタイム）を設定する遅延時間操作子を備えている。
【００２１】
以下、この実施例装置の動作をフローチャートを参照して説明する。まず、ＣＰＵ１１の処理手順を図５のフローチャートを参照して説明する。このフローチャートの処理は周期的に実行されるものである。
処理がスタートされると、まず操作子群１２の設定状態を検出する（ステップＳ１）。この検出結果から、操作子群１２のうちのモードスイッチが前回の状態から変更されているか否かを判断する（ステップＳ２）。変更されていない場合には次のステップＳ３〜Ｓ５を飛び越す。変更している場合には、その変更がロング遅延モードに変更されたのか、ノーマル遅延モードに変更されたのかを判断する（ステップＳ３）。
【００２２】
変更がロング遅延モードへの変更であった場合には、ＤＳＰ１４の歩進値レジスタにアドレス・カウンタの歩進値αとして「０．５」を設定する。また遅延時間を決定する遅延オフセット値Ｄを操作子群１２のうちの遅延時間操作子の設定値から演算して、ＤＳＰ１４の遅延時間レジスタに設定する（ステップＳ４）。一方、変更がノーマル遅延モードへの変更であった場合には、ＤＳＰ１４の歩進値レジスタにアドレス・カウンタの歩進値αとして「１．０」を設定し、また遅延時間を決定する遅延オフセット値Ｄを、操作子群１２のうちの遅延時間操作子の設定値から演算して、ＤＳＰ１４の遅延時間レジスタに設定する（ステップＳ５）。このように、ステップＳ４とステップＳ５でそれぞれ遅延オフセット値Ｄを設定し直しているのは、同じ遅延時間を与える場合であっても、ノーマル遅延モードとロング遅延モードとではこの遅延オフセット値Ｄが異なるためである。すなわち、同じ遅延オフセット値Ｄであれば、波形の読出しにあたり、ロング遅延モードではノーマル遅延モードの２倍の遅延時間が付与される。
【００２３】
次いで、ステップＳ１での操作子群１２の検出結果に基づき、遅延時間操作子が前回の設定値から変更されたか否かを判断する（ステップＳ６）。変更されていれば、付与すべき遅延時間が変更されたものとして、その時のモードスイッチの設定モード（ノーマル遅延モードかロング遅延モードか）に対応して、遅延時間操作子の設定値に基づいて遅延オフセット値Ｄを演算して、ＤＳＰ１４の遅延時間レジスタに設定する（ステップＳ７）。遅延時間操作子が変更されていないときには、このステップＳ７は飛び越す。
以上のステップＳ１〜Ｓ７を繰り返して実行する。
【００２４】
次に、ＤＳＰ１４における処理を図６のフローチャートを参照して以下に説明する。このフローチャートの一連の処理は、波形データのサンプリング周期毎（Ａ／Ｄ変換器１３のサンプリング周期毎）にＤＳＰ１４において周期的に実行されるものである。
【００２５】
処理が開始されると、まず、初期設定として、アドレス・カウンタを構成するレジスタ（カウント値）ＣＮＴをリセットする（ステップＳ１１）。このアドレス・カウンタは、ＲＡＭ１６のアドレス「０」から「Ａmax 」までをリング状に用いたエンドレスのメモリ領域を指定するアドレスを発生するものであり、アドレス「Ａmax 」の次がアドレス「０」となってアドレスが更新されるものである。このリング状のメモリ領域には入力された波形データ列がシーケンシャルに記憶される。アドレス・カウンタが発生するアドレスは、前述の実施例で説明したと同様に、整数部と小数部（ＬＳＢの１ビット分）とからなり、このうちの整数部が上記ＲＡＭ１２の実アドレスとして用いられる。
【００２６】
次いで、Ａ／Ｄ変換器１３でサンプリングされてディジタルデータに変換された波形データＤsampをＤＳＰ１４内に取り込み（ステップＳ１２）、アドレス・カウンタのカウント値ＣＮＴのうちの整数部を、ＲＡＭ１２への書込みアドレスＷＡとして書込みレジスタに設定し（ステップＳ１３）、ＲＡＭ１２の書込みアドレスＷＡに波形データＤsampを書き込む（ステップＳ１４）。なお、上記のうちのステップＳ１３における関数「ｉｎｔｇ（ＣＮＴ）」は、本実施例では括弧内の値（ここではカウント値ＣＮＴ）のうちの整数部だけをとる関数として定義される。このステップＳ１２〜１４の処理により、ロング遅延モードの設定時には、カウント値ＣＮＴは歩進値が「０．５」ずつインクリメントするものであるから、連続する２つの処理サイクル（本フローの処理サイクル）におけるステップＳ１３の処理で同じアドレスが２度ずつ書込みアドレスＷＡとして設定されることになり、サンプリングされた波形データの間引き書込み（重ね書き）が行われることになる。また、ノーマル遅延モードの設定時には、カウント値ＣＮＴは歩進値が「１．０」ずつインクリメントされるので、通常の書込み処理となる。
【００２７】
次いで、カウント値ＣＮＴの値から遅延オフセット値Ｄを減じて、その減算結果値の整数部を、ＲＡＭ１２からの読出しアドレスＲＡ１としてレジスタに設定する。よって、ロング遅延モードの設定時には、ＲＡＭ１２の同じアドレスから２度ずつ波形データが読み出される。また遅延オフセット値Ｄを減じることにより、ＲＡＭ１２に書き込まれた波形データは、遅延オフセット値Ｄに対応する遅延時間の後に読み出されることになる。
【００２８】
次に続くステップＳ１６〜Ｓ２２は波形の補間処理を行うためのフローである。以下、この補間処理について説明する。
前述したように、入力された波形データ列はＲＡＭ１６の「０〜Ａmax 」のアドレスのメモリ領域をリング状に用いてエンドレスに記憶される。この方法ではアドレス「Ａmax 」の次はアドレス「０」となる。つまり、「０」以下のアドレスはアドレス「Ａmax 」側に戻ることになる。一方、読出しアドレスＲＡ１は、ステップＳ１５でｉｎｔｇ（ＣＮＴ−Ｄ）で求めるため、０よりも小さい値となる場合があるので、このときにＲＡ１を０からＡmax の間のアドレス値に補正する処理が必要となる。ステップＳ１６、Ｓ１７はこれを行っている。すなわち、読出しアドレスＲＡ１が０より小さいか否かを判断し（ステップＳ１６）、小さい場合には、
ＲＡ１←Ａmax ＋ＲＡ１＋１
として、ＲＡ１を０〜Ａmax の間のアドレスに変換する（ステップＳ１７）。
【００２９】
次いで、補間処理をするための波形データを読み出すために、読出しアドレスＲＡ１に１を加算して、補間処理用の読出しアドレスＲＡ２としてレジスタに設定する（ステップＳ１８）。この補間処理用の読出しアドレスＲＡ２についても、前述同様に波形メモリ領域がアドレス「０〜Ａmax 」のリング状になっているため、ステップＳ１８の加算処理で当該メモリ領域のアドレスＡmax を超える場合があるので、その場合には読出しアドレスＲＡ２を「０〜Ａmax 」の間の値に戻す必要がある。よって、読出しアドレスＲＡ２が、
ＲＡ２≧Ａmax ＋１
かによりアドレスＡmax を超えたか否かを判断し（ステップＳ１９）、超えていれば、
ＲＡ２←ＲＡ２−（Ａmax ＋１）
の処理をして、読出しアドレスＲＡ２を「０〜Ａmax 」の間の値に戻す（ステップＳ２０）。
【００３０】
次いで、ＲＡＭ１６から読出しアドレスＲＡ１を用いて波形データＤout １を読み出し、読出しアドレスＲＡ２を用いて波形データＤout ２を読み出し、それぞれレジスタに記憶する（ステップＳ２１）。そして、これらレジスタに記憶した波形データＤout １、Ｄout ２に基づいて、次の補間演算、
Ｄout ←Ｄout １＋（Ｄout ２−Ｄout １）×ｆｒ（ＣＮＴ−Ｄ）
を行う（ステップＳ２２）。ここで、本実施例では「ｆｒ（ＣＮＴ−Ｄ）」は括弧内の値の小数部（「０．０」または「０．５」）を抽出する関数として定義される。図７に示すように、読出しアドレスＲＡ１とＲＡ２は１アドレス分の幅を持つ隣接したアドレスであり、その間の小数部「．５」の幅を持つアドレス〔（ＣＮＴ−Ｄ）で指定されるアドレス〕では波形データＤout １、Ｄout ２に基づいて補間波形データが作成される。上述した補間演算は、（ＣＮＴ−Ｄ）の小数部が「．５」の値を持つ場合には読出しアドレスＲＡ１、ＲＡ２からそれぞれ読み出した波形データＤout １、Ｄout ２の平均値（補間値）を出力波形データＤout とする演算となり、（ＣＮＴ−Ｄ）の小数部が「．０」の値を持つ場合には読出しアドレスＲＡ１から読み出した波形データＤout １をそのまま出力波形データＤout とする演算となる。これにより、書込み時に間引いた波形データが補間処理により再生されることになる。
【００３１】
このようにして求めた出力波形データＤout をＤ／Ａ変換器１５に出力する（ステップＳ２３）。この後、アドレス・カウンタのカウント値ＣＮＴに歩進値αを加算する処理
ＣＮＴ←ＣＮＴ＋α
を行い、カウント値ＣＮＴをインクリメントする（ステップＳ２４）。このアドレス更新の結果、カウント値ＣＮＴがアドレスＡmax を超えたか否かを
ＣＮＴ≧Ａmax ＋１
の判定式で判断し（ステップＳ２５）、超えていれば、そのカウント値ＣＮＴをアドレス「０〜Ａmax 」の間の値に補正する処理
ＣＮＴ←ＣＮＴ−（Ａmax ＋１）
を行う（ステップＳ２６）。
【００３２】
【発明の効果】
以上に説明したように、本発明によれば、長い遅延時間を与える場合や長い波形データ列を記憶する場合などにも、大きなメモリ容量を必要とせず、あるいはサンプリングレートを変更するための回路ないし処理が不要となる。
また、本発明ではアドレス・カウンタの歩進値を単に変更するだけで、サンプリングデータの間引きの割合を変更したり、通常の波形記憶処理に戻したりすることが簡単にできる。
【図面の簡単な説明】
【図１】本発明の一実施例としての波形記憶装置を示す図である。
【図２】実施例装置における通常書込みを説明する図である。
【図３】実施例装置における間引き書込みを説明する図である。
【図４】本発明の他の実施例としての波形記憶装置を示す図である。
【図５】他の実施例におけるＣＰＵの処理手順を示す図である。
【図６】他の実施例におけるＤＳＰの処理手順を示す図である。
【図７】他の実施例における補間処理を説明するための図である。
【符号の説明】
１、１１  ＣＰＵ
２  記憶装置
３  Ｒ／Ｗ制御装置
４  入出力装置
５、１３  Ａ／Ｄ変換器
６、１５  Ｄ／Ａ変換器
１２  操作子群
１４  ＤＳＰ（ディジタル・シグナル・プロセッサ）
１６  ＲＡＭ（ランダム・アクセス・メモリ）
【図１】
0003865274.tif 000002
【図２】
0003865274.tif 000003
【図３】
0003865274.tif 000004
【図４】
0003865274.tif 000005
【図５】
0003865274.tif 000006
【図６】
0003865274.tif 000007
【図７】
0003865274.tif 000008