JP2008249756A - 楽音発生装置 - Google Patents

楽音発生装置 Download PDF

Info

Publication number
JP2008249756A
JP2008249756A JP2007087141A JP2007087141A JP2008249756A JP 2008249756 A JP2008249756 A JP 2008249756A JP 2007087141 A JP2007087141 A JP 2007087141A JP 2007087141 A JP2007087141 A JP 2007087141A JP 2008249756 A JP2008249756 A JP 2008249756A
Authority
JP
Japan
Prior art keywords
buffer
waveform data
cluster
read
waveform
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.)
Granted
Application number
JP2007087141A
Other languages
English (en)
Other versions
JP4998046B2 (ja
Inventor
Masatsugu Okazaki
雅嗣 岡▲崎▼
Tokio Shirakawa
登喜男 白川
Shigematsu Fujita
成松 藤田
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.)
Yamaha Corp
Original Assignee
Yamaha Corp
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 Yamaha Corp filed Critical Yamaha Corp
Priority to JP2007087141A priority Critical patent/JP4998046B2/ja
Publication of JP2008249756A publication Critical patent/JP2008249756A/ja
Application granted granted Critical
Publication of JP4998046B2 publication Critical patent/JP4998046B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Electrophonic Musical Instruments (AREA)

Abstract

【課題】 読み出し速度が低速の外部記憶装置から波形データを読み出しながら発音しても発音遅れが生じないようにする。
【解決手段】 AバッファおよびBバッファを有している第1バッファに、外部記憶装置からアタック部波形データを1クラスタずつ読み出して所定タイミングで転送することにより、アタック波形をバッファリング再生していく。アタック部波形データからループ部波形データに移行する際には、第1バッファおよび第2バッファに移行する波形データが転送されて発音される。次いで、CバッファおよびDバッファを有している第2バッファに、外部記憶装置からループ部波形データを1クラスタずつ読み出して所定タイミングで転送することにより、ループ波形をバッファリング再生していく。
【選択図】 図4

Description

この発明は、読み出しが低速の外部記憶装置から波形データを読み出しながら発音する楽音発生装置に関する。
従来、電子楽器等に用いられる楽音発生装置として、自然楽器音の立上りから終了までの楽音波形サンプルの波形データを記憶した波形メモリを用意して、この波形メモリから順次楽音波形サンプルを読み出すことにより楽音信号を発生させるようにした波形メモリ音源が知られている。この波形メモリ音源では、波形データを音色や音高(音域)毎に用意することから波形メモリの容量が大容量になる。このため、波形メモリとする記憶媒体としては半導体メモリは適しておらず、大容量とすることが容易なハードディスクが適していることになる。しかし、ハードディスクは、各タイミング毎には所定単位量のクラスタ単位での1アクセスしかできず、さらに、ハードディスクの所望のクラスタ領域を指定して読み出しを行う際には、そのクラスタが読み出しできるようになるまでに時間遅れがある。そのため、ハードディスクから波形データを読み出しながら楽音を生成する際に、押鍵したタイミングから若干遅れて発音されてしまうようになる。
これを解決する従来の楽音発生装置が提案されている。この従来の楽音発生装置では、ハードディスクに楽音波形の先頭波形データとそれに続く後部波形データとを記憶しておき、楽音信号形成に先立ってハードディスクから波形メモリへ先頭波形データを転送しておく。そして、楽音信号発生の指示が出されると、楽音信号発生手段は、波形メモリに記憶された先頭波形データを読み出し、これに基づいて楽音信号の先頭部の波形を生成し、その間、ハードディスクから後部波形データを所定量ずつ順次波形メモリに転送する。先頭波形データは楽音信号発生の指示時には波形メモリに準備されているので、楽音信号号発生の指示から遅れることなく楽音信号の先頭部の波形を生成することができる。そして、先頭波形データに基づく楽音信号の生成に続いて、波形メモリに転送された後部波形データを順次読み出して、楽音信号の後部の波形を生成する。
特許第2671747号公報
上記した従来の楽音発生装置においては、ハードディスクに記憶された波形データをループ読み出しすることについて、特に何の配慮もされていなかった。この場合、ループ開始点を何れかのクラスタの先頭に設定し、ループ終了点をその後の何れかのクラスタの末尾に設定して、クラスタ単位で波形データのループ読み出しを行うことは、比較的容易に行うことができる。
しかしながら、ループ開始点ないしループ終了点をクラスタ内の途中のポイントに設定すると、クラスタ単位のアクセスに遅れのあるハードディスクからの波形データの読み込みがタイミング的に厳しくなる場合があり、ハードディスクからの波形データの読み込みが間に合わないと、発生している楽音が途切れてしまうという問題点があった。特に、ループ開始点の直前の数サンプル(圧縮している場合は、デコード用のその他データも)の波形データを読み込む必要があり、この際に生成している楽音が途切れやすくなってしまうという問題点があった。
そこで、本発明は読み出し速度が低速の外部記憶装置に波形データを記録して、この外部記憶装置から波形データを読み出しながらループ発音しても楽音が途切れることのない楽音発生装置を提供することを目的としている。
上記目的を達成するために、本発明の楽音発生装置は、それぞれ複数ずつバッファ領域を有している第1バッファおよび第2バッファと、外部記憶装置から所定単位量ずつ読み出した波形データを、第1バッファあるいは第2バッファに転送する転送手段とを備え、アタック部波形データは第1バッファの複数のバッファ領域に順次転送されて発音され、アタック部波形データからループ部波形データに移行する際には、第1バッファおよび第2バッファに移行する波形データが転送されて発音され、ループ部波形データは第2バッファの複数のバッファ領域に順次転送されて発音されることを最も主要な特徴としている。
本発明によれば、それぞれ複数ずつバッファ領域を有している第1バッファおよび第2バッファと、外部記憶装置から所定単位量ずつ読み出した波形データを、第1バッファあるいは第2バッファに転送する転送手段とを備え、アタック部波形データは第1バッファの複数のバッファ領域に順次転送されて発音され、アタック部波形データからループ部波形データに移行する際には、第1バッファおよび第2バッファに移行する波形データが転送されて発音され、ループ部波形データは第2バッファの複数のバッファ領域に順次転送されて発音されることから、読み出しが低速の外部記憶装置から波形データを読み出して発音するようにしても途切れることなく楽音を発音することができるようになる。
より具体的には、外部記憶装置からの波形データの読み出し再生途中に、第1バッファに読み込まれたループ開始部分の波形データを、そのまま上書きせずに残しておき、ループ開始点へのリターン時に、読み出しアドレスを第2バッファのループ終了点から第1バッファのループ開始点へジャンプさせ、第1バッファに記憶されているループ開始部分の波形データを用いて、後続の波形データを第2バッファへ転送するための時間を稼いでいる。従って、ループ終了点ないしループ開始点がクラスタの途中に設定されている場合でも、波形データのループ読み出しを破綻無く行うことができる。
本発明の実施例である楽音発生装置の構成を示すブロック図を図1に示す。
図1に示す本発明にかかる楽音発生装置1は、種々の波形データが格納されているハードディスク(HD)16を備え、ハードディスク16から波形データを読み出しつつ波形データに基づく楽音を生成できるようにされている。本発明にかかる楽音発生装置1において、CPU(Central Processing Unit)10は楽音発生装置1の全体の動作を制御すると共に、ノートオンイベント処理や転送処理等を実行している。RAM(Random Access Memory)12には、CPU10のワークエリアや各種データ等の記憶エリアが設定されている。フラッシュメモリ11には、CPU10が実行するノートオンイベント処理や転送処理等の楽音発生に関連する動作ソフトウェアが格納されている。フラッシュメモリ11は書き換え可能とされていることから、動作ソフトウェアを書き換え可能となり動作ソフトウェアのバージョンアップを容易に行うことができる。表示器13は液晶等の表示手段を備え、各種楽音設定画面を表示手段に表示したり楽音生成時の動作画面を表示手段に表示している。
操作子14はパネルに備えられたパネル操作子であり、パネル操作子を走査することによって操作されたパネル操作子のイベントを検出してCPUバス24に出力している。タイマ15はウォッチドックタイマ、インターバルタイマ、タイマ割り込みとして機能するタイマである。ハードディスク(HD)16は、種々の波形データを含む各種データが所定単位量とされるクラスタ単位で分散的に記憶されている大容量の外部記憶装置である。同時に複数のクラスタへのアクセスを行うことはできず、装置の複数のクラスタ(記憶領域)のうちの所望のクラスタを指定して、そのクラスタへの書き込みないし読み出しを行うようになっている。また、一般に、クラスタの指定後、そのクラスタが読み出しないし書き込みを行えるようになるまでに、数ミリ秒から数十ミリ秒の時間遅れがある。HD I/O17は、楽音発生装置1にハードディスク16を接続するためのインタフェースであり、ハードディスク16とは所定単位量とされるクラスタ毎の波形データの書き込み/読み出しを行うことができる。転送回路18は、転送指示を受けてハードディスク16から読み出されたクラスタ単位の波形データを波形メモリ19へアクセス調停部20を介して転送している。波形メモリ19は、種々の波形データにおけるアタック部の先頭の波形データが所定単位量(1クラスタ)だけ記憶されるプリロード領域と、それぞれ1クラスタ分の波形データを記憶可能なAバッファ,Bバッファを有する第1バッファと、同様のCバッファ,Dバッファを有する第2バッファの領域を有するRAMからなる波形メモリである。なお、プリロード領域については、ROM(Read Only Memory)やフラッシュメモリで構成してもよい。
アクセス調停部20は、転送回路18による波形メモリ19へのデータ書き込みと、音源部21による波形メモリ19からのデータ読み出しとが時分割で並列に行われるよう、アクセスの調停を行うブロックである。音源部21はPCM音源等からなり、音源部21はCPUバス24を介して供給される各情報に基づいて、波形メモリ19の第1バッファおよび第2バッファに転送された波形データを順次読み出し、読み出した波形データに基づいて楽音信号を生成している。音源部21は、例えば4個の発音チャネルを有し、これら各発音チャネルの楽音信号発生処理を時分割多重制御により行っており、各発音チャネル毎に独立した楽音信号を生成し得るように構成されている。音源部21は、複数時分割チャンネル動作を行い、CPU10から音源パラメータ情報を発音の開始指示を受けて、複数チャンネル分の複数の楽音信号を生成している。音源パラメータ情報は、割り当てチャンネル、ピッチ情報、エンベロープパラメータ等とされる。音源部21の各チャンネルでは、それぞれ、波形メモリ19に記録されている波形データを読み出して、読み出した波形データを音源パラメータ情報に沿って加工することにより楽音信号を生成している。音源部21で生成された楽音信号はサウンドシステム22から放音される。MIDI I/O23は、MIDI機器を楽音発生装置1に接続するインタフェースであり、MIDI機器から出力されたMIDI信号を楽音発生装置1において受信することができる。そして、受信したMIDI信号に基づいて楽音信号を生成してサウンドシステム22から放音することができる。なお、楽音発生装置1の各部はCPUバス24により相互にデータの授受を行っている。
ここで、クラスタについて説明すると、ハードディスク16はクラスタをデータの記憶単位としてデータを記憶しており、CPU10が1クラスタ分のデータをハードディスク16へ書き込もうとするときは、CPU10がハードディスク16の未使用のクラスタを指定して、HD I/O17がその指定されたクラスタにCPU10から供給されるデータを書き込む。また、CPU10が1クラスタ分のデータをハードディスク16から読み出そうとするときは、CPU10が読み出したいデータを記憶しているクラスタを指定して、HD I/O17がその指定されたクラスタからデータを読み出しCPU10に供給する。なお、ハードディスク16上ではクラスタは連続して書き込まれる必要は無く、それぞれハードディスク16の任意の位置にクラスタを書き込むことができる。
次に、音源部21の詳細な構成を示すブロック図を図2に示す。図2に示す音源部21において、制御レジスタ30には発音開始時にCPUバス24からノートオン信号、およびノートオン信号に基づく音色パラメータが発音割当された発音チャネルに書き込まれる。制御レジスタ30ではノートオン信号におけるノートナンバ(音高)が整数部および小数部から構成される周波数ナンバFに変換される。また、当該発音チャネルにおいて上述したハードディスク16から読み出されて波形メモリ19に転送される波形データはノートオン信号の音高や音色情報に基づいて選択され、制御レジスタ30には、選択された波形データのアタック部波形データの先頭部が記憶されているプリロード領域のスタートアドレスPSおよびエンドアドレスPE、第1バッファの領域のスタートアドレスBS1およびエンドアドレスBE1、第2バッファの領域のスタートアドレスBS2およびエンドアドレスBE2が供給される。
アドレスカウンタ31は位相発生部およびアドレス生成部からなり、各時分割チャンネルタイミング毎に、制御レジスタ30から供給される周波数ナンバFを所定タイミングに従って繰り返し累算することにより、波形メモリ19から波形データを読み出すためのアドレスを生成している。例えば、プリロード領域に記憶されている先頭部のアタック部波形データの読み出し時には、プリロード領域のスタートアドレスPSから読み出しを開始し、次いで、累算値を加算した整数部を読出アドレスとして波形メモリ19に出力して波形データを順次読み出す。この際に、上記加算値の小数部は補間用データとして補間部32に供給する。また、先頭部に続くアタック部波形データの読み出し時には、第1バッファのスタートアドレスBS1から読み出しを開始し、次いで、累算値を加算した整数部を読出アドレスとして波形メモリ19に出力して波形データを順次読み出すと共に、上記加算値の小数部を補間用データとして補間部32に供給する。さらに、ループ部波形データを繰り返し読み出すときには、ループスタートLSから読み出しを開始し、次いで、累算値を加算した整数部を読出アドレスとして波形メモリ19に出力して波形データを読み出すと共に、上記加算値の小数部を補間用データとして補間部32に供給する。このような読み出しを実現するために、アドレスカウンタ31は、生成する読出アドレスが指定されたジャンプ元アドレスに達したとき、該読出アドレスを指定されたジャンプ先アドレスへジャンプさせるアドレスジャンプ機能を有している。
補間部32は、各時分割チャンネルタイミング毎に、読出アドレスにより波形メモリ19から読み出された波形データを、アドレスカウンタ31から出力される補間用データに基づいて補間演算を行う。この場合、波形データの隣接するサンプル値間を補間用データによって一次直線補間してもよいし、2以上のサンプル値を用いて高次の補間を行ってもよい。
制御レジスタ30から音量制御部33へは音色パラメータ中のエンベロープデータが供給され、音量制御部33は、各時分割チャンネルタイミング毎に、ノートオン信号、ノートオフ信号に応答して、楽音の立上りから立下りまでの音量変化に相当するエンベロープ波形を生成し、補間部32から出力信号に該エンベロープ波形を乗算することにより音量制御を行う。音量制御部33からの出力信号はミキサ34に供給され、ミキサ34において発音中の各チャンネル信号が加算されてD/A(デジタル/アナログ)変換器36へ出力される。なお、制御レジスタ30はエフェクタデータを処理部(DSP:Digital Signal Processor)35に出力しており、DSP35はエフェクタデータに基づき、ミキサ34の出力信号にリバーブ、コーラス、ディレイ、パン等の各種音響効果を付与している。このようにして、エフェクトが付加されたミキサ34からの出力信号はD/A変換器36においてアナログ信号に変換され、サウンドシステム22に出力される。
次に、外部記憶装置であるハードディスク16に記録されている波形データについて図3を参照しながら説明する。図3には、ハードディスク発音用の波形データの準備処理が示されている。この準備処理では、まず、波形データの長さを所定の長さとするための準備である「1.アタックとループとを有する波形データ準備」の処理が行われる。この処理においては、アタック(元)と示されている元とされるアタック部波形データと、ループ(元)として示されている元とされるループ部波形データからなる波形データが用意され、このループ部波形データのループサイズがLとされる。横軸はアドレスであり、P,1,2,・・・,9,10・・は単位所定量とされるクラスタのクラスタ番号である。ここで、このクラスタ番号は、各所定単位量のデータ(クラスタ)を読み出す順番を示す番号であり、ハードディスク19における記憶領域(クラスタ)を特定する番号ではない点に注意されたい。図示されている波形データの場合、波形データの終了位置をクラスタ10のエンドとするための不足分が検出される。次いで、「2.ループエンドがLEクラスタの最後に一致するよう調整」する処理が行われる。この処理では、ループ部波形データの先頭から不足分に相当する波形データが切り出され、ループ部波形データの後部に付加される。図示する場合では、ループエンドを含むLEクラスタはクラスタ10となり、上記調整する処理によりクラスタ10のエンドと波形データのループエンド(LE)とは一致するようになる。
このようにして調整した波形データは、「3.同じループサイズの新しいループを設定」する処理に示されているように、ループ(新)として示すループ部波形データのループサイズLはループ(元)と同じループサイズLとされ、アタック(新)として示すアタック部波形データの長さは波形データを付加した分だけ長くなる。この結果、波形データは所定数のクラスタの長さに調整されることになる。
次いで、「4.プリロード領域、および、ハードディスクのクラスタ(複数)に記憶」する処理が行われる。この場合、クラスタPの波形データは波形メモリ19のプリロード領域にその波形データにおけるプリロード波形データグループの一つとして記憶され、クラスタ1〜クラスタ10の波形データはハードディスク16に波形データグループの一つとして記憶される。図3に示す波形データの場合、ループ部波形データはクラスタ5の中途から開始され、クラスタ5がループスタート(LS)を含むLSクラスタ(ループスタートクラスタ:LSC)となる。また、クラスタ10はループエンド(LE)を含むLEクラスタ(ループエンドクラスタ:LEC)となる。クラスタLSCxは、ループスタートクラスタ以降のクラスタで第2バッファに初めて転送されるクラスタであり、クラスタLSCyは、第2バッファが1クラスタ分記憶するCバッファ、Dバッファから構成される場合はLSCx+1のクラスタとされる。これらについては後述する。
次に、波形メモリ19に関連するメモリマップを図5に示す。波形メモリ19は、前述したように種々の波形データにおけるアタック部の先頭の波形データが1クラスタずつ記憶されるプリロード領域と、それぞれ1クラスタ分の波形データを記憶可能な2つのAバッファ,Bバッファを有する第1バッファと、同様の2つのCバッファ,Dバッファを有する第2バッファの領域を有している。プリロード領域は、ハードディスク16の各波形データの先頭のクラスタのデータ(プリロード波形データ)を、楽音の生成に先立って予め読み込んでおくための領域である。ハードディスク16に記憶されている波形データは、相互に一緒に使いたい複数の波形データ、例えば、1つの鍵盤の異なる鍵域に割当てて使用する複数の波形データ、同時に鳴らして1つの音色の楽音を形成する複数の波形データ、同じ楽器音の強度別の複数の波形データ等、を1つのグループとしてグループ化されている。それに対応して、プリロード領域には、各グループ毎の先頭の波形データのプリロード領域AWG1、AWG2、…AWGm、…が用意されている。そして、各グループのプリロード領域には、そのグループに属する波形データのアタック部における先頭の1クラスタ分(プリロード波形データ)を読み込むための領域が用意され、ハードディスク16からそれぞれ1クラスタ分のプリロード波形データが読み込まれる。例えば、2番目のグループはk個の波形データからなるグループであり、対応するAWG2の領域には、AW2−1、AW2−2、…AW2−kのk個の領域が用意される。また、この楽音発生装置1では、時分割動作により複数のチャンネルで、ハードディスク16から複数の波形データを並行して読み出し、複数の楽音波形を同時に生成するようになっている。そのため波形メモリ19には、複数のチャンネルに対応する複数のチャンネルバッファCBG1、CBG2、CBG3、CBG4、…の領域が用意されている。各チャンネルバッファには、第1バッファと第2バッファとの領域が設定されており、例えば、チャンネルバッファCBG2には、第1バッファPB1−2と第2バッファPB2−2の領域が設定されており、第1バッファPB1−2は1クラスタ分の波形データを記憶可能な2つのA2バッファ,B2バッファを有しており、第2バッファPB2−2も1クラスタ分の波形データを記憶可能な2つのC2バッファ,D2バッファを有している。この4つのバッファを用いて、波形データグループの波形データを発音が途切れないように読み出している。
ここで、ノートオンされた際にハードディスク16中の1つの波形データ2−2を選択し、選択された波形データ2−2の1クラスタ分の先頭のプリロード波形データAW2−2と、プリロード波形データAW2−2に続いて波形データ2−2の後続のクラスタの波形データをチャンネルiのチャンネルバッファCBGiを用いて読み出す場合を図6を参照しながら説明する。ノートオンされると、制御レジスタ30にノートナンバ、ノートオン信号、音色パラメータが与えられると共に、プリロード領域のアタック部波形データAW2−2のスタートアドレスPSおよびエンドアドレスPE、第1バッファPB1−iのAiバッファのスタートアドレスBS1およびBiバッファのエンドアドレスBE1、第2バッファPB2−iのCiバッファのスタートアドレスBS2およびDiバッファのエンドアドレスBE2が供給される。アドレスカウンタ31はスタートアドレスPSを波形メモリ19に出力してアタック部波形データAW2−2の先頭から波形データを読み出し、以降はノートナンバと波形データ2−2とに応じて決定された周波数ナンバFに応じた読み出し速度でアタック部波形データAW2−2が順次読み出されていく。このとき、第1バッファPB1−iのAiバッファにはハードディスク16の波形データ2−2のクラスタ1を記憶するクラスタ(記憶領域)から読み出されたクラスタ1の波形データが転送され、次のクラスタ2の波形データが第1バッファPB1−iのBiバッファに転送される。
そして、アタック部波形データAW2−2のエンドアドレスPEまでの波形データが読み出されると、アドレスカウンタ31は第1バッファPB1−iのスタートアドレスBS1を波形メモリ19に出力してAiバッファの先頭から波形データ2−2のクラスタ1の波形データを読み出し、以降は周波数ナンバFに応じた読み出し速度でAiバッファから波形データを順次読み出していく。そして、Aiバッファの波形データが全て読み出されると、Biバッファの先頭から続くクラスタ2の波形データが順次読み出されるようになる。このとき、Aiバッファには波形データ2−2の続く1クラスタ分の波形データをハードディスク16から読み出して転送する。そこで、Biバッファの波形データが全て読み出されると、再びAiバッファの先頭から続く波形データが順次読み出されるようになる。このとき、Biバッファには波形データ2−2の続く1クラスタ分の波形データをハードディスク16から読み出して転送する。このように、アタック部波形データがハードディスク16から読み出されて第1バッファPB1−iに転送されつつ、第1バッファPB1−iからアタック部波形データを読み出す動作が繰り返される。この繰り返し読み出す動作を第1バッファPB1−iによるバッファリング再生という。そして、波形データ2−2におけるLSクラスタがハードディスク16から読み出されて第1バッファPB1−iに転送されると、Biバッファに転送されたクラスタに続く1クラスタ分の波形データがハードディスク16から読み出されて第2バッファPB2−iのCiバッファに転送され、さらに次の1クラスタ分の波形データが第2バッファPB2−iのDiバッファに転送される。
そして、第1バッファPB1−iのBiバッファの波形データが全て読み出されると、第2バッファPB2−iのCiバッファの先頭から続く波形データが順次読み出されるようになる。次いで、第2バッファPB2−iのCiバッファの波形データが全て読み出されると、第2バッファPB2−iのDiバッファの先頭から続く波形データが順次読み出されるようになる。このとき、続く1クラスタ分の波形データをハードディスク16から読み出してCiバッファに転送する。さらに、第2バッファPB2−iのDiバッファの波形データが全て読み出されると、第2バッファPB2−iのCiバッファの先頭から続く波形データが順次読み出されるようになる。このとき、続く1クラスタ分の波形データをハードディスク16から読み出してDiバッファに転送する。このように、ループ部波形データがハードディスク16から読み出されて第2バッファPB2−iに転送されつつ、第2バッファPB2−iからループ部波形データを読み出す動作が繰り返される。この繰り返し読み出される動作を第2バッファPB2−iのバッファリング再生という。そして、波形データ2−2におけるLEクラスタがハードディスク16から読み出されて第2バッファPB2−iのDiバッファに転送されると、このDiバッファの波形データが全て読み出された際に、第1バッファPB1−iのAiバッファにおけるループスタートLSの位置からループ部波形データが読み出されるようになる。以後、同様の動作が繰り返されることにより発音停止が指示されるまでループ波形データが繰り返し読み出される。なお、LEクラスタが読み込まれるバッファは、第2バッファPB2−iのCiバッファであってもよく、また、LSクラスタが読み込まれるバッファは、第1バッファPB1−iのBiバッファであってもよい。
次に、本発明にかかる楽音発生装置1におけるノートオンされた際の波形データの転送制御や読み出し等の所定の1チャンネルにおけるタイミングを示す図を図4に示す。以下の説明においては、所定のチャンネルのチャンネルバッファCBGは第1バッファPB1および第2バッファPB2の領域を備え、第1バッファPB1はそれぞれ1クラスタ分の波形データを記憶可能なAバッファとBバッファとを有し、第2バッファPB2はそれぞれ1クラスタ分の波形データを記憶可能なCバッファとDバッファとを有している。
図4の横軸は時間であり、最上段に示す「転送」では、指定されている音色やノートオンの音高などに基づいて選択された波形データの一連のクラスタのデータが、順次、ハードディスク16から読み出されて第1バッファPB1のAバッファ,Bバッファあるいは第2バッファPB2のCバッファ,Dバッファに転送されることが示されている。付記されている1,2,・・・の番号はクラスタ番号である。その下の段の「IP割込」は、波形データをハードディスク16から波形メモリ19へ転送する転送要求の発生タイミングを示している。その下の4段は、縦軸が波形メモリ19のアドレスであり、波形メモリ19に領域が設定されている第1バッファPB1および第2バッファPB2から波形データを読み出す読出アドレスの進行が示されている。その下の段は、やはり縦軸が波形メモリ19のアドレスであり、波形メモリ19におけるプリロード領域からプリロード波形データを読み出す読出アドレスの進行が示されている。さらにその下の段には、それらの読出アドレスにより、プリロード領域および第1バッファPB1、第2バッファPB2から読み出された波形データに基づいて生成された再生波形がクラスタ番号に対応して示されている。
図4において、時刻t0でノートオンが検出されると、制御レジスタ30にノートナンバ、ノートオン信号、音色パラメータが与えられると共に、波形メモリ19のプリロード領域における指示された音色のアタック部波形データの先頭とされるクラスタP(プリロード波形データ)の記憶領域のスタートアドレスPSおよびエンドアドレスPE、第1バッファPB1のAバッファのスタートアドレスBS1およびBバッファのエンドアドレスBE1が設定される。ここで、エンドアドレスPE及びエンドアドレスBE1はジャンプ元として設定されており、また、スタートアドレスBS1はジャンプ先として設定されている。アドレスカウンタ31はノートオンにより供給されたスタートアドレスPSを直ちに波形メモリ19に出力してクラスタPの先頭から波形データを読み出し、以降はノートナンバを変換した周波数ナンバFに応じた読み出し速度でクラスタPのアタック部波形データを順次読み出していく。読み出された波形データは音源部21に供給されてクラスタPの波形データに基づく再生波形が出力される。このように、ノートオンの直後には波形メモリ19にプリロードされているクラスタPの波形データを読み出して発音することから、ノートオンから遅れることなく再生波形が生成されていくようになる。また、このノートオンにより、第1バッファPB1のAバッファには、選択された波形データの一連のクラスタにおけるクラスタ1の波形データがハードディスク16から読み出されて転送され、次のクラスタ2の波形データが第1バッファPB1のBバッファにハードディスク16から読み出されて転送される。このように、クラスタPの波形データを読み出して発音している間に、第1バッファPB1のAバッファ,Bバッファにそれぞれ1クラスタ分の波形データを転送しておくようにしている。
そして、時刻t1となってクラスタPのエンドアドレスPE(ジャンプ元)までの波形データが読み出されると、アドレスカウンタ31は第1バッファPB1のスタートアドレスBS1(ジャンプ先)を波形メモリ19に出力してAバッファの先頭からクラスタ1の波形データ1Aを読み出し、以降は周波数ナンバFに応じた読み出し速度で波形データ1Aを順次読み出していく。これにより、音源部21は時刻t1からクラスタ1の波形データに基づく再生波形を生成していくようになる。このように、波形メモリ19にプリロードされているクラスタPの全ての波形データが読み出された際には、既に第1バッファPB1のAバッファ,Bバッファに続く1クラスタ分の波形データが転送されていることから、音源部21は途切れることなくクラスタ1の波形データに基づく再生波形を生成することができるようになる。
そして、時刻t2となってAバッファの波形データ1Aが全て読み出されると、Bバッファの先頭から次のクラスタ2の波形データ2Bが順次読み出されるようになる。これにより、音源部21は時刻t2からクラスタ2の波形データに基づく再生波形を生成していくようになる。また、この時刻t2でAバッファへ次のクラスタ3の波形データを転送する転送要求のIP割込が発生し、クラスタ3の波形データがハードディスク16から読み出されてAバッファへ転送される。次に、時刻t3となって読出アドレスがBバッファのエンドアドレスBE1(ジャンプ元)まで進行し、波形データ2Bが全て読み出されると、読出アドレスはスタートアドレスBS1(ジャンプ先)に戻され、再びAバッファの先頭から次のクラスタ3の波形データ3Aが順次読み出さるようになる。これにより、音源部21は時刻t3からクラスタ3の波形データに基づく再生波形を生成していくようになる。さらに、この時刻t3でBバッファへ次のクラスタ4の波形データを転送する転送要求のIP割込が発生し、クラスタ4の波形データがハードディスク16から読み出されてBバッファに転送される。
次いで、時刻t4となってAバッファの波形データ3Aが全て読み出されると、Bバッファの先頭から次のクラスタ4の波形データ4Bが順次読み出されるようになる。これにより、音源部21は時刻t4からクラスタ4の波形データに基づく再生波形を生成していくようになる。また、この時刻t4でAバッファへ次のクラスタ5の波形データを転送する転送要求のIP割込が発生し、クラスタ5の波形データがハードディスク16から読み出されてAバッファに転送されるが、この例では、転送されたクラスタ5はループ部波形データの先頭であるループスタートLSを含むLSクラスタ(LSC)とされる。次に、時刻t5になって、読出アドレスがエンドアドレスBE1(ジャンプ元)まで進行し、Bバッファの波形データ4Bが全て読み出されると、読出アドレスはスタートアドレスBS1(ジャンプ先)に戻され、再びAバッファの先頭から次のクラスタ5の波形データ5Aが順次読み出さるようになる。これにより、音源部21は時刻t5からクラスタ5の波形データに基づく再生波形を生成していくようになる。
また、この時刻t5でIP割込が発生するが、LSクラスタが第1バッファPB1に転送されていることから、第1バッファPB1によるバッファリング再生から第2バッファPB2によるバッファリング再生に継続的に移行してループ再生動作を開始するように、このIP割込は次のクラスタ6を第1バッファPB1のBバッファに転送する転送要求と、その次のクラスタ7(LSCx)を第2バッファPB2のCバッファに転送する転送要求と、さらに次のクラスタ8(LSCy)を第2バッファのDバッファに転送する転送要求と解釈される。これにより、クラスタ6の波形データがハードディスク16から読み出されて第1バッファPB1のBバッファにが転送されると共に、クラスタ7の波形データがハードディスク16から読み出されて第2バッファPB2のCバッファに、クラスタ8の波形データがハードディスク16から読み出されてDバッファに転送される。
そして、Aバッファの先頭から次のクラスタ5の波形データ5Aの読み出し中に読み出しアドレスがループ部波形データの先頭であるループスタートLSに達した際に、アタック部波形データの読み出しが終了してアタック波形の再生が終了する。次いで、ループ部波形データが引き続いてクラスタ5から読み出されて、音源部21はループスタートLSのタイミングから1回目のループ波形の生成を開始するようになる。さらに、第2バッファPB2から波形データを読み出すために、このタイミングで、制御レジスタ30には第2バッファPB2のスタートアドレスBS2がジャンプ先として、また、エンドアドレスBE2がジャンプ元としてそれぞれ設定される。
そして、時刻t6となって第1バッファPB1のAバッファから波形データ5Aが全て読み出されると、引き続いて第1バッファPB1のBバッファから波形データ6Bが順次読み出さるようになる。これにより、音源部21は時刻t6からクラスタ6の波形データに基づく再生波形を生成していくようになる。さらに、時刻t7となって第1バッファPB1のBバッファからクラスタ6の波形データが全て読み出されると、第2バッファPB2のCバッファから波形データ7Cが順次読み出さるようになる。これにより、音源部21は時刻t7からクラスタ7の波形データに基づく再生波形を生成していくようになる。さらに、時刻t8となって第2バッファPB2のCバッファからクラスタ7の波形データが全て読み出されると、引き続いて第2バッファPB2のDバッファから波形データ8Bが順次読み出さるようになる。これにより、音源部21は時刻t8からクラスタ8の波形データに基づく再生波形を生成していくようになる。また、この時刻t8で第2バッファPB2のCバッファへ次のクラスタ9の波形データを転送する転送要求のIP割込が発生し、クラスタ9の波形データがハードディスク16から読み出されてCバッファへ転送される。
次いで、時刻t9となって、読出アドレスがエンドアドレスBE2(ジャンプ元)まで進行し、第2バッファPB2のDバッファの波形データ8Dが全て読み出されると、読出アドレスはスタートアドレスBS2(ジャンプ先)に戻され、再び第2バッファPB2のCバッファの先頭から波形データ9Cが順次読み出さるようになる。これにより、音源部21は時刻t9からクラスタ9の波形データに基づく再生波形を生成していくようになる。また、この時刻t9で第2バッファPB2のDバッファへ次のクラスタ10の波形データを転送する転送要求のIP割込が発生し、クラスタ10の波形データがハードディスク16から読み出されてDバッファへ転送されるが、転送されたクラスタ10はループ部波形データのエンドであるループエンドLEを含むLEクラスタ(LEC)とされる。次に、時刻t10になって第2バッファPB2のCバッファの波形データ9Cが全て読み出されると、第2バッファPB2のDバッファの先頭から次のクラスタ10の波形データ10Dが順次読み出さるようになる。これにより、音源部21は時刻t10からクラスタ10の波形データに基づく再生波形を生成していくようになる。さらに、ループ部波形データを先頭から再度再生するために時刻t10においてループスタートLSがジャンプ先として設定される。
また、この時刻t10でIP割込が発生するが、LEクラスタが第2バッファPB2に転送されていることから、2回目のループ再生を開始するようにIP割込は、第1バッファPB1のBバッファに格納されているクラスタ6の次のクラスタ7を第2バッファPB2のCバッファに転送する転送要求となる。これにより、クラスタ7の波形データがハードディスク16から読み出されて第2バッファPB2のCバッファに転送される。次いで、時刻t11となって、読出アドレスがエンドアドレスBE2(ジャンプ元)まで進行し、第2バッファPB2のDバッファの波形データ10Dが全て読み出されると、読出アドレスはループスタートLS(ジャンプ先)に戻され、第1バッファPB1のAバッファにおけるループスタートLSから波形データ5Aが順次読み出さるようになる。これにより、音源部21は時刻t11から2回目のループ再生を開始して、クラスタ5におけるループスタートLSからの波形データに基づく再生波形を生成していくようになる。また、この時刻t11で第2バッファPB2のDバッファへ次のクラスタ8の波形データを転送する転送要求のIP割込が発生し、クラスタ8の波形データがハードディスク16から読み出されてDバッファに転送され、また、第2バッファPB2のスタートアドレスBS2がジャンプ先として設定される。
そして、時刻t12となって第1バッファPB1のAバッファからループスタートLS以降の波形データ5Aが全て読み出されると、引き続いて第1バッファPB1のBバッファから波形データ6Bが順次読み出さるようになる。このように時刻t6以降の動作が時刻t12以降に繰り返し行われて2回目のループ再生が行われる。以降はノートオフが発生するまで同様のループ再生が繰り返し行われるようになる。以上の説明では、各IP割込を特定のクラスタの転送要求として説明していたが、IP割込自体には特定のクラスタを示す情報は含まれていない。各IP割込の発生時点で、CPU10が、選ばれている波形データやそのときの各バッファの状況に基づいて、そのIP割込がどのクラスタの転送要求とすべきかを判断している。
以上のように、アタック部波形データを再生する際には、ノートオンの直後に発音できるように波形メモリ19にプリロードされているアタック部波形データの先頭の1クラスタのプリロード波形データを読み出して発音を行い、この1クラスタの波形データの発音中を利用して第1バッファPB1の2つのAバッファ,Bバッファにプリロード波形データに続くアタック部波形データを1クラスタずつハードディスク16から読み出して転送しておく。そして、第1バッファPB1の1つのバッファの波形データの読み出しが終了する毎に、当該バッファに続くアタック部波形データを1クラスタずつハードディスク16から読み出して転送する。このように、第1バッファPB1を用いてハードディスク16に記録されているアタック部波形データをバッファリング再生することができるようになる。アタック部波形データにはループ部波形データが続いており、アタック部波形データに続いてループ波形データが発音される。
ループ部波形データの発音では第1のバッファPB1と第2バッファPB2とが用いられる。アタック部波形データとループ部波形データとの境界であるループスタートLSは第1バッファのAバッファあるいはBバッファに転送されるようになり、第1バッファPB1から波形データを読み出して発音を行うことにより、アタック部の終わりの波形からループ部の先頭の波形に自然につながって発音されていくようになる。そして、第1バッファPB1からループ部の先頭の波形データが全て読み出された以後は、第2バッファPB2を用いてループ部の後続の波形データの発音が行われる。この場合、第2バッファPB2の1つのバッファの波形データの読み出しが終了する毎に、当該バッファに続くループ部波形データを1クラスタずつハードディスク16から読み出して転送する。このようにして、第2バッファPB2を用いてハードディスク16に記憶されているループ部波形データをバッファリング再生することができるようになる。そして、ループ部の末尾であるループエンドLEまでの波形データが読み出されると、第1バッファPB1のAバッファからループスタートLS以後の波形データを読み出して2回目のループの発音を開始する。この場合、第1バッファPB1には新たな波形データを転送することなく1回目のループの発音の際に転送されていたループ部の先頭の波形データを再利用する。そして、第1バッファPB1から全ての波形データが読み出された以後は、第2バッファPB2を利用して1回目のループの発音と同様の動作が発音停止が指示されるまで行われる。
このようにして、ハードディスク16から波形データを読み出しながら発音しても途切れることのないループ発音を行うことができる。なお、ループ部波形データのLSクラスタ(LSC)は、アタック部の長さに応じて第1バッファPB1のAバッファに転送される場合もあるし、Bバッファに転送される場合もある。ここで、BバッファにLSクラスタが転送されると、ループスタートLSからのループ再生において第2バッファPB2のCバッファへの次のクラスタの転送が間に合わないおそれがあることから、LEクラスタの第2バッファPB2の先頭でないバッファ(この場合はDバッファ)に転送されるように波形データの長さが調整(図2参照)されている。この場合、ループ部波形データのループサイズは、LSクラスタが奇数番号クラスタとされてAバッファに転送される場合は、LSクラスタも含めて少なくとも4以上の偶数個のクラスタからなるループサイズとされ、LSクラスタが偶数番号クラスタとされてBバッファに転送される場合は、LSクラスタも含めて少なくとも3以上の奇数個のクラスタからなるループサイズとされている必要がある。
例を挙げて説明すると、クラスタ6がLSクラスタ(LSC)とされて、そのエンドの直前にループスタートLSがあり、クラスタ9がLEクラスタ(LEC)とされている場合は、第2バッファPB2のCバッファに転送されたクラスタ9の波形データ9Cのエンドに達した際にループエンドLEに達したとされて、2回目のループが開始されるようになる。この時点において、第1バッファPB1のBバッファに格納されているクラスタ6の次のクラスタ7を第2バッファPB2のCバッファに転送する転送要求のIP割込が発生して、第2バッファPB2のCバッファへのクラスタ7の転送が開始される。同時に、第1バッファPB1のBバッファに格納されているクラスタ6のループスタートLSから2回目のループ再生が開始されるが、エンドの直前にループスタートLSがあることから、すぐにクラスタ6のエンドまでの波形データ6Bが読み出されるようになる。続いて、第2バッファPB2のCバッファの波形データ7Cが読み出されるのであるが、このときまでに第2バッファPB2のCバッファへのクラスタ7の転送が終了していない場合は、発音が途切れることになる。そこで、ループ部波形データのループサイズがLEクラスタが第2バッファPB2のDバッファに転送されるサイズになるよう調整することで、第2バッファPB2のCバッファへのクラスタ7の転送時間を十分とれるようになり、発音が途切れることを防止することができる。
次に、ノートオン(p,n,v)イベント処理のフローチャートを図7に示す。pはパート番号、nはノートナンバ(音高)、vはベロシティ(演奏強度)であり、ノートオン(p,n,v)イベント処理はノートオンが発生した際(t0)に起動される。
ノートオン(p,n,v)イベント処理が起動されると、ステップS10にて空いている発音チャンネルのうちのチャンネルaが割当チャンネルとされる。次いで、ステップS11にてノートオンのパート(p)で選択されている音色、音高(n)、ベロシティ(v)に基づいて、何れの波形データ(アタック部波形データとループ部波形データ)を読み出すかを決定する。読み出す波形データが決定されるとステップS12にて割り当てられたaチャンネルの制御レジスタ30に、決定された波形データのプリロードのスタートアドレスPS’、エンドアドレスPE’、aチャンネルの第1バッファPB1のスタートアドレスBS1’、エンドアドレスBE1’、最初のIP割込を発生させる割込アドレスIP’(第1バッファPB1のAバッファの終了アドレス)を設定する。ここでは、エンドアドレスPE’およびエンドアドレスBE’はジャンプ元として設定され、スタートアドレスBS1’はジャンプ先として設定される。次いで、ステップS13にてaチャンネルの制御レジスタ30に、DSP35で使用するビブラートパラメータ、音量制御部33で使用する音量変化パラメータ、ミキサ34で使用するミキシング比などのパラメータを設定する。そして、ステップS14にてaチャンネルに発音開始を指示する。これにより、設定されたスタートアドレスPS’からアタック部波形データの先頭のクラスタの波形データの読み出しが開始される。
次いで、ステップS15にてaチャンネルのターゲットとするクラスタ番号を示すターゲットTC(a)をクラスタ2とし、aチャンネルにおいて次に読み込むべきクラスタ番号を示すNC(a)をクラスタ1とし、aチャンネルの波形生成状態S(a)をアタック状態であることを示す「0」とし、aチャンネルの転送要求R(a)を転送が必要とする「1」に設定する。この設定により、クラスタ1からターゲットとされるクラスタ2までの転送が設定される。この設定が終了するとステップS16にてCPU10が波形データを転送中か否かが判断され、転送中でないと判断された場合はステップS17にて転送開始処理が行われてクラスタ1の波形データの転送が開始され、ノートオン(p,n,v)イベント処理は終了する。また、転送中と判断された場合はノートオン(p,n,v)イベント処理は、そのまま終了する。
なお、第1バッファPB1および第2バッファPB2は発音チャンネル毎に予め波形メモリ19の異なる領域に設定され、波形データ毎に読出アドレスは異なることから、PS等の記号に「’」を付記して発音チャンネルが異なると異なる値を示すことを意味させている。また、以降のフローチャートの説明においても記号に付記される「’」は同様の意味を示すものとして用いている。
次に、ノートオン(p,n,v)イベント処理のステップS17などで実行される転送開始処理のフローチャートを図8に示す。
転送開始処理が起動されると、ステップS20にて転送必要とされている転送要求(R=1)のいずれかのチャンネルが選択され、選択されたチャンネルがbとされる。この選択は、現在発音中のチャンネルの中から、バッファに読み込み済みの波形データの再生時間が短いものを優先的に選択するのがよい。あるいは、簡略化した方法として、クラスタの転送要求が先に生じたチャンネルから順に選択する方法も考えられる。次いで、ステップS21にて選択されたbチャンネルにおいて波形生成状態S(b)がアタック状態(S=0)か否かが判断される。図4に示すようにアタック波形を生成中はS=0とされており、ここでアタック状態であると判断された場合は、ステップS22に進みbチャンネルにおいて次に読み込むべきクラスタ番号NC(b)に応じて第1バッファPB1のA’バッファあるいはB’バッファが転送先として特定されるとともに、該特定された転送先が転送回路18に設定され、ステップS24に進む。また、ステップS21にてbチャンネルの波形生成状態S(b)がアタック状態ではなくループ波形を生成中のループ状態(S=1)あるいはリターン状態(S=2)と判断された場合は、ステップS23に分岐しbチャンネルにおいて次に読み込むべきクラスタ番号NC(b)に応じて第2バッファPB2のC’バッファあるいはD’バッファが転送先として特定され、該特定された転送先が転送回路18に設定され、ステップS24に進む。そして、ステップS24では、ハードディスク16においてクラスタ番号NC(b)の波形データを記憶しているクラスタ(記憶領域)が特定され、HD I/O17を介してハードディスク16に対し当該クラスタからの波形データの読み出し開始を指示するとともに、転送回路18に対して、設定されている転送先への該読み出された波形データの転送開始が指示され、転送開始処理は終了する。これにより、転送先として設定された第1バッファPB1あるいは第2バッファPB2のバッファにクラスタ番号NC(b)の波形データの転送が開始される。
図8に示す転送開始処理により開始されたクラスタの波形データが全て転送された際に、図9に示す転送完了割込(b)イベント処理が開始される。
転送完了割込(b)イベント処理が起動されると、次のクラスタを転送する準備のためにステップS30にて次に読み込むべきクラスタ番号NC(b)が1だけインクリメントされる。次いで、ステップS31にてbチャンネルにおいて次に読み込むべきクラスタ番号NC(b)が1だけインクリメントしたターゲットTC(b)に達したか否かが判断される。ここで、1だけインクリメントしたクラスタ番号NC(b)がターゲットTC(b)に達していないと判断された場合は、ターゲットTC(b)までのクラスタをさらに転送する必要があることからステップS32に進み、bチャンネルのクラスタ転送要求R(b)を転送要とする「1」に設定し、ステップS34に進む。また、1だけインクリメントしたクラスタ番号NC(b)がターゲットTC(b)に達していると判断された場合は、ターゲットTC(b)までのクラスタの転送は終了したとしてステップS33に進み、bチャンネルのクラスタ転送要求R(b)を転送不要とする「0」に設定し、ステップS34に進む。ステップS34では、次に読み込むべきクラスタ番号NC(b)がクラスタLSCx’に達したか否かが判断される。ここで、クラスタ番号NC(b)がクラスタLSCx’に達していないと判断された場合は、アタック状態(S=0)であることからステップS36に進む。
また、クラスタ番号NC(b)がクラスタLSCx’に達したと判断された場合は、ループ状態に移行したとしてステップS35に分岐してbチャンネルの波形生成状態Sがループ状態を示す「1」とされ、ステップS36に戻る。なお、クラスタLSCxは、LSクラスタ(LSC)以降のクラスタで第2バッファPB2に初めて転送されるクラスタであり、LSクラスタがAバッファに転送されていた場合はLSC+2となり、LSクラスタがBバッファに転送されていた場合はLSC+1となる。
ステップS36ではクラスタ番号NC(b)がLEクラスタLEC’を超えたか否かが判断される。ここで、クラスタ番号NC(b)がLEクラスタLEC’を超えていないと判断された場合は、ステップS38に進む。また、クラスタ番号NC(b)がLEクラスタLEC’を超えたと判断された場合は次回のループ発音のために、ステップS37に分岐してbチャンネルにおいて次に読み込むべきクラスタ番号NC(b)がbチャンネルのクラスタLSCx’とされ、ステップS38に進む。ステップS38では転送が必要とされている転送要求(R=1)のいずれかのチャンネルがあるか否かが判断され、ここでR=1のチャンネルがあると判断された場合はステップS39にて当該チャンネルにおいて転送開始処理が開始され、転送完了割込(b)イベント処理が終了する。また、R=1のチャンネルがないと判断された場合は、そのまま転送完了割込(b)イベント処理が終了する。
次に、IP割込が発生した際に実行されるIP割込(c)イベント処理のフローチャートを図10に示す。
cチャンネルにおいてIP割込が発生しIP割込(c)イベント処理が起動すると、ステップS40にてcチャンネルのターゲットTC(c)が1だけインクリメントされると共に、cチャンネルのクラスタ転送要求R(c)が転送要の「1」とされる。次いで、ステップS41にてcチャンネルの波形生成状態S(c)が「0」「1」「2」のいずれであるか判断される。ここで、波形生成状態S(c)が「0」のアタック状態と判断されると、ステップS42に分岐してcチャンネルのターゲットTC(c)がLSクラスタLSC’を超えているか否かが判断される。ここで、ターゲットTC(c)がLSクラスタLSC’を超えていると判断された場合は、波形生成状態がループ状態に移行することからS43にてcチャンネルに第2バッファPB2のスタートアドレスBS2’がジャンプ先として、またエンドアドレスBE2’がジャンプ元としてそれぞれ設定される。次いで、ステップS44にてクラスタLSCy’がターゲットクラスタTC(c)に設定される。これにより、第2バッファPB2のCバッファにクラスタLSCx’が、DバッファにクラスタLSCy’が転送される設定がされステップS50に進む。なお、クラスタLSCxは、ループスタートクラスタLSC以降のクラスタで第2バッファPB2に初めて転送されるクラスタであり、クラスタLSCyは、図4のように第2バッファPB2への移行時も第2バッファPB2の各クラスタの再生終了毎にIP割込みを発生させるようにしている場合は、第2バッファPB2に2番目に転送されるクラスタである。図4の例では、クラスタLSCxはクラスタ7、クラスタLSCyはクラスタ8となる。なお、クラスタLSCyをどのクラスタにするかは、第1バッファPB1から第2バッファPB2へ移行するときに、IP割込みをどのタイミングで発生させるかに依存する。第2バッファPB2がnクラスタ分の領域がある場合には、第2バッファPB2への転送順が、2からn番目までの任意の順のクラスタをクラスタLSCyとしてそのIP割込タイミングを決めることができる。また、ステップS42にてターゲットTC(c)がLSクラスタを超えていないと判断された場合は、アタック状態を維持していることからそのままステップS50に進む。
また、ステップS41にて波形生成状態S(c)が「1」のループ波形を生成しているループ状態と判断されると、ステップS45に分岐してcチャンネルのターゲットTC(c)がLEクラスタLEC’を超えているか否かが判断される。ここで、ターゲットTC(c)がLEクラスタLEC’を超えていると判断された場合はリターン状態に移行することから、ステップS43にて波形生成状態S(c)がS=2のリターン状態に設定される。さらに、次回のループ状態に移行することに備えてターゲットTC(c)にクラスタLSCx’が設定されると共に、ステップS47にてcチャンネルにループスタートアドレスLS’のアドレスがジャンプ先として設定され、ステップS50に進む。
さらに、ステップS41にて波形生成状態S(c)が「2」のループ波形の生成がループスタートに戻るリターン状態と判断されると、ステップS48に分岐して波形生成状態S(c)がS=1のループ状態に設定される。さらに、ループ状態において、ループ波形のバッファリング再生が行えるように、ステップS49にてcチャンネルに第2バッファPB2のスタートアドレスBS’がジャンプ先として設定され、ステップS50に進む。
ステップS50ではcチャンネルに次のIP割込を発生させる割り込みアドレスを設定する。割り込みアドレスは、アタック状態(S=0)の場合は第1バッファPB1のAバッファのエンドアドレスあるいはBバッファのエンドアドレス(BE1)であり、今回の割り込みアドレスがAバッファのエンドアドレスの場合は、Bバッファのエンドアドレスが設定され、今回の割り込みアドレスがBバッファのエンドアドレスの場合は、Aバッファのエンドアドレスが設定される。また、ループ状態(S=1)およびリターン状態(S=2)の場合は第2バッファPB2のCバッファのエンドアドレスあるいはDバッファのエンドアドレス(BE2)であり、今回の割り込みアドレスがCバッファのエンドアドレスの場合は、Dバッファのエンドアドレスが設定され、今回の割り込みアドレスがDバッファのエンドアドレスの場合は、Cバッファのエンドアドレスが設定される。ステップS50の処理が終了するとステップS51にてCPU10が波形データを転送中か否かが判断され、転送中でないと判断された場合はステップS52にて転送開始処理が行われて転送要求されたクラスタの波形データの転送が開始され、IP割込(c)イベント処理は終了する。また、転送中と判断された場合はIP割込(c)イベント処理は、そのまま終了する。
次に、図7ないし図10に示すフローチャートの処理により、本発明にかかる楽音発生装置1が図4に示すように動作する概略説明を行う。この場合、第1バッファPB1はAバッファとBバッファからなるリングバッファ構成とされ、第2バッファPB2はCバッファとDバッファからなるリングバッファ構成とされているものとする。
時刻t0でノートオンが検出されると、図7に示すノートオン(p,n,v)イベント処理が起動され、発音チャンネルの割当およびノートオン情報に基づいて使用する波形データが決定される。そして、使用する波形データのアタック部波形データの先頭のクラスタPの波形データを波形メモリ19から読み出すためのスタートアドレスPS’とエンドアドレスPE’(ジャンプ元)が設定されて、スタートアドレスPS’からエンドアドレスPE’までのクラスタPの波形データの読み出しが開始される。同時に、ハードディスク16から転送した波形をバッファする第1バッファPB1のスタートアドレスBS1’(ジャンプ先)とエンドアドレスBE1’(ジャンプ元)が設定されると共に、ターゲットTCがクラスタ2に次に読み込むクラスタNCがクラスタ1に設定される。さらに、アタック状態(S=0)および転送要(R=1)に設定されると共に、次のIP割込を発生する割込アドレスをAバッファのエンドアドレスに設定する。
これにより、図8に示す転送開始処理が起動され、S=0であると共にNCが1(奇数)とされていることからAバッファにハードディスク16から読み出したクラスタ1の波形データを転送する。Aバッファへのクラスタ1の転送が終了すると、図9に示す転送完了割込(b)イベント処理が起動される。そして、NCがインクリメントされてクラスタ2となっても、TC+1であるクラスタ3よりNCが小さいことからR=1は維持される。これにより、再び転送開始処理が起動されS=0であると共にNCが2(偶数)とされていることからBバッファにハードディスク16から読み出したクラスタ2の波形データを転送する。Bバッファへの波形データ2Bの転送が終了すると、転送完了割込(b)イベント処理が再び起動される。そして、NCがインクリメントされてクラスタ3となり、TC+1であるクラスタ3に一致することからR=0(転送不要)に設定され転送完了割込(b)イベント処理は終了する。このように、クラスタPの波形データを波形メモリ19から読み出している間に、Aバッファにクラスタ1の波形データ1AをBバッファにクラスタ2の波形データ2Bを転送できるようになる。なお、以上の処理の間においてはNCがLSCx’に達しないことからS=0(アタック状態)が維持される。
そして、クラスタPの波形データの読み出しが終了すると、その発音チャンネルに設定された第1バッファPB1のスタートアドレスBS1’から波形データ1Aが読み出されていくようになる。そして、波形データ1Aの読み出しが終了すると読み出しアドレスがAバッファのエンドアドレスに達することからIP割込が発生し、図10に示すIP割込(c)イベント処理が起動する。すると、TCがインクリメントされてクラスタ3とされると共に、R=1(転送要)に設定されBバッファのエンドアドレス(BE1’)が次のIP割込を発生する割込アドレスとして設定されて転送開始処理が起動される。転送開始処理では、S=0であると共にNCが3(奇数)とされていることからAバッファにハードディスク16から読み出したクラスタ3の波形データ3Aを転送する。Aバッファへの波形データ3Aの転送が終了すると、転送完了割込(b)イベント処理が再び起動される。そして、NCがインクリメントされてクラスタ4となり、TC+1であるクラスタ4に一致することからR=0(転送不要)に設定され転送完了割込(b)イベント処理は終了する。これにより、Bバッファの波形データ2Bを読出中においてAバッファに次のクラスタ3の波形データが転送されるようになる。
次いで、波形データ2Bの読み出しが終了すると読み出しアドレスがBバッファのエンドアドレス(BE1’)に達することからIP割込が発生すると共に、読み出しアドレスがAバッファのスタートアドレス(BS1’)に設定され、IP割込(c)イベント処理が起動する。すると、TCがインクリメントされてクラスタ4とされると共に、R=1(転送要)に設定されAバッファのエンドアドレスが次のIP割込を発生する割込アドレスとして設定されて転送開始処理が起動される。転送開始処理では、S=0であると共にNCが4(偶数)とされていることからBバッファにハードディスク16から読み出したクラスタ4の波形データ4Bを転送する。Bバッファへの波形データ4Bの転送が終了すると、転送完了割込(b)イベント処理が起動される。そして、NCがインクリメントされてクラスタ5となり、TC+1であるクラスタ5に一致することからR=0(転送不要)に設定され転送完了割込(b)イベント処理は終了する。これにより、Aバッファの波形データ3Aを読出中においてBバッファに次のクラスタ4の波形データが転送されるようになる。
さらに、波形データ3Aの読み出しが終了すると読み出しアドレスがAバッファのエンドアドレスに達することからIP割込が発生し、IP割込(c)イベント処理が起動する。すると、TCがインクリメントされてクラスタ5(LSC’)とされると共に、R=1(転送要)に設定されBバッファのエンドアドレス(BE1’)が次のIP割込を発生する割込アドレスとして設定されて転送開始処理が起動される。転送開始処理では、S=0であると共にNCが5(奇数)とされていることからAバッファにハードディスク16から読み出したクラスタ5の波形データ5Aを転送する。Aバッファへの波形データ5Aの転送が終了すると、転送完了割込(b)イベント処理が再び起動される。そして、NCがインクリメントされてクラスタ6となり、TC+1であるクラスタ6に一致することからR=0(転送不要)に設定される。この場合、TCはLSC’(クラスタ5)と一致しているが超えていないため、そのまま転送完了割込(b)イベント処理は終了する。これにより、Bバッファの波形データ4Bを読出中においてAバッファに次のクラスタ5の波形データが転送されるようになる。
次いで、波形データ4Bの読み出しが終了すると読み出しアドレスがBバッファのエンドアドレス(BE1’)に達することからIP割込が発生すると共に、読み出しアドレスがAバッファのスタートアドレス(BS1’)に設定され、IP割込(c)イベント処理が起動する。すると、TCがインクリメントされてクラスタ6とされると共に、R=1(転送要)に設定される。この場合、S=0(アタック状態)でTC(クラスタ6)がLSC’(クラスタ5)を超えることからTCにLSCy’(クラスタ8)が設定されると共に、第2バッファPB2を用いる設定(ジャンプ元およびジャンプ先)が行われる。そして、第2バッファPB2のCバッファのエンドアドレスが次のIP割込を発生する割込アドレスとして設定されて転送開始処理が起動される。転送開始処理では、S=0であると共にNCが6(偶数)とされていることからBバッファにハードディスク16から読み出したクラスタ6の波形データ6Bを転送する。Bバッファへの波形データ6Bの転送が終了すると、転送完了割込(b)イベント処理が起動される。そして、NCがインクリメントされてクラスタ7となり、TC+1であるクラスタ9に達していないことからR=1(転送要)が維持されると共に、NC(クラスタ7)がLSCx’(クラスタ7)に一致することからS=1(ループ状態)に設定されて、再び転送開始処理が起動される。
この転送開始処理では、S=1であると共にNCが7(奇数)とされていることからCバッファにハードディスク16から読み出したクラスタ7の波形データ7Cを転送する。Cバッファへの波形データ7Cの転送が終了すると、転送完了割込(b)イベント処理が再び起動され、NCがインクリメントされてクラスタ8となるが、TC+1であるクラスタ9に達していないことからR=1(転送要)およびS=1(ループ状態)が維持されて、三度目の転送開始処理が起動される。この転送開始処理では、S=1であると共にNCが8(偶数)とされていることからDバッファにハードディスク16から読み出したクラスタ8の波形データ8Dを転送する。Dバッファへの波形データ8Dの転送が終了すると、転送完了割込(b)イベント処理が三度起動され、NCがインクリメントされてクラスタ9となり、TC+1であるクラスタ9に一致することからR=0(転送不要)に設定されるが、S=1(ループ状態)は維持されて、転送完了割込(b)イベント処理は終了する。これにより、Aバッファの波形データ5Aを読出中においてBバッファに次のクラスタ6の波形データが、Cバッファにその次のクラスタ7の波形データが、Dバッファにその次のクラスタ8の波形データが転送されて、1回目のループ波形の生成の準備が整うことになる。
そして、Aバッファの波形データ5AおよびBバッファの波形データ6Bの読み出しが終了すると、続いて第2バッファPB2のCバッファの波形データ7Cの読み出しが開始される。波形データ7Cが順次読み出されて読出アドレスがCバッファのエンドアドレスまで進むとIP割込が発生し、IP割込(c)イベント処理が起動する。このIP割込(c)イベント処理では、TCがインクリメントされてクラスタ9とされると共に、R=1(転送要)に設定される。この場合、S=1(ループ状態)でTC(クラスタ9)がLEC’(クラスタ10)を超えていないことから、Dバッファのエンドアドレス(BE2’)が次のIP割込を発生する割込アドレスとして設定されて転送開始処理が起動される。転送開始処理では、S=1であると共にNCが9(奇数)とされていることからCバッファにハードディスク16から読み出したクラスタ9の波形データ9Cを転送する。Cバッファへの波形データ9Cの転送が終了すると、転送完了割込(b)イベント処理が起動される。そして、NCがインクリメントされてクラスタ10となり、TC+1であるクラスタ10に達することからR=0(転送不要)に設定されると共に、NC(クラスタ10)がLEC’(クラスタ10)を超えないことから転送完了割込(b)イベント処理は終了する。これにより、Dバッファの波形データ8Dを読出中においてCバッファに次のクラスタ9の波形データが転送されるようになる。
さらに、Dバッファの波形データ8Dの読み出しが終了すると読出アドレスがDバッファのエンドアドレス(BE2’)まで進みIP割込が発生すると共に、読み出しアドレスがCバッファのスタートアドレス(BS2’)に設定され、IP割込(c)イベント処理が起動する。このIP割込(c)イベント処理では、TCがインクリメントされてクラスタ10とされると共に、R=1(転送要)に設定される。この場合、S=1(ループ状態)でTC(クラスタ10)がLEC’(クラスタ10)を超えていないことから、Cバッファのエンドアドレスが次のIP割込を発生する割込アドレスとして設定されて転送開始処理が起動される。転送開始処理では、S=1であると共にNCが10(偶数)とされていることからDバッファにハードディスク16から読み出したクラスタ10の波形データ10Dを転送する。Dバッファへの波形データ10Dの転送が終了すると、転送完了割込(b)イベント処理が起動される。そして、NCがインクリメントされてクラスタ11となり、TC+1であるクラスタ11に達することからR=0(転送不要)に設定されると共に、NC(クラスタ11)がLEC’(クラスタ10)を超えるようになることからNCにLSCx’(クラスタ7)が設定され転送完了割込(b)イベント処理は終了する。これにより、Cバッファの波形データ9Cを読出中においてDバッファに次のクラスタ10が転送されるようになる。
次いで、Cバッファの波形データ9Cの読み出しが終了すると読出アドレスがCバッファのエンドアドレスまで進みIP割込が発生し、IP割込(c)イベント処理が起動する。このIP割込(c)イベント処理では、TCがインクリメントされてクラスタ11とされると共に、R=1(転送要)に設定される。この場合、S=1(ループ状態)でTC(クラスタ11)がLEC’(クラスタ10)を超えるようになることから、TCがLSCx’(クラスタ7)に、波形生成状態がS=2(リターン状態)に設定されると共に、次のIP割込があったときに読み出しアドレスをループスタートアドレスLS’とする設定(ジャンプ先)が行われる。そして、Dバッファのエンドアドレス(BE2’)が次のIP割込を発生する割込アドレスとして設定されて転送開始処理が起動される。転送開始処理では、S=2であると共にNCが7(奇数)とされていることからCバッファにハードディスク16から読み出したクラスタ7の波形データ7Cを転送する。Cバッファへの波形データ7Cの転送が終了すると、転送完了割込(b)イベント処理が起動される。そして、NCがインクリメントされてクラスタ8となり、TC+1であるクラスタ8に達することからR=0(転送不要)に設定され転送完了割込(b)イベント処理は終了する。これにより、Dバッファの波形データ10Dを読出中においてCバッファに2回目のループ波形の生成に用いるクラスタ7の波形データが転送されるようになる。
さらに、Dバッファの波形データ10Dの読み出しが終了すると読出アドレスがDバッファのエンドアドレス(BE2’)まで進みIP割込が発生すると共に、読み出しアドレスがAバッファのループスタートアドレス(PS’)に設定され、IP割込(c)イベント処理が起動する。このIP割込(c)イベント処理では、TCがインクリメントされてクラスタ8とされると共に、R=1(転送要)に設定される。この場合、S=2(リターン状態)とされていることから、S=1(ループ状態)に設定されると共に、第1バッファPB1の波形データの読み出しに続いて第2バッファPB2から波形データの読み出しを行うよう第2バッファPB2のスタートアドレスBS2’がジャンプ先として設定される。そして、Cバッファのエンドアドレスが次のIP割込を発生する割込アドレスとして設定されて転送開始処理が起動される。転送開始処理では、S=1であると共にNCが8(偶数)とされていることからDバッファにハードディスク16から読み出したクラスタ8の波形データ8Dを転送する。Dバッファへの波形データ10Dの転送が終了すると、転送完了割込(b)イベント処理が起動される。そして、NCがインクリメントされてクラスタ9となり、TC+1であるクラスタ9に達することからR=0(転送不要)に設定され転送完了割込(b)イベント処理は終了する。これにより、第1バッファPB1のAバッファにおいてループスタートアドレスLS’からの波形データ5Aが読み出されて2回目のループ波形の生成が開始される。なお、この波形データ5Aを読出中において第2バッファPB2のDバッファにクラスタ8の波形データが転送されるようになる。
このようにして2回目のループ波形が生成されていくようになるが、時点t12以降の動作は1回目のループ波形における時点t6以降と同様となるので、その説明は省略するが、繰り返し実行されるループ波形の生成はノートオフされて発音停止の指示がされるまで行われる。なお、ループ波形の生成においてはループ状態(S=1)とリターン状態(S=2)を交互に繰り返すことによりループ波形を繰り返し生成することができるようになる。
本発明にかかる楽音発生装置1は、図7ないし図10に示すフローチャートの処理を実行することにより種々の長さの波形データを用いてアタック波形およびループ波形からなる楽音を生成することができる。この場合、ループ部波形データのループサイズは、LSクラスタが奇数番号クラスタとされてAバッファに転送される場合は、LSクラスタも含めて少なくとも4以上の偶数個のクラスタからなるループサイズとされ、LSクラスタが偶数番号クラスタとされてBバッファに転送される場合は、LSクラスタも含めて少なくとも3以上の奇数個のクラスタからなるループサイズとされるよう予め調整されてハードディスク16に記録されている。
以上の説明において第1バッファおよび第2バッファはそれぞれ2つのバッファからなるリングバッファ構成としたが、この構成に限ることはなく任意に変更することができる。例えば、連続するバッファの数は、4以上の任意の数とすることができる。この場合、連続するバッファの数は5であってもよいし、10であってもよい。さらに、上記リングバッファのサイズは、2以上の任意の数のクラスタを格納できるサイズであってよいし、最初のリングバッファと、ループ開始点(LS)通過以後のリングバッファとは、サイズを異ならせるようにしてもよい。
さらにまた、第2バッファのサイズが3クラスタ以上を格納できるサイズである場合、第2バッファの最終クラスタ領域を必ずしもLEクラスタとする必要は無く、第2バッファの2番目以降の任意のクラスタ領域にLEクラスタが転送されるようにしてもよい。さらにまた、ループ開始点(LS)が第1バッファの最終クラスタ領域以外のクラスタ領域にある場合には、第1バッファの該クラスタ領域の次以降の任意のクラスタ領域を、第2バッファの先頭クラスタとしてもよい。なお、上記の説明では波形データにおけるループ部波形データのサイズがアタック部波形データのサイズより大きくなっていたが、一般的な波形データでは、アタック部波形データのサイズの方が大きい場合が多くされている。
なお、上記した図8におけるステップS22およびステップS23の説明では、第1バッファPB1ないし第2バッファPB2内の転送先のバッファを、転送すべきクラスタのクラスタ番号が偶数か奇数かで決定するものとしていたが、偶数/奇数での判別は、第1バッファPB1および第2バッファPB2がそれぞれ2つのバッファで構成されている場合にのみ可能である。一般的には、第1バッファPB1がf個のバッファで、第2バッファPB2がg個のバッファで構成されていれば、ループスタートクラスタLSC、ループエンドクラスタLECの波形データのh番目のクラスタhを再生するとして、(1)第1バッファPB1における転送先のバッファTB1は、ステップS22において、TB1=modulo{(h−1)/f}+1の式で算出でき、また、(2)第2バッファPB2における転送先のバッファTB2は、ステップS23において、j=h−roundup{LSC/f}×f、TB2=modulo{(j−1)/g}+1の式で算出できる。(ただし、moduloは、{}内の除算の余りを求める関数、roundupは、{}内の除算結果の小数部を切り上げる関数、jは第2バッファが再生する複数クラスタにおけるクラスタ番号を示す変数である。)ここでは、クラスタLSCxは、LSCx=roundup{LSC/f}×f+1により算出され、第1バッファPB1が転送先となるクラスタhはh<LSCxの場合であり、第2バッファPB2が転送先となるクラスタhはh≧LSCxの場合となる。
上記した本発明の説明において、プリロード領域に記憶するプリロード波形データの長さは、1クラスタ分でなく複数クラスタ分であってもよい。プリロード領域を長くすれば、その分だけ波形メモリ19の領域をより多く使うことになるが、ノートオン直後のハードディスクから波形メモリへ転送する際の時間的余裕を長くすることができる。一般的に、第1バッファと同じ程度のサイズのプリロード領域を設けるのが好適である。すなわち、上記した本発明の実施例では1クラスタ分としたが、2クラスタの方がより好適となる。なお、本発明はループ部のバッファリング再生を行う構成を特徴とするものであり、プリロード領域を再生する構成については必須の構成とする必要はない。
また、波形メモリ19におけるバッファの各領域を、所定の順番で連続的に配置していたが、メモリマネジメントを用いた仮想メモリ技術を用いればこの条件を緩和することができる。すなわち、メモリ上に配置された複数のバッファをメモリマネジメントにより各バッファ単位で仮想的に並べ替えられるようにして、該複数のバッファが物理的には所定の順番ではない、あるいは連続していない場合でも、仮想的に所定の順番で連続的に配置させ、その仮想的メモリ空間に配置された複数バッファを用いて本発明を実現しても良い。さらに、メモリマネジメントを簡易化して、この発明で使用する複数のバッファを論理的に再配置するためのハードウェア回路のみを設けるようにしてもよい。
本発明の実施例である楽音発生装置の構成を示すブロック図である。 本発明の実施例である楽音発生装置における音源部の詳細な構成を示すブロック図である。 本発明の実施例である楽音発生装置における外部記憶装置に記憶されている波形データを説明するための図である。 本発明の実施例である楽音発生装置におけるノートオンされた際の波形データの転送や読み出し、転送制御等のタイミングを示す図である。 本発明の実施例である楽音発生装置における波形メモリに関連するメモリマップを示す図である。 本発明の実施例である楽音発生装置における波形データの読み出し動作を示す図である。 本発明の実施例である楽音発生装置が実行するノートオン(p,n,v)イベント処理のフローチャートである。 本発明の実施例である楽音発生装置が実行する転送開始処理のフローチャートである。 本発明の実施例である楽音発生装置が実行する転送完了割込処理のフローチャートである。 本発明の実施例である楽音発生装置が実行するIP割込(c)イベント処理のフローチャートである。
符号の説明
1 楽音発生装置、10 CPU、11 フラッシュメモリ、12 RAM、13 表示器、14 操作子、15 タイマ、16 ハードディスク、17 HD I/O、18 転送回路、19 波形メモリ、20 アクセス調停部、21 音源部、22 サウンドシステム、23 MIDI I/O、24 CPUバス、30 制御レジスタ、31 アドレスカウンタ、32 補間部、33 音量制御部、34 ミキサ、35 処理部(DSP)、36 D/A変換器

Claims (3)

  1. 読み出すべきデータを、所定単位量のデータを単位として指示可能な外部記憶装置であって、楽音波形のアタック部とされるアタック部波形データと、該アタック部波形データに続くループ部波形データとからなる波形データが複数種類記憶されている外部記憶装置から、所望の波形データを読み出しながら発音する楽音発生装置であって、
    それぞれリングバッファであって、所定単位量の波形データを格納することができるバッファ領域を、それぞれ複数ずつ有している第1バッファおよび第2バッファが連続して読み出し可能に作成されている波形メモリ部と、
    所定量単位の読み出し指示に応じて前記外部記憶装置から所定単位量ずつ読み出された波形データを、前記第1バッファあるいは前記第2バッファに転送する転送手段と、
    前記第1バッファあるいは前記第2バッファから波形データを順次読み出して発音する音源手段とを備え、
    発音開始が指示された際に、
    前記転送手段は前記アタック部波形データを、前記外部記憶装置から所定単位量ずつ読み出して前記第1バッファの複数のバッファ領域にそれぞれ転送し、
    前記音源手段は、前記第1バッファの複数のバッファ領域から順次波形データを読み出して発音し、
    前記第1バッファの1つのバッファ領域からの波形データの読み出しが終了する毎に、前記転送手段が、続く波形データを前記外部記憶装置から所定単位量ずつ読み出して当該読み出しが終了した前記第1バッファのバッファ領域に転送し、
    前記転送手段が転送する所定単位量の波形データに前記ループ部波形データの開始位置であるループスタートが含まれている場合は、
    前記転送手段は、前記第1バッファの後続のバッファ領域への波形データの転送が終了した際に、続く波形データを前記第2バッファの複数のバッファ領域に転送し、
    前記音源手段は、前記第1バッファの複数バッファ領域から前記ループスタートを含む波形データを読み出したとき、前記第1バッファの後続の波形データを読み出した後、引き続いて前記第2バッファのバッファ領域から波形データを読み出して発音し、
    前記第2バッファの1つのバッファ領域からの波形データの読み出しが終了する毎に、前記転送手段が、続く波形データを前記外部記憶装置から所定単位量ずつ読み出して当該読み出しが終了した前記第2バッファのバッファ領域に転送し、
    前記転送手段が転送する所定単位量の波形データに前記ループ部波形データの終了位置であるループエンドが含まれている場合は、
    前記音源手段は、前記第2バッファの複数バッファ領域から記憶されている波形データの該ループエンドまでの読み出しが終了した際に、続いて、前記第1バッファにおける前記ループスタートの位置から波形データを読み出して発音し、以降は、前記ループスタートを含む波形データを読み出したとき以下の動作を繰り返し行うよう制御されることを特徴とする楽音発生装置。
  2. 前記アタック部波形データの先頭の所定単位量の波形データを記憶するプリロード領域が前記波形メモリ部に作成されており、
    発音開始が指示された際に、前記音源手段は前記波形メモリ部のプリロード領域から前記アタック部波形データを読み出して発音開始すると共に、該アタック部波形データが読み出される期間を利用して、前記転送手段は前記アタック部波形データの先頭の所定単位量の波形データに続く波形データを前記外部記憶装置から所定単位量ずつ読み出して前記第1バッファの複数のバッファ領域に転送することを特徴とする請求項1記載の楽音発生装置。
  3. 前記外部記憶装置には、前記第2バッファにおける最も後のバッファ領域に前記ループ部波形データのループエンドが含まれる所定単位量の波形データが転送される長さに調整された波形データが記録されていることを特徴とする請求項1記載の楽音発生装置。
JP2007087141A 2007-03-29 2007-03-29 楽音発生装置 Expired - Fee Related JP4998046B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007087141A JP4998046B2 (ja) 2007-03-29 2007-03-29 楽音発生装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007087141A JP4998046B2 (ja) 2007-03-29 2007-03-29 楽音発生装置

Publications (2)

Publication Number Publication Date
JP2008249756A true JP2008249756A (ja) 2008-10-16
JP4998046B2 JP4998046B2 (ja) 2012-08-15

Family

ID=39974823

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007087141A Expired - Fee Related JP4998046B2 (ja) 2007-03-29 2007-03-29 楽音発生装置

Country Status (1)

Country Link
JP (1) JP4998046B2 (ja)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010224078A (ja) * 2009-03-23 2010-10-07 Yamaha Corp 楽音生成装置
JP2010224077A (ja) * 2009-03-23 2010-10-07 Yamaha Corp 楽音生成装置
JP2019028200A (ja) * 2017-07-28 2019-02-21 カシオ計算機株式会社 楽音発生装置、方法、プログラム、及び電子楽器
JP2019028198A (ja) * 2017-07-28 2019-02-21 カシオ計算機株式会社 楽音発生装置、方法、プログラム、及び電子楽器
JP2019028199A (ja) * 2017-07-28 2019-02-21 カシオ計算機株式会社 楽音発生装置、方法、プログラム、及び電子楽器
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
JPH06308964A (ja) * 1993-04-27 1994-11-04 Yamaha Corp 楽音形成装置
JPH09134177A (ja) * 1996-11-14 1997-05-20 Yamaha Corp 電子楽器用音源装置
JPH11282465A (ja) * 1998-01-28 1999-10-15 Roland Corp 波形データ再生装置
JP2002014678A (ja) * 2001-06-04 2002-01-18 Kawai Musical Instr Mfg Co Ltd 楽音の制御信号の生成装置及び制御方法
JP2006184629A (ja) * 2004-12-28 2006-07-13 Yamaha Corp アクセス制御装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06308964A (ja) * 1993-04-27 1994-11-04 Yamaha Corp 楽音形成装置
JPH09134177A (ja) * 1996-11-14 1997-05-20 Yamaha Corp 電子楽器用音源装置
JPH11282465A (ja) * 1998-01-28 1999-10-15 Roland Corp 波形データ再生装置
JP2002014678A (ja) * 2001-06-04 2002-01-18 Kawai Musical Instr Mfg Co Ltd 楽音の制御信号の生成装置及び制御方法
JP2006184629A (ja) * 2004-12-28 2006-07-13 Yamaha Corp アクセス制御装置

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010224078A (ja) * 2009-03-23 2010-10-07 Yamaha Corp 楽音生成装置
JP2010224077A (ja) * 2009-03-23 2010-10-07 Yamaha Corp 楽音生成装置
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
JP2019028200A (ja) * 2017-07-28 2019-02-21 カシオ計算機株式会社 楽音発生装置、方法、プログラム、及び電子楽器
JP2019028198A (ja) * 2017-07-28 2019-02-21 カシオ計算機株式会社 楽音発生装置、方法、プログラム、及び電子楽器
JP2019028199A (ja) * 2017-07-28 2019-02-21 カシオ計算機株式会社 楽音発生装置、方法、プログラム、及び電子楽器
JP6996148B2 (ja) 2017-07-28 2022-01-17 カシオ計算機株式会社 楽音発生装置、方法、プログラム、及び電子楽器

Also Published As

Publication number Publication date
JP4998046B2 (ja) 2012-08-15

Similar Documents

Publication Publication Date Title
JP4998046B2 (ja) 楽音発生装置
JP2671747B2 (ja) 楽音形成装置
JP4211709B2 (ja) 自動演奏装置および同装置に適用されるコンピュータプログラム
JP2000276172A (ja) 楽音生成装置および記憶媒体
JP2586450B2 (ja) 波形記憶再生装置
JPS6326398B2 (ja)
JP5534389B2 (ja) 楽音生成装置
JP5839156B2 (ja) 楽音信号発生装置
JP5316091B2 (ja) 波形メモリ音源
JP4254677B2 (ja) 楽音発生装置および楽音発生処理のプログラム
JP2591160B2 (ja) 波形選択合成装置
JP3656906B2 (ja) 時間軸可変の波形データ再生装置
JP4236570B2 (ja) 波形再生装置および波形再生プログラム
JP3508509B2 (ja) 音源装置
JPH0719150B2 (ja) 電子楽器のアサイナ
JP5569048B2 (ja) 楽音信号発生装置
JP5504983B2 (ja) 楽音信号発生装置
US5817964A (en) Electronic musical instrument and method for storing a plurality of waveform sampling data at a single address
JP2583377B2 (ja) 自動演奏装置
JP5146188B2 (ja) 楽音信号生成装置
JP3858905B2 (ja) メモリ使用音源装置
JP5070908B2 (ja) 電子楽器における自動伴奏生成装置及びそのコンピュータプログラム
JP2591159B2 (ja) 波形選択合成装置
JP3770030B2 (ja) 録音再生装置
JP5648791B2 (ja) 楽音信号発生装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100120

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20111228

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120213

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120323

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120417

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120430

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20150525

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees