図面 (/)

技術 波形読込み装置、方法、プログラム、及び電子楽器

出願人 カシオ計算機株式会社
発明者 佐藤博毅
出願日 2016年3月23日 (3年5ヶ月経過) 出願番号 2016-058773
公開日 2017年9月28日 (1年11ヶ月経過) 公開番号 2017-173522
状態 特許登録済
技術分野 電気楽器
主要キーワード ゾーンパラメータ 波形データ群 セグメントグループ 波形領域 色選択情報 読込み装置 読込みステップ 構造体メンバ
関連する未来課題
重要な関連分野

この項目の情報は公開日時点(2017年9月28日)のものです。
また、この項目は機械的に抽出しているため、正しく解析できていない場合があります

図面 (20)

課題

電子楽器等の波形読込み技術において、一次記憶装置上に波形が存在しない音色が選択されて新たな音色波形データ二次記憶装置から一次記憶装置に読み込む際に、確実に新しい波形を読込み可能とする。

解決手段

一次記憶装置である波形メモリは、夫々が一定サイズの記憶領域からなる1つ以上のセグメントからなり、セグメントのそれぞれにはユーザによって指定された音色に対応する1組以上の波形データが記憶される。セグメントの一定サイズは、全ての波形データのサイズよりも下回らないように設定される。二次記憶装置である大容量メモリは、複数の音色に対応し、音色の夫々に対応して1組以上の波形データが記憶されている。音色選択情報によって指定される新たな音色の波形データが一次記憶装置に記憶されていない場合に、新たな音色を構成する1組以上の波形データが必要とする数の空きセグメントが一次記憶装置上で確保される。

概要

背景

波形読込み方式により楽音波形を発生する音源装置では、より多数の、より長時間の波形データを利用できるようにするために、使用しない波形データは例えばROM(一次記憶装置)に保存しておき、使用する波形データのみを音源装置が直接アクセスできる波形メモリとして機能するRAM(二次記憶装置)に転送して発音させるというシステムを採用するものがある。つまり、高価なRAMが有する記憶容量以上の記憶容量の波形データを安価なROMに保持しておき、必要な場合のみ移動して発音に使用するというコスト的には効率的な方法であると言える。

このようなシステムの場合、ROMからRAM上に新たな音色波形を読み込む際に空きのエリア不足した場合は、別の音色の波形が読み込まれているRAM上の記憶領域に上書きを行うことになる。

このような制御を行うための従来技術として、次のような技術が知られている(例えば特許文献1に記載の技術)。ROMには、音色ごとに1つ以上の波形データが格納されている。音源LSI(大規模集積回路)は、指定された曲の曲データを参照して、それらの波形データのなかで楽音の発音に必要なものを特定し、必要と特定した波形データはそのなかで必要な部分を更に特定する。それにより、楽音の発音に必要な波形データはその必要な部分のみをROMから読み出してRAMに転送し格納させる。これにより、発音させるべき楽音の波高値生成用に波形データをRAMに格納する場合に、そのデータ量をより抑えることが可能な楽音発生装置を提供するものである。

概要

電子楽器等の波形読込み技術において、一次記憶装置上に波形が存在しない音色が選択されて新たな音色波形データを二次記憶装置から一次記憶装置に読み込む際に、確実に新しい波形を読込み可能とする。一次記憶装置である波形メモリは、夫々が一定サイズの記憶領域からなる1つ以上のセグメントからなり、セグメントのそれぞれにはユーザによって指定された音色に対応する1組以上の波形データが記憶される。セグメントの一定サイズは、全ての波形データのサイズよりも下回らないように設定される。二次記憶装置である大容量メモリは、複数の音色に対応し、音色の夫々に対応して1組以上の波形データが記憶されている。音色選択情報によって指定される新たな音色の波形データが一次記憶装置に記憶されていない場合に、新たな音色を構成する1組以上の波形データが必要とする数の空きセグメントが一次記憶装置上で確保される。

目的

これにより、発音させるべき楽音の波高値生成用に波形データをRAMに格納する場合に、そのデータ量をより抑えることが可能な楽音発生装置を提供する

効果

実績

技術文献被引用数
0件
牽制数
0件

この技術が所属する分野

(分野番号表示ON)※整理標準化データをもとに当社作成

ライセンス契約や譲渡などの可能性がある特許掲載中! 開放特許随時追加・更新中 詳しくはこちら

請求項1

複数のグループに分割された複数の波形データを有する音色波形データ複数種記憶した一次記憶装置から、前記複数種の音色波形データのいずれかを指定する指定処理と、夫々が予め定められたサイズの記憶領域からなる複数のセグメントを有し、前記セグメントのそれぞれに前記波形データが記憶可能な二次記憶装置に、前記指定された音色波形データが記憶されているか否かを判別する判別処理と、前記指定された音色波形データが記憶されていないと判別された場合に、前記指定された音色波形データ内の複数のグループの数に対応する数のセグメントを前記二次記憶装置内で確保するセグメント確保処理と、前記確保された数のセグメントの領域に、前記一次記憶装置に記憶されている前記指定された音色波形データを読み込む読込み処理と、を実行する処理部を備えた波形読込み装置

請求項2

前記音色波形データ内のグループそれぞれに含まれる波形データのサイズは、前記二次記憶装置の前記各セグメントのサイズを越えない、請求項1に記載の波形読込み装置。

請求項3

前記処理装置はさらに、前記二次記憶装置が有する複数のセグメントのうち、空きのセグメントの数を取得する取得処理を実行し、前記セグメント確保処理は、前記取得された空きのセグメント数が前記指定された音色波形データのグループ数と同じあるいはそれ以上の場合は、前記指定された音色波形データのグループ数と同じ数の空きのセグメントを確保し、前記取得された空きのセグメント数が前記指定された音色波形データのグループ数より少ない場合は、前記空きのセグメントと、前記空いていないセグメントの中で予め定められた条件を満たすセグメントとを確保する処理を実行する、請求項1または2に記載の波形読込み装置。

請求項4

前記予め定められた条件を満たすセグメントは、前記二次記憶装置に記憶されている音色波形データのうち、記憶されている期間が最も長い音色波形データを記憶しているセグメントである、請求項3に記載の読込転送装置

請求項5

前記一次記憶装置は、フラッシュメモリを備え、二次記憶装置は、一次記憶装置より容量の小さいランダムアクセスメモリを備えた、請求項1乃至4のいずれかに記載の波形読込み装置。

請求項6

波形読込み装置に用いられる波形読込み方法であって、前記波形読込み装置が、複数のグループに分割された複数の波形データを有する音色波形データを複数種記憶した一次記憶装置から、前記複数種の音色波形データのいずれかを指定し、夫々が予め定められたサイズの記憶領域からなる複数のセグメントを有し、前記セグメントのそれぞれに前記波形データが記憶可能な二次記憶装置に、前記指定された音色波形データが記憶されているか否かを判別し、前記指定された音色波形データが記憶されていないと判別された場合に、前記指定された音色波形データ内の複数のグループの数に対応する数のセグメントを前記二次記憶装置内で確保し、前記確保された数のセグメントの領域に、前記一次記憶装置に記憶されている前記指定された音色波形データを読み込む、波形読み込み方法

請求項7

波形読込み装置として用いられるコンピュータに、複数のグループに分割された複数の波形データを有する音色波形データを複数種記憶した一次記憶装置から、前記複数種の音色波形データのいずれかを指定する指定ステップと、夫々が予め定められたサイズの記憶領域からなる複数のセグメントを有し、前記セグメントのそれぞれに前記波形データが記憶可能な二次記憶装置に、前記指定された音色波形データが記憶されているか否かを判別する判別ステップと、前記指定された音色波形データが記憶されていないと判別された場合に、前記指定された音色波形データ内の複数のグループの数に対応する数のセグメントを前記二次記憶装置内で確保するセグメント確保ステップと、前記確保された数のセグメントの領域に、前記一次記憶装置に記憶されている前記指定された音色波形データを読み込む読込みステップと、を実行させるプログラム

請求項8

請求項1に記載の波形読込み装置と、前記一次記憶装置と、前記二次記憶装置と、演奏情報を供給する演奏操作子と、音色を指定する音色指定操作子と、前記演奏情報の供給に応答して、前記演奏情報と前記指定された音色とに基づいて、前記一次記憶装置から読み出された前記波形データに対応する楽音を生成する音源と、を備えた電子楽器

請求項9

前記音色波形データ内のグループそれぞれに含まれる波形データのサイズは、前記二次記憶装置の前記各セグメントのサイズを越えない、請求項8に記載の電子楽器。

技術分野

0001

本発明は、波形読込み装置、方法、プログラム、及びその装置を用いた電子楽器に関する。

背景技術

0002

波形読込み方式により楽音波形を発生する音源装置では、より多数の、より長時間の波形データを利用できるようにするために、使用しない波形データは例えばROM(一次記憶装置)に保存しておき、使用する波形データのみを音源装置が直接アクセスできる波形メモリとして機能するRAM(二次記憶装置)に転送して発音させるというシステムを採用するものがある。つまり、高価なRAMが有する記憶容量以上の記憶容量の波形データを安価なROMに保持しておき、必要な場合のみ移動して発音に使用するというコスト的には効率的な方法であると言える。

0003

このようなシステムの場合、ROMからRAM上に新たな音色波形を読み込む際に空きのエリア不足した場合は、別の音色の波形が読み込まれているRAM上の記憶領域に上書きを行うことになる。

0004

このような制御を行うための従来技術として、次のような技術が知られている(例えば特許文献1に記載の技術)。ROMには、音色ごとに1つ以上の波形データが格納されている。音源LSI(大規模集積回路)は、指定された曲の曲データを参照して、それらの波形データのなかで楽音の発音に必要なものを特定し、必要と特定した波形データはそのなかで必要な部分を更に特定する。それにより、楽音の発音に必要な波形データはその必要な部分のみをROMから読み出してRAMに転送し格納させる。これにより、発音させるべき楽音の波高値生成用に波形データをRAMに格納する場合に、そのデータ量をより抑えることが可能な楽音発生装置を提供するものである。

先行技術

0005

特開2007−271827号公報

発明が解決しようとする課題

0006

ところで、一般に1つの音色で複数の波形データを持つケースでも、1つの波形データは分断してRAM上に配置することは音源LSIの読出し構造上許されず、必ず連続して配置される必要がある。つまり、新たに音色を選択してRAM上に配置する際には各波形データが連続して配置されるだけの空きエリアを用意する必要がある。

0007

しかしながら、従来技術では、波形の読込みや上書きを繰り返すことにより、RAM上での波形の使用領域未使用領域の配置は無秩序になり、これによって発生する問題として、RAM上に読み込まれた不要な音色波形を捨てて容量的に十分と思われる空きエリアを確保しても、連続性が無いと波形が読み込めないケースがあることである。例えば400KBキロバイト)の空きエリアが10箇所あっても、500KBの波形をロードすることはできない。そのため、さらなるRAM上の音色波形を犠牲にして、所望の音色の波形の読込みを行う必要が生ずる。これではRAMの使用効率が非常に悪くなるケースが存在するばかりでなく、同じ音色の波形がRAM上に存在したとしても、ある音色を読み込めるのかどうか予想がつかないという使いにくさも生じる。例えばA、B、Cという音色がRAM上にある場合に、新たにDという音色をROMからRAMに読み込もうとした場合、或るケースではそのまま読み込め、他のケースではAを上書きする必要があり、更に他のケースではA、Bを上書きする必要があるなど、予想がつかない。

0008

一般のコンピュータ上などでも同様に一次記憶装置、二次記憶装置を持つため、同様の問題が発生するが、これを解決するために、各ファイルが使用している記憶領域を一箇所に集める、いわゆるデフラグメンテーションあるいはガベージコレクションという処理もあり、楽器のように常にリアルタイム性を要求されないコンピュータの世界では、ユーザがそれを意識的に行うこともある。

0009

しかしながら、これらの処理は非常に時間を要する処理なので、電子楽器で音色選択したような時に実行できるものではないという課題があった。かといって演奏していない時にユーザが実行するというのもユーザに余計な精神的負担課することになり、楽器として好ましいものではないという課題があった。

0010

そこで、本発明は、二次記憶装置上に波形が存在しない音色が選択されて新たな音色波形データを一次記憶装置から二次記憶装置に読み込む際に、確実に新しい波形を読込み可能とすることにより、読み込みたい波形の容量よりもはるかに大きな空きエリアがありながら読み込めないという非効率な状態を回避することを目的とする。

課題を解決するための手段

0011

態様の一例では、複数のグループに分割された複数の波形データを有する音色波形データを複数種記憶した一次記憶装置から、前記複数種の音色波形データのいずれかを指定する指定処理と、夫々が予め定められたサイズの記憶領域からなる複数のセグメントを有し、前記セグメントのそれぞれに前記波形データが記憶可能な二次記憶装置に、前記指定された音色波形データが記憶されているか否かを判別する判別処理と、前記指定された音色波形データが記憶されていないと判別された場合に、前記指定された音色波形データ内の複数のグループの数に対応する数のセグメントを前記二次記憶装置内で確保するセグメント確保処理と、前記確保された数のセグメントの領域に、前記一次記憶装置に記憶されている前記指定された音色波形データを読み込む読込み処理と、を実行する処理部を備える。

発明の効果

0012

本発明によれば、二次記憶装置上に波形が存在しない音色が選択されて新たな音色波形データを一次記憶装置から二次記憶装置に読み込む際に、確実に新しい波形を読込み可能となり、読み込みたい波形の容量よりもはるかに大きな空きエリアがありながら読み込めないという非効率な状態を回避することが可能となる。

図面の簡単な説明

0013

本発明による電子鍵盤楽器の実施形態の外観図である。
電子鍵盤楽器の実施形態のハードウェア構成例を示す図である。
本実施形態における波形データセグメント概念を説明する図である。
フラッシュメモリ音色情報テーブルと音色選択優先度テーブルデータ構成例を示す図である。
音色ごとの波形データの大容量フラッシュメモリから波形メモリへの転送動作を説明する図である。
波形スプリットの説明図である。
ROMに記憶される構造体定数データの例を示す図である。
RAMに記憶される変数データの例を示す図である。
制御処理の全体処理の例を示すメインルーチンフローチャートである。
初期化処理の詳細例を示すフローチャートである。
音色切替え処理の詳細例を示すフローチャートである。
RAM波形データ調査ルーチン及び波形領域確保ルーチンの詳細例を示すフローチャートである。
空きセグメント数調査ルーチンの詳細例を示すフローチャートである。
波形領域開放ルーチンの詳細例を示すフローチャートである。
波形読込み指示ルーチンの詳細例を示すフローチャートである。
波形読込み処理の詳細例を示すフローチャートである。
波形転送ルーチンの詳細例を示すフローチャートである。
押鍵処理の詳細例を示すフローチャートである。
スプリット波形検索ルーチンの詳細例を示すフローチャートである。
セグメント内波形検索ルーチンの詳細例を示すフローチャートである。

実施例

0014

以下、本発明を実施するための形態(以下「本実施形態」と記載する)について図面を参照しながら詳細に説明する。本実施形態は、例えば電子鍵盤楽器に適用される、音高鍵域)や音量ベロシティ打鍵の速さ)などの演奏情報によって音色が変化するのを再現するために、大容量の一次記憶装置(例えばフラッシュメモリ)から二次記憶装置(例えばRAMによる波形メモリ)に、音高又は音量ごとの波形データ(以下これを「スプリット波形」と呼ぶ)を読み込む楽音発生装置を対象とする。本実施形態は、このような楽音発生装置において、二次記憶装置上に波形が存在しない音色が選択されて新たな音色波形データを一次記憶装置から二次記憶装置に読み込む際に、確実に新しい波形を読込み可能となり、読み込みたい波形の容量よりもはるかに大きな空きエリアがありながら読み込めないという非効率な状態を回避することができる電子楽器を実現するものである。

0015

図1は、本発明による電子鍵盤楽器の実施形態の外観図である。本実施形態は、電子鍵盤楽器100として実施される。電子鍵盤楽器100は、演奏操作子としての複数の鍵からなる鍵盤101と、音色選択操作子としての音色選択を行うための音色選択ボタン102及び音色以外の各種機能選択を行う機能選択ボタン103からなるスイッチ・パネルと、ピッチベンドトレモロビブラート等の各種モジュレーション(演奏効果)を付加するベンダ/モジュレーション・ホイール104、音色や音色以外の各種設定情報を表示するLCD(Liquid Crystal Display:液晶ディスプレイ)105等を備える。また、電子鍵盤楽器100は、特には図示しないが、演奏により生成された楽音を放音するスピーカを裏面部、側面部、又は背面部等に備える。

0016

音色選択ボタン102は、図1に示されるように、ピアノ(図中「Piano」)、エレクトリックピアノ(図中「E.piano」)、オルガン(図中「Organ」)、ギター(図中「Guitar)等の各種音色カテゴリを選択するためのボタン群である。ユーザは、この音色選択ボタン102を押下することにより、例えば16音色のうちの何れかを選択することができる。

0017

図2は、図1の電子鍵盤楽器100の実施形態のハードウェア構成例を示す図である。図2において、電子鍵盤楽器100は、CPU(中央演算処理装置)201、ROM(リードオンリーメモリ)202、RAM(ランダムアクセスメモリ)203、大容量フラッシュ(Flash)メモリ204、波形メモリ206が接続される音源LSI(大規模集積回路)205、図1の鍵盤101と図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で増幅された後に、特には図示しないスピーカ又は出力端子から出力される。

0018

CPU201は、RAM203をワークメモリとして使用しながらROM202に記憶された制御プログラムを実行することにより、図1の電子鍵盤楽器100の制御動作を実行する。また、ROM202は、上記制御プログラム及び各種固定データを記憶する。

0019

大容量フラッシュメモリ204(一次記憶装置)は、複数の音色を構成する波形データ等の大容量データの格納領域であり、シーケンシャルアクセスにより順次アクセスされる。一方、音源LSI205には、波形データを展開するRAMで構成される波形メモリ206(二次記憶装置)が接続され、発音される楽音の波形データは必ず、この波形メモリ206上に配置されている必要がある。CPU201は、ユーザが図1の音色選択ボタン102を操作することにより指定した音色に対応する1組以上の波形データを大容量フラッシュメモリ204からシーケンシャルに読みだし、それを音源LSI205経由で波形メモリ206に転送することで、音色データ入れ替えることができる。

0020

LCDコントローラ209は、LCD105を制御するIC(集積回路)である。キー・スキャナ207は、鍵盤101や音色選択ボタン102又は機能選択ボタン103等のスイッチ・パネルの状態を走査して、CPU201に通知するICである。A/Dコンバータ208は、ベンダ/モジュレーション・ホイール104の操作位置を検出する集積回路である。

0021

以上の構成を有する電子鍵盤楽器100の実施例における動作仕様概要についてまず説明する。

0022

まず、ユーザインタフェースについて説明する。本実施形態における電子鍵盤楽器100では、ユーザが図1の音色選択ボタン102を押下することで、例えば16の音色のうち、いずれかを選択して演奏することができる。

0023

次に、波形データの読込み転送動作について説明する。図3は、本実施形態における波形データセグメントの概念を説明する図である。波形メモリ(RAM)上でセグメント管理がされない従来の電子鍵盤楽器では、データ配置301として示されるように、波形データの読込が繰り返されると、使用領域と空き領域が無秩序な配置になり、たとえ合計では十分な空き領域があったとしても、連続性が無いばかりに読み込むエリアが確保できないというケースが起こりえていた。

0024

これに対して本実施形態では、302として示されるデータ配置を有する。このデータ配置においては、波形メモリ206の記憶領域において、一定の間隔で跨ぐことができない境界線が設けられる。本実施形態において、この隣り合う境界線と境界線の間の領域をセグメントと呼ぶ。この1セグメントのデータサイズは、全て同じであり、各音色を構成する1つ以上の波形データの中で最もサイズが大きいものよりも下回らないように設定される。本実施形態では、大容量フラッシュメモリ204から波形メモリ206への波形データの読込みは、このセグメントを単位として実行される。本実施形態において、1つの音色は1つ又は複数の波形データを持つ。1つの音色の1つ以上の波形データの読込みにおいては、1つ又は複数のセグメント単位で波形メモリ206の記憶領域が確保され、読込が実行される。この場合に、確保された複数のセグメントは、連続して配置されている必要はない。また、1つのセグメントには、同じ音色の波形データを複数読み込むことができるが、異なる音色の波形データが混在して読み込まれないように、制御が実行される。

0025

大容量フラッシュメモリ20上には例えば全16音色分の波形データ群が記録されており、その中からユーザが指定した音色を構成する1つ以上の波形データを音源LSI205の波形メモリ206に読み込むことで、発音が可能となる。この音色情報は、図2のROM202に記憶されるフラッシュメモリ音色情報テーブルによって管理される。図4(a)は、フラッシュメモリ音色情報テーブルのデータ構成例を示す図である。図4(a)の表として例示されるフラッシュメモリ音色情報テーブルの2行目以降の各行として示される各音色のエントリには、図4(a)の表の1行目に示されるように、音色番号を示す「番号」項目値と、「音色名」項目値と、大容量フラッシュメモリ204の波形記憶領域の先頭からの記憶アドレスオフセット16進数)を示す「波形アドレスオフセット」項目値と、その音色に含まれる波形データ群の合計の波形サイズ(16進数)を示す「波形サイズ」項目値と、それらの波形データ群が使用する「使用セグメント数」項目値とが記憶されている。

0026

上記16音色の各々は、1音色あたり最大で例えば64種類の波形データから構成され、大容量フラッシュメモリ204に連続的に格納されている。音色内の各波形データのうち、波形メモリ206内の1つのセグメント内に転送される1つ以上の波形データは1つのグループにグルーピングされる。波形メモリ206内の1つのセグメント内に転送される波形データは、大容量フラッシュメモリ204上でも必ず連続している。1つの音色の各波形データの情報は、図2のROM202に記憶される音色波形情報テーブルによって管理される。図4(b)は、1音色あたり最大で64の波形データを管理する音色波形情報テーブルのデータ構成例を示す図である。図4(b)の表として例示される音色波形情報テーブルの2行目以降の各行として示される各波形データのエントリには、図4(b)の表の1行目に示されるように、0から63までの「波形番号」項目値が記憶される。またこのエントリには、演奏時に演奏されたキーやベロシティ(強度)によってどの波形を読みだして発音させるかを判断するための情報(スプリットゾーンパラメータ)として、「最低ベロシティ」項目値、「最高ベロシティ」項目値、「最低キー番号」項目値、及び「最高キー番号」項目値が記憶される。またこのエントリには、その波形データが転送先の波形メモリ206のセグメントのどのアドレスから記憶されているかを示す「セグメント先頭からのアドレス」項目値と、その波形データのサイズを示す「波形サイズ」項目値が記憶される。なお、値の左端に付与されている記号「H」は、その値が16進数であることを示す。更にこのエントリには、その波形データが含まれるグループを示す「セグメントグループ」項目値が記憶される。

0027

本実施形態においては、ユーザによって指定された音色を構成する波形データ群が波形メモリ206上に記憶されていない場合には、次の制御処理が実行される。まず、セグメントを単位として、大容量フラッシュメモリ204から波形メモリ206に新たに読み込まれる音色を構成する1つ以上の波形データ群が必要とする数のセグメントの空き領域が、波形メモリ206上で探索されて確保される。必要なセグメント数は、ROM202に記憶されている図4(a)に例示されるフラッシュメモリ音色情報テーブルにおいて、指定された音色に対応するエントリの「使用セグメント数」項目値が参照されることにより決定される。波形メモリ206上で必要な数の空きセグメントが無い場合には、必要なセグメント数が確保されるまで、古い順に使用されていた音色に対応するセグメントが順次開放されて確保される。

0028

次に、大容量フラッシュメモリ204に記憶されている指定された音色に対応する波形データ群が、波形メモリ206上で確保された空きセグメントに順次転送される。このとき、指定された音色に対応するROM202に記憶されている図4(b)に例示される音色波形情報テーブルにおいて、「セグメントグループ」項目値が(0から)小さい順に同じ値を有する波形データ群は、波形メモリ206上の(番号が小さい順の)1つの空きセグメントに転送される。図5は、音色ごとの波形データの大容量フラッシュメモリ204から波形メモリ206への転送動作を説明する図である。例えば図5(a)に示されるGuitar音色を構成する大容量フラッシュメモリ204上の0番から10番の波形データ群が図5(b)の波形メモリ206に転送される場合、「セグメントグループ」項目値=0である0番から2番までの連続する3組の波形データ群は図5(b)の波形メモリ206上の空きセグメント=Seg0に転送され、「セグメントグループ」項目値=1である3番から5番までの連続する3組の波形データ群は波形メモリ206上の空きセグメント=Seg4に転送され、「セグメントグループ」項目値=2である6番から8番までの連続する3組の波形データ群は波形メモリ206上の空きセグメント=Seg6に転送され、「セグメントグループ」項目値=3である9番と10番の連続する2組の波形データ群は波形メモリ206上の空きセグメント=Seg63に転送される。一方例えば、例えば図5(c)に示されるSaxophone音色を構成する大容量フラッシュメモリ204上の0番から8番の波形データ群が図5(b)の波形メモリ206に転送される場合、「セグメントグループ」項目値=0である0番から2番までの連続する3組の波形データ群は図5(b)の波形メモリ206上の空きセグメント=Seg2に転送され、「セグメントグループ」項目値=1である3番から5番までの連続する3組の波形データ群は波形メモリ206上の空きセグメント=Seg3に転送され、「セグメントグループ」項目値=2である6番と7番の連続する2組の波形データ群は波形メモリ206上の空きセグメント=Seg5に転送され、「セグメントグループ」項目値=3である8番の1組の波形データ群は波形メモリ206上の空きセグメント=Seg7に転送される。転送先のセグメントに対応付けて、そのセグメントに転送された波形データに対応する「セグメントグループ」項目値が、例えばRAM203(図2)に記憶される。

0029

各セグメントは、前述したように最もサイズが大きい波形データに合わせた、例えば100000H(「H」は16進数を示す)バイト=1MB(メガバイト)のサイズを有する。従って、1つの波形データは必ず、1つのセグメント内の記憶領域に連続して転送することが可能となる。合計で例えば1MB以下になる同じ「セグメントグループ」項目値を有する連続する複数の波形データも、1つのセグメントに転送することができる。これにより、偶然性に依存して空き容量よりも遥かに小さいサイズの波形データが読み込めないということは起こらなくなる。

0030

ユーザによって指定された音色を構成する波形データ群が波形メモリ206上に記憶されている場合には、それらの波形データ群は大容量フラッシュメモリ204からあらためて読み込む必要は無いので、そのまま発音処理に使用することができる。この際、読込みは発生しないものの、履歴上は最新の音色として記録される。

0031

図6は、押鍵が発生した場合の発音処理時の波形スプリットの説明図である。本実施形態では、図6に例示されるように、演奏時のキー番号とベロシティ(演奏強さ)が最大で64領域に2次元的に分割され、それぞれの分割された領域(スプリットエリア)に、上述のように波形メモリ206に転送された1音色あたり1組以上最大で64組の波形データがそれぞれ割り当てられる。図2において、CPU201は、キー・スキャナ207を介して鍵盤101における押鍵の発生を検出すると、現在演奏中の音色に対応するROM202(図2)内の図4(b)に例示される音色波形情報テーブルのエントリのうち、押鍵発生時のキー番号値が「最低キー番号」項目値から「最高キー番号」項目値までの範囲に含まれ、押鍵発生時のベロシティが「最低ベロシティ」項目値から「最高ベロシティ」項目値までの範囲に含まれるエントリが検索される。そして、検索された当該エントリの「セグメントグループ」項目値と同じセグメントグループの値が対応付けられている波形メモリ206上のセグメント内の、当該エントリの「セグメント先頭からのアドレス」項目値に対応するアドレスから、当該エントリの「波形サイズ」項目値に対応する波形サイズ分だけの波形データが、押鍵発生時のキー番号に対応する速度で読み出されて押鍵発生時のベロシティに対応する強度で発音される。

0032

CPU201は、ユーザによって指定された音色を構成する波形データ群が波形メモリ206上に記憶されていない場合には、これらの波形データ群が大容量フラッシュメモリ204から波形メモリ206に転送されるが、この波形転送はバックグラウンド処理として1組の波形データごとに分割して実行される。従って、押鍵発生時にCPU201がスプリットエリアを判別してそのエリアに対応する波形データの波形メモリ206からの読出しを音源LSI205に指示したときに、該当する波形データが大容量フラッシュメモリ204から波形メモリ206への転送の最中である場合には、まだ波形データが波形メモリ206上に揃っていないため、音源LSI205は発音を行わない。

0033

ROM202(図2)に記憶される図4(a)の例のフラッシュメモリ音色情報テーブル及び図4(b)の例の音色波形情報テーブルは、CPU201(図2)が実行する制御プログラム上からは、構造体の定数データとしてアクセスすることができる。図7は、ROM202に記憶される構造体の定数データの例を示す図である。

0034

まず、図4(a)に例示されるフラッシュメモリ音色情報テーブルは、図7に示される、構造体TONE_INF[16]([]内の数字は配列数を示す)と、その構造体を構成するメンバ定数である配列定数NAME[16]([]内の数字は配列数を示す)、定数WAVE_TOTAL_SIZE、及び定数NUM_SEGとによって構成される。構造体TONE_INF[16]は例えば、RAM203(図2)上の変数Tによって、TONE_INF[T]としてアクセスされる。変数Tが例えば0から15までの値域をとることにより、図4(a)のフラッシュメモリ音色情報テーブルにおける「番号」項目値が0から15までの各音色のエントリが指定される。メンバ定数NAME[16]は、図4(a)の例の「音色名」項目値に対応する16文字までの音色表示名を格納する。このメンバ定数へは例えば、RAM203上の変数iによって、TONE_INF[T].NAME[i]というフォーマットでアクセスされる。変数iが例えば0から15までの値域をとることにより、変数Tの値に対応する音色の音色表示名(0〜15文字目)が表される。メンバ定数WAVE_TOTAL_SIZEは、図4(a)の「波形サイズ」項目値に対応する音色内の波形データの合計サイズを格納する。このメンバ定数へは例えば、TONE_INF[T].WAVE_TOTAL_SIZEというフォーマットでアクセスされる。これは、変数Tの値に対応する音色の波形データの合計サイズを示す。メンバ定数NUM_SEGは、図4(a)の「使用セグメント数」項目値に対応する音色内の波形データが使用するセグメント数を格納する。このメンバ定数へは例えば、TONE_INF[T].NUM_SEGというフォーマットでアクセスされる。これは、変数Tの値に対応する音色の使用セグメント数を示す。

0035

次に、図4(b)に例示される音色波形情報テーブルは、図7に示される、上位構造体TONE_INF[16]([]内の数字は配列数を示す)と、その構造体を構成するメンバ構造体である中位構造体WAVE[64]([]内の数字は配列数を示す)と、その中位構造体を構成するメンバ定数である定数VEL_LO、VEL_HI、KEY_LO、KEY_HI、FLASH_ADRS、SEG_ADRS、SIZE、SEG_GROUP、及び下位構造体TG_INFとによって構成される。上位構造体TONE_INF[16]については前述した通りである。中位構造体WAVE[64]は例えば、RAM203(図2)上の変数wによって、WAVE[w]としてアクセスされる。変数wが例えば0から63までの値域をとることにより、図4(b)の音色波形情報テーブルにおける「波形番号」項目値が0から63までの各波形データのエントリが指定される。メンバ定数VEL_LOおよびVEL_HIは、図4(b)の「最低ベロシティ」項目値及び「最高ベロシティ」項目値にそれぞれ対応し、波形データが発音する範囲の本来の最低ベロシティ及び最高ベロシティの各値を格納する。これらのメンバ定数へは例えば、TONE_INF[T].WAVE[w].VEL_LO又はTONE_INF[T].WAVE[w].VEL_HIというフォーマットでアクセスされる。これは、変数Tの値に対応する音色の、変数wの値に対応する波形データの、最低ベロシティ又は最高ベロシティを示す。メンバ定数KEY_LOおよびKEY_HIは、図4(b)の「最低キー番号」項目値及び「最高キー番号」項目値にそれぞれ対応し、波形データが発音する範囲の本来の最低キー番号及び最高キー番号の各値を格納する。これらのメンバ定数へは例えば、TONE_INF[T].WAVE[w].KEY_LO又はTONE_INF[T].WAVE[w].KEY_HIというフォーマットでアクセスされる。これは、変数Tの値に対応する音色の、変数wの値に対応する波形データの、最低キー番号又は最高キー番号を示す。メンバ定数FLASH_ADRSは、図4(b)には明示されていないが、波形データの先頭の大容量フラッシュメモリ204上でのアドレスを格納する。このメンバ定数へは例えば、TONE_INF[T].WAVE[w].FLASH_ADRSというフォーマットでアクセスされる。これは、変数Tの値に対応する音色の、変数wの値に対応する波形データの、先頭の大容量フラッシュメモリ204上でのアドレスを示す。メンバ定数SEG_ADRSは、図4(b)の「セグメント先頭からのアドレス」項目値に対応し、波形データが波形メモリ206上で読み込まれるべきセグメントの先頭からのアドレスオフセットを格納する。このメンバ定数へは例えば、TONE_INF[T].WAVE[w].SEG_ADRSというフォーマットでアクセスされる。これは、変数Tの値に対応する音色の、変数wの値に対応する波形データの、波形メモリ206上で読み込まれるべきセグメントの先頭からのアドレスオフセットを示す。メンバ定数SIZEは、図4(b)の「波形サイズ」項目値に対応し、波形データのサイズを格納する。このメンバ定数へは例えば、TONE_INF[T].WAVE[w].SIZEというフォーマットでアクセスされる。これは、変数Tの値に対応する音色の、変数wの値に対応する波形データのサイズを示す。TONE_INF[T].WAVE[w].SIZE=0のときは、波形データが存在しないことを示す。メンバ定数SEG_GROUPは、図4(b)の「セグメントグループ」項目値に対応し、波形データが波形メモリ206上の1つのセグメントに転送されるときに、そのセグメントに付与されるセグメントグループの値を格納する。このメンバ定数へは例えば、TONE_INF[T].WAVE[w].SEG_GROUPというフォーマットでアクセスされる。これは、変数Tの値に対応する音色の、変数wの値に対応する波形データの、セグメントグループ値を示す。TONE_INF[T].WAVE[w].SEG_GROUPの値が同じ波形データは、波形メモリ206上の同じセグメントに転送される。メンバ構造体TG_INFは、音源LSI205(図2)が波形メモリ206上の1つのセグメントに転送された波形データに対して発音処理を実行する場合における各種パラメータを、その構造体のメンバ定数(図5では省略)として記憶する。それらのパラメータは例えば、波形データの読出しのスタートアドレス、繰返し位置を示すループアドレス、終了位置を示すエンドアドレス、音量、チューニング情報等である。

0036

図8は、CPU201(図2)が実行する制御処理において使用するRAM203に記憶8される主要な変数の一覧を示す図である。変数TIMESAMPは、ユーザが音色選択ボタン102(図1)を操作することにより発生する音色選択イベントごとに1ずつインクリメントする履歴番号を格納する。セグメントが割り当てられる際に、後述する構造体メンバ変数SEG_INF[s].TIMESTAMPに格納される。変数CUR_TONEは、現在演奏のために選択されている音色番号を格納する。この値が「−1」の場合は該当無し、即ち現在演奏が行われていないことを示す。変数READING_WAVEは、現在バックグラウンド処理において波形転送中の波形データの波形番号を格納する。この値が「−1」の場合は、全て読込み済みであることを示す。

0037

次に、波形メモリ206中のセグメントごとの情報が、構造体SEG_INF[64]([]内の数字は配列数を示す)と、その構造体を構成するメンバ変数TONE、SEG_GROUP、及びTIMESTAMPとによって保持される。構造体SEG_INF[64]は例えば、RAM203(図2)上の変数sによって、SEG_INF[s]としてアクセスされる。変数sが例えば0から63までの値域をとることにより、波形メモリ206上の0から63までの64セグメントの各々が指定される。メンバ変数TONEは、当該セグメントが割り当てられている音色番号を格納する。この値が「−1」の場合は、そのセグメントが空状態(未使用)であることを示す。このメンバ変数へは例えば、SEG_INF[s].TONEというフォーマットでアクセスされる。これは、変数sの値に対応するセグメントに割り当てられている音色番号を示す。メンバ変数TONEには、このセグメントへの波形転送が実行されたときの音色番号を保持するRAM203上の変数T値がコピーされる。メンバ変数SEG_GROUPは、当該セグメントに割り当てられている音色のセグメントグループ値を格納する。このメンバ変数へは例えば、SEG_INF[s].SEG_GROUPというフォーマットでアクセスされる。これは、変数sの値に対応するセグメントに割り当てられている音色のセグメントグループの値を示す。メンバ変数SEG_GROUPには、このセグメントに転送される波形データに対応する、ROM202に記憶されている図4(b)の音色波形情報テーブル中の「セグメントグループ」項目値、すなわち図7のTONE_INF[T].WAVE[w].SEG_GROUPの値がコピーされる。メンバ変数TIMESTAMPは、当該セグメントが使用された履歴番号を格納する。このメンバ変数へは例えば、SEG_INF[s].TIMESTAMPというフォーマットでアクセスされる。これは、変数sの値に対応するセグメントが使用された履歴番号を示す。ユーザが音色選択ボタン102(図1)を操作することにより発生する音色選択イベントごとに、そのタイミングで1ずつインクリメントされる変数TIMESTAMPの値がコピーされる。同じタイミングで割り当てられたセグメントは、同じTIMESTAMP値を有する。

0038

次に、波形メモリ206中の各セグメント内に格納される1組以上の波形データに関する情報が、上位構造体SEG_INF[64]([]内の数字は配列数を示す)と、その構造体を構成するメンバ構造体である中位構造体WAVE_INF[64]([]内の数字は配列数を示す)と、その中位構造体を構成するメンバ変数WAVE、WAVE_NUM、SEG_ADRS、及びSIZEとによって保持される。上位構造体SEG_INF[64]については前述した通りである。中位構造体WAVE_INF[64]は例えば、RAM203(図2)上の変数iによって、WAVE_INF[i]としてアクセスされる。変数iが例えば0から63までの値域をとることにより、1つのセグメント内の0から63までの各波形データが指定される。メンバ変数WAVEは、当該セグメント中の当該波形データの有無を格納し、この値が0のときは波形データは無しであり、この値が1のときは波形データは有り(読込み済み)であることを示す。このメンバ変数へは例えば、SEG_INF[s].WAVE_INF[i].WAVEというフォーマットでアクセスされる。これは、変数sの値に対応するセグメントの、変数iの値に対応する波形データの、有無を示す。メンバ変数WAVEの値は、当該セグメントへの当該波形データの転送が指示されたときに値0に、その後のバックグラウンド転送により当該セグメントへの当該波形データの転送が完了したときに値1に、それぞれセットされる。メンバ変数WAVE_NUMは、当該セグメント中の当該波形データの音色中の波形番号を格納し、この値が「−1」であれば波形データの割当てが無いことを示す。このメンバ変数へは例えば、SEG_INF[s].WAVE_INF[i].WAVE_NUMというフォーマットでアクセスされる。これは、変数sの値に対応するセグメントの、変数iの値に対応する波形データの、音色中での波形番号を示す。メンバ変数SEG_ADRSは、当該セグメント中での当該波形データのアドレスオフセットを格納する。このメンバ変数へは例えば、SEG_INF[s].WAVE_INF[i].SEG_ADRSというフォーマットでアクセスされる。メンバ変数SEG_ADRSには、このセグメントに転送される波形データに対応する、ROM202に記憶されている図4(b)の音色波形情報テーブル中の「セグメント先頭からのアドレス」項目値、すなわち図7のTONE_INF[T].WAVE[w].SEG_ADRSの値がコピーされる。メンバ変数SIZEは、当該セグメント中での当該波形データのサイズを格納する。このメンバ変数へは例えば、SEG_INF[s].WAVE_INF[i].SIZEというフォーマットでアクセスされる。メンバ変数SIZEには、このセグメントに転送される波形データに対応する、ROM202に記憶されている図4(b)の音色波形情報テーブル中の「波形サイズ」項目値、すなわち図7のTONE_INF[T].WAVE[w].SIZEの値がコピーされる。

0039

以下に、上述の動作を実現するためにCPU201が実行する制御処理の詳細例について説明する。

0040

図9は、CPU201が実行する制御処理の全体処理の例を示すメインルーチンのフローチャートである。この処理例は、CPU201がROM202に記憶された制御プログラムを実行する処理例である。

0041

CPU201は、まずRAM203の内容を初期化した後(ステップS901)、ステップS902からS911の一連の処理で示される定常ループ処理に入る。

0042

定常ループ処理では、CPU201はまず、ユーザインタフェース処理(図中「ユーザI/F」と表示)を実行する(ステップS902)。ここでは、CPU201は、図2のキー・スキャナ207を介して図1の音色選択ボタン102の状態を取得する。

0043

次に、CPU201は、ステップS902の処理の結果、ユーザが音色選択ボタン102を操作することにより音色選択イベントが発生したか否かを判定する(ステップS903)。

0044

そして、CPU201は、音色選択イベントが発生した場合(ステップS903の判定がYesの場合)は、音色切替え処理を実行する(ステップS904)。ステップS903の判定がNoならば、CPU201は、ステップS904の処理はスキップする。

0045

次に、CPU201は、波形読込み処理を実行する(ステップS905)。ここでは、CPU201は、図2の大容量フラッシュメモリ204から波形メモリ206へのバックグラウンド処理による波形転送を実行する。

0046

次に、CPU201は、鍵盤読込み処理を実行する(ステップS906)。ここでは、CPU201は、図2のキー・スキャナ207を介して図1の鍵盤101の押鍵状態を取得する。

0047

次に、CPU201は、ステップS906の処理の結果、ユーザが鍵盤101上の何れかの鍵を押鍵することにより押鍵イベントが発生したか否かを判定する(ステップS907)。

0048

そして、CPU201は、押鍵イベントが発生した場合(ステップS907の判定がYesの場合)は、押鍵処理を実行する(ステップS908)。ステップS907の判定がNoならば、CPU201は、ステップS908の処理はスキップする。

0049

続いて、CPU201は、ステップS906の処理の結果、ユーザが鍵盤101上の何れかの押鍵中の鍵を離鍵することにより離鍵イベントが発生したか否かを判定する(ステップS909)。

0050

そして、CPU201は、離鍵イベントが発生した場合(ステップS909の判定がYesの場合)は、離鍵処理を実行する(ステップS910)。ステップS909の判定がNoならば、CPU201は、ステップS910の処理はスキップする。

0051

その後、CPU201は、音源定常サービス処理を実行する(ステップS911)。ここでは、例えば図1の機能選択ボタン103が押された場合に対応する処理や、図1のベンダ/モジュレーション・ホイール104が操作された場合に対応する処理等の、電子鍵盤楽器100に対する一般的な処理が実行される。

0052

その後、CPU201は、ステップS902の定常ループ処理の先頭に戻る。

0053

図10は、図9のステップS901の初期化処理の詳細例を示すフローチャートである。

0054

まず、CPU201は、RAM203上の図8に示される変数の値を、全て「0」にする(ステップS1001)。

0055

次に、CPU201は、現在演奏のために選択されている音色番号を格納するRAM203上の変数CUR_TONE(図8参照)に、該当無しを示す値「−1」を格納する(ステップS1002)。

0056

次に、CPU201は、現在バックグラウンド処理において波形転送中の波形データの波形番号を格納するRAM203上の変数READING_WAVEに、全て読込み済みであることを示す値「−1」を格納する(ステップS1003)。

0057

次に、CPU201は、セグメントをカウントするためのRAM203上の変数sについて、ステップS1004において値「0」に初期設定した後、ステップS1011で+1ずつインクリメントしながら、ステップS1010で値「63」に達したと判定するまで、ステップS1005からステップS1009までの処理を繰り返し実行する。

0058

この繰返し処理において、CPU201はまず、変数sの値に対応するセグメントに割り当てられている音色番号を示す変数SEG_INF[s].TONEに、そのセグメントが空状態(未使用)であることを示す値「−1」を格納する(ステップS1005)。

0059

次に、CPU201は、セグメント内の波形データの順番をカウントするためのRAM203上の変数wについて、ステップS1006において値「0」に初期設定した後、ステップS1009で+1ずつインクリメントしながら、ステップS1008で値「63」に達したと判定するまで、ステップS1007の処理を繰り返し実行する。即ち、CPU201は、このステップS1007において、変数sの値に対応するセグメント内のi番目(変数iが示す値)の波形データの音色中の波形番号を格納する変数SEG_INF[s].WAVE_INF[i].WAVE_NUMに、波形データの割当てが無いことを示す値「−1」を格納する。

0060

以上の繰返し処理の後、ステップS1010の判定がYesになると、CPU201は、CPU201は、図10のフローチャートで示される図9のステップS901の初期化処理を終了する。

0061

図11は、図9の音色選択イベント発生時(ステップS903の判定がYesのとき)のステップS904の音色切替え処理の、詳細例を示すフローチャートである。この処理の実行時には、RAM203上の音色番号変数Tの値が引き渡される。音色番号変数Tには、図10のステップS1001の実行時には前述したように初期値「0」が格納され、図9のステップS904の実行時には、ユーザによる図1の音色選択ボタン102の操作に基づいて図9のステップS902のユーザインタフェース処理で取り込まれたユーザが選択した音色の音色番号が格納される。

0062

図11の音色切替え処理のフローチャートにおいて、CPU201はまず、現在演奏のために選択されている音色番号を格納する変数CUR_TONEの値が、RAM203の変数Tに格納されている、ユーザにより新たに指定された音色番号の値に等しいか否かを判定する(ステップS1101)。

0063

ステップS1101の判定がYesならば、既に選択音色として選択済み又は現在大容量フラッシュメモリ204から波形メモリ206に該当する音色の波形データを転送中であるため、図11のフローチャートで示される図9のステップS904の音色切替え処理をそのまま終了する。

0064

ステップS1101の判定がNoならば、CPU201は、履歴番号を格納する変数TIMESTAMPの値を+1インクリメントする(ステップS1102)。

0065

次に、CPU201は、現在演奏のために選択されている音色番号を格納する変数CUR_TONEに、RAM203の変数Tに格納されている、ユーザにより新たに指定された音色番号の値を格納する(ステップS1103)。

0066

次に、CPU201は、RAM波形データ調査ルーチンの処理を実行する(ステップS1104)。CPU201は、RAM203上の変数Tに格納されている新たに指定された音色番号を引数としてこのルーチンに引き渡す。CPU201は、このルーチンの処理の結果、RAM203上の変数Rに、指定された音色番号に対応する音色の波形データが波形メモリ206上に有るか否かを示す戻り値(値0ならば無し、値1ならば有り)を得る(ステップS1104)。この処理の詳細については後述する。

0067

CPU201は、変数Rの値が1であるか否かを判定する(ステップS1105)。

0068

ステップS1105の判定がYesならば、指定された音色番号に対応する音色の波形データを新たに波形メモリ206に転送する必要はないため、CPU201は、図11のフローチャートで示される図9のステップS904の音色切替え処理をそのまま終了する。

0069

ステップS1105の判定がNoならば、CPU201は、波形領域確保ルーチンの処理を実行する(ステップS1106)。CPU201は、RAM203上の変数Tに格納されている新たに指定された音色番号を引数としてこのルーチンに引き渡す。CPU201は、このルーチンの処理の結果、指定された音色番号に対応する音色の波形データを大容量フラッシュメモリ204から転送するのに必要な数の空きセグメントを波形メモリ206上に確保する。この処理の詳細については後述する。

0070

その後、CPU201は、波形読込み指示ルーチンの処理を実行する(ステップS1107)。CPU201は、RAM203上の変数Tに格納されている新たに指定された音色番号を引数としてこのルーチンに引き渡す。CPU201は、このルーチンの処理において、指定された音色番号に対応する音色の波形データを、図9のステップS905の波形読込み処理によって大容量フラッシュメモリ204から波形メモリ206に転送するための準備処理を実行する。

0071

図12(a)は、図11のステップS1104のRAM波形データ調査ルーチンの詳細例を示すフローチャートである。

0072

まず、CPU201は、調査するセグメントをカウントするためのRAM203上の変数sを0にリセットする(ステップS1201)。

0073

次に、CPU201は、変数sの値に対応するセグメントに割り当てられている音色番号が格納されているRAM203上の変数SEG_INF[s].TONE(図8参照)の値が、引数として引き渡された新たに指定された音色番号の値が格納されているRAM203上の変数Tの値に等しいか否かを判定する(ステップS1202)。

0074

ステップS1202の判定がNoならば、CPU201は、ステップS1203で変数sの値を+1ずつインクリメントしながら、ステップS1204で変数sの値が64に達したと判定するまで、変数sにより指定される各セグメントについて、ステップS1202の判定処理を繰り返す(ステップS1203→S1204の判定がNo→S1202→S1203の処理の繰返し)。

0075

上記ステップS1202からS1204の処理の繰返しにおいて、ステップS1202の判定がYesになると、CPU201はまず、変数sの値に対応するセグメントが使用された履歴番号を示す変数SEG_INF[s].TIMESTAMPに、今回の音色選択イベントに基づいてインクリメントされたRAM203上の変数TIMESTAMPの値(図11のステップS1102参照)を格納して、当該セグメントの履歴番号を更新する(ステップS1205)。

0076

続いて、変数sに対応するセグメントに指定された音色番号に対応する音色の波形データが格納されていることが判明したため、CPU201は、RAM203上の変数Rに、指定された音色番号に対応する音色の波形データが波形メモリ206上に有ることを示す戻り値1を格納する(ステップS1206)。その後、CPU201は、図12のフローチャートで示される図11のステップS1104のRAM波形データ調査ルーチンの処理を終了する。

0077

ステップS1202からS1204の処理の繰返しにおいて、変数sによるセグメントの指定が末尾まで達してステップS1204の判定がYesになると、指定された音色番号に対応する音色の波形データはどのセグメントにも格納されていないことが判明したため、CPU201は、RAM203上の変数Rに、指定された音色番号に対応する音色の波形データが波形メモリ206上に無いことを示す戻り値0を格納する(ステップS1207)。その後、CPU201は、図12のフローチャートで示される図11のステップS1104のRAM波形データ調査ルーチンの処理を終了する。

0078

図12(b)は、図11のステップS1106の波形領域確保ルーチンの詳細例を示すフローチャートである。このルーチンは、前述したように、図11のステップS1104のRAM波形データ調査ルーチンにより指定された音色番号に対応する音色の波形データが波形メモリ206上のどのセグメントにも無いことが判明した場合に実行される。

0079

CPU201はまず、引数として引き渡された、指定された音色番号が格納されているRAM203上の変数Tの値に対応する音色の使用セグメント数を保持するROM202上の定数値TONE_INF[T].NUM_SEG(図7参照)を、RAM203上の変数uに格納する(ステップS1210)。

0080

次にCPU201は、空きセグメント数調査ルーチンを実行する。このルーチンでは波形メモリ206上で使用されていない空きセグメントの数が取得される。CPU201は、このルーチンの処理の結果、RAM203上の変数Rに、空きセグメント数の値を得る(ステップS1211)。この処理の詳細については後述する。

0081

CPU201は、変数Rに得られた空きセグメント数が、ステップS1210で変数uに格納された指定された音色番号に対応する音色における使用セグメント数以上となっているか否かを判定する(ステップS1212)。

0082

ステップS1212の判定がNoならば、CPU201は、波形領域開放ルーチンを実行する(ステップS1213)。このルーチンでは、波形メモリ206上で最も古い履歴番号を有する音色のセグメントが開放される。この処理の詳細については後述する。

0083

その後、CPU201は、ステップS1211に戻って、空きセグメント数調査ルーチンを再度実行し、変数Rに得られた空きセグメント数が、ステップS1210で変数uに格納された使用セグメント数以上となったか否かを判定する(ステップS1212)。

0084

以上のステップS1211からステップS1213までの処理の繰返しの結果、変数Rに得られた空きセグメント数が指定された音色番号に対応する音色における使用セグメント数以上となることによりステップS1212の判定がYesになると、必要な空きセグメントが確保できたため、CPU201は、図12のフローチャートで示される図11のステップS1106の波形領域確保ルーチンを終了する。

0085

図13は、図12のステップS1211の空きセグメント数調査ルーチンの詳細例を示すフローチャートである。前述したようにこのルーチンでは、波形メモリ206上での空きセグメントの数が取得される。

0086

CPU201はまず、セグメントをカウントするためのRAM203上の変数sを0にリセットすると共に、戻り値である空きセグメント数を格納するRAM203上の変数Rの値を0にリセットする(ステップS1301)。

0087

次に、CPU201は、ステップS1304で変数sの値を+1ずつインクリメントしながら、ステップS1305で変数sの値が64に達したと判定するまで、変数sの値によって指定されるセグメントごとに、ステップS1302とS1303の処理を繰り返し実行する。

0088

上述の繰返し処理において、CPU201はまず、変数sの値に対応するセグメントに割り当てられている音色番号が格納されている変数SEG_INF[s].TONEの値が、そのセグメントが空状態(未使用)であることを示す値「−1」に等しいか否かを判定する(ステップS1302)。

0089

そのセグメントが空状態であることによりステップS1302の判定がYesならば、CPU201は、戻り値である空きセグメント数を格納するRAM203上の変数Rの値を+1インクリメントする(ステップS1303)。

0090

ステップS1302の判定がNoならば、CPU201は、ステップS1303の処理をスキップする。

0091

以上の繰返し処理の後、ステップS1305の判定がYesになると、CPU201は、図13のフローチャートで示される図11のステップS1211の空きセグメント数調査ルーチンの処理を終了する。この結果、RAM203上の変数Rに、波形メモリ206上での空きセグメントの数が得られる。

0092

図14は、図12のステップS1213の波形領域開放ルーチンの詳細例を示すフローチャートである。前述したようにこのルーチンでは、波形メモリ206上で最も古い履歴番号を有する音色のセグメントが開放される。

0093

CPU201はまず、セグメントをカウントするためのRAM203上の変数sを0にリセットすると共に、比較用の履歴番号を格納するRAM203上の変数tに十分大きな値、例えばFFFFFFFFH(末尾の「H」はその左側が16進数であることを示す)をセットする(ステップS1401)。

0094

次に、CPU201は、ステップS1405で変数sの値を+1ずつインクリメントしながら、ステップS1406で変数sの値が64に達したと判定するまで、変数sの値によって指定されるセグメントごとに、ステップS1402からS1404の一連の処理を繰り返し実行する。

0095

上述の繰返し処理において、CPU201はまず、変数sの値に対応するセグメントに割り当てられている音色番号が格納されている変数SEG_INF[s].TONEの値が、そのセグメントが空状態(未使用)であることを示す値「−1」に等しいか否かを判定する(ステップS1402)。

0096

ステップS1402の判定がYesならば、CPU201は、ステップS1405に移行して、次のセグメントの繰返し処理に移る。

0097

ステップS1402の判定がNoならば、CPU201は、変数sの値に対応するセグメントが使用された履歴番号を示す変数SEG_INF[s].TIMESTAMPの値が、比較用の履歴番号を格納するRAM203上の変数tの値よりも小さいか否かを判定する(ステップS1403)。

0098

ステップS1403の判定がYesならば、CPU201は、比較用の履歴番号を格納するRAM203上の変数tに、変数sの値に対応するセグメントが使用された履歴番号を示す変数SEG_INF[s].TIMESTAMPの値を格納する(ステップS1404)。この結果、現時点で、変数sの値に対応するセグメントが音色指定により使用された履歴番号が、最も古い履歴番号として変数tに保持される。

0099

ステップS1403の判定がNoならば、CPU201は、ステップS1404の処理はスキップして、現在の変数tの値を維持する。

0100

以上の繰返し処理の結果、全てのセグメントの履歴番号との比較が完了してステップS1406の判定がYesになると、変数tに最も小さい即ち最も古い履歴番号が得られる。

0101

次に、CPU201は、ステップS1407でセグメントをカウントするための変数sの値を0にリセットした後、ステップS1410で変数sの値を+1ずつインクリメントしながら、ステップS1411で変数sの値が64に達したと判定するまで、変数sの値によって指定されるセグメントごとに、ステップS1408とS1409の繰返し処理として、変数tに得られた最も古い履歴番号を有するセグメントを開放する処理を実行する。

0102

上述の繰返し処理において、CPU201はまず、変数sの値に対応するセグメントが使用された履歴番号を示す変数SEG_INF[s].TIMESTAMPの値が変数tに格納されている最も古い履歴番号の値に等しいか否かを判定する(ステップS1408)。

0103

ステップS1408の判定がYesならば、CPU201は、変数sの値に対応するセグメントに割り当てられている音色番号が格納されている変数SEG_INF[s].TONEに、そのセグメントが空状態(未使用)であることを示す値「−1」を格納する(ステップS1409)。これにより、そのセグメントが開放される。

0104

ステップS1408の判定がNoならば、CPU201は、ステップS1409の判定をスキップして、変数sの値に対応するセグメントは開放しない。

0105

以上の繰返し処理の結果、ステップS1411の判定がYesになると、CPU201は、図14のフローチャートで示される図12ステップS1213の波形領域開放ルーチンを終了する。この結果、最も古い履歴番号を有する1つ以上のセグメントが開放される。

0106

図15は、図11のステップS1107の波形読込み指示ルーチンの詳細例を示すフローチャートである。前述したようにこのルーチンでは、指定された音色番号に対応する音色の波形データを、図9のステップS905の波形読込み処理によって大容量フラッシュメモリ204から波形メモリ206に転送するための準備処理が実行される。この準備処理は、大容量フラッシュメモリ204から波形データが転送される波形メモリ206上の空きセグメントに対応するRAM203上のSEG_INF構造体を構成する各メンバ変数(図8参照)に必要な情報をセットし、また転送を制御するRAM203上の変数READING_WAVEが示す波形番号を初期値0にセットする処理である。

0107

CPU201はまず、転送される波形データのセグメントグループをカウントするためのRAM203上の変数gの値と、転送される波形データの新たに指定される音色中での波形番号をカウントするためのRAM203の変数wの値と、波形メモリ206上でのセグメントをカウントするためのRAM203上の変数sの値を、それぞれ0にリセットする(ステップS1501)。

0108

次に、CPU201は、ステップS1511で変数sの値を+1ずつインクリメントしながら、ステップS1512で変数sの値が64に達したと判定するまで、変数sの値によって指定されるセグメントごとに、ステップS1502からS1510の一連の処理を繰り返し実行する。

0109

上述の繰返し処理において、CPU201はまず、変数sの値に対応するセグメントに割り当てられている音色番号が格納されている変数SEG_INF[s].TONEの値が、そのセグメントが空状態(未使用)であることを示す値「−1」に等しいか否かを判定する(ステップS1502)。

0110

ステップS1502の判定がYesならば、そのセグメントは空きセグメントではないため、CPU201は、ステップS1511に移行して、次のセグメントの繰返し処理に移る。

0111

ステップS1502の判定がNoならば、CPU201は、変数sの値に対応する空きセグメントに対応して音色番号を保持するRAM203上の変数SEG_INF[s].TONEに、引数として引き渡されたRAM203上の変数Tに格納されている新たに指定された音色番号の値を格納する。また、CPU201は、変数sの値に対応する空きセグメントに対応してセグメントが使用された履歴番号を保持する変数SEG_INF[s].TIMESTAMPに、今回の音色選択イベントに基づいてインクリメントされたRAM203上の変数TIMESTAMPの値(図11のステップS1102参照)を格納して、当該セグメントの履歴番号を更新する。更に、CPU201は、変数sの値に対応する空きセグメントに対応する音色のセグメントグループ値を格納する変数SEG_INF[s].SEG_GROUPに、変数gに格納されている現在転送を行っている波形データのセグメントグループ値を格納する(以上、ステップS1503)。

0112

その後、CPU201は、変数sの値に対応する現在のセグメントに転送される波形データをカウントするRAM203上の変数iの値を0にリセットする(ステップS1504)。

0113

次に、CPU201は、ステップS1506で、変数sの値に対応する現在のセグメントに転送される波形データをカウントする変数iの値と、転送される波形データの新たに指定される音色中での波形番号をカウントするための変数wの値を、それぞれ+1ずつインクリメントしながら、ステップS1507及びS1508によりセグメントグループが変化したと判定されるまで、ステップS1505の処理を繰返し実行する。即ち、ステップS15005において、CPU201はまず、変数sの値に対応する現在のセグメント中のi番目(=変数iの値)の波形データに対応する、波形データが読込み済みであるか否かを示す変数SEG_INF[s].WAVE_INF[i].WAVEに、まだ波形が読み込まれていないことを示す値0をセットする。次に、CPU201は、変数sの値に対応する現在のセグメント中のi番目の波形データに対応する、指定された音色中の波形番号を示す変数SEG_INF[s].WAVE_INF[i].WAVE_NUMに、RAM203上の変数wが示す現在転送中の波形データの指定された音色中の波形番号をセットする。続いて、CPU201は、変数sの値に対応する現在のセグメント中のi番目の波形データに対応する、当該セグメント中での当該波形データのアドレスオフセットを格納する変数SEG_INF[s].WAVE_INF[i].SEG_ADRSに、このセグメントに転送される音色番号T(=変数Tの値)の音色中のw番目(=変数wの値)の波形データに対応する、ROM202中の定数TONE_INF[T].WAVE[w].SEG_ADRS(図7参照)のアドレスオフセット値をセットする。更に、CPU201は、変数sの値に対応する現在のセグメント中のi番目の波形データのサイズを格納する変数SEG_INF[s].WAVE_INF[i].SIZEに、このセグメントに転送される音色番号T(=変数Tの値)の音色中のw番目(=変数wの値)の波形データに対応する、ROM202中の定数TONE_INF[T].WAVE[w].SIZE(図7参照)のサイズ値をセットする(以上、ステップS1505)。

0114

上記ステップS1505のセット処理の後、CPU201は、変数sの値に対応する現在のセグメントに転送される波形データをカウントする変数iの値と、転送される波形データの新たに指定される音色中での波形番号をカウントするための変数wの値を、それぞれ+1ずつインクリメントする(ステップS1506)。

0115

その後、CPU201は、このセグメントに転送される音色番号T(=変数Tの値)の音色中の新たに指定されたw番目(=変数wの値)の波形データに対応する、ROM202中の定数TONE_INF[T].WAVE[w].SEG_GROUPのセグメントグループ値をRAM203上の変数aにセットする。また、CPU201は、このセグメントに転送される音色番号T(=変数Tの値)の音色中の1つ前のw−1番目(=変数wの値−1)の波形データに対応する、ROM202中の定数TONE_INF[T].WAVE[w−1].SEG_GROUPのセグメントグループ値をRAM203上の変数bにセットする(以上、ステップS1507)。

0116

そして、CPU201は、変数aが示す新たに指定された音色中のw番目の波形データのセグメントグループの値が、変数bが示す1つ前のw−1番目の波形データのセグメントグループの値と等しいか否かを判定する(ステップS1508)。

0117

ステップS1508の判定がYesならば、同じセグメントに更に波形データを転送できるため、ステップS1505の処理に戻って新たな波形データに対応するセット処理を続行する。

0118

ステップS1508の判定がNoならば、CPU201は、変数gに格納されているセグメントグループの値を+1インクリメントする(ステップS1509)。

0119

その後、CPU201は、変数gの値が、音色番号T(=変数Tの値)に対応する定数TONE_INF[T].NUM_SEGの使用セグメント数の値に達したか否かを判定する(ステップS1510)。

0120

ステップS1510の判定がNoならば、CPU201は、ステップS1511の処理に移行し、次の空きセグメントに対する転送処理を続行する。

0121

ステップS1510の判定がYesになると、指定された音色番号T(=変数Tの値)に対応する全ての使用セグメント数分の波形データの転送処理が完了したため、CPU201は、現在転送中の波形番号を示すRAM203上の変数READING_WAVEに、初期値0にセットする(ステップS1513)。その後、CPU201は、図15のフローチャートで示される図11のステップS1107の波形読込み指示ルーチンの処理を終了する。

0122

図16は、図9のステップS905の波形読込み処理の詳細例を示すフローチャートである。前述したようにここでは、CPU201は、図2の大容量フラッシュメモリ204から波形メモリ206へのバックグラウンド処理による波形転送が実行される。

0123

CPU201はまず、RAM203上の変数READING_WAVEの値が、全て読込み済みであることを示す値「−1」であるか否かを判定する(ステップS1601)。

0124

ステップS1601の判定がYesならば、波形読込み処理を実行する必要はないため、CPU201は、図16のフローチャートで示される図9のステップS905の波形読込み処理をそのまま終了する。

0125

ステップS1601の判定がNoならば、CPU201は、変数READING_WAVEが示す指定された音色中で次に転送されるべき波形番号の値を、RAM203上の現在転送中の音色中の波形番号を示す変数wに格納する(ステップS1602)。

0126

次に、CPU201は、セグメントをカウントするRAM203上の変数sの値を、ステップS1603で0にリセットした後、ステップS1605で+1ずつインクリメントしながら、ステップS1604の判定による探索処理を実行する。ステップS1604で、CPU201は、変数sに対応するセグメントが割り当てられている音色番号を示す変数SEG_INF[s].TONEの値が、RAM203上の変数CUR_TONEに格納されている現在演奏のために選択されている音色番号(図11のステップS1103参照)に等しく、かつ、変数SEG_INF[s].SEG_GROUPにセットされている変数sに対応するセグメントが割り当てられているセグメントグループの値が、ROM202上の定数TONE_INF[CUR_TONE].WAVE[w].SEG_GROUPに格納されている変数CUR_TONEに対応する音色の変数wが示す現在転送中の音色中の波形番号に対応する波形データのセグメントグループの値に等しいか否かを判定する。

0127

前述した波形読込み指示ルーチン内のステップS1503の処理が予め実行されていることにより、ステップS1604とステップS1605の繰返し処理においてステップS1604の判定は必ずYesになる。CPU201は、ステップS1604の判定がYesになると、変数sの値が示すセグメント内の波形データの順番をカウントするRAM203上の変数iの値を、ステップS1606で0にリセットした後、ステップS1608で+1ずつインクリメントしながら、ステップS1607の判定による探索処理を実行する。ステップS1607で、CPU201は、変数SEG_INF[s].WAVE_INF[i].WAVE_NUMに格納されている、変数sの値が示すセグメント内のi番目(=変数iの値)の波形データの指定された音色中の波形番号が、変数wが示す現在転送中の波形データの指定された音色中の波形番号と等しいか否かを判定する。

0128

前述した波形読込み指示ルーチン内のステップS1505の処理が予め実行されていることにより、ステップS1607とステップS1608の繰返し処理においてステップS1607の判定は必ずYesになる。ステップS1607の判定がYesになると、CPU201は、大容量フラッシュメモリ204中の変数CUR_TONEの値が示す音色中の変数wの値が示す波形番号の波形データを、波形メモリ206中の変数sの値が示すセグメント内のi番目(=変数iが示す値)の波形データとして転送する波形転送ルーチンを実行する(ステップS1609)。このとき、CPU201は、引数として、RAM203上の変数FA、SA、L、及びSをそれぞれセットする。CPU201は、変数FAには、転送される波形データの転送元の大容量フラッシュメモリ204上のアドレスとして、変数CUR_TONEと変数wとで参照されるROM202上の定数TONE_INF[CUR_TONE].WAVE[w].SEG_ADRSの値をセットする。また、CPU201は、変数SAには、波形データが転送される転送先の波形メモリ206中のアドレスオフセットとして、変数sと変数iとで参照されるRAM203上の変数SEG_INF[s].WAVE_INF[i].SEG_ADRSの値をセットする。さらに、CPU201は、変数Lには、転送される波形データのサイズとして、変数sと変数iとで参照されるRAM203上の変数SEG_INF[s].WAVE_INF[i].SIZEの値をセットする。そして、CPU201は、変数Sには、変数sの値をセットする。波形転送ルーチンの詳細については、後述する。

0129

ステップS1609の波形転送ルーチンの処理の後、CPU201は、変数sの値に対応する現在のセグメント中のi番目(=変数iの値)の波形データに対応する、波形データが読込み済みであるか否かを示す変数SEG_INF[s].WAVE_INF[i].WAVEに、波形が読み込まれたことを示す値1をセットする(ステップS1610)。

0130

更に、CPU201は、音色中で次に転送されるべき波形番号の値を示す変数READING_WAVEの値を+1インクリメントする(ステップS1611)。

0131

その後、CPU201は、変数CUR_TONEが示す音色中の変数wが示す波形番号の波形データに対応する定数TONE_INF[CUR_TONE].WAVE[w].SEG_GROUPのセグメントグループの値が、変数CUR_TONEが示す音色に対応する定数TONE_INF[CUR_TONE].NUM_SEGに格納された使用セグメント数に達したか否かを判定する(ステップS1612)。

0132

ステップS1612の判定がNoならば、CPU201は、変数READING_WAVEの値をステップS1611でインクリメントされた値に維持して、図16のフローチャートで示される図9のステップS905の波形読込み処理を終了する。この結果、次に、ステップS905の波形読込み処理が実行されるタイミングで、変数READING_WAVEの新たな値に対する波形番号の波形データの転送が実行される。

0133

一方、ステップS1612の判定がNoになったならば、新たに指定された音色の波形データの全ての転送が完了したため、CPU201は、変数READING_WAVEに、全て読込み済みであることを示す値「−1」を格納する。その後、CPU201は、図16のフローチャートで示される図9のステップS905の波形読込み処理を終了する。

0134

図17は、図16のステップS1609の波形転送ルーチンの詳細例を示すフローチャートである。

0135

まず、CPU201は、大容量フラッシュメモリ204の読出しアドレスを指定するRAM203上の変数rp(リードポインタ)に、図16のステップS1609の開始時にRAM203上の変数FAとして引き渡された転送される波形データの転送元の大容量フラッシュメモリ204上のアドレスをセットする(ステップS1701)。

0136

次に、CPU201は、波形メモリ206への書込みアドレスを指定するRAM203上の変数wp(ライトポインタ)に、図16のステップS1609の開始時にRAM203上の変数S及びSAとしてそれぞれ引き渡されたセグメント番号及びセグメント内アドレスに基づいて、次式により計算される内容をセットする(ステップS1702)。

0137

wp=100000H×S+SA

0138

この式において、1セグメントのサイズは前述したように例えば100000Hバイトであるため、変数Sが示すセグメント番号のセグメントの先頭のバイトアドレスは、波形メモリ206上において、100000H×Sとなる。更に、今回の波形データが転送されるアドレスは、このアドレスに、変数SAとして引き渡されるセグメント内アドレスだけオフセットしたアドレスとなる。

0139

その後、CPU201は、転送されるバイトデータ数を指定するRAM203上の変数cの値を、ステップS1703で0にリセットした後、ステップS1706で1サンプルずつインクリメントしながら、ステップS1707でRAM203上の変数Lとして引き渡されるデータサイズに達したと判定されるまで、ステップS1704とS1705の処理を繰返し実行する。

0140

まず、CPU201は、大容量フラッシュメモリ204上の、変数rpの値と変数cの値を加算して得たアドレスから、波形データのサンプル(バイト値)を読み出してRAM203上の変数aにセットする(ステップS1704)。

0141

そして、CPU201は、波形メモリ206上の、変数wpの値と変数cの値を加算して得たアドレスに、変数aに格納されているデータを書き込む(ステップS1705)。

0142

以上の繰返し処理の結果、ステップS1707の判定がYesになると、CPU201は、図17のフローチャートで示される図16のステップS1609の波形転送ルーチンの処理を終了する。

0143

図18は、図9のステップS908の押鍵処理の詳細例を示すフローチャートである。

0144

まずCPU201は、RAM203上の変数CUR_TONEに音色が選択されていないことを示す無効値「−1」が格納されているか否かを判定する(ステップ1801)。

0145

ステップS1801の判定がYesならば、CPU201は、図18のフローチャートで示される図9のステップS908の押鍵処理を終了し、発音処理を実行しない。

0146

ステップS1801の判定がNoならば、CPU201は、RAM203上の変数READING_WAVEの値が波形転送を完了した事を示す値「−1」になっているか否かを判定する(ステップS1802)。

0147

ステップS1802の判定がNoならば、CPU201は、図18のフローチャートで示される図9のステップS908の押鍵処理を終了し、発音処理を実行しない。即ち、CPU201は、波形転送が完了して変数READING_WAVEの値が「−1」になるまで、発音処理を実行しない。

0148

ステップS1802の判定がYesならば、CPU201は、スプリット波形検索ルーチンを実行する(ステップS1803)。この場合、CPU201は、引数として、図9のステップS902で取得しているキー番号とベロシティをそれぞれ、RAM203上の変数K及びVに格納する。このルーチンの処理により、例えば図6のスプリットエリア内の1つが判別され、RAM203上の変数TWに、現在の音色内の波形番号が戻り値として得られる。なお、変数TWの戻り値として「−1」がセットされている場合は、該当するスプリットエリアが無い場合である。

0149

次に、CPU201は、変数TWの戻り値が「−1」であるか否かを判定する(ステップS1804)。

0150

ステップS1804の判定がYesならば、CPU201は、図18のフローチャートで示される図9のステップS908の押鍵処理を終了し、発音処理を実行しない。

0151

ステップS1804の判定がNoならば、CPU201は、セグメント内波形検索ルーチンを実行する(ステップS1805)。このとき、CPU201は、引数として、変数TWに格納されている音色内の波形番号を引き渡す。このルーチンの処理により、RAM203上の変数Sに、セグメント番号が戻り値として得られる。この変数Sの戻り値が64の場合は該当する波形データが存在しない場合である。また、RAM203上の変数SWに、セグメント内の波形番号が戻り値として得られる。

0152

ステップS1805のセグメント内波形検索ルーチンの処理の後、CPU201は、変数Sの戻り値が64であるか否かを判定する(ステップS1806)。

0153

ステップS1806の判定がYesならば、CPU201は、図18のフローチャートで示される図9のステップS908の押鍵処理を終了し、発音処理を実行しない。

0154

ステップS1806の判定がNoならば、CPU201は、音源LSI205に通知する波形データのアドレスとして、RAM203上の変数aに、次式により計算されるアドレスをセットする(ステップS1807)。

0155

a=S×10000H
+SEG_INF[S].WAVE_INF[SW].SEG_ADRS

0156

図17のステップS1702の場合と同様に、変数Sが示すセグメント番号のセグメントの先頭のバイトアドレスは、波形メモリ206上において、100000H×Sとなる。この値に、定数SEG_INF[S].WAVE_INF[SW].SEG_ADRSに格納されている変数Sが示すセグメントの変数SWが示す波形番号の波形データのセグメント内オフセットアドレスの値を加算した値が、音源LSI205が読み出すべき波形メモリ206中の先頭アドレスとなる。

0157

その後、CPU201は、音源LSI205に対して発音ルーチンを実行する(ステップS1808)。このとき、CPU201は、変数Kに格納されたキー番号と、変数Vに格納されたベロシティと、変数aに格納されたアドレス値を、引数として音源LSI205に引き渡す。また、CPU201は、その他波形情報として、定数TONE_INF[CUR_TONE].WAVE[SW].TG_INFによって示されるパラメータ群図7参照)を、引数として音源LSI205に引き渡す。音源LSI205の処理は、既存の処理であるためその詳細については省略するが、上記引数に基づいて、波形メモリ206から波形データを読み出して発音処理を実行する。

0158

図19は、図18のステップS1803のスプリット波形検索ルーチンの詳細例を示すフローチャートである。

0159

CPU201は、音色内の波形番号を示すRAM203上の変数wの値を、ステップS1901で0にリセットした後、ステップS1906で+1ずつインクリメントしながら、ステップS1907で64に達したと判定されるまで、ステップS1902からS1905の一連の判定処理を繰返し実行する。

0160

上述の繰返し処理において、CPU201はまず、変数Vとして引き渡されたベロシティが、変数CUR_TONEと変数wとで参照されるROM202上の定数TONE_INF[CUR_TONE].WAVE[w].VEL_LOによる最低ベロシティ値以上であるか否かを判定する(ステップS1902)。

0161

ステップS1902の判定がNoならば、ステップS1906の処理に移行して次の波形番号の処理に移る。

0162

ステップS1902の判定がYesならば、次にCPU201は、変数Vとして引き渡されたベロシティが、変数CUR_TONEと変数wとで参照されるROM202上の定数TONE_INF[CUR_TONE].WAVE[w].VEL_HIによる最高ベロシティ値以下であるか否かを判定する(ステップS1903)。

0163

ステップS1903の判定がNoならば、ステップS1906の処理に移行して次の波形番号の処理に移る。

0164

ステップS1903の判定がYesならば、次にCPU201は、変数Kとして引き渡されたキー番号が、変数CUR_TONEと変数wとで参照されるROM202上の定数TONE_INF[CUR_TONE].WAVE[w].KEY_LOによる最低キー番号以上であるか否かを判定する(ステップS1904)。

0165

ステップS1903の判定がNoならば、ステップS1906の処理に移行して次の波形番号の処理に移る。

0166

ステップS1904の判定がYesならば、次にCPU201は、変数Kとして引き渡されたキー番号が、変数CUR_TONEと変数wとで参照されるROM202上の定数TONE_INF[CUR_TONE].WAVE[w].KEY_HIによる最高キー番号以下であるか否かを判定する(ステップS1905)。

0167

ステップS1904の判定がNoならば、ステップS1906の処理に移行して次の波形番号の処理に移る。

0168

ステップS1905の判定がYesならば、CPU201は、変数wの値を、音色内波形番号の戻り値として変数TWにセットする。その後、CPU201は、図19のフローチャートで示される図18のステップS1803のスプリット波形検索ルーチンを終了する。

0169

ステップS1905の判定がNoならば、ステップS1906の処理に移行して次の波形番号の処理に移る。

0170

ステップS1902からS1907の繰返し処理の結果、ステップS1907の判定がYesになると、CPU201は、変数TWに、該当無しを示す値「−1」をセットする。その後、CPU201は、図19のフローチャートで示される図18のステップS1803のスプリット波形検索ルーチンを終了する。

0171

図20は、図18のステップS1805のセグメント内波形検索ルーチンの詳細例を示すフローチャートである。

0172

CPU201は、セグメントをカウントするRAM203上の変数sの値を、ステップS2001で0にリセットした後、ステップS2009で+1ずつインクリメントしながら、ステップS2010で64に達したと判定されるまで、ステップS2002からS2008の一連の処理を繰返し実行する。

0173

上述の繰返し処理において、CPU201はまず、RAM203上の変数SEG_INF[S].TONE(図8参照)の値として変数Sの値に対応するセグメントに設定されている音色番号が、RAM203上の変数CUR_TONE(図8参照)の値として現在選択されている音色番号に等しいか否かを判定する(ステップS2002)。

0174

ステップS2002の判定がNoならば、CPU201は、ステップS2009の処理に移行して次のセグメンに対する処理に移る。

0175

ステップS2002の判定がYesならば、CPU201は、セグメント内の波形番号を保持するRAM203上の変数SWの値を、ステップS2003で0にリセットした後、ステップS2007で+1ずつインクリメントしながら、ステップS2008で64に達したと判定されるまで、ステップS2004からS2007の一連の処理を繰返し実行する。

0176

上述の繰返し処理において、CPU201はまず、変数S及び変数SWに基づいて変数SEG_INF[S].WAVE_INF[SW].WAVE_NUMの値として参照される変数Sの値に対応するセグメント内のSW番目(=変数SWの値)の波形データの音色内での波形番号を、RAM203上の変数wに格納する(ステップS2004)。

0177

次に、CPU201は、変数wの値が、引数として引き渡されたRAM203上の変数TWが示す音色内の波形番号に等しいか否かを判定する(ステップS2005)。

0178

ステップS2005の判定がNoならば、変数TWの値が「−1」であるか否かを判定する(ステップS2006)。

0179

ステップS2006の判定がNoならば、CPU201は、ステップS2007に移行して、次のセグメント内波形番号の波形データに対する処理に移る。

0180

ステップS2006の判定がYesならば、CPU201は、ステップS2009に移行して、次のセグメントに対する処理に移る。

0181

上述の繰返し処理において、ステップS2005の判定がYesになると、CPU201は、そのときの変数Sの値と変数SWの値をそれぞれ、セグメントの戻り値及びセグメント内波形番号の戻り値としてセットし、図20のフローチャートで示される図18のステップS1805のセグメント内波形検索ルーチンの処理を終了する。

0182

上述の繰返し処理において、ステップS2010の判定がYesになると、CPU201は、変数Sの戻り値が該当無しを示す値にセットして、図20のフローチャートで示される図18のステップS1805のセグメント内波形検索ルーチンの処理を終了する。

0183

以上説明した実施形態により、波形メモリ上に波形が存在しない音色が選択されて新たな音色波形データを波形メモリに読み込む際に、セグメントが同じ使用数の音色を開放すれば、確実に新しい波形を読み込むことが可能となる。例えば、3セグメント使用している音色波形を選択した際には、3セグメント以上使用している音色に上書きを行えば良い。
これにより読み込みたい波形の容量よりもはるかに大きな空きエリアがありながら読み込めないという非効率な状態を回避できるので、演奏に支障をあたえるような時間のかかるガベージコレクションなどのメモリ整理をする必要から開放される。
また、波形メモリ上に読み込まれた音色の組み合わせが同じであるなら、選択された音色の波形を読み込むための条件、例えばその状態で読み込める、ある音色を上書きすれば読み込める等は、過去に波形を読み込んだ順序に関係なく予想ができるので、管理がし易い電子楽器を実現することが可能となる。

0184

以上の実施形態に関して、更に以下の付記を開示する。
(付記1)
複数のグループに分割された複数の波形データを有する音色波形データを複数種記憶した一次記憶装置から、前記複数種の音色波形データのいずれかを指定する指定処理と、
夫々が予め定められたサイズの記憶領域からなる複数のセグメントを有し、前記セグメントのそれぞれに前記波形データが記憶可能な二次記憶装置に、前記指定された音色波形データが記憶されているか否かを判別する判別処理と、
前記指定された音色波形データが記憶されていないと判別された場合に、前記指定された音色波形データ内の複数のグループの数に対応する数のセグメントを前記二次記憶装置内で確保するセグメント確保処理と、
前記確保された数のセグメントの領域に、前記一次記憶装置に記憶されている前記指定された音色波形データを読み込む読込み処理と、
を実行する処理部を備えた波形読込み装置。
(付記2)
前記音色波形データ内のグループそれぞれに含まれる波形データのサイズは、前記二次記憶装置の前記各セグメントのサイズを越えない、付記1記載の波形読込み装置。
(付記3)
前記処理装置はさらに、前記二次記憶装置が有する複数のセグメントのうち、空きのセグメントの数を取得する取得処理を実行し、
前記セグメント確保処理は、前記取得された空きのセグメント数が前記指定された音色波形データのグループ数と同じあるいはそれ以上の場合は、前記指定された音色波形データのグループ数と同じ数の空きのセグメントを確保し、前記取得された空きのセグメント数が前記指定された音色波形データのグループ数より少ない場合は、前記空きのセグメントと、前記空いていないセグメントの中で予め定められた条件を満たすセグメントとを確保する処理を実行する、付記1又は2記載の波形読込み装置。
(付記4)
前記予め定められた条件を満たすセグメントは、前記二次記憶装置に記憶されている音色波形データのうち、記憶されている期間が最も長い音色波形データを記憶しているセグメントである、付記1乃至3の何れかに記載の波形読込み装置。
(付記5)
前記一次記憶装置は、フラッシュメモリを備え、二次記憶装置は、一次記憶装置より容量の小さいランダムアクセスメモリを備えた、付記1乃至4のいずれかに記載の波形読込み装置。
(付記6)
波形読込み装置に用いられる波形読込み方法であって、前記波形読込み装置が、
複数のグループに分割された複数の波形データを有する音色波形データを複数種記憶した一次記憶装置から、前記複数種の音色波形データのいずれかを指定し、
夫々が予め定められたサイズの記憶領域からなる複数のセグメントを有し、前記セグメントのそれぞれに前記波形データが記憶可能な二次記憶装置に、前記指定された音色波形データが記憶されているか否かを判別し、
前記指定された音色波形データが記憶されていないと判別された場合に、前記指定された音色波形データ内の複数のグループの数に対応する数のセグメントを前記二次記憶装置内で確保し、
前記確保された数のセグメントの領域に、前記一次記憶装置に記憶されている前記指定された音色波形データを読み込む、波形読み込み方法
(付記7)
波形読込み装置として用いられるコンピュータに、
複数のグループに分割された複数の波形データを有する音色波形データを複数種記憶した一次記憶装置から、前記複数種の音色波形データのいずれかを指定する指定ステップと、
夫々が予め定められたサイズの記憶領域からなる複数のセグメントを有し、前記セグメントのそれぞれに前記波形データが記憶可能な二次記憶装置に、前記指定された音色波形データが記憶されているか否かを判別する判別ステップと、
前記指定された音色波形データが記憶されていないと判別された場合に、前記指定された音色波形データ内の複数のグループの数に対応する数のセグメントを前記二次記憶装置内で確保するセグメント確保ステップと、
前記確保された数のセグメントの領域に、前記一次記憶装置に記憶されている前記指定された音色波形データを読み込む読込みステップと、
を実行させるプログラム。
(付記8)
付記1に記載の波形読込み装置と、
前記一次記憶装置と、
前記二次記憶装置と、
演奏情報を供給する演奏操作子と、
音色を指定する音色指定操作子と、
前記演奏情報の供給に応答して、前記演奏情報と前記指定された音色とに基づいて、前記一次記憶装置から読み出された前記波形データに対応する楽音を生成する音源と、
を備えた電子楽器。
(付記9)
前記音色波形データ内のグループそれぞれに含まれる波形データのサイズは、前記二次記憶装置の前記各セグメントのサイズを越えない、付記8に記載の電子楽器。

0185

100電子鍵盤楽器
101鍵盤
102 音色選択ボタン
103機能選択ボタン
104ベンダ/モジュレーション・ホイール
105 LCD
201 CPU
202 ROM
203 RAM
204大容量フラッシュメモリ
205音源LSI
206波形メモリ
207キー・スキャナ
208 A/Dコンバータ
209LCDコントローラ
210 D/Aコンバータ
211アンプ
213MIDI I/F
214 システムバス

ページトップへ

この技術を出願した法人

この技術を発明した人物

ページトップへ

関連する挑戦したい社会課題

該当するデータがありません

関連する公募課題

該当するデータがありません

ページトップへ

技術視点だけで見ていませんか?

この技術の活用可能性がある分野

分野別動向を把握したい方- 事業化視点で見る -

(分野番号表示ON)※整理標準化データをもとに当社作成

ページトップへ

おススメ サービス

おススメ astavisionコンテンツ

新着 最近 公開された関連が強い技術

この 技術と関連性が強い人物

関連性が強い人物一覧

この 技術と関連する社会課題

該当するデータがありません

この 技術と関連する公募課題

該当するデータがありません

astavision 新着記事

サイト情報について

本サービスは、国が公開している情報(公開特許公報、特許整理標準化データ等)を元に構成されています。出典元のデータには一部間違いやノイズがあり、情報の正確さについては保証致しかねます。また一時的に、各データの収録範囲や更新周期によって、一部の情報が正しく表示されないことがございます。当サイトの情報を元にした諸問題、不利益等について当方は何ら責任を負いかねることを予めご承知おきのほど宜しくお願い申し上げます。

主たる情報の出典

特許情報…特許整理標準化データ(XML編)、公開特許公報、特許公報、審決公報、Patent Map Guidance System データ