JP2017054075A - 波形書き込み装置、方法、プログラム、及び電子楽器 - Google Patents

波形書き込み装置、方法、プログラム、及び電子楽器 Download PDF

Info

Publication number
JP2017054075A
JP2017054075A JP2015179673A JP2015179673A JP2017054075A JP 2017054075 A JP2017054075 A JP 2017054075A JP 2015179673 A JP2015179673 A JP 2015179673A JP 2015179673 A JP2015179673 A JP 2015179673A JP 2017054075 A JP2017054075 A JP 2017054075A
Authority
JP
Japan
Prior art keywords
waveform
timbre
priority
waveform data
value
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
JP2015179673A
Other languages
English (en)
Inventor
佐藤 博毅
Hirotake Sato
博毅 佐藤
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 JP2015179673A priority Critical patent/JP2017054075A/ja
Publication of JP2017054075A publication Critical patent/JP2017054075A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Electrophonic Musical Instruments (AREA)

Abstract

【課題】波形書き込み方式により楽音を発生する装置、方法、プログラム、及びその装置を用いた電子楽器に関し、複数波形の転送を伴う音色切り替えの際に、波形メモリに所望の波形が存在しないために発音できないという無音時間を大幅に短縮する。【解決手段】最新の過去所定回数の演奏情報の入力に対応して指定された波形番号の履歴が、演奏情報と共に入力している音色選択情報に対応する音色毎に音色毎履歴管理テーブルとして記憶される。指定音色に対応する波形番号毎の指定回数(頻度(回数))が音色毎履歴管理テーブルから集計される。指定音色に対応する波形データ毎の指定回数の多い順に従った優先度(読込み優先度(現在))が、指定音色に対応する各波形データに付与される。別途実行される波形読込み処理では、上記優先度で、大容量フラッシュメモリから音源LSIに接続される波形メモリに、指定音色に対応する波形データが書き込まれる。【選択図】図5

Description

本発明は、波形書き込み読込み装置、方法、プログラム、及びその装置を用いた電子楽器に関する。
波形書き込み方式により楽音波形を発生する音源装置では、より多数の、より長時間の波形データを利用できるようにするために、使用しない波形データはフラッシュメモリやハードディスク等の大容量の補助記憶装置(2次記憶装置)に保存しておき、使用する波形データのみを音源装置が直接アクセスできる波形メモリ(1次記憶装置)に転送して発音させるというシステムを採用するものがある。
つまり、高価な波形メモリ(1次記憶装置)が有する記憶容量以上の記憶容量の波形データを安価な補助記憶装置(2次記憶装置)に保持しておき、必要な場合のみ移動して発音に使用するというコスト的には効率的な方法であると言える。
一従来技術として、次のような技術が知られている(例えば特許文献1に記載の技術)。この技術において、ROMには、音色毎に1つ以上の波形データが格納されている。音源LSI(大規模集積回路)は、指定された曲の曲データを参照して、それらの波形データのなかで楽音の発音に必要なものを特定し、必要と特定した波形データはそのなかで必要な部分を更に特定する。それにより、楽音の発音に必要な波形データはその必要な部分のみをROMから読み出してRAMに転送し格納させる。これにより、発音させるべき楽音の波高値生成用に波形データをワークメモリに格納する場合に、そのデータ量をより抑えることが可能な楽音発生装置を提供するものである。
他の従来技術として、次のような技術が知られている(例えば特許文献2に記載の技術)。この技術は、第1の記憶手段に記憶された各種データのなかで楽音発生装置の起動時に転送すべきデータ群を第2の記憶手段に転送する場合に、そのデータ群を構成する波形データのなかで予め定めた音色の波形データを優先して転送し、その転送状況に応じて、楽音発生装置の動作を制限する。例えば、同時発音可能な楽音数をより少なくする動作制御をかける。その動作制限により、そのときの転送状況で可能な動作に限定して楽音発生装置を使用させることができるようにし、転送の完了を待つ場合よりも転送開始(起動)からより短時間で演奏可能とさせるものである。
特開2007−271827号公報 特許第4475323号公報
しかしながら、上述した従来技術では依然として、補助記憶装置から波形メモリ等への波形データの移動に時間がかかるため、演奏に支障を来す場合がある。具体的には、演奏者が多数の音色の中から好みの音色を選ぶような際には、音色の切り替えの度に一定時間待たされて発音されない時間が存在するため、演奏者はストレスを感じるといった課題があった。
そこで、本発明は、複数波形の転送を伴う音色切り替えの際に、波形メモリに所望の波形が存在しないために発音できないという無音時間を大幅に短縮することを目的とする。
態様の一例では、演奏情報が入力される毎に、複数種の音色波形データ夫々を指定するための複数種の波形指定情報の中から入力された演奏情報に対応する波形指定情報に基づいて、第1の記憶装置に記憶された複数種の音色波形データそれぞれに対応する波形指定情報に対して優先度を付与する優先度付与処理と、
第1の記憶装置から、付与されている優先度に基づいた順番で波形指定情報を選択するとともに、選択された波形指定情報に対応する音色波形データを順次読み出し、読み出された複数種の音色波形データを第2の記憶装置に書き込む波形書き込み処理と、
を実行する処理部、を備える。
本発明によれば、複数波形の転送を伴う音色切り替えの際に、波形メモリに所望の波形が存在しないために発音できないという無音時間を大幅に短縮することが可能となる。
本発明による電子鍵盤楽器の実施形態の外観図である。 電子鍵盤楽器の実施形態のハードウェア構成例を示す図である。 音色波形スプリットの説明図である。 フラッシュメモリ音色情報テーブルのデータ構成例、及び大容量フラッシュメモリから波形メモリへの波形データの読込み動作を示す図である。 音色毎履歴管理テーブルと、波形エリアの波形番号毎の波形演奏頻度情報及び読込み優先度(現在)情報のデータ構成例を示す図である。 主要変数/定数の一覧を示す図である。 制御処理の全体処理の例を示すメインルーチンのフローチャートである。 初期化処理の詳細例を示すフローチャート(その1)である。 初期化処理の詳細例を示すフローチャート(その2)である。 音色波形情報転送サブルーチンの詳細処理例を示すフローチャートである。 波形演奏回数集計サブルーチンの詳細処理例を示すフローチャートである。 波形優先度判断サブルーチンの詳細処理例を示すフローチャートである。 音源発音処理の詳細例を示すフローチャートである。 スプリット波形検索サブルーチンの詳細処理例を示すフローチャートである。 押鍵情報履歴更新サブルーチンの詳細処理例を示すフローチャートである。 音色切替え処理の詳細例を示すフローチャート(その1)である。 音色切替え処理の詳細例を示すフローチャート(その2)である。 波形読込み処理の詳細例を示すフローチャート(その1)である。 波形読込み処理の詳細例を示すフローチャート(その2)である。 最優先読込み波形検索サブルーチンの詳細処理例を示すフローチャートである。
以下、本発明を実施するための形態(以下「本実施形態」と記載する)について図面を参照しながら詳細に説明する。本実施形態は、例えば電子鍵盤楽器に適用される、音高(鍵域)や音量(ベロシティ:打鍵の速さ)などの演奏情報によって音色が変化するのを再現するために、大容量の2次記憶装置(例えばフラッシュメモリ)から1次記憶装置(例えばRAMによる波形メモリ)に、音高又は音量毎の波形データ(以下これを「スプリット波形」と呼ぶ)を読み込む楽音発生装置を対象とする。本実施形態は、このような楽音発生装置において、音域や強さによってスプリットされた複数の波形に依って構成される音色選択操作が発生した際に、その音色における鍵域や演奏の強さなどの演奏傾向、例えば実際の演奏者の過去の演奏に基づいた解析結果を考慮し、波形メモリに波形データをロードする最適な順序を音色毎に判断し、その順序に従って波形読込みを行うようにすることで、演奏される可能性が高い音域、或いはベロシティ域の波形から優先的に波形メモリに読み込まれ、波形が存在しない為に演奏できないという状態を最小限に留めることができる電子鍵盤楽器を実現するものである。
図1は、本発明による電子鍵盤楽器の実施形態の外観図である。本実施形態は、電子鍵盤楽器100として実施される。電子鍵盤楽器100は、演奏操作子としての複数の鍵からなる鍵盤101と、音色選択操作子としての音色選択を行うための音色選択ボタン102及び音色以外の各種機能選択を行う機能選択ボタン103からなるスイッチ・パネルと、ピッチベンドやトレモロ、ビブラート等の各種モジュレーション(演奏効果)を付加するベンダ/モジュレーション・ホイール104、音色や音色以外の各種設定情報を表示するLCD(Liquid Crystal Display:液晶ディスプレイ)105等を備える。また、電子鍵盤楽器100は、特には図示しないが、演奏により生成された楽音を放音するスピーカを裏面部、側面部、又は背面部等に備える。
音色選択ボタン102は、図1に示されるように、ピアノ(図中「Piano」)、エレクトリックピアノ(図中「E.piano」)、オルガン(図中「Organ」)、ギター(図中「Guitar)等の各種音色のカテゴリを選択するためのボタン群である。演奏者は、この音色選択ボタン102を押下することにより、例えば16音色のうちの何れかを選択することができる。
図2は、図1の電子鍵盤楽器100の実施形態のハードウェア構成例を示す図である。図2において、電子鍵盤楽器100は、CPU(中央演算処理装置)201、ROM(リードオンリーメモリ)202、RAM(ランダムアクセスメモリ)203、大容量フラッシュ(Flash)メモリ204、波形メモリ206が接続される音源LSI(大規模集積回路)205、図1の鍵盤105と図1の音色選択ボタン102及び機能選択ボタン103からなるスイッチ・パネルとが接続されるキー・スキャナ207、図1のベンダ/モジュレーション・ホイール104が接続されるA/Dコンバータ208、図1のLCD105が接続されるLCDコントローラ209、及びMIDI(Musical Instrument Digital Interface)入力を受け付けるMIDI I/F(インタフェース)213が、それぞれシステムバス214に接続される構成を備える。また、音源LSI205から出力されるデジタル楽音波形データは、D/Aコンバータ208によりアナログ楽音波形信号に変換され、アンプ211で増幅された後に、特には図示しないスピーカ又は出力端子から出力される。
CPU201は、RAM203をワークメモリとして使用しながらROM202に記憶された制御プログラムを実行することにより、図1の電子鍵盤楽器100の制御動作を実行する。また、ROM202は、上記制御プログラム及び各種固定データを記憶する。
大容量フラッシュメモリ204は、波形データ等の大容量データの格納領域であり、シーケンシャルアクセスにより順次アクセスされる。一方、音源LSI205には、波形データを展開するRAMで構成される波形メモリ206が接続され、発音される楽音の波形データは必ず、この波形メモリ206上に配置されている必要がある。CPU201は、大容量フラッシュメモリ204から波形データをシーケンシャルに読みだし、それを音源LSI205経由で波形メモリ206に転送することで、音色データを入れ替えることができる。
LCDコントローラ209は、LCD105を制御するIC(集積回路)である。キー・スキャナ207は、鍵盤105や音色選択ボタン102又は機能選択ボタン103等のスイッチ・パネルの状態を走査して、CPU201に通知するICである。A/Dコンバータ208は、ベンダ/モジュレーション・ホイール104の操作位置を検出するICである。16bitフリーランニング・タイマカウンタ212は、イベントの時刻検出のための計時を行う。
本実施形態においては、鍵域やベロシティによって音量や音高のみならず音色が変化するのを再現するために、大容量フラッシュメモリ204から波形メモリ206に、音高又は音量毎の音色の波形データが読み込まれる。このように、一つの音色に対して、音高又は音量毎に波形データを管理する手法を「音色波形スプリット」と呼び、そのように管理される波形データを「スプリット波形」と呼ぶ。図3は、音色波形スプリットの説明図である。音色波形スプリットにおいては、図3(a)に例示されるように、図1の鍵盤105上で演奏者が演奏する鍵域(図3(a)の横軸の「Key」)毎にそれぞれ波形データが割り当てられ、また同じ鍵域であっても演奏の強さすなわちベロシティ(図3(a)の縦軸の「Velocity」)毎でもそれぞれ波形データが割り当てられている。
波形メモリ206に記憶される波形データは、図3(b)に例示される音色波形スプリット情報テーブルに基づいて管理される。大容量フラッシュメモリ204から波形メモリ206に或る音色の波形データが演奏されるときに、CPU201が例えば図2のROM202からその音色に対応する音色波形スプリット情報テーブルのデータを読み出して音源LSI205経由で波形メモリ206内の波形データが記憶される領域とは別の管理領域に転送される。音色波形スプリット情報テーブルには、1つの音色に含まれる各波形データ毎に、その波形データの「波形番号」と、その波形データが発音されるべき鍵域及びベロシティの範囲を示す、「最低ベロシティ」、「最大ベロシティ」、「最低キーナンバ(最低キー番号)」、及び「最高キーナンバ(最高キー番号)」と、波形メモリ206に転送された1つの音色の記憶領域の先頭からのアドレスを示す「音色先頭からのアドレス」(「H」は16進数値を示す)と、その波形データのデータサイズを示す「波形サイズ」(「H」は16進数値を示す)の各項目値からなるエントリが登録される。音源LSI205は、鍵盤105上で演奏された鍵のキーナンバとベロシティを、波形メモリ206内の音色波形スプリット情報テーブルの各エントリの「最低ベロシティ」、「最大ベロシティ」、「最低キー(音高)番号」、及び「最高キー(音高)番号」の各項目の値と比較することにより、上記演奏された鍵のキーナンバとベロシティに合致するエントリを探しだす。そして、音源LSI205は、波形メモリ206に転送された対象となる音色の記憶領域の先頭から、上記探し出したエントリの「音色先頭からのアドレス」項目の値だけ進んだアドレスから、そのエントリの「波形サイズ」項目の値が示すサイズ分の波形データを演奏で指定された鍵の音高に対応する速度で読み出し、その読み出した波形データに対して演奏で指定されたベロシティの振幅エンベロープを付加し、その結果得られる波形データを出力楽音波形データとして出力する。
1つの音色に含まれる各波形データは、大容量フラッシュメモリ204上では、図3(c)に示されるように、1本の連続したデータの塊として記録されている。その配置状態は、その音色に対応してROM202に記憶されている図3(b)に例示される音色波形スプリット情報テーブルで定義される。すなわち、1つの音色に含まれる各波形データの配置状態は、大容量フラッシュメモリ204及び波形メモリ206ともに同じであり、1つの音色波形スプリット情報テーブルで管理される。
音色毎の波形データの数は定められていない(可変である)が、最大数と合計の最大サイズは定められている。本実施例では、図3(c)の音色波形サイズ、図3(b)の音色波形スプリット情報テーブルに例示されるように、1つの音色を構成する波形の最大数は例えば32、合計の最大サイズは例えば1MB(メガバイト)である。図3(c)の例では、1つの音色が11個の波形データから構成されていることが示されている。
図4(a)は、フラッシュメモリ音色情報テーブルのデータ構成例を示す図である。このフラッシュメモリ音色情報テーブルは、図2のROM202に記憶されている。図4(a)に例示されるように、フラッシュメモリ音色情報テーブルの各音色毎のエントリには、音色番号を示す「音色番号」項目値と、「音色名」項目値と、大容量フラッシュメモリ204の波形記憶領域の先頭からの記憶アドレスのオフセット(16進数)を示す「波形アドレス」項目値と、その音色に含まれる波形データ群の全体の波形サイズ(16進数)を示す「波形サイズ」項目値が記憶されている。
発音を行うためには、CPU201が波形データを直接アクセスできる音源LSI205の波形メモリ206に読み込んでおく必要があるが、この波形メモリ206上の各波形エリアは、16音色のうちの何れか1音色の全波形データ(最大で32波形データ)を読み込むことができる容量、すなわち1メガバイトを有する。各波形データが波形メモリに読み込まれる順序は後述するように状況に応じて最適化されるが、最終的にすべての波形データが読み込まれた状態での各波形データの並び方は大容量フラッシュメモリ204上の並びと同じである。図4(b)は、大容量フラッシュメモリ204(図中では「Flashメモリ」と表示)から波形メモリ206への波形データの読込み動作を示す図である。押鍵時にはスプリットを判断してどれか1つの波形データの読出しによる発音を行うが、その波形データが波形メモリ206への読込み転送の最中である可能性もあり、必ずしも所望の波形データが波形メモリ206に読み込まれているとは限らない。もし波形データが存在しない場合は発音を行わない。本実施形態が解決しようとする課題は、この各波形データをどういった順序で大容量フラッシュメモリ204から音源LSI205の波形メモリ206に転送するかである。つまり、もっとも使用頻度が高いと思われる波形から転送を行うことで発音できないケースを最小限に抑えるということである。
その実現方法の基本は、音色毎の演奏の履歴情報を元にした音優先順位付けである。この情報は、RAM203にメモリバックアップ付きで記憶される、図5(a)に例示される音色毎履歴管理テーブルによって管理される。ここで、「メモリバックアップ」とは、電子鍵盤楽器100の電源がオフされても次にオンされたときに、メモリの内容が内蔵電池によってバックアップされることをいう。このテーブルには、押鍵の度にそのときの演奏に応じて発音すべき波形の番号が、16の音色のそれぞれで、過去最新の256回の押鍵について記録される。つまり、この履歴情報は押鍵毎に更新されるリングバッファである。この履歴情報は電源を切ってもバッテリバックアップ機能により保持され、電源投入時にも初期化を行わない。初期化は、過去一度も初期化がなされていないと判断された時のみである。初期値としては、全履歴値が履歴としての無効性を表す値、例えば「−1」に設定される。
音色選択が行われて波形データが大容量フラッシュメモリ204から音源LSI205の波形メモリ206上の各波形エリア(最大32波形エリア)に読み出される前に、各スプリット波形の読込み順序を決定する必要が生ずる。この際に、音色毎履歴管理テーブル上の該当する音色の全てのデータを調査し、過去256回の押鍵に含まれる、各波形エリアの波形データの演奏回数を集計し、その集計値を、図5(b)に示されるように、波形エリアの番号(=波形番号)毎に頻度(回数)情報として、RAM203に記憶する。更に、集計値の高いものから順に波形番号の順番を決定し、その順番から1を減じた値を、図5(b)に示されるように、波形番号毎に読込み優先度(現在)情報として、RAM203に記憶する。本実施形態では、演奏やユーザインターフェースの処理が滞らないように、波形読込み処理がバックグラウンドで実行される。この波形読込み処理では、上述の「読込み優先度(現在)の情報が示す波形番号の順序に従って、大容量フラッシュメモリ204上のその波形番号に対応する波形データが、音源LSI205の波形メモリ206に転送される。
図6は、図2のCPU201が実行する制御処理において使用する主要な変数/定数の一覧を示す図であり、図6(a)はRAM203上の主要な変数の一覧、図6(b)はROM202上の主要な定数の一覧である。各変数/定数については、後述する制御処理の詳細説明において詳述する。
以下に、上述の動作を実現するためにCPU201が実行する制御処理の詳細例について説明する。
図7は、CPU201が実行する制御処理の全体処理の例を示すメインルーチンのフローチャートである。この処理例は、CPU201がROM202に記憶された制御プログラムを実行する処理例である。
CPU201は、まずRAM203の内容を初期化した後(ステップS701)、ステップS702からS711の一連の処理で示される定常ループ処理に入る。
定常ループ処理では、CPU201はまず、ユーザインタフェース処理(図中「ユーザI/F」と表示)を実行する(ステップS702)。ここでは、CPU201は、図2のキー・スキャナ207を介して図1の音色選択ボタン102の状態を取得する。
次に、CPU201は、ステップS702の処理の結果、演奏者が音色選択ボタン102を操作することにより音色選択イベントが発生したか否かを判定する(ステップS703)。
そして、CPU201は、音色切り替えが発生した場合(ステップS703の判定がYesの場合)は、音色切替え処理を実行する(ステップS704)。ステップS703の判定がNoならば、CPU201は、ステップS704の処理はスキップする。
次に、CPU201は、鍵盤処理を実行する(ステップS705)。ここでは、CPU201は、図2のキー・スキャナ207を介して図1の鍵盤105の押鍵状態を取得する。
次に、CPU201は、ステップS705の処理の結果、演奏者が鍵盤105上の何れかの鍵を押鍵することにより押鍵イベントが発生したか否かを判定する(ステップS706)。
そして、CPU201は、押鍵イベントが発生した場合(ステップS706の判定がYesの場合)は、音源発音処理を実行する(ステップS707)。ステップS706の判定がNoならば、CPU201は、ステップS707の処理はスキップする。
続いて、CPU201は、ステップS705の処理の結果、演奏者が鍵盤105上の何れかの押鍵中の鍵を離鍵することにより離鍵イベントが発生したか否かを判定する(ステップS708)。
そして、CPU201は、離鍵イベントが発生した場合(ステップS708の判定がYesの場合)は、音源リリース処理を実行する(ステップS709)。ステップS708の判定がNoならば、CPU201は、ステップS709の処理はスキップする。
その後、CPU201は、音源定常サービス処理を実行する(ステップS710)。ここでは、例えば図1の機能選択ボタン103が押された場合に対応する処理や、図1のベンダ/モジュレーション・ホイール104が操作された場合に対応する処理等の、電子鍵盤楽器100に対する一般的な処理が実行される。
最後に、CPU201は、波形読込み処理を実行する(ステップS711)。
その後、CPU201は、ステップS702の定常ループ処理の先頭に戻る。
図8及び図9は、図7のステップS701の初期化処理の詳細例を示すフローチャートである。
まず、CPU201は、RAM203上の図6に示されるメモリバックアップされない「変数」(「メモリバックアップ」項目に「×」が記載されている変数)の値を、全て「0」にする(以上、図8のステップS801)。
次に、CPU201は、メモリバックアップされているRAM203上の初期化判別用の変数KEYWORD(図6(a)参照)の値が、ROM202に予め記憶されているキーワード定数ROM_KEYWORD(図6(b)参照)と等しいか否かを判定する(図8のステップS802)。RAM203上の変数KEYWORDの値は、最初にメモリバックアップされていな状態では図6に示されるように適当な16進値、例えば「0」とされており、ROM202202に予め記憶されているキーワード定数ROM_KEYWORDの値「0123H」とは等しくない。
この結果、最初に電子鍵盤楽器100を使用開始したときは、図8のステップS802の判定はNoとなる。
この場合、CPU201はまず、次のメモリバックアップのために、変数KEYWORDに、ROM202に予め記憶されているキーワード定数ROM_KEYWORDを格納する(図8のステップS803)。この結果、次回以降電子鍵盤楽器100がオフ/オンされた場合には、図8のステップS802の判定がYesとなって、図8のステップS803からS810の一連の処理は実行されない。これら一連の処理は、図5(a)(a)に例示される音色毎履歴管理テーブルの内容を初期化するための処理である。従って、次回以降電子鍵盤楽器100がオフ/オンされた場合には、図8のステップS802の判定がYesとなって、音色毎履歴管理テーブルの内容は初期化されないため、前回使用時の音色毎履歴管理テーブルの内容(後述するRAM203上のメモリバックアップされる変数KEY_HIS[i][j](0≦i≦15、0≦j≦255)の内容がそのまま引き継がれる。
また、CPU201は、メモリバックアップされているRAM203上の変数C_TONEが示す現在の音色番号に対応する音色毎履歴管理テーブルの0〜255のエントリのうち、最新の履歴が格納されるべき要素値を格納するRAM203上のポインタ変数KEY_HIS_WP[C_TONE]に、先頭位置を示す初期値「0」を格納する(図8のステップS803)(図6(a)の「KEY_HIS」と「KEY_HIS_WP」参照)。
ステップS803の後、CPU201は、音色カウント用のRAM203上の変数Tの値について、図8のステップS804で「0」にリセットした後、図8のステップS809で+1ずつインクリメントしながら、図8のステップS810で16に達したと判定するまで、図8のステップS805からS808の一連の処理を、繰り返し実行する。
これら一連の処理において、CPU201はまず、履歴番号カウント用のRAM203上の変数Hの値について、図8のステップS805で「0」にリセットした後、図8のステップS807で+1ずつインクリメントしながら、図8のステップS808で256に達したと判定するまで、変数Tが示す現在の音色番号値に対応し変数Hが示す現在の履歴番号に対応する音色毎履歴管理テーブルの要素値KEY_HIS[T][H]に無効値「−1」を格納して初期化する処理(ステップS806)を、繰り返し実行する。
以上の図8のステップS804からS810までの一連の処理により、音色毎履歴管理テーブルの内容を示す変数KEY_HIS[T][H](0≦T≦15、0≦H≦255)の全てに、無効値「−1」が格納されて初期化される。
次に、CPU201は、波形メモリ206上の波形エリア毎の波形番号カウント用のRAM203上の変数Wの値について、図9のステップS811で「0」にリセットした後、図9のステップS813で+1ずつインクリメントしながら、図9のステップS814で32に達したと判定するまで、変数Wが示す現在の波形番号値に対応する読込み優先度(現在)を格納する構造体要素WP_ST[W].PRI(図5(b)及び図6(a)参照)に無効値「−1」を格納して初期化する処理(図9のステップS812)を、繰り返し実行する。
以上の図9のステップS811からS814までの一連の処理により、図5(b)の波形エリアの波形番号毎の読込み優先度(現在)を示す構造体要素WP_ST[W].PRI(0≦W≦31)の全てに、無効値「−1」が格納されて初期化される。
次に、CPU201は、音色波形情報転送サブルーチンの処理を実行する(図9のステップS815)。図10は、図9のステップS816の音色波形情報転送サブルーチンの詳細処理例を示すフローチャートである。この処理では、ROM202に予め記憶されている図3(b)に例示される音色波形スプリット情報テーブルの各項目値(図6(b)のROM_WM_ST構造体参照)が、変数Wが示す現在の波形番号値に対応するRAM203上の上記各項目値を格納する構造体要素に転送される。
CPU201はまず、読込み音色の波形の大容量フラッシュメモリ204上での格納先頭アドレス値を保持するRAM203上の変数FLASH_OFFSET(図6(a)参照)に、メモリバックアップされているRAM203上の変数C_TONEが示す現在の音色番号に対応し、ROM202に記憶されている読込み音色の波形の大容量フラッシュメモリ204上での格納先頭アドレス値ROM_WAVE_OFFSET[C_TONE](図6(b)の「ROM_WAVE_OFFSET」参照)を格納する(ステップS1001)。
次に、CPU201は、波形メモリ206上の波形エリア毎の波形番号カウント用のRAM203上の変数Wの値について、ステップS1002で「0」にリセットした後、ステップS1004で+1ずつインクリメントしながら、ステップS1005で32に達したと判定するまで、変数Wが示す現在の波形番号値に対応する図3(b)に例示される音色波形スプリット情報テーブルの各項目値を格納する各構造体要素に、ROM202に予め記憶されている各項目値を格納する処理(ステップS1003)を、繰り返し実行する。即ち、構造体要素WM_ST[W].VEL_LOに、メモリバックアップされているRAM203上の変数C_TONEが示す現在の音色番号と変数Wが示す現在の波形番号値に対応し、ROM202に記憶されている「最低ベロシティ」値ROM_WM_ST[C_TONE][W].VEL_LOの値が格納される。また、構造体要素WM_ST[W].VEL_HIに、変数C_TONEが示す現在の音色番号と変数Wが示す現在の波形番号値に対応し、ROM202に記憶されている「最高ベロシティ」値ROM_WM_ST[C_TONE][W].VEL_HIの値が格納される。また、構造体要素WM_ST[W].KEY_LOに、変数C_TONEが示す現在の音色番号と変数Wが示す現在の波形番号値に対応し、ROM202に記憶されている「最低キーナンバ」値ROM_WM_ST[C_TONE][W].KEY_LOの値が格納される。また、構造体要素WM_ST[W].KEY_HIに、変数C_TONEが示す現在の音色番号と変数Wが示す現在の波形番号値に対応し、ROM202に記憶されている「最高キーナンバ」値ROM_WM_ST[C_TONE][W].KEY_HIの値が格納される。更に、構造体要素WM_ST[W].OFFSET_ADRSに、変数C_TONEが示す現在の音色番号と変数Wが示す現在の波形番号値に対応し、ROM202に記憶されている波形メモリ206に転送された1つの音色の記憶領域の先頭からのアドレスを示す「音色先頭からのアドレス」値ROM_WM_ST[C_TONE][W].OFFSETの値が格納される。加えて、構造体要素WM_ST[W].WAVE_SIZEに、変数C_TONEが示す現在の音色番号と変数Wが示す現在の波形番号値に対応し、ROM202に記憶されている波形メモリ206に転送された波形データのデータサイズを示す「波形サイズ」値ROM_WM_ST[C_TONE][W].WAVE_SIZEの値が格納される。
以上のステップS902からS905までの一連の繰返し動作が、32の波形データについて繰り返し実効された後、CPU201は、図10のフローチャートで示される図9のステップS815の音色波形情報転送サブルーチンの処理を終了する。
ステップS815の後、CPU201は、波形演奏回数集計サブルーチンの処理を実行する(図9のステップS816)。図11は、図9のステップS816の波形演奏回数集計サブルーチンの詳細処理例を示すフローチャートである。この処理では、図5(a)に例示される音色毎履歴管理テーブルの過去256回で押鍵された鍵盤101上の鍵に対応するスプリット波形の波形番号の回数が、図5(b)で前述したように、波形番号毎の頻度(回数)に集計される。
まず、CPU201は、波形メモリ206上の波形エリア毎の波形番号カウント用のRAM203上の変数Wの値について、ステップS1101で「0」にリセットした後、ステップS1103で+1ずつインクリメントしながら、ステップS1104で32に達したと判定するまで、変数Wが示す現在の波形番号値に対応する頻度(回数)を格納する構造体要素WP_ST[W].FREQ(図5(b)及び図6(a)参照)に回数「0」を格納して初期化する処理(ステップS1102)を、繰り返し実行する。
次に、CPU201は、履歴番号カウント用のRAM203上の変数Hの値について、ステップS1105で「0」にリセットした後、ステップS1109で+1ずつインクリメントしながら、ステップS1110で256に達したと判定するまで、ステップS1106からS1108の一連の処理を、繰り返し実行する。
この一連の処理においてまず、CPU201は、メモリバックアップされているRAM203上の変数C_TONEが示す現在の音色番号値に対応し変数Hが示す現在の履歴番号に対応する音色毎履歴管理テーブルの要素値KEY_HIS[T][H]である波形番号を読み出して、RAM203上の変数Wに格納する(ステップS1106)。
次に、CPU201は、変数Wにセットされた波形番号が無効値「−1」であるか否かを判定する(ステップS1107)。ステップS1107の判定がNoならば、CPU201は、変数Wが示す現在の波形番号値に対応する頻度(回数)を格納する構造体要素WP_ST[W].FREQ(図5(b)及び図6(a)参照)のカウント値を+1インクリメントする(ステップS1108)。ステップS1107の判定がYesならば、ステップS1108の処理はスキップする。
以上のステップS1106からS1110の一連の処理が繰り返し実行されることにより、音色毎履歴管理テーブルの過去256回で押鍵された鍵盤101上の鍵に対応するスプリット波形の波形番号の回数が、構造体要素WP_ST[W].FREQ(0≦W≦31)に集計される。
その後、CPU201は、図11のフローチャートで示される図9のステップS816の波形演奏回数集計サブルーチンの処理を終了する。
ステップS816の後、CPU201は、波形優先度判断サブルーチンの処理を実行する(図9のステップS817)。図12は、図9のステップS817の波形優先度判断サブルーチンの詳細処理例を示すフローチャートである。この処理では、図11の波形演奏回数集計サブルーチンによって図5(b)で前述したように集計された波形メモリ206上の波形番号(波形エリア)毎の頻度(回数)に基づいて、波形番号(波形エリア)毎の大容量フラッシュメモリ204からの読込みの優先度が決定される。
まず、CPU201は、波形メモリ206上の波形エリア毎の波形番号カウント用のRAM203上の変数Wの値について、ステップS1201で「0」にリセットした後、ステップS1203で+1ずつインクリメントしながら、ステップS1204で32に達したと判定するまで、変数Wが示す現在の波形番号値に対応する読込み優先度(現在)を格納する構造体要素WP_ST[W].PRI(図5(b)及び図6(a)参照)に無効値「−1」を格納してリセットする処理(ステップS1202)を、繰り返し実行する。
次に、CPU201は、波形番号を決定したい読込み優先度(現在)の値が格納される変数Pの値を、ステップS1205で最高優先度の値「0」に初期化した後、ステップS1213で変数Pの値を+1ずつしながら、ステップS1214で変数Pの値が最低優先度の次の値=32に達したと判定するまで、ステップS1206からS1212の一連の処理を、繰り返し実行する。
この一連の処理において、CPU201はまず、波形メモリ206上の波形エリア毎の波形番号カウント用のRAM203上の変数Wの値を「0」にリセットする。また、CPU201は、最大頻度を有する波形番号の値を格納するRAM203上の変数Xの値を「0」にリセットする。更に、CPU201は、最大頻度値を保持するRAM203上のレジスタFの値を「0」にリセットする(以上、ステップS1206)。
続いて、CPU201は、波形メモリ206上の波形エリア毎の波形番号カウント用のRAM203上の変数Wの値について、上述のようにステップS1206で「0」にリセットした後、ステップS1210で+1ずつインクリメントしながら、ステップS1211で32に達したと判定するまで、ステップS1207からS1209の一連の処理を繰り返し実行する。
この一連の処理において、CPU201はまず、変数Wが示す現在の波形番号値に対応する読込み優先度(現在)を格納する構造体要素WP_ST[W].PRI(図5(b)及び図6(a)参照)の値が無効値「−1」であるか否かを判定する(ステップS1207)。
ステップS1207の判定がYesの場合、即ち、変数Wが示す現在の波形番号値についてまだ読込み優先度(現在)が決定されていない場合には、CPU201は、変数Wが示す現在の波形番号値に対応する頻度(回数)を格納する構造体要素WP_ST[W].FREQの値が、現在までの最大頻度値を保持するRAM203上のレジスタFの値以上であるか否かを判定する(ステップS1208)。
ステップS1208の判定がYesならば、CPU201は、現在までの最大頻度値を保持するRAM203上のレジスタFに構造体要素WP_ST[W].FREQの値を格納し、また、最大頻度を有する波形番号の値を格納するRAM203上の変数Xに変数Wが示す現在の波形番号値を格納する(ステップS1209)。
ステップS1207又はS1208の判定がNoならば、CPU201は、ステップS1209の処理はスキップする。
以上の繰返し処理により、ステップS1211の判定がYesになると、変数Pが示す最高優先度の値「0」について、頻度(回数)が最も多い波形番号が変数Xに得られる。CPU201は、変数Xが示す最大頻度を有する波形番号値に対応する読込み優先度(現在)を格納する構造体要素WP_ST[X].PRIに、変数Pが示す最高優先度の値「0」を格納する(ステップS1212)。
その後、CPU201は、変数Pが示す優先度の値を+1して優先度を一つ落とし、ステップS1214の判定をNoとした後、ステップS1206の処理に戻り、ステップS1207からS1211の処理を再び実行する。これにより、上述のようにして優先度が決定された波形番号以外の波形番号について、次に優先度が高い波形番号値が決定され、その波形番号値に対応する読込み優先度(現在)を格納する構造体要素WP_ST[X].PRIに、変数Pが示す次の優先度の値が格納される。
以上のようにして、変数Pの値が0から31まで変化させられて同様の処理が繰り返し実行されることにより、32の全ての波形エリアの波形番号について、優先度がそれぞれ決定される。
その後、CPU201は、図12のフローチャートで示される図9のステップS817の波形優先度判断サブルーチンの処理を終了する。
ステップS817の後、CPU201は、現在読込み中の波形の番号を示す変数READING_WAVE(図6(a)参照)に、無効値「−1」を格納する(ステップS818)。その後、CPU201は、図8及び図9のフローチャートで例示される図7のステップS701の初期化処理を終了する。
図13は、図7のステップS707の音源発音処理の詳細例を示すフローチャートである。
CPU201はまず押鍵時に、スプリット波形検索サブルーチンにより、押鍵に対応する鍵域及びベロシティに基づいて、現在選択されている音色中でその押鍵により発音されるべき波形データの波形番号を割り出し、その波形番号をRAM203上の変数Wに格納する(ステップS1301)。
次に、CPU201は、変数Wが示す現在の波形番号値に対応する波形メモリ206上での波形の有無を示す要素WM_ST[W].WAVE(図6(a)参照)の値が「1」であるか否か、すなわち、変数Wが示す波形番号に対応する波形データが波形メモリ206の波形エリアに存在するかどうかを判定する(ステップS1302)。
CPU201は、ステップS1302の判定がYesならば、その波形データに対する発音処理を、音源LSI205に対して指示する発音処理を実行する(ステップS1303)。CPU201は、ステップS1302の判定がNoならば、ステップS1303の発音処理はスキップする。
続いて、CPU201は、ステップS1303の発音処理の有無にかかわらず、演奏された押鍵情報を、押鍵情報履歴更新サブルーチンによって、履歴として残す(ステップS1304)。この処理が実行される場合、RAM203上の変数Kに現在押鍵されているキーナンバKeyが格納され、変数Vに現在押鍵されているベロシティ値Velocityが格納されて、これらの変数が押鍵情報履歴更新サブルーチンに引数として引き渡される。その後、CPU201は、図13のフローチャートで示される図7のステップS707の音源発音処理を終了する。
図14は、図13のステップS1301のスプリット波形検索サブルーチンの詳細処理例を示すフローチャートである。
CPU201はまず、波形メモリ206上の波形エリア毎の波形番号カウント用のRAM203上の変数Wについて、ステップS1401で波形番号カウンタWに値「0」を格納した後、ステップS1406で+1ずつインクリメントしながら、ステップS1407で32に達したと判定するまで、ステップS1402からS1405までの一連の処理を、繰り返し実行する。
これらの一連の処理において、CPU201はまず、変数Kに格納された現在押鍵中のキーナンバの値が、変数Wが示す現在の波形番号値に対応する最低キーナンバ要素値WM_ST[W].KEY_LO(図6(a)参照)の値以上であるか否かを判定する(ステップS1402)。ここで、最低キーナンバ要素値WM_ST[W].KEY_LOとしては、変数C_TONEが示す現在選択されている音色に対応するROM202内の音色波形スプリット情報テーブル(図3(b)参照)の「最低キーナンバ」項目値が予めコピーされている(前述した図8のステップS815内又は後述する図17のステップS1608内の図10のステップS1003参照)。ステップS1402の判定がNoならば、変数Wが示す波形番号の波形データは現在押鍵中の鍵域及びベロシティに対応するスプリット波形ではないため、ステップS1406に移行する。
ステップS1402の判定がYesならば、CPU201は、変数Kに格納された現在押鍵中のキーナンバの値が、変数Wが示す現在の波形番号値に対応する最高キーナンバ要素値WM_ST[W].KEY_HI(図6(a)参照)の値以下であるか否かを判定する(ステップS1403)。ここで、最高キーナンバ要素値WM_ST[W].KEY_HIとしては、変数C_TONEが示す現在選択されている音色に対応するROM202内の音色波形スプリット情報テーブル(図3(b)参照)の「最高キーナンバ」項目値が予めコピーされている(前述した図8のステップS815内又は後述する図17のステップS1608内の図10のステップS1003参照)。ステップS1403の判定がNoならば、変数Wが示す波形番号の波形データは現在押鍵中の鍵域及びベロシティに対応するスプリット波形ではないため、ステップS1406に移行する。
ステップS1403の判定がYesならば、CPU201は、変数Vに格納された現在押鍵中のベロシティの値が、変数Wが示す現在の波形番号値に対応する最低ベロシティ要素値WM_ST[W].VEL_LO(図6(a)参照)の値以上であるか否かを判定する(ステップS1404)。ここで、最低ベロシティ要素値WM_ST[W].VEL_LOとしては、変数C_TONEが示す現在選択されている音色に対応するROM202内の音色波形スプリット情報テーブル(図3(b)参照)の「最低ベロシティ」項目値が予めコピーされている(前述した図8のステップS815内又は後述する図17のステップS1608内の図10のステップS1003参照)。ステップS1404の判定がNoならば、変数Wが示す波形番号の波形データは現在押鍵中の鍵域及びベロシティに対応するスプリット波形ではないため、ステップS1406に移行する。
ステップS1404の判定がYesならば、CPU201は、変数Vに格納された現在押鍵中のベロシティの値が、変数Wが示す現在の波形番号値に対応する最高ベロシティ要素値WM_ST[W].VEL_HI(図6(a)参照)の値以下であるか否かを判定する(ステップS1405)。ここで、最高ベロシティ要素値WM_ST[W].VEL_HIとしては、変数C_TONEが示す現在選択されている音色に対応するROM202内の音色波形スプリット情報テーブル(図3(b)参照)の「最高ベロシティ」項目値が予めコピーされている(前述した図8のステップS815内又は後述する図17のステップS1608内の図10のステップS1003参照)。ステップS1405の判定がNoならば、変数Wが示す波形番号の波形データは現在押鍵中の鍵域及びベロシティに対応するスプリット波形ではないため、ステップS1406に移行する。
ステップS1405の判定がYesならば、現在押鍵中の鍵域が変数Wが示す波形番号の波形データに設定されている最低キーナンバ以上最高キーナンバ以下の範囲にあり、かつ現在押鍵中のベロシティが上記波形データに設定されている最低ベロシティ以上最高ベロシティ以下の範囲にあり、現在の押鍵に対して発音処理されるべき波形データである。このため、CPU201は、変数Wが示す波形番号を戻り値として、図14のフローチャートで示される図13のステップS1301のスプリット波形検索サブルーチンを終了する。なお、このサブルーチンの戻り値は波形番号Wであるが、理論的にはスプリットの設定によっては発音しない鍵域を残すことも可能であり、その場合は波形番号として例えば32を返す。
図15は、図13のステップS1304の押鍵情報履歴更新サブルーチンの詳細処理例を示すフローチャートである。
CPU201は、変数C_TONEが示す現在の音色番号に対応し、かつポインタ変数KEY_HIS_WP[C_TONE]が示す最新の履歴が格納されるべき要素値に対応する音色毎履歴管理テーブル(図5(a)参照)の要素値KEY_HIS[W][KEY_HIS_WP[C_TONE]]に、押鍵履歴として変数Wが示す値を格納する(ステップS1501)。
その後、CPU201は、最新の履歴が格納されるべき要素値を格納するRAM203上のポインタ変数KEY_HIS_WP[C_TONE]の値を+1インクリメントする(ステップS1502)。
次に、CPU201は、ステップS1502のインクリメント処理により、変数KEY_HIS_WP[C_TONE]の値が最大値255を越えて256になったか否かを判定する(ステップS1503)。ステップS1503の判定がYesの場合、CPU201は、次の履歴の格納位置を音色毎履歴管理テーブル(図5(a)参照)の先頭に戻るために、最新の履歴が格納されるべき要素値を格納するRAM203上のポインタ変数KEY_HIS_WP[C_TONE]の値を「0」にリセットする(ステップS1504)(図8のステップS803参照)。即ち、この音色毎履歴管理テーブルは、リングバッファとして機能する。ステップS1503の判定がNoならば、CPU201は、ステップS1504の処理はスキップする。
図16及び図17は、図7のステップS704の音色切替え処理の詳細例を示すフローチャートである。ここで、RAM203上の変数Tに演奏者によって選択された音色番号が設定されているとする。
CPU201はまず、変数Tに得られた音色番号が、変数C_TONEに得られている現在の音色番号に一致するか否かを判定する(図16のステップS1601)。ステップS1601の判定がYesならば、音色を切り替える必要はないため、そのまま図16及び図17のフローチャートで示される図7のステップS704の音色切替え処理を終了する。
ステップS1601の判定がNoならば、CPU201はまず、図2の音源LSI205に対して現在の発音を停止させる(図16のステップS1602)。
次に、CPU201は、変数C_TONEに、変数Tに新たに得られた音色番号の値を格納する(図16のステップS1603)。
次に、CPU201は、波形メモリ206上の波形エリア毎の波形番号カウント用のRAM203上の変数Wの値について、図16のステップS1604で「0」にリセットした後、図16のステップS1606で+1ずつインクリメントしながら、図16のステップS1607で32に達したと判定するまで、変数Wが示す現在の波形番号値に対応する波形メモリ206上での波形の有無を示す要素WM_ST[W].WAVE(図6(a)参照)に無効値「0」を格納して初期化する処理(図16のステップS1605)を、繰り返し実行する。
その後、CPU201は、図7のステップS701の初期化処理における図9のステップS815、S816、及びS817の各処理と同様の、音色波形情報転送サブルーチン(ステップS1608)、波形演奏回数集計サブルーチン(ステップS1609)、波形優先度判断サブルーチン(ステップS1610)、及び変数READING_WAVEに無効値「−1」を格納する処理(ステップS1611)を実行する。ステップS1608の処理により、新たな音色に対して、ROM202上の音色波形スプリット情報テーブルの各項目値がRAM203に転送される。ステップS1609の処理により、新たな音色に対して、図5(a)に例示される音色毎履歴管理テーブルの過去256回で押鍵された鍵盤101上の鍵に対応するスプリット波形の波形番号の回数が、図5(b)で前述したように、波形番号毎の頻度(回数)に集計される。ステップ1709の処理により、新たな音色に対して、上記ステップS1609の波形演奏回数集計サブルーチンによって図5(b)で前述したように集計された波形メモリ206上の波形番号(波形エリア)毎の頻度(回数)に基づいて、波形番号(波形エリア)毎の大容量フラッシュメモリ204からの読込みの優先度が決定される。
その後、CPU201は、図16及び図17のフローチャートで示される図7のステップS704の音色切替え処理を終了する。
図18及び図19は、図7のステップS711の波形読込み処理の詳細例を示すフローチャートである。演奏による発音処理を止めないようにするために、図7に例示したメインループにおいて、ステップS711で波形読込み処理だけに処理を集中させず、他の処理も並行に処理するために、ステップS711で波形読込み処理の1回の実行においては、一定の容量のメモリ転送が完了した時点で処理を中断し、他のメインループの処理を行って再び波形転送プログラムが起動された時に処理が再開される。
CPU201はまず、RAM203上の変数である現在読込み中の波形の番号READING_WAVEの値が無効値「−1」であるか否か、すなわち、現在波形データの読込みが行われていないか否かを判定する(図18のステップS1801)。
現在波形データの読込みが行われていない(ステップS1801の判定がYesである)場合には、CPU201は、最優先読込み波形検索サブルーチンを実行する(図18のステップS1802)。この処理では、RAM203の読込み優先度(現在)を格納する構造体要素WP_ST[W].PRI(0≦W≦31)(図5(b)及び図6(a)参照)の値が順次調べられ、波形転送が必要かつ、完了していないもの中で最も優先順位の高い波形データが選定される。図20は、図18のステップS1802の最優先読込み波形検索サブルーチンの詳細処理例を示すフローチャートである。
図20のフローチャートにおいて、CPU201はまず、読込み優先度(現在)の値が格納される変数Pの値を、ステップS1205で最低優先度より一つ低い値「32」に初期化する。また、CPU201は、波形番号カウンタとして動作するRAM203上の変数Xの値を「0」に初期化する。更に、CPU201は、最高優先度の波形番号を格納する変数をWとする(ステップS2001)。
その後、CPU201は、変数Xの値について、上述のようにステップS2001で「0」にリセットした後、ステップS2005で+1ずつインクリメントしながら、ステップS2006で32に達したと判定するまで、ステップS2002からS2004までの一連の処理を、繰り返し実行する。
これらの一連の処理において、CPU201はまず、変数Xが示す波形番号に対応する構造体WM_ST[X].WAVE(図6(a)参照)の値が0であるか否か、即ち、変数Xが示す波形番号の波形データが波形メモリ206上に存在しないか否かを判定する(ステップS2002)。
当該波形データが波形メモリ206上に存在しない場合(ステップS2002の判定がYesの場合)、CPU201は、変数Xが示す波形番号に対応する構造体WM_ST[X].PRIの値が変数Pの値よりも小さいか否か、即ち、変数Xが示す波形番号の波形データの読込み優先度(現在)(図5(b)参照)が、変数Pに設定されている現時点で最も高い優先度よりも高いか否かを判定する(ステップS2003)。
ステップS2003の判定がYesならば、CPU201は、変数Pの値を変数Xが示す波形番号に対応する構造体WM_ST[X].PRIの値で置き換え、最高優先度の波形番号を格納する変数Wに変数Xが示す波形番号を格納する(ステップS2004)。これにより、現在の変数Xが示す波形番号が最高優先度の波形番号として設定される。
当該波形データが波形メモリ206上に既に存在して新たに読み込む必要がない場合(ステップS2002の判定がNoの場合)、又は変数Xが示す波形番号の波形データの読込み優先度(現在)が変数Pに設定されている優先度よりも高くはない場合(ステップS2003の判定がNoの場合)には、ステップS2004の処理はスキップされる。
以上のステップS2002からS2004の処理が1≦X≦31の範囲で繰り返し実行された結果、ステップS2006の判定がYesになると、CPU201は、図20のフローチャートで示される図18のステップS1802の最優先読込み波形検索サブルーチンの処理を終了する。この結果、最終的に変数Wに、波形転送が必要かつ完了していないもの中で最も優先順位の高い波形データの波形番号が得られる。
ステップS1802の後、CPU201は、現在読込み中の波形の番号を保持する変数READING_WAVE(図6(a)参照)に変数Wに格納されている波形番号を格納する。また、CPU201は、変数Wが示す波形番号に対応する大容量フラッシュメモリ204から波形メモリ206へ前回までに転送済みの波形データのサイズを示す構造体要素WM_ST[W].READ_SIZEに、未転送を示す値「0」を格納する(以上、図18のステップS1803)。
一方、現在波形データの読込みが継続している(ステップS1801の判定がNoである)場合には、CPU201は、変数Wに変数READING_WAVEが保持する波形番号をセットする(図18のステップS1804)。その後、CPU201は、図18のステップS1805から図19のステップS1806以降の処理に移行し、変数Wに再度セットされた波形番号の残りの波形データを大容量フラッシュメモリ204から波形メモリ206へ転送する処理を実行する。
上記図18のステップS1803又はS1804の処理の後、CPU201は、RAM203上の変数である今回読込みサイズカウンタ変数cに初期値「0」をセットする。また、CPU201は、大容量フラッシュメモリ204上の読込みアドレスを示すRAM203上の変数rpに、図9のステップS816又は図17のステップS1608内の図10のステップS1001で変数FLASH_OFFSETに格納された読込み音色の波形の大容量フラッシュメモリ204上での格納先頭アドレス値をセットする。更に、CPU201は、波形メモリ206上の書込みアドレスを示すRAM203上の変数wpに、図9のステップS816又は図17のステップS1608内の図10のステップS1003で変数Wの波形番号に対応する構造体要素WM_ST[W].OFFSET_ADRSに格納された波形メモリ206上の音色先頭からのアドレス値をセットする。加えて、CPU201は、大容量フラッシュメモリ204から波形メモリ206へ今回までに転送済みの波形データのサイズを示すRAM203上の変数rsに、変数Wが示す波形番号に対応する前回までに転送済みの波形データのサイズを示す構造体要素WM_ST[W].READ_SIZE(後述する図19のステップS1812参照)の値を格納する(以上、図18のステップS1805)。
その後、CPU201は、図19のステップS1806以降の処理に移行し、変数Wに得られた波形番号の波形データを大容量フラッシュメモリ204から波形メモリ206へ転送する処理を開始する。
CPU201はまず、大容量フラッシュメモリ204からの読込み処理を実行する(図19のステップS1806)。即ち、CPU201は、図18のステップS1805で変数rpにセットされた大容量フラッシュメモリ204上での波形格納先頭アドレス値に、同じくステップS1805で今回までに転送済みの波形データのサイズを示す変数rsにセットされた変数Wが示す波形番号に対応する前回までに転送済みの波形データのサイズを加算して得られるアドレスから、1ワード分の波形データを読み込み、RAM203上の変数dに格納する。
次に、CPU201は、波形メモリ206への書込み処理を実行する(図19のステップS1807)。即ち、CPU201は、図18のステップS1805で波形メモリ206上の書込みアドレスを示す変数wpにセットされた音色先頭からのアドレス値に、同じくステップS1805で今回までに転送済みの波形データのサイズを示す変数rsにセットされた変数Wが示す波形番号に対応する前回までに転送済みの波形データのサイズを加算して得られるアドレスに、変数dに格納されている1ワード分の波形データを、音源LSI205経由で書き込む。
その後、CPU201は、今回までに転送済みの波形データのサイズを示す変数rsの値を+1インクリメントし、今回読込みサイズカウンタ変数cの値を+1インクリメントする(図19のステップS1808)。
そして、CPU201は、今回までに転送済みの波形データのサイズを示す変数rsの値が、カウンタ変数Wが示す波形番号に対応する波形データのサイズ要素WM_ST[W].WAVE_SIZEの値に等しくなったか否かを判定する(図19のステップS1809)。
ステップS1809の判定がNoならば、CPU201は、今回読込みサイズカウンタ変数cの値が100000バイトに等しくなったか否か、すなわち、今回転送されたサイズが100KB(キロバイト)に達したか否かを判定する(図19のステップS1810)。
ステップS1810の判定がNoならば、CPU201は、ステップS1806の処理に戻って転送を続行する。
ステップS1809の判定がYesになると、CPU201は、変数Wが示す現在の波形番号値に対応する波形メモリ206上での波形の有無を示す要素WM_ST[W].WAVE(図6(a)参照)に、波形有りを示す値「1」をセットする。また、CPU201は、現在読込み中の波形の番号を示す変数READING_WAVE(図6(a)参照)に、無効値「−1」を格納する(以上、図19のステップS1811)。
ステップS1811の処理の後、又はステップS1810の判定がYesとなったら、CPU201は、変数Wが示す波形番号に対応する大容量フラッシュメモリ204から波形メモリ206へ前回までに転送済みの波形データのサイズを示す構造体要素WM_ST[W].READ_SIZEに、今回までに転送済みの波形データのサイズを示す変数rsの値を格納する(図19のステップS1812)。
その後、CPU201は、図18及び図19のフローチャートで示される図7のステップS711の波形読込み処理を終了する。
このように、本実施形態では、一定の容量(例えば100KB)のメモリ転送が完了した時点で処理が中断され、他のメインループの処理を行って再び波形転送プログラムが起動された時に図18のステップS1802からS1803を介して、処理が再開される。このとき、変数Wの波形番号に対応する前回までに転送済みのデータサイズを示す要素値WM_ST[W].READ_SIZEには、図19のステップS1812の処理によって前回までに転送が完了したサイズが格納されているため、図18のステップS1805、図19のステップS1806及びS1807のアドレス演算処理によって、前回転送が完了したアドレスの次のアドレスから転送を再開することができる。
以上説明した実施形態により、複数波形の転送を伴う音色切り替えの際に、波形メモリに所望の波形が存在しないために発音できないという無音時間を大幅に短縮することが可能となる。例えば最初に読み込まれる波形データが全体の波形の10%の容量であれば、最後に読み込まれる波形データに対応した演奏を行った場合の発音可能になるまでの待ち時間は10分の1と大幅に短縮できることになる。これにより、演奏者のストレスを軽減、或いは全く感じさせないレベルに抑制することができる。
以上の実施形態に関して、更に以下の付記を開示する。
(付記1)
演奏情報が入力される毎に、複数種の音色波形データ夫々を指定するための複数種の波形指定情報の中から前記入力された演奏情報に対応する波形指定情報に基づいて、第1の記憶装置に記憶された前記複数種の音色波形データそれぞれに対応する波形指定情報に対して優先度を付与する優先度付与処理と、
前記第1の記憶装置から、前記付与されている優先度に基づいた順番で前記波形指定情報を選択するとともに、前記選択された波形指定情報に対応する音色波形データを順次読み出し、前記読み出された複数種の音色波形データを第2の記憶装置に書き込む波形書き込み処理と、
を実行する処理部を備えた波形書き込み装置。
(付記2)
前記処理部は、前記演奏情報が入力される毎に、複数種の音色波形データ夫々を指定するための複数種の波形指定情報の中から前記入力された演奏情報に対応する波形指定情報を順次メモリに記憶させる記憶処理をさらに実行し、
前記優先度付与処理は、前記メモリに記憶されている波形指定情報に基づいて、第1の記憶装置に記憶された前記複数種の音色波形データそれぞれに対応する波形指定情報に対して優先度を付与する処理を実行する、付記1に記載の波形書き込み装置。
(付記3)
前記第2の記憶装置は、ランダムアクセスメモリを備え、前記第1の記憶装置は、前記第2の記憶装置より容量の大きいフラッシュメモリを備えた、付記1または2に記載の波形書き込み装置。
(付記4)
前記第1の記憶装置には、異なる音色毎に前記複数の音色波形データが記憶され、
前記処理部は、
前記記憶処理において、前記入力された演奏情報を前記音色毎に順次前記メモリに記憶させる処理を実行し、
前記優先度付与処理において、前記メモリに前記音色毎に記憶されている演奏情報に基づいて、前記複数種の音色波形データそれぞれに優先度を前記音色毎に付与する処理を実行し、
前記波形書き込み処理において、前記音色を選択する音色選択情報に応答して、前記第1の記憶装置から、前記音色選択情報により選択された音色に対応する前記優先度に基づいた順番で前記複数種の音色波形データを読み出し、前記読み出された音色波形データを第2の記憶装置に書き込む処理を実行する、付記2または3に記載の波形書き込み装置。
(付記5)
前記処理部は、前記優先度付与処理において、前記メモリに記憶されている波形指定情報の中で数の最も数が多い種類の波形指定情報から順に高い優先度を付与する処理を実行する、付記1乃至4の何れかに記載の波形書き込み装置。
(付記6)
前記演奏情報は、発生すべき楽音の音高とベロシティとを少なくとも含む情報であり、前記処理部は、優先度付与処理において、前記音高とベロシティとに基づいて、前記複数種の音色波形データそれぞれに前記優先度を付与する処理を実行する、付記1乃至5の何れかに記載の波形書き込み装置。
(付記7)
処理部を有する波形書き込み装置に用いられる波形書き込み方法であって、前記処理部は、
演奏情報が入力される毎に、複数種の音色波形データ夫々を指定するための複数種の波形指定情報の中から前記入力された演奏情報に対応する波形指定情報に基づいて、第1の記憶装置に記憶された前記複数種の音色波形データそれぞれに対応する波形指定情報に対して優先度を付与し、
前記第1の記憶装置から、前記付与されている優先度に基づいた順番で前記波形指定情報を選択するとともに、前記選択された波形指定情報に対応する音色波形データを順次読み出し、前記読み出された複数種の音色波形データを第2の記憶装置に書き込む、波形書き込み方法。
(付記8)
波形書き込み装置として用いられるコンピュータに、
演奏情報が入力される毎に、複数種の音色波形データ夫々を指定するための複数種の波形指定情報の中から前記入力された演奏情報に対応する波形指定情報に基づいて、第1の記憶装置に記憶された前記複数種の音色波形データそれぞれに対応する波形指定情報に対して優先度を付与する優先度付与ステップと、
前記第1の記憶装置から、前記付与されている優先度に基づいた順番で前記波形指定情報を選択するとともに、前記選択された波形指定情報に対応する音色波形データを順次読み出し、前記読み出された複数種の音色波形データを第2の記憶装置に書き込む波形書き込みステップと、
を実行させるプログラム。
(付記9)
付記1乃至6のいずれかに記載の波形書き込み装置と、
演奏情報を入力する演奏操作子と、
複数種の音色波形データが記憶された第1の記憶装置と、
第2の記憶装置と、
前記演奏操作子からの演奏情報により前記第2の記憶装置から読み出された音色波形データに基づいた音色の楽音を生成する音源と、
を有する電子楽器。
100 電子鍵盤楽器
101 鍵盤
102 音色選択ボタン
103 機能選択ボタン
104 ベンダ/モジュレーション・ホイール
105 LCD
201 CPU
202 ROM
203 RAM
204 大容量フラッシュメモリ
205 音源LSI
206 波形メモリ
207 キー・スキャナ
208 A/Dコンバータ
209 LCDコントローラ
210 D/Aコンバータ
211 アンプ
213 MIDI I/F
214 システムバス

Claims (9)

  1. 演奏情報が入力される毎に、複数種の音色波形データ夫々を指定するための複数種の波形指定情報の中から前記入力された演奏情報に対応する波形指定情報に基づいて、第1の記憶装置に記憶された前記複数種の音色波形データそれぞれに対応する波形指定情報に対して優先度を付与する優先度付与処理と、
    前記第1の記憶装置から、前記付与されている優先度に基づいた順番で前記波形指定情報を選択するとともに、前記選択された波形指定情報に対応する音色波形データを順次読み出し、前記読み出された複数種の音色波形データを第2の記憶装置に書き込む波形書き込み処理と、
    を実行する処理部を備えた波形書き込み装置。
  2. 前記処理部は、前記演奏情報が入力される毎に、複数種の音色波形データ夫々を指定するための複数種の波形指定情報の中から前記入力された演奏情報に対応する波形指定情報を順次メモリに記憶させる記憶処理をさらに実行し、
    前記優先度付与処理は、前記メモリに記憶されている波形指定情報に基づいて、第1の記憶装置に記憶された前記複数種の音色波形データそれぞれに対応する波形指定情報に対して優先度を付与する処理を実行する、請求項1に記載の波形書き込み装置。
  3. 前記第2の記憶装置は、ランダムアクセスメモリを備え、前記第1の記憶装置は、前記第2の記憶装置より容量の大きいフラッシュメモリを備えた、請求項1または2に記載の波形書き込み装置。
  4. 前記第1の記憶装置には、異なる音色毎に前記複数の音色波形データが記憶され、
    前記処理部は、
    前記記憶処理において、前記入力された演奏情報を前記音色毎に順次前記メモリに記憶させる処理を実行し、
    前記優先度付与処理において、前記メモリに前記音色毎に記憶されている演奏情報に基づいて、前記複数種の音色波形データそれぞれに優先度を前記音色毎に付与する処理を実行し、
    前記波形書き込み処理において、前記音色を選択する音色選択情報に応答して、前記第1の記憶装置から、前記音色選択情報により選択された音色に対応する前記優先度に基づいた順番で前記複数種の音色波形データを読み出し、前記読み出された音色波形データを第2の記憶装置に書き込む処理を実行する、請求項2または3に記載の波形書き込み装置。
  5. 前記処理部は、前記優先度付与処理において、前記メモリに記憶されている波形指定情報の中で数の最も数が多い種類の波形指定情報から順に高い優先度を付与する処理を実行する、請求項1乃至4の何れかに記載の波形書き込み装置。
  6. 前記演奏情報は、発生すべき楽音の音高とベロシティとを少なくとも含む情報であり、前記処理部は、優先度付与処理において、前記音高とベロシティとに基づいて、前記複数種の音色波形データそれぞれに前記優先度を付与する処理を実行する、請求項1乃至5の何れかに記載の波形書き込み装置。
  7. 処理部を有する波形書き込み装置に用いられる波形書き込み方法であって、前記処理部は、
    演奏情報が入力される毎に、複数種の音色波形データ夫々を指定するための複数種の波形指定情報の中から前記入力された演奏情報に対応する波形指定情報に基づいて、第1の記憶装置に記憶された前記複数種の音色波形データそれぞれに対応する波形指定情報に対して優先度を付与し、
    前記第1の記憶装置から、前記付与されている優先度に基づいた順番で前記波形指定情報を選択するとともに、前記選択された波形指定情報に対応する音色波形データを順次読み出し、前記読み出された複数種の音色波形データを第2の記憶装置に書き込む、波形書き込み方法。
  8. 波形書き込み装置として用いられるコンピュータに、
    演奏情報が入力される毎に、複数種の音色波形データ夫々を指定するための複数種の波形指定情報の中から前記入力された演奏情報に対応する波形指定情報に基づいて、第1の記憶装置に記憶された前記複数種の音色波形データそれぞれに対応する波形指定情報に対して優先度を付与する優先度付与ステップと、
    前記第1の記憶装置から、前記付与されている優先度に基づいた順番で前記波形指定情報を選択するとともに、前記選択された波形指定情報に対応する音色波形データを順次読み出し、前記読み出された複数種の音色波形データを第2の記憶装置に書き込む波形書き込みステップと、
    を実行させるプログラム。
  9. 請求項1乃至6のいずれかに記載の波形書き込み装置と、
    演奏情報を入力する演奏操作子と、
    複数種の音色波形データが記憶された第1の記憶装置と、
    第2の記憶装置と、
    前記演奏操作子からの演奏情報により前記第2の記憶装置から読み出された音色波形データに基づいた音色の楽音を生成する音源と、
    を有する電子楽器。
JP2015179673A 2015-09-11 2015-09-11 波形書き込み装置、方法、プログラム、及び電子楽器 Pending JP2017054075A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2015179673A JP2017054075A (ja) 2015-09-11 2015-09-11 波形書き込み装置、方法、プログラム、及び電子楽器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015179673A JP2017054075A (ja) 2015-09-11 2015-09-11 波形書き込み装置、方法、プログラム、及び電子楽器

Publications (1)

Publication Number Publication Date
JP2017054075A true JP2017054075A (ja) 2017-03-16

Family

ID=58320787

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015179673A Pending JP2017054075A (ja) 2015-09-11 2015-09-11 波形書き込み装置、方法、プログラム、及び電子楽器

Country Status (1)

Country Link
JP (1) JP2017054075A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019168644A (ja) * 2018-03-26 2019-10-03 カシオ計算機株式会社 電子楽器、電子楽器の制御方法及び制御プログラム

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019168644A (ja) * 2018-03-26 2019-10-03 カシオ計算機株式会社 電子楽器、電子楽器の制御方法及び制御プログラム
JP7130185B2 (ja) 2018-03-26 2022-09-05 カシオ計算機株式会社 電子楽器、電子楽器の制御方法及び制御プログラム

Similar Documents

Publication Publication Date Title
CN105659314A (zh) 通过自动地调整样本特征来组合音频样本
JP6388048B1 (ja) 楽音生成装置、楽音生成方法、楽音生成プログラム及び電子楽器
CN108630178B (zh) 乐音生成装置、乐音生成方法、记录介质及电子乐器
JP6455189B2 (ja) 波形読み込み装置、方法、プログラム、および電子楽器
JP6657693B2 (ja) 波形書き込み装置、方法、プログラム、及び電子楽器
EP3435371B1 (en) Musical sound generation device, musical sound generation method and storage medium
CN107230471B (zh) 波形写入装置、方法、电子乐器以及存储介质
EP3550555A1 (en) Electronic musical instrument, method, and storage medium
KR102082239B1 (ko) 전자 악기와 연동된 유저 단말을 이용한 음악 콘텐츠의 제공 방법, 장치 및 컴퓨터 판독가능 매체
JP2017054075A (ja) 波形書き込み装置、方法、プログラム、及び電子楽器
JP6724316B2 (ja) 波形書き込み装置、方法、プログラム、及び電子楽器
JP6540057B2 (ja) 波形読み込み装置、方法、プログラム、および電子楽器
JP6443773B2 (ja) 楽音生成装置、楽音生成方法、楽音生成プログラム及び電子楽器
JP6606839B2 (ja) 波形書き込み装置、方法、プログラム、および電子楽器
JP3318790B2 (ja) 音像定位制御装置
JP6996148B2 (ja) 楽音発生装置、方法、プログラム、及び電子楽器
JP2005215709A (ja) 楽音発生装置
JP3646823B2 (ja) 電子楽器
JP2715677B2 (ja) 電子楽器
JP2960107B2 (ja) 電子チャイム装置
JP2018054857A (ja) 電子楽器、電子楽器の制御方法、及びプログラム
JP4082313B2 (ja) 音源装置及びプログラム
JP2697287B2 (ja) 電子楽器
JP2019032566A (ja) 楽音生成装置、楽音生成方法、楽音生成プログラム及び電子楽器
JPH05265448A (ja) 楽音発生装置