JP3677906B2 - 発音条件設定装置 - Google Patents
発音条件設定装置 Download PDFInfo
- Publication number
- JP3677906B2 JP3677906B2 JP32383596A JP32383596A JP3677906B2 JP 3677906 B2 JP3677906 B2 JP 3677906B2 JP 32383596 A JP32383596 A JP 32383596A JP 32383596 A JP32383596 A JP 32383596A JP 3677906 B2 JP3677906 B2 JP 3677906B2
- Authority
- JP
- Japan
- Prior art keywords
- value
- data
- waveform data
- address
- pitch
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Electrophonic Musical Instruments (AREA)
Description
【発明の属する技術分野】
本発明は、波形データを用いた楽音の発音に関する条件を自動的に設定する技術に関する。
【0002】
【従来の技術および発明が解決しようとする課題】
近年、電子楽器などにおいては、デジタル音源装置が広く採用されている。例えば、そのデジタル音源装置の一つであるPCM音源装置は、楽音をPCM方式で符号化することによって得られた波形データをメモリに格納しておき、そのメモリから波形データを読み出してそれの再生を行うことで楽音を発音する。このように、デジタル音源装置では、メモリに格納したデータを基に楽音が発音される。
【0003】
その波形データで再生される楽音を適切な状態で発音させるには、サンプリングを行って取得するだけでなく、様々な設定も行わなければならない。具体的には、繰り返し再生するループ範囲や、エンベロープ、その波形データを発音に割り当てる音高範囲といった多くの発音に関する条件を設定する必要がある。以降、これらの条件を発音用パラメータと呼ぶことにする。
【0004】
上記発音用パラメータは、現在は人が行っている。それらの設定が適切に行われていない場合、再生される楽音が不自然(違和感を与えることも含む)になる。それを回避するために、設定には非常に高度な技量や知識が要求される。そのパラメータの数も多い。これらのことから、発音用パラメータの設定には、高度な技量や知識が要求されるとともに、膨大な時間も必要となっていた。このような事情から、一般のユーザでは、その設定を適切に行うことは殆ど不可能となっていた。
【0005】
本発明の課題は、波形データの再生に関わる条件の設定を自動的に行うようにすることにある。
【0006】
【課題を解決するための手段】
本発明の第1の態様の発音条件設定装置は、波形データを用いた楽音の発音に関する条件を自動設定することを前提とし、波形データのエンベロープを検出する検出手段と、検出手段が検出したエンベロープに基づいて、波形データに対応する楽音が減衰音か否か判別する判別手段と、音高を指定するための操作子に対して行われ、タッチレスポンス機能が検出した操作状態を表す情報を楽音の発音に反映させるための設定を、判別手段の判別結果に従って異ならせる設定手段と、を具備する。
【0013】
本発明は、対象とする波形データを解析してその特性を表す情報を検出し、その情報を基にして、その発音データに適した発音の条件を自動的に設定する。それにより、ユーザは、たとえサンプリングを行うことで波形データを取得したとしても、面倒な操作を行ったり時間をかけることなく、適切な形で楽音を発音させることが可能となる。
【0014】
【発明の実施の形態】
以下、図面を参照しながら、本発明の実施の形態につき詳細に説明する。
図1は、本実施の形態が適用された電子楽器のブロック図である。本実施の形態による発音条件設定装置は、その電子楽器において、楽音をサンプリングすることで取得された波形データに対する発音用パラメータ(発音条件)の設定を行う機能として搭載されている。
【0015】
上記電子楽器は、図1に示すように、楽器全体の制御を行うCPU101と、ユーザに対して視覚的に情報を通知する表示装置102と、プログラムや各種制御用データ等を格納したROM103と、CPU101がワーク用に用いるワークRAM104と、ユーザによる演奏操作が行われる鍵盤装置105と、各種のモード設定等をユーザが行うためのスイッチ群106と、楽音入力用のマイク107と、そのマイク107が出力したアナログの楽音信号を増幅するアンプ108と、ボリューム109を介してアンプ108が出力した楽音信号を入力し、その楽音信号をデジタルの波形データに変換して出力するA/Dコンバータ110と、そのA/Dコンバータ110が出力した波形データを格納するRAM111と、そのRAM111から読み出された波形データを再生して放音するサウンドシステム112と、を備えて構成されている。
【0016】
以上の構成において、動作を説明する。
CPU101は、ユーザがスイッチ群106や鍵盤装置105に対して行った操作に応じて、楽器全体を制御する。スイッチ群106に対して行われた操作に応じてモード設定、即ち鍵盤装置105やサウンドシステム112といった各部の設定を行い、表示装置102を制御して、現在設定されているモードをユーザに通知する。
【0017】
鍵盤装置105は、タッチレスポンス機能を備えている。ユーザが行った演奏操作を検出して、押鍵された鍵の音高を表す情報(ノートナンバー)をCPU101に出力する。タッチレスポンス機能によって検出した押鍵ベロシティ等の操作状態に関する情報は、設定に応じてCPU101に出力する。
【0018】
CPU101は、鍵盤装置105から入力したそれらの情報に基づいて、RAM111から読み出すべき波形データ、及びその読み出す速さ(ピッチ)を決定し、RAM111からの波形データの読み出しを制御する。サウンドシステム112に対しては、楽音の発音に関する各種の設定、例えば音量や付加させる音響効果、その音響効果の深さといったことの設定を行う。このため、RAM111から読み出された波形データは、サウンドシステム112によって処理が施された後、楽音として放音される。それにより、ユーザが所望する状態で楽音を放音させることができる。
【0019】
上記スイッチ群106のスイッチの一つとして、楽音のサンプリングを指示するためのサンプリングスイッチ106aが備えられている。図2に示すように、そのサンプリングスイッチ106aの上方には、LED201が配設されている。そのLED201は、楽音の取り込みを行っている間は点灯、それに対する設定を行っている間は点滅し、それらの旨をユーザに通知する。ユーザがサンプリングスイッチ106aをオンした場合、CPU101は、以下のようにして楽音の取り込みを行う。
【0020】
CPU101は、サンプリングスイッチ106aがオンされると、先ず、表示装置102に、LED201の点灯を指示する制御コマンドを送出し、ユーザに楽音の取り込みが開始したことを通知する。その後、A/Dコンバータ110に、アンプ108からボリューム109を介して入力される楽音信号の変換を指示する。それにより、A/Dコンバータ110からRAM111に、所定のサンプリング周期でサンプリングされた波形データが出力される。
【0021】
A/Dコンバータ110からRAM111に波形データが出力されるようになると、CPU101は、サンプリング周期に応じて書込アドレスを変更していくことで、RAM111に波形データを格納させる。そのようにして、所定時間分の波形データをRAM111に格納させる。
【0022】
波形データの格納を開始してから所定時間が経過すると、CPU101は、A/Dコンバータ110に対して楽音信号の変換の終了を指示する。表示装置102に対しては、LED201の点滅を指示する制御コマンドを出力する。RAM111に新たに格納させた波形データの発音用パラメータの設定は、その後に開始する。
【0023】
本実施の形態では、発音用パラメータとして、発音を割り当てる音高範囲、繰り返し再生するループ範囲、エンベロープレート、再生範囲等の各種のパラメータを設定する。それらの設定が終了すると、LED201の消灯を表示装置102に指示し、ユーザに楽音の取り込みに関わる全ての処理が終了したことを通知する。
【0024】
詳細な説明は後述するが、このように、本実施の形態では、楽音の取り込み(波形データのRAM111への格納)とともに、それの発音用パラメータも合わせて設定する。このため、一般のユーザであっても、取り込ませた楽音を自然な状態で発音させることができる。これにより、所望の楽音での演奏を容易に行うことができ、電子楽器をより幅広く手軽に楽しむことができる。
【0025】
次に、図3〜図20を参照して、上記CPU101の動作について詳細に説明する。
図3は、全体処理の動作フローチャートである。この全体処理は、CPU101が、プログラムROM103に格納されているプログラムを読み出して実行することで実現される処理である。始めに図3を参照して、全体処理について説明する。
【0026】
先ず、ステップ301では、サンプリング処理を実行する。そのサンプリング処理は、マイク107を介して楽音を取り込み、それの発音用パラメータを設定する処理である。それが終了した後、ステップ302に移行する。
【0027】
ステップ302では、発音処理を実行する。この発音処理は、RAM111に格納されている波形データを読み出して楽音を発音させる処理である。その後、ステップ303に移行し、スイッチ群106に対して行われた操作に応じて各部の設定を行うといった他の処理を実行する。それが終了すると、ステップ301に戻る。
【0028】
図4は、上記ステップ301として実行されるサンプリング処理の動作フローチャートである。次に、図4を参照して、サンプリング処理について詳細に説明する。
【0029】
先ず、ステップ401では、サンプリングスイッチ106aがオンされたか否か判定する。ユーザがサンプリングスイッチ106aをオンし、楽音の取り込みを指示した場合、その判定はYESとなってステップ402に移行する。そうでない場合には、その判定はNOとなって一連の処理を終了する。ステップ402以降では、楽音の取り込みに関する各種の処理が行われる。
【0030】
ステップ402では、LED201を点灯させる。続くステップ403では、A/Dコンバータ110が出力する波形データをRAM111に取り込む波形取り込み処理を実行する。波形データの取り込みが終了すると、ステップ404に移行し、LED201を点灯から点滅させる状態に変化させた後、ステップ405に移行する。
【0031】
ステップ405以降では、ステップ403で取り込んだ波形データの発音用パラメータの設定、或いはそれに関わる処理が行われる。
先ず、ステップ405では、取り込んだ波形データのピッチ(音高)を抽出するピッチ抽出処理を実行する。ここでのピッチとは、サンプリング周期で波形データを読み出して再生した際の楽音のピッチ、換言すれば、マイク107を介して取り込んだ楽音のピッチである。それが終了した後、ステップ406に移行し、抽出したピッチを、取り込んだ波形データの基準となるピッチ(基準ピッチ)として確定させる処理を行う。その後、ステップ407に移行する。CPU101は、上記基準ピッチを、波形データの特性を表すパラメータとしてRAM104に保持する。
【0032】
ステップ406に続くステップ407では、その基準ピッチに基づいて、取り込んだ波形データで発音させる音高範囲を決定するスプリット決定処理を実行する。その後、ステップ408に移行する。
【0033】
ステップ408では、波形データにおける局所的な最大値(MAX値)、最小値(MIN値)を検出するMAX/MIN値検出処理を実行する。この処理では、局所的なMAX値、及びMIN値を5つ検出する。これらの局所的な値は、それに続くステップ409以降で使用される。
【0034】
ステップ409では、自動増幅処理を実行する。この自動増幅処理は、マイク107が拾った楽音の音量によって発音させる楽音が変化しないように、取り込んだ波形データに対する調整用の増幅率(本実施の形態では乗算値)を決定する処理である。その自動増幅処理を終了すると、ステップ410に移行する。
【0035】
ステップ410では、エンベロープ(ENV)推定処理を実行する。このエンベロープ(ENV)推定処理は、取り込んだ波形データから、それが減衰音であるか否かを判別する処理である。その処理が終了すると、ステップ411に移行する。
【0036】
ステップ411では、波形データのなかで繰り返し再生させるループ範囲を設定するループ範囲設定処理を実行する。続くステップ412では、エンベロープレート値を設定するENV値設定処理を実行する。その後、ステップ413に移行する。
【0037】
ステップ413では、取り込んだ波形データの再生に、タッチレスポンス機能による音量変化を行うか否かを設定するVEL SENS設定処理を実行する。続くステップ414では、楽音を発音させる場合に最初に読み出すべき波形データのアドレス(スタートアドレス)を確定するスタートアドレス確定処理を実行する。
【0038】
ステップ414の実行が終了することにより、発音用パラメータの設定が完了する。ステップ414に続くステップ415では、LED201を消灯させてユーザにその旨を通知し、その後、一連の処理を終了する。
【0039】
このように、本実施の形態では、発音用パラメータを、音高範囲、増幅率(乗算値)、ループ範囲、エンベロープレート値、スタートアドレスの順序で設定するようにしている。これらのパラメータを、波形データの取り込みと合わせて自動的に設定する。このため、ユーザは、面倒な操作を行うことなく、また、時間をかけることなく、取り込ませた波形データを適切な状態で発音させることができる。
【0040】
図5〜図20は、図4に示すサンプリング処理内で実行される各種サブルーチン処理の動作フローチャートである。以降は、これら図5〜図20を参照して、それらのサブルーチン処理について詳細に説明する。
【0041】
図5は、図4に示すステップ403として実行される波形取り込み処理の動作フローチャートである。始めに、この図5を参照して、波形取り込み処理について詳細に説明する。
【0042】
上述したように、サンプリングスイッチ106aがオンされると、CPU101は、A/Dコンバータ110に、ボリューム109を介してアンプ108から入力したアナログの楽音信号をデジタルの波形データに変換するのを指示する。ステップ501では、その指示を行った後、実際に波形データがA/Dコンバータ110からRAM111に出力されるようになるまで待機する。波形データがRAM111に出力されるようになると、ステップ501の判定がYESとなってステップ502に移行する。
【0043】
なお、A/Dコンバータ110の出力はCPU101に入力されており、CPU101は、実際に波形データがRAM111に出力されているか否かを、その波形データが予め定めた値以上となったか否かから判定する。
【0044】
ステップ502では、A/Dコンバータ110が出力した波形データをRAM111に格納する波形取り込みを行う。その波形の取り込みは、RAM111に、データの書き込みを指示するライトイネーブル信号をアクティブにするとともに、データを書き込ませるアドレスを指定することで行われる。
【0045】
ステップ502に続くステップ503では、波形データの取り込みを開始してから所定時間が経過したか否か判定する。その所定時間が経過していない場合、その判定はNOとなってステップ502に移行して、波形データの取り込みを続行する。そうでない場合には、その判定はYESとなってステップ504に移行する。
【0046】
このように、ステップ502、503の繰り返しにより、ステップ501の判定がYESとなってから所定時間が経過するまでの間、RAM111に、アドレスを変更しながらの波形データの書き込みが行われる。
【0047】
ステップ504では、波形データの取り込みの終了に伴い、その波形データの保持を行う。その保持は、例えば波形データが格納されたRAM111内の領域を、使用中の領域として登録することで実現する。それが終了した後、一連の処理を終了する。
【0048】
図6は、図4に示すサンプリング処理内でステップ405として実行されるピッチ抽出処理の動作フローチャートである。次に、この図6を参照して、ピッチ抽出処理について詳細に説明する。上述したように、このピッチ抽出処理の実行により、取り込んだ波形データのピッチ(音高)が抽出される。
【0049】
先ず、ステップ601では、波形データ中でピークとなっている点を検出し、検出したピーク点の間隔からピッチを抽出するピーク検出処理を実行する。続くステップ602では、波形データ中のゼロクロス点を検出し、検出したゼロクロス点の間隔からピッチを抽出するゼロクロス検出処理を実行する。その後、ステップ603に移行する。
【0050】
上記の各検出処理を実行することで、ピーク点、ゼロクロス点に着目したピッチ(データ)が各々抽出される。ステップ603では、それらのピッチが一致するか否か判定する。それらのピッチが一致していた場合、その判定はYESとなってステップ604に移行する。そうでない場合には、その判定はNOとなってステップ605に移行する。
【0051】
ステップ604では、一致したピッチを抽出したピッチデータとして保持した後、一連の処理を終了する。他方のステップ605では、それらのピッチの平均値を算出し、その平均値をピッチデータとして保持した後、一連の処理を終了する。
【0052】
このように、本実施の形態では、ピーク点とゼロクロス点に着目したピッチ検出をそれぞれ行っている。これにより、より正確なピッチデータを取得することができる。
【0053】
ここで、上記ピッチ抽出処理内で実行されるピーク検出処理、ゼロクロス検出処理の各サブルーチン処理について、図7、図8にそれぞれ示す動作フローチャートを参照して詳細に説明する。
【0054】
図7は、図6に示すステップ601として実行されるピーク検出処理の動作フローチャートである。始めに、図7を参照して、ピーク検出処理について詳細に説明する。
【0055】
このピーク検出処理では、波形データの終わり、即ちRAM111のそれを格納した領域の最終アドレスを起点として、1つずつアドレス(の値)を前に戻しながら、ピーク点の検出、及びピッチに対応するピーク点の間隔の検出が行われる。波形データの終わりを起点にしているのは、音の波形は時間が経過するにつれてシンプルになっていく傾向があるためである。
【0056】
なお、後述するように、ピーク点の間隔を5回行い、その平均値をピッチデータとしているが、その回数は、それに限定されるものではない。必要に応じて、例えば波形データの全体的な特性についての解析を行い、その解析結果に基づいた回数を行うようにしても良い。
【0057】
先ず、ステップ701では、ピーク点間隔の検出回数のカウント用に用いる変数nに0を代入するとともに、RAM111から波形データを読み出すアドレスの値を最終アドレスの値に設定する。続くステップ702では、その変数nの値が5か否か判定する。ピーク点間隔の検出を予め定めた回数(本実施の形態では5回)だけ行った場合、その判定はYESとなってステップ716に移行する。そうでない場合には、その判定はNOとなってステップ703に移行する。
【0058】
ステップ703では、現在設定されているアドレスに格納されているデータをRAM111から読み出す。続くステップ704では、ピーク点となっているデータを検出したか否か判定する。ステップ703でRAM111から読み出したデータがピーク点であった場合、その判定はYESとなってステップ708に移行する。そうでない場合には、その判定はNOとなってステップ705に移行する。
【0059】
なお、ピーク点は、例えば現在設定しているアドレスを中心として、その前後のアドレスに格納されているデータを幾つかRAM111から読み出し、そのデータの変化から検出することができる。そのアドレスの周辺においてデータの値(波高値)が変化している様子を合わせて検出した場合には、より正確にピーク点を検出することができる。これは、後述するゼロクロス点の検出においても同様である。
【0060】
ステップ705では、ピーク検出中フラグがオンであるか否か判定する。このピーク検出中フラグは、ピーク点間隔を検出している途中か否か、より正確には、その間隔内に存在しているアドレス(データ)数をカウントしているか否かを示すフラグである。そのフラグがオフであった場合、その判定はNOとなってステップ707に移行する。そうでない場合には、即ち現在ピーク点間隔を検出中である場合には、その判定はYESとなってステップ706に移行する。
【0061】
ステップ706では、ピーク点間隔内に存在するアドレスをカウントするための変数である差分アドレスをインクリメントする。それに続くステップ707では、上記ステップ703でデータを読み出すアドレスの値をデクリメントする。その後、ステップ702に戻る。
【0062】
ピーク点間隔内に存在するアドレス数をカウント中であった場合、ステップ704の判定がYES、即ち次のピーク点を検出するまでの間、ステップ702〜707の処理ループが形成される。このため、ピーク点を検出してピーク検出中フラグをオンにしてから次のピーク点を検出するまでのアドレス数が、差分アドレス(変数)を用いてカウントされる。
【0063】
そのステップ704の判定がYES、即ち波形データにおけるピーク点を検出したことで移行するステップ708では、ピーク検出中フラグがオンか否か判定する。ピーク検出中フラグがオンしている場合、その判定はYESとなってステップ711に移行する。そうでない場合には、その判定はNOとなってステップ709に移行する。
【0064】
ステップ709では、ピーク検出中フラグをオンにセットする。続くステップ710では、ピーク点間隔のカウント用である上記差分アドレスをリセット、即ちその変数に0を代入する。その後、ステップ707に移行する。
【0065】
このように、ピーク検出中フラグがオフでピーク点間隔のカウントを行っていなかった場合には、ピーク検出中フラグをオンし、差分アドレスをリセットする。これにより、ピーク点間隔のカウントが開始される。
【0066】
一方、ステップ708の判定のYESは、ピーク点間隔のカウントが終了、即ち1回のピーク点間隔の検出が終了したことを意味する。そのステップ708の判定がYESとなることで移行するステップ711では、差分アドレスに現在代入されている値を時間データとして格納する。続くステップ712では、その時間データに対応するピッチ(音高)を求める。ピッチ(音高)を求めた後、ステップ713に移行する。
【0067】
差分アドレスの値に対応する時間間隔、即ち波形データの1周期は、その値に、波形データのサンプリング周期(1アドレス当たりの時間間隔)を掛けることで算出することができる。その1周期を算出することにより、それに対応するピッチ(音高)も求めることができる。
【0068】
ステップ713では、ピーク検出中フラグをオフにする。続くステップ714では、ステップ712で得たピッチ(音高)を、変数nが示す回のピッチデータとして保存する。ピッチデータの保存が終了すると、ステップ715で変数nの値をインクリメントした後、ステップ707に移行する。
【0069】
このように、ピーク検出中フラグがオンであった場合、ステップ713ではそのフラグをオフにする。これにより、本実施の形態では、ピーク点間隔の検出を1つ置きに行うようにしている。
【0070】
ステップ715でインクリメントした上記変数nの値が5になると、ステップ702の判定がYESとなってステップ716が実行される。そのステップ716では、変数nの値が0〜4の計5回行ったピーク点間隔の検出により得たピッチデータの平均値を算出する。その平均値を算出した後、一連の処理を終了する。その算出した平均値が、このピーク検出処理のピッチデータとして、図6に示すピッチ抽出処理に渡される。
【0071】
図8は、図6に示すステップ602として実行されるゼロクロス検出処理の動作フローチャートである。次に、図8を参照して、ゼロクロス検出処理について詳細に説明する。
【0072】
このゼロクロス検出処理では、上述したピーク検出処理と同様に、波形データの終わり、即ちRAM111のそれを格納した領域の最終アドレスを起点として、1つずつアドレス(の値)を前に戻しながら、ゼロクロス点の検出、及びピッチに対応するゼロクロス点の間隔の検出が行われる。
【0073】
なお、後述するように、ピーク点の間隔を5回行い、その平均値をピッチデータとしているが、その回数は、それに限定されるものではない。必要に応じて、例えば波形データの全体的な特性についての解析を行い、その解析結果に基づいた回数を行うようにしても良い。
【0074】
先ず、ステップ801では、ピーク点間隔の検出回数のカウント用に用いる変数nに0を代入するとともに、RAM111から波形データを読み出すアドレスの値を最終アドレスの値に設定する。続くステップ802では、その変数nの値が5か否か判定する。ピーク点間隔の検出を予め定めた回数(本実施の形態では5回)だけ行った場合、その判定はYESとなってステップ816に移行する。そうでない場合には、その判定はNOとなってステップ803に移行する。
【0075】
ステップ803では、現在設定されているアドレスに格納されているデータをRAM111から読み出す。続くステップ804では、ゼロクロス点となっているデータを検出したか否か判定する。ステップ803でRAM111から読み出したデータがゼロクロス点であった場合、その判定はYESとなってステップ808に移行する。そうでない場合には、その判定はNOとなってステップ805に移行する。
【0076】
ステップ805では、ゼロクロス検出中フラグがオンであるか否か判定する。このゼロクロス検出中フラグは、ゼロクロス点間隔を検出している途中か否か、より正確には、その間隔内に存在しているアドレス(データ)数をカウントしているか否かを示すフラグである。そのフラグがオフであった場合、その判定はNOとなってステップ807に移行する。そうでない場合には、即ち現在ゼロクロス点間隔を検出中である場合には、その判定はYESとなってステップ806に移行する。
【0077】
ステップ806では、ゼロクロス点間隔内に存在するアドレス数をカウントするための変数である差分アドレスをインクリメントする。それに続くステップ807では、上記ステップ803でデータを読み出すアドレスの値をデクリメントする。その後、ステップ802に戻る。
【0078】
ゼロクロス点間隔内に存在するアドレス数をカウント中であった場合、ステップ804の判定がYES、即ち次のゼロクロス点を検出するまでの間、ステップ802〜807の処理ループが形成される。このため、ゼロクロス点を検出してゼロクロス検出中フラグをオンにしてから次のゼロクロス点を検出するまでのアドレス数が、差分アドレス(変数)を用いてカウントされる。
【0079】
そのステップ804の判定がYES、即ち波形データにおけるゼロクロス点を検出したことで移行するステップ808では、ゼロクロス検出中フラグがオンか否か判定する。ゼロクロス検出中フラグがオンしている場合、その判定はYESとなってステップ811に移行する。そうでない場合には、その判定はNOとなってステップ809に移行する。
【0080】
ステップ809では、ゼロクロス検出中フラグをオンにセットする。続くステップ810では、上記差分アドレスをリセット、即ちその変数に0を代入する。その後、ステップ807に移行する。
【0081】
このように、ゼロクロス検出中フラグがオフでゼロクロス点間隔のカウントを行っていなかった場合には、ゼロクロス検出中フラグをオンし、差分アドレスをリセットする。これにより、ゼロクロス点間隔のカウントが開始される。
【0082】
一方、ステップ808の判定のYESは、ゼロクロス点間隔のカウントが終了、即ち1回のゼロクロス点間隔の検出が終了したことを意味する。そのステップ808の判定がYESとなることで移行するステップ811では、差分アドレスに現在代入されている値を時間データとして格納する。続くステップ812では、その時間データに対応するピッチ(音高)を求める。ピッチ(音高)を求めた後、ステップ813に移行する。
【0083】
差分アドレスの値に対応する時間間隔、即ち波形データの1周期は、その値に、波形データのサンプリング周期(1アドレス当たりの時間間隔)を掛けることで算出することができる。その1周期を算出することにより、それに対応するピッチ(音高)も求めることができる。
【0084】
ステップ813では、ゼロクロス検出中フラグをオフにする。続くステップ814では、ステップ812で得たピッチ(音高)を、変数nが示す回のピッチデータとして保存する。ピッチデータの保存が終了すると、ステップ815で変数nの値をインクリメントした後、ステップ807に移行する。
【0085】
このように、ゼロクロス検出中フラグがオンであった場合、ステップ813ではそのフラグをオフにする。これにより、本実施の形態では、ゼロクロス点間隔の検出を1つ置きに行うようにしている。
【0086】
ステップ815でインクリメントした上記変数nの値が5になると、ステップ802の判定がYESとなってステップ816が実行される。そのステップ816では、変数nの値が0〜4の計5回行ったゼロクロス点間隔の検出により得たピッチデータの平均値を算出する。その平均値を算出した後、一連の処理を終了する。その算出した平均値が、このゼロクロス検出処理のピッチデータとして、図6に示すピッチ抽出処理に渡される。
【0087】
次に、図4に示すサンプリング処理内でステップ407として実行されるスプリット決定処理について、図9に示すその動作フローチャートを参照して詳細に説明する。
【0088】
本実施の形態では、RAM111に複数の波形データを取り込めるようにしている。各波形データは、その基準ピッチに応じて、鍵盤装置105が備えている鍵盤を複数の鍵域に分割して割り当てるようにしている。その分割と割り当ては、スプリット決定処理により行われる。
【0089】
先ず、ステップ901では、RAM111に他の波形データが取り込まれているか否か判定する。ユーザが他に波形データを取り込ませていた場合、その判定はYESとなってステップ903に移行する。そうでない場合には、その判定はNOとなってステップ902に移行する。
【0090】
そのステップ902では、RAM111に取り込まれている波形データは一つだけであることから、その基準ピッチ(図4中のステップ406で確定されたピッチ)を中心にして、鍵盤装置105の全てに取り込んだ波形データを割り当てる。その後、一連の処理を終了する。
【0091】
ステップ903〜908では、他に波形データがRAM111に格納されていることから、それら各波形データの基準ピッチに基づいた波形データの鍵盤への割り当てが行われる。
【0092】
先ず、ステップ903では、今回取り込んだ波形データの基準ピッチより高い基準ピッチの波形データがRAM111に格納されているか否か判定する。波形データが多数RAM111に格納されている場合、今回の波形データの基準ピッチより基準ピッチが高い波形データが複数存在することも考えられる。このことから、ステップ903では、今回の波形データの基準ピッチの次に低い基準ピッチの波形データを特定することも合わせて行われる。
【0093】
今回の波形データの基準ピッチより高い基準ピッチの波形データが一つでもRAM111に取り込まれている場合、その判定はYESとなってステップ905に移行する。そうでない場合には、その判定はNOとなってステップ904に移行する。
【0094】
そのステップ904では、今回取り込んだ波形データの基準ピッチが最も高いことから、その基準ピッチに対応する鍵より音高が高い全ての鍵を、その波形データに割り当てる。その後、ステップ906に移行する。
【0095】
他方のステップ905では、今回取り込んだ波形データの基準ピッチと、それよりも基準ピッチが一つ上側の波形データの基準ピッチとの中間にスプリットを設定する。その後、ステップ906に移行する。
【0096】
上記ステップ904、或いは905の何れかを実行することにより、今回取り込んだ波形データが割り当てられる鍵域の上限が確定する。ステップ906〜908では、その鍵域の下限の確定が行われる。
【0097】
先ず、ステップ906では、今回取り込んだ波形データの基準ピッチより低い基準ピッチの波形データがRAM111に格納されているか否か判定する。波形データが多数RAM111に格納されている場合、上記と同様に、今回の波形データの基準ピッチより基準ピッチが低い波形データが複数存在することも考えられる。このことから、ステップ906では、今回の波形データの基準ピッチの次に高い基準ピッチの波形データを特定することも合わせて行われる。
【0098】
今回の波形データの基準ピッチより低い基準ピッチの波形データが一つでもRAM111に取り込まれている場合、その判定はYESとなってステップ908に移行する。そうでない場合には、その判定はNOとなってステップ907に移行する。
【0099】
そのステップ907では、今回取り込んだ波形データの基準ピッチが最も低いことから、その基準ピッチに対応する鍵より音高が低い全ての鍵を、その波形データに割り当てる。その後、一連の処理を終了する。
【0100】
他方のステップ908では、今回取り込んだ波形データの基準ピッチと、それよりも基準ピッチが一つ下側の波形データの基準ピッチとの中間にスプリットを設定する。その後、一連の処理を終了する。
【0101】
このように、スプリット処理では、今回取り込んだ波形データの基準ピッチに基づいて、その波形データを鍵盤に割り当てる。このため、ユーザが指定した音高と実際に発音された楽音の音高とがズレるといったことがなくなり、人が発音された楽音から受ける違和感を最小限度に抑えることができるようになる。
【0102】
なお、上記波形データの割り当てにおいては、ユーザにその割り当てを行わせる条件を入力させて、その条件も考慮して割り当てを行うようにしても良い。これにより、その波形データを取り込ませた目的等に応じて、ユーザはより所望する形での波形データの割り当てを行わせることができるようになる。
【0103】
図10は、図4に示すサンプリング処理でステップ408として実行されるMAX/MIN値検出処理の動作フローチャートである。次に、図10を参照して、その処理動作について詳細に説明する。
【0104】
本実施の形態では、このMAX/MIN値検出処理により、波形データの局所的なMAX値、及びMIN値を、それぞれその絶対値の大きいほうから5個抽出している。ここでは、各MAX値、及びMIN値の区別を明確にするために、それらを各々絶対値の大きいほうから、MAX値についてはMAX1値、MAX2値、・・・、MAX5値、MIN値についてはMIN1値、MIN2値、・・・、MIN5値と呼ぶことにする。
【0105】
先ず、ステップ1001では、最も大きいMAX値であるMAX1値を検出する処理を実行する。それに続くステップ1002〜1005では、それぞれ、MAX2値〜MAX5値を検出する処理を実行する。5番目に大きいMAX5値を検出した後、ステップ1006に移行する。
【0106】
ステップ1006〜1010では、上記と同様に、最も小さいMIN値であるMIN1値から、5番目に小さいMIN5値まで順に検出することが行われる。MIN5値を検出した後、一連の処理を終了する。
【0107】
ここで、上記MAX/MIN値検出処理内で実行されるサブルーチン処理について、図11〜図14を参照して詳細に説明する。
始めに、図10に示すMAX/MIN値検出処理内でステップ1001として実行されるMAX1値検出処理について、図11に示すその動作フローチャートを参照して詳細に説明する。
【0108】
このMAX1値検出処理では、波形データの頭から、即ちRAM111のその波形データが格納されている領域の先頭アドレスから、順次アドレスを変更しながらそこに格納されているデータを読み出し、その読み出したデータがそれまでに読み出したデータよりも大きいか否か比較していくことにより、MAX1値を検出する。
【0109】
先ず、ステップ1101では、RAM111からデータを読み出すアドレスの指定に用いる変数nに0を代入する。この変数nは、RAM111内の対象としている波形データが格納されている領域の先頭アドレスの値と加算され、その加算後のアドレスのデータがRAM111から読み出される。
【0110】
ステップ1101に続くステップ1102では、上記のように、変数nによって指定されるアドレスからデータを読み出し、そのデータとそれのアドレスの値を保持する。これら保持したデータとアドレスの値は、後述するように、それ以降にRAM111から読み出したデータとの比較に用いられる。それらの保持が終了した後、ステップ1103に移行する。
【0111】
ステップ1103〜1106は処理ループを形成している。その処理ループでは、アドレスを順次更新しながら、それまでに読み出したデータのなかで最大のデータ、及びそれのアドレスの値を保持していくことが行われる。
【0112】
先ず、ステップ1103では、変数nのインクリメントを行う。そのインクリメントが終了すると、ステップ1104に移行し、そこで変数nによって指定されるデータを読み出す。続くステップ1105では、その読み出したデータを、保持していたそれまでに読み出したデータのなかでの最大のデータと比較し、より値が大きいほうのデータ、及びそのデータが格納されていたアドレスの値を各々保持する。その後、ステップ1106に移行する。
【0113】
ステップ1106では、ステップ1103でインクリメント(更新)した変数nと波形データが格納されている領域の先頭アドレスとを加算した値が、その領域の最終アドレスの値であるか否か判定する。波形データを構成する各データを全てチェックした場合、その判定はYESとなってステップ1107に移行する。そうでない場合には、その判定はNOとなってステップ1103に戻る。
【0114】
ステップ1107に移行した時点で保持しているデータは、それまでよりも大きいデータを読み出す毎にそれに置き換えて保持していることから、波形データのなかで最も大きい値である。このため、ステップ1107では、その保持しているデータをMAX1値として保持(確定)し、また、それが格納されているアドレスの値を保持する。それらの保持が終了した後、一連の処理を終了する。
図12は、図10に示すMAX/MIN値検出処理内でステップ1002として実行されるMAX2値検出処理の動作フローチャートである。次に、図12を参照して、その処理動作を詳細に説明する。
【0115】
このMAX2値検出処理では、上述したようにしてMAX1値が確定していることから、そのMAX1値を考慮しつつ、RAM111の波形データが格納されている領域の先頭アドレスから、MAX1値の次に大きいMAX値(MAX2値)を探していくことが行われる。
【0116】
先ず、ステップ1201では、RAM111からデータを読み出すアドレスの指定に用いる変数nに0を代入する。この変数nは、RAM111内の対象としている波形データが格納されている領域の先頭アドレスの値と加算され、その加算後のアドレスのデータがRAM111から読み出される。
【0117】
ステップ1201に続くステップ1202では、上記のように、変数nによって指定されるアドレスからデータを読み出し、そのデータとそれのアドレスの値を保持する。これら保持したデータとアドレスの値は、後述するように、それ以降にRAM111から読み出したデータとの比較に用いられる。それらの保持が終了した後、ステップ1203に移行する。
【0118】
ステップ1203〜1210は、ステップ1203〜1208、1210、或いはステップ1203〜1207、1209、1210の処理ループを形成している。それら何れかの処理ループを実行していくことにより、MAX1値に続く大きさのMAX2値に対応するデータ、及びそれのアドレスの値が共に保持される。
【0119】
先ず、ステップ1203では、変数nのインクリメントを行う。そのインクリメントが終了すると、ステップ1204に移行し、そこで変数nによって指定されるデータを読み出す。続くステップ1205では、その読み出したデータを、保持していたデータと比較する。その比較を行った後に移行するステップ1206では、より値が大きいほうのデータ、及びそのデータが格納されていたアドレスの値を各々仮に保持する。その後、ステップ1207に移行する。
【0120】
ステップ1207では、その仮に保持したアドレスの値がMAX1値のアドレスの値と同じか否か判定する。ステップ1204でデータを読み出したアドレスがMAX1値のそれと同じであった場合、その判定はYESとなってステップ1208に移行する。そうでない場合には、その判定はNOとなってステップ1209に移行する。
【0121】
ステップ1208では、ステップ1206で仮に保持したデータとそれのアドレスの値を廃棄し、保持内容の更新(置き換え)を取りやめる。その後、ステップ1210に移行する。他方のステップ1209では、ステップ1206で仮に保持したデータとそのアドレスの値を保持し、保持内容の更新を行う。その後、ステップ1210に移行する。
【0122】
ステップ1210では、ステップ1203でインクリメント(更新)した変数nと波形データが格納されている領域の先頭アドレスの値とを加算した値が、その領域の最終アドレスの値であるか否か判定する。波形データを構成する各データを全てチェックした場合、その判定はYESとなってステップ1211に移行する。そうでない場合、その判定はNOとなってステップ1203に戻る。
【0123】
ステップ1211に移行した時点で保持しているデータは、MAX1値の次に大きいMAX値である。このため、ステップ1211では、その保持しているデータをMAX2値として保持(確定)し、また、それが格納されているアドレスの値を保持する。それらの保持が終了した後、一連の処理を終了する。
【0124】
図13は、図10に示すMAX/MIN値検出処理内でステップ1006として実行されるMIN1値検出処理の動作フローチャートである。次に、図13を参照して、その処理動作を詳細に説明する。
【0125】
このMIN1値検出処理では、RAM111の波形データが格納されている領域の先頭アドレスから、順次アドレスを変更しながらそこに格納されているデータを読み出し、その読み出したデータがそれまでに読み出したデータよりも小さいか否か比較していくことにより、MIN1値を検出する。
【0126】
先ず、ステップ1301では、RAM111からデータを読み出すアドレスの指定に用いる変数nに0を代入する。この変数nは、RAM111内の対象としている波形データが格納されている領域の先頭アドレスの値と加算され、その加算後のアドレスのデータがRAM111から読み出される。
【0127】
ステップ1301に続くステップ1302では、上記のように、変数nによって指定されるアドレスからデータを読み出し、そのデータとそれのアドレスの値を保持する。これら保持したデータとアドレスの値は、後述するように、それ以降にRAM111から読み出したデータとの比較に用いられる。それらの保持が終了した後、ステップ1303に移行する。
【0128】
ステップ1303〜1306は処理ループを形成している。その処理ループでは、アドレスを順次更新しながら、それまでに読み出したデータのなかで最小のデータ、及びそれのアドレスの値を保持していくことが行われる。
【0129】
先ず、ステップ1303では、変数nのインクリメントを行う。そのインクリメントが終了すると、ステップ1304に移行し、そこで変数nによって指定されるデータを読み出す。続くステップ1305では、その読み出したデータを、保持していたそれまでに読み出したデータのなかでの最小のデータと比較し、より値が小さいほうのデータ、及びそのデータが格納されていたアドレスの値を各々保持する。その後、ステップ1306に移行する。
【0130】
ステップ1306では、ステップ1303でインクリメント(更新)した変数nと波形データが格納されている領域の先頭アドレスの値とを加算した値が、その領域の最終アドレスの値であるか否か判定する。波形データを構成する各データを全てチェックした場合、その判定はYESとなってステップ1307に移行する。そうでない場合、その判定はNOとなってステップ1303に戻る。
【0131】
ステップ1307に移行した時点で保持しているデータは、それまでよりも小さいデータを読み出す毎にそれに置き換えて保持していることから、波形データのなかで最も小さい値である。このため、ステップ1307では、その保持しているデータをMIN1値として保持(確定)し、また、それが格納されているアドレスの値を保持する。それらの保持が終了した後、一連の処理を終了する。
【0132】
図14は、図10に示すMAX/MIN値検出処理内でステップ1007として実行されるMIN2値検出処理の動作フローチャートである。次に、図14を参照して、その処理動作を詳細に説明する。
【0133】
このMIN2値検出処理では、上述したようにしてMIN1値が確定していることから、そのMIN1値を考慮しつつ、RAM111の波形データが格納されている領域の先頭アドレスから、MIN1値の次に小さいMIN値(MIN2値)を探していくことが行われる。
【0134】
先ず、ステップ1401では、RAM111からデータを読み出すアドレスの指定に用いる変数nに0を代入する。この変数nは、RAM111内の対象としている波形データが格納されている領域の先頭アドレスの値と加算され、その加算後のアドレスのデータがRAM111から読み出される。
【0135】
ステップ1401に続くステップ1402では、上記のように、変数nによって指定されるアドレスからデータを読み出し、そのデータとそれのアドレスの値を保持する。これら保持したデータとアドレスの値は、後述するように、それ以降にRAM111から読み出したデータとの比較に用いられる。それらの保持が終了した後、ステップ1403に移行する。
【0136】
ステップ1403〜1410は、ステップ1403〜1408、1410、或いはステップ1403〜1407、1409、1410の処理ループを形成している。それら何れかの処理ループを実行していくことにより、MIN1値の次に小さいMIN2値に対応するデータ、及びそれのアドレスの値が保持される。
【0137】
先ず、ステップ1403では、変数nのインクリメントを行う。そのインクリメントが終了すると、ステップ1404に移行し、そこで変数nによって指定されるデータを読み出す。続くステップ1405では、その読み出したデータを、保持していたデータと比較する。その比較が終了した後に移行するステップ1406では、より値が小さいほうのデータ、及びそのデータが格納されていたアドレスの値を各々仮に保持する。その後、ステップ1407に移行する。
【0138】
ステップ1407では、その仮に保持したアドレスの値がMIN1値のアドレスの値と同じか否か判定する。ステップ1404でデータを読み出したアドレスがMIN1値のそれと同じであった場合、その判定はYESとなってステップ1408に移行する。そうでない場合には、その判定はNOとなってステップ1409に移行する。
【0139】
ステップ1408では、ステップ1406で仮に保持したデータとそれのアドレスの値を廃棄し、保持内容の更新(置き換え)を取りやめる。その後、ステップ1410に移行する。他方のステップ1409では、ステップ1406で仮に保持したデータとそのアドレスの値を保持し、保持内容の更新を行う。その後、ステップ1410に移行する。
【0140】
ステップ1410では、ステップ1403でインクリメント(更新)した変数nと波形データが格納されている領域の先頭アドレスの値とを加算した値が、その領域の最終アドレスの値であるか否か判定する。波形データを構成する各データを全てチェックした場合、その判定はYESとなってステップ1411に移行する。そうでない場合、その判定はNOとなってステップ1403に戻る。
【0141】
ステップ1411に移行した時点で保持しているデータは、MIN1値の次に小さいMIN値である。このため、ステップ1411では、その保持しているデータをMIN2値として保持(確定)し、また、それが格納されているアドレスの値を保持する。それらの保持が終了した後、一連の処理を終了する。
【0142】
上述した各サブルーチン処理を実行することにより、図10に示すMAX/MIN値検出処理は、波形データ中の局所的なMAX値とMIN値を複数検出する。図4に示すサンプリング処理内のステップ408のMAX/MIN値検出処理以降で、それら検出したMAX値、及びMIN値が使用される。
【0143】
サンプリング処理内の図4に示されているサブルーチン処理の説明に戻る。
図15は、ステップ409として実行される自動増幅処理の動作フローチャートである。次に、図15を参照して、その処理動作を詳細に説明する。
【0144】
上記したように、マイク107が出力する取り込んだ楽音の信号レベルは、その楽音の種類や、それを取り込ませる環境(楽音の発生源とマイク107との距離等)等によって変化する。自動増幅処理は、マイク107が出力した信号レベルの取り込んだ楽音毎による違いを吸収するように、波形データに対する調整用の増幅率(乗算値)を設定する処理である。
【0145】
先ず、ステップ1501では、図10に示すMAX/MIN値検出処理で検出されたMAX1値とMIN1値を絶対値で比較する。続くステップ1502では、その絶対値の大きい方の値が所定値aとなる乗算値を算出する。その乗算値が上記調整用の乗算値である。それを算出した後、一連の処理を終了する。
【0146】
なお、上記所定値aは、例えば1回のサンプリングで取り込まれたデータの格納に割り当てたビット数に応じて決定する値である。例えばそのビット数が16であった場合、所定値aとして例えば32768といった値を設定する。
【0147】
CPU101は、上記乗算値を、例えば制御用データとしてワークRAM104に保持し、RAM111内の該当する波形データで発音を行わせる場合、サウンドシステム112にその値を用いた波形データの補正を指示する。これにより、発音に用いる波形データの種類による音量の変化が回避される。
【0148】
図16は、図4に示すサンプリング処理内でステップ410として実行されるエンベロープ(ENV)推定処理の動作フローチャートである。次に、図16を参照して、その処理動作を詳細に説明する。
【0149】
ユーザがマイク107を介して取り込ませる楽音は、減衰系と非減衰系とに大別することができる。このエンベロープ(ENV)推定処理は、ユーザが取り込ませた楽音が減衰系(減衰音)か否かを判別する処理である。周知のように、楽音波形が振動する様子は複雑である。しかし、基本的な周期を持っている。上記基準ピッチがその基本的な周期に対応する。このことから、本実施の形態では、基準ピッチ単位でデータ(波高値)の変化を調べることにより、より正確な判別を行えるようにしている。
【0150】
先ず、ステップ1601では、変数nに1を代入する。この変数nは、RAM111から波形データを読み出す位置を特定するために使用される変数である。その代入が終了すると、ステップ1602に移行する。
【0151】
上記MAX1値は、最高音量である1個のピーク点である。このことから、本実施の形態では、MAX1値のアドレスを基準として、基準ピッチ(ここでは、ピーク点間隔内に存在するアドレス数)単位でデータを読み出す範囲を特定し、その特定した範囲内でMAX値(ピーク点)を検出し、その検出したMAX値から減衰系か否かの判別を行っている。
【0152】
ステップ1602では、基準ピッチに変数nの値、及び1.1を掛けた値をMAX1値のアドレスの値に加算した値が、波形データを格納したRAM111の領域の最終アドレスの値より大きいか否か判定する。その加算後の値が最終アドレスの値以上の場合、その判定はYESとなってステップ1605に移行する。そうでない場合には、ステップ1603に移行する。
【0153】
ステップ1603では、MAX1値のアドレスの値に、基準ピッチに変数nの値、及び0.9を掛けた値と、その0.9の換わりに1.1を掛けた値とで特定される範囲内のデータをRAM111から読み出し、その読み出したデータのなかでのMAX(PART MAXn:nは変数nの値である)値を検出して保持する。その後、ステップ1604で変数nをインクリメントし、ステップ1602に戻る。
【0154】
なお、上記0.9、及び1.1の両係数は、実験を繰り返し行うことで得た経験的な数値である。しかし、PART MAXn値を検出する範囲を特定するための係数の値は、それらの値、或いはその近傍の値に必ずしも限定しなくとも良い。
【0155】
ステップ1602の判定がNOとなるまで、ステップ1602〜1604で形成される処理ループが繰り返し実行される。これにより、MAX1値のアドレスから基準ピッチ単位で離れている位置付近で検出されたMAX値(PART MAXn値)が順次保持される。
【0156】
ステップ1602の判定がNOとなると、PART MAXn値の検出が終了したとして、ステップ1605に移行する。ステップ1605〜1609では、保持したPART MAXn値に基づいて、取り込んだ波形データ(楽音)が減衰系か否かの判別が行われる。
【0157】
先ず、ステップ1605では、上記PART MAXn値が複数保持して有るか否か判定する。変数nの値に応じてPART MAXn値を複数保持してある場合、その判定はYESとなってステップ1607に移行する。そうでない場合には、その判定はNOとなってステップ1606に移行する。なお、その複数のPART MAXn値で構成される数列はPART MAXn数列と呼ぶことにする。そのPART MAXn数列が波形データ(楽音)のエンベロープに対応する。
【0158】
PART MAXn数列が無い場合、減衰系か否かの判別を行うことはできない。その場合、本実施の形態では、ステップ1606で非減衰系であると決定(判別)する。その決定が終了すると、一連の処理を終了する。
【0159】
他方のステップ1607では、上記PART MAXn数列から、それの階差数列を算出する。続くステップ1608では、その階差数列を構成する各値の80パーセント以上が負の値であるか否か判定する。階差数列を構成する各値の大部分が負であった場合、即ち音量が明らかな減衰傾向を示していた場合、その判定はYESとなってステップ1609に移行する。そうでない場合には、その判定はNOとなってステップ1606に移行する。ステップ1609では、音量の減衰傾向が明らかであることから、減衰系に決定(判別)する。その決定を行った後、一連の処理を終了する。
【0160】
なお、上記80パーセントという値は、上記0.9、及び1.1の両係数と同様に、実験を重ねることで得た経験的な値である。しかし、その値は、音量の減衰傾向を判定するための値の具体例であり、その値、或いはその近傍の値に必ずしも限定しなくとも良い。
【0161】
このようにして、取り込んだ波形データ(楽音)が減衰系か否かの判別(決定)が行われる。その判別結果は、後述するENV RATE値設定処理(図18参照)に反映される。
【0162】
図17は、図4に示すサンプリング処理内でステップ411として実行されるループ範囲設定処理の動作フローチャートである。次に、図17を参照して、その処理動作を詳細に説明する。
【0163】
このループ範囲設定処理は、波形データのなかで繰り返し再生させるのに適したループ範囲を探しだして設定する処理である。そのループ範囲の探しだしは、波形データの基準ピッチを既に確定していることから、波形データの最後から前に向かって、その基準ピッチだけ離れている2点のデータの値を比較していき、それらの値が最も小さい2点を抽出することで行われる。
【0164】
先ず、ステップ1701では、2点のデータの読み出しにおいて基準となる基準アドレス(変数)に、波形データが格納されているRAM111内の領域の最終アドレスの値を代入する。その後、ステップ1702に移行する。
【0165】
ステップ1702では、上記基準アドレスの値が領域(波形データ)の中央のアドレスの値と等しいか否か判定する。それらの値が等しい場合、その判定はYESとなってステップ1708に移行する。そうでない場合には、その判定はNOとなってステップ1703に移行する。
【0166】
ステップ1703では、その基準アドレスによって指定されるアドレスに格納されているデータと、それよりも基準ピッチに相当するアドレス数だけ前に離れているアドレスに格納されているデータとの差分を算出する。これにより、基準ピッチ(ここでは、アドレス数)だけ離れた2点での波高(データ)値の差分が算出される。
【0167】
ステップ1703に続くステップ1704では、その2点間の波高値の差分が0か否か判定する。それらの波高値が一致していた場合、その判定はYESとなってステップ1708に移行する。そうでない場合には、その判定はNOとなってステップ1705に移行する。
【0168】
本実施の形態では、波高値が一致する2点を見つけられなかったときのために、それまでに算出した波高値の差分のなかで最も小さかった値、及びその値が得られたときの基準アドレスの値を保持するようにしている。ステップ1705では、ステップ1703で算出した今回の差分が、保持しているそれまでの最小値よりも小さいか否か判定する。今回算出した差分がこれまでで最も小さかった場合、その判定はYESとなってステップ1706に移行する。そうでない場合には、その判定はNOとなってステップ1707に移行する。
【0169】
ステップ1706では、今回算出した差分がこれまでで最も小さいことから、その差分と現在の基準アドレスの値を新たに保持する。その後、ステップ1707に移行する。
【0170】
ステップ1707では、基準アドレスに代入されている値をデクリメントすることにより、基準アドレスによって指定されるアドレスをそれまでよりも1つ前にする。その基準アドレスの更新を行った後、ステップ1702に移行する。
【0171】
このようにして、ステップ1702〜1707で形成される処理ループが、2点の波高値が一致するまで(ステップ1704の判定がYESとなるまで)、或いは、基準アドレスの値が領域の中央のアドレスの値と一致するまで(ステップ1702の判定がYESとなるまで)、繰り返し実行される。
【0172】
それらステップ1702、或いは1704の判定がYESとなると、次にステップ1708が実行される。そのステップ1708では、ステップ1702と1704の何れの判定がYESとなったかに応じてループ範囲、即ちループスタートアドレスとループエンドアドレスの設定が行われる。
【0173】
ステップ1704の判定がYESとなった場合、基準アドレスが指定するアドレスに格納されたデータ(波高値)と、それよりも基準ピッチだけ前に離れたアドレスに格納されたデータ(波高値)とが一致したことから、前者のアドレスをループエンドアドレス、後者のアドレスをループスタートアドレスにそれぞれ設定する。
【0174】
一方、ステップ1702の判定がYESとなった場合には、波高値が一致する2点が見つからなかったことから、保持しているそれらの差分が最小となる基準アドレスの値をループエンドアドレス、それよりも基準ピッチだけ前に離れたアドレスをループスタートアドレスにそれぞれ設定する。
【0175】
上記のステップ1702と1704の何れの判定がYESとなったかに応じたループ範囲の設定を行った後、一連の処理を終了する。
なお、本実施の形態では、ループ範囲を基準ピッチ分だけとしているが、例えばループ範囲を複数基準ピッチ分としても良い。複数基準ピッチ分をループ範囲に設定した場合、クロスフェードといった再生方法を用いてループ範囲の再生を行うようにしても良い。また、データの値を比較する2点は、基準ピッチだけ離しているが、基準ピッチの近傍(例えば前後)も含めて比較するようにしても良い。
【0176】
図18は、図4に示すサンプリング処理内でステップ412として実行されるENV RATE値算出処理の動作フローチャートである。次に、図18を参照して、その処理動作を詳細に説明する。
【0177】
このENV RATE値算出処理では、上述のENV推定処理(図16参照)で行った波形データ(楽音)が減衰系か否かの判別に応じて、エンベロープレート値の算出(設定)が行われる。
【0178】
先ず、ステップ1801では、波形データが減衰系であるか否か判定する。上記ENV推定処理でそれが減衰系であると判別していた場合、その判定はYESとなってステップ1802に移行する。そうでない場合には、その判定はNOとなってステップ1803に移行する。
【0179】
ステップ1802では、ループ範囲の再生までのエンベロープレート値を0(波形データの通りに再生)に設定し、また、ループ範囲以降のエンベロープレート値を、ENV推定処理で得たPART MAXn数列の階差数列に基づいて設定する。具体的には、その階差数列を構成する値のなかでループスタートアドレスに最も近い部分に対応している値を、ループ範囲以降のエンベロープレート値に設定する。その後、一連の処理を終了する。
【0180】
他方のステップ1803では、波形データが非減衰系(持続音)であることから、それらエンベロープレート値にそれぞれ0を設定し、エンベロープを付加しない設定を行う。その後、一連の処理を終了する。
【0181】
なお、本実施の形態では、ループ範囲、或いはその付近における2点間の音量の減衰(PART MAXn数列の階差数列を構成する1つの値)に基づいてループ範囲以降のエンベロープレート値を設定しているが、例えばループ範囲、及びその付近に対応する値を幾つか階差数列から抽出し、それらの値に基づいてそのエンベロープレート値を設定するようにしても良い。
【0182】
図19は、図4に示すサンプリング処理内でステップ413として実行されるVEL SENS値算出処理の動作フローチャートである。次に、図19を参照して、その処理動作を詳細に説明する。
【0183】
このVEL SENS値算出処理では、上述のENV推定処理(図16参照)で行った波形データ(楽音)が減衰系か否かの判別に応じて、鍵盤装置105が備えたタッチレスポンス機能によって検出された押鍵時のベロシティ等の操作情報を、楽音の発音に反映させるか否かの設定が行われる。
【0184】
先ず、ステップ1901では、波形データが減衰系であるか否か判定する。上記ENV推定処理でそれが減衰系であると判別していた場合、その判定はYESとなってステップ1902に移行する。そうでない場合には、その判定はNOとなってステップ1903に移行する。
【0185】
ステップ1902では、減衰系の楽音の多くは音量の強弱表現が必要であることから、タッチレスポンス機能が検出した操作情報に応じて音量変化させることを設定する。他方のステップ1903では、その操作情報に応じて音量変化させないことを設定する。それらの設定は、設定内容に応じて、例えばワークRAM104に保持させている、タッチレスポンス機能が検出した操作情報を発音に反映させるか否かを示すフラグ(変数)の値を切り換えることで行われる。ステップ1902、或いは1903での設定を行った後、一連の処理を終了する。
【0186】
なお、本実施の形態では、波形データ(楽音)が減衰系か否かにより、タッチレスポンス機能による音量変化の有無を設定しているが、その有無ではなく、例えばタッチレスポンス機能で検出した操作情報を反映させる重み付け(例えば係数の値)を設定するようにしても良い。その重み付けは、例えば減衰していく割合、即ちPART MAXn数列の階差数列に基づいて決定すれば良い。
【0187】
図20は、図4に示すサンプリング処理内でステップ414として実行されるスタートアドレス確定処理の動作フローチャートである。次に、図20を参照して、その処理動作を詳細に説明する。
【0188】
サンプリング処理内でステップ403として実行される波形取り込み処理では、図5に示すように、マイク107が拾った音がある程度大きくなった後にRAM111への波形データの格納を開始する。しかし、そのように波形データをRAM111に格納したとしても、例えばノイズ等によって波形データの格納を開始することも有り得るので、その波形データを先頭から再生するのは必ずしも適切ではない。このようなことから、この発音スタートアドレス確定処理では、RAM111に格納した波形データにおいて、その再生を開始させるのに適切な位置(アドレス)を探しだし、その探し出した位置をスタートアドレスに設定することが行われる。
【0189】
先ず、ステップ2001では、RAM111から波形データを読み出すアドレスを管理するための変数xに、上記MAX1値のアドレスの値を代入する。そのMAX1値は、波形データ中で最も大きい局所的最大値であり、最大音量に対応する。スタートアドレスは、その最大音量のデータが格納されているアドレスよりも前に存在するとして検出を行う。
【0190】
ステップ2001に続くステップ2002では、変数xによって指定されるアドレスと、それよりも所定値bだけ前のアドレスとで指定される範囲内のデータが、全て所定値c以下となっているか否か判定する。その範囲内の音量が十分小さい場合、その判定はYESとなってステップ2004に移行する。そうでない場合には、その判定はNOとなってステップ2003に移行する。
【0191】
なお、上記所定値b、cは、それぞれサンプリング周期、1回のサンプリングで得たデータに割り当てているビット数に応じて決定した値である。サンプリング周波数が40kHz程度、ビット数が16であった場合、例えば所定値bとしては30、所定値cとしては1000(絶対値)を目安にすることができる。
【0192】
ステップ2003では、変数xに、その値から所定値bを引いた値を新たに代入する。その後、ステップ2002に戻る。これにより、ステップ2002、2003の処理ループが形成され、ステップ2002の判定がYESとなるまで、所定値b単位で音量レベルが十分下がった部分の探しだしが行われる。
【0193】
ステップ2004では、音量レベルが十分小さくなっている部分を特定できたことから、変数xによって指定されるアドレス以前にあるゼロクロス点を探しだし、そのゼロクロス点のアドレスをスタートアドレスに設定する。これにより、スタートアドレスが確定する。それを確定させた後、一連の処理が終了する。
【0194】
なお、本実施の形態では、十分な音量の低下を確認した後に検出したゼロクロス点をスタートアドレスに設定しているが、最大音量(MAX1値)の点より前の部分のエンベロープ(上記PART MAXn数列がエンベロープに対応する)を検出し、その傾きを基にしてスタートアドレスとすべき点(アドレス)を探すようにしても良い。
【0195】
楽音の取り込みに応じて設定するパラメータについては、本実施の形態では通常必要と考えられるパラメータの全てとしているが、それらのパラメータのなかから、ユーザが目的に応じて選択できるようにしても良い。
【0196】
その楽音の取り込みには、本実施の形態ではPCM方式を用いているが、例えばADPCM方式といった符号化方式を採用しても良い。本発明は、波形データに採用された符号化方式によって適用の可否が変わるものではない。
【0197】
また、本実施の形態は、サンプリング機能を備えた電子楽器に本発明を適用された場合のものであるが、適用させることのできる装置は電子楽器に限定されるものではない。音源装置といった他の装置にも適用することができるものである。例えば図4に示すようなサンプリング処理を行う機能を搭載したプログラムを、記憶媒体、或いは通信手段を介して配布することにより、パーソナルコンピュータ(パソコン)上でも本発明を実現するシステムを構築することができる。パソコンを用いてシステムを構築した場合には、記憶媒体、或いは通信手段を介して波形データを取得(例えばMIDIデータとして取得)することができるので、パソコンに楽音を取り込む機能を必ずしも搭載しなくとも良い。当然のことながら、波形データを取得させたパソコンをプラットホームとして、楽音を発音させるようにしても良い。
【0198】
【発明の効果】
以上説明したように本発明は、対象とする波形データを解析してその特性を表す情報を検出し、その情報を基にして、その発音データに適した発音の条件を自動的に設定する。このため、ユーザは、たとえサンプリングを行うことで波形データを取得したとしても、面倒な操作を行ったり時間をかけることなく、適切な形で楽音を発音させることができる。
【図面の簡単な説明】
【図1】本実施の形態が適用された電子楽器のブロック図である。
【図2】サンプリングスイッチ、及びその周辺を示す図である。
【図3】全体処理の動作フローチャートである。
【図4】サンプリング処理の動作フローチャートである。
【図5】波形取り込み処理の動作フローチャートである。
【図6】ピッチ抽出処理の動作フローチャートである。
【図7】ピーク検出処理の動作フローチャートである。
【図8】ゼロクロス検出処理の動作フローチャートである。
【図9】スプリット検出処理の動作フローチャートである。
【図10】MAX/MIN値検出処理の動作フローチャートである。
【図11】MAX1値検出処理の動作フローチャートである。
【図12】MAX2値検出処理の動作フローチャートである。
【図13】MIN1値検出処理の動作フローチャートである。
【図14】MIN2値検出処理の動作フローチャートである。
【図15】自動増幅処理の動作フローチャートである。
【図16】ENV推定処理の動作フローチャートである。
【図17】ループ範囲設定処理の動作フローチャートである。
【図18】ENV RATE値算出処理の動作フローチャートである。
【図19】VEL SENS設定処理の動作フローチャートである。
【図20】発音スタートアドレス確定処理の動作フローチャートである。
【符号の説明】
101 CPU
103 プログラムROM
104 ワークRAM
105 鍵盤装置
106 スイッチ群
106a サンプリングスイッチ
107 マイク
111 RAM
Claims (1)
- 波形データを用いた楽音の発音に関する条件を自動設定する装置であって、
前記波形データのエンベロープを検出する検出手段と、
前記検出手段が検出したエンベロープに基づいて、前記波形データに対応する楽音が減衰音か否か判別する判別手段と、
音高を指定するための操作子に対して行われ、タッチレスポンス機能が検出した操作状態を表す情報を楽音の発音に反映させるための設定を、前記判別手段の判別結果に従って異ならせる設定手段と、
を具備したことを特徴とする発音条件設定装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP32383596A JP3677906B2 (ja) | 1996-12-04 | 1996-12-04 | 発音条件設定装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP32383596A JP3677906B2 (ja) | 1996-12-04 | 1996-12-04 | 発音条件設定装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH10161662A JPH10161662A (ja) | 1998-06-19 |
JP3677906B2 true JP3677906B2 (ja) | 2005-08-03 |
Family
ID=18159131
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP32383596A Expired - Fee Related JP3677906B2 (ja) | 1996-12-04 | 1996-12-04 | 発音条件設定装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3677906B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE60302333T2 (de) * | 2003-04-08 | 2006-08-03 | Sony Ericsson Mobile Communications Ab | Optimierung der Wiedergabe einer MIDI-Datei |
-
1996
- 1996-12-04 JP JP32383596A patent/JP3677906B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH10161662A (ja) | 1998-06-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20080023199A (ko) | 오디오 재생 장치 및 방법과 오디오 재생 장치를 제어하는컴퓨터 프로그램이 저장된 컴퓨터-판독가능 저장 매체 | |
JP4186851B2 (ja) | 演奏情報表示装置およびプログラム | |
JPH09127937A (ja) | 楽音パラメータ制御装置 | |
JP3484719B2 (ja) | 音声入力機能付き演奏ガイド装置および演奏ガイド方法 | |
JP3677906B2 (ja) | 発音条件設定装置 | |
JP4525591B2 (ja) | 演奏評価装置、及びプログラム | |
JP3844286B2 (ja) | 電子楽器の自動伴奏装置 | |
JPH09281963A (ja) | 楽音制御装置 | |
US20050145103A1 (en) | Electronic stringed instrument, system, and method with note height control | |
JP2836028B2 (ja) | 自動演奏装置 | |
JP4106798B2 (ja) | 音源装置 | |
JP2002032083A (ja) | 電子楽器 | |
JPH0997070A (ja) | 演奏制御装置 | |
JP3627319B2 (ja) | 演奏制御装置 | |
JP2588132Y2 (ja) | 電子弦楽器 | |
JP6710432B2 (ja) | 楽音制御装置、電子楽器、楽音制御方法およびプログラム | |
JPH0683333A (ja) | 空気流応答電子楽器 | |
JP4186855B2 (ja) | 楽音制御装置及びプログラム | |
JPH0756571A (ja) | 電子楽器 | |
JP2570550B2 (ja) | 電子弦楽器 | |
JP3169535B2 (ja) | 自動演奏装置及び自動演奏方法 | |
JP2579231Y2 (ja) | 電子楽器 | |
KR940002133B1 (ko) | 전자악기의 건반터치 강약에 따른 음량 제어방법과 장치 | |
JP2739244B2 (ja) | 電子楽器 | |
JP2542316B2 (ja) | 自動伴奏装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20041216 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20041221 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050201 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20050419 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050502 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080520 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090520 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090520 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100520 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110520 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110520 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120520 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120520 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130520 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130520 Year of fee payment: 8 |
|
LAPS | Cancellation because of no payment of annual fees |