IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ カシオ計算機株式会社の特許一覧

<>
  • 特開-効果付与装置、方法、及びプログラム 図1
  • 特開-効果付与装置、方法、及びプログラム 図2
  • 特開-効果付与装置、方法、及びプログラム 図3
  • 特開-効果付与装置、方法、及びプログラム 図4
  • 特開-効果付与装置、方法、及びプログラム 図5
  • 特開-効果付与装置、方法、及びプログラム 図6
  • 特開-効果付与装置、方法、及びプログラム 図7
  • 特開-効果付与装置、方法、及びプログラム 図8
  • 特開-効果付与装置、方法、及びプログラム 図9
  • 特開-効果付与装置、方法、及びプログラム 図10
  • 特開-効果付与装置、方法、及びプログラム 図11
  • 特開-効果付与装置、方法、及びプログラム 図12
  • 特開-効果付与装置、方法、及びプログラム 図13
  • 特開-効果付与装置、方法、及びプログラム 図14
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024046785
(43)【公開日】2024-04-05
(54)【発明の名称】効果付与装置、方法、及びプログラム
(51)【国際特許分類】
   G10H 1/00 20060101AFI20240329BHJP
【FI】
G10H1/00 C
【審査請求】未請求
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2022152069
(22)【出願日】2022-09-26
(71)【出願人】
【識別番号】000001443
【氏名又は名称】カシオ計算機株式会社
(74)【代理人】
【識別番号】110004185
【氏名又は名称】インフォート弁理士法人
(74)【代理人】
【識別番号】100121083
【弁理士】
【氏名又は名称】青木 宏義
(74)【代理人】
【識別番号】100138391
【弁理士】
【氏名又は名称】天田 昌行
(74)【代理人】
【識別番号】100074099
【弁理士】
【氏名又は名称】大菅 義之
(74)【代理人】
【識別番号】100182936
【弁理士】
【氏名又は名称】矢野 直樹
(72)【発明者】
【氏名】横田 益男
【テーマコード(参考)】
5D478
【Fターム(参考)】
5D478DE01
(57)【要約】
【課題】音源で生成される楽音データに所定数のサンプルで構成されるブロック単位に基づく単位で音響効果を付与する効果付与技術に関し、楽音データにブロック単位で音響効果を付与する演算処理において、メモリの利用効率を向上させる。
【解決手段】ブロック単位で割込み起動されるブロック割込み処理内で実行されるブロック判定処理(ブロック判定処理部)において、楽音データがブロック単位で演算処理条件に合致したか否か、例えばオール0の値であるか否かを示すブロック管理情報に基づいてブロック単位で効果付与を行う演算処理部での演算処理を、例えば通常演算処理と単純なオール0値の出力処理等とで調整する。
【選択図】図10

【特許請求の範囲】
【請求項1】
音源で生成される楽音データにブロック単位で音響効果を付与する演算処理を実行する演算処理部と、
前記楽音データが前記ブロック単位で演算処理条件を満たしたか否かを示すブロック管理情報に基づいて前記演算処理部での前記演算処理を調整する演算制御処理部と、
を備える効果付与装置。
【請求項2】
前記ブロック単位において、前記ブロック管理情報が前記演算処理条件に合致したことを示している場合に、前記演算制御処理部は前記演算処理部に対して、前記音響効果を付与する演算処理の代わりに、所定数のサンプル値を有するデータを出力する処理を指示する、請求項1に記載の効果付与装置。
【請求項3】
前記演算処理は所定の演算フレームサンプル長の高速フーリエ変換演算を含み、
夫々の演算フレームにおいて、前記演算フレームに含まれる前記ブロック管理情報が前記演算処理条件に合致したことを示している場合に、前記演算制御処理部は前記演算処理部に対して、前記音響効果を付与する演算処理の代わりに、特定のサンプル値を有するデータを出力する処理を指示する、請求項2に記載の効果付与装置。
【請求項4】
前記演算処理条件は、前記ブロック内の全ての前記楽音データのサンプル値が前記特定のサンプル値であることである、請求項3に記載の効果付与装置。
【請求項5】
前記演算処理条件は、前記ブロック内の全ての前記楽音データのサンプルの振幅値の絶対値が閾値以下であることである、請求項3に記載の効果付与装置。
【請求項6】
前記楽音データが前記ブロック単位で演算処理条件を満たしたか否かを判定し、前記判定の結果をブロック管理情報として保持するブロック判定処理部をさらに備える、請求項1に記載の効果付与装置。
【請求項7】
音源で生成される楽音データにブロック単位で音響効果を付与する演算処理と、
前記楽音データが前記ブロック単位で演算処理条件に合致したか否かを示すブロック管理情報に基づいて前記演算処理を調整する演算制御処理と、
を実行する効果付与方法。
【請求項8】
前記演算処理条件は、前記ブロック内の全ての前記楽音データの振幅の絶対値が閾値以下であることである、請求項7に記載の効果付与方法。
【請求項9】
音源で生成される楽音データにブロック単位で音響効果を付与する演算処理と、
前記楽音データが前記ブロック単位で演算処理条件を満たしたか否かを示すブロック管理情報に基づいて前記演算処理を調整する演算制御処理と、
をコンピュータに実行させるためのプログラム。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、音源で生成される楽音データに所定数のサンプルで構成されるブロック単位に基づく単位で音響効果を付与する効果付与装置、方法、及びプログラムに関する。
【背景技術】
【0002】
楽音信号に対してインパルス応答を畳み込むことにより残響や共鳴効果等の音響効果を付与する効果付与装置において、その畳込み手段として、周波数領域で畳み込みを行なうFFT/iFFT(Fast Fourier Transform/inverse Fast Fourier Transform:高速フーリエ変換/逆高速フーリエ変換)を用いる技術(例えば特許文献1)が知られている。
この場合、インパルス応答の係数データ、楽音信号ともに、各FFTフレームは複数回用いられることになる。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2005-215058号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
電子楽器ではCPU(中央演算処理装置)、音源LSI(LSI:大規模集積回路)、及びDSP(デジタルシグナルプロセッサ)などがメモリをシェアした構成をとることが多いため、1つの処理のメモリ占有率が高い場合に、電子楽器全体でのパフォーマンスが低下してしまうという課題があった。
【0005】
そこで、本発明は、楽音データにブロック単位で音響効果を付与する演算処理において、メモリの利用効率を向上させることを目的とする。
【課題を解決するための手段】
【0006】
態様の一例の効果付与装置は、音源で生成される楽音データにブロック単位で音響効果を付与する演算処理を実行する演算処理部と、前記楽音データが前記ブロック単位で演算処理条件を満たしたか否かを示すブロック管理情報に基づいて前記演算処理部での前記演算処理を調整する演算制御処理部と、を備える。
を備える
【発明の効果】
【0007】
本発明によれば、楽音データにブロック単位で音響効果を付与する演算処理において、メモリの利用効率を向上させることが可能となる。
【図面の簡単な説明】
【0008】
図1】電子楽器の実施形態の例を示すブロック図である。
図2】電子楽器における楽音データの流れの例を示す図である。
図3】効果装置のブロック図である。
図4】CONV演算処理部の動作説明図(その1)である。
図5】CONV演算処理部の動作説明図(その2)である。
図6】CONV演算処理部の動作説明図(その3)である。
図7】FFT演算を用いた周波数域畳込み処理における処理遅延の説明図である。
図8】FIRフィルタ演算処理部とCONV演算処理部の処理関係を示す説明図である。
図9】メイン処理動作の制御処理例を示すメインフローチャートである。
図10】初期化処理とブロック割込み処理の詳細処理例を示すフローチャートである。
図11】ブロック判定処理の詳細処理例を示すフローチャートである。
図12】フレーム演算処理と演算処理の詳細処理例を示すフローチャートである。
図13】CONV演算処理部の動作説明図(その4)である。
図14】ブロック判定処理の他の詳細処理例を示すフローチャートである。
【発明を実施するための形態】
【0009】
以下、本発明を実施するための形態について図面を参照しながら詳細に説明する。本実施形態の電子楽器の効果付与部に用いられるフィルタ演算処理装置は、フィルタ次数を柔軟に変更可能なFIRフィルタ演算処理を実行することができ、また、フィルタ次数やインパルス応答特性が異なる複数のFIRフィルタ演算処理を、それらの組合せを柔軟に変更しながら同時に実行することが可能である。本実施形態における効果付与部は、このようなFIRフィルタ演算処理による時間域畳込み処理と、FFT演算を用いた周波数域畳込み処理とが組み合わされて実装される。この場合、周波数域畳込み処理におけるFFT点数と共にFIRのフィルタ次数を柔軟に決定することが可能となるため、電子楽器の楽音に、応答性を犠牲にすることなく、再現性の高い残響、共鳴効果を付与することが可能となる。
【0010】
図1は、電子楽器100の実施形態の例を示すブロック図である。電子楽器100は、少なくとも1つのCPU(中央演算処理装置)101と、ROM(リードオンリーメモリ)102と、RAM(ランダムアクセスメモリ)103と、音源(TG:Tone Generator)104と、DSP(Digital Signal Processor)である効果付与部105と、鍵盤106と、ペダル107と、操作子108が、システムバス109に接続された構成を有する。また、音源(TG)104の出力は、サウンドシステム110に接続される。効果付与部105は、後述する効果装置211を備えている。
【0011】
CPU101は、ROM102からRAM103にロードされた制御プログラムを実行することにより、鍵盤106や操作子108からの演奏操作情報に基づいて、音源104に発音指示を出す。
【0012】
音源(TG)104は、上記発音指示に従って、ROM102又はRAM103から波形データを読み出すことにより、楽音データを生成する。この楽音データは、効果付与部105を介して、サウンドシステム110に出力される。ここで、例えば操作者によってペダル107が踏まれると、効果付与部105が、楽音データにリバーブなどの残響音付与やピアノの弦の共鳴音付与などの効果付与を実行する。この結果、効果付与部105から出力された楽音データは、サウンドシステム110において、デジタル-アナログ変換器によってアナログ楽音信号に変換され、アナログアンプで増幅され、スピーカから放音される。
【0013】
図2は、図1の構成を有する電子楽器における楽音データの流れの例を示す図である。音源(TG)104は、CH1~CHnのnチャネルの発音チャネルの楽音データを生成する楽音生成部201(CH1)~201(CHn)を備え、それぞれ、操作者による鍵盤106での押鍵に基づいて発生する図1のCPU101からの発音指示に従い、押鍵毎に独立した楽音データを生成する。発音チャネルCHiに対応する楽音生成部201(CHi)(1≦i≦n)は、波形データを生成する波形生成部WG.CHi、生成された波形データの音色を加工するフィルタ処理部TVF.CHi、及び生成された波形データの振幅エンベロープを加工するアンプエンベロープ処理部TVA.CHiを備える。
【0014】
ミキシング部202内の4つのミキサ203、204、205、及び206はそれぞれ、各楽音生成部201(CHi)(1≦i≦n)が出力する各楽音データに所定のレベルを乗算した後に累算することにより得られる、Lch(左チャネル)直接音出力データ207、Rch(右チャネル)直接音出力データ208、Lch効果音入力データ209、及びRch効果音入力データ210をそれぞれ、効果付与部105に出力する。なお、図2において、各ミキサ203、204、205、及び206内の記号「*、Σ」は、入力したデータに対して所定のレベルを乗算後に累算して出力することを示している。
【0015】
Lch効果音入力データ209及びRch効果音入力データ210はそれぞれ、効果付与部105内の効果装置211において残響や共鳴などの効果が付与されたLch効果音出力データ212及びRch効果音出力データ213として出力される。効果付与部105内で、Lch効果音出力データ212は、Lch直接音出力データ207と加算され、Lch楽音出力データ214として、図1のサウンドシステム110に出力される。同様に、Rch効果音出力データ213は、Rch直接音出力データ208と加算され、Rch楽音出力データ215として、サウンドシステム110に出力される。サウンドシステム110では、デジタルデータであるLch楽音出力データ214及びRch楽音出力データ215はそれぞれ、Lchアナログ楽音信号及びRchアナログ楽音信号に変換されて、それぞれアナログアンプにより増幅されて、Lch及びRchの各スピーカから放音される。
【0016】
図3は、図2の効果付与部105内の効果装置211のブロック図である。効果装置211は、効果装置211(Lch)と効果装置211(Rch)とを有する。効果装置211(Lch)は、入力されたLch効果音入力データ209にLchの残響・共鳴効果を付与したLch効果音出力データ212を出力する。効果装置211(Rch)は、入力されたRch効果音入力データ210にRchの残響・共鳴効果を付与したRch効果音出力データ213を出力する。両者とも同じ構成であるため、以下、特に言及しない場合は、Lch及びRchの区別なく説明する。効果装置211(Lch)(効果装置211(Rch))は、FIRフィルタ演算処理部303及びCONV演算処理部304を備えている。
【0017】
効果装置211に入力するLch効果音入力データ209又はRch効果音入力データ210は、FIRフィルタ演算処理部303とCONV演算処理部304とに並列に入力する。FIRフィルタ演算処理部303は、残響・共鳴音のインパルス応答データの前半データ部分をサンプリング周期単位の時間域処理により、Lch効果音入力データ209又はRch効果音入力データ210(原音)に畳み込む時間域畳込み部である。演算処理部であるCONV演算処理部304は、上記インパルス応答データの後半データ部分を、所定数のサンプルで構成されるブロック単位のFFT演算を用いた周波数域処理により、Lch効果音入力データ209又はRch効果音入力データ210(原音)に畳み込む周波数域畳込み部である。FIRフィルタ演算処理部303とCONV演算処理部304は、図2の効果付与部105であるDSP内に実装されているRAM306を共通領域として使用しながら、演算処理を実行する。
【0018】
FIRフィルタ演算処理部303とCONV演算処理部304の各出力は加算部305で加算されて、Lch効果音出力データ212又はRch効果音出力データ213として出力される。
【0019】
図4から図7は、図3のCONV演算処理部304の動作説明図である。まず、図4は、ブロックサイズがN点の畳込み例を示している。FFT演算を用いた畳込みはそのままでは巡回畳込みとなるため、本実施形態では、インパルス応答データ(coef)と、Lch効果音入力データ209又はRch効果音入力データ210(以下、LchとRchを区別せずにこれらをまとめて効果音入力データ(sig)と呼ぶ)とを2N点でそれぞれFFT演算する際に、各ブロックの線状畳込みが得られるようにする。
【0020】
ここでは、2N点の各FFT演算403、404に先だって、401として示されるように、N点のインパルス応答データ(coef)(太枠部分)にN点のゼロデータ(細枠部分)が付加されて2N点のデータとされる。また、402として示されるように、効果音入力データ(sig)がブロックサイズN点分シフトされながらオーバーラップされて(太枠部分→破線太枠部分)2N点のデータとされる。そして、インパルス応答データ(coef)から生成された上記2N点のデータ401と効果音入力データ(sig)から生成された上記2N点のデータ402とに対して、それぞれ403及び404として示されるようにFFT演算が実行される結果、周波数領域の2N点のデータ405及び406が得られる。
【0021】
続いて、407として示されるように、周波数領域の2N点のデータ405及び406が各周波数点毎に複素乗算されることにより、2N点の複素乗算結果データ408が得られる。
【0022】
更に、409として示されるように、2N点の複素乗算結果データ408に対してiFFT(逆高速フーリエ変換)演算が実行される結果、畳込みが行われた2N点の時間域データ410が得られる。
【0023】
そして、2N点の時間域データ410のうちの前半のN点のデータ(太枠部分)が、ブロックサイズがN点の重畳保留法での線状畳込み結果となり、このようにして生成されるブロックサイズN点ずつのデータが図3のLch効果音出力データ212又はRch効果音出力データ213として出力される。
【0024】
図5は、インパルス応答データ(coef)側もブロックサイズN点ずつ分割される場合の、ブロックサイズがN点の畳込み例を示している。この例では、各N点毎の畳込み結果が足し合わせられることで、長い時間のインパルス応答もN点ずつの小さなブロックに分割して畳込み演算を実行することができる。
【0025】
図5において、501として示されるように、インパルス応答データ(coef)が、それぞれのブロックサイズがNずつの例えば分割データN1、N2、N3、N4に分割される。また、502として示されるように、効果音入力データ(sig)も、それぞれのブロックサイズがNずつの例えば分割データN1、N2、N3、N4に分割される。
【0026】
その後は、図4の場合と同様にして、2N点の各FFT演算505、506に先だって、503として示されるように、インパルス応答データ(coef)中の上述のように分割されたN点の分割データ(太枠部分)にN点のゼロデータが付加されて2N点のデータとされる。また、504として示されるように、効果音入力データ(sig)が上述のように分割されて得られるブロックサイズN点分ずつシフトされながらオーバーラップされて(太枠部分→破線太枠部分)2N点のデータとされる。そして、インパルス応答データ(coef)を分割したN点のデータから生成された上記2N点のデータ503と効果音入力データ(sig)から生成された上記2N点のデータ504とに対して、それぞれ505及び506として示されるようにFFT演算が実行される結果、周波数領域の2N点のデータ507及び508が、509及び510のように順次2N点ずつ得られる。ここで、インパルス応答データ(coef)の分割データN1、N2、N3、N4(図5の501)から生成される2N点ずつの周波数データ群509(N1、N2、N3、N4)は、インパルス応答データ(coef)に変化がない限り、FFT演算により演算しメモリにプリセットしておくことができる。また、効果音入力データ(sig)から生成される2N点ずつの周波数データ群510は、インパルス応答データ(coef)に対応する周波数データ群509(N1、N2、N3、N4)と同じ分割データ数分だけ、t(N)、t(N-1)、t(N-2)、t(N-3)というようにリングバッファ形式で順次メモリに記憶されてよい。
【0027】
続いて、511として示されるように、周波数データ群509(N1、N2、N3、N4)と周波数データ群510(t(N)、t(N-1)、t(N-2)、t(N-3))とが、2N点ずつ各周波数点毎に複素乗算されることにより、それぞれ2N点の複素乗算結果データN1*t(N)、N2*t(N-1)、N3*t(N-2)、N4*t(N-3)が得られ、更にこれらに対してiFFT演算が実行される結果、畳込みが行われた2N点ずつの時間域データ513が得られる。
【0028】
そして、2N点ずつの時間域データ513のうちのそれぞれ前半のN点ずつのデータ(太枠部分)が、図3のLch効果音出力データ212又はRch効果音出力データ213として出力される。
【0029】
図6は、図3のCONV演算処理部304の動作を説明するための簡単な計算例を示した図である。
【0030】
例えば、
conv(coef=[2 3 4 5 6 7 8 9]
sig=[1 2 3 4 5 6 7 8 9 10]
をブロックサイズN=2で計算した場合、畳込み結果の9番目と10番目は、200と244になるが、これを求めるためには、
ifft(fft([0 0 2 3])*fft([7 8 9 10]))
ifft(fft([0 0 4 5])*fft([5 6 7 8]))
ifft(fft([0 0 6 7])*fft([3 4 5 6]))
ifft(fft([0 0 8 9])*fft([1 2 3 4]))
の各計算結果の前半部分を足し合わせればよい。
なお、「fft()」及び「ifft()」はそれぞれ、括弧内のデータ群に対するFFT演算及びiFFT(逆FFT)演算を示す。
【0031】
上記演算例により、FFT演算を使った線状畳込みを実現できるが、FFT演算はブロック単位で計算が実行されるため、ブロックの頭で遅延が生じてしまう。図7は、FFT演算を用いた周波数域畳込み処理における処理遅延の説明図である。
【0032】
例えば、ブロック区間T1では、N1ブロックのデータが入力され、また後述する特定処理に分岐するための条件判定が行われる。次のブロック区間T2の先頭でブロック単位の割込みが発生すると、N2ブロックのデータの入力、及び後述する特定処理に分岐するための条件判定が行われると共に、N1ブロックのデータの畳込み処理(FFT演算、複素乗算、及びiFFT演算)が実行される。更に続くブロック区間T3の先頭でブロック単位の割込みが発生すると、N3ブロックの入力、及び後述する特定処理に分岐するための条件判定が行われると共に、N2ブロックのデータの畳込み処理と、N1ブロックのデータの出力処理が実行される。更に、ブロック区間T4の先頭でブロック単位の割込みが発生すると、N4ブロックの入力、及び後述する特定処理に分岐するための条件判定が行われると共に、とN3ブロックのデータの畳込み処理と、N2ブロックのデータの出力処理が実行される。続いて、ブロック区間T5の先頭でブロック単位の割込みが発生すると、N5ブロックの入力、及び後述する特定処理に分岐するための条件判定が行われると共に、とN4ブロックのデータの畳込み処理と、N3ブロックのデータの出力処理が実行される。
【0033】
図7に示されるタイミング関係からわかるように、FFT演算を使った線状畳込み処理では、701として示されるように、ブロックサイズNに対して2Nの処理遅延が発生する。そこで、図3の効果装置211では、CONV演算処理部304で発生する上記2Nの処理遅延をカバーするために、フィルタ次数=2NのFIRフィルタ演算処理部303が実装される。
【0034】
FIRフィルタ演算処理部303は、夫々が乗算処理部、累算処理部、及び遅延処理部とで構成されるフィルタ演算部がフィルタ次数に対応する個数縦属接続された構成を有する。
【0035】
また、効果音入力データの信号入力は、図2の音源(TG)104内のミキシング部202内のミキサ205又は206から、サンプリング周期単位で行われる。
【0036】
各次のフィルタ演算部は、サンプリング周期内で、その周期を細分化した周期を有するクロックに同期して実行され、全次数でのFIR演算処理及び最終段の累算処理部からの畳込み結果データの出力は、そのサンプリング周期内で完了する。これにより、図3のFIRフィルタ演算処理部303での畳込み処理では、遅延が生じない。
【0037】
図8は、FIRフィルタ演算処理部303とCONV演算処理部304の処理関係を示す説明図である。この図から理解されるように、FIRフィルタ演算処理部303のフィルタ次数がCONV演算処理部304のFFTサイズ(ブロックサイズNの2倍)に等しければ、CONV演算処理部304での処理遅延の影響は無視できる。
即ち、効果音入力データの最初の2NサンプルがFIRフィルタ演算処理部303に入力されると同時に、効果音入力データが、Nサンプルずつシフトされながら2NサンプルずつCONV演算処理部304に入力されるようにする。そして、図8に示されるように、まず、FIRフィルタ演算処理部303で、効果音入力データの最初の2Nサンプルに対して、サンプリング周期毎に効果音(例えば残響音又は共鳴音)のインパルス応答データの最初の2Nサンプルを畳込み演算して得られる、2Nサンプル分の畳込み結果データが、サンプリング周期毎に遅延なく出力される。また、CONV演算処理部304で、効果音入力データをNサンプルずつオーバーラップさせながら入力した2Nサンプル分ずつに対して、効果音のインパルス応答データの2N+1サンプル以降のNサンプル+値0のNサンプル=2Nサンプル分ずつを周波数域で畳込み演算して得られる、Nサンプル分ずつの畳込み結果データが、2Nサンプル分ずつ遅延して順次出力される。従って、図3の加算部305から、FIRフィルタ演算処理部303からの最初の2Nサンプル分の畳込み結果データを出力させるのに続き、CONV演算処理部304から順次出力されるNサンプル毎の畳込み結果データをサンプリング周期毎に順次出力させることにより、効果音入力データの全体に対してインパルス応答データを畳込み演算した効果音出力データ(Lch効果音出力データ212又はRch効果音出力データ213)を、図3の効果装置211から遅延なく出力することが可能となる。
【0038】
図9は、図2の効果装置211を実現するために図1のCPU101が実行するメイン処理動作の制御処理例を示すフローチャートである。この制御処理は、CPU101がROM102からRAM103にロードさせた制御処理プログラムを実行する動作である。
【0039】
図1の電子楽器100において、操作子108の電源スイッチがオンされた後、CPU101は、図9のメインフローチャートで示される制御処理の実行を開始する。CPU101はまず、初期化処理を実行する(ステップS901)。図10(a)は、図9のステップS901の初期化処理の詳細処理例を示すフローチャートである。
【0040】
初期化処理において、CPU101は、図1のRAM103の記憶内容、音源(TG)104の状態、電子楽器100の状態等の初期化を行う(図10(a)のステップS1001)。
【0041】
次に、CPU101は、データの状態を示すフラグF2、F1を初期化する(図10(a)のステップS1002)。F2は、F1の1つ前の割込みタイミングでのデータの状態を示すフラグである。これらのフラグF1、F2が値1の場合、対応する割込みタイミングにおける入力データ列(図2のLch効果音入力データ209又はRch効果音入力データ210)の値が0であることを示し、値0の場合、上記入力データ列に0以外の値があることを示している。
【0042】
続いて、CPU101は、ブロック単位の割込み(図7参照)を許可する(図10(a)のステップS1003)。
【0043】
図9のフローチャートの説明に戻り、ステップS901での上述した初期化処理の後、CPU101は、電源スイッチがオフされるまで或いは操作者による演奏が終了すると判定するまで、ステップS902からS907の一連の処理を繰り返し実行する。
【0044】
上記繰返し処理において、CPU101はまず、スイッチ処理を実行する(ステップS902)。ここでは、CPU101は、図1の操作子108の操作状態を検出する。
【0045】
次に、CPU101は、操作者による押鍵を検出する押鍵検出処理を実行する(ステップS903)。ここでは、CPU101は、図1の鍵盤106の押鍵状態を検出する。
【0046】
次に、CPU101は、操作者によるペダル操作を検出するペダル検出処理を実行する(ステップS904)。ここでは、CPU101は、図1のペダル107の操作状態を検出する。
【0047】
次に、CPU101は、効果処理を実行する(ステップS905)。ここでは、CPU101は、ステップS902での例えば残響や共鳴効果を付与するための操作子108の操作状態の検出結果と、ステップS904でのペダル107の操作状態の検出結果とに基づいて、効果付与部105に、音源(TG)104が生成する図2のLch効果音入力データ209及びRch効果音入力データ210に対して、図3の効果装置211(Lch)及び効果装置211(Rch)による音響効果の付与処理を実行させる。
【0048】
次に、CPU101は、その他の処理を実行する(ステップS906)。ここでは、CPU101は、例えば楽音エンベロープの制御処理等を実行する。
【0049】
そして、CPU101は、発音処理を実行する(ステップS907)。ここでは、CPU101は、ステップS903での押鍵検出処理での鍵盤106の押鍵又は離鍵の状態に基づいて、音源(TG)104に対して発音又は消音の指示を行う。
【0050】
本実施形態では、図1の効果付与部105における効果装置211内のCONV演算処理部304での演算処理は、図1のCPU101からNサンプルのサンプリング時間毎に発生するブロック単位の割込み(図7参照)に基づいて実行される。このように、CPU101は、内部のクロックと与えられた楽音のテンポ等に基づいて、図1及び図2の音源(TG)104から夫々NサンプルのLch直接音出力データ207及びRch直接音出力データ208が出力される毎に、ブロック割込みを発生させる。CPU101は、このブロック割込みが発生すると、図9のメイン処理の動作を中断して、ブロック割込み処理を実行する。
【0051】
図10(b)は、CPU101がブロック割込み発生時に実行するブロック割込み処理の詳細処理例を示すフローチャートである。このブロック割込み処理において、まずCPU101は、ブロック判定処理を実行する(図10(b)のステップS1010)。
【0052】
図4から図7の説明で前述したように、図3のCONV演算処理部304での処理では、音源(TG)104から効果付与部105に入力される楽音データであるLch効果音入力データ209及びRch効果音入力データ210は、Nサンプルというブロック単位で更新され、そのブロック単位の2倍の単位である2Nという演算フレームサンプル長で、FFTを含む演算処理が実行されることにより、音響効果が付与される。この場合に、CPU101は、ブロック判定処理部として動作する図10のステップS1010のブロック判定処理において、データ209又はデータ210が、ブロック=Nサンプル単位で演算処理条件を満たしたか否か、より具体的には、ブロック内の全てのデータサンプル値が0であるという条件に合致したか否かを判定し、その判定の結果をブロック管理情報として保持する。ブロック管理情報は例えば、1つ前及び現在のブロックの各判定の結果を、値1(演算処理条件に合致する場合)又は値0(演算処理条件に合致しない場合)として、例えば図1のRAM上の各変数データであるフラグF2及びフラグF1に保持した情報である。
【0053】
図11は、図10(b)のステップS1010のブロック判定処理の詳細処理例を示すフローチャートである。図11のフローチャートの処理において、CPU101はまず、CPU101のレジスタRJ1の値と、図1のRAM103上の変数データである変数iの値を、それぞれ0にリセットする(図11のステップS1101)。
【0054】
次に、CPU101は、レジスタRJ1と、図3のCONV演算処理部304に入力すべきLch効果音入力データ209又はRch効果音入力データ210であるRAM103に一時記憶されるNサンプル分のブロック単位の各サンプルのデータ[i](0≦i≦N-1)とで、演算「(RJ1|データ[i])」として各データの対応するビット毎のOR(論理和)演算を実行し、各ビットのOR演算の結果を、レジスタRJ1に格納し直す(図11のステップS1102)。
【0055】
その後、CPU101は、RAM103上の変数iの値を+1インクリメントする(ズ11のステップS1103)。
【0056】
そして、CPU101は、変数iの値がNより小さいか否かを判定する(図11のステップS1104)。
【0057】
ステップS1104の判定がYESならば、CPU101は、ステップS1102の処理に戻って判定処理を続行する。
【0058】
やがて、処理したサンプルがブロックサイズNのサンプル数を超えてステップS1104の判定がNOとなったら、CPU101は、レジスタRJ1の値が0であるか(全ビットが0であるか)否かを判定する(図11のステップS1105)。
【0059】
ステップS1105の判定がNOならば、CPU101は、RAM103上のフラグF1に値0を格納してフラグをoffする(図11のステップS1106)。
【0060】
ステップS1105の判定がYESならば、CPU101は、RAM103上のフラグF1に値1を格納してフラグをonする(図11のステップS1107)。
【0061】
図10(b)のブロック割込み処理の説明に戻り、CPU101は、図11で説明したステップS1010のブロック判定処理に続いて、フレーム演算処理を調整し、実行する(図10(b)のステップS1011)。
【0062】
図12(a)は、演算制御処理部として動作する図10のステップS1011のフレーム演算処理の詳細処理例を示すフローチャートである。図12(a)のフローチャートの処理において、CPU101はまず、図11のフローチャートで示される図10のステップS1010のブロック判定処理においてRAM103上のフラグF1の値が1、即ち、現在のブロックのデータが演算処理条件に合致しており(値がオール0であり)、かつ、RAM103上のフラグF2の値も1,即ち、1つ前のブロックのデータが演算処理条件に合致している(値がオール0である)か否かを判定する(図12(a)のステップS1201)。
【0063】
ステップS1201の判定がNOならば、CPU101は、現在のブロックと1つ前のブロックとからなる2Nサンプル分のFFTフレームが、値がオール0ではないことを示す非特定フレームの情報を、RAM103上の変数FLに格納する(図12(a)のステップS1202)。
【0064】
一方、ステップS1201の判定がYESならば、CPU101は、現在のブロックと1つ前のブロックとからなる2Nサンプル分のFFTフレームが値がオール0であることを示す特定フレームの情報を、変数FLに格納する(図12(a)のステップS1203)。
【0065】
その後、CPU101は、図1の効果付与部105内の図2の効果装置211内の図3のCONV演算処理部304に対して、上記変数FLの内容に応じた調整された演算処理を実行させる(図12(a)のステップS1204)。
【0066】
図12(b)は、図12(a)のステップS1204の演算処理の詳細処理例を示すフローチャートである。まずCPU101は、RAM103上の変数FLに特定フレームを示す情報が格納されているか否かを判定する(図12(b)のステップS1210)。
【0067】
ステップS1210の判定がNOならば、CPU101は、図1の効果付与部105内の図2の効果装置211内の図3のCONV演算処理部304に対して、図4から図6の説明で前述した通常の畳み込み演算処理を実行させる通常演算の実行を指示する(図12(b)のステップS1211)。
【0068】
一方、ステップS1210の判定がYESならば、CPU101は、CONV演算処理部304に対して、上記通常の畳み込み演算処理とは異なる演算処理、例えば、所定のサンプル値、より具体的にはオール0の値を有する2Nサンプル分のFFTフレームデータを出力させる特定フレーム処理の実行を指示する(図12(b)のステップS1212)。このように、CPU101は、通常演算を実行するか、通常の畳み込み演算処理とは異なる演算処理を実行するかを調整する。
【0069】
図13は、上述の特定フレーム処理を含むCONV演算処理部304の動作説明図である。前述した図6の動作説明図は、そのような特定フレーム処理は含まずに全て通常演算が実行される場合の例であった。これに対して、図13の動作説明図において、図6の場合と同様にブロックサイズN=2で計算した場合を考え、データとして、例えば、
conv(coef=[2 3 4 5 6 7 8 9]
sig=[1 2 0 0 0 0 0 0 9 10])
が入力した場合を考える。括弧内の数値は模式的に振幅値を表している。このように、楽音データsigには、特定処理に対応する状態として、3サンプル目から8サンプル目まで値0が入力されている。
【0070】
この場合に例えば、図13(a)のブロック割込みのタイミングにおいて、図3のLch効果音入力データ209又はRch効果音入力データ210に対応する入力データdataとして2NサンプルからなるFFTフレーム[0 0 1 2]が演算対象とされた場合、現在のブロックデータ[1 2]は入力データdataの先頭で1つ前のブロックデータは存在せず便宜的にオール0=[0 0]が挿入されるため、図10(a)のステップS1002の初期化処理により、フラグF2=1と初期設定されたままとなる。
一方、現在のブロックの入力データdata=[1 2]はオール0の値ではないため、図11のブロック判定処理のステップS1101→ステップS1102~ステップS1104のN=2回の繰返し処理→ステップS1105→ステップS1106により、フラグF1=0に設定される。従って、図13(a)のブロック割込みタイミングでの2N=4サンプルの入力データdata=[0 0 1 2]によって表される1番目のFFTフレームは、フラグ(F2,F1)=(0,1)となって、図12(a)のステップS1201→S1202により非特定フレームとなる。この結果、係数coef=[0 0 2 3]と入力データdata=[0 0 1 2]との間では、図12(b)のステップS1210→S1211により通常演算処理が指示される。
この通常演算処理では、CPU101は、CONV演算処理部304に対して、図4から図6を用いて前述した通常の畳み込み演算処理の実行を指示する。
【0071】
次に例えば、図13(b)のブロック割込みのタイミングにおいて、図13(a)のブロック割込みのタイミングの入力データdataがN=2サンプルシフトして、入力データdataとして2NサンプルからなるFFTフレーム[1 2 0 0]が演算対象とされたとき、1つ前のブロックデータ[1 2]は値がオール0ではなくそのフラグF2には、図13(a)のブロック割込みタイミングにおいて図12(a)のフレーム演算処理のステップS1205によりフラグF1からコピーされた値0がセットされている。
また、現在のブロックの入力データdata=[0 0]は値がオール0であるため、図11のブロック判定処理のステップS1101→ステップS1102~ステップS1104のN=2回の繰返し処理→ステップS1105→ステップS1107により、フラグF1=1に設定される。従って、図13(b)のブロック割込みタイミングでの2N=4サンプルの入力データdata=[1 2 0 0]によって表される2番目のFFTフレームは、フラグ(F2,F1)=(1,0)となって、図12(a)のステップS1201→S1202により非特定フレームとなる。この結果、係数coef=[0 0 2 3]と入力データdata=[1 2 0 0]との間では、図12(b)のステップS1210→S1211により前述した通常演算が指示される。
この通常演算処理では、図13(a)のブロック割込みタイミングの場合と同様に、CPU101は、CONV演算処理部304に対して、図4から図6を用いて前述した通常の畳み込み演算処理の実行を指示する。
【0072】
続いて例えば、図13(c)のブロック割込みのタイミングにおいて、図13(b)のブロック割込みのタイミングの入力データdataがN=2サンプルシフトして、入力データdataとして2NサンプルからなるFFTフレーム[0 0 0 0]が演算対象とされた場合、1つ前のブロックデータ[0 0]は値がオール0でそのフラグF2には、図13(b)のブロック割込みタイミングにおいて図12(a)のフレーム演算処理のステップS1205によりフラグF1からコピーされた値1がセットされている。
また、現在のブロックの入力データdata=[0 0]は値がオール0であるため、図11のブロック判定処理のステップS1101→ステップS1102~ステップS1104のN=2回の繰返し処理→ステップS1105→ステップS1107により、フラグF1=1に設定される。従って、図13(b)のブロック割込みタイミングでの2N=4サンプルの入力データdata=[0 0 0 0]によって表される3番目のFFTフレームは、フラグ(F2,F1)=(0,0)となって、図12(a)のステップS1201→S1203により、特定フレームとなる。この結果、係数coef=[0 0 2 3]と入力データdata=[0 0 0 0]との間では、図12(b)のステップS1210→S1212により特定フレーム処理が実行される。
この特定フレーム処理では、CPU101は、CONV演算処理部304に対して、オール0の値を有する2Nサンプル分のFFTフレームデータを出力させる。従って、この3番目のFFTフレームの処理においては、乗算のために必要であったメモリが解放され、他の処理がその空きスロットを利用できるようになり、効果付与部105におけるメモリの利用効率を向上させることが可能となる。
【0073】
更に続いて例えば、図13(d)のブロック割込みのタイミングにおいて、図13(c)のブロック割込みのタイミングの入力データdataがN=2サンプルシフトして、入力データdataとして2NサンプルからなるFFTフレーム[0 0 0 0]が演算対象とされた場合、1つ前のブロックデータ[0 0]は値がオール0でそのフラグF2には、図13(c)のブロック割込みタイミングにおいて図12(a)のフレーム演算処理のステップS1205によりフラグF1からコピーされた値1がセットされている。
また、現在のブロックの入力データdata=[0 0]は値がオール0であるため、図11のブロック判定処理のステップS1101→ステップS1102~ステップS1104のN=2回の繰返し処理→ステップS1105→ステップS1107により、フラグF1=1に設定される。従って、図13(b)のブロック割込みタイミングでの2N=4サンプルの入力データdata=[0 0 0 0]によって表される4番目のFFTフレームは、フラグ(F2,F1)=(0,0)となって、図12(a)のステップS1201→S1203により、特定フレームとなる。この結果、係数coef=[0 0 2 3]と入力データdata=[0 0 0 0]との間では、図12(b)のステップS1210→S1212により特定フレーム処理が指示される。
図13(d)のブロック割込みタイミングにおいて実行される特定フレーム処理では、図13(c)のブロック割込みタイミングにおいて実行された特定フレーム処理の場合と同様に、CPU101は、CONV演算処理部304に対して、オール0の値を有する2Nサンプル分のFFTフレームデータを出力させる。従って、この4番目のFFTフレームの処理においても、3番目のFFTフレームの処理の場合と同様に、乗算のために必要であったメモリが解放され、他の処理がその空きスロットを利用できるようになり、効果付与部105におけるメモリの利用効率を向上させることが可能となる。
【0074】
以下同様に、図13の動作説明図において、(e)、(f)、(g)、(h)、(k)、(l)、(m)、(n)、(q)、(r)、(s)、(t)、(w)、及び(x)のブロック割込みタイミングにおいては、CPU101は、CONV演算処理部304に対して、図4から図6を用いて前述した通常の畳み込み演算処理の実行を指示する。
一方、図13の動作説明図において、(i)、(j)、(o)、(p)、(u)、及び(v)のブロック割込みタイミングにおいては、CPU101は、CONV演算処理部304に対して、特定フレーム処理を指示し、オール0の値を有する2Nサンプル分のFFTフレームデータを出力させる。従って、これらのFFTフレームの処理においては、乗算のために必要であったメモリが解放され、他の処理がその空きスロットを利用できるようになり、効果付与部105におけるメモリの利用効率を向上させることが可能となる。
【0075】
図14は、図10のブロック割込み処理におけるステップS1010のブロック判定処理の他の詳細処理例を示すフローチャートである。図14において、図11の場合と同じ処理を実行する処理には、同じステップ番号を付してある。
【0076】
前述した図11のブロック判定処理の詳細処理例では、図11のステップS1102において、CPU101は、レジスタRJ1と、Nサンプル分のブロック単位の各サンプルのデータ[i](0≦i≦N-1)とで、演算「(Rj1|データ[i])」として各データの対応するビット毎のOR(論理和)演算を実行し、各ビットのOR演算の結果を、レジスタRJ1に格納し直す処理を繰り返すことにより、Nサンプル分のブロック単位の全てのサンプルのデータ[i](0≦i≦N-1)がオール0の値であることを検出し、特定フレームを検出した。
【0077】
これに対して図14のブロック判定処理の他の詳細処理例では、CPU101はまず、図14のステップS1401において、レジスタRJ1と、Nサンプル分のブロック単位の各サンプルのデータ[i](0≦i≦N-1)の模式的な振幅値の絶対値を演算した結果とで、演算「(Rj1|abs(データ[i]))」として各データの対応するビット毎のOR(論理和)演算を実行し、各ビットのOR演算の結果を、レジスタRJ1に格納し直す処理を繰り返す。ここで、「abs()」は、括弧内の数値の絶対値を演算する処理を表している。
【0078】
次に、CPU101は、ステップS1401→S1103→S1104→S1401のブロック全体のNサンプル分の繰返し処理によりレジスタRJ1に得られた値と、特定の閾値以下の値に対応するビットが0で、その閾値よりも大きい値に対応するビットが1であるマスキングデータThとで、「(RJ1&Th)」で示されるビット毎のAND(論理積)演算を実行し、各ビットのAND演算の結果を、レジスタRJ1に格納し直す処理を実行する(図14のステップS1402)。
【0079】
そして、CPU101は、図11のステップS1105からステップS1107の場合と同様にして、ステップS1402により得られたレジスタRJ1の値が0(全ビットが0)であれば、RAM103上のフラグF1に値1を格納してフラグをonし(図14のステップS1105の判定がYES→S1107)、そうでなければ、フラグF1に値0を格納してフラグをoffする(図14のステップS1105の判定がNO→S1106)。
【0080】
上述の図14のブロック判定処理の他の詳細処理例では、Nサンプル分のブロック単位のデータ[i](0≦i≦N-1)の値が、オール0ではなく小さな値を有している程度であれば、「(RJ1&Th)」で示されるビット毎のAND(論理積)演算により、レジスタRJ1に得られた小さな値の累積値が、マスキングデータThの上位ビット=1、下位ビット=0のマスキングデータの0値の下位ビットによってマスキングされて、その結果が0となり、レジスタRJ1に再設定されて、ステップS1105の判定がYESとなって、フラグF1=1、即ち特定フレームと判定される。
【0081】
一方、Nサンプル分のブロック単位のデータ[i](0≦i≦N-1)の値の何れかが大きな値を有していれば、「(RJ1&Th)」で示されるビット毎のAND(論理積)演算により、レジスタRJ1に得られた大きな値の累積値が、マスキングデータThの上位ビット=1とのAND演算によりマスキングされきれずに値として残ってしまい、その値がレジスタRJ1に再設定される結果、ステップS1105の判定がNOとなって、フラグF1=0、即ち非特定フレームと判定される。
【0082】
以上のようにして、図14のブロック判定処理の他の詳細処理例では、ブロック単位のデータ[i](0≦i≦N-1)が微小な値を有している程度であれば、特定フレームと判定することにより、CONV演算処理部304における演算処理をより削減することが可能となり、効果付与部105全体の利用効率を向上させることが可能となる。
【0083】
特には図示しないが、更に別の変形例として、ブロックがマスキングデータThで規定される閾値を跨いだ場合を検出して、閾値を跨ぐ場合は、入力するブロック単位のデータに対してエンベロープに相当するレベル操作を行ってから、特定フレーム処理を行うようにしてもよい。
【0084】
同様の意図で、入力の前段にノイズゲート処理を追加する形も考えられる。
【0085】
更に、ここまで説明した実施形態では、図2のLch効果音入力データ209又はRch効果音入力データ210を音源(TG)104から効果付与部105に受け渡す時にブロック判定を行っているが、音源(TG)104での楽音生成時にフラグ情報F1を生成して受け渡す形式としてもよい。
【0086】
また、上述の実施形態では、ブロック単位の演算処理としてFFTを使用した畳込み演算処理を例示したが、効果処理を行う場合でも、ブロック単位で所定条件の判定を行い、通常の演算か、特定フレーム処理を行うかを調整するようにしてもよい。同一ブロックを並列処理する場合などでも有効である。
【0087】
以上説明したようにして、本実施形態によれば、音源、CPU、効果付与部等でメモリを共有するような場合に、ブロック単位又はそれに基づくフレーム等の単位で楽音データが演算処理条件に合致したか否かを判定し、その判定の結果をブロック管理情報として保持し、そのブロック管理情報に基づいて音響効果を付与する演算処理を間引く等することにより、メモリアクセスを減少させるようにした。この結果、メモリスロットに空きができるので、他の処理が空いたスロットを使うことができ、効果付与装置全体の処理効率を向上させることが可能となる。
同一処理内容を行う場合はメモリアクセスが減るため、メモリが外部高速メモリなどの場合では電気的にも有利になる。
また、以上の説明では、本発明の音声出力音出力制御に係るプログラムをROM102に格納していることを示したが、これに限らず、コンピュータ読み取り可能な媒体としてフラッシュメモリなどの不揮発性メモリなどを適用してもよく、その他のコンピュータ読み取り可能な媒体として、MRAMなどの他の不揮発性メモリ、HDD(Hard Disk Drive)や、CD-ROM、DVDディスクなどの可搬型記録媒体を適用することが可能である。また、本発明に係るプログラムのデータを通信回線を介して提供する媒体として、キャリアウェーブ(搬送波)も本発明に適用される。
その他、上記実施の形態で示した具体的な構成、処理動作の内容及び手順などは、本発明の趣旨を逸脱しない範囲において適宜変更可能である。本発明の範囲は、特許請求の範囲に記載した発明の範囲とその均等の範囲を含む。
【符号の説明】
【0088】
100 電子楽器
101 CPU
102 ROM
103、306 RAM
104 音源(TG)
105 効果付与部
106 鍵盤
107 ペダル
108 操作子
109 システムバス
110 サウンドシステム
201 楽音生成部
202 ミキシング部
203、204、205、206 ミキサ
207 Lch直接音出力データ
208 Rch直接音出力データ
209 Lch効果音入力データ
210 Rch効果音入力データ
212 Lch効果音出力データ
213 Rch効果音出力データ
214 Lch楽音出力データ
215 Rch楽音出力データ
303 FIRフィルタ演算処理部
304 CONV演算処理部
305 加算部

図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14