フィルタ装置およびフィルタ処理プログラム
【課題】係数テーブルの肥大化、回路規模増大や処理速度低下を招くことなく周波数特性を連続的に変化させ得るフィルタ装置を実現する。
【解決手段】定常時にはフィルタ部12から出力される係数切り替え前の波形データをリングバッファ14bに蓄積しつつ、それを波形N周期(Nは整数)分遅延させた波形データを読み出して出力する。フィルタ係数切り替え後はリングバッファ14bから読み出す係数切り替え前の波形データを、係数切り替え後のフィルタ部12が出力する波形データにクロスフェードさせる。クロスフェード完了時にリングバッファ14bの蓄積内容を更新させる間はフィルタ部12が出力する係数切り替え後の波形データを出力し、更新完了後はリングバッファ14bで遅延させた係数切り替え後の波形データを読み出して出力する。
【解決手段】定常時にはフィルタ部12から出力される係数切り替え前の波形データをリングバッファ14bに蓄積しつつ、それを波形N周期(Nは整数)分遅延させた波形データを読み出して出力する。フィルタ係数切り替え後はリングバッファ14bから読み出す係数切り替え前の波形データを、係数切り替え後のフィルタ部12が出力する波形データにクロスフェードさせる。クロスフェード完了時にリングバッファ14bの蓄積内容を更新させる間はフィルタ部12が出力する係数切り替え後の波形データを出力し、更新完了後はリングバッファ14bで遅延させた係数切り替え後の波形データを読み出して出力する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、例えば電子楽器に用いて好適なフィルタ装置およびフィルタ処理プログラムに関する。
【背景技術】
【0002】
電子楽器では楽音生成する態様に応じてフィルタ特性を動的に変更可能なデジタルフィルタを用いる。その為、フィルタ特性とフィルタ係数とを対応付けて記憶した係数テーブルを参照して所望のフィルタ特性となるフィルタ係数を得るようにする場合が多い。
【0003】
この種の技術として、例えば特許文献1には、カットオフ周波数値を整数部Iおよび小数部Fで表現し、カットオフ周波数値の整数部Iに対応するフィルタ係数を記憶した係数テーブルを設け、カットオフ周波数値の小数部Fがゼロの時はカットオフ周波数値の整数部Iに対応するフィルタ係数を係数テーブルから読み出してそのまま出力し、小数部Fがゼロでない時には係数テーブルから整数部Iに対応するフィルタ係数Aと、整数部I+1に対応するフィルタ係数Bとを読み出し、読み出したフィルタ係数A,Bを小数部Fで直線補間A+F(A−B)して得られるフィルタ係数Cを出力するフィルタ装置が開示されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特公平6−91418号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
ところで、上述した従来のフィルタ装置では、フィルタの周波数特性を連続的に変化させる場合、フィルタ係数を急激に変化させると出力が不連続になってノイズ発生要因となる為、フィルタ係数を小刻みに設定したり、フィルタ係数を補間形成するようにしている。
しかしながら、フィルタ係数を小刻みに設定すると係数テーブルの肥大化を招き、一方、フィルタ係数を補間形成するには別途に係数補間器を備えることから、回路規模増大や処理速度低下を招く問題がある。
また、出力の音質向上を図るためには、フィルタ演算する演算ビット数を上げればよいが、演算ビット数を高めると、更なる回路規模増大と処理速度低下を招いてしまう、という問題もある。
【0006】
そこで本発明の第1の目的は、係数テーブルを肥大化させず、しかも回路規模増大や処理速度低下を招くことなく周波数特性を連続的に変化させることができるフィルタ装置およびフィルタ処理プログラムを提供することにある。
また、本発明の第2の目的は、回路規模増大と処理速度低下を招致することなく音質向上を図ることができるフィルタ装置およびフィルタ処理プログラムを提供することにある。
【課題を解決するための手段】
【0007】
請求項1に記載の発明では、入力波形を複数の周波数帯域に分割し、分割された各周波数帯域毎のエンベロープレベルを検出する検出手段と、この検出手段により検出されたエンベロープレベルが所定値を超えた周波数帯域について第1の演算ビット数のフィルタ演算を指示し、所定値以下の周波数帯域について第2の演算ビット数のフィルタ演算を指示する指示手段と、前記複数の周波数帯域に対応して設けられ、前記指示手段から指示される第1および第2の演算ビット数のいずれかのフィルタ演算を、対応する周波数帯域の入力波形に施すフィルタ手段とを具備することを特徴とする。
【0008】
請求項2に記載の発明では、入力波形を複数の周波数帯域に分割する帯域分割手段と、前記複数の周波数帯域毎に、前記入力波形の波形種および音高に対応付けた演算ビット数を予め記憶する記憶手段と、前記入力波形の波形種および音高を表す楽音パラメータに応じて、前記記憶手段から対応する演算ビット数を読み出して各周波数帯域に割当てる割当て手段と、前記複数の周波数帯域に対応して設けられ、前記割当て手段により割当てられた演算ビット数のフィルタ演算を、対応する周波数帯域の入力波形に施すフィルタ手段とを具備することを特徴とする。
【0009】
請求項3に記載の発明では、入力波形を複数の周波数帯域に分割し、分割された各周波数帯域毎のエンベロープレベルを検出する検出ステップと、この検出ステップにて検出されたエンベロープレベルが所定値を超えた周波数帯域について第1の演算ビット数のフィルタ演算を指示し、所定値以下の周波数帯域について第2の演算ビット数のフィルタ演算を指示する指示ステップと、前記複数の周波数帯域に対応して実行され、前記指示ステップで指示される第1および第2の演算ビット数のいずれかのフィルタ演算を、対応する周波数帯域の入力波形に施すフィルタリングステップとをコンピュータで実行させることを特徴とする。
【0010】
請求項4に記載の発明では、入力波形を複数の周波数帯域に分割する帯域分割ステップと、前記複数の周波数帯域毎に、前記入力波形の波形種および音高に対応付けた演算ビット数を予め記憶しておき、前記入力波形の波形種および音高を表す楽音パラメータに応じて、対応する演算ビット数を読み出して各周波数帯域に割当てる割当てステップと、前記複数の周波数帯域に対応して実行され、前記割当てステップにて割当てられた演算ビット数のフィルタ演算を、対応する周波数帯域の入力波形に施すフィルタリングステップとをコンピュータで実行させることを特徴とする。
【0011】
本発明では、入力波形を複数の周波数帯域に分割して各周波数帯域毎のエンベロープレベルを検出し、検出されたエンベロープレベルが所定値を超えた周波数帯域に第1の演算ビット数のフィルタ演算を指示し、所定値以下の周波数帯域に第2の演算ビット数のフィルタ演算を指示すると、各周波数帯域に対応して設けられたフィルタ手段が指示された演算ビット数のフィルタ演算を入力波形に施すので、波形レベルが大きく聴覚的に耳につきやすい周波数帯域では精度の高いフィルタリングを、波形レベルが小さく聴覚的に目立たない周波数帯域では精度の低いフィルタリングを行わせるようにし、これにより回路規模増大と処理速度低下を招致することなく聴感上の音質向上を図ることが可能になる。
【発明の効果】
【0012】
請求項1,3に記載の発明によれば、入力波形を複数の周波数帯域に分割して各周波数帯域毎のエンベロープレベルを検出し、検出されたエンベロープレベルが所定値を超えた周波数帯域に第1の演算ビット数のフィルタ演算を指示し、所定値以下の周波数帯域に第2の演算ビット数のフィルタ演算を指示すると、各周波数帯域に対応して設けられたフィルタ手段が指示された演算ビット数のフィルタ演算を入力波形に施すので、波形レベルが大きく聴覚的に耳につきやすい周波数帯域では精度の高いフィルタリングを、波形レベルが小さく聴覚的に目立たない周波数帯域では精度の低いフィルタリングを行わせるので、回路規模増大や処理速度低下を招致することなく聴感上の音質向上を図ることができる。
請求項2,4に記載の発明によれば、複数の周波数帯域毎に、入力波形の波形種および音高に対応付けた演算ビット数を予め記憶しておき、入力波形の波形種および音高を表す楽音パラメータに応じて、対応する演算ビット数を読み出して各周波数帯域のフィルタ手段に割当てると、各フィルタ手段は割当てられた演算ビット数のフィルタ演算を、対応する周波数帯域の入力波形に施すので、波形種または音高の変化に対応した最適な演算ビット数のフィルタリングを即座に指示出来、しかもエンベロープ検出する構成を省くことができるから、回路規模増大や処理速度低下を招致することなく聴感上の音質向上を図ることができる。
【図面の簡単な説明】
【0013】
【図1】第1実施例によるフィルタ装置を備えた電子楽器の全体構成を示すブロック図である。
【図2】第1実施例によるフィルタ装置を備えた音源6の部分構成を示すブロック図である。
【図3】フィルタ部12の一構成例を示すブロック図である。
【図4】係数テーブル13に記憶されるフィルタ係数の一例を示す図である。
【図5】振幅補間器14の構成を示すブロック図である。
【図6】補間係数発生器14aが発生する係数αの経時変化(同図(イ))および係数βの経時変化(同図(ロ))の様子を示す図である。
【図7】第2実施例によるフィルタ装置の構成を示すブロック図である。
【図8】積和演算処理ロジックを示すブロック図である。
【図9】制御部10が実行する語長割当処理の動作を示すフローチャートである。
【図10】ローパスフィルタ22が実行するフィルタ演算タイマインタラプト処理の動作を示すフローチャートである。
【図11】変形例における語長割当テーブルTBLの構成を示す図である。
【図12】変形例における制御部10が実行する語長割当処理の動作を示すフローチャートである。
【発明を実施するための形態】
【0014】
本発明によるフィルタ装置およびフィルタ処理プログラムは、電子楽器や効果付加装置などに適用される。以下では、電子楽器に搭載されるフィルタ装置(もしくはフィルタ処理プログラム)を実施例とし、これについて図面を参照して説明する。
【0015】
A.第1実施例
(1)全体構成
図1は第1実施例によるフィルタ装置を備えた電子楽器の全体構成を示すブロック図である。この図において、1は押離鍵操作に応じたキーオン/キーオフイベントおよびノート番号、ベロシティ等からなる演奏情報を発生する鍵盤である。2は楽器パネルに配設される各種スイッチから構成されるスイッチ部であり、操作されたスイッチに対応したスイッチイベントを発生する。3は各種制御プログラムを記憶するROMである。4はCPU5のワークエリアとして用いられ、各種レジスタ・フラグデータを一時記憶するRAMである。
【0016】
CPU5はROM3に格納される各種制御プログラムを実行し、例えば鍵盤1が発生する演奏情報に対応した楽音パラメータを発生して音源6に送出したり、スイッチ部2が発生するスイッチイベントに応じて動作モードを変更させる等、楽器各部を制御する。なお、CPU5が発生する楽音パラメータとは、発音又は消音を指示するノーオン/オフイベントの他、例えば音色切換えや効果付与など発生波形の周波数特性を変化させて波形修飾する為のパラメータを含む。6は上記CPU5から供給される楽音パラメータに応じた波形を発生する音源である。音源6は本発明によるフィルタ装置を備えており、その具体的な構成については追って述べる。7は音源6の出力をアナログ形式の波形信号に変換するD/A変換器である。8はD/A変換器7から供給される波形信号を増幅してスピーカ9から発音させるサウンドシステムである。
【0017】
(2)音源6の構成
次に、図2〜図5を参照して音源6の構成を説明する。図2は、本発明によるフィルタ装置を含む音源6の部分構成を示すブロック図である。図2において、10はCPU5から供給される楽音パラメータに応じて、音色番号TN、位相データPD、カットオフ周波数データCFを発生する制御部である。また、制御部10は、楽音パラメータに対応して発生するカットオフ周波数データCFを切り替えるタイミングで補間開始トリガTRを発生する。11は周知の波形メモリ読み出し方式で構成される波形発生器である。波形発生器11は、制御部10から供給される音色番号TNで指定される音色の波形データを、位相データPDに応じて読み出して出力する。
【0018】
12は波形発生器11から出力される波形データをフィルタリングして次段の振幅補間器14に供給するフィルタ部である。フィルタ部12は、例えば図3に図示するように、入力を1サンプル遅延して出力する遅延素子12a〜12dと、後述のフィルタ係数a0〜a2およびb1〜b2がそれぞれ供給される係数乗算器12e〜12iと、これら係数乗算器12e〜12iの各出力を加算する加算器12jとを備える周知の2次IIR型デジタルフィルタから構成される。こうした構成のフィルタ部12は、後述する係数テーブル13から出力されるフィルタ係数a0〜a2およびb1〜b2に従った周波数特性のフィルタ演算を行う。
具体的には、入力x[n]、遅延素子12aの出力x[n−1]、遅延素子12bの出力x[n−2]、遅延素子12cの出力y[n−1]および遅延素子12dの出力y[n−2]とした場合、次式(1)で表現されるフィルタ演算にて出力y[n]を発生する。
y[n]=a0・x[n]+a1・x[n−1]+a2・x[n−2]−b1・y[n−1]−b2・y[n−2]…(1)
【0019】
係数テーブル13は、フィルタ部12をローパスフィルタとして動作させる場合、図4に図示するように、各種カットオフ周波数データCFに対応するフィルタ係数a0〜a2およびb1〜b2をROMに記憶させておき、制御部10から供給されるカットオフ周波数データCFに対応するフィルタ係数a0〜a2およびb1〜b2を読み出してフィルタ部12の係数乗算器12e〜12iに供給する。
【0020】
振幅補間器14は、図5に図示するように、補間係数発生器14a、リングバッファ14b、乗算器14c〜14dおよび加算器14eから構成される。補間係数発生器14aは、制御部10から補間開始トリガTRが入力された時点、すなわちフィルタ係数切り替え時点から波形N周期分の時間に一定レートで経時変化する係数α、βを発生すると共に、係数αが「0」(係数βが「1」)となった時点でリングバッファ14bにバッファクリアおよび書き込み開始を指示する信号writeを発生する。また、振幅補間器14は、リングバッファ14bが波形N周期分(Nは整数)の波形データを書き込み終えた時点で係数αを「1」、係数βを「0」の初期設定に戻す。
【0021】
リングバッファ14bは、入力される波形データを波形N周期分(Nは整数)分蓄積しながら、蓄積した波形データを順次読み出して出力する。換言すると、リングバッファ14bは入力される波形データを波形N周期分遅延して出力するものであり、補間係数発生器14aから信号writeが供給された場合、蓄積している波形データを一旦クリアして新たに入力される波形データの書き込みを開始する。
乗算器14cは、リングバッファ14bから出力される波形データに、補間係数発生器14aから供給される係数αを乗算して出力する。乗算器14dは、前段のフィルタ部12が出力する波形データに、補間係数発生器14aから供給される係数βを乗算して出力する。加算器14eは、乗算器14c,14dの各乗算結果を加算して出力する。
【0022】
(3)振幅補間器14の動作
次に、本発明の要旨にかかわる振幅補間器14の動作について図6を参照して説明する。図6は補間係数発生器14aが発生する係数αの経時変化(同図(イ))および係数βの経時変化(同図(ロ))の様子を図示している。この図において、(A)は制御部10から補間開始トリガTRが供給される以前の定常状態を表す。定常状態(A)では、補間係数発生器14aは係数αを「1」、係数βを「0」とする初期設定下にある為、振幅補間器14はリングバッファ14bから読み出される波形データだけを出力する。
【0023】
そして、制御部10から補間係数発生器14aに補間開始トリガTRが入力されるフィルタ係数切り替え時点t1になったとする。この時、補間係数発生器14aは係数αを「1」、係数βを「0」に設定しているので、振幅補間器14はリングバッファ14bから読み出される波形データ(フィルタ係数切り替え前に蓄積された波形データ)だけを出力する。したがって、フィルタ係数の切り替えに際してフィルタ部12の出力に不連続が生じたとしても、そのフィルタ部12の出力は乗算器14dでミュートされる結果、ノイズ発生を抑止できる。
【0024】
次に、フィルタ係数切り替え時点t1以後の遷移状態(B)になると、振幅補間器14は、波形N周期分の時間内で「1」から「0」に一定レートで経時変化する係数αを乗算したフィルタ係数切り替え前の波形データと、波形N周期分の時間内で「0」から「1」に一定レートで経時変化する係数β(=1−α)を乗算したフィルタ係数切り替え後の波形データとを加算する線形補間を行う。これにより、フィルタ係数切り替え前の波形データからフィルタ係数切り替え後の波形データにクロスフェードさせる形で連続的に振幅レベルを制御する為、ノイズ発生を抑止し得る。
【0025】
そして、係数αが「0」となってフィルタ係数切り替え前の波形データをミュートする一方、係数βが「1」に達してフィルタ係数切り替え後の波形データだけを出力する時点t2になると、振幅補間器14では補間係数発生器14aより供給される信号writeに従い、リングバッファ14bは蓄積していた波形データを一旦クリアした後、新たに入力される波形データの書き込みを開始する。続いて、リングバッファ14bに波形N周期分(Nは整数)の波形データを書き込み終える時点t3に達すると、補間係数発生器14aは係数αを「1」、係数βを「0」の初期設定に戻す。これにより、振幅補間器14はリングバッファ14bから読み出される波形データだけを出力する定常状態(A)に復帰する。
【0026】
このように、第1実施例では、フィルタ係数が切り替えられる時点まではフィルタ部12から出力されるフィルタ係数切り替え前の波形データをリングバッファ14bに蓄積しつつ、当該リングバッファ14bから波形N周期(Nは整数)分遅延させた波形データを読み出して出力する。そして、フィルタ係数切り替え後はリングバッファ14bから読み出すフィルタ係数切り替え前の波形データを、フィルタ係数切り替え後のフィルタ部12から出力される波形データにクロスフェードさせるよう振幅補間して出力する。
【0027】
そして、クロスフェードし終えた時点からリングバッファ14bの蓄積内容をフィルタ係数切り替え前の波形データからフィルタ係数切り替え後の波形データに更新させる間はフィルタ部12から出力されるフィルタ係数切り替え後の波形データを出力し、更新完了後はフィルタ部12から出力されるフィルタ係数切り替え後の波形データをリングバッファ14bに蓄積しつつ、当該リングバッファ14bから波形N周期(Nは整数)分遅延させた波形データを読み出して出力する。これにより、フィルタ出力の不連続を回避するので、係数テーブルの肥大化あるいは回路規模増大や処理速度低下を招くことなく周波数特性を連続的に変化させることが可能になる。
【0028】
なお、上述した第1実施例では、説明の簡略化を図るため、振幅補間器14が線形補間する一例を開示したが、本発明の要旨はこれに限定されず、非線形補間する態様も含む。
例えば、フィルタ係数切り替えの前後でフィルタ部12が出力する波形データのレベル差に応じて、最適な補間演算形態を選択し、選択した補間演算形態でフィルタ係数切り替え前の波形データからフィルタ係数切り替え後の波形データに非線形補間することも可能である。このようにすれば、フィルタ係数切り替え前後の波形データをより自然な形で滑らかに繋げる為、音質向上に寄与することができる。
【0029】
また、第1実施例では機能構成を明確にするためにハードウェアイメージとして表現したが、本発明の要旨はそれに限定されず、開示した各機能要素をソフトウェア処理で具現することも勿論可能である。
【0030】
B.第2実施例
次に、図7〜図10を参照して第2実施例について説明する。
(1)構成
図7は第2実施例によるフィルタ装置の構成を示すブロック図であり、上述した第1実施例と共通する要素には同一の番号を付している。図7において、フィルタ部12は、波形発生器11(不図示)から供給される入力波形を第1〜第3の周波数帯域に分別するフィルタユニット12−1〜12−3から構成される。各フィルタユニット12−1〜12−3は、入力波形をそれぞれ第1〜第3の周波数帯域に分別するバンドパスフィルタ20と、バンドパスフィルタ20の出力エンベロープを検出するエンベロープ検出器21と、後述する制御部10から供給される信号WLにて指定される演算ビット数でフィルタ演算を行うローパスフィルタ22を備える。
【0031】
制御部10は、第1実施例と同様、CPU5から供給される楽音パラメータに応じて、音色番号TNや位相データPDを発生して図示されていない波形発生器11に供給する一方、上記エンベロープ検出器21の検出結果に応じてフィルタ演算時の演算ビット数を指定する信号WLを発生する。信号WLは「1」の場合に16ビットのフィルタ演算を、「0」の場合に8ビットのフィルタ演算を指示する。
【0032】
ローパスフィルタ22は、前述した第1実施例と同様、図3に図示した2次IIR型デジタルフィルタで構成され、前述した(1)式、すなわち入力x[n]、遅延素子12aの出力x[n−1]、遅延素子12bの出力x[n−2]、遅延素子12cの出力y[n−1]および遅延素子12dの出力y[n−2]とした場合、y[n]=a0・x[n]+a1・x[n−1]+a2・x[n−2]−b1・y[n−1]−b2・y[n−2]で表される積和演算(フィルタ演算)を、演算ビット数16ビットもしくは8ビットで行う。なお、ローパスフィルタ22には、対応する周波数帯域に適応させたフィルタ係数a0〜a2およびb1〜b2が予め設定される。
【0033】
ところで、積和演算e=a×c+bを16ビットもしくは8ビットで行わせる場合、a,b,cの各語長を16ビット、aの上位/下位8ビットをそれぞれah,al、cの上位/下位8ビットをそれぞれch,clとすると、16ビットの積和演算はe=ah×ch×10000h+ah×cl×100h+al×ch×100h+al×cl+bとなり、8ビット演算の組合せで表現できる。なお、ここで10000hは16ビット上位シフト、100hは8ビット上位シフトを表す。一方、8ビットの積和演算は、上記16ビットの積和演算における下位8ビットを省略した形となり、e=ah×ch×10000h+bで表される。
【0034】
したがって、積和演算e=a×c+bを16ビットもしくは8ビットで行うには、図8に図示する処理ロジックを実行することになる。図8において、40はaの上位8ビットah/下位8ビットalのいずれかを選択するセレクタ、41はcの上位8ビットch/下位8ビットclのいずれかを選択するセレクタである。42はセレクタ40の出力とセレクタ41の出力とを乗算する乗算器である。43は乗算器42の出力を16ビット上位シフトあるいは8ビット上位シフトするシフタである。44は乗算結果を累算する加算器である。45は前回の乗算結果を保持するラッチ、46は加算器44が出力する累算値を保持するラッチ、47はラッチ46が保持する値にbを加算する加算器である。
【0035】
上記処理ロジックにて16ビットの積和演算を行う場合には、セレクタ40、41およびシフタ43を適宜切り替えながらah×ch×10000h、ah×cl×100h、al×ch×100hおよびal×clの乗算を行い、その結果を累算した後にbを加える。一方、8ビットの積和演算は、ah×chの乗算結果を16ビット上位シフトした後にbを加える。
さて、こうした処理ロジックに基づき、ローパスフィルタ22は、y[n]=a0・x[n]+a1・x[n−1]+a2・x[n−2]−b1・y[n−1]−b2・y[n−2]なるフィルタ演算を行う。つまり、信号WLにて指定される16ビット/8ビットの処理ロジックに従い、a0・x[n]、a1・x[n−1]、a2・x[n−2]、−b1・y[n−1]および−b2・y[n−2]の各項について積和演算を行う。
【0036】
(2)動作
次に、上記構成による第2実施例において制御部10が実行する語長割当処理およびローパスフィルタ22が実行するフィルタ演算タイマインタラプト処理の各動作を説明する。
【0037】
(a)語長割当処理の動作
制御部10では、CPU5から供給される楽音パラメータが更新される毎に、図9に示す語長割当処理を実行する。本処理が実行されると、制御部10は図9のステップSA1に処理を進め、ポインタiに初期値「1」をストアする。ポインタiは、フィルタユニット12−iが備えるエンベロープ検出器21の検出結果ENV[i]を指定する。次いで、ステップSA2では、ポインタiに対応する検出結果ENV[i]が予め定められる基準値以下であるか否かを判断する。検出結果ENV[i]が基準値以下であると、判断結果は「YES」になり、ステップSA3に進み、レジスタWL[i]に「0」をセットし、8ビットのフィルタ演算を行うようローパスフィルタ22に指示する。
【0038】
一方、検出結果ENV[i]が基準値を超えていれば、判断結果が「NO」になり、ステップSA4に進み、レジスタWL[i]に「1」をセットし、16ビットのフィルタ演算を行うようローパスフィルタ22に指示する。そして、ステップSA5では、ポインタiをインクリメントして歩進させ、続くステップSA6では、歩進されたポインタiが「3」を超えたか否か、つまり、フィルタユニット12−1〜12−3の各ローパスフィルタ22にフィルタ演算の演算ビット数を指示し終えたかどうかを判断する。指示し終えていなければ、判断結果は「NO」になり、上述のステップSA2以降を繰り返す。そして、演算ビット数を指示し終えると、判断結果が「YES」になり、本処理を完了させる。
【0039】
このように、制御部10では、CPU5から供給される楽音パラメータが更新される毎に、各周波数帯域のエンベロープレベルが予め定められる基準値を超えるかどうかを判断し、エンベロープレベルが基準値以下であると、その周波数帯域でローパスフィルタリングするローパスフィルタ22に、8ビット演算を指示し、一方、エンベロープレベルが基準値を超えれば、その周波数帯域でローパスフィルタリングするローパスフィルタ22に、16ビット演算を指示するようになっている。
【0040】
(b)フィルタ演算タイマインタラプト処理
ローパスフィルタ22では、一定周期毎に本処理を割込み実行しており、実行タイミングになると、制御部10が指示する演算ビット数に従い、図8に図示した処理ロジックに基づくフィルタ演算、すなわちステップSB1〜SB16を実行する。
先ずステップSB1では、フィルタユニット12−1〜12−3を識別するフィルタ番号mに「1」をセットすると共に、加算値bをゼロリセットする。次いで、ステップSB2では、項番号sに「1」をセットする。項番号sとは、前述した(1)式で表されるフィルタ演算式の項を指定する。具体的には、項番号s=1はa0・x[n]を、項番号s=2はa1・x[n−1]を、項番号s=3はa2・x[n−2]を、項番号s=4は−b1・y[n−1]を、項番号s=5は−b2・y[n−2]を指定する。
【0041】
ステップSB3では、項番号sの信号値をレジスタaに、項番号sのフィルタ係数をレジスタcにそれぞれストアし、続くステップSB4では、積和演算項kに「1」をセットすると共に、レジスタDL1をゼロリセットする。積和演算項kは、図8の処理ロジック中のah×ch×10000h(k=1)、ah×cl×100h(k=2)、al×ch×100h(k=3)およびal×cl(k=4)を指定する。レジスタDL1は、図8に図示する処理ロジック中のラッチ45の値を保持する。
【0042】
次に、ステップSB5では、積和演算項kの値に応じた処理を実行させる。すなわち、積和演算項kが「1」の場合、つまり図8の処理ロジック中のah×ch×10000hを実行するには、ステップSB6に処理を進め、レジスタa(信号値)の上位8ビットahをレジスタDS1に、レジスタc(フィルタ係数)の上位8ビットchをレジスタDS2にそれぞれストアすると共に、ビットシフト値を保持するレジスタLSに「16」をセットする。
積和演算項kが「2」の場合、つまり図8の処理ロジック中のah×cl×100hを実行するには、ステップSB7に処理を進め、レジスタa(信号値)の上位8ビットahをレジスタDS1に、レジスタc(フィルタ係数)の下位8ビットclをレジスタDS2にそれぞれストアすると共に、ビットシフト値を保持するレジスタLSに「8」をセットする。
【0043】
積和演算項kが「3」の場合、つまり図8の処理ロジック中のal×ch×100hを実行するには、ステップSB8に処理を進め、レジスタa(信号値)の下位8ビットalをレジスタDS1に、レジスタc(フィルタ係数)の上位8ビットchをレジスタDS2にそれぞれストアすると共に、ビットシフト値を保持するレジスタLSに「8」をセットする。
積和演算項kが「4」の場合、つまり図8の処理ロジック中のal×clを実行するには、ステップSB8に処理を進め、レジスタa(信号値)の下位8ビットalをレジスタDS1に、レジスタc(フィルタ係数)の下位8ビットclをレジスタDS2にそれぞれストアすると共に、ビットシフト値を保持するレジスタLSをゼロリセットする。
【0044】
こうして、積和演算項kの値に対応したデータをレジスタDS1、DS2、LSにセットし終えると、ステップSB10に進む。ステップSB10では、レジスタDS1の値とレジスタDS2の値とを乗算した結果を、レジスタLSの値分上位ビットシフトさせ、その値をレジスタDL1,DL2に加算する。そして、ステップSB11に進み、積和演算項kをインクリメントして歩進させる。
次に、ステップSB12では、フィルタ番号mに対応するレジスタWL[m]の値が「1」であって、積和演算項kが「5」より小さいかどうかを判断する。つまり、制御部10から16ビット演算指示を受け、しかもその積和演算の途中であるかどうかを判断する。
【0045】
16ビット演算指示に従った積和演算の途中であれば、判断結果は「YES」になり、ステップSB5に処理を戻す。以後、積和演算項k=4の積和演算を終えるまでステップSB5〜SB12を繰り返す。そして、全ての積和演算を終えて積和演算項kが「5」になると、ステップSB12の判断結果は「NO」になり、ステップSB13に進む。一方、8ビット演算指示を受けた場合には、上記ステップSB12の判断結果は「NO」になり、ステップSB13に進む。
ステップSB13では、レジスタDL2に加算値bを加算した結果をレジスタeにセットした後、そのレジスタeの値を加算値bにセットし直す。また、ステップSB13では、項番号sを歩進させる。
【0046】
続いて、ステップSB14では、歩進された項番号sが「5」を超えたか、つまりフィルタ演算し終えたかどうかを判断する。フィルタ演算し終えていなければ、判断結果は「NO」になり、上述したステップSB3に処理を戻す。以後、フィルタ演算し終えるまでステップSB3〜SB13を繰り返す。そして、a0・x[n]から−b2・y[n−2]までの全ての項のフィルタ演算を行うと、ステップSB14の判断結果が「YES」となり、ステップSB15に進む。ステップSB15ではフィルタ番号mを歩進させ、続くステップSB16では歩進されたフィルタ番号mが「3」を超えたか否か、すなわち全てのフィルタユニット12−1〜12−3においてフィルタ演算を行ったかどうかを判断する。その途中であると、判断結果は「NO」になり、ステップSB2に処理を戻す。一方、全てのフィルタユニット12−1〜12−3においてフィルタ演算を終えると、判断結果が「YES」になり、本処理を完了させる。
【0047】
以上のように、第2実施例によるフィルタ装置は、波形発生器11(不図示)から供給される入力波形を第1〜第3の周波数帯域に分別し、それら各周波数帯域毎に入力波形のエンベロープレベルを検出し、検出したエンベロープレベルが予め設定される基準値を超えた場合には16ビットのフィルタ演算を、基準値以下なら8ビットのフィルタ演算を行う。
つまり換言すると、波形レベルが大きく聴覚的に耳につきやすい周波数帯域では精度の高いフィルタリングを、波形レベルが小さく聴覚的に目立たない周波数帯域では精度の低いフィルタリングを行わせるようにし、これにより回路規模増大と処理速度低下を招致することなく聴感上の音質向上を図るようになっている。
【0048】
C.変形例
上述した第2実施例では、入力波形のエンベロープレベルに応じてフィルタ演算の演算ビット数を指示するようにしたが、これに替えて、例えば図11に示すように、波形種nおよび音高pに応じて、フィルタユニット12−1〜12−3にそれぞれ与える演算ビット数WL[n,p,1]〜[n,p,3]を読み出す語長割当テーブルTBLを制御部10に設けておき、CPU5から供給される楽音パラメータに従い、制御部10が語長割当テーブルTBLから対応する演算ビット数WL[n,p,1]〜[n,p,3]を読み出してフィルタユニット12−1〜12−3に供給する態様としてもよい。
【0049】
具体的には、制御部10が図12に図示する語長割当処理を一定周期毎に割込み実行する。実行タイミングになると、ステップSC1に進み、CPU5から供給される楽音パラメータが波形または音高の変化を指示するものであるか否かを判断する。波形または音高の変化を指示するものでなければ、判断結果は「NO」となり、何も行わずに本処理を完了させる。
一方、波形または音高の変化を指示するものであると、判断結果が「YES」になり、ステップSC2に進み、変更された波形種nまたは音高pに対応する演算ビット数WL[n,p,1]〜[n,p,3]を語長割当テーブルTBLから読み出し、それぞれをフィルタユニット12−1〜12−3に送出して本処理を終える。
このような変形例によれば、波形または音高の変化に対応した最適な演算ビット数のフィルタリングを即座に指示出来、しかもエンベロープ検出する構成を省くことができるから、回路規模増大や処理速度低下を招致することなく聴感上の音質向上を図ることが可能になる。
【符号の説明】
【0050】
1 鍵盤
2 スイッチ部
3 ROM
4 RAM
5 CPU
6 音源
7 D/A変換器
8 サウンドシステム
9 スピーカ
10 制御部
11 波形発生器
12 フィルタ部
13 係数テーブル
14 振幅補間器
14a補間係数発生器
14bリングバッファ
14c,14d 乗算器
14e加算器
【技術分野】
【0001】
本発明は、例えば電子楽器に用いて好適なフィルタ装置およびフィルタ処理プログラムに関する。
【背景技術】
【0002】
電子楽器では楽音生成する態様に応じてフィルタ特性を動的に変更可能なデジタルフィルタを用いる。その為、フィルタ特性とフィルタ係数とを対応付けて記憶した係数テーブルを参照して所望のフィルタ特性となるフィルタ係数を得るようにする場合が多い。
【0003】
この種の技術として、例えば特許文献1には、カットオフ周波数値を整数部Iおよび小数部Fで表現し、カットオフ周波数値の整数部Iに対応するフィルタ係数を記憶した係数テーブルを設け、カットオフ周波数値の小数部Fがゼロの時はカットオフ周波数値の整数部Iに対応するフィルタ係数を係数テーブルから読み出してそのまま出力し、小数部Fがゼロでない時には係数テーブルから整数部Iに対応するフィルタ係数Aと、整数部I+1に対応するフィルタ係数Bとを読み出し、読み出したフィルタ係数A,Bを小数部Fで直線補間A+F(A−B)して得られるフィルタ係数Cを出力するフィルタ装置が開示されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特公平6−91418号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
ところで、上述した従来のフィルタ装置では、フィルタの周波数特性を連続的に変化させる場合、フィルタ係数を急激に変化させると出力が不連続になってノイズ発生要因となる為、フィルタ係数を小刻みに設定したり、フィルタ係数を補間形成するようにしている。
しかしながら、フィルタ係数を小刻みに設定すると係数テーブルの肥大化を招き、一方、フィルタ係数を補間形成するには別途に係数補間器を備えることから、回路規模増大や処理速度低下を招く問題がある。
また、出力の音質向上を図るためには、フィルタ演算する演算ビット数を上げればよいが、演算ビット数を高めると、更なる回路規模増大と処理速度低下を招いてしまう、という問題もある。
【0006】
そこで本発明の第1の目的は、係数テーブルを肥大化させず、しかも回路規模増大や処理速度低下を招くことなく周波数特性を連続的に変化させることができるフィルタ装置およびフィルタ処理プログラムを提供することにある。
また、本発明の第2の目的は、回路規模増大と処理速度低下を招致することなく音質向上を図ることができるフィルタ装置およびフィルタ処理プログラムを提供することにある。
【課題を解決するための手段】
【0007】
請求項1に記載の発明では、入力波形を複数の周波数帯域に分割し、分割された各周波数帯域毎のエンベロープレベルを検出する検出手段と、この検出手段により検出されたエンベロープレベルが所定値を超えた周波数帯域について第1の演算ビット数のフィルタ演算を指示し、所定値以下の周波数帯域について第2の演算ビット数のフィルタ演算を指示する指示手段と、前記複数の周波数帯域に対応して設けられ、前記指示手段から指示される第1および第2の演算ビット数のいずれかのフィルタ演算を、対応する周波数帯域の入力波形に施すフィルタ手段とを具備することを特徴とする。
【0008】
請求項2に記載の発明では、入力波形を複数の周波数帯域に分割する帯域分割手段と、前記複数の周波数帯域毎に、前記入力波形の波形種および音高に対応付けた演算ビット数を予め記憶する記憶手段と、前記入力波形の波形種および音高を表す楽音パラメータに応じて、前記記憶手段から対応する演算ビット数を読み出して各周波数帯域に割当てる割当て手段と、前記複数の周波数帯域に対応して設けられ、前記割当て手段により割当てられた演算ビット数のフィルタ演算を、対応する周波数帯域の入力波形に施すフィルタ手段とを具備することを特徴とする。
【0009】
請求項3に記載の発明では、入力波形を複数の周波数帯域に分割し、分割された各周波数帯域毎のエンベロープレベルを検出する検出ステップと、この検出ステップにて検出されたエンベロープレベルが所定値を超えた周波数帯域について第1の演算ビット数のフィルタ演算を指示し、所定値以下の周波数帯域について第2の演算ビット数のフィルタ演算を指示する指示ステップと、前記複数の周波数帯域に対応して実行され、前記指示ステップで指示される第1および第2の演算ビット数のいずれかのフィルタ演算を、対応する周波数帯域の入力波形に施すフィルタリングステップとをコンピュータで実行させることを特徴とする。
【0010】
請求項4に記載の発明では、入力波形を複数の周波数帯域に分割する帯域分割ステップと、前記複数の周波数帯域毎に、前記入力波形の波形種および音高に対応付けた演算ビット数を予め記憶しておき、前記入力波形の波形種および音高を表す楽音パラメータに応じて、対応する演算ビット数を読み出して各周波数帯域に割当てる割当てステップと、前記複数の周波数帯域に対応して実行され、前記割当てステップにて割当てられた演算ビット数のフィルタ演算を、対応する周波数帯域の入力波形に施すフィルタリングステップとをコンピュータで実行させることを特徴とする。
【0011】
本発明では、入力波形を複数の周波数帯域に分割して各周波数帯域毎のエンベロープレベルを検出し、検出されたエンベロープレベルが所定値を超えた周波数帯域に第1の演算ビット数のフィルタ演算を指示し、所定値以下の周波数帯域に第2の演算ビット数のフィルタ演算を指示すると、各周波数帯域に対応して設けられたフィルタ手段が指示された演算ビット数のフィルタ演算を入力波形に施すので、波形レベルが大きく聴覚的に耳につきやすい周波数帯域では精度の高いフィルタリングを、波形レベルが小さく聴覚的に目立たない周波数帯域では精度の低いフィルタリングを行わせるようにし、これにより回路規模増大と処理速度低下を招致することなく聴感上の音質向上を図ることが可能になる。
【発明の効果】
【0012】
請求項1,3に記載の発明によれば、入力波形を複数の周波数帯域に分割して各周波数帯域毎のエンベロープレベルを検出し、検出されたエンベロープレベルが所定値を超えた周波数帯域に第1の演算ビット数のフィルタ演算を指示し、所定値以下の周波数帯域に第2の演算ビット数のフィルタ演算を指示すると、各周波数帯域に対応して設けられたフィルタ手段が指示された演算ビット数のフィルタ演算を入力波形に施すので、波形レベルが大きく聴覚的に耳につきやすい周波数帯域では精度の高いフィルタリングを、波形レベルが小さく聴覚的に目立たない周波数帯域では精度の低いフィルタリングを行わせるので、回路規模増大や処理速度低下を招致することなく聴感上の音質向上を図ることができる。
請求項2,4に記載の発明によれば、複数の周波数帯域毎に、入力波形の波形種および音高に対応付けた演算ビット数を予め記憶しておき、入力波形の波形種および音高を表す楽音パラメータに応じて、対応する演算ビット数を読み出して各周波数帯域のフィルタ手段に割当てると、各フィルタ手段は割当てられた演算ビット数のフィルタ演算を、対応する周波数帯域の入力波形に施すので、波形種または音高の変化に対応した最適な演算ビット数のフィルタリングを即座に指示出来、しかもエンベロープ検出する構成を省くことができるから、回路規模増大や処理速度低下を招致することなく聴感上の音質向上を図ることができる。
【図面の簡単な説明】
【0013】
【図1】第1実施例によるフィルタ装置を備えた電子楽器の全体構成を示すブロック図である。
【図2】第1実施例によるフィルタ装置を備えた音源6の部分構成を示すブロック図である。
【図3】フィルタ部12の一構成例を示すブロック図である。
【図4】係数テーブル13に記憶されるフィルタ係数の一例を示す図である。
【図5】振幅補間器14の構成を示すブロック図である。
【図6】補間係数発生器14aが発生する係数αの経時変化(同図(イ))および係数βの経時変化(同図(ロ))の様子を示す図である。
【図7】第2実施例によるフィルタ装置の構成を示すブロック図である。
【図8】積和演算処理ロジックを示すブロック図である。
【図9】制御部10が実行する語長割当処理の動作を示すフローチャートである。
【図10】ローパスフィルタ22が実行するフィルタ演算タイマインタラプト処理の動作を示すフローチャートである。
【図11】変形例における語長割当テーブルTBLの構成を示す図である。
【図12】変形例における制御部10が実行する語長割当処理の動作を示すフローチャートである。
【発明を実施するための形態】
【0014】
本発明によるフィルタ装置およびフィルタ処理プログラムは、電子楽器や効果付加装置などに適用される。以下では、電子楽器に搭載されるフィルタ装置(もしくはフィルタ処理プログラム)を実施例とし、これについて図面を参照して説明する。
【0015】
A.第1実施例
(1)全体構成
図1は第1実施例によるフィルタ装置を備えた電子楽器の全体構成を示すブロック図である。この図において、1は押離鍵操作に応じたキーオン/キーオフイベントおよびノート番号、ベロシティ等からなる演奏情報を発生する鍵盤である。2は楽器パネルに配設される各種スイッチから構成されるスイッチ部であり、操作されたスイッチに対応したスイッチイベントを発生する。3は各種制御プログラムを記憶するROMである。4はCPU5のワークエリアとして用いられ、各種レジスタ・フラグデータを一時記憶するRAMである。
【0016】
CPU5はROM3に格納される各種制御プログラムを実行し、例えば鍵盤1が発生する演奏情報に対応した楽音パラメータを発生して音源6に送出したり、スイッチ部2が発生するスイッチイベントに応じて動作モードを変更させる等、楽器各部を制御する。なお、CPU5が発生する楽音パラメータとは、発音又は消音を指示するノーオン/オフイベントの他、例えば音色切換えや効果付与など発生波形の周波数特性を変化させて波形修飾する為のパラメータを含む。6は上記CPU5から供給される楽音パラメータに応じた波形を発生する音源である。音源6は本発明によるフィルタ装置を備えており、その具体的な構成については追って述べる。7は音源6の出力をアナログ形式の波形信号に変換するD/A変換器である。8はD/A変換器7から供給される波形信号を増幅してスピーカ9から発音させるサウンドシステムである。
【0017】
(2)音源6の構成
次に、図2〜図5を参照して音源6の構成を説明する。図2は、本発明によるフィルタ装置を含む音源6の部分構成を示すブロック図である。図2において、10はCPU5から供給される楽音パラメータに応じて、音色番号TN、位相データPD、カットオフ周波数データCFを発生する制御部である。また、制御部10は、楽音パラメータに対応して発生するカットオフ周波数データCFを切り替えるタイミングで補間開始トリガTRを発生する。11は周知の波形メモリ読み出し方式で構成される波形発生器である。波形発生器11は、制御部10から供給される音色番号TNで指定される音色の波形データを、位相データPDに応じて読み出して出力する。
【0018】
12は波形発生器11から出力される波形データをフィルタリングして次段の振幅補間器14に供給するフィルタ部である。フィルタ部12は、例えば図3に図示するように、入力を1サンプル遅延して出力する遅延素子12a〜12dと、後述のフィルタ係数a0〜a2およびb1〜b2がそれぞれ供給される係数乗算器12e〜12iと、これら係数乗算器12e〜12iの各出力を加算する加算器12jとを備える周知の2次IIR型デジタルフィルタから構成される。こうした構成のフィルタ部12は、後述する係数テーブル13から出力されるフィルタ係数a0〜a2およびb1〜b2に従った周波数特性のフィルタ演算を行う。
具体的には、入力x[n]、遅延素子12aの出力x[n−1]、遅延素子12bの出力x[n−2]、遅延素子12cの出力y[n−1]および遅延素子12dの出力y[n−2]とした場合、次式(1)で表現されるフィルタ演算にて出力y[n]を発生する。
y[n]=a0・x[n]+a1・x[n−1]+a2・x[n−2]−b1・y[n−1]−b2・y[n−2]…(1)
【0019】
係数テーブル13は、フィルタ部12をローパスフィルタとして動作させる場合、図4に図示するように、各種カットオフ周波数データCFに対応するフィルタ係数a0〜a2およびb1〜b2をROMに記憶させておき、制御部10から供給されるカットオフ周波数データCFに対応するフィルタ係数a0〜a2およびb1〜b2を読み出してフィルタ部12の係数乗算器12e〜12iに供給する。
【0020】
振幅補間器14は、図5に図示するように、補間係数発生器14a、リングバッファ14b、乗算器14c〜14dおよび加算器14eから構成される。補間係数発生器14aは、制御部10から補間開始トリガTRが入力された時点、すなわちフィルタ係数切り替え時点から波形N周期分の時間に一定レートで経時変化する係数α、βを発生すると共に、係数αが「0」(係数βが「1」)となった時点でリングバッファ14bにバッファクリアおよび書き込み開始を指示する信号writeを発生する。また、振幅補間器14は、リングバッファ14bが波形N周期分(Nは整数)の波形データを書き込み終えた時点で係数αを「1」、係数βを「0」の初期設定に戻す。
【0021】
リングバッファ14bは、入力される波形データを波形N周期分(Nは整数)分蓄積しながら、蓄積した波形データを順次読み出して出力する。換言すると、リングバッファ14bは入力される波形データを波形N周期分遅延して出力するものであり、補間係数発生器14aから信号writeが供給された場合、蓄積している波形データを一旦クリアして新たに入力される波形データの書き込みを開始する。
乗算器14cは、リングバッファ14bから出力される波形データに、補間係数発生器14aから供給される係数αを乗算して出力する。乗算器14dは、前段のフィルタ部12が出力する波形データに、補間係数発生器14aから供給される係数βを乗算して出力する。加算器14eは、乗算器14c,14dの各乗算結果を加算して出力する。
【0022】
(3)振幅補間器14の動作
次に、本発明の要旨にかかわる振幅補間器14の動作について図6を参照して説明する。図6は補間係数発生器14aが発生する係数αの経時変化(同図(イ))および係数βの経時変化(同図(ロ))の様子を図示している。この図において、(A)は制御部10から補間開始トリガTRが供給される以前の定常状態を表す。定常状態(A)では、補間係数発生器14aは係数αを「1」、係数βを「0」とする初期設定下にある為、振幅補間器14はリングバッファ14bから読み出される波形データだけを出力する。
【0023】
そして、制御部10から補間係数発生器14aに補間開始トリガTRが入力されるフィルタ係数切り替え時点t1になったとする。この時、補間係数発生器14aは係数αを「1」、係数βを「0」に設定しているので、振幅補間器14はリングバッファ14bから読み出される波形データ(フィルタ係数切り替え前に蓄積された波形データ)だけを出力する。したがって、フィルタ係数の切り替えに際してフィルタ部12の出力に不連続が生じたとしても、そのフィルタ部12の出力は乗算器14dでミュートされる結果、ノイズ発生を抑止できる。
【0024】
次に、フィルタ係数切り替え時点t1以後の遷移状態(B)になると、振幅補間器14は、波形N周期分の時間内で「1」から「0」に一定レートで経時変化する係数αを乗算したフィルタ係数切り替え前の波形データと、波形N周期分の時間内で「0」から「1」に一定レートで経時変化する係数β(=1−α)を乗算したフィルタ係数切り替え後の波形データとを加算する線形補間を行う。これにより、フィルタ係数切り替え前の波形データからフィルタ係数切り替え後の波形データにクロスフェードさせる形で連続的に振幅レベルを制御する為、ノイズ発生を抑止し得る。
【0025】
そして、係数αが「0」となってフィルタ係数切り替え前の波形データをミュートする一方、係数βが「1」に達してフィルタ係数切り替え後の波形データだけを出力する時点t2になると、振幅補間器14では補間係数発生器14aより供給される信号writeに従い、リングバッファ14bは蓄積していた波形データを一旦クリアした後、新たに入力される波形データの書き込みを開始する。続いて、リングバッファ14bに波形N周期分(Nは整数)の波形データを書き込み終える時点t3に達すると、補間係数発生器14aは係数αを「1」、係数βを「0」の初期設定に戻す。これにより、振幅補間器14はリングバッファ14bから読み出される波形データだけを出力する定常状態(A)に復帰する。
【0026】
このように、第1実施例では、フィルタ係数が切り替えられる時点まではフィルタ部12から出力されるフィルタ係数切り替え前の波形データをリングバッファ14bに蓄積しつつ、当該リングバッファ14bから波形N周期(Nは整数)分遅延させた波形データを読み出して出力する。そして、フィルタ係数切り替え後はリングバッファ14bから読み出すフィルタ係数切り替え前の波形データを、フィルタ係数切り替え後のフィルタ部12から出力される波形データにクロスフェードさせるよう振幅補間して出力する。
【0027】
そして、クロスフェードし終えた時点からリングバッファ14bの蓄積内容をフィルタ係数切り替え前の波形データからフィルタ係数切り替え後の波形データに更新させる間はフィルタ部12から出力されるフィルタ係数切り替え後の波形データを出力し、更新完了後はフィルタ部12から出力されるフィルタ係数切り替え後の波形データをリングバッファ14bに蓄積しつつ、当該リングバッファ14bから波形N周期(Nは整数)分遅延させた波形データを読み出して出力する。これにより、フィルタ出力の不連続を回避するので、係数テーブルの肥大化あるいは回路規模増大や処理速度低下を招くことなく周波数特性を連続的に変化させることが可能になる。
【0028】
なお、上述した第1実施例では、説明の簡略化を図るため、振幅補間器14が線形補間する一例を開示したが、本発明の要旨はこれに限定されず、非線形補間する態様も含む。
例えば、フィルタ係数切り替えの前後でフィルタ部12が出力する波形データのレベル差に応じて、最適な補間演算形態を選択し、選択した補間演算形態でフィルタ係数切り替え前の波形データからフィルタ係数切り替え後の波形データに非線形補間することも可能である。このようにすれば、フィルタ係数切り替え前後の波形データをより自然な形で滑らかに繋げる為、音質向上に寄与することができる。
【0029】
また、第1実施例では機能構成を明確にするためにハードウェアイメージとして表現したが、本発明の要旨はそれに限定されず、開示した各機能要素をソフトウェア処理で具現することも勿論可能である。
【0030】
B.第2実施例
次に、図7〜図10を参照して第2実施例について説明する。
(1)構成
図7は第2実施例によるフィルタ装置の構成を示すブロック図であり、上述した第1実施例と共通する要素には同一の番号を付している。図7において、フィルタ部12は、波形発生器11(不図示)から供給される入力波形を第1〜第3の周波数帯域に分別するフィルタユニット12−1〜12−3から構成される。各フィルタユニット12−1〜12−3は、入力波形をそれぞれ第1〜第3の周波数帯域に分別するバンドパスフィルタ20と、バンドパスフィルタ20の出力エンベロープを検出するエンベロープ検出器21と、後述する制御部10から供給される信号WLにて指定される演算ビット数でフィルタ演算を行うローパスフィルタ22を備える。
【0031】
制御部10は、第1実施例と同様、CPU5から供給される楽音パラメータに応じて、音色番号TNや位相データPDを発生して図示されていない波形発生器11に供給する一方、上記エンベロープ検出器21の検出結果に応じてフィルタ演算時の演算ビット数を指定する信号WLを発生する。信号WLは「1」の場合に16ビットのフィルタ演算を、「0」の場合に8ビットのフィルタ演算を指示する。
【0032】
ローパスフィルタ22は、前述した第1実施例と同様、図3に図示した2次IIR型デジタルフィルタで構成され、前述した(1)式、すなわち入力x[n]、遅延素子12aの出力x[n−1]、遅延素子12bの出力x[n−2]、遅延素子12cの出力y[n−1]および遅延素子12dの出力y[n−2]とした場合、y[n]=a0・x[n]+a1・x[n−1]+a2・x[n−2]−b1・y[n−1]−b2・y[n−2]で表される積和演算(フィルタ演算)を、演算ビット数16ビットもしくは8ビットで行う。なお、ローパスフィルタ22には、対応する周波数帯域に適応させたフィルタ係数a0〜a2およびb1〜b2が予め設定される。
【0033】
ところで、積和演算e=a×c+bを16ビットもしくは8ビットで行わせる場合、a,b,cの各語長を16ビット、aの上位/下位8ビットをそれぞれah,al、cの上位/下位8ビットをそれぞれch,clとすると、16ビットの積和演算はe=ah×ch×10000h+ah×cl×100h+al×ch×100h+al×cl+bとなり、8ビット演算の組合せで表現できる。なお、ここで10000hは16ビット上位シフト、100hは8ビット上位シフトを表す。一方、8ビットの積和演算は、上記16ビットの積和演算における下位8ビットを省略した形となり、e=ah×ch×10000h+bで表される。
【0034】
したがって、積和演算e=a×c+bを16ビットもしくは8ビットで行うには、図8に図示する処理ロジックを実行することになる。図8において、40はaの上位8ビットah/下位8ビットalのいずれかを選択するセレクタ、41はcの上位8ビットch/下位8ビットclのいずれかを選択するセレクタである。42はセレクタ40の出力とセレクタ41の出力とを乗算する乗算器である。43は乗算器42の出力を16ビット上位シフトあるいは8ビット上位シフトするシフタである。44は乗算結果を累算する加算器である。45は前回の乗算結果を保持するラッチ、46は加算器44が出力する累算値を保持するラッチ、47はラッチ46が保持する値にbを加算する加算器である。
【0035】
上記処理ロジックにて16ビットの積和演算を行う場合には、セレクタ40、41およびシフタ43を適宜切り替えながらah×ch×10000h、ah×cl×100h、al×ch×100hおよびal×clの乗算を行い、その結果を累算した後にbを加える。一方、8ビットの積和演算は、ah×chの乗算結果を16ビット上位シフトした後にbを加える。
さて、こうした処理ロジックに基づき、ローパスフィルタ22は、y[n]=a0・x[n]+a1・x[n−1]+a2・x[n−2]−b1・y[n−1]−b2・y[n−2]なるフィルタ演算を行う。つまり、信号WLにて指定される16ビット/8ビットの処理ロジックに従い、a0・x[n]、a1・x[n−1]、a2・x[n−2]、−b1・y[n−1]および−b2・y[n−2]の各項について積和演算を行う。
【0036】
(2)動作
次に、上記構成による第2実施例において制御部10が実行する語長割当処理およびローパスフィルタ22が実行するフィルタ演算タイマインタラプト処理の各動作を説明する。
【0037】
(a)語長割当処理の動作
制御部10では、CPU5から供給される楽音パラメータが更新される毎に、図9に示す語長割当処理を実行する。本処理が実行されると、制御部10は図9のステップSA1に処理を進め、ポインタiに初期値「1」をストアする。ポインタiは、フィルタユニット12−iが備えるエンベロープ検出器21の検出結果ENV[i]を指定する。次いで、ステップSA2では、ポインタiに対応する検出結果ENV[i]が予め定められる基準値以下であるか否かを判断する。検出結果ENV[i]が基準値以下であると、判断結果は「YES」になり、ステップSA3に進み、レジスタWL[i]に「0」をセットし、8ビットのフィルタ演算を行うようローパスフィルタ22に指示する。
【0038】
一方、検出結果ENV[i]が基準値を超えていれば、判断結果が「NO」になり、ステップSA4に進み、レジスタWL[i]に「1」をセットし、16ビットのフィルタ演算を行うようローパスフィルタ22に指示する。そして、ステップSA5では、ポインタiをインクリメントして歩進させ、続くステップSA6では、歩進されたポインタiが「3」を超えたか否か、つまり、フィルタユニット12−1〜12−3の各ローパスフィルタ22にフィルタ演算の演算ビット数を指示し終えたかどうかを判断する。指示し終えていなければ、判断結果は「NO」になり、上述のステップSA2以降を繰り返す。そして、演算ビット数を指示し終えると、判断結果が「YES」になり、本処理を完了させる。
【0039】
このように、制御部10では、CPU5から供給される楽音パラメータが更新される毎に、各周波数帯域のエンベロープレベルが予め定められる基準値を超えるかどうかを判断し、エンベロープレベルが基準値以下であると、その周波数帯域でローパスフィルタリングするローパスフィルタ22に、8ビット演算を指示し、一方、エンベロープレベルが基準値を超えれば、その周波数帯域でローパスフィルタリングするローパスフィルタ22に、16ビット演算を指示するようになっている。
【0040】
(b)フィルタ演算タイマインタラプト処理
ローパスフィルタ22では、一定周期毎に本処理を割込み実行しており、実行タイミングになると、制御部10が指示する演算ビット数に従い、図8に図示した処理ロジックに基づくフィルタ演算、すなわちステップSB1〜SB16を実行する。
先ずステップSB1では、フィルタユニット12−1〜12−3を識別するフィルタ番号mに「1」をセットすると共に、加算値bをゼロリセットする。次いで、ステップSB2では、項番号sに「1」をセットする。項番号sとは、前述した(1)式で表されるフィルタ演算式の項を指定する。具体的には、項番号s=1はa0・x[n]を、項番号s=2はa1・x[n−1]を、項番号s=3はa2・x[n−2]を、項番号s=4は−b1・y[n−1]を、項番号s=5は−b2・y[n−2]を指定する。
【0041】
ステップSB3では、項番号sの信号値をレジスタaに、項番号sのフィルタ係数をレジスタcにそれぞれストアし、続くステップSB4では、積和演算項kに「1」をセットすると共に、レジスタDL1をゼロリセットする。積和演算項kは、図8の処理ロジック中のah×ch×10000h(k=1)、ah×cl×100h(k=2)、al×ch×100h(k=3)およびal×cl(k=4)を指定する。レジスタDL1は、図8に図示する処理ロジック中のラッチ45の値を保持する。
【0042】
次に、ステップSB5では、積和演算項kの値に応じた処理を実行させる。すなわち、積和演算項kが「1」の場合、つまり図8の処理ロジック中のah×ch×10000hを実行するには、ステップSB6に処理を進め、レジスタa(信号値)の上位8ビットahをレジスタDS1に、レジスタc(フィルタ係数)の上位8ビットchをレジスタDS2にそれぞれストアすると共に、ビットシフト値を保持するレジスタLSに「16」をセットする。
積和演算項kが「2」の場合、つまり図8の処理ロジック中のah×cl×100hを実行するには、ステップSB7に処理を進め、レジスタa(信号値)の上位8ビットahをレジスタDS1に、レジスタc(フィルタ係数)の下位8ビットclをレジスタDS2にそれぞれストアすると共に、ビットシフト値を保持するレジスタLSに「8」をセットする。
【0043】
積和演算項kが「3」の場合、つまり図8の処理ロジック中のal×ch×100hを実行するには、ステップSB8に処理を進め、レジスタa(信号値)の下位8ビットalをレジスタDS1に、レジスタc(フィルタ係数)の上位8ビットchをレジスタDS2にそれぞれストアすると共に、ビットシフト値を保持するレジスタLSに「8」をセットする。
積和演算項kが「4」の場合、つまり図8の処理ロジック中のal×clを実行するには、ステップSB8に処理を進め、レジスタa(信号値)の下位8ビットalをレジスタDS1に、レジスタc(フィルタ係数)の下位8ビットclをレジスタDS2にそれぞれストアすると共に、ビットシフト値を保持するレジスタLSをゼロリセットする。
【0044】
こうして、積和演算項kの値に対応したデータをレジスタDS1、DS2、LSにセットし終えると、ステップSB10に進む。ステップSB10では、レジスタDS1の値とレジスタDS2の値とを乗算した結果を、レジスタLSの値分上位ビットシフトさせ、その値をレジスタDL1,DL2に加算する。そして、ステップSB11に進み、積和演算項kをインクリメントして歩進させる。
次に、ステップSB12では、フィルタ番号mに対応するレジスタWL[m]の値が「1」であって、積和演算項kが「5」より小さいかどうかを判断する。つまり、制御部10から16ビット演算指示を受け、しかもその積和演算の途中であるかどうかを判断する。
【0045】
16ビット演算指示に従った積和演算の途中であれば、判断結果は「YES」になり、ステップSB5に処理を戻す。以後、積和演算項k=4の積和演算を終えるまでステップSB5〜SB12を繰り返す。そして、全ての積和演算を終えて積和演算項kが「5」になると、ステップSB12の判断結果は「NO」になり、ステップSB13に進む。一方、8ビット演算指示を受けた場合には、上記ステップSB12の判断結果は「NO」になり、ステップSB13に進む。
ステップSB13では、レジスタDL2に加算値bを加算した結果をレジスタeにセットした後、そのレジスタeの値を加算値bにセットし直す。また、ステップSB13では、項番号sを歩進させる。
【0046】
続いて、ステップSB14では、歩進された項番号sが「5」を超えたか、つまりフィルタ演算し終えたかどうかを判断する。フィルタ演算し終えていなければ、判断結果は「NO」になり、上述したステップSB3に処理を戻す。以後、フィルタ演算し終えるまでステップSB3〜SB13を繰り返す。そして、a0・x[n]から−b2・y[n−2]までの全ての項のフィルタ演算を行うと、ステップSB14の判断結果が「YES」となり、ステップSB15に進む。ステップSB15ではフィルタ番号mを歩進させ、続くステップSB16では歩進されたフィルタ番号mが「3」を超えたか否か、すなわち全てのフィルタユニット12−1〜12−3においてフィルタ演算を行ったかどうかを判断する。その途中であると、判断結果は「NO」になり、ステップSB2に処理を戻す。一方、全てのフィルタユニット12−1〜12−3においてフィルタ演算を終えると、判断結果が「YES」になり、本処理を完了させる。
【0047】
以上のように、第2実施例によるフィルタ装置は、波形発生器11(不図示)から供給される入力波形を第1〜第3の周波数帯域に分別し、それら各周波数帯域毎に入力波形のエンベロープレベルを検出し、検出したエンベロープレベルが予め設定される基準値を超えた場合には16ビットのフィルタ演算を、基準値以下なら8ビットのフィルタ演算を行う。
つまり換言すると、波形レベルが大きく聴覚的に耳につきやすい周波数帯域では精度の高いフィルタリングを、波形レベルが小さく聴覚的に目立たない周波数帯域では精度の低いフィルタリングを行わせるようにし、これにより回路規模増大と処理速度低下を招致することなく聴感上の音質向上を図るようになっている。
【0048】
C.変形例
上述した第2実施例では、入力波形のエンベロープレベルに応じてフィルタ演算の演算ビット数を指示するようにしたが、これに替えて、例えば図11に示すように、波形種nおよび音高pに応じて、フィルタユニット12−1〜12−3にそれぞれ与える演算ビット数WL[n,p,1]〜[n,p,3]を読み出す語長割当テーブルTBLを制御部10に設けておき、CPU5から供給される楽音パラメータに従い、制御部10が語長割当テーブルTBLから対応する演算ビット数WL[n,p,1]〜[n,p,3]を読み出してフィルタユニット12−1〜12−3に供給する態様としてもよい。
【0049】
具体的には、制御部10が図12に図示する語長割当処理を一定周期毎に割込み実行する。実行タイミングになると、ステップSC1に進み、CPU5から供給される楽音パラメータが波形または音高の変化を指示するものであるか否かを判断する。波形または音高の変化を指示するものでなければ、判断結果は「NO」となり、何も行わずに本処理を完了させる。
一方、波形または音高の変化を指示するものであると、判断結果が「YES」になり、ステップSC2に進み、変更された波形種nまたは音高pに対応する演算ビット数WL[n,p,1]〜[n,p,3]を語長割当テーブルTBLから読み出し、それぞれをフィルタユニット12−1〜12−3に送出して本処理を終える。
このような変形例によれば、波形または音高の変化に対応した最適な演算ビット数のフィルタリングを即座に指示出来、しかもエンベロープ検出する構成を省くことができるから、回路規模増大や処理速度低下を招致することなく聴感上の音質向上を図ることが可能になる。
【符号の説明】
【0050】
1 鍵盤
2 スイッチ部
3 ROM
4 RAM
5 CPU
6 音源
7 D/A変換器
8 サウンドシステム
9 スピーカ
10 制御部
11 波形発生器
12 フィルタ部
13 係数テーブル
14 振幅補間器
14a補間係数発生器
14bリングバッファ
14c,14d 乗算器
14e加算器
【特許請求の範囲】
【請求項1】
入力波形を複数の周波数帯域に分割し、分割された各周波数帯域毎のエンベロープレベルを検出する検出手段と、
この検出手段により検出されたエンベロープレベルが所定値を超えた周波数帯域について第1の演算ビット数のフィルタ演算を指示し、所定値以下の周波数帯域について第2の演算ビット数のフィルタ演算を指示する指示手段と、
前記複数の周波数帯域に対応して設けられ、前記指示手段から指示される第1および第2の演算ビット数のいずれかのフィルタ演算を、対応する周波数帯域の入力波形に施すフィルタ手段と
を具備することを特徴とするフィルタ装置。
【請求項2】
入力波形を複数の周波数帯域に分割する帯域分割手段と、
前記複数の周波数帯域毎に、前記入力波形の波形種および音高に対応付けた演算ビット数を予め記憶する記憶手段と、
前記入力波形の波形種および音高を表す楽音パラメータに応じて、前記記憶手段から対応する演算ビット数を読み出して各周波数帯域に割当てる割当て手段と、
前記複数の周波数帯域に対応して設けられ、前記割当て手段により割当てられた演算ビット数のフィルタ演算を、対応する周波数帯域の入力波形に施すフィルタ手段と
を具備することを特徴とするフィルタ装置。
【請求項3】
入力波形を複数の周波数帯域に分割し、分割された各周波数帯域毎のエンベロープレベルを検出する検出ステップと、
この検出ステップにて検出されたエンベロープレベルが所定値を超えた周波数帯域について第1の演算ビット数のフィルタ演算を指示し、所定値以下の周波数帯域について第2の演算ビット数のフィルタ演算を指示する指示ステップと、
前記複数の周波数帯域に対応して実行され、前記指示ステップで指示される第1および第2の演算ビット数のいずれかのフィルタ演算を、対応する周波数帯域の入力波形に施すフィルタリングステップと
をコンピュータで実行させることを特徴とするフィルタ処理プログラム。
【請求項4】
入力波形を複数の周波数帯域に分割する帯域分割ステップと、
前記複数の周波数帯域毎に、前記入力波形の波形種および音高に対応付けた演算ビット数を予め記憶しておき、前記入力波形の波形種および音高を表す楽音パラメータに応じて、対応する演算ビット数を読み出して各周波数帯域に割当てる割当てステップと、
前記複数の周波数帯域に対応して実行され、前記割当てステップにて割当てられた演算ビット数のフィルタ演算を、対応する周波数帯域の入力波形に施すフィルタリングステップと
をコンピュータで実行させることを特徴とするフィルタ処理プログラム。
【請求項1】
入力波形を複数の周波数帯域に分割し、分割された各周波数帯域毎のエンベロープレベルを検出する検出手段と、
この検出手段により検出されたエンベロープレベルが所定値を超えた周波数帯域について第1の演算ビット数のフィルタ演算を指示し、所定値以下の周波数帯域について第2の演算ビット数のフィルタ演算を指示する指示手段と、
前記複数の周波数帯域に対応して設けられ、前記指示手段から指示される第1および第2の演算ビット数のいずれかのフィルタ演算を、対応する周波数帯域の入力波形に施すフィルタ手段と
を具備することを特徴とするフィルタ装置。
【請求項2】
入力波形を複数の周波数帯域に分割する帯域分割手段と、
前記複数の周波数帯域毎に、前記入力波形の波形種および音高に対応付けた演算ビット数を予め記憶する記憶手段と、
前記入力波形の波形種および音高を表す楽音パラメータに応じて、前記記憶手段から対応する演算ビット数を読み出して各周波数帯域に割当てる割当て手段と、
前記複数の周波数帯域に対応して設けられ、前記割当て手段により割当てられた演算ビット数のフィルタ演算を、対応する周波数帯域の入力波形に施すフィルタ手段と
を具備することを特徴とするフィルタ装置。
【請求項3】
入力波形を複数の周波数帯域に分割し、分割された各周波数帯域毎のエンベロープレベルを検出する検出ステップと、
この検出ステップにて検出されたエンベロープレベルが所定値を超えた周波数帯域について第1の演算ビット数のフィルタ演算を指示し、所定値以下の周波数帯域について第2の演算ビット数のフィルタ演算を指示する指示ステップと、
前記複数の周波数帯域に対応して実行され、前記指示ステップで指示される第1および第2の演算ビット数のいずれかのフィルタ演算を、対応する周波数帯域の入力波形に施すフィルタリングステップと
をコンピュータで実行させることを特徴とするフィルタ処理プログラム。
【請求項4】
入力波形を複数の周波数帯域に分割する帯域分割ステップと、
前記複数の周波数帯域毎に、前記入力波形の波形種および音高に対応付けた演算ビット数を予め記憶しておき、前記入力波形の波形種および音高を表す楽音パラメータに応じて、対応する演算ビット数を読み出して各周波数帯域に割当てる割当てステップと、
前記複数の周波数帯域に対応して実行され、前記割当てステップにて割当てられた演算ビット数のフィルタ演算を、対応する周波数帯域の入力波形に施すフィルタリングステップと
をコンピュータで実行させることを特徴とするフィルタ処理プログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【公開番号】特開2009−183007(P2009−183007A)
【公開日】平成21年8月13日(2009.8.13)
【国際特許分類】
【出願番号】特願2009−122641(P2009−122641)
【出願日】平成21年5月21日(2009.5.21)
【分割の表示】特願2003−177557(P2003−177557)の分割
【原出願日】平成15年6月23日(2003.6.23)
【出願人】(000001443)カシオ計算機株式会社 (8,748)
【公開日】平成21年8月13日(2009.8.13)
【国際特許分類】
【出願日】平成21年5月21日(2009.5.21)
【分割の表示】特願2003−177557(P2003−177557)の分割
【原出願日】平成15年6月23日(2003.6.23)
【出願人】(000001443)カシオ計算機株式会社 (8,748)
[ Back to top ]