JP2008015315A - 楽音発生装置および楽音発生処理プログラム - Google Patents

楽音発生装置および楽音発生処理プログラム Download PDF

Info

Publication number
JP2008015315A
JP2008015315A JP2006187720A JP2006187720A JP2008015315A JP 2008015315 A JP2008015315 A JP 2008015315A JP 2006187720 A JP2006187720 A JP 2006187720A JP 2006187720 A JP2006187720 A JP 2006187720A JP 2008015315 A JP2008015315 A JP 2008015315A
Authority
JP
Japan
Prior art keywords
waveform
sound
tone
channel
waveform data
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.)
Pending
Application number
JP2006187720A
Other languages
English (en)
Inventor
Hiroyuki Sasaki
博之 佐々木
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 JP2006187720A priority Critical patent/JP2008015315A/ja
Publication of JP2008015315A publication Critical patent/JP2008015315A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Electrophonic Musical Instruments (AREA)

Abstract

【課題】性能劣化を引き起こすことなく波形データの大容量化に対応できる楽音発生装置を実現する。
【解決手段】サンプルローダ処理がフラッシュメモリ16から読み出した波形データを波形メモリ17にロードすると同時に、ゲートスタート/エンド処理の指示に従って音源処理が当該波形メモリ17にロードされた波形データを再生して楽音波形Wを生成するので、フラッシュメモリからRAM(波形メモリ)に波形データをロードする際のロード待ち時間を無くす。これにより、フラッシュメモリに格納する波形データの大容量化に伴ってロード待ち時間が増大して発音資源(発音チャンネル)の使用効率が低下するという弊害を回避する結果、性能劣化を引き起こすことなく波形データの大容量化に対応することが出来る。
【選択図】図6

Description

本発明は、電子楽器に用いて好適な楽音発生装置および楽音発生処理プログラムに関する。
従来より波形メモリ読み出し方式で構成される楽音発生装置が知られている。この種の装置として、例えば特許文献1には、電気的に書き換え可能な不揮発性メモリであるフラッシュメモリに各種波形データを登録しておき、それらの内から楽音生成に必要な種類の波形データをフラッシュメモリから読み出してRAMにロードした後、このRAMにロードした波形データを使用して楽音生成する技術が開示されている。
特開2000−284783号公報
ところで、上記特許文献1に開示の装置では、楽音の生成に必要な全ての波形データを、フラッシュメモリから一旦RAMにロードしておく必要がある。したがって、発音品質の向上や音色数の増加に伴い波形データの大容量化が進むと、必然的にRAMの記憶容量も増大させる必要が生じる。しかしながら、RAMの大容量化は、製品コスト高を招致したり、フラッシュメモリからRAMに波形データをロードする際のロード待ち時間の増大を招く。とりわけロード待ち時間の増大は、発音資源(発音チャンネル)の使用効率を低下させ、例えば同時発音数が少なくなる等の性能劣化を引き起こす問題が生じる。
本発明は、このような事情に鑑みてなされたもので、性能劣化を引き起こすことなく波形データの大容量化に対応することができる楽音発生装置および楽音発生処理プログラムを提供することを目的としている。
上記目的を達成するため、請求項1に記載の発明では、各種音色の波形データを記憶する第1の波形記憶手段と、発音指示を発生する発音指示手段と、前記発音指示手段が発生する発音指示に応じて、前記第1の波形記憶手段に記憶される各種音色の波形データの内から発音割当てされた音色の波形データを読み出して第2の波形記憶手段にロードする波形ロード手段と、発音割当てされた音色の波形データが、前記波形ロード手段により前記第2の波形記憶手段にロードされると同時に、そのロードされた波形データを当該第2の波形記憶手段から読み出して楽音生成する楽音生成手段とを具備することを特徴とする。
上記請求項1に従属する請求項2に記載の発明では、前記楽音生成手段は、第2の波形記憶手段にロードされた波形データを終端のエンドアドレスまで読み出し終えた場合、ループアドレスに遡って当該ループアドレスからエンドアドレスまでの波形データを繰り返し読み出すループ再生を行うことを特徴とする。
上記請求項1に従属する請求項3に記載の発明では、前記波形ロード手段は、同一音色の発音が連続した場合に、先の発音に際して前記第2の波形記憶手段にロードした波形データを、次の発音にも使用するよう前記楽音生成手段に指示することを特徴とする。
上記請求項1に従属する請求項4に記載の発明では、前記楽音生成手段は、同一音色の発音が連続した時に前記波形ロード手段から先の発音に際して前記第2の波形記憶手段にロードした波形データを、次の発音にも使用するよう指示された場合、当該第2の波形記憶手段にロード済みの波形データを、ループアドレスからエンドアドレスまで繰り返し読み出すループ再生を行うことを特徴とする。
請求項5に記載の発明では、発音指示を発生する発音指示処理と、前記発音指示処理が発生する発音指示に応じて、第1のメモリに記憶される各種音色の波形データの内から発音割当てされた音色の波形データを読み出して第2のメモリにロードする波形ロード処理と、発音割当てされた音色の波形データが、前記波形ロード処理により第2のメモリにロードされると同時に、そのロードされた波形データを当該第2のメモリから読み出して楽音生成する楽音生成処理とをコンピュータで実行させることを特徴とする。
上記請求項5に従属する請求項6に記載の発明では、前記楽音生成処理は、第2のメモリにロードされた波形データを終端のエンドアドレスまで読み出し終えた場合、ループアドレスに遡って当該ループアドレスからエンドアドレスまでの波形データを繰り返し読み出すループ再生を行うことを特徴とする。
上記請求項5に従属する請求項7に記載の発明では、前記波形ロード処理は、同一音色の発音が連続した場合に、先の発音に際して第2のメモリにロードした波形データを、次の発音にも使用するよう前記楽音生成処理に指示することを特徴とする。
上記請求項5に従属する請求項8に記載の発明では、前記楽音生成処理は、同一音色の発音が連続した時に前記波形ロード処理から先の発音に際して第2のメモリにロードした波形データを、次の発音にも使用するよう指示された場合、当該第2のメモリにロード済みの波形データを、ループアドレスからエンドアドレスまで繰り返し読み出すループ再生を行うことを特徴とする。
本発明では、発音指示に応じて、第1の波形記憶手段に記憶される各種音色の波形データの内から発音割当てされた音色の波形データを読み出して第2の波形記憶手段にロードすると同時に、そのロードされた波形データを当該第2の波形記憶手段から読み出して楽音生成するので、フラッシュメモリからRAM(波形メモリ)に波形データをロードする際のロード待ち時間を無くし、これにより、フラッシュメモリに格納する波形データの大容量化に伴ってロード待ち時間が増大して発音資源(発音チャンネル)の使用効率が低下するという弊害を回避する結果、性能劣化を引き起こすことなく波形データの大容量化に対応することが出来る。
以下、図面を参照して本発明の実施の形態について説明する。
[第1実施形態]
A.構成
(1)全体構成
図1は、本発明の第1実施形態による楽音発生装置の構成を示すブロック図である。この図において、鍵盤10は、押離鍵操作(演奏操作)に応じたキーオン/キーオフイベント、鍵番号およびベロシティ等からなる演奏情報を発生する。スイッチ部11は、例えばパワーオンオフ設定する電源スイッチの他、発生楽音の音色を選択する音色選択スイッチなど複数の操作スイッチを備え、これらスイッチの操作に応じたスイッチイベントを発生してCPU13に供給する。表示部12は、LCDパネル等から構成され、CPU13から供給される表示制御信号に応じて装置各部の設定状態や動作状態などを表示する。
CPU13は、プログラムROM14からロードした各種制御プログラムをマルチタスキングにより時分割に実行させて並列的に処理する。本発明の要旨に係わるCPU13の処理機能および処理動作については追って述べる。プログラムROM14は、上記CPU13にロードされる各種制御プログラムや制御データを記憶する。プログラムROM14に記憶される各種制御プログラムとは、後述するメインルーチン、サンプルローダ処理およびゲートスタート/エンド処理を含む。
RAM15は、CPU13のワークエリアとして用いられ、各種レジスタ・フラグデータを一時記憶する。RAM15には、各種レジスタ・フラグデータから構成される状態テーブルTBLが設けられる。状態テーブルTBLの構成については後述する。第1の波形記憶手段であるフラッシュメモリ16は、例えば装置本体から挿脱自在な記憶媒体であり、波形番号TONEで指定される各種音色の波形データを記憶する。1つの音色の波形データは、楽音立上がり部分を形成するアタック波形データと、アタック以降の持続音を形成するためのループ波形データから構成される。
第2の波形記憶手段である波形メモリ17は、リード/ライト速度が高速なSDRAM等から構成され、図2に図示するように、音源18の発音チャンネルCH0〜CH127にそれぞれ1対1に対応するチャンネルエリアCH0〜CH127を備える。これら波形エリアCH0〜CH127には、CPU13が実行するサンプルローダ処理(後述する)によって、フラッシュメモリ16から読み出される波形番号TONEの音色の波形データがロードされる。1つのチャンネルエリアCHには、スタートアドレスSADからアタック波形データが格納され、ループアドレスLADからエンドアドレスEADまでにループ波形データが格納される。
音源18は、周知の波形メモリ読み出し方式にて構成され、時分割動作する発音チャンネルCH0〜CH127を備える。音源18は、DSP(デジタルシグナルプロセッサ)と呼ばれる論理演算素子を有し、当該DSPが音源処理を実行する。音源処理は、後述するように、CPU13が実行するゲートスタート/エンド処理から与えられるスタートコマンド又はストップコマンドに応じて、楽音波形Wを発音又は消音する。すなわち、スタートコマンド含まれるパラメータで指定される発音チャンネルにおいて、当該発音チャンネルにアサインされた音色の波形データを波形メモリ17から読み出して楽音波形Wを生成し、ストップコマンド含まれるパラメータで指定される発音チャンネルを消音する。
サウンドシステム19は、音源18から出力される楽音波形Wをアナログ形式の楽音信号にD/A変換し、D/A変換した楽音信号から不要ノイズを除去する等のフィルタリングを施してから信号増幅してスピーカから放音する。
なお、音源18では、最大発音数と最大発音開始可能数とが定義される。最大発音数とは、波形メモリ17の全てのチャンネルエリアCH0〜CH127に波形データがロード済みの場合に同時発音可能な音の数であり、本実施形態の場合、発音チャンネルCH0〜CH127を使用することで128音となる。一方、最大発音開始可能数とは、波形メモリ17のチャンネルエリアCH0〜CH127に波形データがロードされておらず、フラッシュメモリ16から直接波形データを読み出して楽音波形Wを発生させる場合に発音開始できる音の数であり、本実施形態の場合、64音となる。
つまり、波形メモリ17のリード・ライト速度は、フラッシュメモリ16よりも高速であるから、フラッシュメモリ16から波形データを読み出して波形メモリ17にストアする際の書き込みアドレスが、発音時に波形メモリ17から波形データを読み出す読み出しアドレスを超えないことが音源18の適正発音条件となる。この条件下では、最大発音数128音に対し、半分の64音が最大発音開始可能数となる。
(2)状態テーブルTBLの構成
図3は、RAM15に設けられる状態テーブルTBLの構成を示す図である。状態テーブルTBLは、音源18の発音チャンネルCH0〜CH127毎に発音割当てされた楽音の音高を表すピッチと、発音チャンネルCH0〜CH127毎のチャンネル状態を表すフラグとを備える。チャンネル状態を表すフラグは、未使用状態を表す「dead」、ロード発音中を表す「stream」およびループ再生中を表す「loop」からなる。
なお、ここで言うロード発音中とは、サンプルローダ処理(後述する)がフラッシュメモリ16から読み出した波形データを波形メモリ17のチャンネルエリアCH(図2参照)に書き込む一方、音源処理(後述する)がそのチャンネルエリアCHのスタートアドレスSADからエンドアドレスEADまでの波形データを読み出して波形再生する期間を指す。また、ループ再生中とは、波形読み出しがエンドアドレスEADに達した後にループアドレスLADに戻り、以後、ループアドレスLADからエンドアドレスEADまでの波形データを繰り返し読み出す期間を指す。
また、状態テーブルTBLは、音源18の発音チャンネルCH0〜CH127に各々対応付けられた波形メモリ17のチャンネルエリアCH0〜CH127に格納される波形データの音色を表す波形番号TONE、この波形番号TONEで指定される音色の波形データ(アタック波形データおよびループ波形データ)の格納位置を表すスタートアドレスSAD、ループアドレスLADおよびエンドアドレスEADを記憶する。
このように、状態テーブルTBLは、音源18の発音チャンネルCH0〜CH127の発音属性(ピッチ、フラグ)を表すと共に、これら発音チャンネルCH0〜CH127に対応付けられた波形メモリ17のチャンネルエリアCH0〜CH127の波形属性(波形番号TONE、スタートアドレスSAD、ループアドレスLADおよびエンドアドレスEAD)を表すようになっている。そして、状態テーブルTBLの内容は、後述するように、CPU13がマルチタスクにより並列処理するメインルーチン、サンプルローダ処理およびゲートスタート/エンド処理によって随時更新される。
(3)機能構成
図4は、CPU13および音源18の機能を示すブロック図である。以下、本図を参照してCPU13がマルチタスクにより並列処理するメインルーチン、サンプルローダ処理およびゲートスタート/エンド処理の各機能と、音源18が実行する音源処理の機能とについて説明する。
a.メインルーチンの機能
メインルーチンでは、鍵盤10の押鍵操作でキーオンイベントが発生した場合に、RAM15の状態テーブルTBL(図3参照)を参照して、押鍵された鍵の音高の楽音(押鍵音と記す)の発音割当てを行い、これに応じて更新した状態テーブルTBLの内容に基づきスタートストリームコマンドおよびスタートジェネレータコマンドを生成する。
スタートストリームコマンドとは、新たに発音させる押鍵音用の波形データをフラッシュメモリ16から波形メモリ17にロードするようサンプルローダ処理に指示するコマンドである。スタートストリームコマンドは、押鍵音を割当てた発音チャンネルCH、押鍵された鍵の鍵番号で定まる波形番号TONE、押鍵音を割当てた発音チャンネルCHに対応付けられた波形メモリ17のチャンネルエリアCHのスタートアドレスSAD、ループアドレスLADおよびエンドアドレスEADを含む。スタートジェネレータコマンドは、ゲートスタート/エンド処理に対してスタートコマンドの発生を指示するコマンドであり、押鍵音を割当てた発音チャンネルCHを含む。
また、メインルーチンでは、鍵盤10の離鍵操作でキーオフイベントが発生した場合に、RAM15の状態テーブルTBLを参照して、離鍵された鍵の音高の楽音(離鍵音と記す)を消音させるストップストリームコマンドおよびストップジェレータコマンドを生成する。
ストップストリームコマンドは、フラッシュメモリ16から波形データの読み出しを停止させ、波形メモリ17への書き込みを中止するようサンプルローダ処理に指示するコマンドであり、離鍵音の発音チャンネルCHおよび離鍵された鍵の鍵番号で定まる波形番号TONEを含む。ストップジェネレータコマンドは、ゲートスタート/エンド処理に対してストップコマンドの発生を指示するコマンドであり、離鍵音の発音チャンネルCHを含む。
b.サンプルローダ処理の機能
サンプルローダ処理では、発音チャンネルCH、波形番号TONE、波形メモリ17のチャンネルエリアCHのスタートアドレスSAD、ループアドレスLADおよびエンドアドレスEADを含むスタートストリームコマンドをメインルーチンから受領した場合、波形番号TONEの波形データをフラッシュメモリ16から読み出して波形メモリ17のチャンネルエリアCHにロードする。チャンネルエリアCHのエンドアドレスEADまで波形データをロードし終えた時に、RAM15の状態テーブルTBLにおける発音チャンネルCHのフラグを「loop」に更新する。
また、サンプルローダ処理では、発音チャンネルCHおよび波形番号TONEを含むストップストリームコマンドをメインルーチンから受領した場合、フラッシュメモリ16から波形番号TONEの波形データの読み出しを停止させ、波形メモリ17のチャンネルエリアCHへの書き込みを中止する一方、RAM15の状態テーブルTBLにおける発音チャンネルCHのフラグを「dead」に更新する。
c.ゲートスタート/エンド処理の機能
ゲートスタート/エンド処理では、押鍵音を割当てた発音チャンネルCHを含むスタートジェネレータコマンドをメインルーチンから受領した場合、RAM15の状態テーブルTBLを参照して、押鍵音を割当てた発音チャンネルCHに対応する波形メモリ17のチャンネルエリアCHのスタートアドレスSAD、ループアドレスLAD、エンドアドレスEADおよびピッチを含むスタートコマンドを生成して音源18に供給する。
また、ゲートスタート/エンド処理では、離鍵音の発音チャンネルCHを含むストップジェネレータコマンドをメインルーチンから受領した場合、離鍵音の発音チャンネルCHを含むストップコマンドを生成して音源18に供給する一方、RAM15の状態テーブルTBLにおける当該発音チャンネルCHのフラグを「dead」に更新する。
d.音源処理の機能
音源18が実行する音源処理では、ゲートスタート/エンド処理からのコマンドを随時受信しており、スタートコマンドを受信した場合には、当該コマンドに含まれる波形メモリ17のチャンネルエリアCHのスタートアドレスSAD、ループアドレスLAD、エンドアドレスEADおよびピッチに基づき、波形メモリ17のチャンネルエリアCHに格納される波形データを、ピッチに応じた読み出し速度で読み出して発音チャンネルCHの楽音波形Wを生成する。こうした処理をスタートコマンドを受信した全ての発音チャンネルCHについて時分割に実行する。
B.動作
次に、図5〜図12を参照して、CPU13が実行するメインルーチン、サンプルローダ処理およびゲートスタート/エンド処理の各動作と、音源18が実行する音源処理の動作とを説明する。
(1)メインルーチンの動作
CPU13は、装置電源の投入に応じて、図5に図示するメインルーチンを実行してステップSA1に処理を進める。ステップSA1では、RAM15の状態テーブルTBL(図3参照)や、その他のレジスタ・フラグデータをリセットしたり初期値をセットするイニシャライズを行う。そして、イニシャライズ完了後、ステップSA2に進み、押離鍵操作(演奏操作)に応じて鍵盤10が発生する演奏情報(キーオン/キーオフイベントおよび鍵番号)を抽出する。
次いで、ステップSA3では、上記ステップSA2において抽出した演奏情報中に鍵イベントが有るか否か、鍵イベントが有る場合にはキーオンイベントもしくはキーオフイベントのいずれであるかを判断する。押離鍵操作が行われず、鍵イベントが発生しなければ、上記ステップSA2に処理を戻す。押鍵操作に応じたキーオンイベントが発生した場合には、ステップSA4を介して後述のノートオン処理を実行してから上記ステップSA2に処理を戻す。離鍵操作に応じたキーオフイベントが発生した場合には、ステップSA5を介して後述のノートオフ処理を実行してから上記ステップSA2に処理を戻す。
(2)ノートオン処理の動作
次に、図6〜図7を参照してノートオン処理の動作を説明する。上述したメインルーチンのステップSA4(図5参照)を介して本処理が実行されると、CPU13は図6に図示するステップSB1に進む。ステップSB1では、前述したステップSA2において抽出した演奏情報に含まれ、押鍵された鍵の鍵番号(押鍵番号と称す)に対応するピッチ(音高)を検出する。
続いて、ステップSB2では、押鍵番号に応じた波形番号TONEを検出する。すなわち、本実施の形態では、鍵盤10の各鍵域毎に異なる音色の波形番号TONEを対応付けたデータテーブル(不図示)を備えている。したがって、ステップSB2では、押鍵番号を読み出しアドレスとして、そのデータテーブルから対応する音色の波形番号TONEを読み出すようになっている。
次いで、ステップSB3では、RAM15の状態テーブルTBL(図3参照)を参照し、音源18の発音チャンネルCH0〜CH127の内からロード発音中を表す「stream」のフラグを有するチャンネル数を検出する。そして、ステップSB4では、検出したチャンネル数が最大発音開始可能数MAXより少ないか否かを判断する。つまり、現在発音中のチャンネルの数が、波形メモリ17のチャンネルエリアCH0〜CH127に波形データが格納されていない場合に発音開始できる最大音数(本実施形態の場合は64音)より少ないかどうかを判断する。以下、現在発音中のチャンネルの数が最大発音開始可能数MAXを超えていない場合と、超えている場合とに分けて動作説明を進める。
a.最大発音開始可能数MAXを超えていない場合
現在発音中のチャンネルの数が最大発音開始可能数MAXを超えていなければ、上記ステップSB4の判断結果は「YES」になり、ステップSB5に進む。ステップSB5では、RAM15の状態テーブルTBLを参照して、音源18の発音チャンネルCH0〜CH127の内から未使用状態を表す「dead」のフラグを有するチャンネルを検索する。次いで、ステップSB6では、該当する発音チャンネル(現在未使用の発音チャンネル)の有無を判断する。以下、未使用の発音チャンネルが有る場合と、無い場合とに分けて動作を説明する。
<未使用の発音チャンネルが有る場合>
未使用の発音チャンネルが有ると、上記ステップSB6の判断結果は「YES」になり、図7に図示するステップSB7に進み、現在未使用のチャンネル番号をレジスタCH(以下、チャンネル番号CHと記す)にストアする。次いで、ステップSB8では、チャンネル番号CHで指定されるRAM15の状態テーブルTBL中の発音チャンネルCHのフラグを「steram」にセットする。続いて、ステップSB9では、チャンネル番号CHで指定されるRAM15の状態テーブルTBL中の発音チャンネルCHの波形番号として、上記ステップSB2(図6参照)にて検出した波形番号TONEをセットする。これにより、現在未使用の発音チャンネルに波形番号TONEの押鍵音が発音割当てされる。
こうして、押鍵音の発音割当てが行われると、CPU13はステップSB10に進み、新たに発音させる押鍵音用の波形データをフラッシュメモリ16から波形メモリ17にロードするようサンプルローダ処理に指示するスタートストリームコマンドを発生する。なお、上述したように、スタートストリームコマンドは、押鍵音を割当てた発音チャンネルCH、押鍵された鍵の鍵番号で定まる波形番号TONE、押鍵音を割当てた発音チャンネルCHに対応付けられた波形メモリ17のチャンネルエリアCHのスタートアドレスSAD、ループアドレスLADおよびエンドアドレスEADを含む。続いて、ステップSB11では、ゲートスタート/エンド処理に対してスタートコマンドの発生を指示するコマンドであって、押鍵音を割当てた発音チャンネルCHを含むスタートジェネレータコマンドを発生させた後、本処理を終える。
このように、現在発音中のチャンネルの数が最大発音開始可能数MAXを超えておらず、しかも未使用の発音チャンネルが存在する場合には、その未使用の発音チャンネルに押鍵音の発音を割当て、この割当てに応じてRAM15の状態テーブルTBLを更新すると共に、新たに発音させる押鍵音用の波形データをフラッシュメモリ16から波形メモリ17にロードするようサンプルローダ処理に指示するスタートストリームコマンドと、ゲートスタート/エンド処理に対してスタートコマンドの発生を指示するスタートジェネレータコマンドとを生成する。
<未使用の発音チャンネルが無い場合>
一方、未使用の発音チャンネルが無ければ、図6に図示したステップSB6の判断結果は「NO」になり、図7に図示するステップSB12に進む。ステップSB12では、RAM15の状態テーブルTBLを参照して、音源18の発音チャンネルCH0〜CH127の内からループ再生中を表す「loop」のフラグを有するチャンネルを検索する。次いで、ステップSB6では、該当する発音チャンネル(ループ再生中の発音チャンネル)の有無を判断する。ループ再生中の発音チャンネルが有れば、ここでの判断結果は「YES」になり、ステップSB14に進む。
ステップSB14では、ループ再生中の発音チャンネルの番号をレジスタCHにストアする。そして、ステップSB15では、ループ再生中の発音チャンネルCHを含むストップジェネレータコマンドを発生する。これにより、後述するゲートスタート/エンド処理がストップコマンドを発生して音源18に供給するので、音源18はループ再生中の発音チャンネルCHを消音する。
ループ再生中の発音チャンネルCHを一旦消音させると、CPU13は前述したステップSB8〜SB11を実行して、その消音させた発音チャンネルに新たに押鍵音の発音を割当て、それに応じてRAM15の状態テーブルTBLを更新すると共に、新たに発音させる押鍵音用の波形データをフラッシュメモリ16から波形メモリ17にロードするようサンプルローダ処理に指示するスタートストリームコマンドと、ゲートスタート/エンド処理に対してスタートコマンドの発生を指示するスタートジェネレータコマンドとを生成して本処理を終える。
一方、ループ再生中の発音チャンネルが無ければ、上記ステップSB13(図7参照)の判断結果は「NO」になり、図6に図示するステップSB16以降を実行する。ステップSB16以降は、現在発音中のチャンネルの数が最大発音開始可能数MAXを超えている場合の動作と同一である。したがって、ステップSB16以降の動作については、最大発音開始可能数MAXを超えている場合の動作の説明に譲る。
b.最大発音開始可能数MAXを超えている場合
現在発音中のチャンネルの数が最大発音開始可能数MAXを超えていると、前述したステップSB4の判断結果が「NO」になり、ステップSB16に進む。また、最大発音開始可能数MAXを超えていない場合であっても、現在未使用の発音チャンネルが無く、かつループ再生中の発音チャンネルも無ければ、上記ステップSB13の判断結果が「NO」になり、ステップSB16に進む。
ステップSB16以降では、周知の後着優先によるトランケートを行う。すなわち、ステップSB16では、RAM15の状態テーブルTBLを参照して、音源18の発音チャンネルCH0〜CH127の内から最古の「stream」のフラグを有する発音チャンネルの番号を検索する。そして、ステップSB17に進み、最古の「stream」のフラグを有する発音チャンネルの番号をレジスタCHにストアする。
次いで、ステップSB18では、最古の「stream」のフラグを有する発音チャンネルCHと、当該発音チャンネルCHに割当てられた波形番号TONEをとを含むストップストリームコマンドを発生する。これにより、後述するサンプルローダ処理は、フラッシュメモリ16から波形番号TONEの波形データの読み出しを停止させ、波形メモリ17のチャンネルエリアCHへの書き込みを中止する。
この後、図7に図示するステップSB15に進み、最古の「stream」のフラグを有する発音チャンネルCHを含むストップジェネレータコマンドを発生する。そうすると、後述するゲートスタート/エンド処理がストップコマンドを発生して音源18に供給するので、音源18は最古の「stream」のフラグを有する発音チャンネルCHの発音を停止させる。
こうして、最古の「stream」のフラグを有する発音チャンネルCHを一旦消音させると、CPU13は前述したステップSB8〜SB11を実行して、その消音させた発音チャンネルCHに新たな押鍵音の発音を割当て、これに応じてRAM15の状態テーブルTBLを更新すると共に、新たに発音させる押鍵音用の波形データをフラッシュメモリ16から波形メモリ17にロードするようサンプルローダ処理に指示するスタートストリームコマンドと、ゲートスタート/エンド処理に対してスタートコマンドの発生を指示するスタートジェネレータコマンドとを生成して本処理を完了させる。
(3)ノートオフ処理の動作
次に、図8を参照してノートオフ処理の動作を説明する。前述したメインルーチンのステップSA5(図5参照)を介して本処理が実行されると、CPU13は図7に図示するステップSC1に処理を進め、離鍵された鍵の鍵番号(離鍵番号と称す)に対応するピッチ(音高)を検出する。なお、離鍵番号は前述したステップSA2(図5参照)において抽出した演奏情報に含まれる。続いて、ステップSC2では、上記ステップSC1にて検出したピッチを有する発音チャンネルの番号をRAM15の状態テーブルTBL(図3参照)から検索する。
そして、ステップSC3では、その検索した発音チャンネルの番号をレジスタCH(チャンネル番号CH)にストアし、続くステップSC4では、RAM15の状態テーブルTBLを参照して、音源18の発音チャンネルCH0〜CH127の内でチャンネル番号CHで指定される発音チャンネルCHのフラグが、ロード発音中を表す「stream」もしくはループ再生中を表す「loop」のいずれであるかを判断する。発音チャンネルCHのフラグが「stream」ならば、ステップSC5に進む。
ステップSC5では、チャンネル番号CH(「stream」のフラグを有する発音チャンネルCH)と、当該発音チャンネルCHに割当てられた波形番号TONEとを含むストップストリームコマンドを発生する。これにより、後述するサンプルローダ処理は、フラッシュメモリ16から波形番号TONEの波形データの読み出しを停止させ、波形メモリ17のチャンネルエリアCHへの書き込みを中止する。
次いで、ステップSC6では、チャンネル番号CH(「stream」のフラグを有する発音チャンネルCH)を含むストップジェネレータコマンドを発生する。これにより、後述するゲートスタート/エンド処理がストップコマンドを発生して音源18に供給して発音を停止させる。そして、ステップSC7では、発音停止に伴い、チャンネル番号CHで指定されるRAM15の状態テーブルTBL中の発音チャンネルCHのフラグを「dead」にセットして本処理を終える。
一方、チャンネル番号CHで指定される発音チャンネルCHのフラグがループ再生中を表す「loop」であると、上記ステップSC4からステップSC6に進み、チャンネル番号CH(「loop」のフラグを有する発音チャンネルCH)を含むストップジェネレータコマンドを発生して音源18に発音停止を指示する。そして、ステップSC7において、チャンネル番号CHで指定されるRAM15の状態テーブルTBL中の発音チャンネルCHのフラグを「dead」にセットして本処理を終える。
このように、ノートオフ処理では、離鍵された鍵の音高に対応する発音チャンネルCHをRAM15の状態テーブルTBLを参照して検索し、該当する発音チャンネルCHがロード発音中を表す「stream」あるいはループ再生中を表す「loop」のいずれであるかを判断する。そして、ロード発音中ならば、ストップストリームコマンドを発生してフラッシュメモリ16から波形番号TONEの波形データの読み出しを停止させると共に、波形メモリ17のチャンネルエリアCHへの書き込みを中止させてからストップジェネレータコマンドを発生して音源18に発音停止を指示した後、RAM15の状態テーブルTBL中の該当発音チャンネルCHのフラグを「dead」にセットして未使用状態に設定する。一方、ループ再生中の場合には、ストップジェネレータコマンドを発生して音源18に発音停止を指示した後、RAM15の状態テーブルTBL中の該当発音チャンネルCHのフラグを「dead」にセットして未使用状態に設定する。
(4)サンプルローダ処理の動作
CPU13は、装置電源の投入に応じて、図9に図示するサンプルローダ処理を実行してステップSD1に処理を進め、本処理に用いる各種レジスタを初期化するイニシャライズを行う。そして、イニシャライズが完了すると、ステップSD2に進み、上述したメインルーチンからのコマンドを受信するまで待機する。コマンドを受信すると、上記ステップSD2の判断結果は「YES」になり、ステップSD3以降に処理を進める。ステップSD3以降では、受信したコマンド種類の応じた処理を実行する。以下、スタートストリームコマンドを受信した場合と、ストップストリームコマンドを受信した場合とに分けて動作を説明する。
<スタートストリームコマンドを受信した場合>
発音チャンネルCH、波形番号TONE、波形メモリ17のチャンネルエリアCHのスタートアドレスSAD、ループアドレスLADおよびエンドアドレスEADを含むスタートストリームコマンドを受信すると、ステップSD3の判断結果が「YES」になり、ステップSD4に進む。ステップSD4では、フラッシュメモリ16から波形番号TONEの波形データを読み出す。次いで、ステップSD5では、フラッシュメモリ16から読み出した波形番号TONEの波形データを、波形メモリ17のチャンネルエリアCHに書き込む。
続いて、ステップSD6では、波形メモリ17のチャンネルエリアCHのエンドアドレスEADまで波形データを書き込み終えたか否かを判断する。エンドアドレスEADまで書き込み終えていなければ、判断結果は「NO」になり、上記ステップSD4に処理を戻す。以後、波形データをエンドアドレスEADまで書き込み終える迄、上述したステップSD4〜SD6を繰り返す。
そして、波形メモリ17のチャンネルエリアCHのエンドアドレスEADまで波形番号TONEの波形データを書き込み終えると、上記ステップSD6の判断結果が「YES」になり、ステップSD7に進む。ステップSD7では、RAM15の状態テーブルTBLにおける発音チャンネルCHのフラグを「loop」に更新した後、上記ステップSD2のコマンド受信待ちの状態に復帰する。
<ストップストリームコマンドを受信した場合>
発音チャンネルCHおよび波形番号TONEを含むストップストリームコマンドを受信すると、ステップSD8の判断結果が「YES」になり、ステップSD9に進み、フラッシュメモリ16から波形番号TONEの波形データの読み出しを停止させ、続くステップSD10では、波形メモリ17のチャンネルエリアCHへの書き込みを中止する。そして、ステップSD11に進み、RAM15の状態テーブルTBLにおける発音チャンネルCHのフラグを「dead」に更新した後、上記ステップSD2のコマンド受信待ちの状態に復帰する。
(5)ゲートスタート/エンド処理の動作
CPU13は、装置電源の投入に応じて、図10に図示するゲートスタート/エンド処理を実行してステップSE1に処理を進め、本処理に用いる各種レジスタを初期化するイニシャライズを行う。そして、イニシャライズが完了すると、ステップSE2に進み、上述したメインルーチンからのコマンドを受信するまで待機する。コマンドを受信すると、上記ステップSE2の判断結果が「YES」になり、ステップSE3以降に処理を進める。ステップSE3以降では、受信したコマンド種類の応じた処理を実行する。以下、スタートジェネレータコマンドを受信した場合と、ストップジェネレータコマンドを受信した場合とに分けて動作を説明する。
<スタートジェネレータコマンドを受信した場合>
押鍵音を割当てた発音チャンネルCHを含むスタートジェネレータコマンドを受信すると、ステップSE3の判断結果が「YES」になり、ステップSE4に進む。ステップSE4では、RAM15の状態テーブルTBLを参照して、押鍵音を割当てた発音チャンネルCHに対応する波形メモリ17のチャンネルエリアCHのスタートアドレスSAD、ループアドレスLAD、エンドアドレスEADおよびピッチを含むスタートコマンドを生成して音源18に送付した後、上記ステップSE2に処理を戻し、コマンド受信待ちの状態に復帰する。
<ストップジェネレータコマンドを受信した場合>
離鍵音の発音チャンネルCHを含むストップジェネレータコマンドを受信すると、ステップSE5の判断結果が「YES」になり、ステップSE6に進む。ステップSE6では、離鍵音の発音チャンネルCHを含むストップコマンドを生成して音源18に送付し、続くステップSE7では、RAM15の状態テーブルTBLにおける当該発音チャンネルCHのフラグを「dead」に更新した後、上記ステップSE2に処理を戻し、コマンド受信待ちの状態に復帰する。
(6)音源処理の動作
音源18は、装置電源の投入に応じて、図11に図示する音源処理を実行してステップSF1に処理を進め、本処理に用いる各種レジスタを初期化するイニシャライズを行う。そして、イニシャライズが完了すると、ステップSF2に進み、上述したゲートスタート/エンド処理(図10参照)からのコマンドを受信した否かを判断する。コマンドを受信すると、上記ステップSF2の判断結果は「YES」になり、ステップSF3以降に処理を進める。ステップSF3以降では、受信したコマンド種類の応じた処理を実行する。以下、スタートコマンドを受信した場合と、ストップコマンドを受信した場合とに分けて動作を説明する。
<スタートコマンドを受信した場合>
発音割当てした発音チャンネルCHに対応する波形メモリ17のチャンネルエリアCHのスタートアドレスSAD、ループアドレスLAD、エンドアドレスEADおよびピッチを含むスタートコマンドをゲートスタート/エンド処理から受信すると、ステップSF3の判断結果が「YES」になり、ステップSF4に進む。ステップSF4では、発音チャンネルCHに対応するオンフラグON(CH)に「1」をセットして、当該発音チャンネルCHの発音を表す。
次いで、ステップSF5では、受信したスタートコマンドから抽出したスタートアドレスSADを、発音チャンネルCHの読み出しアドレスAD(CH)に設定する。また、受信したスタートコマンドから抽出したループアドレスLADを、発音チャンネルCHのループアドレスLAD(CH)に設定する。さらに、受信したスタートコマンドから抽出したエンドアドレスEADを、発音チャンネルCHのエンドアドレスEAD(CH)に設定する。続いて、ステップSF6では、受信したスタートコマンドから抽出したピッチに対応するアドレス増加分をレジスタΔAD(CH)にストアした後、後述するステップSF9に進む。
<ストップコマンドを受信した場合>
一方、離鍵音の発音チャンネルCHを含むストップコマンドをゲートスタート/エンド処理から受信すると、ステップSF7の判断結果が「YES」になり、ステップSF8に進み、発音チャンネルCHに対応するオンフラグON(CH)をゼロリセットして、当該発音チャンネルCHの消音を表す。この後、ステップSF9に進む。
そして、ステップSF9では、発音チャンネルを指定するポインタnをゼロリセットし、続くステップSF10では、ポインタnで指定される発音チャンネルnのオンフラグON(n)が「1」、つまり発音割当てされた発音チャンネルnにおいて楽音波形を発生させるnチャンネル処理(後述する)を実行する。この後、ステップSF11に進み、ポインタnをインクリメントして歩進させる。次いで、ステップSF12では、歩進されたポインタnの値が最大発音数を超えているか否かを判断する。
歩進されたポインタnの値が最大発音数を超えていなければ、上記ステップSF12の判断結果は「NO」になり、上述のステップSF10に処理を戻す。以後、歩進されたポインタnの値が最大発音数を超えるまでステップSF10〜SF12を繰り返す。そして、歩進されたポインタnの値が最大発音数を超えると、ステップSF12の判断結果が「YES」になり、上述のステップSF2に処理を戻す。そして、ステップSF2において、ゲートスタート/エンド処理からのコマンドを受信しなければ、判断結果が「NO」になり、上記ステップSF9以降を実行して、発音割当てされた各発音チャンネルn毎の楽音波形を生成させるようになっている。
(7)nチャンネル処理の動作
次に、図12を参照してnチャンネル処理の動作を説明する。上述した音源処理のステップSF10(図11参照)を介して本処理が実行されると、音源18は図12に図示するステップSG1に進み、ポインタnで指定される発音チャンネルnのオンフラグON(n)が「1」、つまり発音割当てされた発音チャンネルnであるかどうかを判断する。ここで、オンフラグON(n)が「0」、つまり消音する発音チャンネルnならば、判断結果は「NO」となり、何も行わずに本処理を終える。
一方、発音割当てされた発音チャンネルnならば、上記ステップSG1の判断結果は「YES」になり、ステップSG2に進む。ステップSG2では、ポインタnで指定される発音チャンネルnの読み出しアドレスAD(n)に応じて、波形メモリ17のチャンネルエリアnから波形データを読み出し、続くステップSG3では、読み出した波形データに基づいて楽音波形Wを生成して出力する。そして、ステップSG4では、ピッチに対応するアドレス増加分ΔAD(n)を加算して読み出しアドレスAD(n)を更新する。
次いで、ステップSG5では、更新された読み出しアドレスAD(n)がエンドアドレスEAD(n)に達したか否かを判断する。読み出しアドレスAD(n)がエンドアドレスEAD(n)に達していなければ、判断結果は「NO」になり、本処理を終える。
これに対し、更新された読み出しアドレスAD(n)がエンドアドレスEAD(n)に達していると、上記ステップSG5の判断結果が「YES」になり、ステップSG6に進み、読み出しアドレスAD(n)をループアドレスLAD(n)に設定して本処理を終える。これにより、発音チャンネルnでは、ループアドレスLAD(n)からエンドアドレスEAD(n)の間の波形データを繰り返し読み出して楽音波形Wを生成するループ再生が行われる。
以上のように、本実施の形態では、キーオンイベントに応じて、メインルーチンがRAM15の状態テーブルTBL(図3参照)を参照して押鍵音の発音割当てを行ってスタートストリームコマンドおよびスタートジェネレータコマンドを発生する。そうすると、スタートストリームコマンドを受信したサンプルローダ処理が、波形番号TONEの波形データをフラッシュメモリ16から読み出して波形メモリ17のチャンネルエリアCHにストアする。これと同時に、スタートジェネレータコマンドを受信したゲートスタート/エンド処理が、押鍵音を割当てた発音チャンネルCHに対応する波形メモリ17のチャンネルエリアCHのスタートアドレスSAD、ループアドレスLAD、エンドアドレスEADおよびピッチを含むスタートコマンドを音源18に送付する。そして、スタートコマンドを受信した音源18の音源処理が、受信したスタートコマンドに含まれるパラメータに従って波形メモリ17のチャンネルエリアCHに格納される波形データを、ピッチに応じた読み出し速度で読み出して発音チャンネルCHの楽音波形Wを生成する。
つまり、フラッシュメモリ16から読み出した波形データを波形メモリ17にロードすると同時に、当該波形メモリ17にロードした波形データを再生して楽音波形Wを生成するので、フラッシュメモリからRAM(波形メモリ)に波形データをロードする際のロード待ち時間を無くし、これにより、フラッシュメモリに格納する波形データの大容量化に伴ってロード待ち時間が増大して発音資源(発音チャンネル)の使用効率が低下するという弊害を回避する結果、性能劣化を引き起こすことなく波形データの大容量化に対応することが出来る。
なお、上述した実施形態では、CPU13がマルチタスクによりメインルーチン、サンプルローダ処理およびゲートスタート/エンド処理を並列処理するようにしたが、これに替えて、CPU13ではメインルーチンのみを実行し、音源18側でサンプルローダ処理、ゲートスタート/エンド処理および音源処理を並列処理する態様としても構わない。そのような態様としても、フラッシュメモリ16から読み出した波形データを波形メモリ17にロードすると同時に、当該波形メモリ17にロードした波形データを再生して楽音波形Wを生成し得るようになる。
[第2実施形態]
上述した第1実施形態では、複数の鍵域に分割された鍵盤10の各鍵域毎にそれぞれ異なる波形番号TONEの音色の波形データを割当てておき、同一鍵域で異なる音高(鍵番号)の鍵が連続して押鍵されると、同じ音色の波形データであっても、押鍵音毎にフラッシュメモリ16から波形メモリ17にロードするようにした。こうした波形ロードの重複は、発音資源(発音チャンネル)の使用効率低下を招く。
そこで、第2実施形態では、同じ鍵域で異なる押鍵音が連続する場合、すなわち同一音色の発音が連続する場合に、最初の押鍵音を発音させるべくフラッシュメモリ16から波形メモリ17にロードした波形データを、次の押鍵音の発音にも使用してロード済み波形データの共用を図ることによって、発音資源(発音チャンネル)の使用効率低下を回避する。
第2実施形態の構成が第1実施形態と相違する点は、波形チャンネルCH0〜CH127を有する波形メモリ17を備えると共に、それら波形チャンネルCH0〜CH127毎に設けられ、各波形チャンネル毎の使用状態を表すセマフォカウンタを有することにある。セマフォカウンタは「0」の場合に対応する波形チャンネルの未使用状態を表し、「1」の場合に使用状態(波形ロード)を表し、「2」の場合に波形共有状態を表す。
また、上述した第1実施形態では、RAM15に設けられる状態テーブルTBLが、音源18の発音チャンネルCH0〜CH127の発音属性(ピッチ、フラグ)を表すと共に、これら発音チャンネルCH0〜CH127に対応付けられた波形メモリ17のチャンネルエリアCH0〜CH127の波形属性(波形番号TONE、スタートアドレスSAD、ループアドレスLADおよびエンドアドレスEAD)を表すようにしたが、第2実施形態による状態テーブルTBLは、波形チャンネルCH0〜CH127の発音属性(ピッチ、フラグ)および波形属性(波形番号TONE、スタートアドレスSAD、ループアドレスLADおよびエンドアドレスEAD)を表す。
以下では、セマフォカウンタを設けたことによって第1実施形態と相違する、第2実施形態によるノートオン処理およびノートオフ処理の各動作について説明する。なお、これ以外の他の処理(メインルーチン、サンプルローダ処理、ゲートスタート/エンド処理および音源処理)は第1実施形態と共通するので、それらの動作の説明については省略する。
(1)ノートオン処理の動作
次に、図13〜図15を参照して第2実施形態によるノートオン処理の動作を説明する。前述した第1実施形態と同様、メインルーチンのステップSA4(図5参照)を介して本処理が実行されると、CPU13は図13に図示するステップSH1に処理を進め、押鍵された鍵の鍵番号(押鍵番号と称す)に対応するピッチ(音高)を検出する。
続いて、ステップSH2では、押鍵番号に応じた波形番号TONEを検出する。すなわち、本実施の形態では、鍵盤10の各鍵域毎に異なる音色の波形番号TONEを対応付けたデータテーブル(不図示)を備えている。したがって、ステップSH2では、押鍵番号を読み出しアドレスとして、そのデータテーブルから対応する音色の波形番号TONEを読み出す。
次いで、ステップSH3では、RAM15の状態テーブルTBL(図3参照)を参照して、波形チャンネルCH0〜CH127の内、上記ステップSH2において検出した波形番号TONEと同じ波形番号(音色)の波形データが割当てられた波形チャンネルを検索する。そして、ステップSH4では、検索結果に基づき同一波形番号の有無を判断する。以下、同一波形番号が有る場合と、無い場合とに分けて動作を説明する。
a.同一波形番号が有る場合
同一波形番号が有ると、上記ステップSH4の判断結果が「YES」になり、ステップSH5に進む。ステップSH5では、上記ステップSH2において検出した波形番号TONEと同じ波形番号の波形データが割当てられた波形チャンネルの番号をRAM15の状態テーブルTBLから抽出してレジスタCH(チャンネル番号CHと記す)にストアする。続いて、ステップSH6では、チャンネル番号CHに対応して設けられるセマフォカウンタをインクリメントする。
次いで、ステップSH7では、RAM15の状態テーブルTBLにおいてチャンネル番号CHで指定されるフラグを「loop」に更新する。そして、ステップSH8に進み、ゲートスタート/エンド処理に対してスタートコマンドの発生を指示するコマンドであって、押鍵音を割当てた波形チャンネルCHを含むスタートジェネレータコマンドを発生させた後、本処理を終える。これにより、先の押鍵音と同じ音色の新たな押鍵音がループ再生されるから、フラッシュメモリ16から波形メモリ17にロード済みの波形データを共用できるようになる。
b.同一波形番号が無い場合
一方、同一波形番号が無ければ、上述したステップSH4の判断結果が「NO」になり、CPU13は図14に図示するステップSH9に進む。ステップSH9では、セマフォカウンタの値が「0」の波形チャンネル、すなわち未使用状態の波形チャンネルを検索する。次いで、ステップSH10では、検索結果に基づき未使用状態の波形チャンネルの有無を判断する。以下、未使用状態の波形チャンネルが有る場合と、無い場合とに分けて動作の説明を進める。
<未使用状態の波形チャンネルが有る場合>
未使用状態の波形チャンネルが有ると、上記ステップSH10の判断結果は「YES」になり、ステップSH11に進み、該当する波形チャンネルの番号をレジスタCH(チャンネル番号CH)にストアする。次いで、ステップSH12では、チャンネル番号CHで指定されるRAM15の状態テーブルTBL中の波形チャンネルCHのフラグを「steram」にセットする。続いて、ステップSH13では、チャンネル番号CHで指定されるRAM15の状態テーブルTBL中の波形チャンネルCHの波形番号として、上記ステップSH2(図13参照)にて検出した波形番号TONEをセットする。これにより、現在未使用の波形チャンネルに波形番号TONEの押鍵音が発音割当てされる。
こうして、押鍵音の発音割当てが行われると、CPU13はステップSH14に進み、波形チャンネルCHのセマフォカウンタに「1」をセットして当該波形チャンネルCHが使用状態であることを表す。そして、ステップSH15では、新たに発音させる押鍵音用の波形データをフラッシュメモリ16から波形メモリ17にロードするようサンプルローダ処理に指示するスタートストリームコマンドを発生し、続くステップSH16では、ゲートスタート/エンド処理に対してスタートコマンドの発生を指示するコマンドであって、押鍵音を割当てた発音チャンネルCHを含むスタートジェネレータコマンドを発生させた後、本処理を終える。
<未使用状態の波形チャンネルが無い場合>
一方、未使用状態の波形チャンネルが無ければ、上記ステップSH10の判断結果は「NO」になり、図15に図示するステップSH17に進む。ステップSH17では、RAM15の状態テーブルTBLを参照して、波形チャンネルCH0〜CH127の内からロード発音中を表す「stream」のフラグを有する波形チャンネルの数を検出する。そして、ステップSH18では、検出した波形チャンネルの数が最大発音開始可能数MAXより少ないか否かを判断する。
発音中の波形チャンネルの数が最大発音開始可能数MAXより少なければ、上記ステップSH18の判断結果は「YES」になり、ステップSH19に進む。ステップSH19では、RAM15の状態テーブルTBLを参照して、波形チャンネルCH0〜CH127の内からループ再生中を表す「loop」のフラグを有する波形チャンネルを検索する。次いで、ステップSH20では、該当する波形チャンネル(ループ再生中の波形チャンネル)の有無を判断する。
ループ再生中の波形チャンネルが有れば、上記ステップSH20の判断結果は「YES」になり、ステップSH21に進む。ステップSH21では、ループ再生中の波形チャンネルCHを含むストップジェネレータコマンドを発生する。これにより、ゲートスタート/エンド処理がストップコマンドを発生して音源18に供給するので、音源18はループ再生中の発音チャンネルCHを消音する。
こうして、ループ再生中の発音チャンネルCHを一旦消音させると、CPU13は上述したステップSH12〜SH16(図14参照)を実行して、その消音させた波形チャンネルに新たに押鍵音の発音を割当て、それに応じてRAM15の状態テーブルTBLを更新すると共に、セマフォカウンタを「1」にセットした後、新たに発音させる押鍵音用の波形データをフラッシュメモリ16から波形メモリ17にロードするようサンプルローダ処理に指示するスタートストリームコマンドと、ゲートスタート/エンド処理に対してスタートコマンドの発生を指示するスタートジェネレータコマンドとを生成して本処理を完了させる。
これに対し、ループ再生中の波形チャンネルが無い場合には、上記ステップSH20(図15参照)の判断結果が「NO」になり、ステップSH22に進む。ステップSH22以降は、現在発音中の波形チャンネルの数が最大発音開始可能数MAXを超えている場合の動作と同一である。したがって、ステップSH22以降の動作については、最大発音開始可能数MAXを超えている場合の動作の説明に譲る。
さて、現在発音中の波形チャンネルの数が最大発音開始可能数MAXを超えている場合には、前述したステップSH18の判断結果が「NO」になり、ステップSH22に進む。また、最大発音開始可能数MAXを超えていない場合であっても、未使用状態の波形チャンネルが無く、かつループ再生中の波形チャンネルも無い場合には、上記ステップSH20の判断結果が「NO」になり、ステップSH22に進む。
ステップSH22以降では、周知の後着優先によるトランケートを行う。すなわち、ステップSH22では、RAM15の状態テーブルTBLを参照して、波形チャンネルCH0〜CH127の内から最古の「stream」のフラグを有する波形チャンネルの番号を検索する。そして、ステップSH23に進み、最古の「stream」のフラグを有する発音チャンネルの番号をレジスタCHにストアする。
次いで、ステップSH24では、最古の「stream」のフラグを有する波形チャンネルCHと、当該波形チャンネルCHに割当てられた波形番号TONEをとを含むストップストリームコマンドを発生する。これにより、サンプルローダ処理は、フラッシュメモリ16から波形番号TONEの波形データの読み出しを停止させ、波形メモリ17の波形チャンネルCHへの書き込みを中止する。
この後、ステップSH21に進み、最古の「stream」のフラグを有する波形チャンネルCHを含むストップジェネレータコマンドを発生する。そうすると、ゲートスタート/エンド処理がストップコマンドを発生して音源18に供給するので、音源18は最古の「stream」のフラグを有する波形チャンネルCHの発音を停止させる。
最古の「stream」のフラグを有する波形チャンネルCHを一旦消音させると、CPU13は前述したステップSH12〜SH16(図14参照)を実行して、その消音させた波形チャンネルに新たに押鍵音の発音を割当て、それに応じてRAM15の状態テーブルTBLを更新すると共に、セマフォカウンタを「1」にセットした後、新たに発音させる押鍵音用の波形データをフラッシュメモリ16から波形メモリ17にロードするようサンプルローダ処理に指示するスタートストリームコマンドと、ゲートスタート/エンド処理に対してスタートコマンドの発生を指示するスタートジェネレータコマンドとを生成して本処理を完了させる。
(2)ノートオフ処理の動作
次に、図16を参照して第2実施形態によるノートオフ処理の動作を説明する。前述した第1実施形態と同様、メインルーチンのステップSA5(図5参照)を介して本処理が実行されると、CPU13は図16に図示するステップSJ1に処理を進め、離鍵された鍵の鍵番号(離鍵番号と称す)に対応するピッチ(音高)を検出する。続いて、ステップSJ2では、上記ステップSJ1にて検出したピッチを有する波形チャンネルの番号をRAM15の状態テーブルTBLから検索する。
そして、ステップSJ3では、その検索した波形チャンネルの番号をレジスタCH(チャンネル番号CH)にストアし、続くステップSJ4では、RAM15の状態テーブルTBLを参照して、チャンネル番号CHで指定される波形チャンネルCHのフラグが、ロード発音中を表す「stream」もしくはループ再生中を表す「loop」のいずれであるかを判断する。以下、フラグが「stream」の場合と、「loop」の場合とに分けて動作を説明する。
<フラグが「stream」の場合>
波形チャンネルCHのフラグが「stream」であると、ステップSJ5に進み、チャンネル番号CH(「stream」のフラグを有する波形チャンネルCH)と、当該波形チャンネルCHに割当てられた波形番号TONEとを含むストップストリームコマンドを発生する。これにより、サンプルローダ処理は、フラッシュメモリ16から波形番号TONEの波形データの読み出しを停止させ、波形メモリ17の波形チャンネルCHへの書き込みを中止する。次いで、ステップSJ6では、チャンネル番号CH(「stream」のフラグを有する波形チャンネルCH)を含むストップジェネレータコマンドを発生した後、ステップSJ7に進む。これにより、ゲートスタート/エンド処理がストップコマンドを発生して音源18に供給して発音を停止させる。
<フラグが「loop」の場合>
一方、波形チャンネルCHのフラグがループ再生中を表す「loop」ならば、ステップSJ6に進み、チャンネル番号CH(「loop」のフラグを有する波形チャンネルCH)を含むストップジェネレータコマンドを発生して音源18に発音停止を指示した後、ステップSJ7に進む。
ステップSJ7では、波形チャンネルCHのセマフォカウンタをデクリメントし、続くステップSJ8では、デクリメントされたセマフォカウンタの値が「0」、すなわち未使用状態になったかどうかを判断する。未使用状態でなければ、判断結果は「NO」となり、そのまま本処理を完了させる。これに対し、未使用状態になると、上記ステップSJ8の判断結果が「YES」になり、ステップSJ9に進み、RAM15の状態テーブルTBLの波形チャンネルCHのフラグを「dead」にセットして本処理を終える。
以上のように、第2実施形態では、同じ鍵域で異なる押鍵音が連続する場合(同一音色の発音が連続する場合)に、最初の押鍵音を発音させるべくフラッシュメモリ16から波形メモリ17にロードした波形データを、次の押鍵音の発音にも使用してロード済みの波形データの共用を図るので、波形ロードに要する時間を省いて発音資源(発音チャンネル)の使用効率低下を回避し得る。
[第3実施形態]
前述の第1実施形態では、フラッシュメモリ16から読み出した波形データを波形メモリ17にロードすると同時に、当該波形メモリ17にロードした波形データを再生して楽音波形Wを生成するが、この楽音波形Wのピッチをピッチベンダイベントに応じて制御しようとする時に、ピッチベンダイベントで指定されるピッチが高過ぎると、波形読み出し速度が波形書き込み速度を超えるアドレス競合により正しい発音が出来なくなる。そこで、第3実施形態では、そうした不都合を回避するオンタイマ処理の動作を説明する。
図17は、CPU13がタイマ割込みにて実行するオンタイマ処理の動作を示すフローチャートである。所定周期毎のタイマ割込みによりオンタイマ処理が実行されると、CPU13は図17に図示するステップSK1に進み、発生イベントを読み込む。次いで、ステップSK2では、読み込んだイベントがピッチベンダイベントであるか否かを判断する。読み込んだイベントがピッチベンダイベントでなければ、判断結果は「NO」になり、本処理を終えるが、ピッチベンダイベントであると、判断結果が「YES」となり、ステップSK3に進む。
ステップSK3では、ピッチベンダイベントに含まれるピッチ増加分ΔPitchを現在のピッチPitchに加算する。次いで、ステップSK4では、ピッチ増加分ΔPitchが加算されたピッチPitchが2オクターブを超え、かつロード発音中(stream状態)であるか否かを判断する。ピッチPitchが2オクターブを超え、かつロード発音中でなければ、上述したアドレス競合が生じない為、判断結果は「NO」になり、ステップSK6に進み、ピッチ増加分ΔPitchが加算されたピッチPitchを、対応する発音チャンネルCHのピッチとして設定して本処理を終える。
これに対し、ピッチPitchが2オクターブを超え、かつロード発音中であると、上述したアドレス競合が生じるので、上記ステップSK4の判断結果が「YES」になり、ステップSK5に進み、ピッチPitchの値を「2」に制限した後、ステップSK6に進み、その制限されたピッチPitch値「2」を対応する発音チャンネルCHのピッチとして設定して本処理を終える。
このように、第3実施形態では、波形ロード中に発音している楽音のピッチベンド量を2オクターブ以下に制限するので、波形読み出し速度が波形書き込み速度を超えるアドレス競合を回避することができる。なお、本実施形態では、波形ロード中に発音している楽音のピッチベンド量を一律に2オクターブ以下に抑制したが、これに限らず、発音チャンネルの空き具合に応じて抑制するピッチベンド量を可変させる態様としてもよい。
[変形例]
次に、第1実施形態の変形例について説明する。前述した第1実施形態では、全ての発音チャンネルがロード発音中であると、後着優先のトランケートにより新たな押鍵音の発音を割当てるようにした。したがって、短時間に同じ音色の押鍵音を連続して発音させるような場合には、音源18の最大発音数が最大発音開始可能数に制限されることも起こり得る。そこで、変形例では、図18に図示する一例のように、波形メモリ17のチャンネルエリアCHに複数のループ区間1〜3を有する波形データを格納する態様とする。
ロード発音中にある発音チャンネルの数が最大発音開始可能数MAXに達した状態で、例えばその内の最古の発音チャンネルがループ区間2の波形ロードを行っていると、ループ区間1がループ再生可能な状態となる。そこで、ループ区間2の波形ロードを中断破棄し、ロード発音中の最古の発音チャンネルを、ループ区間1をループ再生する発音チャンネルに設定する。こうすることでロード発音中のチャンネルが空くので、発音資源(発音チャンネル)の使用効率低下を回避し得るようになる。
本発明の第1実施形態の構成を示すブロック図である。 波形メモリ17の構成を示す図である。 RAM15に設けられる状態テーブルTBLの構成を示す図である。 CPU13および音源18の機能を示すブロック図である。 メインルーチンの動作を示すフローチャートである。 ノートオン処理の動作を示すフローチャートである。 ノートオン処理の動作を示すフローチャートである。 ノートオフ処理の動作を示すフローチャートである。 サンプルローダ処理の動作を示すフローチャートである。 ゲートスタート/エンド処理の動作を示すフローチャートである。 音源処理の動作を示すフローチャートである。 nチャンネル処理の動作を示すフローチャートである。 第2実施形態によるノートオン処理の動作を示すフローチャートである。 第2実施形態によるノートオン処理の動作を示すフローチャートである。 第2実施形態によるノートオン処理の動作を示すフローチャートである。 第2実施形態によるノートオフ処理の動作を示すフローチャートである。 第3実施形態のオンタイマ処理の動作を示すフローチャートである。 変形例を説明するための図である。
符号の説明
10 鍵盤
11 スイッチ部
12 表示部
13 CPU
14 プログラムROM
15 RAM
16 フラッシュメモリ
17 波形メモリ
18 音源
19 サウンドシステム

Claims (8)

  1. 各種音色の波形データを記憶する第1の波形記憶手段と、
    発音指示を発生する発音指示手段と、
    前記発音指示手段が発生する発音指示に応じて、前記第1の波形記憶手段に記憶される各種音色の波形データの内から発音割当てされた音色の波形データを読み出して第2の波形記憶手段にロードする波形ロード手段と、
    発音割当てされた音色の波形データが、前記波形ロード手段により前記第2の波形記憶手段にロードされると同時に、そのロードされた波形データを当該第2の波形記憶手段から読み出して楽音生成する楽音生成手段と
    を具備することを特徴とする楽音発生装置。
  2. 前記楽音生成手段は、第2の波形記憶手段にロードされた波形データを終端のエンドアドレスまで読み出し終えた場合、ループアドレスに遡って当該ループアドレスからエンドアドレスまでの波形データを繰り返し読み出すループ再生を行うことを特徴とする請求項1記載の楽音発生装置。
  3. 前記波形ロード手段は、同一音色の発音が連続した場合に、先の発音に際して前記第2の波形記憶手段にロードした波形データを、次の発音にも使用するよう前記楽音生成手段に指示することを特徴とする請求項1記載の楽音発生装置。
  4. 前記楽音生成手段は、同一音色の発音が連続した時に前記波形ロード手段から先の発音に際して前記第2の波形記憶手段にロードした波形データを、次の発音にも使用するよう指示された場合、当該第2の波形記憶手段にロード済みの波形データを、ループアドレスからエンドアドレスまで繰り返し読み出すループ再生を行うことを特徴とする請求項1記載の楽音発生装置。
  5. 発音指示を発生する発音指示処理と、
    前記発音指示処理が発生する発音指示に応じて、第1のメモリに記憶される各種音色の波形データの内から発音割当てされた音色の波形データを読み出して第2のメモリにロードする波形ロード処理と、
    発音割当てされた音色の波形データが、前記波形ロード処理により第2のメモリにロードされると同時に、そのロードされた波形データを当該第2のメモリから読み出して楽音生成する楽音生成処理と
    をコンピュータで実行させることを特徴とする楽音発生処理プログラム。
  6. 前記楽音生成処理は、第2のメモリにロードされた波形データを終端のエンドアドレスまで読み出し終えた場合、ループアドレスに遡って当該ループアドレスからエンドアドレスまでの波形データを繰り返し読み出すループ再生を行うことを特徴とする請求項5記載の楽音発生処理プログラム。
  7. 前記波形ロード処理は、同一音色の発音が連続した場合に、先の発音に際して第2のメモリにロードした波形データを、次の発音にも使用するよう前記楽音生成処理に指示することを特徴とする請求項5記載の楽音発生処理プログラム。
  8. 前記楽音生成処理は、同一音色の発音が連続した時に前記波形ロード処理から先の発音に際して第2のメモリにロードした波形データを、次の発音にも使用するよう指示された場合、当該第2のメモリにロード済みの波形データを、ループアドレスからエンドアドレスまで繰り返し読み出すループ再生を行うことを特徴とする請求項5記載の楽音発生処理プログラム。
JP2006187720A 2006-07-07 2006-07-07 楽音発生装置および楽音発生処理プログラム Pending JP2008015315A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006187720A JP2008015315A (ja) 2006-07-07 2006-07-07 楽音発生装置および楽音発生処理プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006187720A JP2008015315A (ja) 2006-07-07 2006-07-07 楽音発生装置および楽音発生処理プログラム

Publications (1)

Publication Number Publication Date
JP2008015315A true JP2008015315A (ja) 2008-01-24

Family

ID=39072377

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006187720A Pending JP2008015315A (ja) 2006-07-07 2006-07-07 楽音発生装置および楽音発生処理プログラム

Country Status (1)

Country Link
JP (1) JP2008015315A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109559717A (zh) * 2017-09-27 2019-04-02 卡西欧计算机株式会社 电子乐器、由电子乐器执行的方法及存储介质
US10373595B2 (en) 2017-03-23 2019-08-06 Casio Computer Co., Ltd. Musical sound generation device
US10475425B2 (en) 2017-03-23 2019-11-12 Casio Computer Co., Ltd. Musical sound generation device

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0519766A (ja) * 1991-07-11 1993-01-29 Roland Corp 電子楽器の補間回路
JPH06308964A (ja) * 1993-04-27 1994-11-04 Yamaha Corp 楽音形成装置
JP2000276172A (ja) * 1999-03-24 2000-10-06 Yamaha Corp 楽音生成装置および記憶媒体
JP2003208181A (ja) * 2002-01-11 2003-07-25 Roland Corp 波形再生装置
JP2005275241A (ja) * 2004-03-26 2005-10-06 Yamaha Corp 音波形合成装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0519766A (ja) * 1991-07-11 1993-01-29 Roland Corp 電子楽器の補間回路
JPH06308964A (ja) * 1993-04-27 1994-11-04 Yamaha Corp 楽音形成装置
JP2000276172A (ja) * 1999-03-24 2000-10-06 Yamaha Corp 楽音生成装置および記憶媒体
JP2003208181A (ja) * 2002-01-11 2003-07-25 Roland Corp 波形再生装置
JP2005275241A (ja) * 2004-03-26 2005-10-06 Yamaha Corp 音波形合成装置

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10373595B2 (en) 2017-03-23 2019-08-06 Casio Computer Co., Ltd. Musical sound generation device
US10475425B2 (en) 2017-03-23 2019-11-12 Casio Computer Co., Ltd. Musical sound generation device
CN109559717A (zh) * 2017-09-27 2019-04-02 卡西欧计算机株式会社 电子乐器、由电子乐器执行的方法及存储介质
CN109559717B (zh) * 2017-09-27 2022-12-30 卡西欧计算机株式会社 电子乐器、由电子乐器执行的方法及存储介质

Similar Documents

Publication Publication Date Title
JP2008015315A (ja) 楽音発生装置および楽音発生処理プログラム
JP5700351B2 (ja) 自動演奏装置およびプログラム
JP2705395B2 (ja) 電子楽器
JP2010139592A (ja) 楽音発生装置および楽音発生プログラム
JP4497025B2 (ja) 演奏装置および演奏処理のプログラム
JP2712851B2 (ja) 電子楽器
JP3554770B2 (ja) 楽音発生装置
JP4614131B2 (ja) 波形発生装置および波形発生プログラム
JP3744667B2 (ja) 自動伴奏装置および自動伴奏方法
JP3809789B2 (ja) 演奏案内装置および演奏案内方法
JP3632806B2 (ja) 演奏情報記憶装置および演奏情報記憶プログラムを記録した媒体
JP5481843B2 (ja) 楽音発生装置および楽音発生プログラム
JP3940999B2 (ja) 演奏装置および演奏方法
JP3567548B2 (ja) 演奏情報編集装置
JPH1185153A (ja) 演奏装置
JPH11119777A (ja) サンプリング装置
JP3543126B2 (ja) 自動演奏装置
JP4576565B2 (ja) 演奏装置および演奏処理のプログラム
JP3885708B2 (ja) 演奏情報編集装置、演奏情報編集方法および演奏情報編集プログラム
JPH0777983A (ja) エンベロープ発生装置
JP5605695B2 (ja) 電子楽器のレジストレーション装置およびプログラム
JP5194541B2 (ja) 演奏ガイド装置、及びプログラム
JP3533764B2 (ja) 自動伴奏装置
JP5549838B2 (ja) 再生装置およびプログラム
JP2009198657A (ja) 演奏教習装置および演奏教習プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090702

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100712

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100805

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20101130