JP4441928B2 - 音量制御装置および音量制御処理プログラム - Google Patents

音量制御装置および音量制御処理プログラム Download PDF

Info

Publication number
JP4441928B2
JP4441928B2 JP2004357819A JP2004357819A JP4441928B2 JP 4441928 B2 JP4441928 B2 JP 4441928B2 JP 2004357819 A JP2004357819 A JP 2004357819A JP 2004357819 A JP2004357819 A JP 2004357819A JP 4441928 B2 JP4441928 B2 JP 4441928B2
Authority
JP
Japan
Prior art keywords
volume
waveform
waveform data
bits
volume control
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.)
Active
Application number
JP2004357819A
Other languages
English (en)
Other versions
JP2006163230A (ja
Inventor
博毅 佐藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Casio Computer Co Ltd
Original Assignee
Casio Computer Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Casio Computer Co Ltd filed Critical Casio Computer Co Ltd
Priority to JP2004357819A priority Critical patent/JP4441928B2/ja
Publication of JP2006163230A publication Critical patent/JP2006163230A/ja
Application granted granted Critical
Publication of JP4441928B2 publication Critical patent/JP4441928B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Electrophonic Musical Instruments (AREA)

Description

本発明は、電子楽器の音源に用いて好適な音量制御装置および音量制御処理プログラムに関する。
昨今の電子楽器では、マルチティンバー化やイニシャル/アフタタッチ検出機構を備えた鍵盤の普及などにより、マスターボリュームやベロシティの他、アフタタッチ、音量エンベロープあるいは音色毎の音量を決めるパートボリューム等の複数の音量制御パラメータが存在しており、これら音量制御パラメータ同士を乗算することによって発生すべき楽音の音量を制御するようになっている。
この種の技術として、例えば特許文献1には、発生音量を調節するマスターボリュームの位置(又は値)に応じて、タッチ情報(ベロシティ)に対応して変化する楽音のダイナミックレンジあるいは周波数特性を制御し、弱いタッチで弾いても適切な音量や音色の楽音を発生可能にした電子楽器が開示されている。
特開平10−133662号公報
ところで、音量制御パラメータ毎にボリュームを備える構成にすると、必然的にボリュームの数が多くなり製品コスト高を招致する要因になる。そこで、廉価な電子楽器では、ボリュームの数を減らすべく、ボリューム1つで複数の音量制御パラメータを制御する必要が生じる。具体的には、7ビットの分解能を有する2つの音量制御パラメータで音量制御する場合、14ビット幅のダイナミックレンジが必要になるが、これを最小限の分解能(例えば7ビット)のボリューム1つで対応させようとすると、必要とされるダイナミックレンジが確保されず、必要十分な音量制御を行うことが出来ない、という問題が生じる。
そこで本発明は、このような事情に鑑みてなされたもので、必要とされるダイナミックレンジに満たないボリュームを用いた場合でも必要十分な音量制御を行うことが出来る音量制御装置および音量制御処理プログラムを提供することを目的としている。
上記目的を達成するため、請求項1に記載の発明では、ビット数が異なる波形データを複数種記憶する波形データ記憶手段と、予め設定されたビット数の音量制御値を発生する音量制御値発生手段と、前記波形データ記憶手段に記憶される複数種の波形データの内から前記音量制御値発生手段が発生する音量制御値に対応するビット数の波形データを選択する波形選択手段と、前記音量制御値を、前記波形選択手段により選択された波形データのビット数分に応じたビット数分ビットシフトするビットシフト手段と、前記音量制御値のビット数より少ない所定ビット数の乗算器から成り、前記ビットシフトされた音量制御値に含まれる前記所定ビット数分のデータに従って当該波形データの再生音量を制御する音量制御手段とを具備することを特徴とする。
請求項2に記載の発明では、ビット数が異なる波形データを複数種記憶する波形データ記憶手段と、ボリューム操作で設定される第1の音量値に、発音毎に変化する第2の音量値を乗算して予め設定されたビット数の音量制御値を発生する音量制御値発生手段と、前記波形データ記憶手段に記憶される複数種の波形データの内から前記音量制御値発生手段が発生する音量制御値に対応するビット数の波形データを選択する波形選択手段と、前記音量制御値を、前記波形選択手段により選択された波形データのビット数分に応じたビット数分ビットシフトするビットシフト手段と、前記音量制御値のビット数より少ない所定ビット数の乗算器から成り、前記ビットシフトされた音量制御値に含まれる前記所定ビット数分のデータに従って当該波形データの再生音量を制御する音量制御手段とを具備する。
上記請求項2に従属する請求項3に記載の発明では、入力波形信号をサンプリングし、ビット数が異なる複数種の波形データを生成するサンプリング手段をさらに備えることを特徴とする。
請求項に記載の発明では、予め設定されたビット数の音量制御値を発生する音量制御値発生処理と、最大波形振幅を表わすビット数が異なる波形データを複数種記憶する波形データ記憶手段に記憶される複数種の波形データの内から前記音量制御値発生処理にて生成される音量制御値に対応するビット数の波形データを選択する波形選択処理と、前記音量制御値を、前記選択された波形データに応じたビット数分ビットシフトするビットシフト処理と、前記音量制御値のビット数より少ない所定ビット数の乗算器に対して、前記ビットシフトされた音量制御値に含まれる前記所定ビット数分のデータに従って当該波形データの再生音量を制御させる音量制御処理と、をコンピュータで実行させることを特徴とする。
請求項に記載の発明では、ボリューム操作で設定される第1の音量値に、発音毎に変化する第2の音量値を乗算して予め設定されたビット数の音量制御値を発生する音量制御値発生処理と、ビット数が異なる波形データを複数種記憶する波形データ記憶手段に記憶される複数種の波形データの内から前記音量制御値発生処理にて生成される音量制御値に対応するビット数の波形データを選択する波形選択処理と、前記音量制御値を、前記選択された波形データのビット数分に応じたビット数分ビットシフトするビットシフト処理と、前記音量制御値のビット数より少ない所定ビット数の乗算器に対して、前記ビットシフトされた音量制御値に含まれる前記所定ビット数分のデータに従って当該波形データの再生音量を制御させる音量制御処理と、をコンピュータで実行させることを特徴とする。
上記請求項に従属する請求項に記載の発明では、入力波形信号をサンプリングし、ビット数が異なる複数種の波形データを生成するサンプリング処理をさらに備えることを特徴とする。
請求項1、に記載の発明によれば、ビット数が異なる複数種の波形データの内から予め設定されたビット数の音量制御値に対応するビット数の波形データを選択するとともに、選択された波形データのビット数分に応じたビット数分、音量制御値をビットシフトし、このビットシフトされた音量制御値に含まれる所定ビット数分のデータに従って当該波形データの再生音量を制御するので、必要とされるダイナミックレンジに満たないボリュームを用いた場合でも必要十分な音量制御を行うことができる。
請求項2、に記載の発明によれば、ビット数が異なる波形データを複数種記憶しておき、ボリューム操作で設定される第1の音量値に、発音毎に変化する第2の音量値を乗算して予め設定されたビット数の音量制御値を発生すると、上記複数種の波形データの内から音量制御値に対応するビット数の波形データを選択とともに、選択された波形データのビット数分に応じたビット数分、音量制御値をビットシフトし、このビットシフトされた音量制御値に含まれる所定ビット数分のデータに従って当該波形データの再生音量を制御するので、必要とされるダイナミックレンジに満たないボリュームを用いた場合でも必要十分な音量制御を行うことができる
以下、図面を参照して本発明の実施の形態について説明する。
[第1実施形態]
A.構成
(1)全体構成
図1は、第1実施形態による電子楽器の全体構成を示すブロック図である。この図において、鍵盤1は、押離鍵操作(演奏操作)に応じたキーオン/キーオフ信号およびキー番号、ベロシティ等からなる演奏データを発生する。スイッチ部2は、楽器パネルに配設される各種スイッチを備え、操作されるスイッチ種に応じたスイッチイベントを発生する。また、スイッチ部2は、後述するマスターボリュームMVolおよびパートボリュームPVol[0]〜[NP−1]を設定するボリューム操作子を備える。ROM3は、CPU6にロードされる各種制御プログラムを記憶する。ここで言う各種制御プログラムとは、後述のメインルーチン、発音処理およびサンプリング処理を含む。
RAM4は、ワークエリアおよびデータエリアを備える。RAM4のワークエリアには、CPU6の処理に用いられる各種レジスタ・フラグデータが一時記憶される。RAM4のデータエリアには、後述のサンプリングモード下でサンプリングされる波形データが記憶される。
ここで、図2を参照してRAM4のワークエリアに設けられる主要レジスタ構成について説明する。図2において、レジスタMVolには、発生楽音全体の音量を制御するマスターボリュームがストアされる。以後、レジスタMVolにストアされる値をマスターボリュームMVolと記す。マスターボリュームMVolは、音源7の乗算器72(後述する)に供給される。
レジスタPVol[0]〜[NP−1]には、それぞれ各演奏パート(音色)毎の音量を制御するパートボリュームがストアされる。以後、レジスタPVol[0]〜[NP−1]にそれぞれ格納される値をパートボリュームPVol[0]〜[NP−1]と記す。レジスタKNoteは、押鍵操作に応じて鍵盤1が発生するキー番号をストアする。以後、レジスタKNoteの値をキー番号KNoteと記す。レジスタKVelは、押鍵操作に応じて鍵盤1が発生するベロシティをストアする。以後、レジスタKVelの値をベロシティKVelと記す。
さて、再び図1を参照して第1実施形態の構成について説明を進める。図1において、MIDIインタフェース5は、CPU6の制御の下に、外部MIDI機器とMIDIデータを授受する。CPU6は、演奏モードおよびサンプリングモードを備える。演奏モードでは、鍵盤1の押離鍵操作に応じて発生する演奏データに応じた楽音パラメータ(発音/消音コマンド等)を発生して音源7に供給する。一方、サンプリングモードでは、マイク10およびA/D変換器11を介してサンプリングされる波形データをRAM4のデータエリアに格納する。
音源7は、周知の波形メモリ読み出し方式にて構成され、CPU6から供給される楽音パラメータに従って楽音波形を発生する。音源7の詳細な構成については追って述べる。D/A変換器8は、音源7が出力する楽音波形をアナログ波形信号に変換して出力する。サウンドシステム9は、D/A変換器8から供給されるアナログ波形信号から不要ノイズを除去する等のフィルタリングを施した後、これを増幅してスピーカから放音させる。表示部12は、LCDパネル等から構成され、CPU6から供給される表示制御信号に応じて楽器各部の設定状態(例えば、マスターボリュームMVolおよびパートボリュームPVol[0]〜[NP−1]の各設定値)や動作モード等を表示する。
(2)音源7の構成
次に、図3を参照して音源7の構成を説明する。音源7は、各演奏パート(音色)が割当てられるオシレータ70−1〜70−nと、これらオシレータ70−1〜70−nの各出力を混合するミキサ71と、ミキサ71の出力にマスターボリュームMVolを乗算して音量制御する乗算器72とを備える。
1つのオシレータ70は、波形発生器70a、エンベロープ発生器70bおよび乗算器70cから構成される。波形発生器70aは、図4に図示するように、波形レベル(波形振幅)が異なる4種類の波形データWave1〜4を記憶しておき、これらの内、CPU6が選択する種類の波形データWaveを、当該CPU6から供給される楽音パラメータ(発音/消音コマンド等)に従って読み出して波形出力する。
なお、後述するように、CPU6では、ベロシティKVelとパートボリュームPVolとを乗算してなる音量パラメータvolに応じて、波形データWave1〜4のいずれかを選択する。
具体的には、音量パラメータvolが「0x1000〜0x3FFF(16進表示)」の音量範囲に対応する場合に、16ビット長の波形データWave1が選択される。音量パラメータvolが「0x0400〜0x0FFF」の音量範囲に対応する場合に、14ビット長の波形データWave2が選択される。音量パラメータvolが「0x0100〜0x03FF」の音量範囲に対応する場合に、12ビット長の波形データWave3が選択される。音量パラメータvolが「0x0000〜0x00FF」の音量範囲に対応する場合に、10ビット長の波形データWave4が選択される。
エンベロープ発生器70bは、CPU6から供給されるEGパラメータに対応した形状のエンベロープ波形を生成し、それを波形発生器70aの波形出力に乗算して楽音波形を発生させる。乗算器70cは、エンベロープ発生器70bから出力される楽音波形に、音量パラメータvolを7ビット幅にスケール変換したものを乗算して音量制御する。
このように、1つのオシレータ70では、音量パラメータvolに対応して波形レベルが異なる波形データWaveを選択することで実質的に第1の音量制御が行われ、さらに音量パラメータvolに基づき第2の音量制御を行うので、必要とされるダイナミックレンジに満たないボリュームを用いた場合でも必要十分な音量制御を行うことが可能になっている。
ところで、本実施の形態では、説明の簡略化を図る為、音量パラメータvolに対応して波形振幅が異なる4種類の波形データWaveを選択する態様としているが、これに替えて、例えば波形振幅が異なる127種類(7ビット対応)の波形データWaveを波形発生器70aに記憶しておくようにしてもよい。
B.動作
次に、図5〜図8を参照して第1実施形態の動作について説明する。以下では、最初に概略動作としてメインルーチンの動作を説明した後、続いてメインルーチンからコールされる発音処理およびサンプリング処理の各動作について述べる。
(1)メインルーチンの動作
上記構成による電子楽器に電源が投入されると、CPU6は図5に示すメインルーチンを実行し、ステップSA1に処理を進め、RAM4のワークエリアに格納される各種レジスタやフラグをリセットしたり、初期値をセットするイニシャライズ処理を行う。また、このステップSA1では、音源7に対して各種レジスタやフラグ類を初期化するよう指示する。そして、イニシャライズ完了後、ステップSA2に処理を進め、スイッチ部2が発生するスイッチイベントに対応した処理や、ボリューム操作子の操作に対応してマスターボリュームMVolおよびパートボリュームPVol[0]〜[NP−1]を設定するスイッチ処理を実行する。
続いて、ステップSA3では、鍵盤1の押離鍵操作に応じて発生する演奏データに従って音源7に発音/消音等を指示するための楽音パラメータを発生させる鍵盤処理を実行する。また、この鍵盤処理では、押鍵時に発生する演奏データ中のキー番号とベロシティとを、それぞれレジスタKNote(キー番号KNote)とレジスタKVel(ベロシティKVel)とにストアする。
次いで、ステップSA4では、押鍵毎に生成されるベロシティKVelとユーザ設定されるパートボリュームPVol[0]とを乗算して得た音量パラメータvolの値に応じた波形データWave1〜4を選択し、選択した波形データWaveと、それに対応させて音量パラメータvolをスケール変換した音量制御値vol(レジスタvol)とを音源7に設定する発音処理を実行する。
なお、本実施形態では、鍵盤操作に基づく発音/消音等を、パート番号0のパートで行うものとする。
そして、ステップSA5では、後述するサンプリング処理などの、その他の処理を実行後、上述のステップSA2に処理を戻す。これ以後、パワーオフされるまでステップSA2〜SA5を繰り返す。
なお、ステップSA5におけるその他の処理では、後述するサンプリング処理の他、MIDI処理を実行する。MIDI処理では、MIDIインタフェース5を介して外部MIDI機器から入力されるMIDIデータからノートオンイベントに含まれるキー番号およびベロシティを抽出して、上述のレジスタKNote、レジスタKVelにストアすることによって自動演奏させる態様も可能である。
(2)発音処理の動作
次に、図6〜図7を参照して発音処理の動作を説明する。なお、以下では説明の簡略化を図る為、音源7がパート番号0のパートに関してはオシレータ70−1のみを使用するものとして、モノフォニック発音する場合に対応させた処理動作について述べる。
上述したメインルーチンのステップSA4(図5参照)を介して本処理が実行されると、図6に図示するステップSB1に進み、キー番号KNoteが「−1」でないか否か、つまり押鍵されたかどうかを判断する。押鍵されていない場合には、判断結果が「NO」になり、ステップSB9に進み、離鍵された鍵に対応する楽音の消音を音源7に指示する消音処理を実行した後、本処理を終える。
一方、押鍵時には、上記ステップSB1の判断結果が「YES」になり、ステップSB2に進む。ステップSB2では、ベロシティKVelとパートボリュームPVol[0]とを乗算して音量パラメータvolを発生する。ここで、ベロシティKVelとパートボリュームPVol[0]とは、各々7ビット長のデータなので、音量パラメータvolは14ビット長のデータとなる。
続いて、ステップSB3〜SB7では、音量パラメータvolの値に応じた波形データWave1〜4を選択すると共に、選択した波形データWave1〜4に対応させて音量パラメータvolをビットシフトさせ、スケール変換した音量制御値vol(レジスタvol)を発生する。
すなわち、音量パラメータvolが「0x0FFF」より大きければ、ステップSB4に進み、波形データWave1を選択すべくレジスタWaveに波形番号「1」をセットすると共に、14ビット長の音量パラメータvolを7ビットシフトさせ、その上位7ビットを音量制御値volとしてレジスタvolにストアする。
音量パラメータvolが「0x0400〜0x0FFF」の範囲内であると、ステップSB5に進み、波形データWave2を選択すべくレジスタWaveに波形番号「2」をセットすると共に、14ビット長の音量パラメータvolを5ビットシフトさせ、その上位7ビットを音量制御値volとしてレジスタvolにストアする。
音量パラメータvolが「0x0100〜0x03FF」の範囲内であれば、ステップSB6に進み、波形データWave3を選択すべくレジスタWaveに波形番号「3」をセットすると共に、14ビット長の音量パラメータvolを3ビットシフトさせ、その上位7ビットを音量制御値volとしてレジスタvolにストアする。
音量パラメータvolが「0x00FF」以下であると、ステップSB7に進み、波形データWave4を選択すべくレジスタWaveに波形番号「4」をセットすると共に、14ビット長の音量パラメータvolを1ビットシフトさせ、その上位7ビットを音量制御値volとしてレジスタvolにストアする。
これにより、図7に図示するように、選択した波形データWave1〜4に対応させて音量パラメータvolをスケール変換した音量制御値vol(レジスタvol)が得られる。
そして、ステップSB8では、音源7のオシレータ70−1を確保し、当該オシレータ70−1が備える乗算器70cにレジスタvolを乗算係数としてセットする。さらに、レジスタWaveに格納される波形番号で指定される波形データの、キー番号KNoteに対応した読み出し速度での読み出しを音源7に指示した後、キー番号KNoteを「−1」にセットする。
これにより、音源7では、CPU6が指定する波形データを、押鍵された鍵のキー番号KNoteに対応した読み出し速度で再生し、再生した波形データWaveをレジスタvolの値に応じて音量制御する。この後、CPU6は、ステップSB9に進み、離鍵された鍵の楽音の消音を指示する消音処理を行ってから本処理を終える。
このように、発音処理では、押鍵毎にベロシティKVelとユーザ設定されるパートボリュームPVol[0]との乗算で得る音量パラメータvolの値に応じて、4種類の波形データWave1〜4の内のいずれかを選択し、選択した波形データWaveと、それに対応させて音量パラメータvolをスケール変換した音量制御値vol(レジスタvol)とを音源7に設定するようになっている。
(3)サンプリング処理の動作
次に、図8を参照してサンプリング処理の動作を説明する。CPU6の動作モードがサンプリングモードに設定されている場合、図5に図示したその他の処理(ステップSA5)を介して本処理が実行され、図8に図示するステップSC1に進む。ステップSC1では、スイッチ部2に設けられ、波形番号1〜4に対応した4つの指定波形サンプリングスイッチのいずれかのオン操作の有無を判断する。オン操作されなければ、判断結果は「NO」となり、何もせずに本処理を完了させるが、いずれかがオン操作されると、判断結果が「YES」になり、ステップSC2に進む。
ステップSC2では、オン操作された指定波形サンプリングスイッチで指定される波形番号をレジスタWaveにストアする一方、レジスタadrに書き込みアドレスをストアする。次いで、ステップSC3では、サンプリングタイミングになるまで待機し、サンプリングタイミングになる毎に、ここでの判断結果が「YES」になり、ステップSC4に進む。ステップSC4では、書き込みアドレスadrに従ってRAM4のデータエリアにサンプリングした波形データを書き込むと共に、書き込みアドレスadrを歩進させる。
次に、ステップSC5では、停止スイッチがオン操作されるか又はメモリフル状態のいずかに該当するかどうかを判断する。いずれにも該当しない場合には、判断結果が「NO」となり、ステップSC3に処理を戻す。以後、停止スイッチがオン操作されるか又はメモリフル状態になるまでステップSC3〜SC5を繰り返し、マイク10およびA/D変換器にて所定周期毎にサンプリングされる波形データを順次RAM4のデータエリアにストアして行く。
そして、停止スイッチがオン操作されるか又はメモリフル状態になると、上記ステップSC5の判断結果が「YES」になり、ステップSC6に進む。ステップSC6では、RAM4のデータエリアに格納したサンプリングデータ(一連の波形データ)の内から振幅最大値を検出してレジスタmaxにストアする。次いで、ステップSC7〜SC11では、レジスタWaveに格納される波形番号に応じてスケール係数Aを算出する。
すなわち、レジスタWaveに格納される波形番号が「1」の場合には、ステップSC8に進み、16ビットの波形レベル「0xFFFF」を振幅最大値maxで除算してスケール係数Aを算出する。
レジスタWaveに格納される波形番号が「2」の場合には、ステップSC9に進み、14ビットの波形レベル「0x3FFF」を振幅最大値maxで除算してスケール係数Aを算出する。
レジスタWaveに格納される波形番号が「3」の場合には、ステップSC10に進み、12ビットの波形レベル「0x0FFF」を振幅最大値maxで除算してスケール係数Aを算出する。
レジスタWaveに格納される波形番号が「4」の場合には、ステップSC11に進み、10ビットの波形レベル「0x03FF」を振幅最大値maxで除算してスケール係数Aを算出する。
そして、ステップSC12では、算出したスケール係数Aを、RAM4のデータエリアに格納したサンプリングデータ(波形データ)に乗算し、波形番号Waveに対応したスケーリングを施して本処理を完了させる。
このように、波形番号Waveに対応してスケーリングされた波形データを、音源7を構成するオシレータ70−1〜70−nの各波形発生器70aに登録すれば、前述の発音処理(図6参照)に用いることが可能になる。
以上説明したように、第1実施形態では、波形レベル(波形振幅)が異なる4種類の波形データWaveを、音量パラメータvolの変化幅に対応付けて予め設けておき、押鍵毎にベロシティKVelとユーザ設定されるパートボリュームPVol[0]との乗算で求まる音量パラメータvolの値に応じて、波形データWave1〜4のいずれかを選択し、選択した波形データWaveと、それに対応する音量パラメータvolをスケール変換した音量制御値vol(レジスタvol)とを音源7に設定して音量制御するので、必要とされるダイナミックレンジに満たないボリュームを用いた場合でも必要十分な音量制御を行うことが可能になっている。
[第2実施形態]
A.構成
(1)全体構成
図9は、第2実施形態による電子楽器の全体構成を示すブロック図である。この図において、管体部13は、管楽器を模した筺体に息圧センサ13a(不図示)および音高指定用のキースイッチ13b(不図示)を備える。息圧センサ13aは、圧力センサ等から構成され、ユーザが吹奏する息圧を検出する。キースイッチ13bは、音高指定操作に応じたキー番号を発生する。スイッチ部2は、楽器パネルに配設される各種操作スイッチを備え、操作されるスイッチ種に応じたスイッチイベントを発生する。また、スイッチ部2は、後述するマスターボリュームMVolおよびパートボリュームPVol[0]〜[NP−1]を設定するボリューム操作子を備える。
ROM3は、CPU6にロードされる各種制御プログラムや音色パラメータデータを記憶する。ここで言う各種制御プログラムとは、後述のメインルーチン、ブレス処理、発音処理、ブレス発音開始処理、ブレス消音処理およびブレス音量変更処理を含む。また、ROM3に記憶される音色パラメータの構成については追って述べる。RAM4は、CPU6のワークエリアとして用いられ、各種レジスタ・フラグデータを一時記憶する。RAM4の主要なレジスタ構成については後述する。MIDIインタフェース5は、CPU6の制御の下に、外部MIDI機器とMIDIデータを授受する。CPU6は、息圧センサ13aの出力および音高指定操作されるキースイッチ13bが発生するキー番号に応じた楽音パラメータ(発音/消音コマンド等)を発生して音源7に供給する。
音源7は、周知の波形メモリ読み出し方式にて構成され、CPU6から供給される楽音パラメータに従って楽音波形を発生する。音源7の詳細な構成については追って述べる。D/A変換器8は、音源7が出力する楽音波形をアナログ波形信号に変換して出力する。サウンドシステム9は、D/A変換器8から供給されるアナログ波形信号から不要ノイズを除去する等のフィルタリングを施した後、これを増幅してスピーカから放音させる。表示部12は、LCDパネル等から構成され、CPU6から供給される表示制御信号に応じて楽器各部の設定状態(例えば、マスターボリュームMVolおよびパートボリュームPVol[0]〜[NP−1]の各設定値)や動作モード等を表示する。
(2)ROM3の構成
次に、図10を参照してROM3に記憶される音色パラメータの構成について説明する。ROM3には、N種の音色パラメータTPRM[0]〜[N−1]が記憶される。1つの音色パラメータTPRMは、NW種(本実施形態では4種類の波形データWave1〜4)の波形パラメータWPRM[0]〜[NW−1]を備える。
1つの波形パラメータWPRMは、波形番号WaveNum、波形最小音量WaveMin、波形最大音量WaveMax、ピーク音量WavePeak、通常読み出しアドレスAdrs[0]およびクロスフェード時読み出しアドレスAdrs[1]から構成される。なお、これら各パラメータデータが意図するところについては追って述べる。
(3)RAM4の構成
次に、図11を参照してRAM4の主要レジスタ構成について説明する。レジスタMVolには、発生楽音全体の音量を制御するマスターボリュームがストアされる。以後、レジスタMVolにストアされる値をマスターボリュームMVolと記す。マスターボリュームMVolは、音源7の乗算器702(後述する)に供給される。レジスタPVol[0]〜[NP−1]には、それぞれ各演奏パート(音色)毎の音量を制御するパートボリュームがストアされる。以後、レジスタPVol[0]〜[NP−1]にそれぞれ格納される値をパートボリュームPVol[0]〜[NP−1]と記す。
レジスタPTone[0]〜[NP−1]には、それぞれ各演奏パートにアサインされる音色を表す音色番号がストアされる。オシレータアサイン管理データOscStat[0]〜[NOSC−1]は、音源7が備える各オシレータ700−1〜700−nの使用状況を表す。値が「0」の場合に未使用を、「1」の場合に使用中を表す。ノート管理データNPRM[0]〜[NN−1]は、音源7のオシレータ700に割当てるノートを管理するデータである。1つのノート管理データNPRMは、ノート状態NoteStat、キー番号keyおよびオシレータ割当波形番号OscNum[0]〜[NW−1]から構成される。
ノート状態NoteStatは、「1」の場合に発音中を表し、「0」の場合に停止(消音中)を表す。キー番号keyは、ノートオンする楽音の音高を表す。オシレータ割当波形番号OscNum[0]〜[NW−1]は、波形振幅が異なるNW種(本実施形態では4種類の波形データWave1〜4)の各波形データが、どのオシレータに割当てられているかをオシレータ番号で表し、いずれのオシレータにも割当てられていない場合には「−1」となる。
イベントリクエストデータReqは、息圧変化に応じて発生するノートオン/ノートオフイベントを表すデータであり、イベントリクエストReqStat、キー番号ReqKey、波形読み出しアドレスReqAdrs、息圧ReqPressおよび波形状態WaveStat[0]〜[NW−1]から構成される。イベントリクエストReqStatは、「0」の場合にノートオン、「1」の場合にノートオフ、「2」の場合に音量変更、「−1」の場合に要求無し(イベント無し)をそれぞれ表す。
キー番号ReqKeyは、発音すべき楽音の音高を表す。波形読み出しアドレスReqAdrsは、「0」の場合に波形先頭のアタック部分からの通常波形読み出しを指定し、「1」の場合に持続波形領域からのクロスフェード波形読み出し(後述する)を指定する。息圧ReqPressは、息圧センサ13aにより検出される値を表す。波形状態WaveStat[0]〜[NW−1]は、波形振幅が異なるNW種(本実施形態では4種類の波形データWave1〜4)の各波形データの状態として、「0」の場合に発音不必要を、「1」の場合に発音必要を表す。レジスタPressは、息圧センサ13aが現在検出している息圧(現息圧)を保持する。レジスタPrevPressは、前回検出した息圧(前息圧)を保持する。
(4)音源7の構成
次に、図12を参照して第2実施形態による音源7の構成を説明する。音源7は、複数の演奏パート(音色)にアサインされるオシレータ700−1〜700−Nと、これらオシレータ700−1〜700−Nの各出力を混合するミキサ701と、ミキサ701の出力にマスターボリュームMVolを乗算して音量制御する乗算器702とを備える。
1つのオシレータ700は、波形発生器700aおよび乗算器700bから構成される。波形発生器700aは、第1実施形態と同様、図4に図示するように、波形レベルが異なる4種類の波形データWave1〜4を記憶しておき、これらの内、CPU6が選択指定する波形データWaveを、当該CPU6から供給される楽音パラメータ(発音/消音コマンド等)に従って読み出して波形出力する。後述するように、CPU6では、息圧PressとパートボリュームPVolとを乗算してなる音量パラメータvolに応じて、波形データWave1〜4のいずれかを選択する。
具体的には、音量パラメータvolが「0x1000〜0x3FFF(16進表示)」の音量範囲に対応する場合に、16ビット長の波形データWave1が選択される。音量パラメータvolが「0x0400〜0x0FFF」の音量範囲に対応する場合に、14ビット長の波形データWave2が選択される。音量パラメータvolが「0x0100〜0x03FF」の音量範囲に対応する場合に、12ビット長の波形データWave3が選択される。音量パラメータvolが「0x0000〜0x00FF」の音量範囲に対応する場合に、10ビット長の波形データWave4が選択される。
また、波形発生器700aでは、音量パラメータvolに応じて出力する波形データを切替える際、CPU6の指示に従い、切替え前の波形データと切替え後の波形データとをクロスフェードして出力する。乗算器700bは、波形発生器700aが出力する波形データWaveに音量パラメータvolを乗算して出力する。
B.動作
次に、図13〜図19を参照して第2実施形態の動作について説明する。以下では、最初に概略動作としてメインルーチンの動作を説明した後、続いてメインルーチンからコールされる発音処理およびサンプリング処理の各動作について述べる。
(1)メインルーチンの動作
上記構成による電子楽器に電源が投入されると、CPU6は図13に示すメインルーチンを実行し、ステップSD1に処理を進め、RAM4のワークエリアに格納される各種レジスタやフラグをリセットしたり、初期値をセットするイニシャライズ処理を行う。また、このステップSD1では、音源7に対して各種レジスタやフラグ類を初期化するよう指示する。
そして、イニシャライズ完了後、ステップSD2に処理を進め、スイッチ部2が発生するスイッチイベントに対応した処理や、ボリューム操作子の操作に対応したマスターボリュームMVol、パートボリュームPVol[0]〜[NP−1]およびレジスタPTone[0]〜[NP−1]を設定するスイッチ処理を実行する。なお、パートボリュームPVol[0]〜[NP−1]には各演奏パートの音量、レジスタPTone[0]〜[NP−1]には各演奏パートの音色(音色番号)がストアされる。
続いて、ステップSD3では、ブレス処理を実行する。ブレス処理では、後述するように、現息圧Pressを検出し、検出した現息圧Pressと前息圧PrevPressとを比較してノートオンイベント、音量変更イベントおよびノートオフイベントのいずれであるかを判定し、判定したイベントに対応した処理データを生成する一方、現息圧PressにパートボリュームPVol[0]を乗算して生成される音量パラメータvolに対応する波形データWaveを選択する。
なお、本実施形態では、ブレス検出に基づく発音/消音等を、パート番号0のパートで行うものとする。
次いで、ステップSD4では、イベントリクエストReqStatの値に応じて、「ブレス発音開始処理」、「ブレス消音処理」および「ブレス音量変更処理」のいずれかを実行する発音処理を実行する。
ブレス発音開始処理では、後述するように、停止中かつ未使用のオシレータ700に発音を割当て、音量パラメータvolに対応するオシレータボリュームOSC volumeを、発音割当てしたオシレータ700の乗算器700bに与えると共に、音量パラメータvolに対応して選択される波形データWaveを先頭から読み出す指示を音源7に与える。
ブレス消音処理では、後述するように、キー番号ReqKeyの音高の楽音を発音中のオシレータ700に割当てられている波形データWaveを検索し、該当する波形データWaveを未アサイン状態に設定すると同時に、該当するオシレータ700を未使用状態に設定して波形読み出しを停止させる。
ブレス音量変更処理では、後述するように、現在発音中にあるオシレータ700に割当てられている波形データWaveが、音量変化に伴って発音に不必要な波形データWaveになると、発音中のオシレータ700を未使用状態に設定して波形読み出しを停止させ、一方、発音に必要な波形データWaveになれば、その波形データWaveの発音を未使用のオシレータ700に割当て、かつ音量パラメータvolに対応するオシレータボリュームOSC volumeを供給して新たに音量制御する。
この後、ステップSD5に進み、例えば前述した第1実施形態と同様に、サンプリング処理(図8参照)などの、その他の処理を実行後、上述のステップSD2に処理を戻す。そして以後、パワーオフされるまでステップSD2〜SD5を繰り返す。
(3)ブレス処理の動作
次に、図14を参照してブレス処理の動作を説明する。上述したメインルーチンのステップSD3(図13参照)を介して本処理が実行されると、図14に図示するステップSE1に進み、息圧センサ13aが検出する現在の息圧をレジスタPressにストアする。以後、レジスタPressの内容を現息圧Pressと記す。続いて、ステップSE2では、現息圧PressとレジスタPrevPressに格納される前回検出時の息圧(以後、前息圧PrevPressと記す)とが不一致であるか否か、つまり息圧変化の有無を判断する。息圧変化が無ければ、判断結果は「NO」となり、何も行わずに本処理を完了させるが、息圧変化が有ると、判断結果が「YES」になり、ステップSE3に進む。
ステップSE3〜SE6では、現息圧Pressおよび前息圧PrevPressに基づきノートオンイベント、音量変更イベントおよびノートオフイベントのいずれであるかを判定し、判定したイベントに対応した処理データを生成する。以下、「ノートオンイベントの場合」、「音量変更イベントの場合」および「ノートオフイベントの場合」に分けて動作説明を進める。
<ノートオンイベントの場合>
ノートオンイベントの場合には、前息圧PrevPressは「0」なので、ステップSE3の判断結果が「YES」になり、ステップSE4に進み、発音開始処理用データを作成する。
すなわち、ステップSE4において、イベントリクエストReqStatにノートオンイベントを表す値「0」をセットし、キースイッチ13bの音高指定操作で指定されたキー番号を、キー番号ReqKeyにセットする。さらに、アタック部分からの通常波形読み出しを指定する値「0」を、波形読み出しアドレスReqAdrsにセットすると共に、現息圧Pressを息圧ReqPressにセットしてステップSE8に進む。
<音量変更イベントの場合>
音量変更イベントの場合には、前息圧PrevPressおよび現息圧Pressはともに「0」にならないので、ステップSE3およびステップSE5の判断結果がともに「NO」になり、ステップSE7に進み、音量変更処理用データを作成する。
すなわち、ステップSE7において、イベントリクエストReqStatに音量変更イベントを表す値「2」をセットする。また、現息圧Pressを息圧ReqPressにセットすると共に、持続波形部分からクロスフェード波形読み出しを指定する値「1」を、波形読み出しアドレスReqAdrsにセットしてステップSE8に進む。
<ノートオフイベントの場合>
ノートオフイベントの場合には、現息圧Pressが「0」になる為、ステップSE5の判断結果が「YES」になり、ステップSE6に進み、消音処理用データを作成する。
すなわち、ステップSE6において、イベントリクエストReqStatにノートオフイベントを表す値「1」をセットすると共に、キースイッチ13bの音高指定操作で指定されたキー番号を、キー番号ReqKeyにセットする。この後、ステップSE14に進み、現息圧Pressを前息圧PrevPressに更新して本処理を完了させる。
こうして、現息圧Pressおよび前息圧PrevPressに基づいて判定したイベントに対応した処理データを生成すると、ステップSE8に進み、ポインタnをゼロリセットすると共に、現息圧PressにパートボリュームPVol[0]を乗算して音量パラメータvolを発生し、さらにパート番号0の演奏パートにアサインされる音色番号PTone[0]に対応する音色パラメータTPRM[PTone[0]]をROM3から読み出してレジスタtprmにストアする。
なお、ROM3から読み出される音色パラメータTPRM[PTone[0]]は、図10に図示したように、波形レベルが異なる4種類の波形データWave1〜4にそれぞれ対応した波形パラメータWPRM[0]〜[3]から構成され、1つの波形パラメータWPRMは、波形番号WaveNum、波形最小音量WaveMin、波形最大音量WaveMax、ピーク音量WavePeak、通常読み出しアドレスAdrs[0]およびクロスフェード時読み出しアドレスAdrs[1]からなる。
ここで、図15を参照して波形パラメータWPRM中の波形最小音量WaveMin、波形最大音量WaveMaxおよびピーク音量WavePeakについて説明する。図15は、音量パラメータvolに対応して選択される各波形データWave1〜4毎のオシレータボリュームOSC volumeの変化を表すグラフである。オシレータボリュームOSC volumeは、選択される波形データWave1〜4の波形振幅(16ビット、14ビット、12ビットおよび10ビット)に対応して音量パラメータvolを7ビット長にスケール変換した値である。
図15に図示するグラフにおいて、例えば破線で図示される波形データWave2に着目した場合、図中のV1が「波形最小音量WaveMin」、V2が「波形最大音量WaveMax」、V3が「ピーク音量WavePeak」となる。つまり、波形最小音量WaveMinおよび波形最大音量WaveMaxは、この一例の場合、波形データWave2を用いて発音可能な最小音量および最大音量を表す。また、ピーク音量WavePeakとは、オシレータボリュームOSC volume最大値に対応する音量パラメータvolを表す。
さて、再び図14を参照してブレス処理の動作説明を進める。上記ステップSE8にて音量パラメータvolおよび音色パラメータTPRM[PTone[0]]を用意し終えると、ステップSE9〜SE13において、ポインタnの歩進に応じて順次指定される各波形データWave1〜4の波形パラメータWPRM[0]〜[3]を参照し、その内から音量パラメータvolに対応する波形データWaveを選択する。
すなわち、ステップSE9では、上記ステップSE8にて算出される音量パラメータvolが、レジスタtprmの音色パラメータTPRM中でポインタnにて指定される波形パラメータWPRM[n]の波形最小音量WaveMin(tprm.WPRM[n].WaveMin)以上であって、波形最大音量WaveMax(tprm.WPRM[n].WaveMax)以下であるか、つまり音量パラメータvolに対応する波形データであるかを判断する。
音量パラメータvolに対応する波形データでなければ、判断結果は「NO」になり、ステップSE10に進み、イベントリクエストデータReq中でポインタnにて指定される波形状態WaveStat[n]に、発音不必要である旨を表す値「0」をセットした後、ステップSE12に進む。
一方、音量パラメータvolに対応する波形データであると、判断結果が「YES」となり、ステップSE11に進み、イベントリクエストデータReq中でポインタnにて指定される波形状態WaveStat[n]に、発音に必要である旨を表す値「1」をセットした後、ステップSE12に進む。そして、ステップSE12では、ポインタnをインクリメントして歩進させ、続くステップSE13では、歩進されたポインタnが波形種NW(本実施形態では4種)より小さいか、すなわち全ての波形データWaveについて適合判定し終えたかどうかを判断する。適合判定し終えていなければ、判断結果は「YES」になり、上記ステップSE9に処理を戻す。
以後、適合判定し終える迄、上述のステップSE9〜SE13を繰り返し、適合判定し終えると、ステップSE13の判断結果が「YES」になり、ステップSE14に進み、現息圧Pressを前息圧PrevPressに更新して本処理を完了させる。
このように、ブレス処理では、現息圧Pressを検出し、検出した現息圧Pressと前息圧PrevPressとを比較してノートオンイベント、音量変更イベントおよびノートオフイベントのいずれであるかを判定し、判定したイベントに対応した処理データを生成する一方、現息圧PressにパートボリュームPVol[0]を乗算して生成される音量パラメータvolに対応する波形データWaveを選択する。
(4)発音処理の動作
次に、図16を参照して発音処理の動作を説明する。前述したメインルーチンのステップSD4(図13参照)を介して本処理が実行されると、図16に図示するステップSF1に進み、上述のブレス処理にて設定されるイベントリクエストReqStatの値を判定する。
すなわち、ノートオンイベントの場合には、イベントリクエストReqStatの値は「0」なので、ステップSF2に進み、ブレス発音開始処理(後述する)を実行した後、ステップSF5に進み、イベントリクエストReqStatに要求無し(イベント無し)を表す値「−1」をセットした後、ステップSF6に進み、その他の発音処理(他の演奏パートの発音処理)を実行して本処理を終える。
ノートオフイベントの場合には、イベントリクエストReqStatの値は「1」なので、ステップSF3に進み、ブレス消音処理(後述する)を実行した後、ステップSF5に進み、イベントリクエストReqStatに要求無し(イベント無し)を表す値「−1」をセットした後、ステップSF6に進み、その他の発音処理(他の演奏パートの発音処理)を実行して本処理を終える。
音量変更イベントの場合には、イベントリクエストReqStatの値は「2」なので、ステップSF4に進み、ブレス音量変更処理(後述する)を実行した後、ステップSF5に進み、イベントリクエストReqStatに要求無し(イベント無し)を表す値「−1」をセットした後、ステップSF6に進み、その他の発音処理(他の演奏パートの発音処理)を実行して本処理を終える。
イベント無しの場合には、イベントリクエストReqStatの値は「−1」なので、ステップSF6に進み、その他の発音処理(他の演奏パートの発音処理)を実行して本処理を終える。
(5)ブレス発音開始処理の動作
次に、図17を参照してブレス発音開始処理の動作を説明する。上述した発音処理のステップSF2(図16参照)を介して本処理が実行されると、図17に図示するステップSG1に進み、ポインタnをゼロリセットする。続いて、ステップSG2〜SG4では、ノート管理データNPRMの数NNに達するまでポインタnを歩進させながら、当該ポインタnで指定されるノート管理データNPRM[n]中のノート状態NoteStat(NPRM[n].NoteStat)が「0」のNPRMを検索する。全てのNPRMを検索し、ノート状態NoteStatが「0」のNPRMを探し出せなかった場合には、ステップSG4の判断結果が「NO」となり、本処理を終える。
これに対し、ノート状態NoteStatが「0」のNPRMが見つかると、ステップSG2の判断結果が「YES」になり、ステップSG5に進む。ステップSG5では、ポインタnで指定されるノート管理データNPRM[n]中のノート状態NoteStat(NPRM[n].NoteStat)に、発音中を表す値「1」をストアすると共に、キー番号key(NPRM[n].key)に、音高指定されたキー番号ReqKeyをストアし、さらに波形検索ポインタwをゼロリセットする。
次いで、ステップSG6では、波形検索ポインタwで指定される波形状態WaveStat[w]が「1」、つまり発音に必要な波形データWaveであるかどうかを判断する。発音に不必要な波形データWaveであれば、判断結果は「NO」になり、ステップSG12に進み、波形検索ポインタwをインクリメントして歩進させる。続くステップSG13では、歩進された波形検索ポインタwが波形種NW(本実施形態では4種)より小さいか否か、すなわち全ての波形データについて検索し終えたかどうかを判断する。
検索し終えていなければ、判断結果は「YES」となり、上記ステップSG6に処理を戻す。以後、波形検索ポインタwを歩進させながら、発音に必要な波形データWaveを検索して行き、該当する波形データWaveが見つからなければ、ステップSG13の判断結果が「NO」になり、本処理を完了させるが、該当する波形データWaveが見つかると、ステップSG6の判断結果が「YES」になり、ステップSG7に進む。ステップSG7では、オシレータ検索ポインタvをゼロリセットする。続いて、ステップSG8〜SG10では、オシレータ検索ポインタvを歩進させながら、オシレータアサイン管理データOscStat[0]〜[NOSC−1]の内から未使用のオシレータ(OscStat[v]=0)を検索する。
未使用のオシレータ(OscStat[v]=0)が見つかると、ステップSG8の判断結果が「YES」になり、ステップSG11に進む。ステップSG11では、ポインタnで指定されるノート管理データNPRM[n]において、波形検索ポインタwが指定するオシレータ割当波形番号OscNum[w](NPRM[n].OscNum[w])に、発音割当てするオシレータ番号として、オシレータ検索ポインタvをストアする。また、ステップSG11では、オシレータ検索ポインタvが指定するオシレータアサイン管理データOscStat[v]に「1」をセットして使用中に設定する。
さらに、ステップSG11では、図15に図示した関係を用いて、現息圧PressにパートボリュームPVol[0]を乗算してなる音量パラメータvolに対応するオシレータボリュームOSC volumeを算出し、そのオシレータボリュームOSC volumeを音源7にて発音割当てしたオシレータ700の乗算器700bに供給する。また、ステップSG11では、前述のブレス処理(図14参照)にて設定された波形読み出しアドレスReqAdrs(=0)に従い、選択された波形データWaveを先頭のアタック部分(図10のAdrs[0])から読み出す波形読み出し開始指示を音源7に与える。
このように、ブレス発音開始処理では、停止中かつ未使用のオシレータ700に発音を割当て、音量パラメータvolに対応するオシレータボリュームOSC volumeを、発音割当てしたオシレータ700の乗算器700bに与えると共に、音量パラメータvolに対応して選択される波形データWaveを先頭から読み出す指示を音源7に与える。これにより、音源7は、キー番号ReqKeyの音高の楽音をオシレータボリュームOSC volumeに対応した音量で発生することになる。
(6)ブレス消音処理の動作
次に、図18を参照してブレス消音処理の動作を説明する。前述した発音処理のステップSF3(図16参照)を介して本処理が実行されると、図18に図示するステップSH1に進み、ポインタnをゼロリセットする。続いて、ステップSH2〜SH4では、ノート管理データNPRMの数NNに達するまでポインタnを歩進させながら、当該ポインタnで指定されるノート管理データNPRM[n]中のノート状態NoteStat(NPRM[n].NoteStat)が「1」であって、かつキー番号key(NPRM[n].key)がキー番号ReqKeyに一致するノート管理データNPRMを検索する。つまり、キー番号ReqKeyの音高の楽音を発音中のノート管理データNPRMを探し出す。そして、該当するノート管理データNPRMを探し出せなかった場合には、ステップSH4の判断結果が「NO」となり、本処理を終える。
一方、キー番号ReqKeyの音高の楽音を発音中のオシレータ700が見つかった場合には、上記ステップSH2の判断結果が「YES」になり、ステップSH5に進む。ステップSH5では、ポインタnで指定されるノート管理データNPRM[n]中のノート状態NoteStat(NPRM[n].NoteStat)に、停止(消音中)を表す値「0」をストアすると共に、波形検索ポインタwをゼロリセットする。
次いで、ステップSH6では、ポインタnで指定され、キー番号ReqKeyの音高の楽音を発音中のオシレータ700に割当てられているノートを管理するノート管理データNPRM[n]において、波形検索ポインタwが指定するオシレータ割当波形番号OscNum[w](NPRM[n].OscNum[w])を、レジスタvにストアする。
次に、ステップSH7では、レジスタvにストアされた値が「−1」であるか否か、つまりキー番号ReqKeyの音高の楽音を発音中のオシレータ700に、波形検索ポインタwで指定される波形データWaveが割当てられていないかどうかを判断する。割当てられていない場合には、判断結果が「YES」になり、ステップSH9に進み、波形検索ポインタwをインクリメントして歩進させる。そして、ステップSH10では、歩進された波形検索ポインタwが波形種NWより小さいか否か、つまり全ての波形データWave1〜4について検索し終えたかどうかを判断する。検索し終えていなければ、判断結果は「YES」になり、上述のステップSH6に処理を戻す。
以後、波形種NWに達するまで波形検索ポインタwを歩進させながら、発音中のオシレータ700に割当てられている波形データWaveを探し出す。そして、該当する波形データWaveが検索されると、ステップSH7の判断結果が「NO」になり、ステップSH8に進む。ステップSH8では、ポインタnで指定されるノート管理データNPRM[n]において、波形検索ポインタwが指定するオシレータ割当波形番号OscNum[w](NPRM[n].OscNum[w])に「−1」をセットして未アサイン状態に設定すると共に、レジスタvにストアされた値で指定されるオシレータアサイン管理データOscStat[v]に「0」をセットして、発音中のオシレータ700を未使用状態に設定した後、そのオシレータ700の波形読み出しを停止させるよう音源7に指示する。
このように、ブレス消音処理では、キー番号ReqKeyの音高の楽音を発音中のオシレータ700に割当てられている波形データWaveを検索し、該当する波形データWaveを未アサイン状態に設定すると同時に、該当するオシレータ700を未使用状態に設定して波形読み出しを停止させる。
(7)ブレス音量変更処理の動作
次に、図19を参照してブレス音量変更処理の動作を説明する。前述した発音処理のステップSF4(図16参照)を介して本処理が実行されると、図19に図示するステップSJ1に進み、ポインタnをゼロリセットする。続いて、ステップSJ2〜SJ4では、ノート管理データNPRMの数NNに達するまでポインタnを歩進させながら、当該ポインタnで指定されるノート管理データNPRM[n]中のノート状態NoteStat(NPRM[n].NoteStat)が「1」、つまり現在発音中にあるノート管理データNPRMを検索する。該当するノート管理データNPRMが存在しなければ、ステップSJ4の判断結果が「NO」となり、本処理を終える。
一方、発音中のオシレータ700が検索されると、上記ステップSJ2の判断結果が「YES」になり、ステップSJ5に進み、波形検索ポインタwをゼロリセットする。続いて、ステップSJ6では、ポインタnで指定されるノート管理データNPRM[n]において、波形検索ポインタwが指定するオシレータ割当波形番号OscNum[w](NPRM[n].OscNum[w])を、レジスタvにストアする。次いで、ステップSJ7では、波形検索ポインタwで指定される波形状態WaveStat[w]が「0」であるかどうかを判断する。
すなわち、前述したブレス処理のステップSE9〜SE11(図14参照)において説明した通り、音量パラメータvolに対応する波形データWaveでなくなると、イベントリクエストデータReq中の波形状態WaveStat[w]に、発音不必要である旨を表す値「0」がセットされ、一方、音量パラメータvolに対応する波形データWaveになると、イベントリクエストデータReq中の波形状態WaveStat[w]に、発音に必要である旨を表す値「1」がセットされる。
従って、このステップSJ7では、現息圧Pressの変化、すなわち音量変化に伴って発音に不必要な波形データWaveになったか、あるいは発音に必要な波形データWaveになったかを判断する訳である。以下、発音に不必要な波形データWaveになった場合と、発音に必要な波形データWaveになった場合とに分けて動作説明を進める。
<発音に不必要な波形データWaveになった場合>
音量変化に伴って発音に不必要な波形データWaveになると、ステップSJ7の判断結果が「YES」となり、ステップSJ8に進む。ステップSJ8では、レジスタvにストアされた値が「−1」であるか否か、つまり波形検索ポインタwで指定される波形データWaveが、発音中のオシレータ700に割当てられていないかどうかを判断する。割当てられていなければ、判断結果は「YES」になり、ステップSJ10に進み、波形検索ポインタwをインクリメントして歩進させる。そして、ステップSJ11に進み、歩進された波形検索ポインタwが波形種NWより小さいか否か、つまり全ての波形データWave1〜4について検索し終えたかどうかを判断する。検索し終えていなければ、判断結果は「YES」になり、上述のステップSJ6に処理を戻す。
以後、波形種NWに達するまで波形検索ポインタwを歩進させながら、現在発音中のオシレータ700に割当てられているが、発音に不必要な波形データWaveを探し出す。そして、該当する波形データWaveが検索されると、ステップSJ8の判断結果が「NO」になり、ステップSJ9に進む。ステップSJ9では、ポインタnで指定されるノート管理データNPRM[n]において、波形検索ポインタwが指定するオシレータ割当波形番号OscNum[w](NPRM[n].OscNum[w])に「−1」をセットして未アサイン状態に設定すると共に、レジスタvにストアされた値で指定されるオシレータアサイン管理データOscStat[v]に「0」をセットして、発音中のオシレータ700を未使用状態に設定した後、そのオシレータ700の波形読み出しを停止させるよう音源7に指示する。
このように、ステップSJ6〜SJ11では、波形検索ポインタwを波形種NW(本実施形態では、波形データWave1〜4の4種)まで歩進させながら、各波形データWave1〜4がそれぞれ割当てられているオシレータ番号vを検索しつつ、各波形データWave1〜4が発音に必要か不必要かを区別する。そして、現在発音中のオシレータ700に割当てられているが、発音に不必要な波形データWaveであると、発音中のオシレータ700を未使用状態に設定し、そのオシレータ700の波形読み出しを停止させるよう音源7に指示する。
<発音に必要な波形データWaveになった場合>
音量変化に伴って発音に必要な波形データWaveになると、上述したステップSJ7の判断結果が「NO」となり、ステップSJ12に進む。ステップSJ12では、レジスタvにストアされた値が「−1」であるか否か、つまり波形検索ポインタwで指定される波形データWaveが、発音中のオシレータ700に割当てられていないかどうかを判断する。
波形検索ポインタwで指定される波形データWaveが、発音中のオシレータ700に割当てられていなければ、判断結果は「YES」になり、ステップSJ13に進み、オシレータアサイン管理データOscStat[0]〜[NOSC−1]の内から未使用のオシレータ(OscStat[v]=0)を検索し、該当するオシレータ番号をレジスタvにストアする。
そして、ステップSJ14では、レジスタvに格納される未使用のオシレータ番号がオシレータの数NOSCより小さいか否か、つまり適正かどうかを判断する。未使用のオシレータ番号が適正でなければ、判断結果は「NO」になり、前述のステップSJ10に処理を戻すが、適正ならば、判断結果は「YES」になり、ステップSJ15に進む。
ステップSJ15では、未使用のオシレータ番号vで指定されるオシレータアサイン管理データOscStat[v]に「1」をセットして使用中に設定して発音割当て行った後、図15に図示した関係を用いて、ReqPressにパートボリュームPVol[0]を乗算してなる音量パラメータvolに対応するオシレータボリュームOSC volumeを算出し、そのオシレータボリュームOSC volumeを音源7にて発音割当てしたオシレータ700の乗算器700bに供給する。そして、前述したステップSE7(図14参照)にて設定された波形読み出しアドレスReqAdrs(=1)に従い、選択された波形データWaveの持続波形部分(図10のAdrs[1])から読み出すクロスフェード波形読み出し開始指示を音源7に与える。
一方、波形検索ポインタwで指定される波形データWaveが、発音中のオシレータ700に割当てられている場合には、上記ステップSJ12の判断結果が「NO」になり、ステップSJ16に進み、図15に図示した関係を用いて、ReqPressにパートボリュームPVol[0]を乗算してなる音量パラメータvolに対応するオシレータボリュームOSC volumeを算出し、そのオシレータボリュームOSC volumeを音源7にて発音割当てしたオシレータ700の乗算器700bに供給した後、前述のステップSJ10に処理を戻す。
このように、ブレス音量変更処理では、現在発音中にあるオシレータ700に割当てられている波形データWaveが、音量変化に伴って発音に不必要な波形データWaveになると、発音中のオシレータ700を未使用状態に設定して波形読み出しを停止させ、一方、発音に必要な波形データWaveになれば、その波形データWaveの発音を未使用のオシレータ700に割当て、かつ音量パラメータvolに対応するオシレータボリュームOSC volumeを供給して新たに音量制御する。
以上説明したように、第2実施形態によれば、波形レベルが異なる4種類の波形データWaveを、音量パラメータvolの変化幅に対応付けて予め設けておき、ノートオンイベント毎に息圧Pressとユーザ設定されるパートボリュームPVol[0]との乗算で求まる音量パラメータvolの値に応じて、波形データWave1〜4のいずれかを選択し、選択した波形データWaveと、それに対応する音量パラメータvolをスケール変換した音量制御値vol(レジスタvol)とを音源7に設定して音量制御するので、必要とされるダイナミックレンジに満たないボリュームを用いた場合でも必要十分な音量制御を行うことが可能になっている。
また、第2実施形態では、息圧Pressの変化に対応させて連続的に音量を変化させる際に、発音に不必要となった波形データWave(切替え前波形データ)から新たに発音に必要になる波形データWave(切替え後波形データ)へ切替える場合、切替え前波形データから切替え後波形データにクロスフェードさせて波形読み出しを行うので、音量変化に伴う波形不連続を回避することが可能になる。
なお、第2実施形態では、連続的に音量を変化させる一例として息圧Pressを用いるようにしたが、これに限らず、例えばMIDI入力されるホイール操作子等が発生するコンティニュアスデータを用いる態様としても構わないし、あるいはアフタータッチで連続的に音量変化させる態様とすることも可能である。
また、第2実施形態では、波形レベルが異なる4種類の波形データWaveを、音量パラメータvolの変化幅に対応付けて音源7に設けるようにしたが、これに替えて、前述した第1実施形態と同様にサンプリング処理(図8参照)を実行し、波形番号Waveに対応してスケーリングされた波形データを、音源7を構成するオシレータ700−1〜700−nの各波形発生器700aに登録する態様としてもよい。
本発明の第1実施形態の構成を示すブロック図である。 RAM4の主要レジスタ構成を示す図である。 音源7の構成を示すブロック図である。 波形データWave1〜4毎の、波形レベルと音量パラメータvolとの対応関係を示すグラフである。 メインルーチンの動作を示すフローチャートである。 発音処理の動作を示すフローチャートである。 波形データWave1〜4毎の、音量パラメータvolと当該音量パラメータvolをスケール変換した音量制御値vol(レジスタvol)との対応関係を示すグラフである。 サンプリング処理の動作を示すフローチャートである。 第2実施形態の構成を示すブロック図である。 ROM3に記憶される音色パラメータの構成を示す図である。 RAM4に記憶される主要レジスタ構成を示す図である。 第2実施形態による音源7の構成を示すブロック図である。 第2実施形態によるメインルーチンの動作を示すフローチャートである。 第2実施形態によるブレス処理の動作を示すフローチャートである。 音量パラメータvolに対応して選択される各波形データWave1〜4毎のオシレータボリュームOSC volumeの変化を示すグラフである。 第2実施形態による発音処理の動作を示すフローチャートである。 第2実施形態によるブレス発音開始処理の動作を説明するためのフローチャートである。 第2実施形態によるブレス消音処理の動作を説明するためのフローチャートである。 第2実施形態によるブレス音量変更処理の動作を説明するためのフローチャートである。
符号の説明
1 鍵盤
2 スイッチ部
3 ROM
4 RAM
5 MIDIインタフェース
6 CPU
7 音源
8 D/A変換器
9 サウンドシステム
10 マイク
11 A/D変換器
12 表示部

Claims (6)

  1. ビット数が異なる波形データを複数種記憶する波形データ記憶手段と、
    予め設定されたビット数の音量制御値を発生する音量制御値発生手段と、
    前記波形データ記憶手段に記憶される複数種の波形データの内から前記音量制御値発生手段が発生する音量制御値に対応するビット数の波形データを選択する波形選択手段と、
    前記音量制御値を、前記波形選択手段により選択された波形データのビット数分に応じたビット数分ビットシフトするビットシフト手段と、
    前記音量制御値のビット数より少ない所定ビット数の乗算器から成り、前記ビットシフトされた音量制御値に含まれる前記所定ビット数分のデータに従って当該波形データの再生音量を制御する音量制御手段と
    を具備することを特徴とする音量制御装置。
  2. ビット数が異なる波形データを複数種記憶する波形データ記憶手段と、
    ボリューム操作で設定される第1の音量値に、発音毎に変化する第2の音量値を乗算して予め設定されたビット数の音量制御値を発生する音量制御値発生手段と、
    前記波形データ記憶手段に記憶される複数種の波形データの内から前記音量制御値発生手段が発生する音量制御値に対応するビット数の波形データを選択する波形選択手段と、
    前記音量制御値を、前記波形選択手段により選択された波形データのビット数分に応じたビット数分ビットシフトするビットシフト手段と、
    前記音量制御値のビット数より少ない所定ビット数の乗算器から成り、前記ビットシフトされた音量制御値に含まれる前記所定ビット数分のデータに従って当該波形データの再生音量を制御する音量制御手段と
    を具備することを特徴とする音量制御装置。
  3. 入力波形信号をサンプリングし、ビット数が異なる複数種の波形データを生成するサンプリング手段をさらに備えることを特徴とする請求項2記載の音量制御装置。
  4. 予め設定されたビット数の音量制御値を発生する音量制御値発生処理と、
    ビット数が異なる波形データを複数種記憶する波形データ記憶手段に記憶される複数種の波形データの内から前記音量制御値発生処理にて生成される音量制御値に対応するビット数の波形データを選択する波形選択処理と、
    前記音量制御値を、前記選択された波形データのビット数分に応じたビット数分ビットシフトするビットシフト処理と、
    前記音量制御値のビット数より少ない所定ビット数の乗算器に対して、前記ビットシフトされた音量制御値に含まれる前記所定ビット数分のデータに従って当該波形データの再生音量を制御させる音量制御処理と、
    をコンピュータで実行させることを特徴とする音量制御処理プログラム。
  5. ボリューム操作で設定される第1の音量値に、発音毎に変化する第2の音量値を乗算して予め設定されたビット数の音量制御値を発生する音量制御値発生処理と、
    ビット数が異なる波形データを複数種記憶する波形データ記憶手段に記憶される複数種の波形データの内から前記音量制御値発生処理にて生成される音量制御値に対応するビット数の波形データを選択する波形選択処理と、
    前記音量制御値を、前記選択された波形データのビット数分に応じたビット数分ビットシフトするビットシフト処理と、
    前記音量制御値のビット数より少ない所定ビット数の乗算器に対して、前記ビットシフトされた音量制御値に含まれる前記所定ビット数分のデータに従って当該波形データの再生音量を制御させる音量制御処理と、
    をコンピュータで実行させることを特徴とする音量制御処理プログラム。
  6. 入力波形信号をサンプリングし、ビット数が異なる複数種の波形データを生成するサンプリング処理をさらに備えることを特徴とする請求項記載の音量制御処理プログラム。
JP2004357819A 2004-12-10 2004-12-10 音量制御装置および音量制御処理プログラム Active JP4441928B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004357819A JP4441928B2 (ja) 2004-12-10 2004-12-10 音量制御装置および音量制御処理プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004357819A JP4441928B2 (ja) 2004-12-10 2004-12-10 音量制御装置および音量制御処理プログラム

Publications (2)

Publication Number Publication Date
JP2006163230A JP2006163230A (ja) 2006-06-22
JP4441928B2 true JP4441928B2 (ja) 2010-03-31

Family

ID=36665303

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004357819A Active JP4441928B2 (ja) 2004-12-10 2004-12-10 音量制御装置および音量制御処理プログラム

Country Status (1)

Country Link
JP (1) JP4441928B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5668900B2 (ja) * 2009-04-02 2015-02-12 株式会社コルグ 楽音発生装置および動作プログラム

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02275496A (ja) * 1989-04-17 1990-11-09 Suzuki Gakki Seisakusho:Kk 電子楽器の音量制御装置
JP3279861B2 (ja) * 1995-02-27 2002-04-30 株式会社河合楽器製作所 楽音信号発生装置
JP2790128B2 (ja) * 1996-06-14 1998-08-27 ヤマハ株式会社 波形データ及び楽音制御用のディジタルデータの圧縮方法
JP3428401B2 (ja) * 1997-10-21 2003-07-22 ヤマハ株式会社 波形データ処理方法
JP3744216B2 (ja) * 1998-08-07 2006-02-08 ヤマハ株式会社 波形形成装置及び方法
JP2000075868A (ja) * 1998-08-27 2000-03-14 Roland Corp ハーモニー生成装置およびカラオケシステム
JP2001109474A (ja) * 1999-10-08 2001-04-20 Roland Corp 電子楽器の楽音発生装置
JP3775156B2 (ja) * 2000-03-02 2006-05-17 ヤマハ株式会社 携帯電話機
JP2003323177A (ja) * 2002-05-01 2003-11-14 Roland Corp 波形再生装置

Also Published As

Publication number Publication date
JP2006163230A (ja) 2006-06-22

Similar Documents

Publication Publication Date Title
JP3812328B2 (ja) 自動伴奏パターン発生装置及び方法
TWI248601B (en) Automatic music performing apparatus and automatic music performance processing program
JPH0784574A (ja) 電子楽器
JP4441928B2 (ja) 音量制御装置および音量制御処理プログラム
JP2745865B2 (ja) 楽音合成装置
JP3279861B2 (ja) 楽音信号発生装置
JP5030016B2 (ja) 楽音発生装置および楽音発生処理プログラム
JPH0968980A (ja) 電子鍵盤楽器の音色制御装置
JP3567294B2 (ja) 音声発生装置
JP3567293B2 (ja) 発音チャンネル割当装置
JP2007140000A (ja) 歌唱採点装置および歌唱採点処理のプログラム
JPH05204297A (ja) 階名発生装置
JP3554770B2 (ja) 楽音発生装置
JP2701177B2 (ja) 楽音発生装置
JP2738217B2 (ja) 電子楽器
JP4614131B2 (ja) 波形発生装置および波形発生プログラム
JP4345433B2 (ja) 演奏装置および演奏処理プログラム
JPH0659669A (ja) 楽音発生装置
JP2007187949A (ja) 楽音発生装置および楽音発生処理のプログラム
JPH1031496A (ja) 楽音発生装置
JP5257842B2 (ja) 楽音発生装置および楽音発生プログラム
JP3744667B2 (ja) 自動伴奏装置および自動伴奏方法
JP3375220B2 (ja) 電子楽器
JP3493838B2 (ja) 電子楽器
JP2953217B2 (ja) 電子楽器

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070621

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20081127

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081201

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090127

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: 20091221

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100103

R150 Certificate of patent or registration of utility model

Ref document number: 4441928

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130122

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130122

Year of fee payment: 3