説明

共鳴音付加装置および共鳴音付加プログラム

【課題】 少ない演算量で、測定されたインパルス応答データと同質の再現性を有する共鳴音を生成でき、かつ、インパルス応答データのデータ量を減らす。
【解決手段】 共鳴音付加装置は、時間軸上の一連の楽音信号データをディレイメモリ値として記憶した入力データバッファ22と、インパルス応答特性を表す時間軸上の値であるインパルス応答データ14を記憶した記憶部16と、インパルス応答データ14の値と、ディレイメモリ値とを畳み込み演算して共鳴音データを生成する共鳴音生成部20と、記憶部16に記憶された元のインパルスデータ12を取り出して、前後の値より所定なだけ変動が大きい極大値および極小値を見出し、極大値および極小値を、インパルス応答データの値として記憶部16に記憶し、当該極大値および極小値以外は、インパルス応答データの値として「0」を示す値を記憶部16に記憶するインパルス応答生成部18を備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、楽音に共鳴音を付加する共鳴音付加装置および共鳴音付加プログラムに関する。
【背景技術】
【0002】
電子楽器やオーディオ機器からの楽音信号に共鳴音を付加する種々の装置が知られている。ここに、共鳴音には、ホールなど楽音が発生される場所における残響音や、楽器自体の共鳴音などが含まれる。
【0003】
共鳴音を発生するためには、共鳴音付加装置は、ディジタルの楽音信号を受け入れて、楽音信号データにディジタルフィルタによるフィルタ処理を施すのが一般的である。フィルタ処理においては、FIR(有限インパルス応答:Finite Impulse Response)フィルタ或いはIIR(無限インパルス応答:Infinite Impulse
Response)フィルタが利用される。
【0004】
FIRフィルタを利用する場合には、入力された楽音信号データx(n−k)と、音楽ホールの残響特性などから得たインパルス応答h(k)を畳み込み演算することで、共鳴音yout=Σx(n−k)×h(k)のデータを得ることができる。しかしながら、FIRフィルタにおいては、インパルス応答データの数、つまり、フィルタの次数を高くすることにしたがって、より理想的なフィルタ特性に近づけることができる。その一方、フィルタの次数を上げるにしたがって、演算量も多量となるという問題点がある。
【0005】
FFT(高速フーリエ変換)を利用してインパルス応答を計算することにより、高次にわたるインパルス応答を演算できる方法が提案されている。特許文献1には、有限長のインパルス応答の特性が標本値列{h(n)}で表現される特性をもつシステムに、標本値列{x(n)}で表現される信号が入力された場合の出力{y(n)}を、FFTハードウェアを用いた畳み込み演算を用いて計算する方法において、標本値列{x(n)}を所定の条件の下で小区間に分割するとともに、標本値列{h(n)}も所定の条件で小区間に分割し、それぞれの小区間ずつ、重畳加算法もしくは重畳保留法によって分割処理するようにした方法が開示されている。
【特許文献1】特開2005−215058号公報
【特許文献2】特開平6−259087号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
また、IIRフィルタを利用することで演算量を抑えるような種々の技術も提案されている(たとえば、特許文献2)。特許文献2においては、くし形フィルタのループ回路中に、入力信号を時間軸方向に散乱させるための全帯域帯域フィルタを設け、また、くし形フィルタ内のローパスフィルタのカットオフ周波数を、ループ回路内の遅延回路の遅延時間に基づいて決定し、さらに、共鳴音・残響音の出力レベルを検出し、その出力レベルに基づいて共鳴音・残響音のレベルを制御する。また、特許文献2において、共鳴音・残響音のレベル制御は、くし形フィルタのループ回路を循環するループ信号のレベルを制御することにより行われている。
【0007】
しかしながら、FFTを利用する場合には、所定の範囲の入力ごとにインパルス応答を演算する必要があるため、基本的にリアルタイムでの処理が困難であるという問題点がある。
【0008】
また、IIRフィルタを利用する場合には、演算量は小さくすることができるが、測定されたインパルス応答の特性を再現することが難しいという問題点がある。
【0009】
本発明は、少ない演算量で、測定されたインパルス応答データと同質の再現性を有する共鳴音を生成することができ、かつ、フィルタ演算に利用するインパルス応答データのデータ量を減らすことが可能な共鳴音付加装置、および、共鳴音付加プログラムを提供することを目的とする。
【課題を解決するための手段】
【0010】
本発明の目的は、時間軸上の一連の楽音信号データをディレイメモリ値として記憶した入力データバッファと、
インパルス応答特性を表す時間軸上の値であるインパルス応答データを記憶した記憶部と、
前記インパルス応答データの値と、入力データバッファに記憶されたディレイメモリ値とを畳み込み演算して共鳴音データを生成する共鳴音生成手段と、を備えた共鳴音付加装置であって、
前記記憶部が、元のインパルス応答データを記憶し、
前記記憶部に記憶された元のインパルスデータを取り出して、前後の値より所定なだけ変動が大きい極大値および極小値を見出し、前記見出された極大値および極小値を、前記インパルス応答データの値として、前記記憶部に記憶するとともに、前記見出された極大値および極小値以外は、前記インパルス応答データの値として、「0」を示す値を前記記憶部に記憶するインパルス応答生成手段を備えたことを特徴とする共鳴音付加装置により達成される。
【0011】
好ましい実施態様においては、前記共鳴音生成手段が、前記インパルス応答データの値が「0」以外であるときのみ、前記インパルス応答データの値と、前記ディレイメモリ値とを乗算し、かつ、乗算された値を累算するように構成されている。
【0012】
別の好ましい実施態様においては、前記インパルス応答生成手段が、前記元のインパルス応答データの、前記インパルス応答特性の時間軸上の位置に対応する、当該時間軸に沿って単調減少する直線上の値となるような閾値を算出し、前後の値より、前記閾値より変動が大きい極大値および極小値を見出すように構成されている。
【0013】
さらに別の好ましい実施態様においては、前記インパルス応答生成手段が、前記元のインパルス応答データの、前記インパルス応答特性の時間軸上の位置に対応する、当該時間軸に沿って単調減少する指数曲線上の値となるような閾値を算出し、前後の値より、前記閾値より変動が大きい極大値および極小値を見出すように構成されている。
【0014】
また、本発明の目的は、時間軸上の一連の楽音信号データをディレイメモリ値として記憶した入力データバッファと、インパルス応答特性を表す時間軸上の値であるインパルス応答データを記憶した記憶部と、を備えたコンピュータにおいて、前記コンピュータに、
前記インパルス応答データの値と、入力データバッファに記憶されたディレイメモリ値とを畳み込み演算して共鳴音データを生成する共鳴音生成ステップを実行させる共鳴音付加プログラムであって、
前記記憶部が、元のインパルス応答データを記憶し、
前記コンピュータに、
前記記憶部に記憶された元のインパルスデータを取り出して、前後の値より所定なだけ変動が大きい極大値および極小値を見出し、前記見出された極大値および極小値を、前記インパルス応答データの値として、前記記憶部に記憶するとともに、前記見出された極大値および極小値以外は、前記インパルス応答データの値として、「0」を示す値を前記記憶部に記憶するインパルス応答生成ステップを実行させることを特徴とする共鳴音付加プログラムにより達成される。
【0015】
好ましい実施態様においては、前記共鳴音生成ステップにおいて、
前記インパルス応答データの値が「0」以外であるときのみ、前記インパルス応答データの値と、前記ディレイメモリ値とを乗算し、かつ、乗算された値を累算するステップを実行させる。
【0016】
別の好ましい実施態様においては、前記インパルス応答生成ステップにおいて、前記コンピュータに、
前記元のインパルス応答データの、前記インパルス応答特性の時間軸上の位置に対応する、当該時間軸に沿って単調減少する直線上の値となるような閾値を算出するステップと、
前後の値より、前記閾値より変動が大きい極大値および極小値を見出すステップと、を実行させる。
【0017】
さらに別の好ましい実施態様においては、前記インパルス応答生成ステップにおいて、前記コンピュータに、
前記元のインパルス応答データの、前記インパルス応答特性の時間軸上の位置に対応する、当該時間軸に沿って単調減少する指数曲線上の値となるような閾値を算出するステップと、
前後の値より、前記閾値より変動が大きい極大値および極小値を見出すステップと、を実行させる。
【発明の効果】
【0018】
本発明によれば、少ない演算量で、測定されたインパルス応答データと同質の再現性を有する共鳴音を生成することができ、かつ、フィルタ演算に利用するインパルス応答データのデータ量を減らすことが可能な共鳴音付加装置、および、共鳴音付加プログラムを提供することが可能となる。
【発明を実施するための最良の形態】
【0019】
以下、添付図面を参照して、本発明の実施の形態について説明する。図1は、本発明の実施の形態にかかる共鳴音付加装置の構成を示すブロックダイヤグラムである。
【0020】
図1に示すように、本実施の形態にかかる共鳴音付加装置は、元のインパルス応答データ12および後述する演算により算出された新たなインパルス応答データ14を記憶する記憶部16と、元のインパルス応答データ12から新たなインパルス応答データ14を生成して、新たなインパルス応答データ14を記憶部16に格納するインパルス応答生成部18と、一連の楽音信号データを格納した入力データバッファ22から楽音信号データを受け入れて、楽音信号データおよび新たなインパルス応答データを畳み込み演算することにより共鳴音データを生成する共鳴音生成部20と、一連の楽音信号データを受け入れて、これらデータを一時的に記憶する入力データバッファ22と、出力された共鳴音データを一時的に記憶する共鳴音データバッファ24と、を備えている。
【0021】
図2は、本実施の形態にかかる共鳴音付加装置のハードウェア構成を示すブロックダイヤグラムである。図2に示すように、共鳴音付加装置のハードウェアは、CPU30、ROM32、RAM34、入力装置36、表示装置38およびサウンドシステム40を含む。CPU30、ROM32、RAM34、入力装置36、表示装置38およびサウンドシステム40は、バス42で接続されている。
【0022】
図2にから理解できるように、共鳴音付加装置は、通常のパーソナルコンピュータによって実現され得る。CPU30は、システム制御、新たなインパルス応答データ14の生成、表示装置の画面上に表示すべき画像データの生成などの処理を実行する。ROM32は、プログラムや、プログラムの実行の際に使用される定数などを記憶する。RAM34は、プログラムの実行の過程で必要な変数、パラメータ、入力データ、出力データなどを一時的に記憶する。
【0023】
入力装置36は、たとえば、キーボードやマウスを有し、操作者が所望の指示を入力することができるようになっている。表示装置38の画面上には、操作者が入力した指示や処理結果が表示可能である。
【0024】
サウンドシステム40は、楽音生成回路44、共鳴音生成部20、増幅器(図示せず)、スピーカ(図示せず)などを含み、CPU30からの指示にしたがって、所定の楽音信号のデータを生成し、かつ、楽音信号データに共鳴音が付加された共鳴音データを生成し、生成された共鳴音データに基づく音響信号を出力する。
【0025】
楽音生成回路44は、ROM32から楽音波形を読み出して、指定された音高の楽音信号データを生成する。楽音信号データは、図1に示すように入力データバッファ22に一時的に記憶される。共鳴音生成部20は、FIRフィルタであり、入力データバッファ22から、楽音信号データを入力データとして読み出し、楽音信号データと、記憶部14から読み出した新たなインパルス応答データとを畳み込み演算することにより、共鳴音データを生成し、共鳴音データバッファ24に格納する。
【0026】
図1に示すインパルス応答生成部18の機能は、CPU30により実現される。なお、図2において、共鳴音生成部20を、サウンドシステム40における要素として図示しているが、共鳴音生成部20が、ディジタルフィルタ回路のようなハードウェアにより実現されることに限定されず、共鳴音生成部20の機能をCPU30により実現することも可能である。
【0027】
また、図1の記憶部16、入力データバッファ22および共鳴音データバッファ24は、たとえば、RAM34により実現される。
【0028】
本実施の形態にかかる共鳴音付加装置においては、たとえばROM32に記憶されたプログラムが、コンピュータを、インパルス応答生成部18として機能させる。また、ROM32に記憶されたプログラムが、コンピュータを、共鳴音生成部20として機能させることもできる。
【0029】
元のインパルス応答データ12は、音楽ホールの残響特性などを測定し、測定された残響特性に基づいて得られたデータである。本実施の形態において、共鳴音付加装置の記憶部16に元のインパルス応答データ12が記憶され、インパルス応答生成部18によって、元のインパルス応答データ12に基づいて新たなインパルス応答データ14が生成され、新たなインパルス応答データ14が記憶部16に記憶される。いったん新たなインパルス応答データ14が生成されると、それ以降、新たなインパルス応答データ14のみが共鳴音生成のために利用され、元のインパルス応答データ12は利用されない。したがって、元のインパルス応答データ12は、新たなインパルス応答データ14を生成するときのみ、記憶部16に記憶されていれば良い。
【0030】
したがって、本実施の形態にかかる共鳴音付加装置は、共鳴音データを生成する共鳴音生成処理の前処理として、新たなインパルス応答データを生成するインパルス応答データの生成処理を実行する。
【0031】
図3は、本実施の形態にかかるインパルス応答データの生成処理の例を示すフローチャートである。記憶部16には、フィルタの次数にしたがった、元のインパルス応答データIro[n](n=0〜nTap−1)が格納されている。本実施の形態においては、元のインパルス応答データにおいて、前後の値より所定なだけ変動が大きいような極大値および極小値を見出して、見出された極大値および極小値については、元のインパルス応答データの値を、新たなインパルス応答データの値として保持する。その一方、それ以外の場合には、新たなインパルス応答データの値として「0」を保持する。これにより、後述する共鳴音生成処理における演算量を削減することが可能となる。
【0032】
図3に示すように、インパルス応答生成部18は、演算用のパラメータを、「n=0」に初期化する(ステップ301)。パラメータ「n」は処理対象となる元のインパルス応答データIpo[n]および新たなインパルス応答データIpg[n]を特定する。なお、「n」は、インパルス応答の時間軸上の値に相当する。
【0033】
インパルス応答生成部18は、n≧nTapとなるまで(ステップ302でYes)、ステップ303以下の処理を実行する。
【0034】
インパルス応答生成部18は、第n番の新たなインパルス応答データIrg[n]に「0」をセットする(ステップ303)。パラメータ「n」が「0」であれば(ステップ304でYes)、インパルス応答生成部18は、パラメータ「n」をインクリメントして(ステップ310)、ステップ302に戻る。
【0035】
その一方、パラメータ「n」が「0」でなければ(ステップ304でNo)、インパルス応答生成部18は、記憶部16から元のインパルス応答データIro[n−1]、Iro[n]、Iro[n+1]を読み出し、dp=Iro[n]−Iro[n−1]およびdn=Iro[n]−Iro[n+1]を算出する(ステップ305、306)。「dp」は、処理対象となっている元のインパルス応答データIro[n]と、その1つ前の元のインパルス応答データIro[n−1]との差であり、「dn」は、処理対象となっている元のインパルス応答データIro[n]と、その1つ後の元のインパルス応答データIro[n+1]との差である。
【0036】
「dp」および「dn」の双方が「+(マイナス)」であれば、元のインパルス応答データIro[n]は極大であることになる。その一方、「dp」および「dn」の双方が「−(マイナス)」であれば、元のインパルス応答データIro[n]は極小であることになる。
【0037】
本実施の形態においては、元のインパルス応答データIpo[n]が、前後の値より、所定の閾値Thより大きいような極大値である場合、つまり、dp≧Thかつdn≧Thである場合(ステップ307でYes)、或いは、元のインパルス応答データIpo[n]が、前後の値より、所定の負の閾値−Thより小さいような極小値である場合、つまり、dp≦−Thかつdn≦−Thである場合(ステップ308でYes)には、インパルス応答生成部18は、元のインパルス応答データIpo[n]を、新たなインパルス応答データIpg[p]として、記憶部16に記憶する(ステップ309)。
【0038】
したがって、ステップ307或いはステップ308でYesと判断された場合には、インパルス応答生成部18は、新たなインパルス応答データIrg[n]=Iro[n]を記憶部16に格納し、それ以外の場合には、Irg[n]=0を記憶部16に格納する。
【0039】
次いで、インパルス応答生成部18は、パラメータ「n」をインクリメントして(ステップ310)、ステップ302に戻る。
【0040】
図3に示す処理によって、元のインパルス応答データIpo[n]が、前後の値より、所定の閾値Thより大きいような極大値である場合、或いは、元のインパルス応答データIpo[n]が、前後の値より、一定の閾値−Thよりも小さいような極小値である場合には、元のインパルス応答データの値と一致する新たなインパルス応答データが生成され、記憶部18に格納される。それ以外の場合には、値「0」であるような新たなインパルス応答データが生成され、記憶部18に格納される。本実施の形態において、元のインパルス応答データIro[n]および新たなインパルス応答データIrg[n]のデータ数自体は同一であるが、後述するように演算量は削減することが可能となる。
【0041】
図4は、本実施の形態にかかる新たなインパルス応答データの生成を説明するための図である。たとえば、元のインパルス応答データIro[s+1](符号401)を処理対象Iro[n]としたときに、dp=Iro[s+1]−Iro[s]≧Th、かつ、dn=Iro[s+1]−Iro[s+2]≧Thであったとする。この場合には、対応する新たなインパルス応答データIrg[s+1](符号411)には、Iro[s+1]が格納される。
【0042】
Iro[s+2]〜Iro[s+t]を、それぞれ処理対象Iro[n]としたときに、図3の処理において、dp≧Thかつdn≧Th、或いは、dp≦−Thかつdp≦−Thが成立しない場合には、対応するIrg[s+2]〜Irg[s+t]は、それぞれ「0」となる。
【0043】
また、元のインパルス応答データIro[s+t+1](符号402)を処理対象Iro[n]としたときに、dp=Iro[s+t+1]−Iro[s+t]≦−Th、かつ、dn=Iro[s+t+1]−Iro[s+t+2]≦−Thであったとする。この場合には、対応する新たなインパルス応答データIrg[s+t+1](符号412)には、Iro[s+t+1]が格納される。
【0044】
このようにして生成され、記憶部18に格納された新たなインパルス応答データIrg(以下、単に、「インパルス応答データ」と称する。)を利用して、共鳴音生成部20によって、畳み込み演算が実行されて、共鳴音データが生成される。
【0045】
図5および図6は、本実施の形態にかかる共鳴音生成部20によって実行される処理の例を示すフローチャートである。図5の処理では、楽音信号データと、インパルス応答データとが畳み込み演算される。また、図6の処理では、入力データバッファ22の値(ディレイメモリ値DM)がシフトされる。
【0046】
図5に示すように、共鳴音生成部20は、演算用のパラメータを「k=0」に初期化する(ステップ501)。パラメータ「k」は入力バッファ22中のディレイメモリ値DM[k]および記憶部16中のインパルス応答データIrg[k]を特定する。
【0047】
また、共鳴音生成部20は、累算値「acc=0」とする(ステップ502)とともに、先頭のディレイメモリ値DM[0]=xinにセットする(ステップ503)。xinは、最新の楽音信号のデータである。後述するように、本実施の形態の入力データバッファ22は、最新の楽音信号データDM[0]から、時間軸方向にnTapだけ前のサンプルである楽音信号データDM[nTap−1]までの楽音信号データのデータ列を格納することができる。すなわち、入力データバッファは、nTap段のディレイメモリとして利用される。入力データバッファ22に格納されたディレイメモリ値DM[k]については、後にさらに詳述する。
【0048】
次いで、共鳴音生成部20は、k≧nTapになるまで(ステップ504でYes)、以下の処理を実行する。共鳴音生成部20は、インパルス応答データIrg[k]が「0」であるかを判断する(ステップ505)。ステップ505でNoと判断された場合には、共鳴音生成部20は、累算値acc=acc+Irg[k]×DM[k]を算出する(ステップ506)。つまり、共鳴音生成部20は、第k番のインパルス応答データIrg[k]と第k番のディレイメモリ値DM[k]との積を累算値accに加算する。その後、共鳴音生成部20は、パラメータ「k」をインクリメントする(ステップ507)。
【0049】
その一方、Irg[k]=0である場合(ステップ505でYes)には、共鳴音生成部20は、累算値の更新は行わず、パラメータ「k」をインクリメントする(ステップ507)。すなわち、本実施の形態においては、Irg[k]=0の場合には、累算値の演算を省略することができる。これにより共鳴音データ生成の際の演算量を削減することが可能となる。
【0050】
畳み込み演算が終了すると(ステップ504でYes)、共鳴音生成部20は、入力データバッファ22に格納されたディレイメモリ値をシフトする。図6に示すように、共鳴音生成部20は、パラメータkを「nTap−1」に初期化して(ステップ601)、k=0となるまで(ステップ602でYes)、以下の処理を実行する。
【0051】
共鳴音生成部20は、入力データバッファ22中のディレイメモリ値DM[k]として、ディレイメモリ値DM[k−1]とするように、入力データバッファ22の値を更新する(ステップ603)。その後、共鳴音生成部20は、パラメータkをディクリメントする(ステップ604)。
【0052】
図7に示すように、入力データバッファ22においては、DM「0」にある時刻tにおける最新の楽音信号データx(t)が格納され、DM[1]、DM「2」、・・・、DM[nTap−1]の順で、それぞれ、過去の楽音信号x(t−1)、x(t−2)、・・・、x(t−(nTap−1))が格納されている(符号700参照)。図6のステップ603においては、符号701で示すように、DM[k]=DM[k−1]となるように、入力データバッファ22を更新する。これにより、先頭のディレイメモリ値DM[0]に新たな値が入力可能な状態となる。図5のステップ503では、このDM[0]として最新の楽音信号のデータxinが格納される。
【0053】
ステップ602でYesと判断された場合には、共鳴音生成部20は、累算値accに所定の補正値constAを乗算して、共鳴音データyoutを生成する(ステップ605)。生成された共鳴音データyoutは、共鳴音データバッファ24に格納される。共鳴音データバッファ24に格納された共鳴音データは、所定のタイミングで読み出され、DA変換された後、音響信号として増幅されスピーカなどから放音される。
【0054】
図14(a)は、元のインパルス応答データに基づくインパルス応答特性の例を示すグラフ、図14(b)、(c)は、第1の実施の形態により生成されたインパルス応答データに基づくインパルス応答特性の例を示すグラフである。図14(b)は、Th=0.00001として演算した結果であり、図14(c)は、Th=0.002として演算した結果である。グラフにおいて、横軸はインパルス応答の時間軸、縦軸はインパルス応答データの値である。
【0055】
図14(a)と比較して、図14(b)、図14(c)ではインパルス応答データの値「0」が出現しており、データ量が減少されることがわかる。
【0056】
本実施の形態によれば、インパルス応答波形の中で、共鳴音の中でも特に反射音の特性をよく再現するポイントに対応する極大点および極小点の値をインパルス応答データとして保持しておき、保持されたインパルス応答データを用いた畳み込み演算を実行する。これにより、演算量を減少させつつ、共鳴音の残響をより忠実に再現することが可能となる。
【0057】
また、本実施の形態においては、前後の値より、その変動が、閾値より大きいような極小値および極小値以外の元のインパルス応答データについては「0」として、データ量を削減している。極小値および極大値は、共鳴音の中でも、壁などを反射して伝わる反射音の特徴を現しているものと考えられる。前後の値より、その変動が所定より大きいような極大値および極小値のみをインパルス応答データとして保持し、他のものは「0」とすることで、データ量を削減しつつ、再現性の良好な共鳴音を実現することが可能となる。
【0058】
また、本実施の形態によれば、新たなインパルス応答データ中、実際に値が存在するもの(つまり値が「0」でないもの)についてのみ畳み込み演算が行われるため、共鳴音生成のための畳み込み演算の演算量を削減することができる。
【0059】
次に、本発明の第2の実施の形態について説明する。第1の実施の形態において、インパルス応答データとして保持する極大値および極小値を判別するための閾値Thは固定値であった。第2の実施の形態においては、当該閾値を、インパルス応答特性の時間軸にしたがって変化させている。
【0060】
図8は、本発明の第2の実施の形態にかかるインパルス応答データの生成処理の例を示すフローチャートである。第2の実施の形態においても、第1の実施の形態と同様に、インパルス応答生成部18が、記憶部16に記憶された元のインパルス応答データ12を読み出して、元のインパルス応答データ12において、前後の値より、所定の閾値より大きいような極大値および前後の値より所定の負の閾値より小さいような極小値を見出して、極大値および極小値については、元のインパルス応答データの値を、新たなインパルス応答データ14の値として保持する。その一方、それ以外の場合には、新たなインパルス応答データの値として「0」を保持する。
【0061】
第2の実施の形態においては、極小値および極大値を見出す際の閾値Thnewを、後述するように、インパルス応答特性の時間軸に沿って単調減少する一次直線となるように算出している。
【0062】
図8に示すように、インパルス応答生成部18は、演算用のパラメータを、「n=0」に初期化する(ステップ801)。パラメータ「n」は処理対象となる元のインパルス応答データIpo[n]および新たなインパルス応答データIpg[n]を特定する。また、パラメータ「n」はインパルス応答特性の時間軸上の値に相当する。
【0063】
インパルス応答生成部18は、n≧nTapとなるまで(ステップ802でYes)、ステップ803以下の処理を実行する
インパルス応答生成部18は、第n番の新たなインパルス応答データIrg[n]に「0」をセットする(ステップ803)。パラメータ「n」が「0」であれば(ステップ804でYes)、インパルス応答生成部18は、パラメータ「n」をインクリメントして(ステップ811)、ステップ802に戻る。
【0064】
その一方、パラメータ「n」が「0」でなければ(ステップ804でNo)、インパルス応答生成部18は、閾値Thnew=Th−Th×n/nTapであるような新たな閾値Thnewを算出する(ステップ805)。ここに、元の閾値Thは、あらかじめ定められた定数である。パラメータ「n」が「0」であれば閾値Thnew=Thとなる。また、パラメータ「n」が「nTap」であれば閾値Thnew=0となる。すなわち、閾値Thnewは、インパルス応答特性の時間軸に相当するパラメータ「n」が「0」のときにThnew=Th、パラメータ「n」が「nTap」のときにThnew=0、パラメータ「n」が、「0<n<nTap」のときには、2点((0,Th)および(nTap,0))を結ぶ直線上の一点となる。
【0065】
第2の実施の形態においては、インパルス応答特性の時間軸上の値が大きくなるのにしたがって、直線状に閾値Thnewを小さくすることで、より小さな変化のあった点のインパルス応答データを無視せずに取り込むことができるようにしている。これにより、より残響の長い共鳴音を再現することが可能となる。
【0066】
次いで、インパルス応答生成部18は、記憶部16から元のインパルス応答データIro[n−1]、Iro[n]、Iro[n+1]を読み出し、dp=Iro[n]−Iro[n−1]およびdn=Iro[n]−Iro[n+1]を算出する(ステップ806、807)。「dp」および「dp」は、第1の実施の形態と同様であり、「dp」および「dn」の双方が「+(マイナス)」であれば、元のインパルス応答データIro[n]は極大であることになる。その一方、「dp」および「dn」の双方が「−(マイナス)」であれば、元のインパルス応答データIro[n]は極小であることになる。
【0067】
元のインパルス応答データIpo[n]が、前後の値より、閾値Thnewより大きいような極大値である場合、つまり、dp≧Thnewかつdn≧Thnewである場合(ステップ808でYes)、或いは、元のインパルス応答データIpo[n]が、前後の値より、負の閾値−Thnewより小さいような極小値である場合、つまり、dp≦−Thnewかつdn≦−Thnewである場合(ステップ809でYes)には、インパルス応答生成部18は、元のインパルス応答データIpo[n]を、新たなインパルス応答データIpg[p]として、記憶部16に記憶する(ステップ810)。
【0068】
したがって、ステップ808或いはステップ809でYesと判断された場合には、インパルス応答生成部18は、新たなインパルス応答データIrg[n]=Iro[n]を記憶部16に格納し、それ以外の場合には、Irg[n]=0を記憶部16に格納する。
【0069】
次いで、インパルス応答生成部18は、パラメータ「n」をインクリメントして(ステップ811)、ステップ802に戻る。
【0070】
第2の実施の形態においても、共鳴音データの生成は、図5および図6に示す第1の実施の形態と同様である。すなわち、共鳴音生成部20が、新たなインパルス応答データ14を記憶部16から読み出して、入力データバッファ22に格納されたディレイメモリ値とインパルス応答データとを畳み込み演算することで共鳴音データを生成している。また、共鳴音生成部20は、1つの共鳴音データが生成されるごとに、入力データバッファ22のディレイメモリ値をシフトする(図6参照)。
【0071】
このようにして、第2の実施の形態においても、共鳴音生成部20は、共鳴音データyoutが生成され、共鳴音バッファ24に格納される。共鳴音データバッファ24に格納された共鳴音データは、所定のタイミングで読み出され、DA変換された後、音響信号として増幅されスピーカなどから放音される。
【0072】
図15(a)〜(c)は、それぞれ、元のインパルス応答データ、第1の実施の形態により生成された新たなインパルス応答データ、および、第2の実施の形態により生成された新たなインパルス応答データに基づくインパルス応答データに基づくインパルス応答特性の例を示すグラフである。図15(b)および図15(c)に示すグラフにおいては、ともにTh=0.002としている。
【0073】
図15(b)と図15(c)とを比較すると、第2の実施の形態(図15(c))の方が、よりインパルス応答特性の時間軸上の大きな値に対しても、「0」以外のインパルス応答データの値が存在することが理解できる。つまり、より残響の長い共鳴音を再現可能であることが示される。
【0074】
第2の実施の形態によれば、インパルス応答特性の時間軸上の値が大きくなるのにしたがって、閾値Thnewを小さくすることで、より小さな変化のあった点のインパルス応答データを無視せずに取り込むことができるようにしている。これにより、より残響の長い共鳴音を適切に再現することが可能となる。
【0075】
次に、本発明の第3の実施の形態について説明する。第2の実施の形態においてはインパルス応答特性の時間軸上の値が大きくなるのにしたがって、直線的に閾値Thnewを小さくすることで、より小さな変化のあった点のインパルス応答データを無視せずに取り込むことができるようにしている。第3の実施の形態においては、直線ではなく指数関数にしたがって閾値Thnewを小さくするようにしている。
【0076】
図9および図10は、本発明の第3の実施の形態にかかるインパルス応答データの生成処理を示すフローチャートである。
【0077】
第3の実施の形態においても、第1の実施の形態および第2の実施の形態と同様に、インパルス応答生成部18が、記憶部16に記憶された元のインパルス応答データ12を読み出して、元のインパルス応答データ12において、前後の値より、閾値Thnewより大きいような極大値、および、前後の値より、負の閾値−Thnewより小さいような極小値を見出して、極大値および極小値については、元のインパルス応答データ12の値を、新たなインパルス応答データ14の値として保持する。その一方、それ以外の場合には、新たなインパルス応答データ12の値として「0」を保持する。
【0078】
第3の実施の形態においては、極小値および極大値を判断する際の閾値Thnewを、後述するように、インパルス応答の時間軸に沿って減少する指数曲線となるように算出している。
【0079】
図9に示すように、インパルス応答生成部18は、n=nTapであるときの値、および、曲線の形状、特にくびれの程度を決定するパラメータであるRpow=指定値として(ステップ901)、Rrange=10^(−Rpow)を算出する(ステップ902)。Rpowは、オペレータが予め入力装置36を利用して入力し、RAM34に記憶しておき、ステップ901においてRAM34からインパルス応答生成部18が読み出せばよい。
【0080】
次いで、インパルス応答生成部18は、基数Base=2として、指数関数のべき数A=log(Rrange)/(nTap×log(Base))を算出する(ステップ903、904)。
【0081】
また、インパルス応答生成部18は、演算用のパラメータを、「n=0」に初期化する(ステップ905)。パラメータ「n」は処理対象となる元のインパルス応答データIpo[n]および新たなインパルス応答データIpg[n]を特定する。また、パラメータ「n」はインパルス応答特性の時間軸上の値に相当する。
【0082】
インパルス応答生成部18は、n≧nTapとなるまで(ステップ1001でYes)、ステップ1002以下の処理を実行する
インパルス応答生成部18は、第n番の新たなインパルス応答データIrg[n]に「0」をセットする(ステップ1002)。パラメータ「n」が「0」であれば(ステップ1003でYes)、インパルス応答生成部18は、パラメータ「n」をインクリメントして(ステップ1010)、ステップ1001に戻る。
【0083】
その一方、パラメータ「n」が「0」でなければ(ステップ1003でNo)、インパルス応答生成部18は、閾値Thnew=Th×Base^(A×n)であるような新たな閾値Thnewを算出する(ステップ1004)。
【0084】
元の閾値Thは、あらかじめ定められた定数であり、パラメータ「n」が「0」であれば閾値Thnew=Th×Base^0=Thとなり、パラメータ「n」が「nTap」であれば閾値Thnew=Th×Base^(A×nTap)=Th×2^(logRrange/log2)=Th×Rrangeとなる。
つまり、閾値Thnewは、インパルス応答の時間軸に相当するパラメータ「n」が「0」のときにThnew=Th、パラメータ「n」が「nTap」のときにThnew=Th×Rrange、パラメータ「n」が、「0<n<nTap」のときには、2点((0,Th)および(nTap,Th×Rrange)を結ぶ単調減少する指数関数上の一点となる。
【0085】
図11〜図13は、閾値Thnewの変化を示すグラフである。図11は、Rpow=1(Rrange=0.1)、図12は、Rpow=2(Rrange=0.01)、図12は、Rpow=3(Rrange=0.001)とした場合のグラフである。それぞれのグラフにおいて、Th=1としている。また、グラフにおいて、縦軸がThnewの値、横軸がインパルス応答特性の時間軸である。図11〜図13のように、第3の実施の形態では、Rpowが増大するにしたがって、くびれの度合いが強くなり(初期的な減少が著しくなり)、かつ、n=nTapの時の値が小さくなっている。このように、Rpowを変更することにより、極大値および極小値を判断するとき際の閾値の変更の度合いを、所望のように変更することが可能となる。
【0086】
図16(a)〜(c)は、第3の実施の形態により生成された新たなインパルス応答データに基づくインパルス応答特性の例を示すグラフである。図16(a)〜(c)は、それぞれ、Rpow=1、Rpow=2、Rpow=5として新たなインパルス応答データを算出している。
【0087】
第3の実施の形態によれば、インパルス応答特性の時間軸上の値が大きくなるのにしたがって、閾値Thnewを小さくすることで、より小さな変化のあった点のインパルス応答データを無視せずに取り込むことができるようにしている。これにより、より残響の長い共鳴音を適切に再現することが可能となる。特に、指数関数的に、時間軸上の値が比較的小さいときには比較的急峻に閾値を減少させ、時間軸上の値が比較的大きいときには、閾値の減少の程度を少なくさせている。これにより、よりきめ細かく適切な極大値および極小値を取得することが可能となる。
【0088】
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【0089】
たとえば、第2の実施の形態においては、インパルス応答特性の時間軸において、n=0のときに所定の閾値Th、n=nTapのときに0であるような、単調減少する一次直線上の値となるように、インパルス応答生成部18が、nの値に応じて閾値Thnewを算出している。しかしながら、一次直線は上述したものに限定されず、n=nTapのときに、Thより小さい値として、nの値に応じて閾値Thnewが算出されても良い。
【0090】
また、第3の実施の形態においては、n=0のときに所定の閾値Th、n=nTapのときに、設定された値Th×Rrangeとなるような、単調減少する指数関数上の値となるように、インパルス応答生成部18が、nの値に応じて閾値Thnewを算出している。しかしながら、上述した値をとるような指数関数に限定されるものではない。さらに、インパルス応答特性の時間軸上の値が大きくなるのにしたがって、閾値Thnewを小さくするような、単調減少する他の関数を閾値Thnewを算出するために利用することも可能である。
【図面の簡単な説明】
【0091】
【図1】図1は、本発明の実施の形態にかかる共鳴音付加装置の構成を示すブロックダイヤグラムである。
【図2】図2は、本実施の形態にかかる共鳴音付加装置のハードウェア構成を示すブロックダイヤグラムである。
【図3】図3は、本実施の形態にかかるインパルス応答データの生成処理の例を示すフローチャートである。
【図4】図4は、本実施の形態にかかる新たなインパルス応答データの生成を説明するための図である。
【図5】図5は、本実施の形態にかかる共鳴音生成部によって実行される処理の例を示すフローチャートである。
【図6】図6は、本実施の形態にかかる共鳴音生成部によって実行される処理の例を示すフローチャートである。
【図7】図7は、本実施の形態にかかる入力データバッファの構成の例を示す図である。
【図8】図8は、本発明の第2の実施の形態にかかるインパルス応答データの生成処理の例を示すフローチャートである。
【図9】図9は、本発明の第3の実施の形態にかかるインパルス応答データの生成処理を示すフローチャートである。
【図10】図10は、本発明の第3の実施の形態にかかるインパルス応答データの生成処理を示すフローチャートである。
【図11】図11は、本発明の第3の実施の形態にかかる共鳴音付加装置における閾値Thnewの例を示すグラフである。
【図12】図12は、本発明の第3の実施の形態にかかる共鳴音付加装置における閾値Thnewの例を示すグラフである。
【図13】図13は、本発明の第3の実施の形態にかかる共鳴音付加装置における閾値Thnewの例を示すグラフである。
【図14】図14(a)は、元のインパルス応答データに基づくインパルス応答特性の例を示すグラフ、図14(b)、(c)は、第1の実施の形態により生成されたインパルス応答データに基づくインパルス応答特性の例を示すグラフである。
【図15】図15(a)〜(c)は、それぞれ、元のインパルス応答データ、第1の実施の形態により生成された新たなインパルス応答データ、および、第2の実施の形態により生成された新たなインパルス応答データに基づくインパルス応答データに基づくインパルス応答特性の例を示すグラフである。
【図16】図16(a)〜(c)は、第3の実施の形態により生成された新たなインパルス応答データに基づくインパルス応答特性の例を示すグラフである。
【符号の説明】
【0092】
12 元のインパルス応答データ
14 新たなインパルス応答データ
16 記憶部
18 インパルス応答生成部
20 共鳴音生成部
22 入力データバッファ
24 共鳴音データバッファ
30 CPU
32 ROM
34 RAM
36 入力装置
38 表示装置
40 サウンドシステム
44 楽音生成回路

【特許請求の範囲】
【請求項1】
時間軸上の一連の楽音信号データをディレイメモリ値として記憶した入力データバッファと、
インパルス応答特性を表す時間軸上の値であるインパルス応答データを記憶した記憶部と、
前記インパルス応答データの値と、入力データバッファに記憶されたディレイメモリ値とを畳み込み演算して共鳴音データを生成する共鳴音生成手段と、を備えた共鳴音付加装置であって、
前記記憶部が、元のインパルス応答データを記憶し、
前記記憶部に記憶された元のインパルスデータを取り出して、前後の値より所定なだけ変動が大きい極大値および極小値を見出し、前記見出された極大値および極小値を、前記インパルス応答データの値として、前記記憶部に記憶するとともに、前記見出された極大値および極小値以外は、前記インパルス応答データの値として、「0」を示す値を前記記憶部に記憶するインパルス応答生成手段を備えたことを特徴とする共鳴音付加装置。
【請求項2】
前記共鳴音生成手段が、前記インパルス応答データの値が「0」以外であるときのみ、前記インパルス応答データの値と、前記ディレイメモリ値とを乗算し、かつ、乗算された値を累算するように構成されたことを特徴とする請求項1に記載の共鳴音付加装置。
【請求項3】
前記インパルス応答生成手段が、前記元のインパルス応答データの、前記インパルス応答特性の時間軸上の位置に対応する、当該時間軸に沿って単調減少する直線上の値となるような閾値を算出し、前後の値より、前記閾値より変動が大きい極大値および極小値を見出すように構成されたことを特徴とする請求項1または2に記載の共鳴音付加装置。
【請求項4】
前記インパルス応答生成手段が、前記元のインパルス応答データの、前記インパルス応答特性の時間軸上の位置に対応する、当該時間軸に沿って単調減少する指数曲線上の値となるような閾値を算出し、前後の値より、前記閾値より変動が大きい極大値および極小値を見出すように構成されたことを特徴とする請求項1または2に記載の共鳴音付加装置。
【請求項5】
時間軸上の一連の楽音信号データをディレイメモリ値として記憶した入力データバッファと、インパルス応答特性を表す時間軸上の値であるインパルス応答データを記憶した記憶部と、を備えたコンピュータにおいて、前記コンピュータに、
前記インパルス応答データの値と、入力データバッファに記憶されたディレイメモリ値とを畳み込み演算して共鳴音データを生成する共鳴音生成ステップを実行させる共鳴音付加プログラムであって、
前記記憶部が、元のインパルス応答データを記憶し、
前記コンピュータに、
前記記憶部に記憶された元のインパルスデータを取り出して、前後の値より所定なだけ変動が大きい極大値および極小値を見出し、前記見出された極大値および極小値を、前記インパルス応答データの値として、前記記憶部に記憶するとともに、前記見出された極大値および極小値以外は、前記インパルス応答データの値として、「0」を示す値を前記記憶部に記憶するインパルス応答生成ステップを実行させることを特徴とする共鳴音付加プログラム。
【請求項6】
前記共鳴音生成ステップにおいて、
前記インパルス応答データの値が「0」以外であるときのみ、前記インパルス応答データの値と、前記ディレイメモリ値とを乗算し、かつ、乗算された値を累算するステップを実行させることを特徴とする請求項5に記載の共鳴音付加プログラム。
【請求項7】
前記インパルス応答生成ステップにおいて、前記コンピュータに、
前記元のインパルス応答データの、前記インパルス応答特性の時間軸上の位置に対応する、当該時間軸に沿って単調減少する直線上の値となるような閾値を算出するステップと、
前後の値より、前記閾値より変動が大きい極大値および極小値を見出すステップと、を実行させることを特徴とする請求項5または6に記載の共鳴音付加プログラム。
【請求項8】
前記インパルス応答生成ステップにおいて、前記コンピュータに、
前記元のインパルス応答データの、前記インパルス応答特性の時間軸上の位置に対応する、当該時間軸に沿って単調減少する指数曲線上の値となるような閾値を算出するステップと、
前後の値より、前記閾値より変動が大きい極大値および極小値を見出すステップと、を実行させることを特徴とする請求項5または6に記載の共鳴音付加プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate


【公開番号】特開2008−299005(P2008−299005A)
【公開日】平成20年12月11日(2008.12.11)
【国際特許分類】
【出願番号】特願2007−143978(P2007−143978)
【出願日】平成19年5月30日(2007.5.30)
【出願人】(000001443)カシオ計算機株式会社 (8,748)
【Fターム(参考)】