(57)【特許請求の範囲】
【請求項１】
波形データを用いた楽音の発音に関する条件を自動設定する装置であって、
前記波形データのエンベロープを検出する検出手段と、
前記検出手段が検出したエンベロープに基づいて、前記波形データに対応する楽音が減衰音か否か判別する判別手段と、
音高を指定するための操作子に対して行われ、タッチレスポンス機能が検出した操作状態を表す情報を楽音の発音に反映させるための設定を、前記判別手段の判別結果に従って異ならせる設定手段と、
を具備したことを特徴とする発音条件設定装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、波形データを用いた楽音の発音に関する条件を自動的に設定する技術に関する。
【０００２】
【従来の技術および発明が解決しようとする課題】
近年、電子楽器などにおいては、デジタル音源装置が広く採用されている。例えば、そのデジタル音源装置の一つであるＰＣＭ音源装置は、楽音をＰＣＭ方式で符号化することによって得られた波形データをメモリに格納しておき、そのメモリから波形データを読み出してそれの再生を行うことで楽音を発音する。このように、デジタル音源装置では、メモリに格納したデータを基に楽音が発音される。
【０００３】
その波形データで再生される楽音を適切な状態で発音させるには、サンプリングを行って取得するだけでなく、様々な設定も行わなければならない。具体的には、繰り返し再生するループ範囲や、エンベロープ、その波形データを発音に割り当てる音高範囲といった多くの発音に関する条件を設定する必要がある。以降、これらの条件を発音用パラメータと呼ぶことにする。
【０００４】
上記発音用パラメータは、現在は人が行っている。それらの設定が適切に行われていない場合、再生される楽音が不自然（違和感を与えることも含む）になる。それを回避するために、設定には非常に高度な技量や知識が要求される。そのパラメータの数も多い。これらのことから、発音用パラメータの設定には、高度な技量や知識が要求されるとともに、膨大な時間も必要となっていた。このような事情から、一般のユーザでは、その設定を適切に行うことは殆ど不可能となっていた。
【０００５】
本発明の課題は、波形データの再生に関わる条件の設定を自動的に行うようにすることにある。
【０００６】
【課題を解決するための手段】
本発明の第１の態様の発音条件設定装置は、波形データを用いた楽音の発音に関する条件を自動設定することを前提とし、波形データのエンベロープを検出する検出手段と、検出手段が検出したエンベロープに基づいて、波形データに対応する楽音が減衰音か否か判別する判別手段と、音高を指定するための操作子に対して行われ、タッチレスポンス機能が検出した操作状態を表す情報を楽音の発音に反映させるための設定を、判別手段の判別結果に従って異ならせる設定手段と、を具備する。
【００１３】
本発明は、対象とする波形データを解析してその特性を表す情報を検出し、その情報を基にして、その発音データに適した発音の条件を自動的に設定する。それにより、ユーザは、たとえサンプリングを行うことで波形データを取得したとしても、面倒な操作を行ったり時間をかけることなく、適切な形で楽音を発音させることが可能となる。
【００１４】
【発明の実施の形態】
以下、図面を参照しながら、本発明の実施の形態につき詳細に説明する。
図１は、本実施の形態が適用された電子楽器のブロック図である。本実施の形態による発音条件設定装置は、その電子楽器において、楽音をサンプリングすることで取得された波形データに対する発音用パラメータ（発音条件）の設定を行う機能として搭載されている。
【００１５】
上記電子楽器は、図１に示すように、楽器全体の制御を行うＣＰＵ１０１と、ユーザに対して視覚的に情報を通知する表示装置１０２と、プログラムや各種制御用データ等を格納したＲＯＭ１０３と、ＣＰＵ１０１がワーク用に用いるワークＲＡＭ１０４と、ユーザによる演奏操作が行われる鍵盤装置１０５と、各種のモード設定等をユーザが行うためのスイッチ群１０６と、楽音入力用のマイク１０７と、そのマイク１０７が出力したアナログの楽音信号を増幅するアンプ１０８と、ボリューム１０９を介してアンプ１０８が出力した楽音信号を入力し、その楽音信号をデジタルの波形データに変換して出力するＡ／Ｄコンバータ１１０と、そのＡ／Ｄコンバータ１１０が出力した波形データを格納するＲＡＭ１１１と、そのＲＡＭ１１１から読み出された波形データを再生して放音するサウンドシステム１１２と、を備えて構成されている。
【００１６】
以上の構成において、動作を説明する。
ＣＰＵ１０１は、ユーザがスイッチ群１０６や鍵盤装置１０５に対して行った操作に応じて、楽器全体を制御する。スイッチ群１０６に対して行われた操作に応じてモード設定、即ち鍵盤装置１０５やサウンドシステム１１２といった各部の設定を行い、表示装置１０２を制御して、現在設定されているモードをユーザに通知する。
【００１７】
鍵盤装置１０５は、タッチレスポンス機能を備えている。ユーザが行った演奏操作を検出して、押鍵された鍵の音高を表す情報（ノートナンバー）をＣＰＵ１０１に出力する。タッチレスポンス機能によって検出した押鍵ベロシティ等の操作状態に関する情報は、設定に応じてＣＰＵ１０１に出力する。
【００１８】
ＣＰＵ１０１は、鍵盤装置１０５から入力したそれらの情報に基づいて、ＲＡＭ１１１から読み出すべき波形データ、及びその読み出す速さ（ピッチ）を決定し、ＲＡＭ１１１からの波形データの読み出しを制御する。サウンドシステム１１２に対しては、楽音の発音に関する各種の設定、例えば音量や付加させる音響効果、その音響効果の深さといったことの設定を行う。このため、ＲＡＭ１１１から読み出された波形データは、サウンドシステム１１２によって処理が施された後、楽音として放音される。それにより、ユーザが所望する状態で楽音を放音させることができる。
【００１９】
上記スイッチ群１０６のスイッチの一つとして、楽音のサンプリングを指示するためのサンプリングスイッチ１０６ａが備えられている。図２に示すように、そのサンプリングスイッチ１０６ａの上方には、ＬＥＤ２０１が配設されている。そのＬＥＤ２０１は、楽音の取り込みを行っている間は点灯、それに対する設定を行っている間は点滅し、それらの旨をユーザに通知する。ユーザがサンプリングスイッチ１０６ａをオンした場合、ＣＰＵ１０１は、以下のようにして楽音の取り込みを行う。
【００２０】
ＣＰＵ１０１は、サンプリングスイッチ１０６ａがオンされると、先ず、表示装置１０２に、ＬＥＤ２０１の点灯を指示する制御コマンドを送出し、ユーザに楽音の取り込みが開始したことを通知する。その後、Ａ／Ｄコンバータ１１０に、アンプ１０８からボリューム１０９を介して入力される楽音信号の変換を指示する。それにより、Ａ／Ｄコンバータ１１０からＲＡＭ１１１に、所定のサンプリング周期でサンプリングされた波形データが出力される。
【００２１】
Ａ／Ｄコンバータ１１０からＲＡＭ１１１に波形データが出力されるようになると、ＣＰＵ１０１は、サンプリング周期に応じて書込アドレスを変更していくことで、ＲＡＭ１１１に波形データを格納させる。そのようにして、所定時間分の波形データをＲＡＭ１１１に格納させる。
【００２２】
波形データの格納を開始してから所定時間が経過すると、ＣＰＵ１０１は、Ａ／Ｄコンバータ１１０に対して楽音信号の変換の終了を指示する。表示装置１０２に対しては、ＬＥＤ２０１の点滅を指示する制御コマンドを出力する。ＲＡＭ１１１に新たに格納させた波形データの発音用パラメータの設定は、その後に開始する。
【００２３】
本実施の形態では、発音用パラメータとして、発音を割り当てる音高範囲、繰り返し再生するループ範囲、エンベロープレート、再生範囲等の各種のパラメータを設定する。それらの設定が終了すると、ＬＥＤ２０１の消灯を表示装置１０２に指示し、ユーザに楽音の取り込みに関わる全ての処理が終了したことを通知する。
【００２４】
詳細な説明は後述するが、このように、本実施の形態では、楽音の取り込み（波形データのＲＡＭ１１１への格納）とともに、それの発音用パラメータも合わせて設定する。このため、一般のユーザであっても、取り込ませた楽音を自然な状態で発音させることができる。これにより、所望の楽音での演奏を容易に行うことができ、電子楽器をより幅広く手軽に楽しむことができる。
【００２５】
次に、図３〜図２０を参照して、上記ＣＰＵ１０１の動作について詳細に説明する。
図３は、全体処理の動作フローチャートである。この全体処理は、ＣＰＵ１０１が、プログラムＲＯＭ１０３に格納されているプログラムを読み出して実行することで実現される処理である。始めに図３を参照して、全体処理について説明する。
【００２６】
先ず、ステップ３０１では、サンプリング処理を実行する。そのサンプリング処理は、マイク１０７を介して楽音を取り込み、それの発音用パラメータを設定する処理である。それが終了した後、ステップ３０２に移行する。
【００２７】
ステップ３０２では、発音処理を実行する。この発音処理は、ＲＡＭ１１１に格納されている波形データを読み出して楽音を発音させる処理である。その後、ステップ３０３に移行し、スイッチ群１０６に対して行われた操作に応じて各部の設定を行うといった他の処理を実行する。それが終了すると、ステップ３０１に戻る。
【００２８】
図４は、上記ステップ３０１として実行されるサンプリング処理の動作フローチャートである。次に、図４を参照して、サンプリング処理について詳細に説明する。
【００２９】
先ず、ステップ４０１では、サンプリングスイッチ１０６ａがオンされたか否か判定する。ユーザがサンプリングスイッチ１０６ａをオンし、楽音の取り込みを指示した場合、その判定はＹＥＳとなってステップ４０２に移行する。そうでない場合には、その判定はＮＯとなって一連の処理を終了する。ステップ４０２以降では、楽音の取り込みに関する各種の処理が行われる。
【００３０】
ステップ４０２では、ＬＥＤ２０１を点灯させる。続くステップ４０３では、Ａ／Ｄコンバータ１１０が出力する波形データをＲＡＭ１１１に取り込む波形取り込み処理を実行する。波形データの取り込みが終了すると、ステップ４０４に移行し、ＬＥＤ２０１を点灯から点滅させる状態に変化させた後、ステップ４０５に移行する。
【００３１】
ステップ４０５以降では、ステップ４０３で取り込んだ波形データの発音用パラメータの設定、或いはそれに関わる処理が行われる。
先ず、ステップ４０５では、取り込んだ波形データのピッチ（音高）を抽出するピッチ抽出処理を実行する。ここでのピッチとは、サンプリング周期で波形データを読み出して再生した際の楽音のピッチ、換言すれば、マイク１０７を介して取り込んだ楽音のピッチである。それが終了した後、ステップ４０６に移行し、抽出したピッチを、取り込んだ波形データの基準となるピッチ（基準ピッチ）として確定させる処理を行う。その後、ステップ４０７に移行する。ＣＰＵ１０１は、上記基準ピッチを、波形データの特性を表すパラメータとしてＲＡＭ１０４に保持する。
【００３２】
ステップ４０６に続くステップ４０７では、その基準ピッチに基づいて、取り込んだ波形データで発音させる音高範囲を決定するスプリット決定処理を実行する。その後、ステップ４０８に移行する。
【００３３】
ステップ４０８では、波形データにおける局所的な最大値（ＭＡＸ値）、最小値（ＭＩＮ値）を検出するＭＡＸ／ＭＩＮ値検出処理を実行する。この処理では、局所的なＭＡＸ値、及びＭＩＮ値を５つ検出する。これらの局所的な値は、それに続くステップ４０９以降で使用される。
【００３４】
ステップ４０９では、自動増幅処理を実行する。この自動増幅処理は、マイク１０７が拾った楽音の音量によって発音させる楽音が変化しないように、取り込んだ波形データに対する調整用の増幅率（本実施の形態では乗算値）を決定する処理である。その自動増幅処理を終了すると、ステップ４１０に移行する。
【００３５】
ステップ４１０では、エンベロープ（ＥＮＶ）推定処理を実行する。このエンベロープ（ＥＮＶ）推定処理は、取り込んだ波形データから、それが減衰音であるか否かを判別する処理である。その処理が終了すると、ステップ４１１に移行する。
【００３６】
ステップ４１１では、波形データのなかで繰り返し再生させるループ範囲を設定するループ範囲設定処理を実行する。続くステップ４１２では、エンベロープレート値を設定するＥＮＶ値設定処理を実行する。その後、ステップ４１３に移行する。
【００３７】
ステップ４１３では、取り込んだ波形データの再生に、タッチレスポンス機能による音量変化を行うか否かを設定するＶＥＬ  ＳＥＮＳ設定処理を実行する。続くステップ４１４では、楽音を発音させる場合に最初に読み出すべき波形データのアドレス（スタートアドレス）を確定するスタートアドレス確定処理を実行する。
【００３８】
ステップ４１４の実行が終了することにより、発音用パラメータの設定が完了する。ステップ４１４に続くステップ４１５では、ＬＥＤ２０１を消灯させてユーザにその旨を通知し、その後、一連の処理を終了する。
【００３９】
このように、本実施の形態では、発音用パラメータを、音高範囲、増幅率（乗算値）、ループ範囲、エンベロープレート値、スタートアドレスの順序で設定するようにしている。これらのパラメータを、波形データの取り込みと合わせて自動的に設定する。このため、ユーザは、面倒な操作を行うことなく、また、時間をかけることなく、取り込ませた波形データを適切な状態で発音させることができる。
【００４０】
図５〜図２０は、図４に示すサンプリング処理内で実行される各種サブルーチン処理の動作フローチャートである。以降は、これら図５〜図２０を参照して、それらのサブルーチン処理について詳細に説明する。
【００４１】
図５は、図４に示すステップ４０３として実行される波形取り込み処理の動作フローチャートである。始めに、この図５を参照して、波形取り込み処理について詳細に説明する。
【００４２】
上述したように、サンプリングスイッチ１０６ａがオンされると、ＣＰＵ１０１は、Ａ／Ｄコンバータ１１０に、ボリューム１０９を介してアンプ１０８から入力したアナログの楽音信号をデジタルの波形データに変換するのを指示する。ステップ５０１では、その指示を行った後、実際に波形データがＡ／Ｄコンバータ１１０からＲＡＭ１１１に出力されるようになるまで待機する。波形データがＲＡＭ１１１に出力されるようになると、ステップ５０１の判定がＹＥＳとなってステップ５０２に移行する。
【００４３】
なお、Ａ／Ｄコンバータ１１０の出力はＣＰＵ１０１に入力されており、ＣＰＵ１０１は、実際に波形データがＲＡＭ１１１に出力されているか否かを、その波形データが予め定めた値以上となったか否かから判定する。
【００４４】
ステップ５０２では、Ａ／Ｄコンバータ１１０が出力した波形データをＲＡＭ１１１に格納する波形取り込みを行う。その波形の取り込みは、ＲＡＭ１１１に、データの書き込みを指示するライトイネーブル信号をアクティブにするとともに、データを書き込ませるアドレスを指定することで行われる。
【００４５】
ステップ５０２に続くステップ５０３では、波形データの取り込みを開始してから所定時間が経過したか否か判定する。その所定時間が経過していない場合、その判定はＮＯとなってステップ５０２に移行して、波形データの取り込みを続行する。そうでない場合には、その判定はＹＥＳとなってステップ５０４に移行する。
【００４６】
このように、ステップ５０２、５０３の繰り返しにより、ステップ５０１の判定がＹＥＳとなってから所定時間が経過するまでの間、ＲＡＭ１１１に、アドレスを変更しながらの波形データの書き込みが行われる。
【００４７】
ステップ５０４では、波形データの取り込みの終了に伴い、その波形データの保持を行う。その保持は、例えば波形データが格納されたＲＡＭ１１１内の領域を、使用中の領域として登録することで実現する。それが終了した後、一連の処理を終了する。
【００４８】
図６は、図４に示すサンプリング処理内でステップ４０５として実行されるピッチ抽出処理の動作フローチャートである。次に、この図６を参照して、ピッチ抽出処理について詳細に説明する。上述したように、このピッチ抽出処理の実行により、取り込んだ波形データのピッチ（音高）が抽出される。
【００４９】
先ず、ステップ６０１では、波形データ中でピークとなっている点を検出し、検出したピーク点の間隔からピッチを抽出するピーク検出処理を実行する。続くステップ６０２では、波形データ中のゼロクロス点を検出し、検出したゼロクロス点の間隔からピッチを抽出するゼロクロス検出処理を実行する。その後、ステップ６０３に移行する。
【００５０】
上記の各検出処理を実行することで、ピーク点、ゼロクロス点に着目したピッチ（データ）が各々抽出される。ステップ６０３では、それらのピッチが一致するか否か判定する。それらのピッチが一致していた場合、その判定はＹＥＳとなってステップ６０４に移行する。そうでない場合には、その判定はＮＯとなってステップ６０５に移行する。
【００５１】
ステップ６０４では、一致したピッチを抽出したピッチデータとして保持した後、一連の処理を終了する。他方のステップ６０５では、それらのピッチの平均値を算出し、その平均値をピッチデータとして保持した後、一連の処理を終了する。
【００５２】
このように、本実施の形態では、ピーク点とゼロクロス点に着目したピッチ検出をそれぞれ行っている。これにより、より正確なピッチデータを取得することができる。
【００５３】
ここで、上記ピッチ抽出処理内で実行されるピーク検出処理、ゼロクロス検出処理の各サブルーチン処理について、図７、図８にそれぞれ示す動作フローチャートを参照して詳細に説明する。
【００５４】
図７は、図６に示すステップ６０１として実行されるピーク検出処理の動作フローチャートである。始めに、図７を参照して、ピーク検出処理について詳細に説明する。
【００５５】
このピーク検出処理では、波形データの終わり、即ちＲＡＭ１１１のそれを格納した領域の最終アドレスを起点として、１つずつアドレス（の値）を前に戻しながら、ピーク点の検出、及びピッチに対応するピーク点の間隔の検出が行われる。波形データの終わりを起点にしているのは、音の波形は時間が経過するにつれてシンプルになっていく傾向があるためである。
【００５６】
なお、後述するように、ピーク点の間隔を５回行い、その平均値をピッチデータとしているが、その回数は、それに限定されるものではない。必要に応じて、例えば波形データの全体的な特性についての解析を行い、その解析結果に基づいた回数を行うようにしても良い。
【００５７】
先ず、ステップ７０１では、ピーク点間隔の検出回数のカウント用に用いる変数ｎに０を代入するとともに、ＲＡＭ１１１から波形データを読み出すアドレスの値を最終アドレスの値に設定する。続くステップ７０２では、その変数ｎの値が５か否か判定する。ピーク点間隔の検出を予め定めた回数（本実施の形態では５回）だけ行った場合、その判定はＹＥＳとなってステップ７１６に移行する。そうでない場合には、その判定はＮＯとなってステップ７０３に移行する。
【００５８】
ステップ７０３では、現在設定されているアドレスに格納されているデータをＲＡＭ１１１から読み出す。続くステップ７０４では、ピーク点となっているデータを検出したか否か判定する。ステップ７０３でＲＡＭ１１１から読み出したデータがピーク点であった場合、その判定はＹＥＳとなってステップ７０８に移行する。そうでない場合には、その判定はＮＯとなってステップ７０５に移行する。
【００５９】
なお、ピーク点は、例えば現在設定しているアドレスを中心として、その前後のアドレスに格納されているデータを幾つかＲＡＭ１１１から読み出し、そのデータの変化から検出することができる。そのアドレスの周辺においてデータの値（波高値）が変化している様子を合わせて検出した場合には、より正確にピーク点を検出することができる。これは、後述するゼロクロス点の検出においても同様である。
【００６０】
ステップ７０５では、ピーク検出中フラグがオンであるか否か判定する。このピーク検出中フラグは、ピーク点間隔を検出している途中か否か、より正確には、その間隔内に存在しているアドレス（データ）数をカウントしているか否かを示すフラグである。そのフラグがオフであった場合、その判定はＮＯとなってステップ７０７に移行する。そうでない場合には、即ち現在ピーク点間隔を検出中である場合には、その判定はＹＥＳとなってステップ７０６に移行する。
【００６１】
ステップ７０６では、ピーク点間隔内に存在するアドレスをカウントするための変数である差分アドレスをインクリメントする。それに続くステップ７０７では、上記ステップ７０３でデータを読み出すアドレスの値をデクリメントする。その後、ステップ７０２に戻る。
【００６２】
ピーク点間隔内に存在するアドレス数をカウント中であった場合、ステップ７０４の判定がＹＥＳ、即ち次のピーク点を検出するまでの間、ステップ７０２〜７０７の処理ループが形成される。このため、ピーク点を検出してピーク検出中フラグをオンにしてから次のピーク点を検出するまでのアドレス数が、差分アドレス（変数）を用いてカウントされる。
【００６３】
そのステップ７０４の判定がＹＥＳ、即ち波形データにおけるピーク点を検出したことで移行するステップ７０８では、ピーク検出中フラグがオンか否か判定する。ピーク検出中フラグがオンしている場合、その判定はＹＥＳとなってステップ７１１に移行する。そうでない場合には、その判定はＮＯとなってステップ７０９に移行する。
【００６４】
ステップ７０９では、ピーク検出中フラグをオンにセットする。続くステップ７１０では、ピーク点間隔のカウント用である上記差分アドレスをリセット、即ちその変数に０を代入する。その後、ステップ７０７に移行する。
【００６５】
このように、ピーク検出中フラグがオフでピーク点間隔のカウントを行っていなかった場合には、ピーク検出中フラグをオンし、差分アドレスをリセットする。これにより、ピーク点間隔のカウントが開始される。
【００６６】
一方、ステップ７０８の判定のＹＥＳは、ピーク点間隔のカウントが終了、即ち１回のピーク点間隔の検出が終了したことを意味する。そのステップ７０８の判定がＹＥＳとなることで移行するステップ７１１では、差分アドレスに現在代入されている値を時間データとして格納する。続くステップ７１２では、その時間データに対応するピッチ（音高）を求める。ピッチ（音高）を求めた後、ステップ７１３に移行する。
【００６７】
差分アドレスの値に対応する時間間隔、即ち波形データの１周期は、その値に、波形データのサンプリング周期（１アドレス当たりの時間間隔）を掛けることで算出することができる。その１周期を算出することにより、それに対応するピッチ（音高）も求めることができる。
【００６８】
ステップ７１３では、ピーク検出中フラグをオフにする。続くステップ７１４では、ステップ７１２で得たピッチ（音高）を、変数ｎが示す回のピッチデータとして保存する。ピッチデータの保存が終了すると、ステップ７１５で変数ｎの値をインクリメントした後、ステップ７０７に移行する。
【００６９】
このように、ピーク検出中フラグがオンであった場合、ステップ７１３ではそのフラグをオフにする。これにより、本実施の形態では、ピーク点間隔の検出を１つ置きに行うようにしている。
【００７０】
ステップ７１５でインクリメントした上記変数ｎの値が５になると、ステップ７０２の判定がＹＥＳとなってステップ７１６が実行される。そのステップ７１６では、変数ｎの値が０〜４の計５回行ったピーク点間隔の検出により得たピッチデータの平均値を算出する。その平均値を算出した後、一連の処理を終了する。その算出した平均値が、このピーク検出処理のピッチデータとして、図６に示すピッチ抽出処理に渡される。
【００７１】
図８は、図６に示すステップ６０２として実行されるゼロクロス検出処理の動作フローチャートである。次に、図８を参照して、ゼロクロス検出処理について詳細に説明する。
【００７２】
このゼロクロス検出処理では、上述したピーク検出処理と同様に、波形データの終わり、即ちＲＡＭ１１１のそれを格納した領域の最終アドレスを起点として、１つずつアドレス（の値）を前に戻しながら、ゼロクロス点の検出、及びピッチに対応するゼロクロス点の間隔の検出が行われる。
【００７３】
なお、後述するように、ピーク点の間隔を５回行い、その平均値をピッチデータとしているが、その回数は、それに限定されるものではない。必要に応じて、例えば波形データの全体的な特性についての解析を行い、その解析結果に基づいた回数を行うようにしても良い。
【００７４】
先ず、ステップ８０１では、ピーク点間隔の検出回数のカウント用に用いる変数ｎに０を代入するとともに、ＲＡＭ１１１から波形データを読み出すアドレスの値を最終アドレスの値に設定する。続くステップ８０２では、その変数ｎの値が５か否か判定する。ピーク点間隔の検出を予め定めた回数（本実施の形態では５回）だけ行った場合、その判定はＹＥＳとなってステップ８１６に移行する。そうでない場合には、その判定はＮＯとなってステップ８０３に移行する。
【００７５】
ステップ８０３では、現在設定されているアドレスに格納されているデータをＲＡＭ１１１から読み出す。続くステップ８０４では、ゼロクロス点となっているデータを検出したか否か判定する。ステップ８０３でＲＡＭ１１１から読み出したデータがゼロクロス点であった場合、その判定はＹＥＳとなってステップ８０８に移行する。そうでない場合には、その判定はＮＯとなってステップ８０５に移行する。
【００７６】
ステップ８０５では、ゼロクロス検出中フラグがオンであるか否か判定する。このゼロクロス検出中フラグは、ゼロクロス点間隔を検出している途中か否か、より正確には、その間隔内に存在しているアドレス（データ）数をカウントしているか否かを示すフラグである。そのフラグがオフであった場合、その判定はＮＯとなってステップ８０７に移行する。そうでない場合には、即ち現在ゼロクロス点間隔を検出中である場合には、その判定はＹＥＳとなってステップ８０６に移行する。
【００７７】
ステップ８０６では、ゼロクロス点間隔内に存在するアドレス数をカウントするための変数である差分アドレスをインクリメントする。それに続くステップ８０７では、上記ステップ８０３でデータを読み出すアドレスの値をデクリメントする。その後、ステップ８０２に戻る。
【００７８】
ゼロクロス点間隔内に存在するアドレス数をカウント中であった場合、ステップ８０４の判定がＹＥＳ、即ち次のゼロクロス点を検出するまでの間、ステップ８０２〜８０７の処理ループが形成される。このため、ゼロクロス点を検出してゼロクロス検出中フラグをオンにしてから次のゼロクロス点を検出するまでのアドレス数が、差分アドレス（変数）を用いてカウントされる。
【００７９】
そのステップ８０４の判定がＹＥＳ、即ち波形データにおけるゼロクロス点を検出したことで移行するステップ８０８では、ゼロクロス検出中フラグがオンか否か判定する。ゼロクロス検出中フラグがオンしている場合、その判定はＹＥＳとなってステップ８１１に移行する。そうでない場合には、その判定はＮＯとなってステップ８０９に移行する。
【００８０】
ステップ８０９では、ゼロクロス検出中フラグをオンにセットする。続くステップ８１０では、上記差分アドレスをリセット、即ちその変数に０を代入する。その後、ステップ８０７に移行する。
【００８１】
このように、ゼロクロス検出中フラグがオフでゼロクロス点間隔のカウントを行っていなかった場合には、ゼロクロス検出中フラグをオンし、差分アドレスをリセットする。これにより、ゼロクロス点間隔のカウントが開始される。
【００８２】
一方、ステップ８０８の判定のＹＥＳは、ゼロクロス点間隔のカウントが終了、即ち１回のゼロクロス点間隔の検出が終了したことを意味する。そのステップ８０８の判定がＹＥＳとなることで移行するステップ８１１では、差分アドレスに現在代入されている値を時間データとして格納する。続くステップ８１２では、その時間データに対応するピッチ（音高）を求める。ピッチ（音高）を求めた後、ステップ８１３に移行する。
【００８３】
差分アドレスの値に対応する時間間隔、即ち波形データの１周期は、その値に、波形データのサンプリング周期（１アドレス当たりの時間間隔）を掛けることで算出することができる。その１周期を算出することにより、それに対応するピッチ（音高）も求めることができる。
【００８４】
ステップ８１３では、ゼロクロス検出中フラグをオフにする。続くステップ８１４では、ステップ８１２で得たピッチ（音高）を、変数ｎが示す回のピッチデータとして保存する。ピッチデータの保存が終了すると、ステップ８１５で変数ｎの値をインクリメントした後、ステップ８０７に移行する。
【００８５】
このように、ゼロクロス検出中フラグがオンであった場合、ステップ８１３ではそのフラグをオフにする。これにより、本実施の形態では、ゼロクロス点間隔の検出を１つ置きに行うようにしている。
【００８６】
ステップ８１５でインクリメントした上記変数ｎの値が５になると、ステップ８０２の判定がＹＥＳとなってステップ８１６が実行される。そのステップ８１６では、変数ｎの値が０〜４の計５回行ったゼロクロス点間隔の検出により得たピッチデータの平均値を算出する。その平均値を算出した後、一連の処理を終了する。その算出した平均値が、このゼロクロス検出処理のピッチデータとして、図６に示すピッチ抽出処理に渡される。
【００８７】
次に、図４に示すサンプリング処理内でステップ４０７として実行されるスプリット決定処理について、図９に示すその動作フローチャートを参照して詳細に説明する。
【００８８】
本実施の形態では、ＲＡＭ１１１に複数の波形データを取り込めるようにしている。各波形データは、その基準ピッチに応じて、鍵盤装置１０５が備えている鍵盤を複数の鍵域に分割して割り当てるようにしている。その分割と割り当ては、スプリット決定処理により行われる。
【００８９】
先ず、ステップ９０１では、ＲＡＭ１１１に他の波形データが取り込まれているか否か判定する。ユーザが他に波形データを取り込ませていた場合、その判定はＹＥＳとなってステップ９０３に移行する。そうでない場合には、その判定はＮＯとなってステップ９０２に移行する。
【００９０】
そのステップ９０２では、ＲＡＭ１１１に取り込まれている波形データは一つだけであることから、その基準ピッチ（図４中のステップ４０６で確定されたピッチ）を中心にして、鍵盤装置１０５の全てに取り込んだ波形データを割り当てる。その後、一連の処理を終了する。
【００９１】
ステップ９０３〜９０８では、他に波形データがＲＡＭ１１１に格納されていることから、それら各波形データの基準ピッチに基づいた波形データの鍵盤への割り当てが行われる。
【００９２】
先ず、ステップ９０３では、今回取り込んだ波形データの基準ピッチより高い基準ピッチの波形データがＲＡＭ１１１に格納されているか否か判定する。波形データが多数ＲＡＭ１１１に格納されている場合、今回の波形データの基準ピッチより基準ピッチが高い波形データが複数存在することも考えられる。このことから、ステップ９０３では、今回の波形データの基準ピッチの次に低い基準ピッチの波形データを特定することも合わせて行われる。
【００９３】
今回の波形データの基準ピッチより高い基準ピッチの波形データが一つでもＲＡＭ１１１に取り込まれている場合、その判定はＹＥＳとなってステップ９０５に移行する。そうでない場合には、その判定はＮＯとなってステップ９０４に移行する。
【００９４】
そのステップ９０４では、今回取り込んだ波形データの基準ピッチが最も高いことから、その基準ピッチに対応する鍵より音高が高い全ての鍵を、その波形データに割り当てる。その後、ステップ９０６に移行する。
【００９５】
他方のステップ９０５では、今回取り込んだ波形データの基準ピッチと、それよりも基準ピッチが一つ上側の波形データの基準ピッチとの中間にスプリットを設定する。その後、ステップ９０６に移行する。
【００９６】
上記ステップ９０４、或いは９０５の何れかを実行することにより、今回取り込んだ波形データが割り当てられる鍵域の上限が確定する。ステップ９０６〜９０８では、その鍵域の下限の確定が行われる。
【００９７】
先ず、ステップ９０６では、今回取り込んだ波形データの基準ピッチより低い基準ピッチの波形データがＲＡＭ１１１に格納されているか否か判定する。波形データが多数ＲＡＭ１１１に格納されている場合、上記と同様に、今回の波形データの基準ピッチより基準ピッチが低い波形データが複数存在することも考えられる。このことから、ステップ９０６では、今回の波形データの基準ピッチの次に高い基準ピッチの波形データを特定することも合わせて行われる。
【００９８】
今回の波形データの基準ピッチより低い基準ピッチの波形データが一つでもＲＡＭ１１１に取り込まれている場合、その判定はＹＥＳとなってステップ９０８に移行する。そうでない場合には、その判定はＮＯとなってステップ９０７に移行する。
【００９９】
そのステップ９０７では、今回取り込んだ波形データの基準ピッチが最も低いことから、その基準ピッチに対応する鍵より音高が低い全ての鍵を、その波形データに割り当てる。その後、一連の処理を終了する。
【０１００】
他方のステップ９０８では、今回取り込んだ波形データの基準ピッチと、それよりも基準ピッチが一つ下側の波形データの基準ピッチとの中間にスプリットを設定する。その後、一連の処理を終了する。
【０１０１】
このように、スプリット処理では、今回取り込んだ波形データの基準ピッチに基づいて、その波形データを鍵盤に割り当てる。このため、ユーザが指定した音高と実際に発音された楽音の音高とがズレるといったことがなくなり、人が発音された楽音から受ける違和感を最小限度に抑えることができるようになる。
【０１０２】
なお、上記波形データの割り当てにおいては、ユーザにその割り当てを行わせる条件を入力させて、その条件も考慮して割り当てを行うようにしても良い。これにより、その波形データを取り込ませた目的等に応じて、ユーザはより所望する形での波形データの割り当てを行わせることができるようになる。
【０１０３】
図１０は、図４に示すサンプリング処理でステップ４０８として実行されるＭＡＸ／ＭＩＮ値検出処理の動作フローチャートである。次に、図１０を参照して、その処理動作について詳細に説明する。
【０１０４】
本実施の形態では、このＭＡＸ／ＭＩＮ値検出処理により、波形データの局所的なＭＡＸ値、及びＭＩＮ値を、それぞれその絶対値の大きいほうから５個抽出している。ここでは、各ＭＡＸ値、及びＭＩＮ値の区別を明確にするために、それらを各々絶対値の大きいほうから、ＭＡＸ値についてはＭＡＸ１値、ＭＡＸ２値、・・・、ＭＡＸ５値、ＭＩＮ値についてはＭＩＮ１値、ＭＩＮ２値、・・・、ＭＩＮ５値と呼ぶことにする。
【０１０５】
先ず、ステップ１００１では、最も大きいＭＡＸ値であるＭＡＸ１値を検出する処理を実行する。それに続くステップ１００２〜１００５では、それぞれ、ＭＡＸ２値〜ＭＡＸ５値を検出する処理を実行する。５番目に大きいＭＡＸ５値を検出した後、ステップ１００６に移行する。
【０１０６】
ステップ１００６〜１０１０では、上記と同様に、最も小さいＭＩＮ値であるＭＩＮ１値から、５番目に小さいＭＩＮ５値まで順に検出することが行われる。ＭＩＮ５値を検出した後、一連の処理を終了する。
【０１０７】
ここで、上記ＭＡＸ／ＭＩＮ値検出処理内で実行されるサブルーチン処理について、図１１〜図１４を参照して詳細に説明する。
始めに、図１０に示すＭＡＸ／ＭＩＮ値検出処理内でステップ１００１として実行されるＭＡＸ１値検出処理について、図１１に示すその動作フローチャートを参照して詳細に説明する。
【０１０８】
このＭＡＸ１値検出処理では、波形データの頭から、即ちＲＡＭ１１１のその波形データが格納されている領域の先頭アドレスから、順次アドレスを変更しながらそこに格納されているデータを読み出し、その読み出したデータがそれまでに読み出したデータよりも大きいか否か比較していくことにより、ＭＡＸ１値を検出する。
【０１０９】
先ず、ステップ１１０１では、ＲＡＭ１１１からデータを読み出すアドレスの指定に用いる変数ｎに０を代入する。この変数ｎは、ＲＡＭ１１１内の対象としている波形データが格納されている領域の先頭アドレスの値と加算され、その加算後のアドレスのデータがＲＡＭ１１１から読み出される。
【０１１０】
ステップ１１０１に続くステップ１１０２では、上記のように、変数ｎによって指定されるアドレスからデータを読み出し、そのデータとそれのアドレスの値を保持する。これら保持したデータとアドレスの値は、後述するように、それ以降にＲＡＭ１１１から読み出したデータとの比較に用いられる。それらの保持が終了した後、ステップ１１０３に移行する。
【０１１１】
ステップ１１０３〜１１０６は処理ループを形成している。その処理ループでは、アドレスを順次更新しながら、それまでに読み出したデータのなかで最大のデータ、及びそれのアドレスの値を保持していくことが行われる。
【０１１２】
先ず、ステップ１１０３では、変数ｎのインクリメントを行う。そのインクリメントが終了すると、ステップ１１０４に移行し、そこで変数ｎによって指定されるデータを読み出す。続くステップ１１０５では、その読み出したデータを、保持していたそれまでに読み出したデータのなかでの最大のデータと比較し、より値が大きいほうのデータ、及びそのデータが格納されていたアドレスの値を各々保持する。その後、ステップ１１０６に移行する。
【０１１３】
ステップ１１０６では、ステップ１１０３でインクリメント（更新）した変数ｎと波形データが格納されている領域の先頭アドレスとを加算した値が、その領域の最終アドレスの値であるか否か判定する。波形データを構成する各データを全てチェックした場合、その判定はＹＥＳとなってステップ１１０７に移行する。そうでない場合には、その判定はＮＯとなってステップ１１０３に戻る。
【０１１４】
ステップ１１０７に移行した時点で保持しているデータは、それまでよりも大きいデータを読み出す毎にそれに置き換えて保持していることから、波形データのなかで最も大きい値である。このため、ステップ１１０７では、その保持しているデータをＭＡＸ１値として保持（確定）し、また、それが格納されているアドレスの値を保持する。それらの保持が終了した後、一連の処理を終了する。
図１２は、図１０に示すＭＡＸ／ＭＩＮ値検出処理内でステップ１００２として実行されるＭＡＸ２値検出処理の動作フローチャートである。次に、図１２を参照して、その処理動作を詳細に説明する。
【０１１５】
このＭＡＸ２値検出処理では、上述したようにしてＭＡＸ１値が確定していることから、そのＭＡＸ１値を考慮しつつ、ＲＡＭ１１１の波形データが格納されている領域の先頭アドレスから、ＭＡＸ１値の次に大きいＭＡＸ値（ＭＡＸ２値）を探していくことが行われる。
【０１１６】
先ず、ステップ１２０１では、ＲＡＭ１１１からデータを読み出すアドレスの指定に用いる変数ｎに０を代入する。この変数ｎは、ＲＡＭ１１１内の対象としている波形データが格納されている領域の先頭アドレスの値と加算され、その加算後のアドレスのデータがＲＡＭ１１１から読み出される。
【０１１７】
ステップ１２０１に続くステップ１２０２では、上記のように、変数ｎによって指定されるアドレスからデータを読み出し、そのデータとそれのアドレスの値を保持する。これら保持したデータとアドレスの値は、後述するように、それ以降にＲＡＭ１１１から読み出したデータとの比較に用いられる。それらの保持が終了した後、ステップ１２０３に移行する。
【０１１８】
ステップ１２０３〜１２１０は、ステップ１２０３〜１２０８、１２１０、或いはステップ１２０３〜１２０７、１２０９、１２１０の処理ループを形成している。それら何れかの処理ループを実行していくことにより、ＭＡＸ１値に続く大きさのＭＡＸ２値に対応するデータ、及びそれのアドレスの値が共に保持される。
【０１１９】
先ず、ステップ１２０３では、変数ｎのインクリメントを行う。そのインクリメントが終了すると、ステップ１２０４に移行し、そこで変数ｎによって指定されるデータを読み出す。続くステップ１２０５では、その読み出したデータを、保持していたデータと比較する。その比較を行った後に移行するステップ１２０６では、より値が大きいほうのデータ、及びそのデータが格納されていたアドレスの値を各々仮に保持する。その後、ステップ１２０７に移行する。
【０１２０】
ステップ１２０７では、その仮に保持したアドレスの値がＭＡＸ１値のアドレスの値と同じか否か判定する。ステップ１２０４でデータを読み出したアドレスがＭＡＸ１値のそれと同じであった場合、その判定はＹＥＳとなってステップ１２０８に移行する。そうでない場合には、その判定はＮＯとなってステップ１２０９に移行する。
【０１２１】
ステップ１２０８では、ステップ１２０６で仮に保持したデータとそれのアドレスの値を廃棄し、保持内容の更新（置き換え）を取りやめる。その後、ステップ１２１０に移行する。他方のステップ１２０９では、ステップ１２０６で仮に保持したデータとそのアドレスの値を保持し、保持内容の更新を行う。その後、ステップ１２１０に移行する。
【０１２２】
ステップ１２１０では、ステップ１２０３でインクリメント（更新）した変数ｎと波形データが格納されている領域の先頭アドレスの値とを加算した値が、その領域の最終アドレスの値であるか否か判定する。波形データを構成する各データを全てチェックした場合、その判定はＹＥＳとなってステップ１２１１に移行する。そうでない場合、その判定はＮＯとなってステップ１２０３に戻る。
【０１２３】
ステップ１２１１に移行した時点で保持しているデータは、ＭＡＸ１値の次に大きいＭＡＸ値である。このため、ステップ１２１１では、その保持しているデータをＭＡＸ２値として保持（確定）し、また、それが格納されているアドレスの値を保持する。それらの保持が終了した後、一連の処理を終了する。
【０１２４】
図１３は、図１０に示すＭＡＸ／ＭＩＮ値検出処理内でステップ１００６として実行されるＭＩＮ１値検出処理の動作フローチャートである。次に、図１３を参照して、その処理動作を詳細に説明する。
【０１２５】
このＭＩＮ１値検出処理では、ＲＡＭ１１１の波形データが格納されている領域の先頭アドレスから、順次アドレスを変更しながらそこに格納されているデータを読み出し、その読み出したデータがそれまでに読み出したデータよりも小さいか否か比較していくことにより、ＭＩＮ１値を検出する。
【０１２６】
先ず、ステップ１３０１では、ＲＡＭ１１１からデータを読み出すアドレスの指定に用いる変数ｎに０を代入する。この変数ｎは、ＲＡＭ１１１内の対象としている波形データが格納されている領域の先頭アドレスの値と加算され、その加算後のアドレスのデータがＲＡＭ１１１から読み出される。
【０１２７】
ステップ１３０１に続くステップ１３０２では、上記のように、変数ｎによって指定されるアドレスからデータを読み出し、そのデータとそれのアドレスの値を保持する。これら保持したデータとアドレスの値は、後述するように、それ以降にＲＡＭ１１１から読み出したデータとの比較に用いられる。それらの保持が終了した後、ステップ１３０３に移行する。
【０１２８】
ステップ１３０３〜１３０６は処理ループを形成している。その処理ループでは、アドレスを順次更新しながら、それまでに読み出したデータのなかで最小のデータ、及びそれのアドレスの値を保持していくことが行われる。
【０１２９】
先ず、ステップ１３０３では、変数ｎのインクリメントを行う。そのインクリメントが終了すると、ステップ１３０４に移行し、そこで変数ｎによって指定されるデータを読み出す。続くステップ１３０５では、その読み出したデータを、保持していたそれまでに読み出したデータのなかでの最小のデータと比較し、より値が小さいほうのデータ、及びそのデータが格納されていたアドレスの値を各々保持する。その後、ステップ１３０６に移行する。
【０１３０】
ステップ１３０６では、ステップ１３０３でインクリメント（更新）した変数ｎと波形データが格納されている領域の先頭アドレスの値とを加算した値が、その領域の最終アドレスの値であるか否か判定する。波形データを構成する各データを全てチェックした場合、その判定はＹＥＳとなってステップ１３０７に移行する。そうでない場合、その判定はＮＯとなってステップ１３０３に戻る。
【０１３１】
ステップ１３０７に移行した時点で保持しているデータは、それまでよりも小さいデータを読み出す毎にそれに置き換えて保持していることから、波形データのなかで最も小さい値である。このため、ステップ１３０７では、その保持しているデータをＭＩＮ１値として保持（確定）し、また、それが格納されているアドレスの値を保持する。それらの保持が終了した後、一連の処理を終了する。
【０１３２】
図１４は、図１０に示すＭＡＸ／ＭＩＮ値検出処理内でステップ１００７として実行されるＭＩＮ２値検出処理の動作フローチャートである。次に、図１４を参照して、その処理動作を詳細に説明する。
【０１３３】
このＭＩＮ２値検出処理では、上述したようにしてＭＩＮ１値が確定していることから、そのＭＩＮ１値を考慮しつつ、ＲＡＭ１１１の波形データが格納されている領域の先頭アドレスから、ＭＩＮ１値の次に小さいＭＩＮ値（ＭＩＮ２値）を探していくことが行われる。
【０１３４】
先ず、ステップ１４０１では、ＲＡＭ１１１からデータを読み出すアドレスの指定に用いる変数ｎに０を代入する。この変数ｎは、ＲＡＭ１１１内の対象としている波形データが格納されている領域の先頭アドレスの値と加算され、その加算後のアドレスのデータがＲＡＭ１１１から読み出される。
【０１３５】
ステップ１４０１に続くステップ１４０２では、上記のように、変数ｎによって指定されるアドレスからデータを読み出し、そのデータとそれのアドレスの値を保持する。これら保持したデータとアドレスの値は、後述するように、それ以降にＲＡＭ１１１から読み出したデータとの比較に用いられる。それらの保持が終了した後、ステップ１４０３に移行する。
【０１３６】
ステップ１４０３〜１４１０は、ステップ１４０３〜１４０８、１４１０、或いはステップ１４０３〜１４０７、１４０９、１４１０の処理ループを形成している。それら何れかの処理ループを実行していくことにより、ＭＩＮ１値の次に小さいＭＩＮ２値に対応するデータ、及びそれのアドレスの値が保持される。
【０１３７】
先ず、ステップ１４０３では、変数ｎのインクリメントを行う。そのインクリメントが終了すると、ステップ１４０４に移行し、そこで変数ｎによって指定されるデータを読み出す。続くステップ１４０５では、その読み出したデータを、保持していたデータと比較する。その比較が終了した後に移行するステップ１４０６では、より値が小さいほうのデータ、及びそのデータが格納されていたアドレスの値を各々仮に保持する。その後、ステップ１４０７に移行する。
【０１３８】
ステップ１４０７では、その仮に保持したアドレスの値がＭＩＮ１値のアドレスの値と同じか否か判定する。ステップ１４０４でデータを読み出したアドレスがＭＩＮ１値のそれと同じであった場合、その判定はＹＥＳとなってステップ１４０８に移行する。そうでない場合には、その判定はＮＯとなってステップ１４０９に移行する。
【０１３９】
ステップ１４０８では、ステップ１４０６で仮に保持したデータとそれのアドレスの値を廃棄し、保持内容の更新（置き換え）を取りやめる。その後、ステップ１４１０に移行する。他方のステップ１４０９では、ステップ１４０６で仮に保持したデータとそのアドレスの値を保持し、保持内容の更新を行う。その後、ステップ１４１０に移行する。
【０１４０】
ステップ１４１０では、ステップ１４０３でインクリメント（更新）した変数ｎと波形データが格納されている領域の先頭アドレスの値とを加算した値が、その領域の最終アドレスの値であるか否か判定する。波形データを構成する各データを全てチェックした場合、その判定はＹＥＳとなってステップ１４１１に移行する。そうでない場合、その判定はＮＯとなってステップ１４０３に戻る。
【０１４１】
ステップ１４１１に移行した時点で保持しているデータは、ＭＩＮ１値の次に小さいＭＩＮ値である。このため、ステップ１４１１では、その保持しているデータをＭＩＮ２値として保持（確定）し、また、それが格納されているアドレスの値を保持する。それらの保持が終了した後、一連の処理を終了する。
【０１４２】
上述した各サブルーチン処理を実行することにより、図１０に示すＭＡＸ／ＭＩＮ値検出処理は、波形データ中の局所的なＭＡＸ値とＭＩＮ値を複数検出する。図４に示すサンプリング処理内のステップ４０８のＭＡＸ／ＭＩＮ値検出処理以降で、それら検出したＭＡＸ値、及びＭＩＮ値が使用される。
【０１４３】
サンプリング処理内の図４に示されているサブルーチン処理の説明に戻る。
図１５は、ステップ４０９として実行される自動増幅処理の動作フローチャートである。次に、図１５を参照して、その処理動作を詳細に説明する。
【０１４４】
上記したように、マイク１０７が出力する取り込んだ楽音の信号レベルは、その楽音の種類や、それを取り込ませる環境（楽音の発生源とマイク１０７との距離等）等によって変化する。自動増幅処理は、マイク１０７が出力した信号レベルの取り込んだ楽音毎による違いを吸収するように、波形データに対する調整用の増幅率（乗算値）を設定する処理である。
【０１４５】
先ず、ステップ１５０１では、図１０に示すＭＡＸ／ＭＩＮ値検出処理で検出されたＭＡＸ１値とＭＩＮ１値を絶対値で比較する。続くステップ１５０２では、その絶対値の大きい方の値が所定値ａとなる乗算値を算出する。その乗算値が上記調整用の乗算値である。それを算出した後、一連の処理を終了する。
【０１４６】
なお、上記所定値ａは、例えば１回のサンプリングで取り込まれたデータの格納に割り当てたビット数に応じて決定する値である。例えばそのビット数が１６であった場合、所定値ａとして例えば３２７６８といった値を設定する。
【０１４７】
ＣＰＵ１０１は、上記乗算値を、例えば制御用データとしてワークＲＡＭ１０４に保持し、ＲＡＭ１１１内の該当する波形データで発音を行わせる場合、サウンドシステム１１２にその値を用いた波形データの補正を指示する。これにより、発音に用いる波形データの種類による音量の変化が回避される。
【０１４８】
図１６は、図４に示すサンプリング処理内でステップ４１０として実行されるエンベロープ（ＥＮＶ）推定処理の動作フローチャートである。次に、図１６を参照して、その処理動作を詳細に説明する。
【０１４９】
ユーザがマイク１０７を介して取り込ませる楽音は、減衰系と非減衰系とに大別することができる。このエンベロープ（ＥＮＶ）推定処理は、ユーザが取り込ませた楽音が減衰系（減衰音）か否かを判別する処理である。周知のように、楽音波形が振動する様子は複雑である。しかし、基本的な周期を持っている。上記基準ピッチがその基本的な周期に対応する。このことから、本実施の形態では、基準ピッチ単位でデータ（波高値）の変化を調べることにより、より正確な判別を行えるようにしている。
【０１５０】
先ず、ステップ１６０１では、変数ｎに１を代入する。この変数ｎは、ＲＡＭ１１１から波形データを読み出す位置を特定するために使用される変数である。その代入が終了すると、ステップ１６０２に移行する。
【０１５１】
上記ＭＡＸ１値は、最高音量である１個のピーク点である。このことから、本実施の形態では、ＭＡＸ１値のアドレスを基準として、基準ピッチ（ここでは、ピーク点間隔内に存在するアドレス数）単位でデータを読み出す範囲を特定し、その特定した範囲内でＭＡＸ値（ピーク点）を検出し、その検出したＭＡＸ値から減衰系か否かの判別を行っている。
【０１５２】
ステップ１６０２では、基準ピッチに変数ｎの値、及び１．１を掛けた値をＭＡＸ１値のアドレスの値に加算した値が、波形データを格納したＲＡＭ１１１の領域の最終アドレスの値より大きいか否か判定する。その加算後の値が最終アドレスの値以上の場合、その判定はＹＥＳとなってステップ１６０５に移行する。そうでない場合には、ステップ１６０３に移行する。
【０１５３】
ステップ１６０３では、ＭＡＸ１値のアドレスの値に、基準ピッチに変数ｎの値、及び０．９を掛けた値と、その０．９の換わりに１．１を掛けた値とで特定される範囲内のデータをＲＡＭ１１１から読み出し、その読み出したデータのなかでのＭＡＸ（ＰＡＲＴ  ＭＡＸｎ：ｎは変数ｎの値である）値を検出して保持する。その後、ステップ１６０４で変数ｎをインクリメントし、ステップ１６０２に戻る。
【０１５４】
なお、上記０．９、及び１．１の両係数は、実験を繰り返し行うことで得た経験的な数値である。しかし、ＰＡＲＴ  ＭＡＸｎ値を検出する範囲を特定するための係数の値は、それらの値、或いはその近傍の値に必ずしも限定しなくとも良い。
【０１５５】
ステップ１６０２の判定がＮＯとなるまで、ステップ１６０２〜１６０４で形成される処理ループが繰り返し実行される。これにより、ＭＡＸ１値のアドレスから基準ピッチ単位で離れている位置付近で検出されたＭＡＸ値（ＰＡＲＴ  ＭＡＸｎ値）が順次保持される。
【０１５６】
ステップ１６０２の判定がＮＯとなると、ＰＡＲＴ  ＭＡＸｎ値の検出が終了したとして、ステップ１６０５に移行する。ステップ１６０５〜１６０９では、保持したＰＡＲＴ  ＭＡＸｎ値に基づいて、取り込んだ波形データ（楽音）が減衰系か否かの判別が行われる。
【０１５７】
先ず、ステップ１６０５では、上記ＰＡＲＴ  ＭＡＸｎ値が複数保持して有るか否か判定する。変数ｎの値に応じてＰＡＲＴ  ＭＡＸｎ値を複数保持してある場合、その判定はＹＥＳとなってステップ１６０７に移行する。そうでない場合には、その判定はＮＯとなってステップ１６０６に移行する。なお、その複数のＰＡＲＴ  ＭＡＸｎ値で構成される数列はＰＡＲＴ  ＭＡＸｎ数列と呼ぶことにする。そのＰＡＲＴ  ＭＡＸｎ数列が波形データ（楽音）のエンベロープに対応する。
【０１５８】
ＰＡＲＴ  ＭＡＸｎ数列が無い場合、減衰系か否かの判別を行うことはできない。その場合、本実施の形態では、ステップ１６０６で非減衰系であると決定（判別）する。その決定が終了すると、一連の処理を終了する。
【０１５９】
他方のステップ１６０７では、上記ＰＡＲＴ ＭＡＸｎ数列から、それの階差数列を算出する。続くステップ１６０８では、その階差数列を構成する各値の８０パーセント以上が負の値であるか否か判定する。階差数列を構成する各値の大部分が負であった場合、即ち音量が明らかな減衰傾向を示していた場合、その判定はＹＥＳとなってステップ１６０９に移行する。そうでない場合には、その判定はＮＯとなってステップ１６０６に移行する。ステップ１６０９では、音量の減衰傾向が明らかであることから、減衰系に決定（判別）する。その決定を行った後、一連の処理を終了する。
【０１６０】
なお、上記８０パーセントという値は、上記０．９、及び１．１の両係数と同様に、実験を重ねることで得た経験的な値である。しかし、その値は、音量の減衰傾向を判定するための値の具体例であり、その値、或いはその近傍の値に必ずしも限定しなくとも良い。
【０１６１】
このようにして、取り込んだ波形データ（楽音）が減衰系か否かの判別（決定）が行われる。その判別結果は、後述するＥＮＶ  ＲＡＴＥ値設定処理（図１８参照）に反映される。
【０１６２】
図１７は、図４に示すサンプリング処理内でステップ４１１として実行されるループ範囲設定処理の動作フローチャートである。次に、図１７を参照して、その処理動作を詳細に説明する。
【０１６３】
このループ範囲設定処理は、波形データのなかで繰り返し再生させるのに適したループ範囲を探しだして設定する処理である。そのループ範囲の探しだしは、波形データの基準ピッチを既に確定していることから、波形データの最後から前に向かって、その基準ピッチだけ離れている２点のデータの値を比較していき、それらの値が最も小さい２点を抽出することで行われる。
【０１６４】
先ず、ステップ１７０１では、２点のデータの読み出しにおいて基準となる基準アドレス（変数）に、波形データが格納されているＲＡＭ１１１内の領域の最終アドレスの値を代入する。その後、ステップ１７０２に移行する。
【０１６５】
ステップ１７０２では、上記基準アドレスの値が領域（波形データ）の中央のアドレスの値と等しいか否か判定する。それらの値が等しい場合、その判定はＹＥＳとなってステップ１７０８に移行する。そうでない場合には、その判定はＮＯとなってステップ１７０３に移行する。
【０１６６】
ステップ１７０３では、その基準アドレスによって指定されるアドレスに格納されているデータと、それよりも基準ピッチに相当するアドレス数だけ前に離れているアドレスに格納されているデータとの差分を算出する。これにより、基準ピッチ（ここでは、アドレス数）だけ離れた２点での波高（データ）値の差分が算出される。
【０１６７】
ステップ１７０３に続くステップ１７０４では、その２点間の波高値の差分が０か否か判定する。それらの波高値が一致していた場合、その判定はＹＥＳとなってステップ１７０８に移行する。そうでない場合には、その判定はＮＯとなってステップ１７０５に移行する。
【０１６８】
本実施の形態では、波高値が一致する２点を見つけられなかったときのために、それまでに算出した波高値の差分のなかで最も小さかった値、及びその値が得られたときの基準アドレスの値を保持するようにしている。ステップ１７０５では、ステップ１７０３で算出した今回の差分が、保持しているそれまでの最小値よりも小さいか否か判定する。今回算出した差分がこれまでで最も小さかった場合、その判定はＹＥＳとなってステップ１７０６に移行する。そうでない場合には、その判定はＮＯとなってステップ１７０７に移行する。
【０１６９】
ステップ１７０６では、今回算出した差分がこれまでで最も小さいことから、その差分と現在の基準アドレスの値を新たに保持する。その後、ステップ１７０７に移行する。
【０１７０】
ステップ１７０７では、基準アドレスに代入されている値をデクリメントすることにより、基準アドレスによって指定されるアドレスをそれまでよりも１つ前にする。その基準アドレスの更新を行った後、ステップ１７０２に移行する。
【０１７１】
このようにして、ステップ１７０２〜１７０７で形成される処理ループが、２点の波高値が一致するまで（ステップ１７０４の判定がＹＥＳとなるまで）、或いは、基準アドレスの値が領域の中央のアドレスの値と一致するまで（ステップ１７０２の判定がＹＥＳとなるまで）、繰り返し実行される。
【０１７２】
それらステップ１７０２、或いは１７０４の判定がＹＥＳとなると、次にステップ１７０８が実行される。そのステップ１７０８では、ステップ１７０２と１７０４の何れの判定がＹＥＳとなったかに応じてループ範囲、即ちループスタートアドレスとループエンドアドレスの設定が行われる。
【０１７３】
ステップ１７０４の判定がＹＥＳとなった場合、基準アドレスが指定するアドレスに格納されたデータ（波高値）と、それよりも基準ピッチだけ前に離れたアドレスに格納されたデータ（波高値）とが一致したことから、前者のアドレスをループエンドアドレス、後者のアドレスをループスタートアドレスにそれぞれ設定する。
【０１７４】
一方、ステップ１７０２の判定がＹＥＳとなった場合には、波高値が一致する２点が見つからなかったことから、保持しているそれらの差分が最小となる基準アドレスの値をループエンドアドレス、それよりも基準ピッチだけ前に離れたアドレスをループスタートアドレスにそれぞれ設定する。
【０１７５】
上記のステップ１７０２と１７０４の何れの判定がＹＥＳとなったかに応じたループ範囲の設定を行った後、一連の処理を終了する。
なお、本実施の形態では、ループ範囲を基準ピッチ分だけとしているが、例えばループ範囲を複数基準ピッチ分としても良い。複数基準ピッチ分をループ範囲に設定した場合、クロスフェードといった再生方法を用いてループ範囲の再生を行うようにしても良い。また、データの値を比較する２点は、基準ピッチだけ離しているが、基準ピッチの近傍（例えば前後）も含めて比較するようにしても良い。
【０１７６】
図１８は、図４に示すサンプリング処理内でステップ４１２として実行されるＥＮＶ  ＲＡＴＥ値算出処理の動作フローチャートである。次に、図１８を参照して、その処理動作を詳細に説明する。
【０１７７】
このＥＮＶ  ＲＡＴＥ値算出処理では、上述のＥＮＶ推定処理（図１６参照）で行った波形データ（楽音）が減衰系か否かの判別に応じて、エンベロープレート値の算出（設定）が行われる。
【０１７８】
先ず、ステップ１８０１では、波形データが減衰系であるか否か判定する。上記ＥＮＶ推定処理でそれが減衰系であると判別していた場合、その判定はＹＥＳとなってステップ１８０２に移行する。そうでない場合には、その判定はＮＯとなってステップ１８０３に移行する。
【０１７９】
ステップ１８０２では、ループ範囲の再生までのエンベロープレート値を０（波形データの通りに再生）に設定し、また、ループ範囲以降のエンベロープレート値を、ＥＮＶ推定処理で得たＰＡＲＴ  ＭＡＸｎ数列の階差数列に基づいて設定する。具体的には、その階差数列を構成する値のなかでループスタートアドレスに最も近い部分に対応している値を、ループ範囲以降のエンベロープレート値に設定する。その後、一連の処理を終了する。
【０１８０】
他方のステップ１８０３では、波形データが非減衰系（持続音）であることから、それらエンベロープレート値にそれぞれ０を設定し、エンベロープを付加しない設定を行う。その後、一連の処理を終了する。
【０１８１】
なお、本実施の形態では、ループ範囲、或いはその付近における２点間の音量の減衰（ＰＡＲＴ  ＭＡＸｎ数列の階差数列を構成する１つの値）に基づいてループ範囲以降のエンベロープレート値を設定しているが、例えばループ範囲、及びその付近に対応する値を幾つか階差数列から抽出し、それらの値に基づいてそのエンベロープレート値を設定するようにしても良い。
【０１８２】
図１９は、図４に示すサンプリング処理内でステップ４１３として実行されるＶＥＬ  ＳＥＮＳ値算出処理の動作フローチャートである。次に、図１９を参照して、その処理動作を詳細に説明する。
【０１８３】
このＶＥＬ  ＳＥＮＳ値算出処理では、上述のＥＮＶ推定処理（図１６参照）で行った波形データ（楽音）が減衰系か否かの判別に応じて、鍵盤装置１０５が備えたタッチレスポンス機能によって検出された押鍵時のベロシティ等の操作情報を、楽音の発音に反映させるか否かの設定が行われる。
【０１８４】
先ず、ステップ１９０１では、波形データが減衰系であるか否か判定する。上記ＥＮＶ推定処理でそれが減衰系であると判別していた場合、その判定はＹＥＳとなってステップ１９０２に移行する。そうでない場合には、その判定はＮＯとなってステップ１９０３に移行する。
【０１８５】
ステップ１９０２では、減衰系の楽音の多くは音量の強弱表現が必要であることから、タッチレスポンス機能が検出した操作情報に応じて音量変化させることを設定する。他方のステップ１９０３では、その操作情報に応じて音量変化させないことを設定する。それらの設定は、設定内容に応じて、例えばワークＲＡＭ１０４に保持させている、タッチレスポンス機能が検出した操作情報を発音に反映させるか否かを示すフラグ（変数）の値を切り換えることで行われる。ステップ１９０２、或いは１９０３での設定を行った後、一連の処理を終了する。
【０１８６】
なお、本実施の形態では、波形データ（楽音）が減衰系か否かにより、タッチレスポンス機能による音量変化の有無を設定しているが、その有無ではなく、例えばタッチレスポンス機能で検出した操作情報を反映させる重み付け（例えば係数の値）を設定するようにしても良い。その重み付けは、例えば減衰していく割合、即ちＰＡＲＴ  ＭＡＸｎ数列の階差数列に基づいて決定すれば良い。
【０１８７】
図２０は、図４に示すサンプリング処理内でステップ４１４として実行されるスタートアドレス確定処理の動作フローチャートである。次に、図２０を参照して、その処理動作を詳細に説明する。
【０１８８】
サンプリング処理内でステップ４０３として実行される波形取り込み処理では、図５に示すように、マイク１０７が拾った音がある程度大きくなった後にＲＡＭ１１１への波形データの格納を開始する。しかし、そのように波形データをＲＡＭ１１１に格納したとしても、例えばノイズ等によって波形データの格納を開始することも有り得るので、その波形データを先頭から再生するのは必ずしも適切ではない。このようなことから、この発音スタートアドレス確定処理では、ＲＡＭ１１１に格納した波形データにおいて、その再生を開始させるのに適切な位置（アドレス）を探しだし、その探し出した位置をスタートアドレスに設定することが行われる。
【０１８９】
先ず、ステップ２００１では、ＲＡＭ１１１から波形データを読み出すアドレスを管理するための変数ｘに、上記ＭＡＸ１値のアドレスの値を代入する。そのＭＡＸ１値は、波形データ中で最も大きい局所的最大値であり、最大音量に対応する。スタートアドレスは、その最大音量のデータが格納されているアドレスよりも前に存在するとして検出を行う。
【０１９０】
ステップ２００１に続くステップ２００２では、変数ｘによって指定されるアドレスと、それよりも所定値ｂだけ前のアドレスとで指定される範囲内のデータが、全て所定値ｃ以下となっているか否か判定する。その範囲内の音量が十分小さい場合、その判定はＹＥＳとなってステップ２００４に移行する。そうでない場合には、その判定はＮＯとなってステップ２００３に移行する。
【０１９１】
なお、上記所定値ｂ、ｃは、それぞれサンプリング周期、１回のサンプリングで得たデータに割り当てているビット数に応じて決定した値である。サンプリング周波数が４０ｋＨｚ程度、ビット数が１６であった場合、例えば所定値ｂとしては３０、所定値ｃとしては１０００（絶対値）を目安にすることができる。
【０１９２】
ステップ２００３では、変数ｘに、その値から所定値ｂを引いた値を新たに代入する。その後、ステップ２００２に戻る。これにより、ステップ２００２、２００３の処理ループが形成され、ステップ２００２の判定がＹＥＳとなるまで、所定値ｂ単位で音量レベルが十分下がった部分の探しだしが行われる。
【０１９３】
ステップ２００４では、音量レベルが十分小さくなっている部分を特定できたことから、変数ｘによって指定されるアドレス以前にあるゼロクロス点を探しだし、そのゼロクロス点のアドレスをスタートアドレスに設定する。これにより、スタートアドレスが確定する。それを確定させた後、一連の処理が終了する。
【０１９４】
なお、本実施の形態では、十分な音量の低下を確認した後に検出したゼロクロス点をスタートアドレスに設定しているが、最大音量（ＭＡＸ１値）の点より前の部分のエンベロープ（上記ＰＡＲＴ  ＭＡＸｎ数列がエンベロープに対応する）を検出し、その傾きを基にしてスタートアドレスとすべき点（アドレス）を探すようにしても良い。
【０１９５】
楽音の取り込みに応じて設定するパラメータについては、本実施の形態では通常必要と考えられるパラメータの全てとしているが、それらのパラメータのなかから、ユーザが目的に応じて選択できるようにしても良い。
【０１９６】
その楽音の取り込みには、本実施の形態ではＰＣＭ方式を用いているが、例えばＡＤＰＣＭ方式といった符号化方式を採用しても良い。本発明は、波形データに採用された符号化方式によって適用の可否が変わるものではない。
【０１９７】
また、本実施の形態は、サンプリング機能を備えた電子楽器に本発明を適用された場合のものであるが、適用させることのできる装置は電子楽器に限定されるものではない。音源装置といった他の装置にも適用することができるものである。例えば図４に示すようなサンプリング処理を行う機能を搭載したプログラムを、記憶媒体、或いは通信手段を介して配布することにより、パーソナルコンピュータ（パソコン）上でも本発明を実現するシステムを構築することができる。パソコンを用いてシステムを構築した場合には、記憶媒体、或いは通信手段を介して波形データを取得（例えばＭＩＤＩデータとして取得）することができるので、パソコンに楽音を取り込む機能を必ずしも搭載しなくとも良い。当然のことながら、波形データを取得させたパソコンをプラットホームとして、楽音を発音させるようにしても良い。
【０１９８】
【発明の効果】
以上説明したように本発明は、対象とする波形データを解析してその特性を表す情報を検出し、その情報を基にして、その発音データに適した発音の条件を自動的に設定する。このため、ユーザは、たとえサンプリングを行うことで波形データを取得したとしても、面倒な操作を行ったり時間をかけることなく、適切な形で楽音を発音させることができる。
【図面の簡単な説明】
【図１】本実施の形態が適用された電子楽器のブロック図である。
【図２】サンプリングスイッチ、及びその周辺を示す図である。
【図３】全体処理の動作フローチャートである。
【図４】サンプリング処理の動作フローチャートである。
【図５】波形取り込み処理の動作フローチャートである。
【図６】ピッチ抽出処理の動作フローチャートである。
【図７】ピーク検出処理の動作フローチャートである。
【図８】ゼロクロス検出処理の動作フローチャートである。
【図９】スプリット検出処理の動作フローチャートである。
【図１０】ＭＡＸ／ＭＩＮ値検出処理の動作フローチャートである。
【図１１】ＭＡＸ１値検出処理の動作フローチャートである。
【図１２】ＭＡＸ２値検出処理の動作フローチャートである。
【図１３】ＭＩＮ１値検出処理の動作フローチャートである。
【図１４】ＭＩＮ２値検出処理の動作フローチャートである。
【図１５】自動増幅処理の動作フローチャートである。
【図１６】ＥＮＶ推定処理の動作フローチャートである。
【図１７】ループ範囲設定処理の動作フローチャートである。
【図１８】ＥＮＶ  ＲＡＴＥ値算出処理の動作フローチャートである。
【図１９】ＶＥＬ  ＳＥＮＳ設定処理の動作フローチャートである。
【図２０】発音スタートアドレス確定処理の動作フローチャートである。
【符号の説明】
１０１  ＣＰＵ
１０３  プログラムＲＯＭ
１０４  ワークＲＡＭ
１０５  鍵盤装置
１０６  スイッチ群
１０６ａ  サンプリングスイッチ
１０７  マイク
１１１  ＲＡＭ
【図１】
0003677906.tif 000002
【図２】
0003677906.tif 000003
【図３】
0003677906.tif 000004
【図４】
0003677906.tif 000005
【図５】
0003677906.tif 000006
【図６】
0003677906.tif 000007
【図７】
0003677906.tif 000008
【図８】
0003677906.tif 000009
【図９】
0003677906.tif 000010
【図１０】
0003677906.tif 000011
【図１１】
0003677906.tif 000012
【図１２】
0003677906.tif 000013
【図１３】
0003677906.tif 000014
【図１４】
0003677906.tif 000015
【図１５】
0003677906.tif 000016
【図１６】
0003677906.tif 000017
【図１７】
0003677906.tif 000018
【図１８】
0003677906.tif 000019
【図１９】
0003677906.tif 000020
【図２０】
0003677906.tif 000021