(57)【特許請求の範囲】
【請求項１】
演奏指示により音高が指定されたかにかかわらず、複数種の音高夫々に基づいて波形データを読み出す波形データ読出し部と、
前記演奏指示によりいずれかの音高が指定されたときに、当該指定された音高に対応して前記波形データ読出し部から読み出された前記波形データを出力させるように制御する出力制御部と、
を備える楽音発生装置。
【請求項２】
前記波形データを生成するドローバー部をさらに備え、
前記ドローバー部は、基本波形データ及び当該基本波形の倍音波形データ夫々を生成する複数の波形データ生成部と、前記複数の波形データ生成部から生成された波形データ夫々に対して、ドローバー操作子によって指定された係数を乗算して出力する複数の乗算器と、前記複数の乗算器夫々の出力を混合して波形データとして出力する混合器と、を備える、
ことを特徴とする請求項１に記載の楽音発生装置。
【請求項３】
前記出力制御部は、前記いずれかの音高が指定されるとともにベロシティが指定された場合、当該指定されたベロシティに基づいて前記波形データの出力を制御することを特徴とする請求項１または２に記載の楽音発生装置。
【請求項４】
請求項１ないし３のいずれかに記載の楽音発生装置と、
前記複数の音高のいずれかを指定する複数の操作子と、
前記楽音発生装置から出力される波形データに対応する楽音を生成するサウンドシステムと、
を備えることを特徴とする電子楽器。
【請求項５】
波形データを読み出す波形データ読出し部と、前記波形データを出力させるように制御する出力制御部と、を備える楽音発生装置に用いられる楽音発生方法であって、前記楽音発生装置は、
演奏指示により音高が指定されたかにかかわらず、複数種の音高夫々に基づいて波形データを読み出し、
前記演奏指示によりいずれかの音高が指定されたときに、当該指定された音高に対応して前記読み出された波形データを出力させるように制御する、楽音発生方法。
【請求項６】
波形データを読み出す波形データ読出し部と、前記波形データを出力させるように制御する出力制御部と、を備える楽音発生装置に用いられるコンピュータに、
演奏指示により音高が指定されたかにかかわらず、複数種の音高夫々に基づいて波形データを読み出すステップと、
前記演奏指示によりいずれかの音高が指定されたときに、当該指定された音高に対応して前記読み出された波形データを出力させるように制御するステップと、
をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ドローバー方式の電気オルガンの発音メカニズムをシミュレートする楽音発生装置、方法、およびプログラムに関する。
【背景技術】
【０００２】
ドローバー方式の電気オルガン（以下、「ドローバーオルガン」と略称する）では、フィートの異なる９種類のドローバーの操作に応じてピッチの異なる９種類の正弦波を任意に組み合わせて合成することで所望の音色の楽音を形成する。
【０００３】
近年では、波形データ読出し方式の音源を用いた正弦波加算合成アルゴリズムに従ってドローバーオルガンのような音色の楽音を発生する電子楽器も知られている（例えば特許文献１または２に記載の技術）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第５５３２４４６号公報
【特許文献２】特許第４２５８８７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、ドローバーオルガンの発音メカニズムをシミュレートする従来の電子楽器では、ドローバーの操作に応じてピッチの異なる９種類の正弦波を組み合わせて合成された１つの波形データに対して、鍵盤上の鍵の押鍵タイミングで読出しアクセスが行われていた。この場合、押鍵タイミング次第で、既に発音されている楽音波形との位相関係が変わり、同じ押鍵の順番でもタイミング次第で、押鍵された各鍵に対応する各楽音波形同士が共鳴することにより、それらが混合されて放音された楽音の音量が大きくなったり小さくなったりしてしまうという課題があった。
【０００６】
また、ドローバーが変更されることにより再合成された波形データが、変更前の波形データと切り替えられる際に、変更直前に生成された楽音サンプルデータと変更直後に生成された楽音サンプルデータとで振幅の変化幅が大きくなって、ノイズが発生してしまう場合があるという課題があった。
【０００７】
本発明は、混合されて放音された楽音の音量の変動をなくすとともに、ノイズの発生を抑制することを目的とする。
【課題を解決するための手段】
【０００８】
態様の一例では、演奏指示により音高が指定されたかにかかわらず、複数種の音高夫々に基づいて波形データを読み出す波形データ読出し部と、演奏指示によりいずれかの音高が指定されたときに、その指定された音高に対応して波形データ読出し部から読み出された波形データを出力させるように制御する出力制御部と、を備える。
【発明の効果】
【０００９】
本発明によれば、混合されて放音された楽音の音量の変動をなくすとともに、ノイズの発生を抑制することが可能となる。
【図面の簡単な説明】
【００１０】
【図１】電子鍵盤楽器の実施形態のハードウェア構成例を示す図である。
【図２】ドローバー部のハードウェア構成例を示す図である。
【図３】ドローバーによる波形データ合成機能の説明図である。
【図４】音源部の機能説明図である。
【図５】波形データ更新機能の説明図である。
【図６】電子楽器の実施形態の全体制御処理の例を示すフローチャートである。
【図７】ドローバー処理の詳細例を示すフローチャートである。
【図８】サンプリング割込み処理の詳細例を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明を実施するための形態について図面を参照しながら詳細に説明する。図１は、電子鍵盤楽器の実施形態のハードウェア構成例を示す図である。図１においおいて、電子鍵盤楽器１００は、ＣＰＵ（中央演算処理装置）１０１、ＲＯＭ（リードオンリーメモリ）１０２、記憶部としてのＲＡＭ（ランダムアクセスメモリ）１０３、鍵盤部（操作子）１０４、ドローバー部１０５、および音源部１０６を備え、それらがシステムバス１０８によって相互に接続された構成を有する。また、音源部１０６の出力はサウンドシステム１０７に入力する。
【００１２】
ＣＰＵ１０１は、ＲＡＭ１０３をワークメモリとして使用しながらＲＯＭ１０２に記憶された制御プログラムを実行することにより、図１の電子鍵盤楽器１００の制御動作を実行する。
【００１３】
操作子としての鍵盤部１０４は、演奏者による各鍵の押鍵または離鍵操作を検出し、ＣＰＵ１０１に通知する。
【００１４】
ドローバー部１０５は、演奏者によるドローバーの操作を検出し、ＣＰＵ１０１に通知する。
【００１５】
音源部１０６は、ＣＰＵ１０１から入力する発音指示データに基づいて、デジタル楽音波形データを生成し、サウンドシステム１０７に出力する。サウンドシステム１０７は、音源部１０６から入力したデジタル楽音波形データをアナログ楽音波形信号に変換した後、そのアナログ楽音波形信号を内蔵のアンプで増幅して内蔵のスピーカから放音する。
【００１６】
図２は、図１のドローバー部１０５のハードウェア構成例を示す図である。ドローバー部１０５は、基音および各倍音成分毎の音量を調整する＃１〜＃９のスライドボリューム２０１と、＃１〜＃９のスライドボリューム２０１によってそれぞれレベル制御された音量信号を入力チャンネルｃｈ１〜ｃｈ９に取り込み、それぞれＡ／Ｄ（アナログ／デジタル）変換してドローバー出力Ｄｄｒ（ｃｈ１）〜Ｄｄｒ（ｃｈ９）として出力し、ＲＡＭ１０３に記憶させるＡ／Ｄ変換器２０２とから構成される。
【００１７】
＃１〜＃９のスライドボリューム２０１には、ドローバーオルガンにおける１６’（１６フィート）（「’」はフィートの省略記号）、５−１／３’（５と３分の１フィート）、８’、４’、２−２／３’、２’、１−３／５’、１−１／３’、１’という、フィートの異なる９種類のドローバーがそれぞれアサインされる。ここで、「フィート」は、パイプオルガンの、相当するパイプの長さを示す単位である。このうちドローバー８’は「基音」と呼ばれ、演奏者は、この基本を中心にドローバーであるスライドボリューム２０１を調整して音色を作成する。ドローバー４’、２−２／３’、２’、１−３／５’、１−１／３’、および１’はそれぞれ、基音の第２倍音（１オクターブ上）、第３倍音（１オクターブ＋５度上）、第４倍音（２オクターブ上）、第５倍音（２オクターブ＋３度上）、第６倍音（２オクターブ＋５度上）、および第８倍音（３オクターブ上）となっている。これらのスライドボリューム２０１により、演奏者は、基音の周波数成分に対して整数次倍音の周波数成分を任意の比率で有する音色の波形データを作成することができる。また、ドローバー１６’は基音の第１／２倍音（１オクターブ下）であり、ドローバー５−１／３’は、基音の第１．５倍音（ドローバー１６’の第３倍音）となっている。これらのスライドボリューム２０１により、基音に対して例えば深みのある音色の波形データを作成することができる。
【００１８】
図３は、図１、図２に示されるドローバー部１０５でのスライドボリューム２０１（ドローバー）の操作に基づいて図１のＣＰＵ１０１が実行する波形データ合成機能の説明図である。この機能は、ＣＰＵ１０１がドローバー部１０５が操作されたことを検知することにより実行する後述するドローバー処理（後述する図６のステップＳ６０２）内の波形データ合成処理（後述する図７のステップＳ７０１）として実現される。まず、ＣＰＵ１０１は、＃１〜＃９の乗算処理に対して、図２のＡ／Ｄ変換器２０２から図１のＲＡＭ１０３に得られているドローバー出力Ｄｄｒ（ｃｈ１）〜Ｄｄｒ（ｃｈ９）を乗算値として与える。次に、ＣＰＵ１０１は、＃１〜＃９の正弦波生成処理３０１によって、前述した１６’、５−１／３’、８’、４’、２−２／３’、２’、１−３／５’、１−１／３’、および１’の各倍音関係に対応する周波数を有する＃１〜＃９の各正弦波データを生成する。そして、ＣＰＵ１０１は、＃１〜＃９の正弦波データをそれぞれ、＃１〜＃９の乗算処理３０２に入力し、そこで各ドローバー出力Ｄｄｒ（ｃｈ１）〜Ｄｄｒ（ｃｈ９）の乗算値を乗算する。その後、ＣＰＵ１０１は、乗算結果の＃１〜＃９の各正弦波データを、加算処理３０３で混合し、その混合結果の波形データ３０４としてＲＡＭ１０３に記憶する。最後に、ＣＰＵ１０１は、波形データ３０４をコピーして、鍵盤１０５の７９鍵分のＲＡＭ１０３上の記憶領域に、＃０〜＃７８の７９組のコピー波形データ３０５を生成する。なお、このコピー処理においては、図５の説明で後述する波形データ更新機能の処理が実行される。
【００１９】
図４は、図１の音源部１０６の機能説明図である。音源部１０６は、例えばＬＳＩ（大規模集積回路）として実装されている。音源部１０６は、鍵盤部１０４の７９鍵の各音高に対応して、＃０〜＃７８の７９組のＯＳＣ４０１（読み出し部）と、＃０〜＃７８の７９組のＥＧ（出力制御部）４０２と、ＭＩＸＥＲ（出力部）４０３とを備える。
【００２０】
任意の＃ｉ（０≦ｉ≦７８）番目の１つのＯＳＣ４０１（＃ｉ）は、鍵盤部１０４の＃ｉ番目の音高（＃ｉ）の鍵に対応しており、図３のＣＰＵ１０１の波形データ合成機能によりＲＡＭ１０３に得られている＃ｉ番目のコピー波形データ３０５（＃ｉ）中の１つ以上の波形サンプルデータを、音高（＃ｉ）に対応した読出し速度（サンプル間隔）で読み出す。そして、ＯＳＣ４０１（＃ｉ）は、その読み出した波形サンプルデータに対して必要に応じて例えば補間処理を実行することにより、音高（＃ｉ）に対応する波形データを生成する。ＯＳＣ４０１（＃ｉ）は、読み出す波形サンプルデータの読出しアドレスがコピー波形データ３０５（＃ｉ）の末端アドレスまで達したら、再び先頭アドレスに戻って、音高（＃ｉ）に対応した読出し速度（サンプル間隔）での読出しを繰り返す。先頭アドレスと末端アドレスの波形サンプルデータの接続性を考慮して、波形データ３０４は、ドローバー方式等の正弦波合成方式により生成されるものとする。
【００２１】
音源部１０６中の＃０〜＃７８の各ＯＳＣ４０１は、図３のＣＰＵ１０１の波形データ合成機能によりＲＡＭ１０３に得られている各ＯＳＣ４０１に対応する＃０〜＃７８の各コピー波形データ３０５に対して、上述のＯＳＣ４０１の動作を並列に実行する。このとき、＃０〜＃７８の各ＯＳＣ４０１は、ＲＡＭ１０３に得られている同一の波形データ３０４（図３）からコピーされた＃０〜＃７８の各コピー波形データ３０５の先頭アドレスの波形サンプルデータから同時に読出しを開始し、先頭アドレスから末端アドレスまでの間で＃０〜＃７８のそれぞれの音高に対応する読出し速度（サンプル間隔）での読出しを繰り返し実行し、＃０〜＃７８のそれぞれの音高に対応する各波形データを生成する。また、電子楽器１００（図１）が動作をしている間は、＃０〜＃７８の各ＯＳＣ４０１は、演奏者が鍵盤部１０４で＃０〜＃７８までのそれぞれの音高に対応する鍵を押鍵することによる演奏の指示を行っているか否かに関わらず常に、上述の各波形データの生成動作を実行している。
【００２２】
一方、＃０〜＃７８の各ＥＧ４０２は、鍵盤部１０４の＃０番目〜＃７８番目の各音高の鍵に対応しており、各鍵が押鍵されていなければそれぞれの出力を０にして、各波形データは発音出力しない。そして、演奏者が鍵盤部１０４の任意の＃ｉ番目（０≦ｉ≦７８）の音高の鍵を押鍵すると、ＣＰＵ１０１が、鍵盤部１０４での音高（＃ｉ）の鍵の押鍵を検出することにより、音源部１０６に対して音高（＃ｉ）の楽音の発音指示データを供給する。この結果、音源部１０６内のＥＧ４０２（＃ｉ）が動作を開始する。ＥＧ４０２（＃ｉ）は、ＯＳＣ４０１（＃ｉ）が生成する波形データに対して、例えば演奏者が予め指示をした所定の強度変化特性の振幅エンベロープを押鍵開始後の時間経過とともに乗算し、その乗算の結果得られる波形データを発音出力する。
【００２３】
ＭＩＸＥＲ４０３は、＃０〜＃７８のＥＧ４０２からそれぞれ発音出力される各波形データを混合して、その混合結果をデジタルの楽音波形デ−タ４０４として図１のサウンドシステム１０７に出力する。
【００２４】
近年の電子楽器用の音源ＬＳＩは、本実施形態のような波形データの読出し方式により並列して独立動作する最大で２５６組程度のＯＳＣを搭載することが可能となっており、また多くの波形データを記憶可能な大容量メモリも低コスト化が進んでいる。そこで、本実施形態は、このような機能を有する音源ＬＳＩを音源部１０６として用いた上で、＃０〜＃７８の７９組のＯＳＣ４０１を使用する。そして、＃０〜＃７８の各ＯＳＣ４０１が読出しを行う波形データとして、１つの波形データ３０４ではなく、波形データ３０４から個別にコピーされた＃０〜＃７８の各コピー波形データ３０５をＲＡＭ１０３に記憶させて用いる。＃０〜＃７８の各ＯＳＣ４０１は、もともと同一の波形データ３０４からコピーされた＃０〜＃７８の各コピー波形データ３０５から位相（読出し開始アドレス）を合わせて常に読出しを行って、＃０〜＃７８の各波形データを生成している。この上で、各音高に対応する鍵盤１０５上の鍵が押鍵されていないときは、ＣＰＵ１０１が、各ＯＳＣ４０１の後段に接続される各ＥＧ４０２におけるゲインを０にして、各波形データが出力されないように制御する。そして、鍵盤部１０４上の各音高に対応する鍵が押鍵されたタイミングで、該当するＥＧ４０２がそれに接続さるＯＳＣ４０１が出力している波形データへの振幅エンベロープの乗算を開始する。このような処理により、各ＥＧ４０２が発音出力した各波形データをＭＩＸＥＲ４０３で混合して得られる楽音波形デ−タ４０４では、各音高ごとの各波形データの位相が常に揃った状態となる。従って、押鍵タイミング次第で、既に発音されている他の波形データとの位相関係が変わり、出力される楽音波形デ−タ４０４の音量が大きくなったり小さくなったりしてしまうという課題を克服することが可能となる。これと同時に、現在実現されている技術のもとでは、波形データ３０４からコピーされた例えば７９組のコピー波形データ３０５をＲＡＭ１０３に記憶させ、これらに対して音源部１０６が搭載する７９組のＯＳＣ４０１が各コピー波形データ３０５に対して並列読出しを行うという構成は、十分に実用的である。なお、７９組のコピー波形データ３０５は、図１のＲＡＭ１０３にではなく、音源部１０６のＬＳＩが内蔵する波形メモリに記憶されてもよい。
【００２５】
図５は、図１、図２に示されるドローバー部１０５でのスライドボリューム２０１（ドローバー）の操作に基づいて図１のＣＰＵ１０１が実行する波形データ更新機能の説明図である。この機能は、ＣＰＵ１０１がドローバー部１０５が操作されたことを検知することにより実行する後述するドローバー処理（後述する図６のステップＳ６０２）内の波形データ更新処理（後述する図７のフローチャートの破線枠Ａの処理群、および図８のフローチャート）として実現される。
【００２６】
図３の説明で前述したように、ＣＰＵ１０１は、図１のドローバー部１０５が操作されたことを検知すると、波形データ合成機能によりまず波形データ３０４を生成してＲＡＭ１０３に記憶する。続いて、ＣＰＵ１０１は、ＲＡＭ１０３に記憶された波形データ３０４をコピーして、＃０〜＃７８の７９組のコピー波形データ３０５をＲＡＭ１０３上に生成する。
【００２７】
ここで、ドローバー操作により変更された波形データ３０４が任意の＃ｉ（０≦ｉ≦７８）番目のコピー波形データ３０５（＃ｉ）にコピーされるとき、音源部１０６内の対応するＥＧ４０２（＃ｉ）が波形データを発音出力していない場合には、出力される楽音波形データ４０４に影響はないため、波形データ３０４をコピー波形データ３０５（＃ｉ）としてそのままコピーすればよい。
【００２８】
一方、変更された波形データ３０４がコピー波形データ３０５（＃ｉ）にコピーされるときに、音源部１０６内の対応するＥＧ４０２（＃ｉ）が波形データを発音出力している場合には、図５（ａ）に示されるように、ＯＳＣ４０１（＃ｉ）がコピー波形データ３０５（＃ｉ）に対して読出しを行っている現在アドレス５０１付近の波形サンプルデータが変更された波形データ３０４によって置き換えられてしまうと、変更前と変更後とでサンプル値に大きな差分が発生する可能性がある。この場合には、ＯＳＣ４０１（＃１）が生成する波形データに、その差分を起因とするノイズが重畳されてしまい、ＥＧ４０２からＭＩＸＥＲ４０３を介して出力される楽音波形データ４０４にも、そのノイズが乗ってしまう。なお、現在アドレス５０１に対して、ＯＳＣ４０１（＃ｉ）が読出しを行う波形サンプルデータのアドレス範囲は、その＃ｉ番目の音高（＃ｉ）の値によって変化する。すなわち、音高（＃ｉ）によっては、ＯＳＣ４０１（＃ｉ）は、現在アドレス５０１の前後数サンプル分の波形サンプルデータを読み出し、それらに対して補間処理を実行することにより、波形データを生成する場合がある。このため、そのようなアドレス範囲の波形サンプルデータについても、変更された波形データ３０４の対応する波形サンプルデータによって置き換えられてしまうと、変更前と変更後とでサンプル値に大きな差分が発生してノイズとなる可能性がある。
【００２９】
そこで、本実施形態では、変更された波形データ３０４がコピー波形データ３０５（＃ｉ）にコピーされるときに、音源部１０６内の対応するＥＧ４０２（＃ｉ）が波形データを発音出力している場合には、ＣＰＵ１０１は、以下のような処理を実行する。
【００３０】
ＣＰＵ１０１はまず、音源部１０６から、ＯＳＣ４０１（＃ｉ）が現在アドレス５０１を中心として現在読出しを行っている読出し対象のアドレス範囲を取得する。ＣＰＵ１０１は、ＯＳＣ４０１（＃ｉ）における読出し対象のアドレス範囲の先頭アドレスおよび終了アドレスをそれぞれ、ＲＡＭ１０３上の配列変数データｒｅａｄ＿ｓｔａｒｔ［ｉ］およびｒｅａｄ＿ｅｎｄ［ｉ］に格納する。なお、以下の説明において、ｒｅａｄ＿ｓｔａｒｔ［ｉ］およびｒｅａｄ＿ｅｎｄ［ｉ］をそれぞれ、「読出し対象の先頭アドレス」および「読出し対象の終了アドレス」と呼ぶことがある。
【００３１】
次に、ＣＰＵ１０１は、図５（ｂ）の５０２の破線波形部分として示される、コピー波形データ３０５（＃ｉ）上の読出し対象のアドレス範囲ｒｅａｄ＿ｓｔａｒｔ［ｉ］〜ｒｅａｄ＿ｅｎｄ［ｉ］の波形サンプルデータについては、現在のサンプリングタイミングでは、ＯＳＣ４０１（＃ｉ）およびＥＧ４０２（＃ｉ）が波形データを発音出力するための補間処理に使用する可能性がある。このため、ＣＰＵ１０１は、この範囲の波形サンプルデータについては、変更後の波形データ３０４による書換え（置換え）は行わない。
【００３２】
一方、コピー波形データ３０５（＃ｉ）上の、読出し対象のアドレス範囲ｒｅａｄ＿ｓｔａｒｔ［ｉ］〜ｒｅａｄ＿ｅｎｄ［ｉ］以外のアドレス範囲、すなわち図５（ｂ）の波形部分５０３として示される、波形開始アドレスｓｔａｒｔ［ｉ］から読出し対象の先頭アドレスｒｅａｄ＿ｓｔａｒｔ［ｉ］の１アドレス手前までと、読出し対象の終了アドレスｒｅａｄ＿ｅｎｄ［ｉ］の１アドレス後から波形末尾アドレスｅｎｄ［ｉ］までのアドレス範囲の波形サンプルデータについては、現在のサンプリングタイミングでは、ＯＳＣ４０１（＃ｉ）およびＥＧ４０２（＃ｉ）が波形データを発音出力するための補間処理に使用する可能性はない。このため、ＣＰＵ１０１は、この範囲の波形サンプルデータを、変更後の波形データ３０４の対応する波形サンプルデータで書き換える（置き換える）。
【００３３】
さらに、ＣＰＵ１０１は、上記部分的な書換え（置換え）を行った後、サンプリングタイミングごとに、ＯＳＣ４０１（＃ｉ）がコピー波形データ３０５（＃ｉ）に対して指定する読出し対象のアドレス範囲が、ＲＡＭ１０３に記憶されている読出し対象のアドレス範囲ｒｅａｄ＿ｓｔａｒｔ［ｉ］〜ｒｅａｄ＿ｅｎｄ［ｉ］外となったか否かを監視する。そして、ＣＰＵ１０１は、この監視結果がＹＥＳとなって、コピー波形データ３０５（＃ｉ）上の読出し対象のアドレス範囲ｒｅａｄ＿ｓｔａｒｔ［ｉ］〜ｒｅａｄ＿ｅｎｄ［ｉ］の波形サンプルデータの読出しが完了したサンプリングタイミングで、図５（ｂ）の破線波形部分５０２として示される、コピー波形データ３０５（＃ｉ）上の読出し対象のアドレス範囲ｒｅａｄ＿ｓｔａｒｔ［ｉ］〜ｒｅａｄ＿ｅｎｄ［ｉ］の波形サンプルデータを、変更後の波形データ３０４上の対応する波形サンプルデータによって書き換える（置き換える）。
【００３４】
ＣＰＵ１０１は、以上の波形データ更新機能の処理を、図１のドローバー部１０５が操作されたことを検知して波形データ３０４を生成した後に、＃０〜＃７８の７９組のコピー波形データ３０５に対してそれぞれ実行する。このように、本実施形態では、波形データ３０４をコピーして＃０〜＃７８の７９組のコピー波形データ３０５を生成するときに、ＥＧ４０２（＃ｉ）が発音出力中である場合には、それぞれのコピー波形データ３０５（＃ｉ）（０≦ｉ≦７８）に対して、ＯＳＣ４０１（＃ｉ）が読出しを行っているアドレス範囲を避けながら、波形サンプルデータの書換え（置換え）を行うことにより、ノイズの発生を抑制することが可能となる。
【００３５】
図６は、図１および図２に示されるハードウェア構成例を有する電子楽器１００においてＣＰＵ１０１が実行する、全体制御処理の例を示すフローチャートである。これは、ＣＰＵ１０１が、ＲＯＭ１０２に記憶された制御処理プログラムを実行する処理である。
【００３６】
電子楽器１００の電源スイッチが投入されると、ＣＰＵ１０１は、図６のフローチャートで例示される制御処理を開始し、まず、ＲＡＭ１０３の内容を初期化し（ステップＳ６０１）、その後、ステップＳ６０２からＳ６０４までの一連の処理を繰り返し実行する。
【００３７】
上記繰返し処理において、ＣＰＵ１０１はまず、ドローバー処理を実行する（ステップＳ６０２）。ドローバー処理では、図１のドローバー部１０５の操作が検知された場合に、図３の波形データ３０４を生成し、その波形データ３０４をコピーして図３の＃０〜＃７８の７９組のコピー波形データ３０５を生成、更新する処理が実行される。
【００３８】
図７は、図６のステップＳ６０２のドローバー処理の詳細例を示すフローチャートである。
【００３９】
まず、ＣＰＵ１０１は、図１のドローバー部１０５で操作が行われたか否かを判定する（ステップＳ７０１）。
【００４０】
ドローバー部１０５で操作が行われていない場合（ステップＳ７０１の判定がＮＯの場合）には、ＣＰＵ１０１は、そのまま図７のフローチャートで示される図６のステップＳ６０２のドローバー処理を終了する。
【００４１】
ドローバー部１０５で操作が行われた場合（ステップＳ７０１の判定がＹＥＳの場合）には、ＣＰＵ１０１は、波形データ合成処理を実行する（ステップＳ７０２）。ここでは、ＣＰＵ１０１は、図３の説明で前述した波形データ３０４を生成する処理を実行し、生成した波形データ３０４をＲＡＭ１０３に記憶する。
【００４２】
次に、ＣＰＵ１０１は、破線枠Ａで示されるステップＳ７０３からＳ７１０までの一連の処理で示される波形データ更新処理を実行する。ここでは、ＣＰＵ１０１は、図５を用いて前述した波形データ３０４から＃０〜＃７８のコピー波形データ３０５を生成、更新する処理を実行する。
【００４３】
波形データ更新処理において、ＣＰＵ１０１は、ステップＳ７０３で７９組の各コピー波形データ３０５を選択するためのＲＡＭ１０３上の変数ｉの値を０に初期化した後、ステップＳ７０９で変数ｉの値を＋１ずつインクリメントしながら、ステップＳ７１０で変数ｉの値が７９に達したと判定されるまで、ステップＳ７０４からステップＳ７０８までの一連の処理を繰り返し実行する。これにより、０≦ｉ≦７８として＃ｉのコピー波形データ３０５に対する生成、更新処理が繰り返し実行される。
【００４４】
ステップＳ７０４からステップＳ７０８までの一連の処理において、ＣＰＵ１０１はまず、音源部１０６にアクセスすることにより、変数ｉの値が示す＃ｉ番目のＥＧ４０２（＃ｉ）が発音中か否か、すなわち波形データを出力中か否かを判定する（ステップＳ７０４）。
【００４５】
ＥＧ４０２（＃ｉ）が発音中ではない場合（ステップＳ７０４の判定がＮＯの場合）には、ＣＰＵ１０１は、ステップＳ７０２でＲＡＭ１０３上に生成した波形データ３０４を、＃ｉ番目のコピー波形データ３０５（＃ｉ）としてコピーしてＲＡＭ１０３に記憶させる（ステップＳ７０８）。その後、ＣＰＵ１０１は、ステップＳ７０９の処理に移行して、次の＃ｉ番目の処理に移る。
【００４６】
ＥＧ４０２（＃ｉ）が発音中である場合（ステップＳ７０４の判定がＹＥＳの場合）には、ＣＰＵ１０１はまず、図５（ｂ）の説明で前述したように、音源部１０６から、変数ｉの値が示す＃ｉ番目のＯＳＣ４０１（＃ｉ）が現在アドレス５０１を中心として現在読出しを行っている読出し対象のアドレス範囲の先頭アドレスおよび終了アドレスを取得し、それぞれ変数ｉの値を要素番号とするＲＡＭ１０３上の配列変数データｒｅａｄ＿ｓｔａｒｔ［ｉ］およびｒｅａｄ＿ｅｎｄ［ｉ］に格納する（ステップＳ７０５）。
【００４７】
次に、ＣＰＵ１０１は、図５（ｂ）の説明で前述したように、コピー波形データ３０５（＃ｉ）上の、読出し対象のアドレス範囲ｒｅａｄ＿ｓｔａｒｔ［ｉ］〜ｒｅａｄ＿ｅｎｄ［ｉ］以外のアドレス範囲、すなわち図５（ｂ）の波形部分５０３として示される、波形開始アドレスｓｔａｒｔ［ｉ］から読出し対象の先頭アドレスｒｅａｄ＿ｓｔａｒｔ［ｉ］の１アドレス手前までと、読出し対象の終了アドレスｒｅａｄ＿ｅｎｄ［ｉ］の１アドレス後から波形末尾アドレスｅｎｄ［ｉ］までのアドレス範囲の波形サンプルデータを、ステップＳ７０２でＲＡＭ１０３上に生成された変更後の波形データ３０４の対応する波形サンプルデータで書き換える（ステップＳ７０６）。
【００４８】
次に、ＣＰＵ１０１は、＃ｉ番目のコピー波形データ３０５（＃ｉ）に対するサンプリング割込み設定を指示するための変数ｉの値を要素番号とするＲＡＭ１０３上の配列変数データｉｎｔ［ｉ］に、割込みを有効化する値「１」を格納する（ステップＳ７０７）。この処理は、＃ｉのコピー波形データ３０５について、図５（ｂ）の説明で前述した監視処理を有効にする処理である。
【００４９】
その後、ＣＰＵ１０１は、変数ｉの値を＋１インクリメントし（ステップＳ７０９）、さらに変数ｉの値が７９に等しくなったか否かを判定し（ステップＳ７１０）、ｉ＜７９（ステップＳ７１０の判定がＮＯ）であれば、ＣＰＵ１０１は、ステップＳ７０４の処理に戻って、次の＃ｉ番目のコピー波形データ３０５に対して、上述した更新処理を実行する。
【００５０】
ＣＰＵ１０１は、＃０〜＃７８までの７９組の全てのコピー波形データ３０５に対する更新処理を終了し、ステップＳ７１０の判定がＹＥＳになると、図７のフローチャートで示される図６のステップＳ６０２のドローバー処理を終了する。
【００５１】
図８は、サンプリングタイミング毎の割込み処理によってＣＰＵ１０１が実行する、サンプリング割込み処理の詳細例を示すフローチャートである。この処理は、サンプリングタイミング毎のタイマ割込みに基づいて、ＣＰＵ１０１が、ＲＯＭ１０２に記憶されているサンプリング割込み処理プログラムを実行する処理である。この処理は、図５（ｂ）において、現在アドレス５０１のサンプリングタイミング以後、各サンプリングタイミングごとに、図５（ｂ）の説明で前述した監視動作を実行するための処理である。
【００５２】
サンプリング割込み処理において、ＣＰＵ１０１は、ステップＳ８０１で７９組の各コピー波形データ３０５を選択するためのＲＡＭ１０３上の変数ｉの値を０に初期化した後、ステップＳ８０７で変数ｉの値を＋１ずつインクリメントしながら、ステップＳ８０８で変数ｉの値が７９に達したと判定されるまで、ステップＳ８０２からステップＳ８０６までの一連の処理を繰り返し実行する。これにより、０≦ｉ≦７８として＃ｉのコピー波形データ３０５に対する監視処理が繰り返し実行される。なお、ここで使用される変数ｉは、図７のフローチャートで例示されるドローバー処理で使用される変数ｉとは競合しないで制御可能なローカル変数であるとする。
【００５３】
ステップＳ８０２からステップＳ８０６までの一連の処理において、ＣＰＵ１０１はまず、サンプリング割込み設定を指示するための変数ｉの値を要素番号とするＲＡＭ１０３上の配列変数データｉｎｔ［ｉ］に割込みを有効化する値「１」が格納されているか否かを判定する（ステップＳ８０２）。
【００５４】
ｉｎｔ［ｉ］に割込みを有効化する値「１」が格納されていない（ステップＳ８０２の判定がＮＯ）の場合には、変数ｉが示す＃ｉのコピー波形データ３０５については図７のステップＳ７０８によって更新済みであるため、ＣＰＵ１０１は、ステップＳ８０７の処理に移行して、次の＃ｉ番目のコピー波形データ３０５に対する監視処理に移行する。
【００５５】
ｉｎｔ［ｉ］に割込みを有効化する値「１」が格納されている場合（ステップＳ８０２の判定がＹＥＳの場合）には、ＣＰＵ１０１は、変数ｉの値が示す＃ｉ番目のＯＳＣ４０１（＃ｉ）が＃ｉ番目のコピー波形データ３０５（＃ｉ）に対して指定する読出し対象のアドレス範囲が、図７のステップＳ７０５でＲＡＭ１０３に記憶されている読出し対象のアドレス範囲ｒｅａｄ＿ｓｔａｒｔ［ｉ］〜ｒｅａｄ＿ｅｎｄ［ｉ］の範囲外となったか否かを判定する（ステップＳ８０３）。
【００５６】
ステップＳ８０３の判定がＮＯならば、ＯＳＣ４０１（＃ｉ）がコピー波形データ３０５（＃ｉ）に対して指定する読出し対象のアドレス範囲がまだ読出し対象のアドレス範囲ｒｅａｄ＿ｓｔａｒｔ［ｉ］〜ｒｅａｄ＿ｅｎｄ［ｉ］の範囲内にあるため、ＣＰＵ１０１は、現在のサンプリングタイミングでは、＃ｉ番目のコピー波形データ３０５（＃ｉ）上の上記読出し対象のアドレス範囲の波形サンプルデータの書換えは行わず、ステップＳ８０７の処理に移行して、次の＃ｉ番目のコピー波形データ３０５に対する監視処理に移行する。
【００５７】
ステップＳ８０３の判定がＹＥＳならば、コピー波形データ３０５（＃ｉ）上の読出し対象のアドレス範囲ｒｅａｄ＿ｓｔａｒｔ［ｉ］〜ｒｅａｄ＿ｅｎｄ［ｉ］の波形サンプルデータの読出しが完了したため、ＣＰＵ１０１は、コピー波形データ３０５（＃ｉ）上の読出し対象のアドレス範囲ｒｅａｄ＿ｓｔａｒｔ［ｉ］〜ｒｅａｄ＿ｅｎｄ［ｉ］の波形サンプルデータを、ステップＳ７０２でＲＡＭ１０３上に生成された変更後の波形データ３０４上の対応する波形サンプルデータによって書き換える（ステップＳ８０４）。
【００５８】
その後、ＣＰＵ１０１は、ＲＡＭ１０３上の読出し対象の先頭アドレスが格納されている配列変数データｒｅａｄ＿ｓｔａｒｔ［ｉ］と、終了アドレスが格納されている配列変数データｒｅａｄ＿ｅｎｄ［ｉ］を初期化する。
【００５９】
また、コピー波形データ３０５（＃ｉ）の全ての波形サンプルデータの更新が完了しこれ以上監視を行う必要はなくなったため、ＣＰＵ１０１は、コピー波形データ３０５（＃ｉ）に対するサンプリング割込み設定を指示するための変数ｉの値を要素番号とするＲＡＭ１０３上の配列変数データｉｎｔ［ｉ］に、割込みを無効化する値「０」を格納する（ステップＳ８０６）。
【００６０】
その後、ＣＰＵ１０１は、変数ｉの値を＋１インクリメントし（ステップＳ８０７）、さらに変数ｉの値が７９に等しくなったか否かを判定し（ステップＳ８０８）、ｉ＜７９（ステップＳ８０８の判定がＮＯ）であれば、ＣＰＵ１０１は、ステップＳ８０２の処理に戻って、次の＃ｉ番目のコピー波形データ３０５に対して、上述した監視処理を実行する。
【００６１】
ＣＰＵ１０１は、＃０〜＃７８までの７９組の全てのコピー波形データ３０５に対する監視処理を終了し、ステップＳ８０８の判定がＹＥＳになると、図８のフローチャートで示される今回のサンプリングタイミングにおけるサンプリング割込み処理を終了する。
【００６２】
以上の実施形態に関して、更に以下の付記を開示する。
（付記１）
演奏指示により音高が指定されたかにかかわらず、複数種の音高夫々に基づいて波形データを読み出す波形データ読出し部と、
前記演奏指示によりいずれかの音高が指定されたときに、当該指定された音高に対応して前記波形データ読出し部から読み出された前記波形データを出力させるように制御する出力制御部と、
を備える楽音発生装置。
（付記２）
前記波形データを生成するドローバー部をさらに備え、
前記ドローバー部は、基本波形データ及び当該基本波形の倍音波形データ夫々を生成する複数の波形データ生成部と、前記複数の波形データ生成部から生成された波形データ夫々に対して、ドローバー操作子によって指定された係数を乗算して出力する複数の乗算器と、前記複数の乗算器夫々の出力を混合して波形データとして出力する混合器と、を備える、
ことを特徴とする付記１に記載の楽音発生装置。
（付記３）
前記出力制御部は、前記いずれかの音高が指定されるとともにベロシティが指定された場合、当該指定されたベロシティに基づいて前記波形データの出力を制御することを特徴とする付記１または２に記載の楽音発生装置。
（付記４）
付記１ないし３のいずれかに記載の楽音発生装置と、
前記複数の音高のいずれかを指定する複数の操作子と、
前記楽音発生装置から出力される波形データに対応する楽音を生成するサウンドシステムと、
を備えることを特徴とする電子楽器。
（付記５）
波形データを読み出す波形データ読出し部と、前記波形データを出力させるように制御する出力制御部と、を備える楽音発生装置に用いられる楽音発生方法であって、前記楽音発生装置は、
演奏指示により音高が指定されたかにかかわらず、複数種の音高夫々に基づいて波形データを読み出し、
前記演奏指示によりいずれかの音高が指定されたときに、当該指定された音高に対応して前記読み出された波形データを出力させるように制御する、楽音発生方法。
（付記６）
波形データを読み出す波形データ読出し部と、前記波形データを出力させるように制御する出力制御部と、を備える楽音発生装置に用いられるコンピュータに、
演奏指示により音高が指定されたかにかかわらず、複数種の音高夫々に基づいて波形データを読み出すステップと、
前記演奏指示によりいずれかの音高が指定されたときに、当該指定された音高に対応して前記読み出された波形データを出力させるように制御するステップと、
をコンピュータに実行させるためのプログラム。
【符号の説明】
【００６３】
１０１  ＣＰＵ
１０２  ＲＯＭ
１０３  ＲＡＭ
１０４  鍵盤部
１０５  ドローバー部
１０６  音源部
１０７  サウンドシステム
２０１  スライドボリューム
２０２  Ａ／Ｄ変換器
３０１  正弦波生成処理
３０２  乗算処理
３０３  加算処理
３０４  波形データ
３０５  コピー波形データ
４０１  ＯＳＣ（読み出し部）
４０２  ＥＧ（出力制御部）
４０３  ＭＩＸＥＲ（出力部）
４０４  楽音波形データ
５０１  現在アドレス
５０２  コピー波形データ上の読出し対象のアドレス範囲の波形サンプルデータ
５０３  コピー波形データ上の読出し対象のアドレス範囲以外のアドレス範囲の波形サンプルデータ
【図１】
0006524742.tif 000002
【図２】
0006524742.tif 000003
【図３】
0006524742.tif 000004
【図４】
0006524742.tif 000005
【図５】
0006524742.tif 000006
【図６】
0006524742.tif 000007
【図７】
0006524742.tif 000008
【図８】
0006524742.tif 000009