(57)【要約】【課題】  ハードディスク３０に記憶されている複数トラックの波形データをクラスタ毎に読み出してバッファメモリ５０内のバッファ領域に転送し、該バッファメモリ５０からサンプリング周期毎に各トラック毎の波形データを１サンプルづつ読出して再生するハードディスクレコーダにおいて、ある短い範囲（ループ区間）を繰り返し再生するナッジ処理を行う。このナッジ処理において、ループ区間が大幅に変更された場合であっても、バッファメモリ５０が高速に追従できる可能性を高める。【解決手段】  サンプル値が記憶された波形データの範囲の先頭点および最終点のうちループ区間に近接している側に隣接して波形データを追加するように、転送すべき波形データを指定するようにした。これにより、ループ区間の前後にバランスよく波形データを記憶することができるようになった。【選択図】  図１
2006277784.tif 000002
【特許請求の範囲】
【請求項１】
第１の記憶装置に記憶されている波形データを所定の複数のサンプル数から成るデータ単位毎に読み出して該第１の記憶装置よりもアクセス速度の速い第２の記憶装置に転送する転送手段と、
前記第２の記憶装置に記憶された波形データの中からループ再生されるループ区間を決定するループ区間決定手段と、
前記第２の記憶装置において前記データ単位以上の空き領域が存在するか否かを判定する空き領域判定手段と、
前記空き領域判定手段の判定結果が肯定的である期間において、前記第２の記憶装置においてサンプル値が記憶された波形データの範囲の先頭点および最終点のうち前記ループ区間に近接している側に隣接して波形データを追加するように前記転送手段に対して転送すべき波形データを繰り返し指定する波形データ指定手段と、
前記ループ区間の移動によって前記先頭点または最終点のうち一方から前記ループ区間の中心までのサンプル数が所定のブロック解放条件を満たしたか否かを判定する解放条件判定手段と、
前記空き領域判定手段の判定結果が否定的であり、かつ、前記解放条件判定手段の判定結果が肯定的であることを条件として、前記先頭点または最終点のうち前記ループ区間から離れている側の波形データを記憶する記憶領域を解放して前記空き領域にする解放手段と
を有することを特徴とする波形データ処理装置。
【請求項２】
前記波形データ指定手段は、前記波形データの繰り返し指定により、前記転送手段に前記ループ区間の中心から少なくとも前記データ単位以上の限界値である所定の限界値ｔｈ以上のサンプル数を確保させるものであり、
前記解放条件判定手段は、前記ブロック解放条件として、前記ループ区間の移動によって前記先頭点または最終点のうち一方から前記ループ区間の中心までのサンプル数が前記所定の限界値ｔｈ未満になったか否かを判定するものである
ことを特徴とする請求項１記載の波形データ処理装置。
【請求項３】
前記第２の記憶装置に記憶可能な全サンプル数をｎとし、前記データ単位のサンプル数をｍとし、αを０．５≦α≦１．０の定数として、前記所定の限界値ｔｈは、
ｔｈ＝ｎ／２−α・ｍ  
であることを特徴とする請求項２記載の波形データ処理装置。
【請求項４】
前記解放条件判定手段は、前記ブロック解放条件として、前記ループ区間の移動によって前記先頭点または最終点のうち一方から前記ループ区間の中心までのサンプル数が所定の限界値ｔｈ以上になったか否かを判定する
ことを特徴とする請求項１記載の波形データ処理装置。
【請求項５】
前記第２の記憶装置に記憶可能な全サンプル数をｎとし、前記データ単位のサンプル数をｍとし、αを０．５≦α≦１．０の定数として、前記所定の限界値ｔｈは、
ｔｈ＝ｎ／２＋α・ｍ  
であることを特徴とする請求項４記載の波形データ処理装置。
【請求項６】
前記解放条件判定手段は、前記ブロック解放条件として、前記ループ区間の移動によって、前記先頭点および最終点のうち各々から前記ループ区間の中心までのサンプル数の差が所定の限界値以上になったか否かを判定する
ことを特徴とする請求項１記載の波形データ処理装置。
【請求項７】
前記第２の記憶装置に記憶可能な全サンプル数をｎとし、前記データ単位のサンプル数をｍとし、αを１．０≦α≦１．５の定数として、前記所定の限界値ｔｈは、
ｔｈ＝α・ｍ  
であることを特徴とする請求項６記載の波形データ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードディスク等の記録媒体を用いて波形データを記録・再生する装置に用いて好適な波形データ処理装置に関する。
【背景技術】
【０００２】
ハードディスクに記録した複数トラックの波形データをバッファメモリに読み込み再生するとともに、バッファメモリに書き込まれた波形データをハードディスクに記録する装置であるハードディスクレコーダが特許文献１に開示されている。該装置においては、一の楽曲（ソング）を構成する各トラック毎に、バッファメモリ内にトラック領域が割り当てられ、各トラック領域は各々がハードディスクの「１」クラスタ相当量のメモリ容量を有する複数のバッファ領域から構成されている。そして、あるトラックのバッファ領域の再生が終了すると、そのバッファ領域に対してハードディスクから新たな波形データを転送しつつ他のバッファ領域を再生することにより、一連の波形データを連続的に読み込みつつ再生することができる。
【０００３】
また、特許文献１の技術においては、波形データとソング管理データとによって楽曲の内容が特定される。ここで、ソング管理データとは、波形データのうち実際に再生すべき一または複数の範囲（リージョン）と、これら各リージョンの再生タイミングとを規定するものである。これにより、一連の波形データのうちある部分を切り詰めたり、継ぎ足したりして楽曲を編集する場合には、実際に波形データそのものを編集する必要はなく、ソング管理データを編集すればよいことになる。
【０００４】
【特許文献１】特開２００３−３２３１７４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところで、特許文献１には特に明記されていないが、従来のハードディスクレコーダでは「ナッジ」という再生機能を有していた。これは、ソング上の短い期間（例えば２５msec〜８００msec）であるループ区間を繰り返してループ再生する機能である。しかし、上述したナッジ機能においては、ループ区間がバッファ領域に記憶されている波形データの周縁部に相当に近づいたとき（具体的にはバッファ領域に記憶されている波形データの周縁部とループ区間の中心との間のサンプル数が、「１／２クラスタ」相当量未満になったとき）、該周縁部に続く波形データがハードディスクからバッファ領域に転送されていた。ここで、ループ区間は既にバッファ領域に読み込まれているサンプルの範囲内でのみ設定可能なものであるため、ループ区間の位置を大幅に変更しようとしたときにバッファ領域への波形データの補充が間に合わず、ループ区間の変更操作に支障を来たすという問題があった。
【０００６】
この発明は上述した事情に鑑みてなされたものであり、ループ区間の前後に余裕を持って波形データを読み込むことができる波形データ処理装置を提供することを目的としている。
【課題を解決するための手段】
【０００７】
上記課題を解決するため本発明にあっては、下記構成を具備することを特徴とする。なお、括弧内は例示である。
請求項１記載の波形データ処理装置にあっては、第１の記憶装置（３０）に記憶されている波形データを所定の複数のサンプル数から成るデータ単位（クラスタ）毎に読み出して該第１の記憶装置よりもアクセス速度の速い第２の記憶装置（５０）に転送する転送手段（２８，８６，８８）と、前記第２の記憶装置（５０）に記憶された波形データの中からループ再生されるループ区間（LS, LE）を決定するループ区間決定手段（６）と、前記第２の記憶装置（５０）において前記データ単位（クラスタ）以上の空き領域（Sr）が存在するか否かを判定する空き領域判定手段（ＳＰ１５６）と、前記空き領域判定手段（ＳＰ１５６）の判定結果が肯定的である期間において、前記第２の記憶装置においてサンプル値が記憶された波形データの範囲の先頭点（HP）および最終点（TP）のうち前記ループ区間（LS, LE）に近接している側に隣接して波形データを追加するように前記転送手段（２８，８６，８８）に対して転送すべき波形データを繰り返し指定する波形データ指定手段（ＳＰ１５８）と、前記ループ区間の移動によって前記先頭点または最終点のうち一方から前記ループ区間の中心までのサンプル数が所定のブロック解放条件を満たしたか否かを判定する解放条件判定手段（ＳＰ１６０，変形例）と、前記空き領域判定手段の判定結果が否定的であり、かつ、前記解放条件判定手段の判定結果が肯定的であることを条件として、前記先頭点または最終点のうち前記ループ区間から離れている側の波形データを記憶する記憶領域を解放して前記空き領域にする解放手段（ＳＰ１６２）とを有することを特徴とする。
さらに、請求項２記載の構成にあっては、請求項１記載の波形データ処理装置において、前記波形データ指定手段は、前記波形データの繰り返し指定により、前記転送手段に前記ループ区間の中心から少なくとも前記データ単位以上の限界値である所定の限界値ｔｈ（２Scr ）以上のサンプル数を確保させるものであり、前記解放条件判定手段は、前記ブロック解放条件として、前記ループ区間（LS, LE）の移動によって前記先頭点（HP）または最終点（TP）のうち一方から前記ループ区間（LS, LE）の中心までのサンプル数が前記所定の限界値ｔｈ（２Scr ）未満になったか否かを判定するものであることを特徴とする。
さらに、請求項３記載の構成にあっては、請求項２記載の波形データ処理装置において、前記第２の記憶装置に記憶可能な全サンプル数をｎとし、前記データ単位のサンプル数をｍとし、αを０．５≦α≦１．０の定数として、前記所定の限界値ｔｈは、ｔｈ＝ｎ／２−α・ｍであることを特徴とする。
さらに、請求項４記載の構成にあっては、請求項１記載の波形データ処理装置において、前記解放条件判定手段は、前記ブロック解放条件として、前記ループ区間の移動によって前記先頭点または最終点のうち一方から前記ループ区間の中心までのサンプル数が所定の限界値ｔｈ以上になったか否かを判定することを特徴とする。
さらに、請求項５記載の構成にあっては、請求項４記載の波形データ処理装置において、前記第２の記憶装置に記憶可能な全サンプル数をｎとし、前記データ単位のサンプル数をｍとし、αを０．５≦α≦１．０の定数として、前記所定の限界値ｔｈは、ｔｈ＝ｎ／２＋α・ｍであることを特徴とする。
さらに、請求項６記載の構成にあっては、請求項１記載の波形データ処理装置において、前記解放条件判定手段は、前記ブロック解放条件として、前記ループ区間の移動によって、前記先頭点および最終点のうち各々から前記ループ区間の中心までのサンプル数の差が所定の限界値以上になったか否かを判定することを特徴とする。
さらに、請求項７記載の構成にあっては、請求項６記載の波形データ処理装置において、前記第２の記憶装置に記憶可能な全サンプル数をｎとし、前記データ単位のサンプル数をｍとし、αを１．０≦α≦１．５の定数として、前記所定の限界値ｔｈは、ｔｈ＝α・ｍであることを特徴とする。
【発明の効果】
【０００８】
このように、本発明によれば、サンプル値が記憶された波形データの範囲の先頭点および最終点のうちループ区間に近接している側に隣接して波形データを追加するように、転送手段に対して転送すべき波形データを指定するから、ループ区間の前後にバランスよく波形データを記憶することができ、ユーザがループ区間の位置を大幅に変更しようとしたときにも速やかに追従できる可能性を高くすることができる。
また、ブロック解放条件として、先頭点または最終点のうち一方からループ区間の中心までのサンプル数が所定の限界値未満になったか否かを判定する構成によれば、前後何れの方向にも該所定の限界値以上のサンプル数を準備することができる。
また、ブロック解放条件として、先頭点または最終点のうち一方からループ区間の中心までのサンプル数が所定の限界値以上になったか否かを判定する構成によれば、何れかの方向にサンプルを準備しすぎて逆方向の準備されたサンプル数が不足することを防止できる。
また、ブロック解放条件として、先頭点および最終点のうち各々からループ区間の中心までのサンプル数の差が所定の限界値以上になったか否かを判定する構成によれば、準備されているサンプル数が多い方向のブロックを解放してその逆方向のブロックを準備するようになっているので、何れかの方向にサンプルを準備しすぎて逆方向の準備されたサンプル数が不足することを防止できる。
【発明を実施するための最良の形態】
【０００９】
1．実施例のデータ構成
次に、本発明の一実施例のハードディスクレコーダについて説明するが、最初に、本実施例に採用されているソングデータの構成を図２(a)，(b)を参照し説明する。
図２(a)は後述するハードディスクに適用されるメモリマップである。図においてハードディスクには、システムに共通の各種管理データを格納する管理データ領域１００と、波形データの実体を格納する音データ部１０２と、この音データ部１０２に含まれる波形データのアドレス等を指定することにより、楽曲（ソング）の内容を規定するソング管理データ１０４，１０６，……とから構成されている。
【００１０】
なお、ソング管理データ１０４，１０６，……は、楽曲の数だけ記憶されるが、音データ部１０２は全ソングに対して共通である。これにより、複数のソングに使用される波形データを重複して記憶することなく流用することができる。ハードディスクにおいては「クラスタ」を単位として波形データ等が記録されているが、本実施例において「１」クラスタは「１２８ｋバイト」から構成されている。従って、サンプリング周期「４８kＨz」、分解能「１６ビット」の波形データであれば、凡そ「１．５秒」の波形データを「１」クラスタに記憶させることができる。
【００１１】
次に、これらソング管理データの構造を図２(b)を参照し説明する。各ソング管理データは最大「１６」のトラックの内容を規定するトラックデータ１０８−１〜１０８−１６を有している。そして、各トラックデータは、最大「８」の仮想トラックデータ１１０−１〜１１０−８から構成されている。ここで、各トラックデータにおいては、実際に録音・再生に供される一の仮想トラックが指定されている。換言すれば、ある「トラック」に対して録音または再生が実行されるときは、実際には、この指定された何れかの「仮想トラック」に対して録音または再生が実行されることになる。
【００１２】
ここで、ある仮想トラックに着目すると、この仮想トラックの時間軸上には、ほぼ連続的に楽音の波形データが存在する区間と、実質的に楽音が存在しない区間とが存在する。前者の区間を「リージョン」と呼び、後者の区間を「ミュート区間」と呼ぶ。そこで、本実施例においては、各リージョンについてのみ該リージョンの内容を特定するデータを記録することとし、特にリージョンが存在しない区間は全てミュート区間であることとしている。各仮想トラックデータは、このリージョンの内容を規定する一または複数のリージョンデータ１１２−１，１１２−２，……から構成されている。そして、各リージョンデータは、一または複数のノードデータ１１４−１，１１４−２，……から構成されている。ところで、リージョンデータにおいては、ソング内の各種タイミングが規定されるが、本実施例においてはリージョンデータ内のタイミングは「サンプル点」によって表される。ここで、「サンプル点」とは、「ソングの開始タイミングから、何サンプリング周期経過したタイミングかを表すものである。
【００１３】
これらノードデータは、各々音データ部１０２内における一のクラスタを指標するものであり、各ノードデータがリンクされることによって、対応するリージョンを再生するために必要なクラスタの列が特定されることになる。また、リージョンデータ１１２−１，１１２−２，……には、配下の一連のノードデータのうち、先頭のノードデータと、該先頭のノードデータに対するオフセットと、該リージョンの再生開始タイミングと、該リージョンの再生時間とが記録される。このリージョンデータが再生されるとき、最初に先頭のノードデータに係るクラスタの波形データが再生されるが、このクラスタは必ずしも先頭から再生されるわけではなく、クラスタの先頭からオフセット値によって示されたサンプル数だけ後のサンプルから当該クラスタの再生が開始されることになる。なお、図２(b)においては、このオフセットをノードデータ１１４−１に対する上向きの矢印によって表しておく。
【００１４】
次に、先頭のノードデータの再生が完了すると、この先頭のノードデータにリンクされている他のノードデータが順次連続的に再生されてゆくことになる。ここで、各クラスタの記憶容量は一定であり、各リージョン内においてはリンクされているクラスタの内容が連続的に再生されるから、各ノードデータのリンク状態と、再生開始位置（先頭のノードデータと、該先頭のノードデータに対するオフセットによって特定される位置）と、リージョンの再生時間とが特定されると、このリージョンの再生が終了する再生終了位置が一意に特定される。従って、リージョンの末尾のノードデータに係るクラスタは、必ずしも最後まで再生されるわけではなく、再生終了位置に対応するサンプルまでで再生が終了する。図２(b)においては、この再生終了位置をノードデータ１１４−３に対する下向きの矢印によって表しておく。
なお、説明の簡略化のため、以下では「１６」のトラックで指定されている「１６」の仮想トラックのことを単に「トラック」と呼ぶことにする。
【００１５】
2．実施例のハードウエア構成
2．1．全体構成
次に、本発明の一実施例のハードディスクレコーダの構成を図１を参照し説明する。
図１において２は表示器であり、ユーザに対して各種情報を表示する。４はフェーダであり、複数のトラック毎の録音／再生レベルを設定する。６は操作子群であり、録音／再生開始タイミングを設定するＪＯＧダイアル、録音／再生スタートボタン等の各種操作子によって構成されている。８はＣＰＵであり、フラッシュメモリ１２に格納されたプログラムに基づいて、バス１６を介してハードディスクレコーダ内の各部を制御する。１４はＲＡＭであり、ＣＰＵ８のワークメモリとして使用される。
【００１６】
１８はＰＣインタフェースであり、外部のパーソナルコンピュータに接続され、該パーソナルコンピュータとの間で波形データ等の送受信を行う。２０はミキサであり、フェーダ４の操作量等に対応して、最大で再生「１６」チャンネル、録音「８」チャンネルの音声信号のミキシング処理を実行する。２２は波形入力部であり、外部から供給されたデジタル音声信号をミキサ２０に供給する。２４は波形出力部であり、ミキサ２０から出力された音声信号を外部機器に供給する。２８はＩＤＥインタフェースであり、ハードディスク３０、ＣＤ−ＲＷドライブ３２等の読出しおよび書込みを制御する。
【００１７】
ここで、ハードディスク３０およびＣＤ−ＲＷドライブ３２にセットされるＣＤ−ＲＷには、図２(a)において説明した管理データ領域１００、音データ部１０２、ソング管理データ１０４，１０６，……等が格納される。また、ＩＤＥインタフェース２８内には、少なくともハードディスク３０の「１」クラスタの内容を格納できるバッファメモリ２８ａが設けられている。２６は転送制御部であり、ミキサ２０およびＩＤＥインタフェース２８間の波形データを仲介する。この転送回路２６の内部には、波形データを一時的に記憶するためのバッファメモリ５０が設けられている。１０はＤＭＡ制御部であり、ＣＰＵ８の空き時間においてバス１６を介して、ハードディスクレコーダの各部間のデータ通信を実行する。
【００１８】
2．2．転送回路２６
2．2．1．転送回路２６の回路構成
次に、転送回路２６内のバッファメモリ５０中に設けられた転送バッファ用領域のメモリマップを図４を参照し説明する。
転送バッファ用領域は、「１６」トラックの各々に対応したトラック領域５２−０〜５２−１５から成る。各トラック領域は、さらにバッファ領域Ａ〜Ｆから成る。各バッファ領域は、原則的にはハードディスク３０の「１」クラスタ相当量のメモリ容量を有し、バッファメモリ５０内の連続したアドレス領域上に割り当てられる。そして、このバッファ領域を介してハードディスク３０に対する読出しまたは書込みが行われることになる。
【００１９】
次に、転送回路２６の詳細構成を図３を参照し説明する。図において６０はミュート回路であり、バッファメモリ５０からデータバス６１を介してミキサ２０に供給される音声信号を必要に応じてミュートする（レベルを「０」に設定する）。６２は録音・再生カウンタであり、録音時にミキサ２０から供給されたデータをバッファメモリ５０に書き込む際の書込みアドレスおよび再生時にバッファメモリ５０の内容をミキサ２０に供給する際の読出しアドレスを生成する。本実施例のハードディスクレコーダは、一部のトラックに対して録音を行っている際に同時に他のトラックを再生することができる。従って、録音・再生カウンタ６２はこれらの録音中および再生中のトラックの全てに対して時分割で書込み／読出しアドレスを発生させる。ここで、各トラックのサンプリング周期は同一であるから、各サンプリング周期毎に、録音・再生カウンタ６２によって各トラックの書込み／読出しアドレスが「１」づつインクリメントされることになる。
【００２０】
６６−０〜６６−１５はＣＰＵ８により設定されるトラック対応レジスタ群であり、各トラックに対応して設けられている。トラック対応レジスタ群６６−０の内部において７０は開始位置レジスタであり、バッファ メモリに格納されている波形データの再生または録音を開始するサンプル点である開始アドレスDest_Ａ〜Dest_Ｆが設定される。また７２は終了位置レジスタであり、バッファメモリに格納されている波形データの再生または録音を終了するサンプル点である終了アドレスTar_Ａ〜Tar_Ｆが設定される。７４はミュートレジスタであり、当該トラックを再生している時に、各開始アドレスDest_Ａ〜Dest_Ｆから対応する終了アドレスTar_Ａ〜Tar_Ｆまで区間（区間Ａ〜Ｆ）がそれぞれ「ミュート区間」に対応するものであるか否かを表すミュートフラグMUTE_Ａ〜MUTE_Ｆが設定される。また、バッファ領域Ａ〜Ｆのうち何れかをＸとして、Dest_Ｘ，Tar_ＸおよびMUTE_Ｘを記憶するレジスタを総称して「レジスタセットReg_Ｘ」という。６つのレジスタセットReg_Ａ〜Reg_Ｆは、各トラックの６つのバッファ領域Ａ〜Ｆに一対一で対応付けられ制御される。例えば、各開始アドレスDest_Ａ〜Dest_Ｆ及び終了アドレスTar_Ａ〜Tar_Ｆとしてバッファメモリの任意のアドレスを設定可能であるが、後述する通常再生モードでは６つのレジスタセットReg_Ａ〜Reg_Ｆをバッファ領域Ａ〜Ｆに対応付け、各開始アドレスDest_Ａ〜Dest_Ｆ及び終了アドレスTar_Ａ〜Tar_Ｆには対応するバッファ領域Ａ〜Ｆ内のアドレスを設定するようにしている。そのため、通常再生モードの説明では、トラック対応レジスタに関する制御を、対応するバッファ領域に関する制御として記載する場合がある。
【００２１】
ここで、各バッファ領域Ａ〜Ｆとミュート区間との関係について説明しておく。上述したように、各仮想トラック内で「リージョン」を構成する区間以外の区間は「ミュート区間」と呼ばれ、音データ部１０２内には、かかるミュート区間に対応する波形データは存在しない。しかし、本実施例においては、必要な波形データをバッファ領域Ａ〜Ｆに転送してゆく際、リージョン間のミュート区間が発生したのであれば、かかるミュート区間に対しても「１」クラスタに相当するサンプル数毎に「１」のバッファ領域を割り当て、該ミュート区間が継続する限り、当該バッファ領域を割り当てつつ読み出してゆくこととしている。そこで、各バッファ領域がミュート区間に対応する場合には“１”、ミュート区間に対応しない場合には“０”と設定されるミュートフラグ MUTE_Ａ〜MUTE_Ｆを各バッファ領域毎に設けたのである。このように、本実施例では「リージョン」と「ミュート区間」の何れにおいても、「１」クラスタ以下の波形データを単位にトラック対応レジスタの制御が行われているが、本明細書ではこの波形データの単位を「ブロック」と呼ぶことにする。前述した「リージョン」と「ミュート区間」が存在する仮想トラックの時間軸は、それぞれ、複数の有音ないし無音の「ブロック」のシーケンスと見ることができる。
【００２２】
上述した録音・再生カウンタ６２においては、このミュートレジスタ７４が逐次参照され、再生時の読出しアドレスがミュート区間に対応するバッファ領域に係るアドレスであるか否かが逐次判定されている。そして、現在の読出しアドレスがミュート区間に係るものであると判定されると、ミュート回路６０に対して音声信号をミュートをするように指令が出力され、これによってミュート区間においてはミキサ２０に対する出力音声信号のレベルは常に「０」になる。このように、ミュートフラグMUTE_Ａ〜MUTE_Ｆによって音声信号がミュートされるのであれば、ミュート区間に対応するバッファ領域の内容はどのようなものであっても差し支えない。従って、例えばミュート区間に対応するバッファ領域を「０」で埋めるような処理が不要になり、ミュート区間に対応する処理をきわめて高速化できるのである。
【００２３】
７６はスタート／ストップレジスタであり、対応するトラックの録音／再生を実行するか否かを指定する。スタート／ストップフラグを記憶する。すなわち、該フラグが“１”ならば録音・再生状態、“０”ならば停止状態である。８０はカレントバッファレジスタであり、バッファ領域Ａ〜Ｆのうちカレント点CP の属する領域である「カレント領域」を指定するカレント領域指定値CBuffer を記憶する。すなわち、カレント領域指定値CBuffer は、バッファ領域Ａ〜Ｆに各々対応して「１」〜「６」の数値の何れかに設定されるが、何れのバッファ領域Ａ〜Ｆもカレント領域ではない場合には、カレント領域指定値CBuffer は「０」にされる。
【００２４】
ここで、カレント点CP とは、録音・再生等を開始する基準となるサンプル点であり、操作子群６内のＪＯＧダイアル等によって指定される。カレント点CP 自体は全てのトラックに対して共通の値であるが、実際にこのカレント点CP に対応するサンプルがバッファ領域Ａ〜Ｆの何れに格納されているかは各トラック毎に異なる。そこで、カレント点CP に対応するサンプルが格納されているバッファ領域をトラック毎に独立したカレント領域指定値CBuffer として記憶したものである。７８はカレント点レジスタであり、該カレント領域内における、カレント点CP に対応するサンプルが記憶されているアドレスであるカレント点アドレスCPosition を記憶する。
【００２５】
ところで、録音・再生時においてバッファ領域Ａ〜Ｆ（レジスタセットReg_Ａ〜Reg_Ｆ）のデフォルトの使用順序は「アルファベット順」である。但し、これらバッファ領域のうち、ある領域（レジスタセット）を ＨＥＡＤ、他の領域（レジスタセット）をＴＡＩＬとして指定しておくと、ＴＡＩＬとして指定された領域の録音・再生（レジスタセットに係る録音・再生）が終了した後にＨＥＡＤとして指定された領域の録音・再生（レジスタセットに係る録音・再生）を開始させることができる。例えば、バッファ領域ＡをＨＥＡＤ領域に指定し、バッファ領域ＦをＴＡＩＬ領域に指定しておくと、バッファ領域Ａ〜Ｆが循環的に使用されることになる。８２はＨＥＡＤ領域指定レジスタであり、バッファ領域Ａ〜Ｆのうち何れかを必要に応じてＨＥＡＤ領域として指定する。また、８４はＴＡＩＬ領域指定レジスタであり、バッファ領域Ａ〜Ｆのうち何れかを必要に応じてＴＡＩＬ領域として指定する。なお、レジスタ８２，８４においては「１」〜「６」の数値の何れかによってバッファ領域Ａ〜Ｆを指定し、ＨＥＡＤ領域およびＴＡＩＬ領域を指定しない場合にはレジスタ８２，８４の内容は共に「０」になる。
【００２６】
次に、６４は比較器であり、録音・再生カウンタ６２によってカウントされている読出しアドレスと、終了位置レジスタ７２に記憶されている終了アドレスTar_Ｘ（Ｘはバッファ領域Ａ〜Ｆのうち何れか）とを比較し、両者の一致を検出すると、その旨を録音・再生カウンタ６２に通知する。これにより、録音・再生カウンタ６２においては、次に読み出すべきバッファ領域の開始アドレスDest_Ｙ（Ｙはバッファ領域Ａ〜Ｆのうちバッファ領域Ｘの次に使用される領域を表す）に読出しアドレスが修正され、該読出しアドレスのカウントアップが続行される。また、比較器６４は、読出しアドレスと終了アドレスTar_Ｘとの一致を検出すると、ＣＰＵ８に対して「再生終了割込」という割込を発生させる。
【００２７】
８６は転送カウンタであり、録音時にバッファメモリ５０からＩＤＥインタフェース２８にデータを転送する際の読出しアドレス、および再生時にＩＤＥインタフェース２８から供給されたデータをバッファメモリ５０に転送する際の書込みアドレスを生成する。以下、これらのアドレスを「転送アドレス」という。９０は開始アドレスレジスタであり、該転送アドレスの初期値である開始アドレスSADを格納する。９２はトリガレジスタであり、ＣＰＵ８によってここに “１”が書き込まれると、ハードディスク３０ないしＣＤ−ＲＷドライブ３２との間のデータ転送が開始され、１アドレス分のデータが転送される毎に、転送カウンタ８６によってバッファメモリ５０の転送アドレスがカウントアップされる。９４は終了アドレスレジスタであり、転送アドレスの最終値である終了アドレスEAD を記憶する。８８は比較器であり、転送アドレスの現在値と終了アドレスEAD とを比較し、両者が一致すると転送カウンタ８６の動作を停止させ、トリガレジスタ９２をゼロクリアする。
【００２８】
また、比較器８８においては、転送アドレスとその最終値との一致が検出されると、ＣＰＵ８に対して「転送終了割込」という割込を発生させる。ハードディスク３０は、複数のクラスタのうちの１つをクラスタ番号により指定して、そのクラスタへのアクセス（データ読出ないしデータ書込）を行うようになっており、複数のクラスタへの並列アクセスはできない。そのため、ＩＤＥインターフェース２８との間のデータ転送を行う回路（８６〜９４）は、１セットだけ用意されている。次に、６８はマルチプレクサであり、録音・再生カウンタ６２の出力する書込み／読出しアドレスと、転送カウンタ８６の出力する転送アドレスとを調停する。ここで、録音・再生カウンタ６２はミキサ２０に同期させる必要があるため、そのカウントアップはサンプリング周期毎に実行する必要がある。一方、転送カウンタ８６の動作は特にミキサ２０に同期させる必要はない。従って、録音・再生カウンタ６２によるバッファメモリ５０に対するアクセスが優先され、転送カウンタ８６によるアクセスは、その空き時間において実行されることになる。このようにして、ＩＤＥインタフェース２８に対するデータの入出力と、ミキサ２０に対するデータの入出力とは時分割多重され並列に実行されることになる。
【００２９】
2．2．2．トラック対応レジスタ群の設定例
次に、トラック対応レジスタ群６６−０内における各種レジスタの使用例を図５を参照し説明する。まず、ＨＥＡＤ領域指定レジスタ８２およびＴＡＩＬ領域指定レジスタ８４が共に「０」（領域無指定）に設定されると、図５(a)に示すように、各バッファ領域Ａ〜Ｆは録音・再生のためにアルファベット順に「１回」づつ使用されることになる。また、図５(b)に示すようにＴＡＩＬ領域としてバッファ領域Ｆが指定されＨＥＡＤ領域としてバッファ領域Ａが指定された場合は、バッファ領域Ｆの使用が終了した後に再びバッファ領域Ａが使用される。すなわち、各バッファ領域Ａ〜Ｆは、繰り返し循環的に使用されることになる。
【００３０】
次に、図５(c)に示すようにＨＥＡＤ領域としてバッファ領域Ｂが指定され、ＴＡＩＬ領域としてバッファ領域Ｆが指定されると、バッファ領域Ａは最初に「１回」だけ使用され、その後はバッファ領域Ｂ〜Ｆが繰り返し使用されることになる。また、図５(d)に示すようにＨＥＡＤ領域としてバッファ領域Ｂが指定され、ＴＡＩＬ領域としてバッファ領域Ｅが指定されると、バッファ領域Ａは最初に「１回」だけ使用され、その後はバッファ領域Ｂ〜Ｅが繰り返し使用されることになる。
【００３１】
上述した使用態様のうち、図５(b)に示すものが最も普通の使用態様であり、バッファ領域Ａ〜Ｆの全体のメモリ容量を最も有効に活用しつつ、波形データの再生ないし録音のためのハードディスク３０とミキサ２０との間での波形データ 転送のバッファリングができる。また、図５(c)に示した使用態様は、ポン出し再生に用いると便利である。すなわち、ポン出しされる可能性がある複数の波形データのうち先頭部分の内容を予めバッファメモリ５０内の各トラックのバッファ領域Ａ〜Ｆとして確保されている領域以外の領域に転送しておき、何れかの波形データについて再生指示を受信すると、指示された波形データの先頭部分の開始アドレスと終了アドレスを開始アドレスDest_Ａ及び終了アドレスTar_Ａとして何れかのトラック対応レジスタに設定することにより、再生指示に遅れることなく該波形データの再生を開始することができ、その後はバッファ領域Ｂ〜Ｆを転送バッファとして活用してハードディスク３０中の該先頭部分に後続する波形データの再生が行える。
【００３２】
次に、開始アドレスDest_Ａ〜Dest_Ｆおよび終了アドレスTar_Ａ〜Tar_Ｆの設定例を図５(e)を参照し説明する。まず、図５(e)の各バッファ領域Ａ〜Ｆ中において、実際に波形データが再生される範囲（再生範囲）にはハッチングを付している。この再生範囲以外の範囲を「非再生範囲」という。バッファ領域Ａについては、その全範囲が再生範囲であるため、開始アドレスDest_Ａはバッファ領域Ａの先頭アドレスに設定され、終了アドレスTar_Ａはバッファ領域Ａの最終アドレスに設定される。また、バッファ領域Ｂについては、該領域の先頭から途中までが再生範囲であるため、開始アドレスDest_Ｂはバッファ領域Ｂの先頭アドレスに、終了アドレスTar_Ｂはバッファ領域Ｂの途中のアドレスに各々設定される。
【００３３】
また、バッファ領域Ｃについては、該領域の途中から最終アドレスまでが再生範囲であるため、開始アドレスDest_Ｃはバッファ領域Ｃの途中のアドレスに、終了アドレスTar_Ｃはバッファ領域Ｃの最終アドレスに、各々設定される。また、バッファ領域Ｄ，Ｆの再生範囲はバッファ領域Ａと同様であり、バッファ領域Ｅの再生範囲はバッファ領域Ｂと同様であるため、開始アドレスDest_Ｄ〜Dest_Ｆおよび終了アドレスTar_Ｄ〜Tar_Ｆも、これらバッファ領域Ａ，Ｂのものと同様に設定されることになる。
【００３４】
ここで、カレント領域指定値CBuffer として「バッファ領域Ａ」が指定され、カレント点アドレスCPosition として開始アドレスDest_Ａが指定され、スタート／ストップレジスタ７６が“１”に設定されると、録音・再生カウンタ６２においては、このカレント点アドレスCPosition （＝Dest_Ａ）を初期値として、読出しアドレスのカウントアップが開始される。これにより、開始アドレスDest_Ａ〜終了アドレスTar_Ａに至るまで、バッファ領域Ａの内容が順次読み出され、ミキサ２０に供給されることになる。ここで、読出しアドレスが終了アドレスTar_Ａに一致すると、その旨が録音・再生カウンタ６２に通知される。これにより、録音・再生カウンタ６２においては、次に読み出すべきバッファ領域の開始アドレスDest_Ｂに読出しアドレスが設定されることになる。
【００３５】
但し、本実施例においては、各バッファ領域Ａ〜Ｆには連続したアドレスが割り当てられるから、バッファ領域Ｂの開始アドレスDest_Ｂは、バッファ領域Ａの終了アドレスTar_Ａの次のアドレスに他ならないものである。従って、読出しアドレスがバッファ領域Ａからバッファ領域Ｂに遷移してゆく過程においては、読出しアドレスは単にサンプリング周期毎に「１」づつインクリメントされているのと同様の値になる。その後に読出しアドレスが終了アドレスTar_Ｂになると、次のサンプリング周期においては、該読出しアドレスは開始アドレスDest_Ｃに変更される。これにより、バッファ領域Ｂ，Ｃの非再生範囲がジャンプされ、これら領域の再生範囲のみが再生されることが解る。
【００３６】
以後、同様にバッファ領域Ｄ〜Ｆについてもこれら領域の再生範囲のみが再生される。そして、図示のようにバッファ領域ＦがＴＡＩＬ領域、バッファ領域ＡがＨＥＡＤ領域に設定されていたのであれば、読出しアドレスがバッファ領域Ｆの終了アドレスTar_Ｆに達した次のサンプリング周期においては、該読出しアドレスは再び開始アドレスDest_Ａに設定されることになる。但し、最初にバッファ領域Ａが読み出された後、バッファ領域Ａが再び読み出される前に、バッファ領域Ａの内容は次に再生すべき波形データに応じて更新され、開始アドレスDest_Ａ、終了アドレスTar_Ａもこの新たな波形データに応じた値に設定されるから、その際の開始アドレスDest_Ａは、当然、図示の状態（バッファ領域Ａの先頭）からは異なる場合もある。
【００３７】
3．実施例の動作
3．1．通常再生モード
3．1．1．動作の概要
次に、本実施例における動作の概要を説明する。まず、本実施例のハードディスクレコーダには、「通常再生モード」および「ナッジモード」という動作モードがある。そこで、最初に通常再生モードにおける動作の概要を図６を参照し説明する。図６(a)はある仮想トラックの構成を示す図である。該仮想トラックは第１〜第３リージョンから構成されている。そして、第１リージョンに係る波形データはブロックＢＬ１〜ＢＬ５から構成され、第２リージョンに係る波形データはブロックＢＬ６〜ＢＬ８から構成され、第３リージョンに係る波形データはブロックをＢＬ９〜ＢＬ１２から構成されている。リージョンでの「ブロック」 は、各クラスタに記憶されている波形データのことを示す。各クラスタの内容は必ずしも全て再生されるわけではないため、各「ブロック」のデータ量はクラスタ毎に異なることになる。
【００３８】
また、本実施例では、ミュート区間に対しても「ブロック」（無音ブロック）が存在することとしているので、ミュート区間のブロックについて説明しておく。まず、「１」クラスタに格納可能な波形データの最大サンプル数を「クラスタ容量Scr 」とし、あるミュート区間の長さ（サンプル数）をSmt とする。該ミュート区間長Smt をクラスタ容量Scr で除算すると「商」と「余り」が得られるが、この「商」に「１」を加算した値が、該ミュート区間に割り当てられる無音ブロック数になる。換言すれば、楽曲のカレント点CP が進行すると、ミュート区間に対応するこれらの無音ブロックがバッファ領域Ａ〜Ｆに循環的に割り当てられてゆくことになる。
【００３９】
ここで、各無音ブロックの長さは、最後のブロックを除いてクラスタ容量Scr に固定されている。すなわち、これらのブロックがバッファ領域Ｘに割り当てられると、開始アドレスDest_Ｘおよび終了アドレスTar_Ｘは常にバッファ領域Ｘの先頭および最終アドレスになる。そして、最後のブロックの長さは、「Smt／Scr」の「余り」に等しい。換言すれば、この最後のブロックがバッファ領域Ｘに割り当てられると、その開始アドレスDest_Ｘはバッファ領域Ｘの先頭アドレスになり、終了アドレスTar_Ｘは「余り」のサンプル数に応じた値に設定されることになる。
【００４０】
なお、ミュート区間においては楽音信号が生成されないため、そもそも「ブロック」を規定する必要は必ずしもないと考えることもできるが、カレント点CP に対応するブロックがリージョンであるのかミュート区間であるのかを問わず録音・再生カウンタ６２に対する制御内容を統一するために、リージョンの場合と同様に、ミュート区間のサンプル数に応じてブロックを割り当て、バッファ領域Ａ〜Ｆを確保し、開始アドレスDest_Ａ〜Dest_Ｆおよび終了アドレスTar_Ａ〜Tar_Ｆも設定することとしたものである。
【００４１】
ここで、ソング内のあるタイミングにユーザの操作に応じてカレント点CP が設定されたとする。図６(a)の例においては、このカレント点 CP は第１リージョン内のブロックＢＬ３に属している。かかる場合においては、最初にブロックＢＬ３の内容があるバッファ領域（例えばバッファ領域Ａ）に読み込まれ、引き続いてブロックＢＬ３の次のブロックＢＬ４が、次の領域（同、領域Ｂ）に読み込まれる（図６(b)）。この先頭の２ブロックが読み込まれるまで、当該仮想トラックの再生を開始することはできないので、そのためのハードディスク３０へのアクセス要求は優先的に実行される。
【００４２】
引き続いて、より優先されるハードディスク３０へのアクセス要求が他にないとき、次のブロックＢＬ５が読み込まれる。この優先制御に関しては、後で詳細に説明する。その期間内に、ＪＯＧダイアルがユーザによって操作され続けている場合は、図６(c)に示すようにカレント点CP は若干移動している。ここで、ブロックＢＬ５は第１リージョンの終了ブロックであり、第１リージョンと第２リージョンとの間にはミュート区間が存在する。かかる場合には、ブロックＢＬ５の次のブロックは、無音ブロックであり、図６(d)に示すように、当該無音ブロックに対して次の領域が割り当てられる。このときも、ＪＯＧダイアルの操作は続いており、カレント点CP がブロックＢＬ４に移ったとする。すると、先にブロックＢＬ３が格納されていたバッファ領域は解放され、空きバッファ領域になる。
【００４３】
これらの空きバッファ領域に続くブロックＢＬ７，ＢＬ８が読み込まれた状態を図６(e)に示す。この状態で当該トラックにおける空きバッファ数は「０」になる。その後、さらにカレント点CP がブロックＢＬ５に移ったとすると、ブロックＢＬ４が格納されていた領域が解放される（図６(f)）。ブロックＢＬ８は第２リージョンの終了ブロックであり、第２リージョンと第３リージョンとの間にはミュート区間が存在するため、ブロックＢＬ８の次のブロックは、無音ブロックになる（図６(g)）。
【００４４】
以上のようにして、ユーザがＪＯＧダイアルを操作してカレント点CP を移動させると、カレント点CPを含むブロック（カレントブロック）を先頭とする複数のブロックの波形データが、その優先度に応じてバッファ領域Ａ〜Ｆに順次読み込まれる。そして、カレント点CP を所望の位置にセットした後にスタートボタンを押下すると、当該カレント点CP に対応する位置からソングの再生が開始される。ソングの再生が開始された後は、カレント点CP はサンプリング周期毎に「１」づつインクリメントされ、対応するサンプル点が読み出され、楽音信号として出力されてゆくことになる。そして、このカレント点CP の変遷に伴ってバッファ領域の内容が更新されるが、その動作はＪＯＧダイアルの操作によってカレント点CP が更新される場合と同様である。
【００４５】
3．1．2．カレント点指定イベント処理
以下、通常再生モードにおいて各種イベントが発生したときの動作の詳細を説明する。
まず、ユーザが再生モード操作子群６内のＪＯＧダイアルを操作した場合には、その操作前後の操作量の差に応じてカレント点CP が変動する。また、ユーザは、テンキーボード等によってカレント点CP （絶対時刻）を指定することもできる。かかるイベントが発生すると、図７(a)に示すカレント点指定イベントルーチンが起動される。図７(a)において処理がステップＳＰ２に進むと、ソング管理データに基づいて、同時に再生すべき各トラックの、当該カレント点CP に対応するブロックの波形データを記憶するクラスタのクラスタ番号と、該クラスタ内の該ブロックの開始アドレスおよび終了アドレスと、当該カレント点CPに対応するアドレスとが確定される。
【００４６】
次に、処理がステップＳＰ４に進むと、該クラスタ番号に基づいて、各トラックのカレント点CP の属するブロックと、その次のブロックとに各々対応する波形データを含むクラスタを、ハードディスク３０から各トラックに係るバッファ領域Ａ〜Ｆ内の連続した「２」領域に転送するように、転送処理が開始される。そして、これら「２」領域に対する開始アドレスDest_Ｘおよび終了アドレスTar_Ｘとが開始位置レジスタ７０および終了位置レジスタ７２に記憶され、MUTE_X が“０”に設定される（有音の再生設定）。但し、カレント点CP の属するブロック、またはその次のブロックが無音ブロックである場合は、該無音ブロックのサイズに応じた開始アドレスDest_Ｘと終了アドレス Tar_Ｘ、および、“１”のミュートフラグMUTE_Ｘが設定され、当該バッファ領域Ｘには特に波形データは読み込まれない（無音の再生設定）。
【００４７】
また、ステップＳＰ４においては、「空きバッファ数RB 」という値が設定される。空きバッファ数RB とは、ハードディスク３０から新たに波形データを転送しても差し支えないバッファ領域の数である。例えば、あるトラックに対して図５(b)に示したようにＨＥＡＤ領域およびＴＡＩＬ領域が設定された場合には、使用できるバッファ領域の数は全体で「６」になる。しかし、このうち「２」領域についてはステップＳＰ４において波形データが転送され有音の再生設定が行われ、または無音の再生設定が行われたから、空きバッファ数RB は「４」になる。
【００４８】
次に、処理がステップＳＰ６に進むと、後述する転送制御処理ルーチン（図８）が呼び出される。このルーチンの処理内容について詳細は後述するが、このルーチンによって各トラックのバッファ領域Ａ〜Ｆのうち空いているものに対して、ブロックが順次割り当てられ、必要な場合にはハードディスク３０から波形データが順次転送される。
【００４９】
3．1．3．再生開始指示イベント処理
カレント点CP が指定された後、ユーザが操作子群６内のスタートボタンを操作すると、図７(b)に示す再生開始イベント処理ルーチンが起動される。図において処理がステップＳＰ１０に進むと、同時に再生すべき各トラックに対してそれぞれカレントと次のブロックから成る「２」ブロックの波形データが「設定済み」であるか否かが判定される。「設定済み」とは、当該ブロックがリージョン内にあり、ソング管理データに基づいてハードディスクから実際に波形データが読み込まれ、有音の再生設定が行われた場合と、当該ブロックがミュート区間にあり、ソング管理データに基づいてあるバッファ領域Ｘに対して無音の再生設定が行われた場合とをいう。ここで「ＮＯ」と判定されると、処理はステップＳＰ１２に進み、各トラックに対して少なくとも「２」ブロックの波形データが設定されるまで処理が待機される。
【００５０】
なお、本ルーチンは、先にカレント点指定イベントルーチン（図７(a)）が起動された後に起動されるものであるから、上述したステップＳＰ４により、各トラック毎に最低「２」のバッファ領域に波形データが必ず設定されることになる。しかし、上記ステップＳＰ４は転送処理を「開始」させるものであるから、例えばカレント点CP が指定された直後にスタートボタンが押下された場合には、未だこれらの波形データが設定されていない場合も考えられる。このため、これら波形データの設定が完了するまで処理を待機させることにしたのである。
【００５１】
次に、処理がステップＳＰ１４に進むと、各トラックのカレントクラスタが設定済みのバッファ領域および同カレントクラスタ内のカレント点CPに対応するアドレスに応じてカレント領域指定値CBuffer およびカレント点アドレスCPosition がカレントバッファレジスタ８０およびカレント点レジスタ７８に各々設定される。次に、処理がステップＳＰ１６に進むと、同時に再生される各トラックに対して、再生指示が行われる。すなわち、当該トラックのスタート／ストップレジスタ７６に対して“１”が書き込まれ、録音・再生カウンタ６２におけるカウント動作が開始される。これにより、以後は各トラックのバッファ領域Ａ〜Ｆの内容が読み出され、ミュート回路６０を介してミキサ２０に波形データが供給されてゆくことになる。
【００５２】
3．1．4．再生終了割込処理
波形データの再生が開始されると、各トラックのバッファ領域Ａ〜Ｆの内容が読み出されるが、このうち一のトラックにおいてバッファ領域Ｘの読出しアドレスと終了アドレスTar_Ｘとが一致すると、ＣＰＵ８に対して再生終了割込が発生し、図７(c)に示す再生終了割込処理ルーチンが起動される。図において処理がステップＳＰ４０に進むと、当該トラックにおける空きバッファ数RB が「１」だけインクリメントされる。次に、処理がステップＳＰ４２に進むと、ＩＤＥインタフェース２８とバッファメモリ５０との間で読出しまたは書込みのためにデータが転送中か否かが判定される。ここで「ＹＥＳ」と判定されると、本ルーチンの処理は直ちに終了する。一方、「ＮＯ」（転送中ではない）と判定されると、後述する転送制御処理ルーチン（図８）が呼び出され、バッファ領域Ａ〜Ｆに対して必要に応じて波形データが転送される。
【００５３】
3．1．5．転送制御処理
次に、図８を参照し、上記ステップＳＰ６，ＳＰ４４等において呼び出される転送制御処理ルーチンの処理について説明する。
図において処理がステップＳＰ２０に進むと、再生中の各トラックについて、転送回路２６内において再生設定済みのブロックの波形データのサンプルのうち未だ再生されていないサンプルの数である残存サンプル数が算出される。
【００５４】
次に、処理がステップＳＰ２２に進むと、空きバッファ数RB が「１」以上であるトラックが存在するか否か、すなわち、再生準備すべきブロックがあるか否かが判定される。ここで「ＮＯ」と判定されると、波形データを転送可能なバッファ領域は存在しないことになるから、本ルーチンの処理は直ちに終了する。一方、ステップＳＰ２２において「ＹＥＳ」と判定されると処理はステップＳＰ２４に進み、空きバッファ数RB が「１」以上であるトラックのうち残存サンプル数が最小であるトラック（転送対象トラック）が検出される。すなわち、残存サンプル数が少ないトラックの、ブロック準備要求が優先される。ここで、次のブロックの準備のためにハードディスク３０へのアクセスが必要なトラックが複数あれば、その内の残存サンプル数が少ないトラックのブロック準備が優先的に処理され、そのハードディスク３０へのアクセスが行われる。
【００５５】
次に、処理がステップＳＰ２６に進むと、転送対象トラックの空きバッファ数RB が「１」だけデクリメントされる。次に、処理がステップＳＰ２８に進むと、ソング管理データが参照され、転送対象トラックにおける次のブロック（再生設定済みの最後のブロックの次のブロック）は無音ブロックであるか否かが判定される。ここで「ＹＥＳ」と判定されると、処理はステップＳＰ３０に進み、次のバッファ領域Ｘに係るミュートフラグMUTE_Ｘが“１”に設定され、該ブロックの長さに応じて開始アドレスDest_Ｘおよび終了アドレス Tar_Ｘが設定される。次に、処理がステップＳＰ３２に進むと、当該トラックの残存サンプル数が更新される。すなわち、新たに追加されたブロックの長さが残存サンプル数に加算される。
【００５６】
ところで、上記ステップＳＰ３０，ＳＰ３２において無音ブロックを設定する処理は、ハードディスク３０の動作には関係しないために瞬時に終了する。そこで、かかる場合には処理はステップＳＰ２２に戻り、再び同ステップＳＰ２２以下の処理が実行されることになる。そして、無音ブロックではないブロックの設定が必要になった場合、すなわちステップＳＰ２８において「ＮＯ」と判定された場合には、処理はステップＳＰ３４に進む。ここでは、ソング管理データに基づいて、該次のブロックの波形データを含むクラスタのクラスタ番号が確定され、該クラスタを転送するように、転送回路２６およびＩＤＥインタフェース２８に対して指示が送信される。
【００５７】
具体的には、ＩＤＥインタフェース２８に対しては、転送すべきクラスタの番号が通知され、開始アドレスレジスタ９０には転送先のバッファ領域Ｘの先頭アドレスが開始アドレスSADとして開始アドレスレジスタ９０に格納され、バッファ領域Ｘの最終アドレスが終了アドレスEAD として終了アドレスレジスタ９４に格納された後、トリガレジスタ９２に“１”が書き込まれ、かつ、ＩＤＥインターフェースに読み出しの開始が指示される。また、ソング管理データに基づいて、該バッファ領域Ｘに転送されるクラスタのうち実際にブロックを構成する部分に基づいて、開始アドレスDest_Ｘおよび終了アドレスTar_Ｘが設定される。以上のステップにより、本ルーチンの処理が終了する。
【００５８】
本ルーチンが終了した後、ＩＤＥインタフェース２８においては、指定されたクラスタの頭出し（ヘッドシーク＆ディスク回転待ち）が行われ、該クラスタの内容が読み出しが開始される。順次読み出されたデータはＩＤＥインタフェース２８内のバッファメモリ（ＦＩＦＯ）２８ａに格納され、ＩＤＥインタフェース２８から転送回路２６に対してその旨の信号が送信される。転送回路２６は、該信号に応じて、該バッファメモリ２８ａから読み出されたデータを１アドレス分ずつ順次受け取り、バッファメモリ５０の転送カウンタ８６の示す転送アドレスに書き込むとともに、転送カウンタ８６にその転送アドレスを“１”ずつカウントアップさせる。このようにして、 ＩＤＥインタフェース２８を介して、ハードディスク３０からバッファ領域Ｘに対して、上記クラスタの波形データが転送されることになる。
【００５９】
3．1．6．転送終了割込処理
上記転送制御処理ルーチン（図８）のステップＳＰ３４で開始される、ないし、カレント点指定イベントルーチン（図７(a)）のステップＳＰ４で実行されるデータ転送では、ハードディスク３０における何れかのクラスタのデータが、ＩＤＥインタフェース２８により徐々にバッファメモリ２８ａに読み出され、転送回路２６によって、徐々にバッファメモリ２８ａからバッファメモリ５０に転送される。その際、転送アドレスのカウントアップが行われるが、この転送アドレスが終了アドレスレジスタ９４に格納された終了アドレスEAD に一致すると、ＣＰＵ８において「転送終了割込」という割込が発生し、図７(d)に示す転送終了割込ルーチンが起動される。
【００６０】
図において処理がステップＳＰ５０に進むと、次に転送すべきクラスタが決定されているか否かが判定される。すなわち、初回に上記ステップＳＰ４が実行されると、各トラック毎に「２」ブロックの波形データの転送処理が開始されるから、これらのブロックがリージョン内のブロックである場合には、対応するクラスタを転送すべき旨がステップＳＰ４において決定されることになる。従って、これらのクラスタが全て転送される前に転送終了割込が発生したとしても、ステップＳＰ５０において「ＹＥＳ」と判定され、本ルーチンは直ちに終了する。一方、ステップＳＰ５０において「ＮＯ」と判定されると、処理はステップＳＰ５２に進む。ここでは、上述した転送制御処理ルーチン（図８）が呼び出され、空きバッファ領域が存在するとともに残存サンプル数が最小であるトラックに対して、次の波形データが転送され、あるいは無音ブロックが設定されることになる。このように、カレント点CPの設定後の、各トラックのカレントブロックとその次のブロックの準備に係るハードディスク３０のアクセス（クラスタの転送）は、図８の転送制御処理に係るハードディスク３０のアクセス（クラスタの転送）より優先的に行われる。
【００６１】
3．2．ナッジモード
3．2．1．動作の概要
次に、本実施例のナッジモードにおける動作の概要を図９を参照し説明する。
まず、「ナッジモード」とは、ソング管理データの１つのトラック上の短い期間（例えば２５msec〜８００msec）であるループ区間を繰り返してループ再生することをいう。図９(a)に示すように、ナッジの種別には前方ナッジと後方ナッジの「２」種類がある。ここで、後方ナッジとは時間軸上でカレント点CP よりも後方にループ区間Ｐを置くものであり、前方ナッジとは時間軸上でカレント点CP よりも前方にループ区間Ｐを置くものである。ここで、前方ナッジは波形の立上がり箇所を検出するために用いられ、後方ナッジは波形の立下がり箇所を検出するために用いられる。図９において、ループ区間Ｐの上部の矢印が付与された弧は、波形データの再生が当該区間の終わりまで進行したら、続いて当該区間の先頭から再生が行われること、すなわち、ループ再生が行われることを示している。
【００６２】
例えば、波形の立上がり箇所を検出する場合には、波形の立上がり箇所からやや前方にカレント点CP を設定し、ＪＯＧダイアルを操作してカレント点CP を徐々に後方に移動させるとよい。その際、ナッジ再生された音声信号は最初は無音であるが、カレント点CP が立上がり箇所に達すると、音が発生するから、音が発生し始めるカレント点CP が波形の立上がり箇所ということになる。なお、ループ区間Ｐの長さは操作子群６において、「２５msec〜８００msec」の範囲内でユーザが任意に設定することができる。
【００６３】
次に、ナッジモードにおけるバッファメモリ５０の使用方法について説明しておく。上述した通常再生モードにおいては、各トラック領域５２−０〜５２−１５はバッファ領域Ａ〜Ｆに分割されたが、ナッジモードにおいてはトラック領域５２−Ｋ（但し、Ｋはトラック番号）は一体のバッファ領域として使用され、該トラック領域５２−Ｋに格納されるブロックは、相互に隙間なく詰められる。さらに、通常再生モードにおいては、無音ブロックを再生する際にはミュート回路６０によって波形データがミュートされるためにバッファ領域の内容は不定であったが、ナッジモードにおいては無音ブロックに係るバッファ領域には常に「０」が格納され、ミュート回路６０が音声信号をミュートすることはない。従って、ナッジモードにおいてはミュートレジスタ７４も使用されない（ミュートフラグには、常時、“０”が設定される）。
【００６４】
また、動作モードが通常再生モードからナッジモードに変更されると、通常再生モードが実行されていた際にカレント点CP が属するブロックおよびその周辺のブロックは既にトラック領域５２−Ｋに転送されていたはずであるが、上述したように通常再生モードとナッジモードとではトラック領域５２−Ｋの使用方法が異なるため、通常再生モードにおいて設定されたブロックは全て無効なものとされ、ナッジモードに応じた状態でトラック領域５２−Ｋ内に各ブロックが設定されることになる。
【００６５】
次に、バッファメモリ５０にブロックを設定する動作の概要を図１０を参照し説明する。まず、図１０(a)においては、上述した図６(a)と同一のトラックにおいて、カレント点CP がブロックＢＬ５に置かれている。この状態で動作モードがナッジモードに変更されたとする。ここで、ナッジ種別は後方ナッジであり、ループ区間ＰはブロックＢＬ５とその直後の無音ブロックＺとに渡ることとする。かかる場合には、まずループ区間Ｐが属する全てのブロック（図示の例ではブロックＢＬ５とその直後の無音ブロックＺ）がトラック領域５２−Ｋ上に設定される。これにより、ループ区間Ｐを繰り返し読み出すことが可能になる。このように、ブロックが設定されたサンプル点の範囲を「ブロック設定済範囲」といい、その先頭サンプル点を設定済先頭点HP、最終サンプル点を設定済最終点TP という。また、ループ区間Ｐの先頭サンプル点をループ開始点LS、最終サンプル点をループ終了点LE という。そして、ナッジ種別に応じて、ループ開始点LS またはループ終了点LE のうち一方がカレント点CP に一致することになる。
【００６６】
次に、設定済先頭点HP および設定済最終点TP のうちループ区間Ｐの両端から見て、サンプル数の余裕の無い側（図示の例では設定済先頭点HP）に対して、連続するブロックであるブロックＢＬ４が追加される。図１０(b)は、このブロックＢＬ４が追加された場合の状態を示す。その後、図１０(c)〜(e)に示すように、設定済最終点TP および設定済先頭点HP 側に対してブロックＢＬ６，ＢＬ３，ＢＬ７が交互に追加されてゆくと、ループ区間Ｐから見て前方および後方に対してサンプル数の充分な余裕を持った状態でブロックが設定されることが解る。ここで、図１０(c)〜(e)に示すように、ループ区間Ｐが後方に移動してゆくと、後方におけるサンプル数の余裕がなくなり、前方側に過大な余裕ができる。かかる場合には、前方側の最外縁のブロックＢＬ３が解放される。これにより、トラック領域５２−Ｋにおける空きサンプル数が多くなる。そこで、図１０(g)に示すように、後方側に引き続くブロックＢＬ８がトラック領域５２−Ｋに転送されるのである。
【００６７】
次に、図９(b)を参照し、これら複数のブロックが実際にトラック領域５２−Ｋに設定された状態を説明する。ナッジモードにおいてはトラック領域５２−Ｋはリングバッファとして用いられる。図９(b-1)において、アドレスAD(HP)は設定済先頭点HP に係るサンプルを記憶したアドレスである。ここで、設定されたブロックが全てクラスタ容量Scr を有するものとすると、図示のようにトラック領域５２−Ｋには「６」のブロックが格納され、アドレスAD(HP)より一つ前のアドレスが設定済最終点TP に係るアドレスAD(TP)になる。
【００６８】
また、ナッジモードにおいては、ループ区間を表すために、トラック対応レジスタ群６６−ＫのレジスタセットReg_ＡおよびReg_Ｂが使用され、残りのレジスタセットReg_Ｃ〜Reg_Ｆは使用されない。ループ区間Ｐが連続したメモリ領域内に設定される場合には、レジスタセットReg_ＡないしReg_Ｂの何れか一方、例えばレジスタセットReg_ＡがHEADかつTAILに指定され、そこに設定された開始アドレスDest_Ａから終了アドレス Tar_Ａまでの範囲Ａが繰り返し再生される。そして、ループ区間Ｐのループ開始点LS に係るアドレスAD(LS)は開始位置レジスタ７０内に開始アドレスDest_Ａとして格納され、ループ終了点LE に係るアドレスAD(LE)は終了アドレス Tar_Ａとして終了位置レジスタ７２に格納される。これにより、ループ区間Ｐが繰り返し再生されることになる。なお、HEADかつTAILに設定されなかった側のレジスタセットReg_Ｂは再生に使用されないので、開始アドレスDest_Ｂおよび終了アドレス Tar_Ｂはどのように設定されていてもよい。
【００６９】
一方、トラック領域５２−Ｋがリングバッファとして使用されるために、ループ区間がトラック領域５２−Ｋの先頭アドレスおよび最終アドレスを跨いで設定される場合がある。例えば、図９(b-2)に示すように、ループ区間が区間Ｐ，Ｑに分割される場合がある。かかる場合は、レジスタセットReg_ＡがHEADに設定されるとともに、レジスタセットReg_ＢがTAILに指定され、そこに設定された開始アドレスDest_Ａから終了アドレス Tar_Ａまでの範囲Ａと開始アドレスDest_Bから終了アドレス Tar_Bまでの範囲Ｂとが交互に再生される。そして、ループ開始点LS に係るアドレスAD(LS)が開始アドレス Dest_Ａとして、またトラック領域５２−Ｋの先頭アドレスが開始アドレスDest_Ｂとして、各々開始位置レジスタ７０内に格納される。また、トラック領域５２−Ｋの最終アドレスが終了アドレスTar_Ａとして、またループ終了点LE に係るアドレスAD(LE)は終了アドレス Tar_Ｂとして、各々終了位置レジスタ７２に格納される。これにより、区間Ｐ，Ｑの内容が交互に再生されることになる。
また、ループ区間が移動して、図９（b-1）から図９(b-2)に変化する場合は、何れか一方のレジスタセットをHEADかつTAILに指定する状態から、レジスタセットReg_ＡをHEADに、かつレジスタセットReg_ＢをTAILに指定する状態に変化させ、逆に、図９（b-2）から図９(b-1)に変化する場合は、レジスタセットReg_ＡをHEADに、かつレジスタセットReg_ＢをTAILに指定する状態から、何れか一方のレジスタセットをHEADかつTAILに指定する状態に変化させればよい。このようにして、２つのレジスタセットReg_ＡおよびReg_Ｂを使用することにより、リングバッファとして使用されるトラック領域５２−Ｋにおいてループ区間がどのように移動しても、そのループ範囲を適切にループ再生することができる。
【００７０】
また、各ブロックのサンプル数はクラスタ容量Scr に必ずしも一致しないため、一般的にはトラック領域５２−Ｋにブロックを設定してゆくと、図９(b-3)に示すように、空きサンプル数Sr （但しSr ＜Scr ）の空き領域（ハッチングを施していない部分）が発生する。また、各ブロックについても、必ずしもトラック領域５２−Ｋ内に連続的に設定されるわけではなく、図示のブロックＢＬ２のようにトラック領域５２−Ｋの終端部分と先頭部分とに分割される場合も発生し得る。ここで、ループ区間（LS, LE）の中心にあるループ中心点LC が設定済先頭点HP に近接してゆき、所定のブロック解放条件を満たすと（例えば、両者の差がクラスタ容量Scr の「２」倍未満になると）、設定済最終点TP 側の最外縁のブロックＢＬ７が解放される。そして、解放した結果、空きサンプル数Sr がクラスタ容量Scr 以上になると、ブロックＢＬ２に隣接するブロックＢＬ１が追加されることになる。
【００７１】
3．2．2．ナッジ開始イベント
操作子群６において、動作モードを通常再生モードからナッジモードに変更する操作が行われると、図１１(a)に示すナッジ開始イベントルーチンが起動される。
図において処理がステップＳＰ１０２に進むと、所定の初期設定が行われる。なお、動作モードがナッジモードに変更される前の通常再生モードにおいては、トラック領域５２−Ｋには種々の波形データが適宜記憶されているが、これら通常再生モードにおいて記憶されていた波形データはナッジモードに変更された際に全て無視される。すなわち、これらの波形データは、後述する各処理によって、必要に応じてハードディスク３０から再転送されることになる。
【００７２】
次に、処理がステップＳＰ１０４に進むと、カレント点CP と、ナッジ種別と、ループ区間長LL とに基づいて、ソング管理データの時間軸上のループ区間（LS, LE）、すなわちループ開始点LS とループ終了点LE とが決定される。すなわち、ナッジ種別が「前方ナッジ」であった場合には、「ループ開始点LS ＝ カレント点CP−ループ区間長LL 」、「ループ終了点LE ＝ カレント点CP」によってループ区間（LS, LE）が決定される一方、ナッジ種別が「後方ナッジ」であった場合には、「ループ開始点LS ＝ カレント点CP」および「ループ終了点LE ＝カレント点CP＋ループ区間長LL 」によってループ区間（LS, LE）が決定されることになる。
【００７３】
次に、処理がステップＳＰ１０６に進むと、ソング管理データに基づいて、ループ区間（LS, LE）を含む全てのブロックが確定され、バッファメモリ５０のトラック領域５２−Ｋに読み込まれる。すなわち、これらのブロックのうちリージョンを構成するブロックについては、ハードディスク３０から各クラスタ毎の波形データが読み込まれ、これら波形データのうち非再生範囲は削除され、再生範囲のみが時間軸上で前方向に詰められることになる。また、これらのブロックのうちミュート区間を構成するブロックにおいては、該ブロックの長さだけトラック領域５２−Ｋに「０」が書き込まれることになる。次に、処理がステップＳＰ１０８に進むと、トラック対応レジスタ群６６−Ｋに対して必要な設定が行われ、開始アドレス Dest_Ａ，Dest_Ｂ、終了アドレスTar_Ａ，Tar_Ｂ、ＨＥＡＤ領域およびＴＡＩＬ領域がループ区間（LS, LE）に応じて設定される。次に、処理がステップＳＰ１１０に進むと、後述する転送制御処理ルーチン（図１２）が呼び出され、トラック領域５２−Ｋに対して、必要に応じて波形データが転送される。
【００７４】
3．2．3．ＪＯＧダイアル操作イベント処理
以下、ナッジモードにおいて各種イベントが発生したときの動作の詳細を説明する。
ナッジモードにおいてＪＯＧダイアルが操作されると、図１１(b)に示すＪＯＧダイアル操作イベント処理ルーチンが起動される。図において処理がステップＳＰ１２０に進むと、ＪＯＧダイアルの回転量に比例したカレント点変動指定値ΔPが決定される。次に、処理がステップＳＰ１１２に進むと、ブロック設定済範囲（HP, TP）の限度内でループ区間（LS, LE）が移動される。すなわち、ループ区間（LS, LE）がブロック設定済範囲（HP, TP）内である限り、ループ開始点LS およびループ終了点LE にはカレント点変動指定値ΔPが各々加算されるが、「LE ＋ΔP」が設定済最終点TP を超える場合には、両者の差をΔP1 とし、「LS ＋ΔP−ΔP1」および「LE ＋ΔP−ΔP1」が新たなループ区間（LS, LE）に設定されることになる。同様に、カレント点変動指定値ΔPが負値である場合には「LS ＋ΔP」が設定済先頭点HP 未満になる場合がある。かかる場合には、両者の差をΔP2 とし、「LS ＋ΔP＋ΔP2」および「LE ＋ΔP＋ΔP2 」が新たなループ区間（LS, LE）に設定されることになる。なお、本実施例ではバッファ領域が複数ブロック分準備されているので、よほど速くＪＯＧダイヤルを回した場合でなければかかる事態は生じない。
【００７５】
次に、処理がステップＳＰ１２４に進むと、更新後のループ区間（LS, LE）に基づいてカレント点CP が決定される。すなわち、カレント点CP は、ナッジ種別が「前方ナッジ」であった場合にはループ終了点LE に等しくなり、「後方ナッジ」であった場合にはループ開始点LS に等しくなる。次に、処理がステップＳＰ１２６に進むと、更新後のループ区間（LS, LE）に基づいてトラック対応レジスタ群６６−Ｋに対して必要な設定が行われ、開始アドレスDest_Ａ，Dest_Ｂ、終了アドレスTar_Ａ，Tar_Ｂ、ＨＥＡＤ領域およびＴＡＩＬ領域がループ区間（LS, LE）に応じて設定される。次に、処理がステップＳＰ１２８に進むと、後述する転送制御処理ルーチン（図１２）が呼び出され、トラック領域５２−Ｋに対して、必要に応じて波形データが転送される。
【００７６】
3．2．4．転送制御処理
次に、図１２を参照し、上記ステップＳＰ１１０，ＳＰ１２８等において呼び出される転送制御処理ルーチンの処理について説明する。
図において処理がステップＳＰ１５０に進むと、ＩＤＥインタフェース２８とバッファメモリ５０との間で読出しまたは書込みのためにデータが転送中か否かが判定される。ここで「ＹＥＳ」と判定されると、本ルーチンの処理は直ちに終了する。一方、「ＮＯ」（転送中ではない）と判定されると、処理はステップＳＰ１５２に進む。ここでは、ループ開始点LS およびループ終了点LE の平均値であるループ中心点LC が計算される。
【００７７】
次に、処理がステップＳＰ１５４に進むと、このループ中心点LC から設定済先頭点HP 方向へのサンプル数である先頭方向サンプル数Sa と、ループ中心点LC から設定済最終点TP 方向へのサンプル数である末尾方向サンプル数Sb とが計算される。次に、トラック領域５２−Ｋの全容量（クラスタ容量Scr ・６）からブロック設定済範囲（HP, TP）の全サンプル数（Sa ＋Sb ）を減算することにより、トラック領域５２−Ｋ内の空きサンプル数Sr が求められる。次に、処理がステップＳＰ１５６に進むと、空きサンプル数Sr はクラスタ容量Scr 以上であるか否かが判定される。ここで「ＹＥＳ」と判定されると、処理はステップＳＰ１５８に進む。
【００７８】
ステップＳＰ１５８においては、ソング管理データに基づいて、サンプル数Sa， Sb のうち小さい方の側に、新たなブロックが追加される。すなわち、新たに追加されるブロックがリージョンを構成するブロックである場合は、ハードディスク３０から当該ブロックの波形データを含むクラスタのデータの読み出し、および、トラック領域５２−Ｋに転送が開始される。一方、新たに追加されるブロックが無音ブロックである場合には、その無音ブロックの長さに等しいサンプル数だけトラック領域５２−Ｋに「０」が書き込まれ、該追加されたブロックに応じて設定済先頭点 HP または設定済最終点TP が修正される。
【００７９】
次に、処理がステップＳＰ１６４に進むと、先のステップＳＰ１５８において無音ブロックが設定されたか否かが判定される。ここで「ＹＥＳ」と判定されると、処理はステップＳＰ１５４に戻り、サンプル数Sa，Sbおよび空きサンプル数Sr が再計算され、ステップＳＰ１５６以降の処理が実行される。これは、上述したステップＳＰ１５８における無音ブロックの設定は瞬時に完了するため、次のブロックに対する設定処理を引き続き行っても差し支えないからである。一方、上記ステップＳＰ１６４において「ＮＯ」と判定されると、本ルーチンの処理は直ちに終了する。これは、前述したようにハードディスク３０からトラック領域５２−Ｋへの転送は、ＩＤＥインターフェース２８と転送回路２６により途中ＣＰＵ８の補助なしに行われ、また、クラスタの頭出し等に相当の時間を要するため、本ルーチンを一旦終了されたものである。
【００８０】
また、空きサンプル数Sr がクラスタ容量Scr 未満である場合には、ステップＳＰ１５６において「ＮＯ」と判定され処理はステップＳＰ１６０に進む。ここでは、先頭方向サンプル数Sa および末尾方向サンプル数Sb のうち一方が「２Scr 」未満であるか否かが判定される（所定のブロック解放条件）。ここで「ＮＯ」と判定されると、本ルーチンは直ちに終了する。かかる場合は、先頭方向サンプル数Sa および末尾方向サンプル数Sb の双方がほぼ等しい値であるため、カレント点CP を中心として前後の波形データがほぼバランスよくトラック領域５２−Ｋ内に記憶されていることになる。
【００８１】
一方、サンプル数Sa，Sb のうち一方が「２Scr 」未満であればステップＳＰ１６０において「ＹＥＳ」と判定され処理はステップＳＰ１６２に進む。ここでは、サンプル数Sa，Sb のうち他方の側（サンプル数が多い側）の最外縁のブロックが解放され、その結果に応じてブロック設定済範囲（HP, TP）が更新される。そして、処理がステップＳＰ１５４に進むと、サンプル数Sa，Sb および空きサンプル数Sr が再計算される。以後同様に、空きサンプル数Sr がクラスタ容量Scr 以上になるまで、ステップＳＰ１５４，ＳＰ１５６，ＳＰ１６０，ＳＰ１６２のループが繰り返される。そして、空きサンプル数Sr がクラスタ容量Scr 以上になると、処理はステップＳＰ１５８に進み、上述したようにサンプル数Sa，Sb のうち小さい方の側に、新たなブロックが追加される。
【００８２】
3．2．5．転送終了割込処理
上記転送制御処理ルーチン（図１２）のステップＳＰ１５８によって開始されたハードディスク３０からトラック領域５２−Ｋへのクラスタの転送では、１アドレスのデータが転送される毎に転送アドレスがカウントアップされる。そして、この転送アドレスが終了アドレスレジスタ９４に格納された終了アドレスEAD に一致すると、ＣＰＵ８において転送終了割込が発生し、図１１(c)に示す転送終了割込ルーチンが起動される。
【００８３】
図において処理がステップＳＰ１４０に進むと、転送された１クラスタの波形データのうち非再生範囲（追加すべき新たなブロック以外の範囲）が除去され、残りの再生範囲がブロック設定済範囲（HP, TP）に隣接するようにシフトされる。次に、処理がステップＳＰ１４２に進むと、該シフトされた再生範囲をブロック設定済範囲（HP, TP）に追加するように、設定済先頭点HP または設定済最終点TP が更新される。次に、処理がステップＳＰ１４４に進むと、上記転送制御処理ルーチン（図１２）が再び呼び出される。
【００８４】
このように、ナッジモードにおいては、ＪＯＧダイアルが操作されると、必要に応じて転送制御処理ルーチン（図１２）が繰り返し実行されるから、やがてループ中心点LC を中心として、先頭方向サンプル数Sa および末尾方向サンプル数Sb として共に「２Scr 」が確保されるようにトラック領域５２−Ｋの内容が更新される。これにより、再びＪＯＧダイアルが操作された際に、新たなループ区間（LS, LE）がブロック設定済範囲（HP, TP）に含まれる可能性を高くすることができ、新たなループ区間（LS, LE）を速やかに再生することが可能になる。
【００８５】
4．実施例の効果
以上のように、通常再生モードにおいては、開始アドレスDest_Ａ〜Dest_Ｆ、終了アドレスTar_Ａ〜Tar_Ｆ、ミュートフラグMUTE_Ａ〜MUTE_Ｆ等の値を、実際に波形データが再生される相当以前に設定することができる。これにより、バッファメモリ５０等に対する設定を余裕をもって実行することができ、例えば再生範囲のきわめて短いクラスタが存在した場合においても、波形データの再生開始時において設定が間に合わなくなるような事態を未然に防止することができる。
【００８６】
また、ナッジモードにおいては、トラック領域５２−Ｋにはクラスタ容量Scr の「６」倍の容量が確保されるが、各クラスタにおける再生範囲をのみを詰めて記憶するために、再生範囲のきわめて短いクラスタが存在した場合においても、トラック領域５２−Ｋには充分なサンプル数の波形データを記憶することができる。そして、ループ区間（LS, LE）の前後にバランスよく波形データが配置されることにより、カレント点CP が大幅に移動した場合であっても、直ちにループ区間の再生を行うことができる。
【００８７】
5．変形例
本発明は上述した実施例に限定されるものではなく、例えば以下のように種々の変形が可能である。
(1)上記実施例のステップＳＰ２４においては、空きバッファ領域を有するトラックのうち残存サンプル数が最小であるトラックを次にブロックを設定すべきトラックとして選択したが、未だ再生されていないブロックの数である残存ブロック数が最小であるトラック（換言すれば空きバッファ領域の数が最大であるラック）を次にブロックを設定すべきトラックとして選択してもよい。
【００８８】
(2)また、上記実施例のステップＳＰ１６０においては、サンプル数Sa，Sb （すなわちループ中心点LC から設定済先頭点HP または設定済最終点TP までのサンプル数）が「２Scr 」未満であるか否かを判定したが、ループ区間（LS, LE）から設定済先頭点HP または設定済最終点TP までのサンプル数を計算し、これらの計算結果のうち一方が所定値未満であるか否かを判定し、この判定結果が肯定的であった場合にステップＳＰ１６２によって他方のブロックを解放するようにしてもよい。
【００８９】
(3)また、通常再生モードにおいては、各トラック毎にバッファ数を固定する必要はない。例えば編集を繰り返して「１」クラスタあたりの再生範囲のサンプル数が少なくなったトラックに対しては「６」以上のバッファ領域を割り当て、「１」クラスタあたりの再生範囲のサンプル数が比較的多いトラックに対しては「５」以下のバッファ領域を割り当てるようにしてもよい。
【００９０】
(4)上記実施例のナッジモードにおける限界値「２Ｓｃｒ」は、６クラスタ分のトラック領域５２−Ｋを有効に使うために決定された限界値の一例であって、必ずしもその値である必要はない。一般的に、トラック領域５２−Ｋがｎクラスタ分のサイズであれば、限界値は（ｎ／２−α）クラスタ位の値とするのがよい（但し、αは０．５≦α≦１．０の定数）。さらに、トラック領域５２−Ｋのサイズがクラスタのサンプル数ｍの整数倍でない場合は、そのサイズをｎサンプルとして、限界値は（ｎ／２−α・ｍ）サンプル位の値とするのがよい。
【００９１】
(5)上記実施例のように、先頭方向サンプル数Sa および末尾方向サンプル数Sbの一方が限界値以下であるか否かをブロック解放条件とすれば、ループ区間の中心から前と後の何れかの方向に所定の限界値以下のサンプルしか準備されていないとき、その逆の方向の端のブロックを解放してその方向のブロックを準備するよう動作する。そのため、何れの方向にも所定の限界値以上のサンプル数が準備されるようになる。
しかしながら、ブロックの解放条件はこのような条件に限らなくてよい。
例えば、先頭方向サンプル数Saおよび末尾方向サンプル数Sbの一方が限界値以上であるか否かをブロック解放条件としてもよい。その場合、トラック領域５２−Ｋのサンプル数をｎ、クラスタのサンプル数をｍとして、その限界値は、（ｎ／２＋α・ｍ）サンプル位の値とするとよい。このブロック解放条件を用いれば、ループ区間の中心から前と後の何れかの方向に所定の限界値以上のサンプルが準備されているとき、そのサンプルを含むブロックを解放してその逆方向のブロックが準備されるので、何れかの方向にサンプルを準備しすぎて逆方向の準備されたサンプル数が不足するのを防止できる。
或いは、先頭方向サンプル数Saと末尾方向サンプル数Sbの差の絶対値が限界値以上であるか否かをブロック解放条件としてもよい。その場合、トラック領域５２−Ｋのサンプル数をｎ、クラスタのサンプル数をｍとして、その限界値は、（α・ｍ）サンプル位の値とするとよい。このブロック解放条件を用いれば、ループ区間の中心から前方向に準備されているサンプル数と後方向に準備されているサンプル数の差が所定の限界値以上のとき、その順されているサンプル数が多い方向のブロックを解放してその逆方向のブロックが準備されるので、何れかの方向にサンプルを準備しすぎて逆方向の準備されたサンプル数が不足するのを防止できる。
【図面の簡単な説明】
【００９２】
【図１】本発明の一実施例の波形データ処理装置のブロック図である。
【図２】ハードディスク３０のメモリマップおよびソング管理データのデータ構造を示す図である。
【図３】転送回路２６の詳細ブロック図である。
【図４】通常再生モードにおけるバッファメモリ５０のメモリマップである。
【図５】通常再生モードにおける動作説明図である。
【図６】通常再生モードにおける動作説明図である。
【図７】通常再生モードにおける各種イベント処理ルーチンのフローチャートである。
【図８】通常再生モードにおける転送制御処理ルーチンのフローチャートである。
【図９】ナッジモードにおける動作説明図である。
【図１０】ナッジモードにおける動作説明図である。
【図１１】ナッジモードにおける各種イベント処理ルーチンのフローチャートである。
【図１２】ナッジモードにおける転送制御処理ルーチンのフローチャートである。
【符号の説明】
【００９３】
２：表示器、４：フェーダ、６：操作子群、８：ＣＰＵ、１０：ＤＭＡ制御部、１２：フラッシュメモリ、１４：ＲＡＭ、１６：バス、１８：ＰＣインタフェース、２０：ミキサ、２２：波形入力部、２４：波形出力部、２６：転送回路、２８：ＩＤＥインタフェース、２８ａ：バッファメモリ、３０：ハードディスク、３２：ＣＤ−ＲＷドライブ、５０：バッファメモリ、５２−０〜５２−１５：トラック領域、６０：ミュート回路、６１：データバス、６２：録音・再生カウンタ、６４：比較器、６６−０〜６６−１５：トラック対応レジスタ群、６８：マルチプレクサ、７０：開始位置レジスタ、７２：終了位置レジスタ、７４：ミュートレジスタ、７６：スタート／ストップレジスタ、７８：カレント点レジスタ、８０：カレントバッファレジスタ、８２：ＨＥＡＤ領域指定レジスタ、８４：ＴＡＩＬ領域指定レジスタ、８６：転送カウンタ、８８：比較器、９０：開始アドレスレジスタ、９２：トリガレジスタ、９４：終了アドレスレジスタ、１００：管理データ領域、１０２：音データ部、１０４，１０６：ソング管理データ、１０８−１〜１０８−１６：トラックデータ、１１０−１〜１１０−８：仮想トラックデータ、１１２−１，１１２−２：リージョンデータ、１１４−１，１１４−２：ノードデータ、１０８−１〜１０８−１６：トラックデータ、Ａ〜Ｆ：バッファ領域、ＢＬ１〜ＢＬ８：ブロック。
【図１】
2006277784.tif 000003
【図２】
2006277784.tif 000004
【図３】
2006277784.tif 000005
【図４】
2006277784.tif 000006
【図５】
2006277784.tif 000007
【図６】
2006277784.tif 000008
【図７】
2006277784.tif 000009
【図８】
2006277784.tif 000010
【図９】
2006277784.tif 000011
【図１０】
2006277784.tif 000012
【図１１】
2006277784.tif 000013
【図１２】
2006277784.tif 000014