(57)【要約】【課題】ＭＩＤＩ音源などの電子音源による打楽器の演奏音の発音制御において、従来よりも高い精度でトリガを検出することを可能にする技術を提供する。【解決手段】電子打楽器用の発音制御装置として、以下の動作検出手段、振動検出手段、発音制御手段および閾値更新手段を有する装置を提供する。動作検出手段は、スティック等の打撃体の動きを検出し、その検出結果を示す信号を出力する。振動検出手段は、打面に生じた振動を検出し、当該振動の波形を表す信号を出力する。発音制御手段は、無音状態において、振動検出手段の出力信号のエンベロープの振幅が第１の閾値を上回ったことを契機として電子音源を発音させる一方、発音状態において上記振幅が第２の閾値を下回ったことを契機として発音を停止させる。閾値更新手段は、発音状態において少なくとも１つの打撃体が打面に向かって移動中であると判定された場合に第２の閾値をより大きな値に更新する。【選択図】図１
2017161858.tif 000002
【特許請求の範囲】
【請求項１】
打楽器の打面を打撃するための１または複数の打撃体の動きを検出し、その検出結果を示す信号を出力する動作検出手段と、
前記１または複数の打撃体による打撃に応じて前記打面に生じた振動を検出し、当該振動の波形を表す信号を出力する振動検出手段と、
前記振動検出手段の出力信号のエンベロープの振幅が第１の閾値を上回ったことを契機として発音状態に遷移するとともに電子音源に発音を指示し、前記振幅が第２の閾値を下回ったことを契機として無音状態に遷移するとともに前記電子音源に発音の停止を指示する発音制御手段と、
前記動作検出手段の出力信号を解析し、発音状態において少なくとも１つの打撃体が前記打面に向かって移動中であると判定された場合に前記第２の閾値をより大きな値に更新する閾値更新手段と、
を有する発音制御装置。
【請求項２】
前記エンベロープの振幅が前記第１の閾値を上回ったことを契機として当該振幅に基づきベロシティを算出するベロシティ算出手段をさらに有し、
前記発音制御手段は、前記ベロシティ算出手段により算出されたベロシティを発音の指示に付加し、
前記閾値更新手段は、前記少なくとも１つの打撃体が前記打楽器の打面に向かって移動中であると判定された場合に前記第１の閾値をより小さな値に更新することを特徴とする請求項１に記載の発音制御装置。
【請求項３】
打楽器の打面を打撃するための１または複数の打撃体の動きを検出し、その検出結果を示す信号を出力する動作検出手段と、
前記１または複数の打撃体による打撃に応じて前記打面に生じた振動を検出し、当該振動の波形を表す信号を出力する振動検出手段と、
前記振動検出手段の出力信号のエンベロープの振幅が第１の閾値を上回ったことを契機として当該振幅に基づきベロシティを算出するベロシティ算出手段と、
前記エンベロープの振幅が前記第１の閾値を上回ったことを契機として、発音状態に遷移するとともに前記ベロシティ算出手段により算出されたベロシティを発音の指示に付加して電子音源に与える発音制御手段と、
前記動作検出手段の出力信号を解析し、少なくとも１つの打撃体が前記打面に向かって移動中であると判定された場合に前記第１の閾値をより小さな値に更新する閾値更新手段と、
を有することを特徴とする発音制御装置。
【請求項４】
前記振動検出手段の出力信号に補間処理を施し、前記エンベロープを表すエンベロープデータを出力するエンベロープ抽出手段と、
前記動作検出手段の出力信号を解析し、前記少なくとも１つの打撃体が前記打楽器の打面に向かって移動中であると判定された場合に前記エンベロープ抽出手段における補間速度をより小さな値に更新する補間速度更新手段とをさらに有することを特徴とする請求項１〜３の何れか１項に記載の発音制御装置。
【請求項５】
前記打面に向かって打撃体が移動中に前記動作検出手段から出力される出力信号または当該出力信号の特徴を示す特徴量を記録する記録手段を備え、
前記閾値更新手段は、前記記録手段の記録内容を参照して前記判定を行うことを特徴とする請求項１〜４の何れか１項に記載の発音制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ＭＩＤＩ音源などの電子音源による打楽器の演奏音の発音制御に関する。
【背景技術】
【０００２】
電子ドラムなどの電子打楽器は打撃（以下、アタック）によりパッド等の打面に発生した振動を検出してオーディオ信号を出力するセンサを有することが一般的である。電子打楽器における発音制御は以下の要領で実現される。放音停止状態において上記センサの出力信号のエンベロープの振幅が所定の閾値を上回ったことを契機としてノートオン信号をＭＩＤＩ音源等に与えることで電子打楽器は放音停止状態から放音状態へ遷移し、放音状態において上記エンベロープの振幅が上記閾値を下回ったことを契機として放音状態から放音停止状態へ遷移する、といった具合である。この種の発音制御技術に関する先行技術の一例としては、特許文献１に開示の技術が挙げられる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−２７１４２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
この種の発音制御技術では、トリガの検出ミスに起因して種々の問題が発生する。例えば、この種の発音制御技術には、打面が連打された場合にアタックの検出漏れに起因する音抜け（ノートオンの欠落）が発生し易いといった問題がある。これは、打面が連打された場合には、センサの出力信号のエンベロープの振幅が上記閾値を下回らないうちに増加に転じるといった事態が発生し易いことに起因する。センサの出力信号のエンベロープの振幅が上記閾値を下回らないうちに増加に転じると放音状態から放音停止状態への遷移が発生せず、次のノートオン信号の出力契機となる事象（すなわち、無音状態においてセンサの出力信号のエンベロープの振幅が上記閾値を上回ること）が発生しないからである。
【０００５】
この種の発音制御技術は、生ドラムにミュートを施して演奏するミュート演奏の際にも利用されるが、生ドラムのミュート演奏では上記音抜けはより顕著になってしまう場合がある。ミュート演奏とは、生ドラムのヘッドにミュートを施して振動を抑えつつ、当該振動に応じて電子音源の発音制御を行う演奏態様を言う。このような演奏態様によれば、演奏者はヘッドホンを装着して生ドラムの演奏を行うとともに、電子音源の出力信号を当該ヘッドホンに与えることで、周囲に迷惑をかけることなく生ドラムの演奏練習を行うことができる。生ドラムのミュート演奏において上記音抜けがより顕著になってしまうのは、電子ドラムのパッドは発泡ウレタンなど振動の減衰の大きい素材で形成されていることが多く、音抜けの発生頻度は比較的に小さいが、生ドラムのヘッドは振動の減衰がより緩やかであるからである。
【０００６】
また、この種の発音制御技術には、ノートオン信号をＭＩＤＩ音源等に与える際に遅延（以下、レーテンシ）が発生し易いといった問題がある。この理由は、以下に示すとおりである。通常、ＭＩＤＩ音源等にノートオン信号を与える際には、当該ノートオン信号に音の強さを示す情報、すなわちベロシティを付加する。ベロシティは、センサの出力信号のエンベロープの振幅が所定の閾値を上回った時点における当該エンベロープの傾きに基づき決定される。より詳細には、この傾きは、上記所定の閾値を上回った時点における上記エンベロープの振幅に対する、当該閾値の近傍の値（以下、所定値）を上回った時点における上記エンベロープの振幅の変化の割合として表される。この種の発音制御技術では、上記所定値に小さな値を設定した場合、上記エンベロープの振幅がその値を上回ったか否かの判定において、ノイズに起因する誤判定が発生するおそれがある。このため、通常、上記所定値には大きな値が設定される。しかし、この場合、上記エンベロープの振幅が所定の閾値を上回った後、上記エンベロープの振幅が上記所定値を上回ったと判定されるまでに要する時間が長くなる。この結果、アタックが発生してからベロシティを算出するまでに要する時間が長期化し、上記問題が発生するのである。
【０００７】
本発明は上記課題に鑑みて為されたものであり、ＭＩＤＩ音源などの電子音源による打楽器の演奏音の発音制御において、従来よりも高い精度でトリガを検出することを可能にする技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために本発明は、打楽器の打面を打撃するための１または複数の打撃体の動きを検出し、その検出結果を示す信号を出力する動作検出手段と、１または複数の打撃体による打撃に応じて打面に生じた振動を検出し、当該振動の波形を表す信号を出力する振動検出手段と、振動検出手段の出力信号のエンベロープの振幅が第１の閾値を上回ったことを契機として発音状態に遷移するとともに電子音源に発音を指示し、当該エンベロープの振幅が第２の閾値を下回ったことを契機として無音状態に遷移するとともに上記電子音源に発音の停止を指示する発音制御手段と、動作検出手段の出力信号を解析し、発音状態において少なくとも１つの打撃体が打面に向かって移動中であると判定された場合に第２の閾値をより大きな値に更新する閾値更新手段と、を有する発音制御装置、を提供する。
【０００９】
電子音源の具体例としてはＭＩＤＩ音源が挙げられ、電子音源としてＭＩＤＩ音源を用いた場合の発音の指示（発音制御信号）の具体例としては当該ＭＩＤＩ音源に対してノートオンを指示する信号やノートオフを指示する信号が挙げられる。また、打撃体の具体例としては、演奏者の指先やスティックが挙げられる。本発明によれば、発音状態において少なくとも１つの打撃体が打楽器の打面に向かって移動中であると判定された場合には、発音状態から無音状態への遷移を発生させるか否かの判定基準となる第２の閾値がより大きな値へと更新される。打面を連打する際には発音状態において打撃体が打楽器の打面に向かって移動することとなるのであるから、連打が発生する場合には上記第２の閾値はより大きな値に更新され、先行する打撃により打面に生じた振動が充分に減衰しなくとも発音状態から無音状態への遷移が発生し、電子音源が放音状態から放音停止状態に遷移して前述した音抜けの発生が防止される。このように、本発明によれば、打楽器の演奏音をＭＩＤＩ音源などの電子音源に発音させる発音制御において、連打に起因する音抜けが発生しないようにすることが可能になる。
【００１０】
より好ましい態様においては、上記エンベロープの振幅が第１の閾値を上回ったことを契機として当該振幅に基づきベロシティを算出するベロシティ算出手段を有し、発音制御手段は、ベロシティ算出手段により算出されたベロシティを上記発音の指示に付加し、閾値更新手段は、少なくとも１つの打撃体が打楽器の打面に向かって移動中であると判定された場合に第１の閾値をより小さな値に更新することを特徴とする。このような態様によれば、第１の閾値に小さな値が設定されるため、上記エンベロープの振幅が所定の閾値を上回ったか否かの判定において、当該閾値を上回った振幅を検出するのに要する時間が短縮される。したがって、ノートオン信号をＭＩＤＩ音源等に与える際のレーテンシの発生を防止することが可能になる。
【００１１】
また別の好ましい態様においては、振動検出手段の出力信号に補間処理を施し、上記エンベロープを表すエンベロープデータを出力するエンベロープ抽出手段と、動作検出手段の出力信号を解析し、上記少なくとも１つの打撃体が上記打楽器の打面に向かって移動中であると判定された場合にエンベロープ抽出手段における補間速度をより小さな値に更新する補間速度更新手段とをさらに有することを特徴とする。このような態様によれば、エンベロープ波形にノイズが含まれる確率が減少するため、第１の閾値に小さな値を設定しても、エンベロープの振幅が所定値を上回ったか否かの判定において、ノイズに起因する誤判定が発生することを防止することが可能となる。
【００１２】
さらに好ましい態様においては、本発明の発音制御装置は、打面に向かって打撃体が移動中に動作検出手段から出力される出力信号または当該出力信号の特徴を示す特徴量を記録する記録手段を備え、閾値更新手段は、発音状態において少なくとも１つの打撃体が打面に向かって移動中であるか否かの判定を記録手段の記録内容を参照して行うことを特徴とする。このような態様によれば、打楽器の演奏に先立ってその演奏者特有の演奏動作を記録しておくことで、演奏者の演奏動作の個性を加味しつつ連打に起因する音抜けを確実に防止することが可能になる。
【図面の簡単な説明】
【００１３】
【図１】本発明の第１実施形態である発音制御装置１の構成例を示すブロック図である。
【図２】本発明の第２実施形態である発音制御装置１Ａの構成例を示すブロック図である。
【図３】同実施形態におけるエンベロープ抽出部２４ｂの構成を示す図である。
【図４】同実施形態において、エンベロープ抽出部２４ｂが生成するエンベロープデータＢの表すエンベロープ波形および当該エンベロープデータＢの変化に応じて遷移する各種データの詳細を示す図である。
【図５】同実施形態において、周知のトリガ検出処理の内容を示すフローチャートである。
【図６】同実施形態において、エンベロープ抽出部２４ｂが生成するエンベロープデータＢの表すエンベロープ波形にノイズが重畳されている様子を示す図である。
【図７】同実施形態において、閾値更新部２６ｃが実行する閾値更新処理の内容を示すフローチャートである。
【図８】同実施形態において、補間速度更新部２６ｄが実行する補間速度更新処理の内容を示すフローチャートである。
【図９】同実施形態において、エンベロープ抽出部２４ｂが生成するエンベロープデータＢの表すエンベロープ波形および当該エンベロープデータＢの変化に応じて遷移する各種データの詳細を示す図である。
【発明を実施するための形態】
【００１４】
＜第１実施形態＞
以下、図面を参照しつつ、本発明の実施形態について説明する。
図１は、本発明の第１実施形態である発音制御装置１の構成例を示すブロック図である。発音制御装置１は、生ドラムなどの打楽器２のミュート演奏を実現するためのものであり、サウンドシステム３に接続されている。サウンドシステム３は、電子音源と、この電子音源から出力されるオーディオ信号に応じて音を放射するスピーカとを含んでいる。本実施形態では上記電子音源としてＭＩＤＩ音源が採用されている。
【００１５】
発音制御装置１は、打楽器２に対する演奏動作に応じてサウンドシステム３に発音制御信号を出力する装置である。打楽器２に対する演奏動作とは、スティックなどの打撃体により打楽器２の打面を打撃する動作のことをいい、発音制御信号とは、電子音源、すなわちＭＩＤＩ音源に対してノートオンやノートオフを指示するＭＩＤＩ信号のことを言う。本実施形態の発音制御装置１は、打楽器２の打面を連打するような演奏動作が為された場合であっても、音抜けが発生しないように構成されており、この点に本実施形態の特徴がある。より詳細に説明すると、発音制御装置１は、図１に示すように、動作検出手段１０、振動検出手段１２、発音制御手段１４、および閾値更新手段１６を有する。発音制御装置１を構成する各手段の役割および具体的な構成は以下の通りである。
【００１６】
動作検出手段１０は、打楽器２の打面を打撃するための打撃体の動きを検出し、その検出結果を示すデータを閾値更新手段１６に出力する。前述したように本実施形態では、打楽器２の打面を打撃するための打撃体としてスティックが用いられている。動作検出手段１０は、当該スティックに内蔵された３軸の加速度センサ１０ａと、加速度センサ１０ａの出力信号にＡ／Ｄ変換を施してデジタル形式の波形データに変換し閾値更新手段１６に与えるＡ／Ｄ変換器１０ｂと、を含んでいる。加速度センサ１０ａは、演奏者の演奏動作に応じてスティックに発生した加速度を検出し、上記３つの軸に沿った加速度の大きさおよび方向を示すアナログ信号を出力する処理を周期的に繰り返す。
【００１７】
振動検出手段１２は、打楽器２に対する演奏者の演奏動作に応じて当該打楽器２の打面に生じた振動を検出し、その振動波形を表す信号を、その振幅値が０〜１の範囲に収まるように規格化して出力する。図１に示すように、振動検出手段１２は、打楽器２の打面に取り付けられ、当該打面に生じた振動の波形を示すアナログ信号を出力する処理を周期的に繰り返す振動センサ１２ａと、振動センサ１２ａの出力信号にＡ／Ｄ変換を施してデジタル形式の波形データに変換し発音制御手段１４に与えるＡ／Ｄ変換器１２ｂと、を含んでいる。
【００１８】
発音制御手段１４は、振動検出手段１２の出力データに応じてサウンドシステム３の発音制御を行う。発音制御手段１４は、サウンドシステム３による放音（発音）が行われていない放音停止状態と、同放音が行われている放音状態のそれぞれにおいて以下の処理を実行する。放音停止状態においては、発音制御手段１４は、振動検出手段１２の出力データの表す波形のエンベロープの振幅が第１の閾値を上回ったことを契機として、発音制御装置１の内部状態を無音状態から発音状態に遷移させ、発音を指示する発音指示信号をサウンドシステム３へ出力し当該サウンドシステム３を発音させる。一方、放音状態においては、発音制御手段１４は、上記振幅が第２の閾値を下回ったことを契機として、上記内部状態を発音状態から無音状態へ遷移させ、発音の停止を指示する停止指示信号をサウンドシステム３へ出力し当該サウンドシステム３の発音を停止させる。このような役割を果たすため、発音制御手段１４は、図１に示すように、記憶部１４ａ、エンベロープ抽出部１４ｂ、閾値判定部１４ｃ、および発音制御信号生成部１４ｄを含んでいる。
【００１９】
記憶部１４ａは、例えばＲＡＭ（Random Access Memory）などの揮発性メモリと、フラッシュＲＯＭ（Read
Only Memory）などの不揮発性メモリとを含んでいる。揮発性メモリには、発音制御装置１の内部状態を表す状態データＳ、前述した第１および第２の閾値の各々を表す閾値データＴｈ１およびＴｈ２が格納される。不揮発性メモリには、状態データＳ、閾値データＴｈ１およびＴｈ２の各々の初期値が格納される。本実施形態では、状態データＳの初期値として無音状態を表す値が上記不揮発性メモリに格納されており、閾値データＴｈ１およびＴｈ２の各々の初期値を表す値Ｔｈ０が格納されている。これら初期値を表す各データは、発音制御装置１の電源投入を契機として閾値判定部１４ｃによって不揮発性メモリから読み出され、状態データＳ、閾値データＴｈ１およびＴｈ２として揮発性メモリに格納される。
【００２０】
エンベロープ抽出部１４ｂは、例えば全波整流回路およびローパスフィルタであり、振動検出手段１２の出力データからその出力データの表す波形のエンベロープ（包絡線）を表すエンベロープデータを生成し、閾値判定部１４ｃに与える。閾値判定部１４ｃは、発音制御装置１の内部状態が無音状態の場合と発音状態の場合とで異なる処理を実行する。発音制御装置１の内部状態が無音状態である場合には、閾値判定部１４ｃは、上記エンベロープデータを受け取る毎に、そのエンベロープデータの表す振幅値が閾値データｔｈ１の表す第１の閾値を上回ったか否かを判定し、その判定結果がＹｅｓである場合に、上記内部状態を無音状態から発音状態に更新するとともに発音制御信号生成部１４ｄに発音指示信号の生成を指示する。発音制御信号生成部１４ｄは、閾値判定部１４ｃによる制御の下、発音指示信号を生成しサウンドシステム３に与える。これに対して、発音制御装置１の内部状態が発音状態である場合には、閾値判定部１４ｃは、上記エンベロープデータを受け取る毎に、そのエンベロープデータの表す振幅値が閾値データｔｈ２の表す第２の閾値を下回ったか否かを判定し、その判定結果がＹｅｓである場合に、上記内部状態を発音状態から無音状態に更新するとともに発音制御信号生成部１４ｄに停止指示信号の生成を指示する。発音制御信号生成部１４ｄは、閾値判定部１４ｃによる制御の下、停止指示信号を生成しサウンドシステム３に与える。
【００２１】
閾値更新手段１６は、動作検出手段１０の出力データを解析し、発音状態において少なくとも１つの打撃体が打楽器２の打面に向かって移動中であると判定された場合に第２の閾値を初期値よりも大きな値に更新する。このような役割を果たすため、閾値更新手段１６は、図１に示すように、モーション検出部１６ａ、動作判定部１６ｂ、および閾値更新部１６ｃを含んでいる。これら各部の役割は以下の通りである。
【００２２】
モーション検出部１６ａは、動作検出手段１０の出力データの表す加速度を積分した速度の大きさを算出し、算出された値が所定の閾値を上回っていた場合にのみ、上記出力データを動作判定部１６ｂに与える。前述したように動作検出手段１０に含まれる加速度センサは３軸の加速度センサであり、上記出力データは各軸に沿った加速度を積分した速度成分の大きさおよび方向を表すデータである。モーション検出部１６ａは、各速度成分の二乗和（或いは当該二乗和の平方根）を算出し、その算出結果が上記閾値を上回っている場合にのみ、上記出力データを動作判定部１６ｂに与える。このようなモーション検出部１６ａを設けたのは、演奏動作とは無関係な打撃体の微細な動きが演奏動作であると誤判断されることを回避するためである。
【００２３】
動作判定部１６ｂは、記憶部１４ａに格納されている状態データＳとモーション検出部１６ａから与えられた出力データとを参照し、前者が発音状態を表し、かつ、後者の示す鉛直方向の速度が正の値（すなわち、鉛直下向きである）であるか否かを判定する。そして、動作判定部１６ｂは、上記判定結果が“Ｙｅｓ”であれば、前述した第２の閾値の更新を指示する制御信号を閾値更新部１６ｃに与える。閾値更新部１６ｃは、この制御信号の受信を契機として、記憶部１４ａの揮発性メモリに格納されている閾値データＴｈ２を初期値Ｔｈ０よりも所定量Δ（Δ＞０）だけ大きな値に更新する。なお、第２の閾値の更新量Δについては適宜実験を行い、好適な値（すなわち、連打の際に音漏れを確実に防止できる値）に設定するようにすれば良い。
以上が発音制御装置１の構成である。
【００２４】
演奏者がスティックを用いて打楽器２の打面の連打を行う場合、その最初の打撃の際に発音制御装置１の内部状態は発音状態となっており、当該打撃に後続する打撃のためにスティックを振り下ろした段階では、動作判定部１６ｂの判定結果は“Ｙｅｓ”となり、第２の閾値ｔｈ２は初期値ｔｈ０よりも所定量Δだけ大きな値に更新されている。第２の閾値ｔｈ２は初期値ｔｈ０よりも所定量Δだけ大きな値に更新されるため、発音状態から無音状態の遷移が発生しやすくなる。このため、エンベロープ検出部１４ｂの出力するエンベロープデータの表す振幅値が第２の閾値（すなわち、ｔｈ０＋Δ）を下回れば、発音制御装置１の内部状態は無音状態に更新され、上記後続の打撃により上記振幅値が第１の閾値を上回ったことを契機として発音指示信号がサウンドシステム３へ出力される。
【００２５】
このように本実施形態によれば、電子音源による打楽器の演奏音の発音制御において、打面の連打に起因する音抜の発生を回避することが可能になる。本実施形態では、生ドラムのミュート演奏の際の発音制御への適用例を説明したが、電子ドラムなどの電子打楽器に発音制御装置１を組み込み、当該電子打楽器における発音制御に発音制御装置１を適用しても勿論良い。
【００２６】
＜Ｂ：第２実施形態＞
図２は、本発明の第２実施形態である発音制御装置１Ａの構成例を示すブロック図である。第２実施形態の発音制御装置１Ａは、第１の閾値Ｔｈ１を上回った後、ベロシティを付加した発音指示信号を迅速に出力することができるように構成されており、この点に本実施形態の特徴がある。図２と図１とを対比すれば明らかなように、発音制御装置１Ａは発音制御手段１４に換えて発音制御手段２４を有する点と、閾値更新手段１６に換えて閾値更新手段２６を有する点が、発音制御装置１と異なる。
【００２７】
第２実施形態による発音制御手段２４は、記憶部１４ａに換えて記憶部２４ａを、エンベロープ抽出部１４ｂに換えてエンベロープ抽出部２４ｂを、閾値判定部１４ｃに換えて閾値判定部２４ｃを、発音制御信号生成部１４ｄに換えて発音制御信号生成部２４ｄを有し、さらに上記各部に加えてベロシティ算出部２４ｅを有する点において発音制御手段１４と異なる。エンベロープ抽出部２４ｂは、例えばエンベロープフォロワであり、振動検出手段１２の出力データに補間処理を施し、その出力データの表す波形のエンベロープを表すエンベロープデータを生成し、閾値判定部２４ｃに与える。
【００２８】
図３は、エンベロープ抽出部２４ｂの構成を示す図である。図３に示すように、エンベロープ抽出部２４ｂは、全波整流部２４１と補間部２４２とを有する。全波整流部２４１は、振動検出手段１２の出力データを全波整流し、そのエンベロープ波形を表すエンベロープデータを補間部２４２に出力する。補間部２４２は、増幅部２４２１および２４２２と、加算部２４２３および２４２４と、遅延処理部２４２５とを有し、全波整流部２４１から出力されたエンベロープデータに対し補間処理を実行する。
【００２９】
増幅部２４２１は、全波整流部２４１から受け取ったエンベロープデータの振幅値をα（０＜α≦１）倍し、増幅後のエンベロープデータを加算部２４２３に出力する。遅延処理部２４２５は、加算部２４２３から出力されたエンベロープデータに対し１サンプル分の遅延処理を施し、遅延処理後のエンベロープデータを増幅部２４２２、加算部２４２４および閾値判定部２４ｃに与える。増幅部２４２２は、遅延処理部２４２５から出力されたエンベロープデータの振幅値を（１−α）倍し、増幅後のエンベロープデータを加算部２４２３に出力する。加算部２４２３は、増幅部２４２１および増幅部２４２２から出力されたエンベロープデータを加算し、その算出結果を遅延処理部２４２５に与える。つまり、増幅部２４２２から加算部２４２３に出力されるエンベロープデータは、増幅部２４２１から加算部２４２３に出力されるエンベロープデータよりも１サンプル前のエンベロープデータに対応する。従って、上記各エンベロープデータをαに応じた割合で混合することにより、滑らかなエンベロープ波形を表すエンベロープデータを生成することが可能となる。以下、補間部２４２が生成するエンベロープデータを構成するサンプルデータの各々を「エンベロープデータＢ」と呼ぶ。ここで、上記αはエンベロープデータＢの表すエンベロープ波形の滑らかさの度合いを示す指標（補間係数）であり、αが１に近づくほど、加算部２４２３に入力されるエンベロープデータのうち、１サンプル前のエンベロープデータの割合が少なくなり、補間処理の効果が小さくなる。一方、αが０に近づくほど、加算部２４２３に入力されるエンベロープデータのうち、１サンプル前のエンベロープデータの割合が多くなり、補間処理の効果が大きくなる。従って、補間係数αの値を適宜設定することにより、補間処理の効果を最適化することが可能となる。
【００３０】
本実施形態では、補間係数αとして、アタック時とリリース時とで異なる値が設定される。より詳細に説明すると、図３に示すように、全波整流部２４１から出力されたエンベロープデータと遅延処理部２４２５から出力されたエンベロープデータは、加算部２４２４に出力され、前者のエンベロープデータと後者のエンベロープデータ（その振幅値を−１倍したデータ）とが加算される。加算部２４２４から出力されるエンベロープデータの振幅値の上昇時、すなわちアタック時には、上記加算結果の符号が正となり、アタック時の補間係数（補間係数αｉ）が設定される。一方、加算部２４２４から出力されるエンベロープデータの振幅値の下降時、すなわちリリース時には、上記加算結果の符号が負となり、リリース時の補間係数（補間係数αｄ）が設定される。
【００３１】
記憶部２４aの揮発性メモリには、第１の閾値を表す閾値データＴｈ１、増加フラグＩｎｃＦｌａｇ、最小値Ｂｍｉｎ、係数Ｂｍｕｌ、最大値Ｂｍａｘ、トリガ検出フラグＴｒｉｇＦｌａｇ、アタック補間速度ＡｔｋＩｔｐＳｐｅｅｄおよびリリース補間速度ＲｅｌＩｔｐＳｐｅｅｄが格納される。不揮発性メモリには、上記各データの初期値が格納される。増加フラグＩｎｃＦｌａｇは、トリガ検出される直前までの状態においてエンベロープデータＢの表す振幅値が増加状態にあるか否かを示すフラグである。最小値Ｂｍｉｎは、エンベロープデータＢの最小値を示すデータである。係数Ｂｍｕｌは、エンベロープデータＢの表す振幅値が最小値Ｂｍｉｎに対して何倍であるかを示すデータである。最大値Ｂｍａｘは、エンベロープデータＢの最大値を示すデータである。トリガ検出フラグＴｒｉｇＦｌａｇは、トリガが検出されたか否かを示すフラグである。より詳細には、トリガ検出フラグＴｒｉｇＦｌａｇは、エンベロープデータＢの表す振幅値が閾値データＴｈ１（図４：Ｂｍｉｎ１およびＢｍｉｎ２に対応）の表す第１の閾値よりも大きな所定値（Ｂｍｕｌ×Ｂｍｉｎ）を上回ったか否かを示す。アタック補間速度ＡｔｋＩｔｐＳｐｅｅｄは、アタック発生後のエンベロープデータＢの表す振幅値が増加状態にある場合において、エンベロープ抽出部２４ｂが補間処理を実行する際に設定される補間係数αｉに応じた値である。リリース補間速度ＲｅｌＩｔｐＳｐｅｅｄは、アタック発生後のエンベロープデータＢの表す振幅値が減少状態にある場合において、エンベロープ抽出部２４ｂが補間処理を実行する際に設定される補間係数αｄに応じた値である。本実施形態では、上記各データの初期値として、閾値データＴｈ１には０．０００１が、増加フラグＩｎｃＦｌａｇには０が、最小値Ｂｍｉｎには１．０が、最大値Ｂｍａｘには０．０が、トリガ検出フラグＴｒｉｇＦｌａｇには０が、係数Ｂｍｕｌ、アタック補間速度ＡｔｋＩｔｐＳｐｅｅｄおよびリリース補間速度ＲｅｌＩｔｐＳｐｅｅｄには所定値が記憶部２４ａの不揮発性メモリに格納されている。
【００３２】
閾値判定部２４ｃは、エンベロープデータＢを受け取る毎に、その振幅値を閾値データＴｈ１、最小値Ｂｍｉｎ、最大値ＢｍａｘおよびＢｍｕｌ×Ｂｍｉnと比較し、その比較結果に基づき上記各フラグの値を決定する。また、閾値判定部２４ｃは、トリガ検出フラグＴｒｉｇＦｌａｇを１に更新すると、その時点の振幅値Ｂをベロシティ算出部２４ｅに通知しベロシティＶｅｌの算出を指示する。ベロシティ算出部２４ｅは、上記通知を受け取ると、上記振幅値ｖ（ただし、ｖ＝Ｂ）を所定の式ｆ（ｖ）に代入してベロシティＶｅｌを算出し、算出結果を発音制御信号生成部２４ｄに与える。発音制御信号生成部２４ｄは、トリガ検出フラグＴｒｉｇＦｌａｇを監視し、その値が１に更新され、かつ、ベロシティ算出部２４ｅからベロシティＶｅｌの算出結果を受け取った場合、当該算出結果を付加した発音指示信号を生成しサウンドシステム３に与える。
【００３３】
第２実施形態による閾値更新手段２６は、モーション検出部１６ａに換えてモーション検出部２６ａを、動作判定部１６ｂに換えて動作判定部２６ｂを、閾値更新部１６ｃに換えて閾値更新部２６ｃを有し、さらに上記各部に加えて補間速度更新部２６ｄを有する点において閾値更新手段１６と異なる。モーション検出部２６ａは、動作検出手段１０の出力データの表すＸ、ＹおよびＺの各軸方向の速度を軸ごとに積分した速度データＶｍｏｔｉｏｎを算出し、算出結果を動作判定部２６ｂに与える。動作判定部２６ｂは、モーション検出部２６ａから与えられた速度データＶｍｏｔｉｏｎを参照し、当該速度データが示す鉛直方向（Ｚ軸方向）の速度が負の値（すなわち、鉛直下向きである）であるか否かを判定する。そして、動作判定部２６ｂは、上記判定結果がＹｅｓであれば、前述した係数Ｂｍｕｌの更新を指示する制御信号（以下、閾値更新指示信号と呼ぶ）を閾値更新部２６ｃに与える。また、動作判定部２６ｂは、上記判定結果がＹｅｓであれば、前述したアタック補間速度ＡｔｋＩｔｐＳｐｅｅｄの更新を指示する制御信号（以下、補間速度更新指示信号と呼ぶ）を補間速度更新部２６ｄに与える。閾値更新部２６ｃは、閾値更新指示信号の受信を契機として、記憶部２４ａに格納されている係数Ｂｍｕｌの設定値を初期値よりも所定量だけ小さな値に更新する。補間速度更新部２６ｄは、補間速度更新指示信号の受信を契機として、記憶部２４ａに格納されているアタック補間速度ＡｔｋＩｔｐＳｐｅｅｄの設定値を所定量だけ小さな値に更新する。なお、係数Ｂｍｕｌの更新量については適宜実験を行い、好適な値に設定するようにすれば良い。同様に、アタック補間速度ＡｔｋＩｔｐＳｐｅｅｄの更新量についても適宜実験を行い、好適な値（すなわち、上記ノイズに起因する誤判定が発生しない値）に設定するようにすれば良い。
以上が発音制御装置１Ａの構成である。
【００３４】
次いで、発音制御装置１Ａが実行するトリガ検出処理について説明する。以下では、発音制御装置１Ａの特徴の理解を容易にするため、まず従来のトリガ検出処理を発音制御装置１Ａに実行させた場合について説明する。図４は、エンベロープ抽出部２４ｂが生成するエンベロープデータＢの表すエンベロープ波形および当該エンベロープデータＢの変化に応じて遷移する各種データの詳細を示す図である。図４（ａ）は、エンベロープ抽出部２４ｂにより生成されたエンベロープデータＢの表す振幅値の時間変化を示す図である。この図において、「アタック１」は、打撃体により打楽器２の打面に１回目の打撃が与えられた時刻を示す。「アタック２」は、打撃体により打楽器２の打面に２回目の打撃が与えられた時刻を示す。図４（ｂ）は増加フラグＩｎｃＦｌａｇの時間変化を示す図である。図４（ｃ）は最小値Ｂｍｉｎの時間変化を示す図である。図４（ｄ）は最大値Ｂｍａｘの時間変化を示す図である。図４（ｅ）はトリガ検出フラグＴｒｉｇＦｌａｇの時間変化を示す図である。発音制御装置１の電源投入を契機として、閾値判定部２４ｃは、記憶部２４ａの不揮発性メモリから各種データの初期値を読み出して、揮発性メモリの所定領域に設定する。この結果、図４（ｂ）〜（ｅ）に示すように、アタック１の発生前の時刻において、増加フラグＩｎｃＦｌａｇ、最小値Ｂｍｉｎ、最大値Ｂｍａｘおよびトリガ検出フラグＴｒｉｇＦｌａｇには各々の初期値が設定される。
【００３５】
閾値判定部２４ｃは、エンベロープデータＢを受け取る毎にトリガ検出処理を実行する。図５は、従来のトリガ検出処理の内容を示すフローチャートである。閾値判定部２４ｃは、まず、エンベロープデータＢの表す振幅値が閾値データＴｈ１の表す第１の閾値を横切って増加したか否かを判定する（ステップＳＡ１０）。具体的には、閾値判定部２４ｃは、受け取ったエンベロープデータＢの表す振幅値が閾値データＴｈ１の表す第１の閾値以上であり、かつ、前回受け取ったエンベロープデータＢの表す振幅値（以下、Ｂｏｌｄ）が上記第１の閾値未満であるか否かを判定する。ステップＳＡ１０の判定結果が“Ｙｅｓ”であれば、閾値判定部２４ｃは、増加フラグＩｎｃＦｌａｇを１に更新し、さらに最小値Ｂｍｉｎおよび最大値Ｂｍａｘをその時点の振幅値Ｂに更新して（ステップＳＡ２０）、ステップＳＡ３０の処理を実行する。ステップＳＡ１０の判定結果が“Ｎｏ”であれば、閾値判定部２４ｃはステップＳＡ２０の処理を実行することなく、ステップＳＡ３０の処理を実行する。
【００３６】
ステップＳＡ３０では、閾値判定部２４ｃは、エンベロープデータＢの表す振幅値が閾値データＴｈ１の表す第１の閾値を横切って減少したか否かを判定する。具体的には、閾値判定部２４ｃは、受け取ったエンベロープデータＢの表す振幅値が閾値データＴｈ１の表す第１の閾値以下であり、かつ、Ｂｏｌｄの表す振幅値が上記第１の閾値よりも大きいか否かを判定する。ステップＳＡ３０の判定結果が“Ｙｅｓ”であれば、閾値判定部２４ｃは、増加フラグＩｎｃＦｌａｇを０、トリガ検出フラグＴｒｉｇＦｌａｇを０、最小値Ｂｍｉｎを１．０、最大値Ｂｍａｘを０．０にそれぞれ更新し（ステップＳＡ４０）、ステップＳＡ５０の処理を実行する。ステップＳＡ３０の判定結果が“Ｎｏ”であれば、閾値判定部２４ｃはステップＳＡ４０の処理を実行することなく、ステップＳＡ５０の処理を実行する。
【００３７】
ステップＳＡ５０では、閾値判定部２４ｃは、エンベロープデータＢの表す振幅値が増加から減少に転じたか否か（極大となったか否か）を判定する。具体的には、閾値判定部２４ｃは、エンベロープデータＢの表す振幅値が最大値Ｂｍａｘ未満であり、かつ、Ｂｏｌｄが最大値Ｂｍａｘに等しいか否かを判定する。ステップＳＡ５０の判定結果が“Ｙｅｓ”であれば、閾値判定部２４ｃは、最小値Ｂｍｉｎを初期値（１．０）に更新し（ステップＳＡ６０）、ステップＳＡ７０の処理を実行する。ステップＳＡ５０の判定結果が“Ｎｏ”であれば、閾値判定部２４ｃは、ステップＳＡ６０の処理を実行することなく、ステップＳＡ７０の処理を実行する。
【００３８】
ステップＳＡ７０では、閾値判定部２４ｃは、エンベロープデータＢの表す振幅値が減少から増加に転じたか否か（極小となったか否か）を判定する。具体的には、閾値判定部２４ｃは、エンベロープデータＢの表す振幅値が最小値Ｂｍｉｎより大きく、かつ、Ｂｏｌｄが最小値Ｂｍｉｎに等しいか否かを判定する。ステップＳＡ７０の判定結果が“Ｙｅｓ”であれば、閾値判定部２４ｃは、最大値Ｂｍａｘを０．０、増加フラグＩｎｃＦｌａｇを１、トリガ検出フラグＴｒｉｇＦｌａｇを０にそれぞれ更新し（ステップＳＡ８０）、ステップＳＡ９０の処理を実行する。ステップＳＡ７０の判定結果が“Ｎｏ”であれば、閾値判定部２４ｃは、ステップＳＡ８０の処理を実行することなく、ステップＳＡ９０の処理を実行する。
【００３９】
ステップＳＡ９０では、閾値判定部２４ｃは、エンベロープデータＢの表す振幅値が閾値データＴｈ１の表す第１の閾値以上か否かを判定する。ステップＳＡ９０の判定結果が“Ｎｏ”であれば、閾値判定部２４ｃは増加フラグＩｎｃＦｌａｇの値が“１”であるか否かを判定する（ステップＳＡ１４０）。これに対してステップＳＡ９０の判定結果が“Ｙｅｓ”であれば、閾値判定部２４ｃは、エンベロープデータＢの表す振幅値が最小値Ｂｍｉｎよりも小さいか否かを判定する（ステップＳＡ１００）。ステップＳＡ１００の判定結果が“Ｙｅｓ”であれば、閾値判定部２４ｃは、最小値Ｂｍｉｎをその時点の振幅値Ｂに更新し（ステップＳＡ１１０）、ステップＳＡ１２０の処理を実行する。ステップＳＡ１００の判定結果が“Ｎｏ”であれば、閾値判定部２４ｃは、ステップＳＡ１１０の処理を実行することなく、ステップＳＡ１２０の処理を実行する。
【００４０】
ステップＳＡ１２０では、閾値判定部２４ｃは、エンベロープデータＢの表す振幅値が最大値Ｂｍａｘ以上であるか否かを判定する。ステップＳＡ１２０の判定結果が“Ｙｅｓ”であれば、閾値判定部２４ｃは、最大値Ｂｍａｘをその時点の振幅値Ｂに更新し（ステップＳＡ１３０）、前述したステップＳＡ１４０の処理を実行する。ステップＳＡ１２０の判定結果が“Ｎｏ”であれば、閾値判定部２４ｃは、ステップＳＡ１３０の処理を実行することなく、前述したステップＳＡ１４０の処理を実行する。
【００４１】
ステップＳＡ１４０の判定結果が“Ｙｅｓ”である場合は、閾値判定部２４ｃは、エンベロープデータＢの表す振幅値がＢｍｕｌ×Ｂｍｉｎ以上であるか否かを判定する（ステップＳＡ１５０）。ステップＳＡ１５０の判定結果が“Ｎｏ”であれば、閾値判定部２４ｃは、ＢｏｌｄをエンベロープデータＢの表す振幅値に更新し（ステップＳＡ１７０）、トリガ検出処理を終了する。これに対して、ステップＳＡ１５０の判定結果が“Ｙｅｓ”であれば、トリガ検出フラグＴｒｉｇＦｌａｇを１、増加フラグＩｎｃＦｌａｇを０にそれぞれ更新（ステップＳＡ１６０）した後に、ステップＳＡ１７０の処理を実行する。
以上がトリガ検出処理の流れである。
【００４２】
図４（ａ）において、アタック１の発生後、時刻ｔ１までの区間（区間Ｓ０）では、Ｂｏｌｄの更新のみが行われる。この区間では、エンベロープデータＢの表す振幅値は時間の経過とともに順次増加するものの閾値データＴｈ１の表す第１の閾値未満であるためステップＳＡ１０の判定結果は‘Ｎｏ’となり、ステップＳＡ３０の判定結果も‘Ｎｏ’となる。このため、増加フラグＩｎｃＦｌａｇの更新は行われず、増加フラグＩｎｃＦｌａｇは初期値（０）のままとなる（図４（ｂ）：区間Ｓ０参照）。また、区間Ｓ０では、エンベロープデータＢの表す振幅値は極大または極小となることはないため、ステップＳＡ５０の判定結果は“Ｎｏ”となり、ステップＳＡ７０の判定結果も“Ｎｏ”となる。また、エンベロープデータＢの表す振幅値は閾値データＴｈ１の表す第１の閾値未満であるためステップＳＡ９０の判定結果も“Ｎｏ”となる。また、増加フラグＩｎｃＦｌａｇの値は０であるため、ステップＳＡ１４０の判定結果も“Ｎｏ”となるからである。
【００４３】
時刻ｔ１においてエンベロープデータＢの表す振幅値が閾値データＴｈ１の表す第１の閾値に達すると、ステップＳＡ１０の判定結果は‘Ｙｅｓ’となり、ステップＳＡ２０が実行されるため、増加フラグＩｎｃＦｌａｇは１に更新され、最小値Ｂｍｉｎおよび最大値Ｂｍａｘの各値はその時点の振幅値Ｔｈ１（＝Ｂ）に更新される（図４（ｂ），（ｃ），（ｄ）参照）。時刻ｔ１から時刻ｔ２までの区間（区間Ｓ１）では、エンベロープデータＢの表す振幅値が極大または極小となることはなく、ステップＳＡ５０の判定結果は“Ｎｏ”となり、ステップＳＡ７０の判定結果も“Ｎｏ”となり、ステップＳＡ６０および８０の処理が実行されることなくステップＳＡ９０の処理が実行される。区間Ｓ１では、エンベロープデータＢの表す振幅値は閾値データＴｈ１の表す第１の閾値以上となるため、ステップＳＡ９０の判定結果は‘Ｙｅｓ’となり、ステップＳＡ１００の処理が実行される。区間Ｓ１では、エンベロープデータＢの表す振幅値はＢｍｉｎ（当該区間ではＢｍｉｎ＝Ｔｈ１）以上であるため、ステップＳＡ１００の判定結果は‘Ｎｏ’となり、ステップＳＡ１１０の処理を実行することなく、ステップＳＡ１２０の処理が実行される。区間Ｓ１では、エンベロープデータＢの表す振幅値は最大値Ｂｍａｘ以上であるため、ステップＳＡ１２０の判定結果は常に“Ｙｅｓ”となり、次いで実行されるステップＳＡ１３０においてＢｍａｘがその時点のエンベロープデータＢの表す振幅値に更新され、ステップＳＡ１４０の処理が実行される。区間Ｓ１では、増加フラグＩｎｃＦｌａｇの値は１であるため、ステップＳＡ１４０の判定結果は‘Ｙｅｓ’となり、ステップＳＡ１５０の処理が実行される。エンベロープデータＢの表す振幅値はＢｍｕｌ×Ｂｍｉｎ（ただし、Ｂｍｉｎ＝Ｔｈ１）未満であるため、ステップＳＡ１５０の判定結果は‘Ｎｏ’となり、ステップＳＡ１６０の処理を実行することなく、ステップＳＡ１７０の処理が実行され、Ｂｏｌｄの更新処理が行われる。つまり、区間Ｓ１では、増加フラグＩｎｃＦｌａｇは１に、最小値ＢｍｉｎはＴｈ１に、トリガ検出フラグＴｒｉｇＦｌａｇは０に維持され、最大値ＢｍａｘおよびＢｏｌｄの更新のみが行われる（図４（ｂ），（ｃ），（ｅ），（ｄ）：区間Ｓ１参照）。
【００４４】
時刻ｔ１以降、エンベロープデータＢの表す振幅値が閾値データＴｈ１の表す第１の閾値を横切って増加することはないため、以降ステップＳＡ１０の判定結果は常に‘Ｎｏ’となる。また、時刻ｔ７に至るまで、エンベロープデータＢの表す振幅値が閾値データＴｈ１の表す第１の閾値を横切って減少することはないため、時刻ｔ７に至るまでステップＳＡ３０の判定結果は常に‘Ｎｏ’となる。また、時刻ｔ７に至るまで、エンベロープデータＢの表す振幅値は常に閾値データＴｈ１の表す第１の閾値以上となるため、ステップＳＡ９０の判定結果は常に“Ｙｅｓ”となる。また、時刻ｔ３およびｔ６を除いて、エンベロープデータＢの表す振幅値は極大となることがないため、ステップＳＡ５０の判定結果は常に“Ｎｏ”となる。また、時刻ｔ４を除いて、エンベロープデータＢの表す振幅値は極小となることがないため、ステップＳＡ７０の判定結果は常に“Ｎｏ”となる。
【００４５】
時刻ｔ２では、エンベロープデータＢの表す振幅値は最小値Ｂｍｉｎ以上であるため、ステップＳＡ１００の判定結果は“Ｎｏ”となり、ステップＳＡ１１０の処理が実行されることなく、ステップＳＡ１２０の処理が実行される。時刻ｔ２では、エンベロープデータＢの表す振幅値は最大値Ｂｍａｘ以上であるため、ステップＳＡ１２０の判定結果は“Ｙｅｓ”となり、次いで実行されるステップＳＡ１３０においてＢｍａｘが更新され、ステップＳＡ１４０が実行される。上記各処理は、時刻ｔ３に至るまで実行される。時刻ｔ２では、増加フラグＩｎｃＦｌａｇの値は１であるため、ステップＳＡ１４０の判定結果は‘Ｙｅｓ’となり、ステップＳＡ１５０の処理が実行される。時刻ｔ２では、エンベロープデータＢの表す振幅値がＢｍｕｌ×Ｂｍｉｎ（ただし、Ｂｍｉｎ＝Ｔｈ１）に達するため、ステップＳＡ１５０の判定結果は‘Ｙｅｓ’となり、ステップＳＡ１６０の処理が実行される。すなわち、トリガ検出フラグＴｒｉｇＦｌａｇが１、増加フラグＩｎｃＦｌａｇが０にそれぞれ更新される（図４（ｅ），（ｂ）参照）。その結果、発音制御装置１Ａの内部状態は無音状態から発音状態へ遷移する。このとき、閾値判定部２４ｃは、時刻ｔ２におけるエンベロープデータＢの表す振幅値をベロシティ算出部２４ｅに通知する。ベロシティ算出部２４ｅは、通知された値を所定の式ｆ（ｖ）に代入し（ただし、ｖ＝Ｂ）、ベロシティＶｅｌを算出すると、その算出結果を発音制御信号生成部２４ｄに与える。発音制御信号生成部２４ｄは、上記算出結果を発音指示信号に付加し、サウンドシステム３に出力する。ステップＳＡ１６０の処理が実行されると、次いでステップＳＡ１７０の処理が実行され、Ｂｏｌｄの更新が行われる。
【００４６】
増加フラグＩｎｃＦｌａｇが０に更新されるため、時刻ｔ２から時刻ｔ３までの区間（区間Ｓ２）では、ステップＳＡ１４０の判定結果は‘Ｎｏ’となり、ステップＳＡ１５０および１６０の処理を実行することなく、ステップＳＡ１７０の処理が実行される。つまり、区間Ｓ２では、増加フラグＩｎｃＦｌａｇは０に、最小値Ｂｍｉｎは時刻ｔ１におけるエンベロープデータＢの表す振幅値（Ｔｈ１）に、トリガ検出フラグＴｒｉｇＦｌａｇは１にそれぞれ維持され、最大値ＢｍａｘおよびＢｏｌｄの更新のみが行われる（図４（ｂ），（ｃ），（ｅ），（ｄ）：区間Ｓ２参照）。
【００４７】
時刻ｔ３では、エンベロープデータＢの表す振幅値が増加から減少に転じる。すなわち、エンベロープデータＢの表す振幅値は極大となるため、ステップＳＡ５０の判定結果が“Ｙｅｓ”となり、次いで実行されるステップＳＡ６０の処理において最小値Ｂｍｉnの値が１．０に更新される（図４（ｃ））。また、時刻ｔ３から時刻ｔ４までの区間（区間Ｓ３）では、エンベロープデータＢの表す振幅値は最小値Ｂｍｉｎ未満であるため、ステップＳＡ１００の判定結果は“Ｙｅｓ”となり、最小値Ｂｍｉｎはその時点のエンベロープデータＢの表す振幅値に更新され、ステップＳＡ１２０の処理が実行される。区間Ｓ３では、エンベロープデータＢの表す振幅値は最大値Ｂｍａｘ未満であるため、ステップＳＡ１２０の判定結果は“Ｎｏ”となり、ステップＳＡ１３０の処理を実行することなく、ステップＳＡ１４０の処理が実行される。区間Ｓ３では、増加フラグＩｎｃＦｌａｇの値は０であるため、ステップＳＡ１４０の判定結果は“Ｎｏ”となり、ステップＳＡ１５０の処理を実行することなく、ステップＳＡ１７０の処理が実行される。つまり、区間Ｓ３では、増加フラグＩｎｃＦｌａｇは０に、最大値Ｂｍａｘは時刻ｔ３におけるエンベロープデータＢの表す振幅値（１）に、トリガ検出フラグＴｒｉｇＦｌａｇは１にそれぞれ維持され、最小値ＢｍｉｎおよびＢｏｌｄの更新のみが行われる（図４（ｂ），（ｄ），（ｅ），（ｃ）：区間Ｓ３参照）。
【００４８】
時刻ｔ４では２回目のアタック（アタック２）が発生し、エンベロープデータＢの表す振幅値が減少から増加に転じる。すなわち、時刻ｔ４では、エンベロープデータＢの表す振幅値は極小となるため、ステップＳＡ７０の判定結果は“Ｙｅｓ”となり、ステップＳＡ８０の処理が実行される。すなわち、最大値Ｂｍａｘが０．０、増加フラグＩｎｃＦｌａｇが１、トリガ検出フラグＴｒｉｇＦｌａｇが０にそれぞれ更新され（図４（ｄ），（ｂ），（ｅ）参照）、発音制御装置１Ａの内部状態は発音状態から無音状態へ遷移する。
【００４９】
時刻ｔ４では、エンベロープデータＢの表す振幅値は最小値Ｂｍｉｎ以上であるため、ステップ１００の判定結果は“Ｎｏ”となり、ステップ１１０の処理を実行することなく、ステップＳＡ１２０の処理が実行される。時刻ｔ４では、エンベロープデータＢの表す振幅値が最大値Ｂｍａｘ以上であるため、ステップＳＡ１２０の判定結果は“Ｙｅｓ”となり、次いで実行されるステップ１３０において、最大値Ｂｍａｘがその時点の振幅値Ｂに更新され、ステップＳＡ１４０の処理が実行される。増加フラグＩｎｃＦｌａｇの値が１に更新されるため、時刻ｔ４では、ステップＳＡ１４０の判定結果は“Ｙｅｓ”となり、ステップＳＡ１５０の処理が実行される。時刻ｔ４では、エンベロープデータＢの表す振幅値がＢｍｕｌ×Ｂｍｉｎ（ただし、Ｂｍｉｎ＝Ｂｍｉｎ２）未満であるため、ステップＳＡ１５０の判定結果は‘Ｎｏ’となり、ステップＳＡ１６０の処理を実行することなく、ステップＳＡ１７０の処理が実行され、Ｂｏｌｄの更新が行われる。
【００５０】
時刻ｔ４から時刻５までの区間（区間Ｓ４）では、上記時刻ｔ４におけるステップＳＡ１００からステップＳＡ１７０までの処理と同様の処理が実行される。つまり、区間Ｓ４では、増加フラグＩｎｃＦｌａｇは１に、トリガ検出フラグＴｒｉｇＦｌａｇは０に、最小値Ｂｍｉｎは時刻ｔ４におけるエンベロープデータＢの表す振幅値（Ｂｍｉｎ２）にそれぞれ維持され、最大値ＢｍａｘおよびＢｏｌｄの更新のみが行われる（図４（ｂ），（ｅ），（ｃ），（ｄ）：区間Ｓ４参照）。
【００５１】
時刻ｔ５では、上記区間Ｓ４におけるステップＳＡ１００からステップＳＡ１５０までの処理と同様の処理が実行される。時刻ｔ５では、エンベロープデータＢの表す振幅値がＢｍｕｌ×Ｂｍｉｎ（ただし、Ｂｍｉｎ＝Ｂｍｉｎ２）に達するため、ステップＳＡ１５０の判定結果は‘Ｙｅｓ’となり、ステップＳＡ１６０の処理が実行される。すなわち、トリガ検出フラグＴｒｉｇＦｌａｇが１、増加フラグＩｎｃＦｌａｇが０にそれぞれ更新される（図４（ｅ），（ｂ）参照）。その結果、発音制御装置１Ａの内部状態は無音状態から発音状態へ遷移する。以降、時刻ｔ２で行われた処理と同様、閾値判定部２４ｃによるベロシティ算出部２４ｅへの時刻ｔ５におけるエンベロープデータＢの表す振幅値の通知、ベロシティ算出部２４ｅによるベロシティ算出処理、および発音制御信号生成部２４ｄによるサウンドシステム３への発音指示信号の出力が行われる。
【００５２】
時刻ｔ５から時刻ｔ６までの区間（区間Ｓ５）では、区間Ｓ２における処理と同様の処理が行われる。このため、区間Ｓ５では、増加フラグＩｎｃＦｌａｇは０に、最小値Ｂｍｉｎは時刻ｔ４におけるエンベロープデータＢの表す振幅値（Ｂｍｉｎ２）に、トリガ検出フラグＴｒｉｇＦｌａｇは１にそれぞれ維持され、最大値ＢｍａｘおよびＢｏｌｄの更新のみが行われる（図４（ｂ），（ｃ），（ｅ），（ｄ）：区間Ｓ５参照）。
【００５３】
時刻ｔ６では、エンベロープデータＢの表す振幅値が増加から減少に転じる。すなわち、エンベロープデータＢの表す振幅値は極大となるため、ステップＳＡ５０の判定結果が“Ｙｅｓ”となり、次いで実行されるステップＳＡ６０の処理において最小値Ｂｍｉnの値が１．０に更新される（図４（ｃ））。また、時刻ｔ６から時刻ｔ７までの区間（区間Ｓ６）では、エンベロープデータＢの表す振幅値は最小値Ｂｍｉｎ未満であるため、ステップＳＡ１００の判定結果は“Ｙｅｓ”となり、最小値Ｂｍｉｎはその時点のエンベロープデータＢの表す振幅値に更新され、ステップＳＡ１２０の処理が実行される。区間Ｓ６では、エンベロープデータＢの表す振幅値は最大値Ｂｍａｘ未満であるため、ステップＳＡ１２０の判定結果は“Ｎｏ”となり、ステップＳＡ１３０の処理を実行することなく、ステップＳＡ１４０の処理が実行される。区間Ｓ６では、増加フラグＩｎｃＦｌａｇの値は０であるため、ステップＳＡ１４０の判定結果は“Ｎｏ”となり、ステップＳＡ１５０の処理を実行することなく、ステップＳＡ１７０の処理が実行される。つまり、区間Ｓ６では、増加フラグＩｎｃＦｌａｇは０に、最大値Ｂｍａｘは時刻ｔ６におけるエンベロープデータＢの表す振幅値（１）に、トリガ検出フラグＴｒｉｇＦｌａｇは１にそれぞれ維持され、最小値ＢｍｉｎおよびＢｏｌｄの更新のみが行われる（図４（ｂ），（ｄ），（ｅ），（ｃ）：区間Ｓ６参照）。
【００５４】
時刻ｔ７においてエンベロープデータＢの表す振幅値が閾値データＴｈ１の表す第１の閾値に達すると、ステップＳＡ３０の判定結果は‘Ｙｅｓ’となり、ステップＳＡ４０が実行され、増加フラグＩｎｃＦｌａｇは０に、トリガ検出フラグＴｒｉｇＦｌａｇは０に、最小値Ｂｍｉｎは１．０に、最大値Ｂｍａｘは０．０に更新される（図４（ｂ），（ｅ），（ｃ），（ｄ）参照）。時刻ｔ７では、エンベロープデータＢの表す振幅値は極大または極小となることはないため、ステップＳＡ５０の判定結果は“Ｎｏ”となり、ステップＳＡ７０の判定結果も“Ｎｏ”となり、ステップＳＡ９０の処理が実行される。エンベロープデータＢの表す振幅値は閾値データＴｈ１の表す第１の閾値以下であるため、ステップＳＡ９０の判定結果も“Ｎｏ”となり、ステップＳＡ１４０の処理が実行される。時刻ｔ７では、増加フラグＩｎｃＦｌａｇの値は０であるため、ステップＳＡ１４０の判定結果は“Ｎｏ”となり、ステップＳＡ１５０の処理を実行することなく、ステップＳＡ１７０の処理が実行されＢｏｌｄの更新のみが行われる。
【００５５】
上記トリガ検出処理では、エンベロープ抽出部２４ｂが閾値判定部２４ｃに与えるエンベロープデータＢの表すエンベロープ波形にノイズが重畳される場合がある。図６は、エンベロープ抽出部２４ｂが生成するエンベロープデータＢの表すエンベロープ波形にノイズが重畳されている様子を示す図である。この図において、「Δｔ」は、図４における区間Ｓ４に対応する時間であり、Δｔ＝ｔ５−ｔ４となる。図６に示す例では、エンベロープ波形の区間Ｓ４に対応する領域にノイズが重畳されている。従来のトリガ検出処理では、閾値判定部２４ｃが実行するステップＳＡ１５０（図５参照）の処理、すなわちエンベロープデータＢの表す振幅値がＢｍｕｌ×Ｂｍｉｎ以上か否かの判定において、ノイズに起因する誤判定が発生することを防止するために、係数Ｂｍｕｌに大きな値を設定している。しかし、係数Ｂｍｕｌに大きな値を設定した場合、エンベロープデータＢの表す振幅値が減少から増加に転じてから、ステップＳＡ１５０の判定結果が‘Ｙｅｓ’となるまでに要する時間Δｔが長くなる。エンベロープデータＢの表す振幅値が閾値データＴｈ１を横切って増加してから、ステップＳＡ１５０の判定結果が‘Ｙｅｓ’となるまでに要する時間についても同様である。このように、ノイズに起因する誤判定を避けるために係数Ｂｍｕｌに大きな値を設定すると、ベロシティを付加したノートオン信号を迅速に出力することができず、ノートオン信号をＭＩＤＩ音源等に与える際にレーテンシが発生する。
【００５６】
本実施形態による発音制御装置１Ａは、本発明の特徴を顕著に示す処理を実行することにより、上記レーテンシの発生を防止する。以下、図７〜図９を参照しながら、本発明の特徴を顕著に示す処理の詳細について説明する。図７は、閾値更新部２６ｃが実行する閾値更新処理の内容を示すフローチャートである。図８は、補間速度更新部２６ｄが実行する補間速度更新処理の内容を示すフローチャートである。図９は、エンベロープ抽出部２４ｂが生成するエンベロープデータＢの表すエンベロープ波形および当該エンベロープデータＢの変化に応じて遷移する各種データの詳細を示す図である。図９（ａ）は、エンベロープ抽出部２４ｂが生成するエンベロープデータＢの表わすエンベロープ波形を示す図である。図９（ｂ）は、モーション検出部２６ａが出力する速度データＶｍｏｔｉｏｎの時間変化を示す図である。図９（ｃ）は、係数Ｂｍｕｌの時間変化を示す図である。図９（ｄ）は、アタック補間速度ＡｔｋＩｔｐＳｐｅｅｄの時間変化を示す図である。本実施形態による閾値更新部２６ｃおよび補間速度更新部２６ｄは、それぞれ図７に示すステップＳＢ１０および図８に示すステップＳＣ１０を実行する。
【００５７】
より詳細に説明すると、図９（ｂ）に示すように、アタック２が発生する直前において、少なくとも１つの打撃体が打楽器２に向かって移動中であるとき、モーション検出部２６ａが出力する速度データＶｍｏｔｉｏｎは負方向に変化する。動作判定部２６ｂは、モーション検出部２６ａから速度データＶｍｏｔｉｏｎを受け取る毎に、速度データＶｍｏｔｉｏｎが負方向に変化しているか否かを判定し、その判定結果がＹｅｓである場合に、閾値更新部２６ｃに閾値更新指示信号を与える。閾値更新部２６ｃは、閾値更新指示信号を受け取ると、図９（ｃ）に示すように、係数Ｂｍｕｌをより小さな値に更新し（図７：ステップＳＢ１０）、その値を記憶部２４ａの揮発性メモリに格納する。このため、閾値判定部２４ｃが実行する図５に示す一連の処理において、Ｂｍｕｌ×Ｂｍｉnの表す値は係数Ｂｍｕｌの更新前よりも小さくなり、エンベロープデータＢの表す振幅値が減少から増加に転じた後、ステップＳＡ１５０の判定結果が‘Ｙｅｓ’となるまでに要する時間が、Δｔ’（Δｔ’＜Δｔ）まで短縮される。この点は、エンベロープデータＢの表す振幅値が閾値データＴｈ１を横切って増加してから、ステップＳＡ１５０の判定結果が‘Ｙｅｓ’となるまでに要する時間についても同様である。したがって、エンベロープデータＢの表す振幅値が第１の閾値を上回った後、発音制御信号生成部２４ｄはベロシティを付加した発音指示信号を迅速に出力することができるため、ノートオン信号をＭＩＤＩ音源等に与える際に発生するレーテンシを防止することが可能となる。なお、閾値更新部２６ｃは、その後モーション検出部２６ａから受け取った速度データＶｍｏｔｉｏｎが正方向に変化していると判定した場合、係数Ｂｍｕｌをより大きな値に更新する。
【００５８】
係数Ｂｍｕｌをより小さな値に更新すると、ステップＳＡ１５０において、ノイズに起因する誤判定が発生するおそれがある。そこで、動作判定部２６ｂは、モーション検出部２６ａから受け取った速度データＶｍｏｔｉｏｎが負方向に変化しているか否かの判定結果がＹｅｓである場合に、補間速度更新部２６ｄに補間速度更新指示信号を与える。補間速度更新部２６ｄは、補間速度更新指示信号を受け取ると、図９（ｄ）に示すように、アタック補間速度ＡｔｋＩｔｐＳｐｅｅｄをより小さな値に更新する（図８：ステップＳＣ１０）ことによりアタック補間速度を遅くし（サンプリングの時間間隔を大きくし）、その値を記憶部２４ａの揮発性メモリに格納する。エンベロープ抽出部２４ｂは、この更新されたアタック補間速度ＡｔｋＩｔｐＳｐｅｅｄに基づき、振動検出手段１２の出力データに補間処理を施し、当該補間処理後の出力データの表す波形のエンベロープを表すエンベロープデータを生成し、閾値判定部２４ｃに与える。この結果、閾値判定部２４ｃに与えるエンベロープデータＢにノイズが含まれる確率が減少し、係数Ｂｍｕｌの設定値をより小さな値に更新したとしても上記誤判定の発生を防止することが可能となる。加えて、閾値判定部２４ｃは上記エンベロープデータＢを基に図５に示すステップＳＡ１５０を実行するため、ベロシティＶｅｌの値の正確性を向上させることが可能となる。なお、補間速度更新部２６ｄは、その後モーション検出部２６ａから受け取った速度データＶｍｏｔｉｏｎが正方向に変化していると判定した場合、アタック補間速度ＡｔｋＩｔｐＳｐｅｅｄをより大きな値に更新する。
【００５９】
このように本実施形態によれば、電子音源による打楽器の演奏音の発音制御において、レーテンシの発生を回避することが可能になる。本実施形態でも、生ドラムのミュート演奏の際の発音制御への適用例を説明したが、電子ドラムなどの電子打楽器に発音制御装置１Ａを組み込み、当該電子打楽器における発音制御に発音制御装置１Ａを適用しても勿論良い。
【００６０】
以上本発明の第１および第２実施形態について説明したが、この実施形態に以下の変形を加えても勿論良い。
（１）上記実施形態では打楽器２の演奏態様として、一本のスティックで打面を打撃する態様、すなわち打撃体を１つだけ用いる態様について説明したが、複数の打撃体を用いる態様であっても良い。例えば、演奏者が左右の手にスティックを一本ずつ持って、これら２本のスティックを用いて打楽器２の打面を打撃するといった具合である。このような態様では、連打の局面では２本のスティックのうちの一方は打面に向かって移動し、他方は打面から離れるように移動する。そこで、このような態様においては、発音状態において一方の打撃体が打面に向かって移動中であり、かつ他方の打撃体が打面から離れる方向に移動中であると判定された場合に第２の閾値をより大きな値に更新する処理を閾値更新手段１６に実行させるようにすれば良い。
【００６１】
（２）上記実施形態では、閾値更新部１６による第２の閾値ｔｈ２の更新量Δを固定の値としたが、直近の打撃により打面に生じた振動の波形のエンベロープのピーク値に応じて更新量Δを定めるようにしても良い。具体的には、上記ピーク値が大きいほど更新量Δを大きくするのである。直近の打撃が強い程、上記ピーク値は大きくなり、時間経過に伴う上記振動の減衰量は小さくなる。このため、直近の打撃の強さによらずに上記更新量Δを一定値としておくと、直近の打撃が強く、次の打撃までに打面の振動が充分に減衰しなかった場合（すなわち、第２の閾値ｔｈ２を下回らなかった場合）には音抜けが発生する。本態様によれば、このような音抜けの発生を防止することができる。
【００６２】
（３）上記実施形態では、モーション検出部１４の出力データの表す示す鉛直方向の速度が正の値である場合に打撃体が打面に向かって移動中と判定した。しかし、打面に向かって打撃体が移動中である状況下で動作検出手段１０から出力される出力信号または当該出力信号の特徴を示す特徴量を記憶し、その記憶内容に応じて動作判定部１６ｂに上記判定を行わせるようにしても良い。例えば動作検出手段１０から出力される出力信号を記憶する態様であれば、当該記録済みの信号の表す波形とモーション検出部１４の出力データの表す波形の相互相関値を算出し、当該相互相関値が予め定められた値以上である場合に、打撃体が打面に向かって移動中であると判定する、といった具合である。このような態様によれば、打楽器の演奏に先立ってその演奏者特有の演奏動作を記録しておくことで、演奏者の演奏動作の個性を加味しつつ連打に起因する音抜けを確実に防止することが可能になる。
【００６３】
（４）上記実施形態では、打楽器２の打面を打撃するための１または複数の打撃体（上記実施形態では１本のスティック）の動きを検出し、その検出結果を示す信号を出力する動作検出手段として、上記スティックに内蔵された加速度センサを用いたが、演奏者の手首にリストバンドなどを用いて装着される加速度センサを上記動作検出手段として用いても良い。また、打楽器１を演奏する演奏者の様子を撮像するビデオカメラを上記動作検出手段として用いても良い。このようなビデオカメラの出力信号（打楽器１を演奏する様子を表す映像信号）に画像解析を施すことで演奏者の動作を判別することができるからである。
【００６４】
（５）上記実施形態では、発音制御装置１Ａに補間速度更新部２６ｄを設けたが、補間速度更新部２６ｄを省略してもよい。この態様によれば、エンベロープ波形に重畳されたノイズが少なければ上記実施形態と同様の効果が得られる。また、この態様によれば、発音制御装置１Ａの処理負荷や消費電力を低減することも可能となる。
【００６５】
（６）上記実施形態では、発音制御信号生成部２４では、図５におけるステップＳＡ１６０の処理の時点におけるエンベロープデータＢの表す振幅値に基づきベロシティ算出部２４ｅが算出したベロシティＶｅｌをノートオン信号に付加したが、当該ベロシティＶｅｌと上記時点の近傍における速度データＶｍｏｔｉｏｎの値を係数ｒ（０≦ｒ≦１）を用いて重みづけ加算した値、すなわちＶｍｏｔｉｏｎ×ｒ＋Ｖｅｌ×（１−ｒ）をノートオン信号に付加しても良い。
【００６６】
（７）上記実施形態では、打撃体に加速度センサ１０ａを取り付け、打楽器２の打面を打撃する際の打撃体の動きを検出したが、バスドラムやハイハットのペダルに加速度センサ１０ａを取り付け、バスドラムやシンバルの打面を打撃する際のペダルの動きを検出してもよい。この場合も、第１および第２実施形態と同様の効果が得られる。
【符号の説明】
【００６７】
１，１Ａ…発音制御装置、１０…動作検出手段、１２…振動検出手段、１４，２４…発音制御手段、１４ａ，２４ａ…記憶部、１４ｂ，２４ｂ…エンベロープ抽出部、２４１…全波整流部、２４２…補間部、２４２１，２４２２…増幅部、２４２３，２４２４…加算部、２４２５…遅延処理部、１４ｃ，２４ｃ…閾値判定部、１４ｄ，２４ｄ…発音制御信号生成部、１６，２６…閾値更新手段、１６ａ，２６ａ…モーション検出部、１６ｂ，２６ｂ…動作判定部、１６ｃ，２６ｃ…閾値更新部、２６ｄ…補間速度更新部、２…打楽器、３…サウンドシステム。
【図１】
2017161858.tif 000003
【図２】
2017161858.tif 000004
【図３】
2017161858.tif 000005
【図４】
2017161858.tif 000006
【図５】
2017161858.tif 000007
【図６】
2017161858.tif 000008
【図７】
2017161858.tif 000009
【図８】
2017161858.tif 000010
【図９】
2017161858.tif 000011