(57)【要約】   【課題】  少ない演算量で、測定されたインパルス応答データと同質の再現性を有する共鳴音を生成することができ、かつ、インパルス応答データのデータ量を減らす。  【解決手段】  共鳴音付加装置は、時間軸上の一連の楽音信号データをディレイメモリ値として記憶した入力データバッファ２２と、インパルス応答特性を表す時間軸上の値であるインパルス応答データの値「０」が連続する数を示す値、および、実際のインパルス応答データの値を含むインパルス応答データ１４を記憶した記憶部１６と、インパルス応答データと、ディレイメモリ値とを畳み込み演算して共鳴音データを生成する共鳴音生成部２０とを備える。共鳴音生成部２０は、インパルス応答データの値「０」が連続する数を示す値を参照して、入力データバッファ２２において、実際のインパルス応答データの値と乗算すべきディレイメモリ値を特定して、乗算を実行し、乗算された値を累算する。【選択図】  図１
2008299004.tif 000002
【特許請求の範囲】
【請求項１】
時間軸上の一連の楽音信号データをディレイメモリ値として記憶した入力データバッファと、
インパルス応答特性を表す時間軸上の値であるインパルス応答データの値「０」が連続する数を示す値、および、実際のインパルス応答データの値を含むインパルス応答データを記憶した記憶部と、
前記インパルス応答データと、入力データバッファに記憶されたディレイメモリ値とを畳み込み演算して共鳴音データを生成する共鳴音生成手段と、を備えた共鳴音付加装置であって、
前記共鳴音生成手段が、インパルス応答データの値「０」が連続する数を示す値を参照して、前記入力データバッファにおいて、実際のインパルス応答データの値と乗算すべきディレイメモリ値を特定し、前記実際のインパルス応答データの値と、前記ディレイメモリ値とを乗算し、かつ、乗算された値を累算するように構成されたことを特徴とする共鳴音付加装置。
【請求項２】
前記記憶部が、インパルス応答データとして、後続する値がインパルス応答データの値「０」が連続する数を示す値であることを示す識別子、インパルス応答データの値「０」が連続する数を示す値、および、実際のインパルス応答データの値を記憶し、
前記共鳴音生成手段が、前記インパルス応答データが前記識別子である場合に、当該識別子に後続する、インパルス応答データの値「０」が連続する数を示す値を参照して、前記入力データバッファにおいて、実際のインパルス応答データの値と乗算すべきディレイメモリ値を特定するように構成されたことを特徴とする請求項１に記載の共鳴音付加装置。
【請求項３】
前記共鳴音生成手段が、前記インパルス応答データの値「０」が連続する数を示す値だけ、前記入力データバッファのディレイメモリ値を特定する時間軸のパラメータを増大させ、前記実際のインパルス応答データの値と、前記増大されたパラメータにより特定されるディレイメモリ値とを乗算し、かつ、乗算された値を累算するように構成されたことを特徴とする請求項１または２に記載の共鳴音付加装置。
【請求項４】
前記記憶部が、元のインパルス応答データを記憶し、
前記記憶部に記憶された元のインパルス応答データを取り出して、前後の値より所定なだけ変動が大きい極大値および極小値を見出し、前記見出された極大値および極小値を、前記インパルス応答データにおける実際のインパルスデータの値として、前記記憶部に格納するインパルス応答生成手段を備えたことを特徴とする請求項１ないし３の何れか一項に記載の共鳴音付加装置。
【請求項５】
時間軸上の一連の楽音信号データをディレイメモリ値として記憶した入力データバッファと、
インパルス応答特性を表す時間軸上の値であるインパルス応答データの値「０」が連続する数を示す値、および、実際のインパルス応答データの値を含むインパルス応答データを記憶した記憶部と、備えたコンピュータにおいて、前記コンピュータに、
前記インパルス応答データと、入力データバッファに記憶されたディレイメモリ値とを畳み込み演算して共鳴音データを生成する共鳴音生成ステップを実行させる共鳴音付加プログラムであって、
前記共鳴音生成ステップにおいて、前記コンピュータに、
インパルス応答データの値「０」が連続する数を示す値を参照して、前記入力データバッファにおいて、実際のインパルス応答データの値と乗算すべきディレイメモリ値を特定し、前記実際のインパルス応答データの値と、前記ディレイメモリ値とを乗算し、かつ、乗算された値を累算するステップを実行させることを特徴とする共鳴音付加プログラム。
【請求項６】
前記コンピュータの前記記憶部が、インパルス応答データとして、後続する値がインパルス応答データの値「０」が連続する数を示す値であることを示す識別子、インパルス応答データの値「０」が連続する数を示す値、および、実際のインパルス応答データの値を記憶し、
前記共鳴音生成ステップにおいて、前記コンピュータに、
前記インパルス応答データが前記識別子である場合に、当該識別子に後続する、インパルス応答データの値「０」が連続する数を示す値を参照して、前記入力データバッファにおいて、実際のインパルス応答データの値と乗算すべきディレイメモリ値を特定するステップを実行させることを特徴とする請求項５に記載の共鳴音付加プログラム。
【請求項７】
前記共鳴音生成ステップにおいて、前記コンピュータに、
前記インパルス応答データの値「０」が連続する数を示す値だけ、前記入力データバッファのディレイメモリ値を特定する時間軸のパラメータを増大させ、前記実際のインパルス応答データの値と、前記増大されたパラメータにより特定されるディレイメモリ値とを乗算し、かつ、乗算された値を累算するステップを実行させることを特徴とする請求項５または６に記載の共鳴音付加プログラム。
【請求項８】
前記コンピュータの前記記憶部が、元のインパルス応答データを記憶し、
前記コンピュータに、
前記記憶部に記憶された元のインパルス応答データを取り出して、前後の値より所定なだけ変動が大きい極大値および極小値を見出し、前記見出された極大値および極小値を、前記インパルス応答データにおける実際のインパルスデータの値として、前記記憶部に格納するインパルス応答生成ステップを実行させることを特徴とする請求項５ないし８の何れか一項に記載の共鳴音付加プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、楽音に共鳴音を付加する共鳴音付加装置および共鳴音付加プログラムに関する。
【背景技術】
【０００２】
電子楽器やオーディオ機器からの楽音信号に共鳴音を付加する種々の装置が知られている。ここに、共鳴音には、ホールなど楽音が発生される場所における残響音や、楽器自体の共鳴音などが含まれる。
【０００３】
共鳴音を発生するためには、共鳴音付加装置は、ディジタルの楽音信号データを受け入れて、楽音信号データにディジタルフィルタによるフィルタ処理を施すのが一般的である。フィルタ処理においては、ＦＩＲ（有限インパルス応答：Finite Impulse Response）フィルタ或いはＩＩＲ（無限インパルス応答：Infinite Impulse Response）フィルタが利用される。
【０００４】
ＦＩＲフィルタを利用する場合には、入力された楽音信号のデータｘ（ｎ−ｋ）と、音楽ホールの残響特性などから得たインパルス応答ｈ（ｋ）を畳み込み演算することで、共鳴音のデータｙｏｕｔ（ｎ）＝Σｘ（ｎ−ｋ）×ｈ（ｋ）を得ることができる。
【０００５】
特許文献１には、インパルス応答データのデータ量を低減しつつ残響音特性を連続的に変化させることができる共鳴音付加装置が開示されている。この共鳴音付加装置においては、記憶装置に記憶された第１のインパルス応答データと、第２のインパルス応答データとを線形結合することにより、利用者からの指示に応じた特性のインパルス応答を表す新規なインパルス応答データが生成される。共鳴音付加装置は、新規なインパルス応答データを用いてフィルタ処理を行うことで、残響音データを生成する。
【特許文献１】特開２００４−２９４７１２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ＦＩＲフィルタにおいては、インパルス応答データの数（インパルス応答特性の時間軸上のデータの数）を増大させ、フィルタの次数を高くすることにしたがって、より理想的なフィルタ特性に近づけることができる。その一方、インパルス応答データの数を増大させるのにしたがって、インパルス応答データのデータ量が増大するのみならず、演算量も多量となるという問題点がある。
【０００７】
また、特許文献１に開示された技術においては、２つのインパルス応答データの線形結合により新規インパルス応答データを生成するため、新規なインパルス応答データは、実際にホールの残響特性などを測定することにより得たインパルス応答の再現性が低いという問題点もあった。
【０００８】
本発明は、少ない演算量で、測定されたインパルス応答データと同質の再現性を有する共鳴音を生成することができ、かつ、フィルタ演算に利用するインパルス応答データのデータ量を減らすことが可能な共鳴音付加装置、および、共鳴音付加プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の目的は、時間軸上の一連の楽音信号データをディレイメモリ値として記憶した入力データバッファと、
インパルス応答特性を表す時間軸上の値であるインパルス応答データの値「０」が連続する数を示す値、および、実際のインパルス応答データの値を含むインパルス応答データを記憶した記憶部と、
前記インパルス応答データと、入力データバッファに記憶されたディレイメモリ値とを畳み込み演算して共鳴音データを生成する共鳴音生成手段と、を備えた共鳴音付加装置であって、
前記共鳴音生成手段が、インパルス応答データの値「０」が連続する数を示す値を参照して、前記入力データバッファにおいて、実際のインパルス応答データの値と乗算すべきディレイメモリ値を特定し、前記実際のインパルス応答データの値と、前記ディレイメモリ値とを乗算し、かつ、乗算された値を累算するように構成されたことを特徴とする共鳴音付加装置により達成される。
【００１０】
好ましい実施態様においては、前記記憶部が、インパルス応答データとして、後続する値がインパルス応答データの値「０」が連続する数を示す値であることを示す識別子、インパルス応答データの値「０」が連続する数を示す値、および、実際のインパルス応答データの値を記憶し、
前記共鳴音生成手段が、前記インパルス応答データが前記識別子である場合に、当該識別子に後続する、インパルス応答データの値「０」が連続する数を示す値を参照して、前記入力データバッファにおいて、実際のインパルス応答データの値と乗算すべきディレイメモリ値を特定するように構成されている。
【００１１】
また、好ましい実施態様においては、前記共鳴音生成手段が、前記インパルス応答データの値「０」が連続する数を示す値だけ、前記入力データバッファのディレイメモリ値を特定する時間軸のパラメータを増大させ、前記実際のインパルス応答データの値と、前記増大されたパラメータにより特定されるディレイメモリ値とを乗算し、かつ、乗算された値を累算するように構成されている。
【００１２】
別のこのまし実施態様においては、前記記憶部が、元のインパルス応答データを記憶し、
前記記憶部に記憶された元のインパルス応答データを取り出して、前後の値より所定なだけ変動が大きい極大値および極小値を見出し、前記見出された極大値および極小値を、前記インパルス応答データにおける実際のインパルスデータの値として、前記記憶部に格納するインパルス応答生成手段を備えている。
【００１３】
また、本発明の目的は、時間軸上の一連の楽音信号データをディレイメモリ値として記憶した入力データバッファと、
インパルス応答特性を表す時間軸上の値であるインパルス応答データの値「０」が連続する数を示す値、および、実際のインパルス応答データの値を含むインパルス応答データを記憶した記憶部と、備えたコンピュータにおいて、前記コンピュータに、
前記インパルス応答データと、入力データバッファに記憶されたディレイメモリ値とを畳み込み演算して共鳴音データを生成する共鳴音生成ステップを実行させる共鳴音付加プログラムであって、
前記共鳴音生成ステップにおいて、前記コンピュータに、
インパルス応答データの値「０」が連続する数を示す値を参照して、前記入力データバッファにおいて、実際のインパルス応答データの値と乗算すべきディレイメモリ値を特定し、前記実際のインパルス応答データの値と、前記ディレイメモリ値とを乗算し、かつ、乗算された値を累算するステップを実行させることを特徴とする共鳴音付加プログラムにより達成される。
【００１４】
好ましい実施態様においては、前記コンピュータの前記記憶部が、インパルス応答データとして、後続する値がインパルス応答データの値「０」が連続する数を示す値であることを示す識別子、インパルス応答データの値「０」が連続する数を示す値、および、実際のインパルス応答データの値を記憶し、
前記共鳴音生成ステップにおいて、前記コンピュータに、
前記インパルス応答データが前記識別子である場合に、当該識別子に後続する、インパルス応答データの値「０」が連続する数を示す値を参照して、前記入力データバッファにおいて、実際のインパルス応答データの値と乗算すべきディレイメモリ値を特定するステップを実行させる。
【００１５】
また、好ましい実施態様においては、前記共鳴音生成ステップにおいて、前記コンピュータに、
前記インパルス応答データの値「０」が連続する数を示す値だけ、前記入力データバッファのディレイメモリ値を特定する時間軸のパラメータを増大させ、前記実際のインパルス応答データの値と、前記増大されたパラメータにより特定されるディレイメモリ値とを乗算し、かつ、乗算された値を累算するステップを実行させる。
【００１６】
別の好ましい実施態様においては、前記コンピュータの前記記憶部が、元のインパルス応答データを記憶し、
前記コンピュータに、
前記記憶部に記憶された元のインパルス応答データを取り出して、前後の値より所定なだけ変動が大きい極大値および極小値を見出し、前記見出された極大値および極小値を、前記インパルス応答データにおける実際のインパルスデータの値として、前記記憶部に格納するインパルス応答生成ステップを実行させる。
【発明の効果】
【００１７】
本発明によれば、少ない演算量で、測定されたインパルス応答データと同質の再現性を有する共鳴音を生成することができ、かつ、フィルタ演算に利用するインパルス応答データのデータ量を減らすことが可能な共鳴音付加装置、および、共鳴音付加プログラムを提供することが可能となる。
【発明を実施するための最良の形態】
【００１８】
以下、添付図面を参照して、本発明の実施の形態について説明する。図１は、本発明の実施の形態にかかる共鳴音付加装置の構成を示すブロックダイヤグラムである。
【００１９】
図１に示すように、本実施の形態にかかる共鳴音付加装置は、元のインパルス応答データ１２および後述する演算により算出された新たなインパルス応答データ１４を記憶する記憶部１６と、元のインパルス応答データ１２から新たなインパルス応答データ１４を生成して、新たなインパルス応答データ１４を記憶部１６に格納するインパルス応答生成部１８と、一連の楽音信号データを格納した入力データバッファ２２から楽音信号データを受け入れて、楽音信号データおよび新たなインパルス応答データを畳み込み演算することにより共鳴音データを生成する共鳴音生成部２０と、時間軸上の一連の楽音信号データを受け入れて、これらデータを一時的に記憶する入力データバッファ２２と、出力された共鳴音データを一時的に記憶する共鳴音データバッファ２４と、を備えている。
【００２０】
図２は、本実施の形態にかかる共鳴音付加装置のハードウェア構成を示すブロックダイヤグラムである。図２に示すように、共鳴音付加装置のハードウェアは、ＣＰＵ３０、ＲＯＭ３２、ＲＡＭ３４、入力装置３６、表示装置３８およびサウンドシステム４０を含む。ＣＰＵ３０、ＲＯＭ３２、ＲＡＭ３４、入力装置３６、表示装置３８およびサウンドシステム４０は、バス４２で接続されている。
【００２１】
図２にから理解できるように、共鳴音付加装置は、通常のパーソナルコンピュータによって実現され得る。ＣＰＵ３０は、システム制御、新たなインパルス応答データ１４の生成、表示装置の画面上に表示すべき画像データの生成などの処理を実行する。ＲＯＭ３２は、プログラムや、プログラムの実行の際に使用される定数などを記憶する。ＲＡＭ３４は、プログラムの実行の過程で必要な変数、パラメータ、入力データ、出力データなどを一時的に記憶する。
【００２２】
入力装置３６は、たとえば、キーボードやマウスを有し、操作者が所望の指示を入力することができるようになっている。表示装置３８の画面上には、操作者が入力した指示や処理結果が表示可能である。
【００２３】
サウンドシステム４０は、楽音生成回路４４、共鳴音生成部２０、増幅器（図示せず）、スピーカ（図示せず）などを含み、ＣＰＵ３０からの指示にしたがって、所定の楽音信号のデータを生成し、かつ、楽音信号データに共鳴音が付加された共鳴音データを生成し、生成された共鳴音データに基づく音響信号を出力する。
【００２４】
楽音生成回路４４は、ＲＯＭ３２から楽音波形を読み出して、指定された音高の楽音信号データを生成する。楽音信号データは、図１に示すように入力データバッファ２２に一時的に記憶される。共鳴音生成部２０は、ＦＩＲフィルタであり、入力データバッファ２２から、楽音信号データを入力データとして読み出し、楽音信号データと、記憶部１４から読み出した新たなインパルス応答データとを畳み込み演算することにより、共鳴音データを生成し、共鳴音データバッファ２４に格納する。
【００２５】
図１に示すインパルス応答生成部１８の機能は、ＣＰＵ３０により実現される。なお、図２において、共鳴音生成部２０を、サウンドシステム４０における要素として図示しているが、共鳴音生成部２０が、ディジタルフィルタ回路のようなハードウェアにより実現されることに限定されず、共鳴音生成部２０の機能をＣＰＵ３０により実現することも可能である。
【００２６】
また、図１の記憶部１６、入力データバッファ２２および共鳴音データバッファ２４は、たとえば、ＲＡＭ３４により実現される。
【００２７】
本実施の形態にかかる共鳴音付加装置においては、たとえばＲＯＭ３２に記憶されたプログラムが、コンピュータを、インパルス応答生成部１８として機能させる。また、ＲＯＭ３２に記憶されたプログラムが、コンピュータを、共鳴音生成部２０として機能させることもできる。
【００２８】
元のインパルス応答データ１２は、音楽ホールの残響特性などを測定し、測定された残響特性に基づいて得られたデータである。本実施の形態において、共鳴音付加装置の記憶部１６に元のインパルス応答データ１２が記憶され、インパルス応答生成部１８によって、元のインパルス応答データ１２に基づいて新たなインパルス応答データ１４が生成され、新たなインパルス応答データ１４が記憶部１６に記憶される。いったん新たなインパルス応答データ１４が生成されると、それ以降、新たなインパルス応答データ１４のみが共鳴音生成のために利用され、元のインパルス応答データ１２は利用されない。したがって、元のインパルス応答データ１２は、新たなインパルス応答データ１４を生成するときのみ、記憶部１６に記憶されていれば良い。
【００２９】
したがって、本実施の形態にかかる共鳴音付加装置は、共鳴音データを生成する共鳴音生成処理の前処理として、新たなインパルス応答データを生成するインパルス応答データの生成処理を実行する。
【００３０】
図３および図４は、本実施の形態にかかるインパルス応答データの生成処理の例を示すフローチャートである。記憶部１６には、フィルタの次数にしたがった、元のインパルス応答データＩｒｏ［ｎ］（ｎ＝０〜ｎＴａｐ−１）が格納されている。本実施の形態においては、元のインパルス応答データの値「０」が連続する場合に、当該値「０」が連続する数を示す値を記憶しておくことで新たなインパルス応答データのデータ量を減らすようにしている。
【００３１】
より詳細には、元のインパルス応答データにおいて、前後の値より所定なだけ大きいような極大値および極小値を見出して、極大値および極小値については、元のインパルス応答データの値を保持する。それ以外の元のインパルス応答データについては値を「０」として、その連続する数を示す値を保持する。
【００３２】
図３に示すように、インパルス応答生成部１８は、演算用のパラメータを、「ｎ＝０」、「ｐ＝０」、「ｚｃｎｔ＝０」に初期化する（ステップ３０１）。パラメータ「ｎ」は処理対象となる元のインパルス応答データＩｐｏ［ｎ］を特定する。パラメータ「ｐ」は、生成すべき新たなインパルス応答データＩｐｇ［ｐ］を特定する。また、パラメータ「ｚｃｎｔ」は、値「０」がいくつ連続して存在するかを示すゼロカウンタのカウンタ値である。
【００３３】
インパルス応答生成部１８は、ｎ≧ｎＴａｐとなるまで（ステップ３０２でＹｅｓ）、ステップ３０３以下の処理を実行する。
【００３４】
インパルス応答生成部１８は、パラメータ「ｎ」が「０」であれば（ステップ３０３でＹｅｓ）、インパルス応答生成部１８は、パラメータ「ｎ」をインクリメントして（ステップ３０９）、ステップ３０２に戻る。
【００３５】
その一方、パラメータ「ｎ」が「０」でなければ（ステップ３０３でＮｏ）、インパルス応答生成部１８は、記憶部１６から元のインパルス応答データＩｒｏ［ｎ−１］、Ｉｒｏ［ｎ］、Ｉｒｏ［ｎ＋１］を読み出し、ｄｐ＝Ｉｒｏ［ｎ］−Ｉｒｏ［ｎ−１］およびｄｎ＝Ｉｒｏ［ｎ］−Ｉｒｏ［ｎ＋１］を算出する（ステップ３０４、３０５）。「ｄｐ」は、処理対象となっている元のインパルス応答データＩｒｏ［ｎ］と、インパルス応答特性の時間軸において、その１つ前の元のインパルス応答データＩｒｏ［ｎ−１］との差であり、「ｄｎ」は、処理対象となっている元のインパルス応答データＩｒｏ［ｎ］と、インパルス応答特性の時間軸において、その１つ後の元のインパルス応答データＩｒｏ［ｎ＋１］との差である。
【００３６】
「ｄｐ」および「ｄｎ」の双方が「＋（マイナス）」であれば、元のインパルス応答データＩｒｏ［ｎ］は極大であることになる。その一方、「ｄｐ」および「ｄｎ」の双方が「−（マイナス）」であれば、元のインパルス応答データＩｒｏ［ｎ］は極小であることになる。
【００３７】
本実施の形態においては、元のインパルス応答データＩｐｏ［ｎ］が、前後の値より、所定の閾値Ｔｈより大きいような極大値である場合、つまり、ｄｐ≧Ｔｈかつｄｎ≧Ｔｈである場合（ステップ３０６でＹｅｓ）、或いは、元のインパルス応答データＩｐｏ［ｎ］が、前後の値が、所定の負の閾値−Ｔｈより小さいような極小値である場合、つまり、ｄｐ≦−Ｔｈかつｄｎ≦−Ｔｈである場合（ステップ３０７でＹｅｓ）には、元のインパルス応答データＩｐｏ［ｎ］が、新たなインパルス応答データＩｐｇ［ｐ］として記憶される。
【００３８】
図４に示すように、インパルス応答生成部１８は、ゼロカウンタのカウンタ値ｚｃｎｔが「０」以上であるかを判断する（ステップ４０１）。ステップ４０１でＹｅｓと判断された場合には、インパルス応答生成部１８は、新たなインパルス応答データＩｒｇ［ｐ］＝０、Ｉｒｇ［ｐ＋１］＝ｚｃｎｔとして（ステップ４０２）、さらに、ｐ＝ｐ＋２とした上で（ステップ４０３）、Ｉｒｇ［ｐ］＝Ｉｒｏ［ｎ］とする（ステップ４０４）。
【００３９】
ゼロカウンタは、インパルス応答データの値「０」が連続する数を示す値をカウント値ｚｃｎｔとして保持する。また、ステップ４０２に生成されるＩｒｇ［ｐ］＝０は、次のインパルス応答データであるＩｒｇ［ｐ＋１］がゼロカウンタのカウント値ｚｃｎｔであることを示す識別子である。これら新たなインパルス応答データは、記憶部１６に格納される。したがって、新たなインパルス応答データにおいては、Ｉｒｇ［ｐ］、Ｉｒｇ［ｐ＋１］、Ｉｒｇ［ｐ＋２］の順で、「０」、ゼロカウンタのカウンタ値ｚｃｎｔ、極大値或いは極小値であった元のインパルス応答データ（＝Ｉｒｏ［ｎ］）が、記憶部１６に格納される。
【００４０】
その一方、ステップ４０１でＮｏと判断された場合には、元のインパルス応答データの値Ｉｒｏ［ｎ］が、Ｉｒｇ［ｐ］として格納される（ステップ４０４）。ステップ４０１でＮｏ、つまり、ゼロカウンタのカウンタ値＝０である場合には、極大値或いは極小値であった元のインパルス応答データ（＝Ｉｒｏ［ｎ］）が、記憶部１６に格納される。
【００４１】
次いで、インパルス応答生成部１８は、パラメータ「ｐ」をインクリメントするとともに、ゼロカウンタのカウント値ｚｃｎｔを「０」に戻す（ステップ４０５）。このような処理の後、インパルス応答生成部１８は、パラメータ「ｎ」をインクリメントして（ステップ３０９）、ステップ３０２に戻る。
【００４２】
ステップ３０６でＮｏ、かつ、ステップ３０７でＮｏの場合には、インパルス応答生成部１８は、ゼロカウンタのカウンタ値ｚｃｎｔをインクリメントする（ステップ３０８）。すなわち、元のインパルス応答データＩｒｏ［ｎ］について、前後の値より、所定の閾値Ｔｈより大きいような極大値ではなく、また、前後の値より、所定の負の閾値−Ｔｈより小さいような極小値でもない場合には、インパルス応答データの値を「０」と考えて、「０」が連続する数を示すゼロカウンタのカウンタ値ｚｃｎｔをインクリメントしている。
【００４３】
図３および図４の処理によって、元のインパルス応答データＩｐｏ［ｎ］が、前後の値より、所定の閾値Ｔｈより大きいような極大値である場合、或いは、元のインパルス応答データＩｐｏ［ｎ］が、前後の値より、所定の負の閾値−Ｔｈより小さいような極小値である場合には、それ以前にインパルス応答データの値「０」が連続する数を示すゼロカウンタのカウンタ値ｚｃｎｔ、および、元のインパルス応答データの値を含む一連の新たなインパルス応答データが生成され、記憶部１８に格納される。
【００４４】
それ以外の場合には、ゼロカウンタのカウンタ値のみがインクリメントされていく。これにより、前後の値よりも、その変動が閾値より大きいような極大値および極小値以外の元のインパルス応答データが省略されたような新たなインパルス応答データを生成でき、インパルス応答データのデータ量を著しく小さくすることが可能となる。
【００４５】
図５は、本実施の形態にかかる新たなインパルス応答データの生成を説明するための図である。たとえば、元のインパルス応答データＩｒｏ［ｓ＋１］を処理対象Ｉｒｏ［ｎ］としたときに、ｄｐ＝Ｉｒｏ［ｓ＋１］−Ｉｒｏ［ｓ］≧Ｔｈ、かつ、ｄｎ＝Ｉｒｏ［ｓ＋１］−Ｉｒｏ［ｓ＋２］≧Ｔｈとなったとする。この場合、一連の新たなインパルス応答データとして、パラメータｐ＝ｑとすると、Ｉｒｇ［ｑ］＝０、Ｉｒｇ［ｑ＋１］＝カウントされていたゼロカウンタのカウント値ｚｃｎｔ、Ｉｒｇ［ｑ＋２］＝Ｉｒｏ［ｓ＋１］が生成される（符号５１１参照）。
【００４６】
Ｉｒｏ［ｓ＋２］からＩｒｏ［ｓ＋ｔ］が処理対象となり、図３のステップ３０６およびステップ３０７でＮｏと判断された場合には、それぞれ、ゼロカウンタのカウンタ値がカウントアップされる。元のインパルス応答データＩｒｏ［ｓ＋ｔ＋１］を処理対象Ｉｒｏ［ｎ］としたときに、ｄｐ＝Ｉｒｏ［ｓ＋ｔ＋１］−Ｉｒｏ［ｓ＋ｔ］≦−Ｔｈ、かつ、ｄｎ＝Ｉｒｏ［ｓ＋ｔ＋１］−Ｉｒｏ［ｓ＋ｔ＋２］≦−Ｔｈとなったとする。この場合、一連の新たなインパルス応答データとして、パラメータｐ＝ｑ＋３とすると、Ｉｒｇ［ｑ＋３］＝０、Ｉｒｇ［ｑ＋４］＝カウントされていたゼロカウンタのカウント値ｚｃｎｔ＝ｔ−１、Ｉｒｇ［ｑ＋５］＝Ｉｒｏ［ｓ＋ｔ＋１］が生成される（符号５１２参照）。符号５１２に示す例では、ゼロカウンタの値が「ｔ−１」、つまり、値が「０」であるとされた元のインパルス応答データが、「ｔ−１」個だけ連続しているため、ゼロカウンタのカウント値ｚｃｎｔ＝ｔ−１となる。
【００４７】
なお、図５においては図示していないが、ゼロカウンタのカウント値が「０」であれば、元のインパルス応答データと同じ値を持つ１つの新たなインパルス応答データのみが生成される（図３のステップ４０１でＮｏの場合）。
【００４８】
このようにして生成され、記憶部１８に格納された新たなインパルス応答データＩｒｇ（以下、単に、「インパルス応答データ」と称する。）を利用して、共鳴音生成部２０によって、畳み込み演算が実行されて、共鳴音データが生成される。
【００４９】
図６および図７は、本実施の形態にかかる共鳴音生成部によって実行される処理の例を示すフローチャートである。図６の処理では、楽音信号データと、インパルス応答データとが畳み込み演算される。また、図７の処理では、入力データバッファ２２の値（ディレイメモリ値ＤＭ）がシフトされる。
【００５０】
図６に示すように、共鳴音生成部２０は、演算用のパラメータを「ｋ＝０」、「ｐ＝０」に初期化する（ステップ６０１）。パラメータ「ｋ」は入力データバッファ２２中のディレイメモリ値ＤＭ［ｋ］を特定する。また、パラメータ「ｐ」は、記憶部１６中のインパルス応答データＩｒｇ［ｐ］を特定する。
【００５１】
また、共鳴音生成部２０は、累算値「ａｃｃ＝０」とするとともに、入力データバッファ２２の先頭のディレイメモリ値ＤＭ［０］＝ｘｉｎにセットする（ステップ６０２、６０３）。ｘｉｎは、最新の楽音信号データである。後述するように、本実施の形態の入力データバッファ２２は、最新の楽音信号のデータＤＭ［０］から、時間軸方向にｎＴａｐだけ前のサンプルである楽音信号データＤＭ［ｎＴａｐ−１］までの楽音信号データのデータ列を格納することができる。すなわち、入力データバッファ２２は、ｎＴａｐ段のディレイメモリとして利用される。入力データバッファ２２に格納されたディレイメモリ値ＤＭ［ｋ］については、後にさらに詳述する。
【００５２】
次いで、共鳴音生成部２０は、ｋ≧ｎＴａｐになるまで（ステップ６０４でＹｅｓ）、以下の処理を実行する。共鳴音生成部２０は、インパルス応答データＩｒｇ［ｐ］が「０」であるかを判断する（ステップ６０５）。ステップ６０５でＮｏと判断された場合には、共鳴音生成部２０は、累算値ａｃｃ＝ａｃｃ＋Ｉｒｇ［ｐ］×ＤＭ［ｋ］を算出する（ステップ６０６）。つまり、共鳴音生成部２０は、第ｐ番のインパルス応答データＩｒｇ［ｐ］と第ｋ番のディレイメモリ値ＤＭ［ｋ］との積を累算値ａｃｃに加算する。
【００５３】
その一方、Ｉｒｇ［ｐ］＝０である場合（ステップ６０５でＹｅｓ）には、共鳴音生成部２０は、ｋ＝ｋ＋Ｉｒｇ［ｐ＋１］として、ディレイメモリ値ＤＭ［ｋ］を特定するパラメータ「ｋ」を更新する（ステップ６０７）。
【００５４】
ステップ６０５でＹｅｓであることは、インパルス応答データが「０」、つまり、後続するインパルス応答データが、インパルス応答データの値「０」が連続する数を示す値であることを示す識別子であることが示される。そこで、共鳴音生成部２０は、インパルス応答データの値「０」が連続する数を示す値だけ、入力データバッファ２２のディレイメモリ値を特定するパラメータ「ｋ」を増大させる。これにより、実際のインパルス応答データの値と、増大されたパラメータ「ｋ」により特定されるディレイメモリ値との適切な乗算が可能となる。
【００５５】
その後、共鳴音生成部２０は、パラメータｐおよびパラメータｋをそれぞれインクリメントし（ステップ６０８、６０９）、ステップ６０４に戻る。
【００５６】
以下、ステップ６０５〜ステップ６０７についてより詳細に説明する。上述したように、インパルス応答データは、「０」、インパルス応答データの値「０」が連続する数を示す値、および、実際のインパルス応答データの値、という３つのデータから構成されている。
【００５７】
図８は、本実施の形態にかかるインパルス応答データのデータ構成の例を示す図である。図８においては、先頭のインパルス応答データ（符号８０１参照）は、「０」であり、次のインパルス応答データ（符号８０２参照）が、ゼロカウンタのカウンタ値（ｚｃｎｔ［ｑ１］であることを示している。また、その次のインパルス応答データは、実際のインパルス応答データの値（Ｉｒｏ［ｑ１］）に相当する。
【００５８】
符号８０１で示すインパルス応答データが、図６における処理対象のインパルス応答データＩｒｇ［ｐ］であると、図６のステップ６０５でＹｅｓと判断される。この場合には、ディレイメモリ値ＤＭ［ｋ］を特定するパラメータｋが、符号８０２で示すインパルス応答データＩｒｇ［ｐ＋１］＝ｚｃｎｔ［ｑ１］だけ増加される（図６のステップ６０７）。すなわち、インパルス応答データの値が「０」の場合に、インパルス応答データとディレイメモリＤＭ［ｋ］との乗算および累算値への加算を省略することができる。
【００５９】
また、符号８０３で示すインパルス応答データが処理対象のインパルス応答データＩｒｇ［ｐ］であると、図６のステップ６０５でＮｏと判断され、インパルス応答データＩｒｇ［ｐ］＝Ｉｒｏ［ｑ１］と、ステップ６０７によって、インパルス応答データが「０」が連続する数を示す値だけ適切に増加されたパラメータｋによる、ディレイメモリ値ＤＭ［ｋ］とが乗算され、累算値ａｃｃに加算される（図６のステップ６０６）。
【００６０】
符号８０４〜８０６で示す一連のインパルス応答データにおいても、符号８０１〜８０３で示した一連のインパルス応答データと同様の処理が実行される。符号８０４〜８０６で示すインパルス応答データについての処理は、それぞれ、符号８０１〜８０３で示すインパルス応答データについての処理に対応する。
【００６１】
符号８０７で示すインパルス応答データが処理対象のインパルス応答データＩｒｇ［ｐ］であると、ステップ６０５でＮｏと判断され、インパルス応答データＩｒｇ［ｐ］＝Ｉｒｏ［ｑ３］と、ディレイメモリ値ＤＭ［ｋ］とが乗算され、累算値ａｃｃに加算される（図６のステップ６０６）。
【００６２】
符号８０８〜８１０で示す一連のインパルス応答データにおいても、符号８０１〜８０３で示した一連のインパルス応答データと同様の処理が実行される。符号８０８〜８１０で示すインパルス応答データについての処理は、それぞれ、符号８０１〜８０３で示すインパルス応答データについての処理に対応する。
【００６３】
畳み込み演算が終了すると（ステップ６０４でＹｅｓ）、共鳴音生成部２０は、入力データバッファ２２に格納されたディレイメモリ値をシフトする。図７に示すように、共鳴音生成部２０は、パラメータｋを「ｎＴａｐ−１」に初期化して（ステップ７０１）、ｋ＝０となるまで（ステップ７０２でＹｅｓ）、以下の処理を実行する。
【００６４】
共鳴音生成部２０は、入力データバッファ２２中のディレイメモリ値ＤＭ［ｋ］を、ディレイメモリ値ＤＭ［ｋ−１］とするように、入力データバッファ２２の値を更新する（ステップ７０３）。その後、共鳴音生成部２０は、パラメータｋをディクリメントする（ステップ７０４）。
【００６５】
図９に示すように、入力データバッファ２２においては、ＤＭ「０」にある時刻ｔにおける最新の楽音信号データｘ（ｔ）が格納され、ＤＭ［１］、ＤＭ「２」、・・・、ＤＭ［ｎＴａｐ−１］の順で、それぞれ、過去の楽音信号ｘ（ｔ−１）、ｘ（ｔ−２）、・・・、ｘ（ｔ−（ｎＴａｐ−１））が格納されている（符号９００参照）。図７のステップ７０３においては、符号９０１で示すように、ＤＭ［ｋ］＝ＤＭ［ｋ−１］となるように、入力データバッファ２２を更新する。これにより、先頭のディレイメモリ値ＤＭ［０］に新たな値が入力可能な状態となる。図６のステップ６０３では、このＤＭ［０］として最新の楽音信号のデータｘｉｎが格納される。
【００６６】
ステップ７０２でＹｅｓと判断された場合には、共鳴音生成部２０は、累算値ａｃｃに所定の補正値ｃｏｎｓｔＡを乗算して、共鳴音データｙｏｕｔを生成する（ステップ７０５）。生成された共鳴音データｙｏｕｔは、共鳴音データバッファ２４に格納される。共鳴音データバッファ２４に格納された共鳴音データは、所定のタイミングで読み出され、ＤＡ変換された後、音響信号として増幅されスピーカなどから放音される。
【００６７】
本実施の形態によれば、後続するデータがインパルス応答データの値「０」が連続する数であることを示す識別子、インパルス応答データの値「０」が連続する数を示す値、および、実際のインパルス応答データの値によって、新たなインパルス応答データを構成している。これにより、インパルス応答データのデータ量を著しく小さくすることができる。
【００６８】
また、本実施の形態においては、前後の値より、その変動が閾値より大きいような極大値および極小値以外の元のインパルス応答データについては「０」として、データ量を削減している。極小値および極大値は、共鳴音の中でも、壁などを反射して伝わる反射音の特徴を現しているものと考えられる。前後の値より、その変動が閾値より大きいような極大値および極小値のみをインパルス応答データとして保持し、他のものは「０」とすることで、データ量を削減しつつ、再現性の良好な共鳴音を実現することが可能となる。
【００６９】
また、本実施の形態によれば、新たなインパルス応答データ中、実際に値が存在するもの（つまり値が「０」でないもの）についてのみ畳み込み演算が行われるため、共鳴音生成のための畳み込み演算の演算量を削減することができる。
【００７０】
次に、本発明の第２の実施の形態について説明する。第１の実施の形態において、新たなインパルス応答データＩｒｇは、次のインパルス応答データであるＩｒｇ［ｐ＋１］がゼロカウンタのカウント値ｚｃｎｔであることを示す識別子である「０」、ゼロカウンタのカウント値、および、元のインパルス応答データから構成される。
【００７１】
第２の実施の形態においては、新たなインパルス応答データは、識別子を省略し、ゼロカウンタのカウント値および元のインパルス応答データから構成されている。
【００７２】
第２の実施の形態にかかる共鳴音付加装置の構成も図１に示すものと同様であり、また、ハードウェア構成も図２に示すものと同様である。
【００７３】
図３および図１０は、第２の実施の形態にかかるインパルス応答の例を示すフローチャートである。第２の実施の形態においても、第１の実施の形態と同様に、インパルス応答生成部１８が、図３に示す処理を実行する。ステップ３０６でＹｅｓ或いはステップ３０７でＹｅｓの場合には、インパルス応答生成部１８は、新たなインパルス応答データＩｒｇ［ｐ］＝ｚｃｎｔとした（ステップ１００１）後に、パラメータｐをインクリメントする（ステップ１００２）。
【００７４】
次いで、インパルス応答生成部１８は、インクリメントされたパラメータｐについて、新たなインパルス応答データＩｒｇ［ｐ］＝Ｉｒｏ［ｎ］とする（ステップ１００３）。その後、インパルス応答生成部１８は、パラメータｐをインクリメントするとともに、ゼロカウンタのカウンタ値ｚｃｎｔを「０」に初期化する（ステップ１００４）。
【００７５】
このような処理により、新たなインパルス応答データにおいては、Ｉｒｇ［ｐ］、Ｉｒｇ［ｐ＋１］の順で、ゼロカウンタのカウント値ｚｃｎｔ、極大値或いは極小値であった元のインパルス応答データ（＝Ｉｒｏ［ｎ］）が、記憶部１６に格納される。すなわち、第２の実施の形態では、インパルス応答データの値「０」が連続する数を示す値と、それに引き続く実際のインパルス応答データの値とから新たなインパルス応答データは構成される。
【００７６】
図１１および図７は本実施の形態にかかる共鳴音生成処理は、第２の実施の形態にかかる共鳴音生成部によって実行される処理の例を示すフローチャートである。第２の実施の形態においても、入力データバッファの値のシフトに関する処理および共鳴音データｙｏｕｔの出力（図７）は、第１の実施の形態と同様である。
【００７７】
図１１に示すように、共鳴音生成部２０は、演算用のパラメータを「ｋ＝０」、「ｐ＝０」に初期化する（ステップ１１０１）。第１の実施の形態と同様に、パラメータ「ｋ」は入力データバッファ２２中のディレイメモリ値ＤＭ［ｋ］を特定する。また、パラメータ「ｐ」は、記憶部１６中のインパルス応答データＩｒｇ［ｐ］を特定する。
【００７８】
また、共鳴音生成部２０は、累算値「ａｃｃ＝０」とするとともに、入力データバッファ２２の先頭のディレイメモリ値ＤＭ［０］＝ｘｉｎにセットする（ステップ１１０２、１１０３）。ｘｉｎは、最新の楽音信号のデータである。これらの処理も第１の実施の形態と同様である。
【００７９】
次いで、共鳴音生成部２０は、ｋ≧ｎＴａｐになるまで（ステップ１１０４でＹｅｓ）、以下の処理を実行する。共鳴音生成部２０は、ｋ＝ｋ＋Ｉｒｇ［ｐ＋１］として、ディレイメモリ値ＤＭ［ｋ］を特定するパラメータ「ｋ」を更新する（ステップ１１０５）。その後、共鳴音生成部２０は、パラメータｐをインクリメントする（ステップ１１０６）。
【００８０】
次いで、共鳴音生成部２０は、累算値ａｃｃ＝ａｃｃ＋Ｉｒｇ［ｐ］×ＤＭ［ｋ］を算出する（ステップ１１０７）。つまり、共鳴音生成部２０は、第ｐ番のインパルス応答データＩｒｇ［ｐ］と第ｋ番のディレイメモリ値ＤＭ［ｋ］との積を累算値ａｃｃに加算する。
【００８１】
その後、共鳴音生成部２０は、パラメータｐおよびパラメータｋをそれぞれインクリメントし（ステップ１１０８、１１０９）、ステップ１１０４に戻る。また、ステップ１１０４でＹｅｓと判断された場合には、共鳴音生成部２０は、図７に示す処理を実行する。
【００８２】
図１１の処理においては、共鳴音生成部２０は、ステップ１１０５において、ディレイメモリ値ＤＭ［ｋ］を特定するパラメータｋが、インパルス応答データの値「０」が連続する数だけ増加される。その後、共鳴音生成部２０は、インクリメントしたパラメータｐ、および、ステップ１１０５で進められたパラメータｋを利用して、実際のインパルス応答データＩｒｇ［ｐ］と、ディレイメモリ値ＤＭ［ｋ］との乗算値を累算値に加算している（ステップ１１０７参照）。したがって、第２の実施の形態においても、インパルス応答データの値が「０」の場合に、インパルス応答データとディレイメモリＤＭ［ｋ］との乗算および累算値への加算を省略することができる。
【００８３】
第２の実施の形態によれば、インパルス応答データの値「０」が連続する数を示す値、および、実際のインパルス応答データによって、新たなインパルス応答データを構成している。これにより、インパルス応答データのデータ量を著しく小さくすることができる。前後の値より、その変動が閾値より大きいような極大値および極小値が連続すると、第１の実施の形態よりデータ量が大きくなるが、畳み込み演算において、識別子の有無の判断をする必要が無く、処理を単純化することが可能となる。
【００８４】
また、本実施の形態においては、前後の値より、その変動が閾値より大きいような極大値および極小値以外の元のインパルス応答データについては「０」として、データ量を削減している。極小値および極大値は、共鳴音の中でも、壁などを反射して伝わる反射音の特徴を現しているものと考えられる。前後の値より、その変動が所定なだけ大きいような極大値および極小値のみをインパルス応答データとして保持し、他のものは「０」とすることで、データ量を削減しつつ、再現性の良好な共鳴音を実現することが可能となる。
【００８５】
また、本実施の形態によれば、新たなインパルス応答データ中、実際に値が存在するものについてのみ畳み込み演算が行われるため、共鳴音生成のための畳み込み演算の演算量を削減することができる。
【００８６】
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【図面の簡単な説明】
【００８７】
【図１】図１は、本発明の実施の形態にかかる共鳴音付加装置の構成を示すブロックダイヤグラムである。
【図２】図２は、本実施の形態にかかる共鳴音付加装置のハードウェア構成を示すブロックダイヤグラムである。
【図３】図３は、本実施の形態にかかるインパルス応答データの生成処理の例を示すフローチャートである。
【図４】図４は、本実施の形態にかかるインパルス応答データの生成処理の例を示すフローチャートである。
【図５】図５は、本実施の形態にかかる新たなインパルス応答データの生成を説明するための図である。
【図６】図６は、本実施の形態にかかる共鳴音生成部によって実行される処理の例を示すフローチャートである。
【図７】図７は、本実施の形態にかかる共鳴音生成部によって実行される処理の例を示すフローチャートである。
【図８】図８は、本実施の形態にかかるインパルス応答データのデータ構成の例を示す図である。
【図９】図９は、本実施の形態にかかる入力データバッファの構成例を示す図である。
【図１０】図１０は、第２の実施の形態にかかるインパルス応答データの生成処理の例を示すフローチャートである。
【図１１】図１１は、第２の実施の形態にかかる共鳴音生成部によって実行される処理の例を示すフローチャートである。
【符号の説明】
【００８８】
１２        元のインパルス応答データ
１４        新たなインパルス応答データ
１６        記憶部
１８        インパルス応答生成部
２０        共鳴音生成部
２２        入力データバッファ
２４        共鳴音データバッファ
３０        ＣＰＵ
３２        ＲＯＭ
３４        ＲＡＭ
３６        入力装置
３８        表示装置
４０        サウンドシステム
４４        楽音生成回路
【図１】
2008299004.tif 000003
【図２】
2008299004.tif 000004
【図３】
2008299004.tif 000005
【図４】
2008299004.tif 000006
【図５】
2008299004.tif 000007
【図６】
2008299004.tif 000008
【図７】
2008299004.tif 000009
【図８】
2008299004.tif 000010
【図９】
2008299004.tif 000011
【図１０】
2008299004.tif 000012
【図１１】
2008299004.tif 000013