JP6350693B2 - 音響信号発生装置 - Google Patents
音響信号発生装置 Download PDFInfo
- Publication number
- JP6350693B2 JP6350693B2 JP2017021223A JP2017021223A JP6350693B2 JP 6350693 B2 JP6350693 B2 JP 6350693B2 JP 2017021223 A JP2017021223 A JP 2017021223A JP 2017021223 A JP2017021223 A JP 2017021223A JP 6350693 B2 JP6350693 B2 JP 6350693B2
- Authority
- JP
- Japan
- Prior art keywords
- sound
- value
- sample
- pitch
- circuit
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Electrophonic Musical Instruments (AREA)
Description
本発明は、音(音声又は楽音)の波形を表す波形データを記憶した波形メモリから、波形データを読み出して音響信号を発生する音響信号発生装置に関する。とくに、音の長さ(再生速度(時間の進む速さ))、ピッチ及びフォルマントのうちのいずれかの要素を他の要素に影響を与えることなく変更可能な音響信号発生装置に関する。
従来から、例えば下記特許文献1に示されているように、音の波形を表す波形データを波形メモリから読み出して、前記読み出した波形データが表す音を再生する電子楽器は知られている。この電子楽器は、音を再生するための複数の発音チャンネルを備えている。この電子楽器は、所定の音域ごとに波形データを1つずつ割り当てている。前記波形データを構成する各サンプル値は圧縮され、各サンプル値がサンプリングされた順に、波形メモリの連続するアドレスに記憶している。この電子楽器においては、各サンプル値を1つ前のサンプル値からの変化に関係して圧縮する圧縮方式を採用しており、圧縮データをデコードするためには、1つ前のサンプル値を用いる必要がある。したがって、波形メモリから圧縮データを読み出す際には、発音チャンネルは、読み出しアドレスを1つずつ進めている。
各発音チャンネルは、各サンプリング期間(D/Aコンバータが1つのディジタル値を1つのアナログ値に変換する期間)に、波形メモリから圧縮データを読み出してデコードすることにより、1つのサンプル値(音響信号)を計算する。再生する音(以下、再生音と呼ぶ)のピッチがサンプリングした音(以下、原音と呼ぶ)のピッチと同じ場合は、発音チャンネルは、読み出しアドレスを1つ進めて圧縮データを読み出し、1つ前のサンプリング期間のサンプル値に圧縮データの値を加算することにより、今回のサンプリング期間のサンプル値を計算する。再生音のピッチが原音のピッチと異なる場合は、原音のピッチに対する再生音のピッチの比率(ピッチ倍率)に応じて圧縮データの読み出しレートを設定する。つまり、発音チャンネルは、連続するアドレスに記憶されている複数の圧縮データを読み出して、前記読み出した複数の圧縮データをデコードする。つまり、複数のサンプル値を順に復元する。そして、前記復元された複数のサンプル値を用いた線形補間演算により、再生音のピッチに対応したサンプル値が算出される。
また、下記特許文献2に記載されているように、音声の一部の区間(前記音声の先頭部分に含まれる所定数の母音)のピッチを変更することなく、その区間の長さを変更(伸長)する機能を備えた補聴器は知られている。
上記従来の電子楽器において、再生音のピッチを原音のピッチとは異なるピッチに設定した場合、再生音の長さが原音の長さとは異なる長さになってしまう。例えば、再生音のピッチを原音のピッチよりも高いピッチに設定した場合、再生音は原音よりも短くなる。一方、再生音のピッチを原音のピッチよりも低いピッチに設定した場合、再生音は原音よりも長くなる。また、上記従来の電子楽器において、再生音のピッチを原音のピッチとは異なるピッチに設定した場合、再生音のフォルマントが原音のフォルマントとは異なるフォルマントになってしまう。例えば、再生音のピッチを原音のピッチよりも高いピッチに設定した場合、再生音のフォルマントが原音のフォルマントよりも高くなる。一方、再生音のピッチを原音のピッチよりも低いピッチに設定した場合、再生音のフォルマントは原音のフォルマントよりも低くなる。つまり、音色が変わってしまう。
また、上記従来の補聴器においては、専用の回路(DSP)を用いて、上記の機能を実現している。このような専用の回路(DSP)を用いる場合、所定長の波形を表わす波形データが形成されるまで、その波形データを構成する各サンプル値を記憶しておく必要がある。すなわち、比較的大きな記憶容量を有するメモリが必要である。また、発音開始指示(つまり、音声の入力時)から前記波形データが形成されるまでの遅れが生じる。電子楽器において、前記発音チャンネルに加え、上記機能を実現するための専用の回路(例えば、DSP)を搭載すると、回路規模が大きくなり、価格が高くなる。とくに、発音数を増加させると前記メモリの記憶容量を増やす必要があり、その問題が顕著になる。しかも、全ての機能が常に利用されるわけではないので、無駄が生じる。
本発明は上記問題に対処するためになされたもので、その目的は、音の長さ、ピッチ及びフォルマントのうちのいずれかの要素を他の要素に影響を与えることなく変更可能な音響信号発生装置であって、構成が簡単な音響信号発生装置を提供することにある。なお、下記本発明の各構成要件の記載においては、本発明の理解を容易にするために、後述する実施形態の対応箇所の符号を括弧内に記載しているが、本発明の各構成要件は、実施形態の符号によって示された対応箇所の構成に限定解釈されるべきものではない。
上記目的を達成するために、本発明の特徴は、原音の波形を表す波形データを構成する複数のサンプル値又は前記複数のサンプル値に基づいて計算された複数の圧縮データを記憶した波形データ記憶手段(WM、RB)と、サンプリング期間ごとにカウント値が更新されるサンプルカウンタ(Cs (n))をそれぞれ有し、前記サンプルカウンタのカウント値(ts (n))に基づいて、1つ又は複数の前記サンプル値又は前記圧縮データを前記波形データ記憶手段から読み出して、前記サンプルカウンタのカウント値に対応するサンプル値であって、音の波形を表わす音響信号を構成するサンプル値を計算して出力する複数の発音手段(CH(n))と、前記サンプルカウンタの初期カウント値を設定するとともにカウントを開始させ、サンプリング期間ごとに前記サンプルカウンタのカウント値に加算する加算値(v、β、γ)を前記発音手段に供給して前記サンプルカウンタのカウント値を更新させ、前記サンプルカウンタのカウント値が所定の値に達したとき前記サンプルカウンタのカウントを停止させる制御手段(CT)と、を備えた音響信号生成装置(16、WM、RB、18)であって、時間間隔をおいて、前記原音における時間軸方向に互いにずれた複数の区間を前記複数の発音手段から選択した複数の発音手段に割り当て、前記割り当てた区間の先頭位置に対応する値に基づいて前記選択した複数の発音手段のサンプルカウンタの初期カウント値をそれぞれ設定するとともに前記選択した複数の発音手段のサンプルカウンタのカウントを開始させ、前記選択した複数の発音手段から出力されたサンプル値を重畳加算することにより、前記原音の長さ、前記原音のピッチ及び前記原音のフォルマントのうちのいずれか1つの要素又は複数の要素を変更した1つの再生音の波形を表わす音響信号を構成する1つのサンプル値をサンプリング期間ごとに生成し、前記発音手段のサンプルカウンタのカウント値が、前記発音手段に割り当てられた前記区間の末尾位置に対応する値に達したとき、前記発音手段のサンプルカウンタのカウントを停止させる複数のトラック(TK(m))を備え、前記複数の区間、前記時間間隔及び前記加算値は、前記原音の長さに対する前記再生音の長さの比率を表わす第1比率(α)、前記原音のピッチに対する前記再生音のピッチの比率を表わす第2比率(β)、及び前記原音のフォルマント周波数に対する前記再生音のフォルマント周波数の比率を表わす第3比率(γ)のうちのいずれか1つの比率又は複数の比率に基づいて決定され、前記複数のトラックにて同時に再生される再生音に共通の再生テンポに対応したマスターサンプルカウンタ(Cms (CT))であって、所定の基準テンポに対する前記再生テンポの比率を表わすマスターテンポ倍率(θ)をサンプリング期間ごとに加算するマスターサンプルカウンタを備え、前記基準テンポに対する前記各トラックにて再生される再生音のテンポの比率を表す各スレーブテンポ倍率(φm)が、サンプリング期間ごとに、前記各トラックのサンプルカウンタのカウント値に加算され、前記マスターサンプルカウンタのカウント値(tms (CT))と前記各トラックのサンプルカウンタのカウント値とのずれを監視し、そのずれに応じて、前記各トラックのスレーブテンポ倍率が補正される、音響信号生成装置としたことにある。
この場合、前記各トラックに割り当てられる波形データは、楽曲の各パートの演奏であって、前記楽曲の楽譜における同一区間の演奏をそれぞれサンプリングして形成されているとよい。
また、この場合、前記各トラックに割り当てられた波形データの所定の範囲がループ再生されるように、前記マスターサンプルカウンタ及び前記各トラックのサンプルカウンタがカウントされるとよい。
また、この場合、前記複数のトラックのうちの1つのトラックのサンプルカウンタが前記マスターサンプルカウンタとして機能してもよい。
本発明に係る音響信号生成装置においては、従来の音響信号生成装置と同様の複数の発音手段(発音チャンネル)によって原音の一部の区間に相当する波形を表す音響信号が順次生成され、それらが重畳加算される。これにより、前記原音の長さ、前記原音のピッチ及び前記原音のフォルマントのうちのいずれか1つの要素又は複数の要素を変更した1つの再生音の波形を表わす音響信号が形成される。このように、本発明によれば、音の長さ、ピッチ及びフォルマントのうちのいずれかの要素を他の要素に影響を与えることなく変更可能な音響信号発生装置であって、構成が簡単な音響信号発生装置を提供できる。つまり、本発明に係る音響信号生成装置においては、上記従来の音響信号生成装置(従来の補聴器)のような専用の回路(例えば、DSP)が不要である。また、サンプリング期間ごとに1つのサンプル値が出力されるので、上記従来の音響信号生成装置のような遅れの問題が生じない。
また、本発明によれば、各トラックにて再生されるフレーズを同期させる(拍点を一致させる)ことができる。また、各フレーズが同期した状態を保ったまま、そのテンポを変更できる。例えば、MIDIシーケンサのクロックに同期させてテンポを変化させたり、音長設定操作子をリアルタイムに操作して、その指示値にテンポを追従させたりすることができる。また、各フレーズを同期させた状態のまま、フレーズの一部の区間又は全区間をループ再生することもできる。
本発明の一実施形態に係る音響信号生成装置が適用された電子楽器DMについて説明する。まず、この電子楽器DMの概略について説明する。この電子楽器DMは、図1に示すように、音の波形を表す波形データを波形メモリWMから読み出して、前記読み出した波形データが表す音を再生する音源回路16を有する。音源回路16は、タイムストレッチ機能、ピッチシフト機能及びフォルマントシフト機能を有する。タイムストレッチ機能を利用すれば、音のピッチ及びフォルマントを維持したまま、音の長さを変更できる。つまり、音を時間軸方向に伸縮させることができる。言い換えれば、音の再生速度(時間の進む速さ)のみを変更できる。また、ピッチシフト機能を利用すれば、音の長さ及びフォルマントを維持したまま、音のピッチを変更できる。また、フォルマントシフト機能を利用すれば、音の長さ及びピッチを維持したまま、音のフォルマントを変更できる。タイムストレッチ機能、ピッチシフト機能及びフォルマントシフト機能のうち2つの機能又は全てを同時に利用することができる。つまり、音の長さ、ピッチ及びフォルマントのうちの1つのみを変更するのに限られず、2つ又は全てを同時に変更することもできる。
音源回路16は、音の再生に関する動作モードとして4つのモードを備える。第1モードにおいては、タイムストレッチ機能、ピッチシフト機能及びフォルマントシフト機能は無効である。つまり、上記従来の電子楽器と同様に、原音のピッチとは異なるピッチに変更して再生すると、ピッチのみならず、長さ及びフォルマントも変わる。第2モードにおいては、上記のタイムストレッチ機能、ピッチシフト機能及びフォルマントシフト機能が有効になる。第2モードは、ボーカルソロ、ストリングスなど単一の楽器の演奏(フレーズ)の再生に適している。また、第3モードにおいては、タイムストレッチ機能及びピッチシフト機能が有効になる。第3モードは、ボーカル、ギター、ドラム、パーカッションなど複数の楽器の演奏が含まれるフレーズの再生に適している。また、第4モードにおいては、ピッチシフト機能及びフォルマントシフト機能が有効になる。第4モードでは、リアルタイムに入力されるボーカルソロ、ストリングスなど単一の楽器の演奏音にハーモニーを付与することができる。なお、上記の4つのモードのうちの複数のモード又はすべてのモードを同時に利用することもできる。詳しくは後述するように、音源回路16は256個の発音チャンネルを備えるが、再生を開始する際に使用されていない発音チャンネルが存在すれば、それらにいずれの動作モードを割り当ててもよい。ただし、第2乃至第4モードに関しては、1つの音を再生するために4つの発音チャンネルを使用するため、使用されていない発音チャンネルの数が3つ以下の場合には、それらの発音チャンネルに第2乃至第4モードを割り当てることはできない。
つぎに、電子楽器DMの構成について説明する。電子楽器DMは、図1に示すように、入力操作子11、コンピュータ部12、表示器13、記憶装置14、外部インターフェース回路15、及び音源回路16を備え、これらがバスBSを介して接続されている。また、音源回路16には、サウンドシステム17、音声入力装置18及び波形メモリWMが接続されている。
入力操作子11は、演奏操作子及び設定操作子を含む。演奏操作子及び設定操作子は、オン・オフ操作に対応したスイッチ(例えば数値を入力するためのテンキー)、回転操作に対応したボリューム又はロータリーエンコーダ、スライド操作に対応したボリューム又はリニアエンコーダ、マウス、タッチパネルなどからなる。演奏操作子は、発音開始、発音停止などに用いられる。また、設定操作子は、動作モードの選択、音色の選択などに用いられる。また、設定操作子には、音の長さ(再生速度)を変更する際に用いられる音長設定操作子が含まれる。また、設定操作子には、音のピッチを変更する際に用いられるピッチ設定操作子が含まれる。また、設定操作子には、音のフォルマントを変更する際に用いられるフォルマント設定操作子が含まれる。入力操作子11を操作すると、その操作内容を表す操作情報(操作子の指示値)が、バスBSを介して、後述するコンピュータ部12に供給される。
コンピュータ部12は、バスBSにそれぞれ接続されたCPU12a、ROM12b及びRAM12cからなる。CPU12aは、後述する発音プログラムをROM12bから読み出して実行して、演奏操作子の操作に関する演奏操作情報を音源回路16に供給する。演奏操作情報には、再生音のピッチを表すピッチ情報、再生音の音量を表す音量情報などが含まれる。また、CPU12aは、設定操作子が操作されると、その操作内容を表わす設定情報を音源回路16に供給する。設定情報には、動作モードを表わす動作モード情報、再生音の音色を表す音色情報(例えば、フィルタのカットオフ周波数、レゾナンス量など)などが含まれる。また、設定情報には、音長設定操作子、ピッチ設定操作子、フォルマント設定操作子の指示値などが含まれる。
ROM12bには、前記発音プログラムに加えて、初期設定パラメータ、各演奏操作子の各ノート番号NNに割り当てられた波形データに関する情報を表わす波形データ情報、表示器13に表示される画像を表わす表示データを生成するための図形データ及び文字データなどの各種データが記憶されている。RAM12cには、各種プログラムの実行時に必要なデータが一時的に記憶される。
表示器13は、液晶ディスプレイ(LCD)によって構成される。コンピュータ部12は、図形データ、文字データなどを用いて表示すべき内容を表わす表示データを生成して表示器13に供給する。表示器13は、コンピュータ部12から供給された表示データに基づいて画像を表示する。
また、記憶装置14は、HDD、FDD、CD、DVDなどの大容量の不揮発性記録媒体と、各記録媒体に対応するドライブユニットから構成されている。外部インターフェース回路15は、電子楽器DMを他の電子音楽装置、パーソナルコンピュータなどの外部機器に接続可能とする接続端子(例えば、MIDI入出力端子)を備えている。電子楽器DMは、外部インターフェース回路15を介して、LAN(Local Area Network)、インターネットなどの通信ネットワークにも接続可能である。
音源回路16は、図2に示すように、制御部CT、発音部SP、キャッシュ回路CM、信号処理部DP、リングバッファRB及びミキサー部MXを有する。
制御部CTは、CPU12aから供給された演奏操作情報及び設定情報に基づいて、各種パラメータを生成して、次に説明する発音部SPを構成する各発音チャンネルCH(n=0,1,・・・,255)に供給する。制御部CTには、各種エンベロープ信号を発生するエンベロープ発生回路及び低周波信号を発生する低周波発振器が含まれる。エンベロープ信号及び低周波信号は、発音開始からの経過時間に応じてピッチ、音色及び音量を変化させる際に利用される。上記の各種パラメータには、原音のピッチに対する再生音のピッチの比率を表すピッチ倍率β、フィルタの特性を設定するフィルタパラメータ、音量を設定する音量パラメータなどが含まれる。また、制御部CTは、後述する発音チャンネルCH(n=0,1,・・・,255)の動作状態をそれぞれ表す状態フラグSFn (CT)を有する。また、制御部CTは、原音の波形データの先頭からのサンプル数を計測するサンプルカウンタCs (CT)を有する。また、制御部CTは、発音チャンネルCH(n=0,1,・・・,255)が再生を開始するまでの時間を計測する再生時刻カウンタCT (CT)を有する。また、制御部CTは、サンプリング期間ごとに、後述するデコード回路DEC(n)にて復元されたサンプル値を一時的に記憶するサンプルバッファSB(CT)を有する。また、制御部CTは、後述する目標値tvを一時的に記憶する目標値レジスタTR(CT)を有する。
発音部SPは、複数(例えば256個)の発音チャンネルCH(n=0,1,・・・,255)を備える。発音チャンネルCH(0),CH(1),・・・,CH(255)の構成は共通である。発音チャンネルCH(n)は、読み込み回路DRD(n)、デコード回路DEC(n)、重畳加算回路OLA(n)、フィルタ回路FLT(n)及び音量制御回路VOL(n)を有する。
読み込み回路DRD(n)は、キャッシュ回路CMを介して波形メモリWMに接続されている。波形メモリWMには、原音(例えば、単一の楽器の単音、単一の楽器の演奏音からなるフレーズ、複数の楽器の演奏音が含まれるフレーズなど)を所定のサンプリング周期(例えば1/44100秒)でサンプリングして得られた各サンプル値が圧縮されて圧縮データとして記憶されている。圧縮データは、1つ前のサンプリング期間のサンプル値と現在のサンプル値との差を表す。したがって、波形データは、先頭のサンプル値と複数の圧縮データからなる。1つのアドレスに1つの圧縮データが対応付けられている。したがって、圧縮データを読み出す際の読み出しアドレスと先頭アドレスとの差は、前記圧縮データを用いて復元されるサンプル値がサンプリングされた時刻(サンプリング開始からの経過時間)に相当する。また、上記のように、本実施形態においては、圧縮データが波形メモリに記憶されているのであって、サンプル値そのものが記憶されているわけではないが、1つの圧縮データは原音の1つのサンプル値に対応しているので、圧縮データの読み出しアドレスは、圧縮されずにサンプル値が各アドレスに対応して記憶されている場合のサンプル値の読み出しアドレスに一致する。したがって、以下の説明では、波形メモリWMから圧縮データを読み出すアドレスを、サンプル値の読み出しアドレスと呼ぶ。
読み込み回路DRD(n)には、波形メモリWM内のアドレスであって、原音の先頭のサンプル値が記憶されたアドレス(先頭アドレス)が、制御部CTから供給される。読み込み回路DRD(n)は、サンプリング期間ごとに、制御部CTのサンプルカウンタCs (CT)と同様のサンプルカウンタCs (n)を有する。サンプルカウンタCs (n)のカウント値ts (n)は、先頭アドレスからのオフセットアドレスを表わす。読み込み回路DRD(n)は、先頭アドレスにカウント値ts (n)を加算した読み出しアドレスをキャッシュ回路CMに供給する。ただし、読み出しアドレスは、通常小数部を含む。後述するように、読み出しアドレスに相当するサンプル値は、デコード回路DEC(n)によって計算される。デコード回路DEC(n)が前記読み出しアドレスに対応するサンプル値を計算するために必要な圧縮データを、キャッシュ回路CMは波形メモリWMから読み出して読み込み回路DRD(n)に供給する。なお、キャッシュ回路CMは、キャッシュメモリを備えており、圧縮データが一時的にキャッシュメモリに記憶される。読み込み回路DRD(n)に供給すべき圧縮データがキャッシュメモリに記憶されている場合には、キャッシュ回路CMは、キャッシュメモリからその圧縮データを読み出して読み込み回路DRD(n)に供給する。
デコード回路DEC(n)は、供給された圧縮データを用いて現在のサンプリング期間のサンプル値を計算する。デコード回路DEC(n)は、前記計算した現在のサンプリング期間のサンプル値を、重畳加算回路OLA(n)に供給する。
重畳加算回路OLA(n)は、図3に示すように、乗算回路MUL(n)と加算回路ADD(n)を備える。乗算回路MUL(n)は、入力信号に窓関数を適用する回路である。乗算回路MUL(n)は、前記入力信号における位相を計算するために用いる位相カウンタCp (n)を有する。乗算回路MUL(n)は、位相カウンタCp (n)のカウント値tp (n)を用いて係数WD(n)を計算する。係数WD(n)は、図4A,4Bに示すような、カウント値tp (n)の関数である。このような窓関数が入力信号に適用されることにより、出力信号はフェードインした後、フェードアウトする。
加算回路ADD(0),ADD(1),・・・,ADD(255)は、互いに接続されている。加算回路ADD(n=a)は、乗算回路MUL(n=a)から供給されたサンプル値と他の加算回路ADD(n=b)から供給されたサンプル値を加算して、さらに他の加算回路ADD(n=c)に供給するとともにフィルタ回路FLT(n=a)に供給可能である。ただし、第1モードのときには、乗算回路MUL(n)及び加算回路ADD(n)は利用されず、供給されたサンプル値がそのままフィルタ回路FLT(n)に供給される(図5参照)。
フィルタ回路FLT(n)は、重畳加算回路OLA(n)から供給されたサンプル値の系列に対してフィルタパラメータに応じたフィルタ処理を実行することにより、前記サンプル値の系列によって表される音の周波数特性(振幅特性)を変更して、音量制御回路VOL(n)に供給する。
音量制御回路VOL(n)は、フィルタ回路FLT(n)から供給されたサンプル値を音量パラメータに応じて増幅して、ミキサー部MXへ出力する。
信号処理部DPは、入力した波形データが表わす音にリバーブ、ディレイなどの効果を付与して出力する。また、入力した信号のピッチをリアルタイムに検出する。
リングバッファRBは、後述する音声入力装置18から信号処理部DPに入力され、効果が付与された音声を表す波形データを一時的に記憶するメモリである。
ミキサー部MXは、サンプリング期間ごとに、各発音チャンネルCH(0),CH(1),・・・,CH(255)及び信号処理部DPから供給されたサンプル値を累算して、サウンドシステム17に供給する。
サウンドシステム17は、ミキサー部MXから供給されたディジタル音信号をアナログ音信号に変換するD/A変換器、前記変換したアナログ音信号を増幅するアンプ、及び増幅されたアナログ音信号を音響信号に変換して出力する左右一対のスピーカを備えている。
音声入力装置18は、収音装置としてのマイク、マイクから出力されたアナログ音信号をディジタル音信号に変換するA/D変換器を備えている。
次に、上記のように構成した電子楽器DMの動作について説明する。まず、CPU12aの動作について説明する。演奏者が演奏操作子(例えば、鍵盤装置のいずれかの鍵)を操作してノートオンイベントが発生すると、CPU12aは、図6に示すように、ステップS100にて、発音プログラムの実行を開始する。次に、CPU12aは、ステップS101にて、押鍵された鍵を表すノート番号NN及び押鍵強度VLを検出する。
つぎに、CPU12aは、ステップS102にて、前記ノート番号NN及び押鍵強度VLに割り当てられている波形データを特定し、その波形データの先頭アドレス及び末尾アドレス、並びに原音のピッチOP及び動作モードを含む波形データ情報をROM12bから読み込む。そして、CPU12aは、ステップS103にて、前記取得したノート番号NN、原音のピッチOP、押鍵強度VL、各種エンベロープ信号を規定するパラメータ及び各種低周波信号を規定するパラメータ、動作モードを表わす動作モード情報などを演奏操作情報として音源回路16に供給し、ステップS104にて発音処理を終了する。
つぎに、動作モードが第1モードである場合の音源回路16の発音動作について説明する。第1モードにおいては、図5に示すように音声入力装置18及びリングバッファRBは利用されない。発音チャンネルCH(0)〜CH(255)は互いに独立して動作し、それぞれ1つの音を再生する。つまり、第1モードでは、256個の音を同時に再生可能である。
制御部CTは、CPU12aから演奏操作情報を入力すると、図7に示す制御シーケンスに従って動作開始する。制御部CTは、ステップS200にて、動作を開始し、ステップS201にて、発音チャンネルを1つ確保する。なお、CPU12aが発音チャンネルを確保し、確保した発音チャンネルのインデックスnを音源回路16に供給しても良い。以下、確保された発音チャンネルを発音チャンネルCH(n)と表記する。つぎに、制御部CTは、ステップS202にて、エンベロープ発生回路及び低周波発振器を動作させ、前記入力した演奏操作情報及び前記演奏操作情報入力する前に入力した設定情報(以下、単に演奏操作情報及び設定情報という)に含まれる各種エンベロープ信号を規定するパラメータ及び各種低周波信号を規定するパラメータに従ったエンベロープ信号及び低周波信号を発生開始させる。
つぎに、制御部CTは、ステップS203にて、先頭アドレスを読み込み回路DRD(n)に供給する。つぎに、制御部CTは、ステップS204にて、発音チャンネルCH(n)に対応する状態フラグSFn (CT)を「発音中」に設定する。
つぎに、制御部CTは、ステップS205にて、演奏操作情報及び設定情報に含まれる音色に関するパラメータ、並びに発音中に音色を変化させるエンベロープ信号及び低周波信号に基づいてフィルタ回路FLT(n)の設定を表わすフィルタパラメータを生成してフィルタ回路FLT(n)に供給する。つぎに、制御部CTは、ステップS206にて、演奏操作情報及び設定情報に含まれる音量に関するパラメータ、並びに音量を変化させるエンベロープ信号及び低周波信号に基づいて、音量制御回路VOL(n)の設定を表わす音量パラメータを計算し、音量制御回路VOL(n)に供給する。なお、設定情報は、発音中であっても変更され得る。
つぎに、制御部CTは、ステップS207にて、演奏操作情報及び設定情報に含まれるピッチに関するパラメータ(例えば、ノート番号NN、並びにピッチを変化させるエンベロープ信号及び低周波信号を合成して得られたピッチ情報に基づいて再生音のピッチを決定する。そして、原音のピッチOPに対する前記決定した再生音のピッチの比率を表わすピッチ倍率βを算出して、発音チャンネルCH(n)の読み込み回路DRD(n)に供給する。ただし、最初のサンプリング期間においては、ピッチ倍率βは「0」に設定される。
つぎに、制御部CTは、ステップS208にて、発音チャンネルCH(n)の再生位置が波形データの末尾に到達したか否かを判定する。具体的には、制御部CTは、読み込み回路DRD(n)のサンプルカウンタCs (n)のカウント値ts (n)に先頭アドレスを加算した値が、末尾アドレスに到達したか否かを判定する。発音チャンネルCH(n)の再生位置が波形データの末尾に到達した場合には、制御部CTは、「Yes」と判定して、ステップS209にて、発音チャンネルCH(n)の動作を停止させるとともに、ステップS210にて、発音チャンネルCH(n)に対応する状態フラグSFn (CT)を「休止中」に設定する。つぎに、制御部CTは、ステップS211にて、発音チャネルCH(n)の制御を終了する。一方、発音チャンネルCH(n)の再生位置が未だ波形データの末尾に到達していない場合には、制御部CTは、「No」と判定して、次のサンプリング期間に上記のステップS205〜S208からなる処理を実行する。
つぎに発音チャンネルCH(n)の制御シーケンスについて説明する。発音チャンネルCH(n)は、図8に示す制御シーケンスに従って、サンプリング期間ごとに1つのサンプル値を計算して、ミキサー部MXに供給する。発音チャンネルCH(n)は、ステップS300にて動作を開始する。発音チャンネルCH(n)は、ステップS301にて、初期化処理を実行する。具体的には、読み込み回路DRD(n)のサンプルカウンタCs (n)のカウント値ts (n)を「0」に設定する。また、読み込み回路DRD(n)は、キャッシュ回路CMを介して、先頭のサンプル値及び先頭アドレスに「1」を加算したアドレス(2番目のアドレス)の圧縮データを波形メモリWMから読み込み、デコード回路DEC(n)に供給する。そして、デコード回路DEC(n)は先頭のサンプル値に前記供給された圧縮データの値を加算することにより、2番目のアドレスに対応したサンプル値を復元する。そして、デコード回路DEC(n)は、先頭のサンプル値と前記復元したサンプル値を記憶する。
つぎに、読み込み回路DRD(n)は、ステップS302にて、制御部CTからピッチ倍率βを入力する。つぎに、読み込み回路DRD(n)は、ステップS303にて、サンプルカウンタCs (n)のカウント値ts (n)を更新する。すなわち、カウント値ts (n)にピッチ倍率βの値を加算する。最初のサンプリング期間においては、ピッチ倍率βの値が「0」なので、カウント値ts (n)は、「0」である。つぎに、読み込み回路DRD(n)は、ステップS304にて、先頭アドレスにカウント値ts (n)を加算する。これにより、読み出しアドレスが更新される。最初のサンプリング期間においては、カウント値ts (n)が「0」なので、読み出しアドレスは、先頭アドレスに設定される。つぎに、読み込み回路DRD(n)は、ステップS305にて、読み出しアドレスをキャッシュ回路CMに供給する。キャッシュ回路CMは、読み出しアドレスに相当するサンプル値を復元するために必要な圧縮データを波形メモリWMから読み込んで読み込み回路DRD(n)に供給する。
キャッシュ回路CMは、1つ前のサンプリング期間における読み出しアドレスの整数部の値に「2」を加算したアドレス(読み出し開始アドレスと呼ぶ)から順に(1つずつ)アドレスをインクリメントしながら圧縮データを順に読み出して読み込み回路DRD(n)に供給する。そして、今回のサンプリング期間における読み出しアドレスの整数部の値に「1」を加算したアドレス(読み出し終了アドレスと呼ぶ)の圧縮データを読み出して読み込み回路DRD(n)に供給すると、キャッシュ回路CMは、読み出し処理を終了する。ただし、最初のサンプリング期間においては、読み出しアドレスの整数部は「0」であるから、読み出し開始アドレスが、読み出し終了アドレスを超えている。したがって、最初のサンプリング期間においては、キャッシュ回路CMは、データを読み出さない。
結果的に、読み出しアドレスの整数部の値の増加量と同数の圧縮データが読み込まれる。例えば、図9Aに示すように、読み出しアドレスが「1.2」から「3.7」に遷移した場合、2個の圧縮データが読み込まれる。また、例えば、図9Bに示すように、読み出しアドレスが「2.2」から「2.7」に遷移した場合には、圧縮データは読み込まれない。
つぎに、読み込み回路DRD(n)は、キャッシュ回路CMから供給された圧縮データ及び読み出しアドレスの小数部の値を、ステップS306にて、デコード回路DEC(n)に供給する。デコード回路DEC(n)は、1つ前のサンプリング期間において復元したサンプル値を記憶している。デコード回路DEC(n)は、ステップS307にて、前記記憶しているサンプル値とデコード回路DEC(n)から供給された圧縮データを用いて、読み出しアドレスに対応するサンプル値を求めるために必要な1つ又は複数のサンプル値を復元する。ただし、ピッチ倍率βの値が「1」より小さく、前回のサンプリング期間における読み出しアドレスの整数部の値と今回のサンプリング期間における読み出しアドレスの整数部との値が同値である場合には、デコード回路DEC(n)はサンプル値を復元しない。そして、デコード回路DEC(n)は、ステップS308にて、前記復元したサンプル値のうち、今回のサンプリング期間における読み出しアドレスの整数部の値及び前記整数部の値に「1」を加算したアドレスに相当する1対のサンプル値と、今回のサンプリング期間における読み出しアドレスの小数部の値を用いた線形補間演算により、今回のサンプリング期間における読み出しアドレスに対応したサンプル値を求める。つぎに、デコード回路DEC(n)は、ステップS309にて、前記計算した今回のサンプリング期間における読み出しアドレスに対応したサンプル値を、ステップS310にて、フィルタ回路FLT(n)に供給する。
つぎに、フィルタ回路FLT(n)は、ステップS310にて、制御部CTから供給されたフィルタパラメータに応じたフィルタを前記供給されたサンプル値に適用し、フィルタ処理したサンプル値を音量制御回路VOL(n)に供給する。つぎに、音量制御回路VOL(n)は、ステップS310にて、制御部CTから供給された音量パラメータに応じた係数を前記供給されたサンプル値に乗算し、その乗算結果をミキサー部MXに供給する。
2番目のサンプリング期間以降の各サンプリング期間には、発音チャンネルCH(n)は、上記のステップS302〜S311からなる処理を実行する。
(第2モード)
つぎに、動作モードが第2モードである場合の電子楽器DMの動作について説明する。第2モードでは、電子楽器DMとは別の分析装置により、原音の各区間のピッチが予め分析されるとともに、前記各区間のピッチに相当するサンプル数が予め計算された波形データを用いる。波形の先頭から前記各区間のピッチに相当するサンプル数を積算した数をそれぞれピッチマーク値と呼ぶ。すなわち、ピッチマーク値は、原音の波形データを構成する各サンプル値が記憶されている記憶領域に対応づけられたアドレスであって、原音を構成する基本音の節(ピッチマーク)に相当するアドレスを表す。上記のように、1つの圧縮データは1つのサンプル値に対応しているので、ピッチマーク値は原音の波形データにおける先頭アドレスからのオフセットアドレスに相当する。例えば、原音の先頭から末尾までピッチが一定であって、そのピッチに相当するサンプル数が600個である場合(つまり、基本周波数が73.5Hzである場合)、図10に示すように、各ピッチマーク値は、「0」、「600」、「1200」・・・となる。このピッチマーク値は波形メモリWMに記憶されている。説明を簡単にするために、図10に示す例では、各ピッチマーク値は整数であるが、各ピッチマーク値が小数部を含んでもよい。また、原音の中間部にてピッチが変化していても良い。
つぎに、動作モードが第2モードである場合の電子楽器DMの動作について説明する。第2モードでは、電子楽器DMとは別の分析装置により、原音の各区間のピッチが予め分析されるとともに、前記各区間のピッチに相当するサンプル数が予め計算された波形データを用いる。波形の先頭から前記各区間のピッチに相当するサンプル数を積算した数をそれぞれピッチマーク値と呼ぶ。すなわち、ピッチマーク値は、原音の波形データを構成する各サンプル値が記憶されている記憶領域に対応づけられたアドレスであって、原音を構成する基本音の節(ピッチマーク)に相当するアドレスを表す。上記のように、1つの圧縮データは1つのサンプル値に対応しているので、ピッチマーク値は原音の波形データにおける先頭アドレスからのオフセットアドレスに相当する。例えば、原音の先頭から末尾までピッチが一定であって、そのピッチに相当するサンプル数が600個である場合(つまり、基本周波数が73.5Hzである場合)、図10に示すように、各ピッチマーク値は、「0」、「600」、「1200」・・・となる。このピッチマーク値は波形メモリWMに記憶されている。説明を簡単にするために、図10に示す例では、各ピッチマーク値は整数であるが、各ピッチマーク値が小数部を含んでもよい。また、原音の中間部にてピッチが変化していても良い。
CPU12aの動作は第1モードと同じであるので、その説明を省略し、音源回路16の発音動作について説明する。第2モードにおいては、図11に示すように、音声入力装置18及びリングバッファRBは利用されない。また、第2モードでは、一組の発音チャンネルCH(n),CH(n+1),CH(n+2),CH(n+3)を用いて1つの再生音を生成する。具体的には、発音チャンネルCH(n+1),CH(n+2),CH(n+3)が再生音の一部の音(以下、グレインGRi=1,2,・・・と呼ぶ)をそれぞれ生成し、発音チャンネルCH(n)は発音チャンネルCH(n+1),CH(n+2),CH(n+3)にて生成されたグレインを加算して1つの再生音を生成してミキサー部MXへ供給する。したがって、第2モードでは、発音チャンネルCH(n+1),CH(n+2),CH(n+3)のフィルタ回路FLT(n+1),FLT(n+2),FLT(n+3)及び音量制御回路VOL(n+1),VOL(n+2),VOL(n+3)は利用されない。また、全ての発音チャンネルを第2モードとして動作させると、64個の音を同時に再生可能である。以下の説明では、上記の一組の発音チャンネルCH(n),CH(n+1),CH(n+2),CH(n+3)をトラックTKと呼ぶ。
つぎに、第2モードにおける音源回路16の動作の概略を説明する。各グレインGRiは、原音の波形データの一部の区間であって、基本音の2周期分の長さに相当する区間(以下、セグメントSGi=0,1,2,・・・と呼ぶ)に対して図4Aに示すような窓関数を適用して形成される波形データによって表わされる音に相当する。図10に示すように、セグメントSGiの先頭及び末尾のアドレスは、いずれかのピッチマーク値に一致する。したがって、セグメントSGiの中央のアドレスも、いずれかのピッチマーク値に一致する。以下の説明において、セグメントSGiの中央に位置するピッチマークを「中央のピッチマーク」と呼ぶ。また、セグメントSGiの前半部分とセグメントSGi―1の後半部分とが同一となるように各セグメントSGiが原音の波形データから切り出される。
図12に示すように、発音チャンネルCH(n+1),CH(n+2),CH(n+3)は、循環的に動作して、各グレインGRiを生成する。上記のように、グレインGR0を除く各グレインGRiの先頭は、原音の中間部(先頭以外の部分)に相当する。本実施形態では、先頭のサンプル値を除くサンプル値は圧縮されているので、発音チャンネルCH(n+1),CH(n+2),CH(n+3)がグレインを再生し始める際に、そのグレインの先頭のサンプル値を計算する必要がある。そこで、発音チャンネルCH(n)は、サンプリング期間ごとに、原音の長さに対する再生音の長さの比率を表すストレッチ率αに応じて読み出しアドレスを進める。そして、その読み出しアドレスに対応するサンプル値を計算するために必要なサンプル値を復元する。制御部CTは、発音チャンネルCH(n)の読み出しアドレスが先頭アドレスにピッチマーク値を加算したアドレスを超えたサンプリング期間において、そのピッチマーク値の整数部の値に先頭アドレスを加算したアドレスに対応するサンプル値をサンプルバッファSB(CT)に記憶するとともに、そのピッチマーク値を目標値レジスタTR(CT)に記憶する。なお、図12におけるサンプルバッファSBの欄に記載されている数値は、サンプルバッファSB(CT)に記憶されているサンプル値が対応するグレインのインデックスiを表す。つまり、「i」と記載されている区間においてサンプルバッファSB(CT)に記憶されているサンプル値は、グレインGRiを生成開始する際に用いられる。そして、制御部CTは、発音チャンネルCH(n+1),CH(n+2),CH(n+3)のうちの1つの発音チャンネル(例えば、発音チャンネルCH(n+1))にグレインを生成開始させる際に、サンプルバッファSB(CT)に記憶されているサンプル値と目標値レジスタTR(CT)に記憶されているピッチマーク値とを発音チャンネルCH(n+1)に供給する。発音チャンネルCH(n+1)は、制御部CTから供給されたサンプル値とピッチマーク値とを用いた線形補間演算により、前記供給されたピッチマークに対応するサンプル値を求める。このようにして、発音チャンネルCH(n+1)にて生成開始するグレインを生成するために用いられるセグメントが、制御部CTによって指定される。なお、詳しくは後述するように、発音チャンネルCH(n+1),CH(n+2),CH(n+3)のうち、グレインを再生開始する発音チャンネルは制御部CTによって選択される。また、その再生開始タイミングは、ピッチ倍率βに応じて制御部CTによって制御される。具体的には、1つのグレインが生成開始されてから次のグレインが生成開始されるまでの時間は、ピッチ倍率β、及び差分値dpm(ピッチマーク間のサンプル数)に応じて決定される。また、各グレインの時間軸方向の長さは、フォルマント設定操作子の指示値、エンベロープ信号、低周波信号などに基づいて計算された原音のフォルマント周波数に対する再生音のフォルマント周波数の倍率を表すフォルマント倍率γの逆数、及び差分値dpmに応じて決定される。
つぎに、制御部CTの制御シーケンスについて具体的に説明する。制御部CTは、CPU12aから発音開始情報(例えば、ノートオン情報)を含む演奏操作情報を入力すると、図13A,13B,13Cに示す制御シーケンスに従って動作する。制御部CTは、ステップS400にて動作を開始し、ステップS401にて、4つの発音チャンネルを確保する。以下、前記確保された発音チャンネルを発音チャンネルCH(n),CH(n+1),CH(n+2),CH(n+3)と表記する。次に、制御部CTは、ステップS402にて、初期化処理を実行する。具体的には、制御部CTは、読み出しアドレスが先頭アドレスにピッチマーク値を加算したアドレスを超えたか否かを判定するために用いる目標値tvを「0」に設定する。つまり、制御部CTは、目標値レジスタTR(CT)に「0」を書き込む。また、制御部CTは、発音チャンネルCH(n)を介して、先頭のサンプル値を読み込んで、サンプルバッファSB(CT)に記憶する。また、制御部CTは、サンプルカウンタCs (CT)のカウント値ts (CT)を「0」に設定する。また、制御部CTは、発音チャンネルCH(n+1),CH(n+2),CH(n+3)の動作状態を表わす状態フラグSFn+1 (CT),SFn+2 (CT),SFn+3 (CT)を「休止中」に設定する。
つぎに、制御部CTは、ステップS403にて、エンベロープ発生回路及び低周波発振器を動作させ、前記入力した演奏操作情報及び前記演奏操作情報入力する前に入力した設定情報(以下、単に演奏操作情報及び設定情報という)に含まれる各種エンベロープ信号を規定するパラメータ及び各種低周波信号を規定するパラメータに従ったエンベロープ信号及び低周波信号を発生開始させる。
つぎに、制御部CTは、ステップS404にて、先頭アドレスを発音チャンネルCH(n)に供給して発音チャネルCH(n)の動作を開始させ、ステップS405にて、状態フラグSFn (CT)を「発音中」に設定する。
つぎに、制御部CTは、ステップS406にて、第1モードと同様に、フィルタパラメータを生成してフィルタ回路FLT(n)に供給する。つぎに、制御部CTは、ステップS407にて、第1モードと同様に、音量パラメータを計算し、音量制御回路VOLに供給する。なお、第2モードにおいても、設定情報は、発音中であっても変更され得る。また、制御部CTは、音長設定操作子、ピッチ設定操作子及びフォルマント設定操作子の各指示値に応じて、エンベロープ信号及び低周波信号を変更可能である。
つぎに、制御部CTは、ステップS408にて、音長設定操作子の指示値に基づいて、ストレッチ率αを計算し、その逆数である再生速度倍率v(=1/α)を発音チャンネルCH(n)に供給する。つぎに、制御部CTは、ステップS409にて、カウント値ts (CT)を更新する。すなわち、サンプルカウンタCs (CT)のカウント値ts (CT)に再生速度倍率vを加算する。ただし、最初のサンプリング期間における再生速度倍率vの値は「0」に設定される。なお、各サンプリング期間における、サンプルカウンタCs (n)のカウント値ts (n)とサンプルカウンタCs (CT)のカウント値ts (CT)は同一である。また、最初のサンプリング期間においては、カウント値ts (CT)及びカウント値ts (n)は「0」である。
つぎに、制御部CTは、ステップS410にて、読み出しアドレスが、先頭アドレスにピッチマーク値を加算したアドレスを超えたか否かを判定する。具体的には、サンプルカウンタCs (CT)のカウント値ts (CT)が目標値tvを超えたか否かを判定する。カウント値ts (CT)が目標値tvを超えていない場合には、制御部CTは、「No」と判定して、後述のステップS412に処理を進める。一方、カウント値ts (CT)が目標値tvを超えた場合には、制御部CTは、「Yes」と判定して、ステップS411にて、発音チャンネルCH(n)のデコード回路DEC(n)から、目標値tvの整数部の値(アドレス)に対応したサンプル値を取得してサンプルバッファSB(CT)に書き込んで記憶するとともに、目標値レジスタTR(CT)に前記目標値tvを書き込んで記憶する。つぎに、制御部CTは、ステップS412にて目標値tvを更新する。つまり、制御部CTは、波形メモリWMから次のピッチマーク値(現在の読み出しアドレスの時間軸方向後側に隣接するピッチマーク値)を読み出す。そして、制御部CTは、前記読み出したピッチマーク値を目標値レジスタTR(CT)に書き込んで記憶する。
つぎに、制御部CTは、ステップS413にて、フォルマント倍率γ(読み出しレート)を発音チャンネルCH(n+1),CH(n+2),CH(n+3)のうちの発音中(「フェードイン中」又は「フェードアウト中」)である全ての発音チャンネルに供給する。なお、第2モード(後述する第3モード及び第4モードに関しても同様)においては、発音チャンネルCH(n+1),CH(n+2),CH(n+3)のために設けられてはいるが実際は利用されないリソース(具体的には、ピッチに関するエンベロープ信号及び低周波信号を生成するエンベロープ発生回路及び低周波発振器)が存在する。そこで、このエンベロープ発生回路及び低周波発振器を流用し、再生音のフォルマント周波数を時間経過に従って変化させるエンベロープ信号及び低周波信号を生成する。
つぎに、制御部CTは、ステップS414にて、再生時刻カウンタCT (CT)のカウント値tT (CT)を更新する。すなわち、演奏操作情報及び設定情報に含まれるピッチに関するパラメータ(例えば、ノート番号NN及びピッチ設定操作子の指示値など)、並びにピッチを変化させるエンベロープ信号及び低周波信号を合成して得られたピッチ情報に基づいて再生音のピッチを決定する。そして、原音のピッチOPに対する前記決定した再生音のピッチの倍率を表わすピッチ倍率βを算出して、再生時刻カウンタCT (CT)のカウント値tT (CT)に加算する。ただし、最初のサンプリング期間においては、カウント値tT (CT)が「0」に設定される。
つぎに、制御部CTは、ステップS415にて、カウント値tT (CT)が次のピッチマーク値と現在の目標値tvとの差分値dpmを超えたか否かを判定する。カウント値tT (CT)が差分値dpmを超えていない場合には、後述するステップS419に処理を進める。一方、カウント値tT (CT)が差分値dpmを超えた場合には、制御部CTは、ステップS416にて、カウント値tT (CT)をリセット(カウント値tT (CT)から差分値dpmを減算)する。つぎに、制御部CTは、ステップS417にて、状態フラグSFn+1 (CT),SFn+2 (CT),SFn+3 (CT)を参照して、休止中の発音チャンネルのうちの1つの発音チャンネルを選択する。最初のサンプリング期間においては、制御部CTは、ステップS415において、カウント値tT (CT)が差分値dpmを超えたと判定する。そして、制御部CTは、ステップS417において、休止中の発音チャンネルのうちの1つの発音チャンネルを選択する。例えば、制御部CTは、休止中の発音チャンネルのうち、インデックスが最も小さい発音チャンネルを選択する。最初のサンプリング期間においては、カウント値tT (CT)が「0」であって、発音チャンネルCH(n+1),CH(n+2),CH(n+3)はいずれも休止中であるので、発音チャンネルCH(n+1)を選択する。
つぎに、制御部CTは、ステップS418にて、サンプルバッファSB(CT)及び目標値レジスタTR(CT)にそれぞれ記憶されているサンプル値及び目標値tv、並びにフォルマント倍率γ及び差分値dpmを前記選択した発音チャンネルに供給して発音開始させる。発音チャンネルCH(n+1),CH(n+2),CH(n+3)の動作については後述する。そして、制御部CTは、前記発音開始させた発音チャンネルに対応した状態フラグを、ステップS419にて、「フェードイン中」に設定する。
つぎに、制御部CTは、ステップS420にて、発音チャンネルCH(n+1),CH(n+2),CH(n+3)のうち発音中である発音チャンネルを選択し、前記選択した発音チャンネルにおける読み出しアドレスが、セグメントの中央のピッチマークに達したか否かを判定する。前記読み出しアドレスが前記中央のピッチマークよりも前方に位置するときは、制御部CTは、「No」と判定して、ステップS422に処理を進める。一方、前記読み出しアドレスが、前記中央のピッチマークに達していれば、制御部CTは、「Yes」と判定して、前記選択した発音チャンネルの動作状態を表わす状態フラグを、ステップS421にて、「フェードアウト中」に設定する。
つぎに、制御部CTは、ステップS422にて、発音チャンネルCH(n+1),CH(n+2),CH(n+3)のうち「フェードアウト中」である発音チャンネルを選択し、前記選択した発音チャンネルにおける読み出しアドレスが、セグメントの終端に達したか否かを判定する。読み出しアドレスが未だセグメントの中間部に位置していれば、制御部CTは、「No」と判定して、ステップS425に処理を進める。一方、読み出しアドレスがセグメントの終端に達していれば、制御部CTは、「Yes」と判定して、ステップS423にて、前記選択した発音チャンネルの動作を停止させ、ステップS424にて、前記選択した発音チャンネルの動作状態を表わす状態フラグを「休止中」に設定する。
つぎに、制御部CTは、ステップS425にて、発音チャンネルCH(n)における読み出しアドレスが末尾のセグメントに達したか否かを判定する。読み出しアドレスが末尾のセグメントに到達した場合には、制御部CTは、ステップS426にて、発音チャンネルCH(n)の動作を停止させるとともにフラグSFn (CT)を「休止中」に設定する。また、制御部CTは、発音チャンネルCH(n+1),CH(n+2),CH(n+3)の読み出しアドレスを監視し、読み出しアドレスがセグメントの末尾アドレスに到達した発音チャンネルの動作を停止させるとともに状態フラグを「休止中」に設定する。全ての発音チャンネルCH(n+1),CH(n+2),CH(n+3)の読み出しアドレスがセグメントの末尾アドレスに到達したとき、制御部CTは、トラックTKの制御を終了する。一方、発音チャンネルCH(n)の読み出しアドレスが末尾のセグメントに到達していない場合には、制御部CTは、次のサンプリング期間に、ステップS406〜ステップS425からなる処理を実行する。
つぎに、発音チャンネルCH(n)の制御シーケンスについて具体的に説明する。発音チャンネルCH(n)は、制御部CTから動作開始指示されると、図14に示す制御シーケンスに従って動作する。発音チャンネルCH(n)は、ステップS500にて動作を開始する。つぎに、読み込み回路DRD(n)は、ステップS501にて、第1モードにおける初期化処理と同様の処理を実行する。ただし、第1モードとは異なり、デコード回路DEC(n)に記憶された先頭のサンプル値が制御部CTに供給される。
つぎに、読み込み回路DRD(n)は、ステップS502にて、サンプルカウンタCs (n)のカウント値ts (n)に再生速度倍率vを加算し、さらにその加算結果を先頭アドレスに加算して読み出しアドレスを更新する。
つぎに、読み出し回路DRD(n)及びデコード回路DEC(n)は、ステップS503にて、第1モードと同様に協働して、前記読み出しアドレスに相当するサンプル値を求める。また、上記のように、カウント値ts (CT)が目標値tvを超えたサンプリング期間においては、デコード回路DEC(n)は、目標値tvの整数部に相当するサンプル値を制御部CTに供給する。つぎに、重畳加算回路OLA(n)の加算回路ADD(n)は、ステップS504にて、他の発音チャンネルCH(n+1),CH(n+2),CH(n+3)の加算回路ADD(n+1),ADD(n+2),ADD(n+3)から供給されたサンプル値を加算して、フィルタ回路FLT(n)に供給する。
つぎに、フィルタ回路FLT(n)及び音量制御回路VOL(n)は、ステップS505及びステップS506にて、第1モードと同様の処理をそれぞれ実行する。2番目のサンプリング期間以降の各サンプリング期間においては、発音チャンネルCH(n)は、上記のステップS502〜S506からなる処理を実行する。
つぎに、発音チャンネルCH(n+1)の制御シーケンスについて説明する。発音チャンネルCH(n+2),CH(n+3)の動作は、発音チャンネルCH(n+1)の動作と同様であるので、説明を省略する。
発音チャンネルCH(n+1)は、制御部CTから動作を開始するよう指示されると、図15に示す制御シーケンスに従って動作する。発音チャンネルCH(n+1)は、ステップS600にて動作を開始する。つぎに、読み込み回路DRD(n+1)は、第1モードにおける初期化処理と同様の処理を実行する。ただし、初期化処理において、読み込み回路DRD(n+1)及びデコード回路DEC(n+1)は、次のようにして、グレインを生成するためのセグメントの先頭のサンプル値を計算する。まず、読み込み回路DRD(n+1)は、制御部CTから供給されたピッチマーク値及び前記ピッチマーク値の整数部の値のアドレスに対応するサンプル値を読み込んで、デコード回路DEC(n+1)に供給する。つぎに、読み込み回路DRD(n+1)は、前記ピッチマークの整数部に「1」を加算した値に相当するアドレスの圧縮データを、キャッシュ回路CMを介して波形メモリWMから読み込んで、前記制御部CTから入力したピッチマーク及びサンプル値とともにデコード回路DEC(n+1)に供給する。そして、デコード回路DEC(n+1)は、前記読み込み回路DRD(n+1)から入力したデータを用いた線形補間演算により、前記ピッチマーク値に対応するサンプル値を求める。このサンプル値が、再生開始するグレインを生成するためのセグメントの先頭のサンプル値に相当する。また、初期化処理において、重畳加算回路OLA(n+1)の乗算回路MUL(n+1)は、位相カウンタCp (n+1)のカウント値tp (n+1)をリセットする。
つぎに、読み込み回路DRD(n+1)は、ステップS602にて、サンプルカウンタCs (n+1)のカウント値ts (n+1)にフォルマント倍率γ(読み出しレート)を加算し、さらにその加算結果を前記制御部CTから入力したピッチマーク値に加算することにより、読み出しアドレスを更新する。
つぎに、読み出し回路DRD(n+1)及びデコード回路DEC(n+1)は、ステップS603にて、第1モードと同様に協働して、前記算出した読み出しアドレスに相当するサンプル値を求め、乗算回路MUL(n+1)に供給する。
つぎに、乗算回路MUL(n+1)は、ステップS604にて、位相カウンタCp (n+1)のカウント値tp (n+1)を更新する。すなわち、状態フラグSFn+1 (CT)が「フェードイン中」に設定されているときは、位相カウンタCp (n+1)のカウント値tp (n+1)に、フォルマント倍率γを差分値dpmで除した値(=γ/dpm)を加算する。一方、乗算回路MUL(n+1)は、状態フラグSFn+1 (CT)が「フェードアウト中」に設定されているときは、ステップS604にて、位相カウンタCp (n+1)のカウント値tp (n+1)からフォルマント倍率γを減算する。つぎに、乗算回路MUL(n+1)は、ステップS605にて、カウント値tp (n+1)に対応する係数WD(tp (n+1))を計算する。例えば、係数WD(tf (n+1))は、「0.5−0.5cos(π×tp (n+1))」という演算式を用いて計算される(図4A参照)。つぎに、乗算回路MUL(n+1)は、ステップS606にて、前記計算した係数WD(tp (n+1))を、前記デコード回路DEC(n+1)から入力したサンプル値に乗算して、加算回路ADD(n+1)に供給する。これにより、フォルマント倍率γに応じて伸縮したセグメントの長さに窓関数の幅を合致させることができる。つぎに、重畳加算回路OLA(n+1)の加算回路ADD(n+1)は、ステップS607にて、発音チャンネルCH(n)の重畳加算回路OLA(n)に供給する。
発音チャンネルCH(n+1)は、2番目のサンプリング期間以降のサンプリング期間においては、ステップS602〜S607からなる処理を実行する。
つぎに、再生音の長さ、ピッチ及びフォルマントが原音の長さ、ピッチ及びフォルマントと同じ場合に発音チャンネルCH(n+1),CH(n+2),CH(n+3)にて生成されるグレインGRiの生成開始タイミング、及びグレインGRiとそのグレインGRiを生成するために用いられるセグメントSGiとの関係について説明する。なお、図16及び図17中の各数値は、グレインの元であるセグメントのインデックスiを表す。この場合、図16に示すように、まず、発音チャンネルCH(n+1)がグレインGR0を再生し始める。そして、発音チャンネルCH(n+1)の再生位置がピッチマークに達すると、発音チャンネルCH(n+2)がグレインGR1を再生し始める。発音チャンネルCH(n+2)の再生位置がピッチマークに達すると、発音チャンネルCH(n+3)がグレインGR2を再生し始める。このとき、発音チャンネルCH(n+1)は、グレインGR0の再生開始から2つ目のピッチマークに到達する。したがって、発音チャンネルCH(n+1)は、グレインGR0の再生を終了して、動作停止する。発音チャンネルCH(n+3)の再生位置がピッチマークに到達すると、発音チャネルCH(n+1)がグレインGR3を再生し始める。以降、上記の動作と同様に、発音チャンネルCH(n+1),CH(n+2),CH(n+3)が循環的に動作して、グレインGRi=4,5,6・・・が順に再生される。
つぎに、例えば、ストレッチ率αが「0.5」に設定されている場合の音源回路16の動作について説明する。この場合、同図に示すように、発音チャンネルCH(n+1),CH(n+2),CH(n+3)が循環的に動作して、グレインGRi=0,2,4,8,・・・が順に再生される。つまり、グレインGRiが1つおきに再生される。また、例えば、ストレッチ率αが「2」に設定されている場合の音源回路16の動作について説明する。この場合、同図に示すように、発音チャンネルCH(n+1),CH(n+2),CH(n+3)が循環的に動作して、グレインGRi=0,0,1,1,2,2・・・の順に再生される。つまり、同一のセグメントSGiを用いて形成されたグレインGRiが2回ずつ連続して再生される。
また、例えば、ストレッチ率αが「0.7」に設定されている場合の音源回路16の動作について説明する。この場合、同図に示すように、発音チャンネルCH(n+1),CH(n+2),CH(n+3)が循環的に動作して、グレインGRi=0,1,2,4,5,7・・・の順に再生される。また、例えば、ストレッチ率αが「1.5」に設定されている場合の音源回路16の動作について説明する。この場合、同図に示すように、発音チャンネルCH(n+1),CH(n+2),CH(n+3)が循環的に動作して、グレインGRi=0,0,1,2,2,3・・・の順に再生される。
つぎに、再生音の長さ及びフォルマントを原音と同じ状態に維持したまま、再生音のピッチを原音のピッチとは異なるピッチに設定した場合に発音チャンネルCH(n+1),CH(n+2),CH(n+3)にて再生されるグレインGRiの系列及びそれらの再生開始タイミングについて説明する。この場合も、図17に示すように、発音チャンネルCH(n+1),CH(n+2),CH(n+3)が循環的に動作してグレインを再生する。そして、発音チャンネルCH(n+1),CH(n+2),CH(n+3)がグレインを再生し始めるタイミングの間隔(サンプリング期間数)が、ピッチマーク間のサンプル数(すなわち、差分値dpm)をピッチ倍率βで除した値に一致するように制御される。
例えば、同図に示す、ピッチ倍率βが「1.2」に設定されている場合においては、発音チャンネルCH(n+1)がグレインGR0を再生開始してから500個(=600/1.2)のサンプリング期間を経過すると、発音チャンネルCH(n+2)が、グレインGR0を再生し始める。発音チャンネルCH(n+2)がグレインGR0を再生開始してから500個のサンプリング期間を経過すると、発音チャンネルCH(n+3)がグレインGR1を再生開始し始める。
また、例えば、同図に示す、ピッチ倍率βが「0.6」に設定されている場合においては、発音チャンネルCH(n+1)がグレインGR0を再生開始してから1000個(=600/0.6)のサンプリング期間を経過すると、発音チャンネルCH(n+2)がグレインGR1を再生し始める。発音チャンネルCH(n+2)がグレインGR1を再生開始してから1000個のサンプリング期間を経過すると、発音チャンネルCH(n+3)がグレインGR2を再生し始める。
また、図16及び図17に示す例において、フォルマント倍率γを変更すると、各グレインGRiが時間軸方向に伸縮される。各グレインGRiを時間軸方向に縮めると、再生音のフォルマント周波数が高くなる。一方、各グレインGRiを時間軸方向に伸長すると、再生音のフォルマント周波数が低くなる。
(第3モード)
つぎに、動作モードが第3モードである場合の電子楽器DMの動作について説明する。第3モードでは、電子楽器DMとは別の分析装置により、原音を構成する各音のアタック位置(各音の発音開始タイミング)が予め検出され、波形の先頭から前記各アタック位置までのサンプル数(以下、アタックマーク値と呼ぶ)が予め計算された波形データを用いる(図18参照)。アタックマーク値は、波形メモリWMに記憶されている。上記のように、1つの圧縮データは1つのサンプル値に対応しているので、アタックマーク値は原音の波形データにおける先頭アドレスからのオフセットアドレスに相当する。
つぎに、動作モードが第3モードである場合の電子楽器DMの動作について説明する。第3モードでは、電子楽器DMとは別の分析装置により、原音を構成する各音のアタック位置(各音の発音開始タイミング)が予め検出され、波形の先頭から前記各アタック位置までのサンプル数(以下、アタックマーク値と呼ぶ)が予め計算された波形データを用いる(図18参照)。アタックマーク値は、波形メモリWMに記憶されている。上記のように、1つの圧縮データは1つのサンプル値に対応しているので、アタックマーク値は原音の波形データにおける先頭アドレスからのオフセットアドレスに相当する。
CPU12aの動作は第1モードと同じであるので、その説明を省略し、音源回路16の発音動作について説明する。まず、第3モードにおける音源回路16の動作の概略を説明する。第3モードにおいても、第2モードと同様に、音声入力装置18及びリングバッファRBは利用されない(図11参照)。また、トラックTK(一組の発音チャンネルCH(n),CH(n+1),CH(n+2),CH(n+3))を用いて1つの再生音を生成する。すなわち、発音チャンネルCH(n+1),CH(n+2),CH(n+3)がグレインをそれぞれ生成する。第2モードと同様に、上記3つの発音チャンネルCH(n+1),CH(n+2),CH(n+3)は循環的に動作する。詳しくは後述するように、各グレインはクロスフェードするように再生されるので、そのクロスフェード期間中においては、2つの発音チャンネルが同時に動作する。また、発音チャンネルCH(n)は発音チャンネルCH(n+1),CH(n+2),CH(n+3)にて生成されたグレイン(実際にはいずれか2つの発音チャンネルにて生成されたグレイン)を加算して1つの再生音を生成してミキサー部MXへ供給する。したがって、第3モードにおいても、発音チャンネルCH(n+1),CH(n+2),CH(n+3)のフィルタ回路FLT(n+1),FLT(n+2),FLT(n+3)及び音量制御回路VOL(n+1),VOL(n+2),VOL(n+3)は利用されない。また、全ての発音チャンネルを第3モードとして動作させると、64個の音を同時に再生可能である。
各グレインは、次のようにして形成される。まず、第3モードでは、隣接する2つのアタック位置の間の部分が複数のセグメントSGi=0,1,2,・・・に分割される。詳しくは後述するように、各セグメントの長さがCPU12aによって指定された基準長又は前記基準長に基づいて計算された長さになるように、原音の波形データから各セグメントが切り出される。そして、各グレインの長さは、ストレッチ率α及びピッチ倍率βによって決定される。例えば、図19に示すように、グレインは、1つのセグメントの先頭から中間部までに相当する場合もある。例えば、同図に示すように、ピッチ倍率βが「1」であって、ストレッチ率αが「1」より小さい場合には、各セグメントの途中でフェードアウトが開始されるので、各セグメントの末尾部分が切り詰められる。また、グレインは、同図に示すように、隣接する複数のセグメントを接続して形成された波形データの先頭から中間部までに相当する場合もある。例えば、同図に示すように、ピッチ倍率βが「1」であって、ストレッチ率αが「1」より大きい場合には、発音チャンネルCH(n+1)は、セグメントSGiの再生を開始し、セグメント境界を超えてセグメントSGi+1の途中まで再生するとフェードアウトを開始する。そして、発音チャンネルCH(n+2)は、発音チャンネルCH(n+1)がフェードアウトを開始したタイミングにてセグメントSGi+1の再生を開始する。このように、各セグメントの先頭部分が繰り返される。なお、図19中の各数値は、セグメントのインデックスiを表す。
また、第2モードと同様に、発音チャンネルCH(n)は、サンプリング期間ごとに、ストレッチ率αに応じて読み出しアドレスを進め、その読み出しアドレスに相当するサンプル値を計算するために必要なサンプル値を復元する。そして、発音チャンネルCH(n)の読み出しアドレスがセグメントの境界を超えた(つまり、カウント値ts (n)が目標値tvを超えた)サンプリング期間において、前記目標値tvを目標値レジスタTR(CT)に書き込んで記憶するとともに、前記セグメントの境界(前側のセグメントの末尾アドレス)に対応するサンプル値を制御部CTのサンプルバッファSB(CT)に記憶する。制御部CTは、発音チャンネルCH(n+1),CH(n+2),CH(n+3)のうちの休止中の発音チャンネルを選択し、サンプルバッファSB(CT)及び目標値レジスタTR(CT)に記憶されている両データを前記選択した発音チャンネルに供給して、グレインを再生開始させる。
つぎに、制御部CTの制御シーケンスについて具体的に説明する。制御部CTは、CPU12aから発音開始情報(例えば、ノートオン情報)を含む演奏操作情報を入力すると、図20A,20B,20Cに示す制御シーケンスに従って動作する。制御部CTは、ステップS700にて動作を開始し、ステップS701にて、4つの発音チャンネルを確保する。以下、前記確保された発音チャンネルを発音チャンネルCH(n),CH(n+1),CH(n+2),CH(n+3)と表記する。次に、制御部CTは、ステップS702にて、初期化処理を実行する。具体的には、制御部CTは、読み出しアドレスがセグメント境界を超えたか否かを判定するために用いる目標値tvを「0」に設定する。つまり、目標値レジスタTR(CT)に「0」を書き込む。また、制御部CTは、発音チャンネルCH(n)を介して、先頭のサンプル値を読み込んで、サンプルバッファSB(CT)に記憶する。また、制御部CTは、サンプルカウンタCs (CT)のカウント値ts (CT)を「0」に設定する。また、発音チャンネルCH(n+1),CH(n+2),CH(n+3)の動作状態を表わす各状態フラグSFn+1 (CT),SFn+2 (CT),SFn+3 (CT)を「休止中」に設定する。
つぎに、制御部CTは、ステップS703にて、エンベロープ発生回路及び低周波発振器を動作させ、前記入力した演奏操作情報及び前記演奏操作情報入力する前に入力した設定情報(以下、単に演奏操作情報及び設定情報という)に含まれる各種エンベロープ信号を規定するパラメータ及び各種低周波信号を規定するパラメータに従ったエンベロープ信号及び低周波信号を発生開始させる。
つぎに、制御部CTは、ステップS704にて、先頭アドレスを発音チャンネルCH(n)に供給して発音チャネルCH(n)の動作を開始させる。ステップS705にて、状態フラグSFn (CT)を「発音中」に設定する。
つぎに、制御部CTは、ステップS706にて、第1モードと同様に、フィルタパラメータを生成してフィルタ回路FLT(n)に供給する。つぎに、制御部CTは、ステップS707にて、第1モードと同様に、音量パラメータを計算し、音量制御回路VOL(n)に供給する。なお、第2モードにおいても、設定情報は、発音中であっても変更され得る。また、制御部CTは、音長設定操作子及びピッチ設定操作子の各指示値に応じて、エンベロープ信号及び低周波信号を変更可能である。
つぎに、制御部CTは、ステップS708にて、音長設定操作子の指示値に基づいて、ストレッチ率αを計算し、その逆数である再生速度倍率v(=1/α)を発音チャンネルCH(n)に供給する。つぎに、制御部CTは、ステップS709にて、カウント値ts (CT)を更新する。すなわち、サンプルカウンタCs (CT)のカウント値ts (CT)に再生速度倍率vを加算する。ただし、最初のサンプリング期間における再生速度倍率vの値は「0」に設定される。なお、各サンプリング期間における、サンプルカウンタCs (n)のカウント値ts (n)とサンプルカウンタCs (CT)のカウント値ts (CT)は同一である。また、最初のサンプリング期間においては、カウント値ts (CT)及びカウント値ts (n)は「0」である。
つぎに、制御部CTは、ステップS710にて、ピッチ倍率β(読み出しレート)を発音チャンネルCH(n+1),CH(n+2),CH(n+3)のうちの発音中(「フェードイン中」又は「フェードアウト中」)である全ての発音チャンネルに供給する。
次に制御部CTは、ステップS711にて、クロスフェード長xfl(言い換えれば、クロスフェード特性(つまり、遷移の速さ))を更新する(図4B参照)。クロスフェード長xflは、CPU12aから供給された基準長を、原音の特徴、再生速度倍率v、ピッチ倍率βなどに応じて調整することにより決定される。
つぎに、制御部CTは、ステップS712にて、サンプルカウンタCs (CT)のカウント値ts (CT)が目標値tvを超えたか否か(つまり、発音チャンネルCH(n)の読み出しアドレスがセグメントの境界を超えたか否か)を判定する。カウント値ts (CT)が目標値tvを超えていない場合には、制御部CTは、「No」と判定して、後述のステップS719に処理を進める。一方、カウント値ts (CT)が目標値tvを超えた場合には、制御部CTは、「Yes」と判定して、ステップS713にて、現在グレインを再生している発音チャンネル(つまり、状態フラグが「フェードイン中」である発音チャンネル)を選択し、前記選択した発音チャンネルをフェードアウトさせる。そして、ステップS714にて、前記選択した発音チャンネルに対応する状態フラグを「フェードアウト中」に設定する。
つぎに、制御部CTは、ステップS715にて、発音チャンネルCH(n)のデコード回路DEC(n)から、目標値tvの整数部の値に先頭アドレスを加算したアドレスに対応したサンプル値(セグメント境界の直前のサンプル値)、及び目標値tv(セグメント境界のアドレス)を取得する。つぎに、制御部CTは、ステップS716にて、状態フラグSFn+1 (CT),SFn+2 (CT),SFn+3 (CT)を参照して、休止している発音チャンネル(つまり、状態フラグが「休止中」である発音チャンネル)を選択し、前記選択した発音チャンネルに前記決定したクロスフェード長xfl、並びに前記取得したサンプル値及び目標値tvを供給して、グレインを再生開始させる。そして、制御部CTは、前記ステップS716において選択した発音チャンネルに対応する状態フラグを、ステップS717にて、「フェードイン中」に設定する。
つぎに、制御部CTは、ステップS718にて目標値tvを更新する。具体的には、制御部CTは、CPU12aから基準長を取得して、目標値tvに加算する。これにより、次のセグメントの長さが決定される。ただし、現在の読み出しアドレスから次のアタック位置(現在の読み出しアドレスの時間軸方向後側に隣接するアタック位置)までのオフセットアドレスが所定の閾値(例えば、前記オフセットアドレスが前記の16倍)よりも小さいとき、次のように目標値tvを更新してもよい。具体的には、現在の目標値tvから次のアタックマークまでの区間を分割して形成される各セグメントの長さが基準長に最も近い整数値になるように次の目標値tvを設定する。言い換えれば、隣接するセグメントの長さの差が大きく変化することを抑制できる。また、クロスフェードがアタック位置に重ならないようにするとよい(特開2002−006899参照)。また、アタック位置が切り詰められたり、アタック位置が繰り返されたりすることのないように、セグメントの境界を設定しても良い。例えば、図19に示すように、アタックマークとセグメントの境界とを敢えてずらしても良い。
つぎに、制御部CTは、ステップS719にて、位相カウンタCp (n+1),Cp (n+2),Cp (n+3)のカウント値を参照し、フェードアウトが完了した発音チャンネルが存在するか否かを判定する。フェードアウトが完了した発音チャンネルが無ければ、制御部CTは、「No」と判定して、ステップS721に処理を進める。一方、フェードアウトが完了した発音チャンネルがあれば、制御部CTは、「Yes」と判定し、ステップS720にて、前記フェードアウトした完了した発音チャンネルの動作を停止させ、ステップS721にて、前記発音チャンネルに対応する状態フラグを「休止中」に設定する。
つぎに、制御部CTは、ステップS722にて、発音チャンネルCH(n)における読み出しアドレスが末尾のセグメントに達したか否かを判定する。読み出しアドレスが末尾のセグメントに到達した場合には、制御部CTは、ステップS723にて、発音チャンネルCH(n)の動作を停止させるとともにフラグSFn (CT)を「休止中」に設定する。また、制御部CTは、発音チャンネルCH(n+1),CH(n+2),CH(n+3)の読み出しアドレスを監視し、読み出しアドレスがセグメントの末尾アドレスに到達した発音チャンネルの動作を停止させるとともに状態フラグを「休止中」に設定する。全ての発音チャンネルCH(n+1),CH(n+2),CH(n+3)の読み出しアドレスがセグメントの末尾アドレスに到達したとき、制御部CTは、トラックTKの制御を終了する。一方、発音チャンネルCH(n)の読み出しアドレスが末尾のセグメントに到達していない場合には、制御部CTは、次のサンプリング期間に、ステップS705〜ステップS722からなる処理を実行する。
発音チャンネルCH(n)の制御シーケンスは、第2モードと同様である。ただし、読み出しアドレスがセグメント境界を超えたとき、発音チャンネルCH(n)は、セグメント境界の直前のサンプル値、及びセグメント境界のアドレスを制御部CTに供給する。
つぎに、発音チャンネルCH(n+1)の制御シーケンスについて説明する。発音チャンネルCH(n+2),CH(n+3)の動作は、発音チャンネルCH(n+1)の動作と同様であるので、説明を省略する。
発音チャンネルCH(n+1)は、制御部CTから動作を開始するよう指示されると、図21に示す制御シーケンスに従って動作する。発音チャンネルCH(n+1)は、ステップS800にて動作を開始する。つぎに、読み込み回路DRD(n+1)は、ステップS801にて、第1モードにおける初期化処理と同様の処理を実行する。ただし、初期化処理において、読み込み回路DRD(n+1)及びデコード回路DEC(n+1)は、次のようにして、グレインを生成するためのセグメントの先頭(境界)のサンプル値を計算する。まず、読み込み回路DRD(n+1)は、制御部CTから供給されたセグメント境界のアドレス及び前記セグメント境界の直前のサンプル値を読み込んで、デコード回路DEC(n)に供給する。つぎに、読み込み回路DRD(n)は、前記セグメント境界のアドレスの整数部に「1」を加算した値に相当するアドレスの圧縮データを、キャッシュ回路CMを介して波形メモリWMから読み込んで、デコード回路DEC(n)に供給する。そして、デコード回路DEC(n+1)は、前記読み込み回路DRD(n+1)から入力したデータを用いた線形補間演算により、前記セグメント境界に対応するサンプル値を求める。このサンプル値が、再生開始するグレインを生成するためのセグメントの先頭のサンプル値に相当する。また、初期化処理において、重畳加算回路OLA(n+1)の乗算回路MUL(n+1)は、位相カウンタCp (n+1)のカウント値tp (n+1)をリセットする。
つぎに、読み込み回路DRD(n+1)は、ステップS802にて、サンプルカウンタCs (n+1)のカウント値ts (n+1)にピッチ倍率β(読み出しレート)を加算し、さらにその加算結果を前記制御部CTから入力したセグメント境界のアドレスに加算して読み出しアドレスを算出する。
つぎに、読み出し回路DRD(n+1)及びデコード回路DEC(n+1)は、ステップS803にて、第1モードと同様に協働して、前記算出した読み出しアドレスに相当するサンプル値を線形補間演算により求める。デコード回路DEC(n+1)は、前記復元したサンプル値を重畳加算回路OLA(n+1)の乗算回路に供給する。
つぎに、乗算回路MUL(n+1)は、ステップS804にて、位相カウンタCp (n+1)のカウント値tp (n+1)を更新する。すなわち、乗算回路MUL(n+1)は、状態フラグSFn+1 (CT)が「フェードイン中」に設定されているときは、位相カウンタCp (n+1)のカウント値tp (n+1)にクロスフェード長xflの逆数を加算する。ただし、カウント値tp (n+1)の上限は「1」である。一方、乗算回路MUL(n+1)は、状態フラグSFn+1 (CT)が「フェードアウト中」に設定されているときは、カウント値tp (n+1)からクロスフェード長xflの逆数を減算する。つぎに、乗算回路MUL(n+1)は、ステップS805にて、カウント値tp (n+1)を、前記デコード回路DEC(n+1)から入力したサンプル値に乗算して、加算回路ADD(n+1)に供給する。つぎに、重畳加算回路OLA(n+1)の加算回路ADD(n+1)は、ステップS806にて、発音チャンネルCH(n)の重畳加算回路OLA(n)に供給する。
発音チャンネルCH(n+1)は、2番目のサンプリング期間以降のサンプリング期間においては、ステップS802〜S805からなる処理を実行する。なお、カウント値tp (n+1) ,tp (n+1) ,tp (n+1)の上限は「1」であるので、図4Bに示すように窓関数の形状は台形を呈する。
(第4モード)
つぎに、動作モードが第4モードである場合の電子楽器DMの動作について説明する。第4モードでは、図22に示すように、波形メモリWM及びキャッシュ回路CMは利用されない。信号処理部DPは、音声入力装置18から逐次供給される波形データをリングバッファRBに供給する。また、信号処理部DPは、音声入力装置18から逐次供給される前記波形データが表す音声のピッチをリアルタイムに検出してCPU12aに供給する。CPU12aは信号処理部DPから供給されたピッチデータに基づいて、第2モードと同様のピッチマーク値を計算する。すなわち、ピッチマーク値は、前記波形データを構成する各サンプル値が記憶されているリングバッファRBの記憶領域に対応づけられたアドレスであって、前記音声を構成する基本音の節に相当するアドレスを表す。ピッチマーク値は、制御部CTに供給される。トラックTKは、リングバッファRBに記憶された波形データ及び制御部CTから供給されたピッチマーク値を用いて、第2モードと同様に、1つの音を生成する。具体的には、トラックTKは、音声入力装置18に入力された音声のピッチ及び/又はフォルマントを変更した音(ハーモニー)を生成する。なお、この場合、第2モードとは異なり、リングバッファRBに記憶されているデータはサンプル値自体であって、圧縮データではない。そのため、第2モードとは異なり、圧縮データを用いてサンプル値を復元する必要がない。したがって、トラックTKを構成する発音チャンネルCH(n)を発音チャンネルCH(n+1),CH(n+2),CH(n+3)と同様に、グレインを再生する発音チャンネルとして用いてもよい。この場合、制御部CTのサンプルカウンタCs (CT)のカウント値ts (CT)がピッチマーク値を超えたとき、制御部CTがそのピッチマーク値を記憶すればよい。そして、発音チャンネルCH(n),CH(n+1),CH(n+2),CH(n+3)のうちの選択した発音チャンネルがグレインの再生を開始する際、前記記憶しておいたピッチマーク値を前記選択した発音チャンネルに供給すればよい。発音チャンネルは、グレインの再生を開始する際、制御部から供給されたピッチマーク値の整数部に相当するアドレスに記憶されているサンプル値及び前記整数部の値に「1」を加算した値に相当するアドレスに記憶されているサンプル値を読み込む。そして、発音チャンネルは、前記読み込んだ両サンプル値及び前記ピッチマーク値の小数部の値を用いた線形補間演算により、前記ピッチマーク値に対応するサンプル値を求めればよい。なお、第4モードにおいては、リングバッファRBに記憶された短い時間に相当する波形データを用いてタイムストレッチを実行することも可能であるが、実質的に有効な用途が無い。したがって、第4モードにおいては、ストレッチ率αは「1」に設定される。
つぎに、動作モードが第4モードである場合の電子楽器DMの動作について説明する。第4モードでは、図22に示すように、波形メモリWM及びキャッシュ回路CMは利用されない。信号処理部DPは、音声入力装置18から逐次供給される波形データをリングバッファRBに供給する。また、信号処理部DPは、音声入力装置18から逐次供給される前記波形データが表す音声のピッチをリアルタイムに検出してCPU12aに供給する。CPU12aは信号処理部DPから供給されたピッチデータに基づいて、第2モードと同様のピッチマーク値を計算する。すなわち、ピッチマーク値は、前記波形データを構成する各サンプル値が記憶されているリングバッファRBの記憶領域に対応づけられたアドレスであって、前記音声を構成する基本音の節に相当するアドレスを表す。ピッチマーク値は、制御部CTに供給される。トラックTKは、リングバッファRBに記憶された波形データ及び制御部CTから供給されたピッチマーク値を用いて、第2モードと同様に、1つの音を生成する。具体的には、トラックTKは、音声入力装置18に入力された音声のピッチ及び/又はフォルマントを変更した音(ハーモニー)を生成する。なお、この場合、第2モードとは異なり、リングバッファRBに記憶されているデータはサンプル値自体であって、圧縮データではない。そのため、第2モードとは異なり、圧縮データを用いてサンプル値を復元する必要がない。したがって、トラックTKを構成する発音チャンネルCH(n)を発音チャンネルCH(n+1),CH(n+2),CH(n+3)と同様に、グレインを再生する発音チャンネルとして用いてもよい。この場合、制御部CTのサンプルカウンタCs (CT)のカウント値ts (CT)がピッチマーク値を超えたとき、制御部CTがそのピッチマーク値を記憶すればよい。そして、発音チャンネルCH(n),CH(n+1),CH(n+2),CH(n+3)のうちの選択した発音チャンネルがグレインの再生を開始する際、前記記憶しておいたピッチマーク値を前記選択した発音チャンネルに供給すればよい。発音チャンネルは、グレインの再生を開始する際、制御部から供給されたピッチマーク値の整数部に相当するアドレスに記憶されているサンプル値及び前記整数部の値に「1」を加算した値に相当するアドレスに記憶されているサンプル値を読み込む。そして、発音チャンネルは、前記読み込んだ両サンプル値及び前記ピッチマーク値の小数部の値を用いた線形補間演算により、前記ピッチマーク値に対応するサンプル値を求めればよい。なお、第4モードにおいては、リングバッファRBに記憶された短い時間に相当する波形データを用いてタイムストレッチを実行することも可能であるが、実質的に有効な用途が無い。したがって、第4モードにおいては、ストレッチ率αは「1」に設定される。
上記のように構成した電子楽器DMの第2乃至第4モードにおいては、発音チャンネルCH(n+1),CH(n+2),CH(n+3)が原音の一部の区間を順次再生する。その際、ストレッチ率α、ピッチ倍率β及びフォルマント倍率γに応じて、音源回路16内に設けられた各種カウンタのカウント値が増減する。そして、前記各種カウンタのカウント値に応じて、発音チャンネルCH(n+1),CH(n+2),CH(n+3)によって再生される前記区間(セグメント)、前記区間の再生開始タイミング、前記区間を構成するサンプル値の読み出しレートなどが決定される。CPU12aは、ストレッチ率α、ピッチ倍率β、及びフォルマント倍率γに関する設定値(すなわち、ノート番号NN、及び音長設定操作子、ピッチ設定操作子、フォルマント設定操作子の指示値など)を音源回路16に供給するだけでよいので、CPU12aの負荷が小さい。また、回路構成としては、従来の音源回路の発音チャンネルに重畳加算回路OLA(n)を追加しただけであって、タイムストレッチ機能、ピッチシフト機能及びフォルマントシフト機能を実現するために大規模な回路を追加する必要が無い。すなわち、本実施形態によれば、タイムストレッチ機能、ピッチシフト機能及びフォルマントシフト機能を有する音源回路16であって、構成が簡単な音源回路16を提供できる。また、サンプリング期間ごとに1つのサンプル値が出力されるので、上記従来の音響信号生成装置のような遅れの問題が生じない。また、異なる動作モードを同時に利用できる。したがって、256個の発音チャンネルを効率よく利用できる。また、重畳加算回路OLA(n)がフィルタ回路FLT(n)及び音量制御回路VOL(n)の前段に設けられている。つまり、トラックTKを構成する発音チャンネルCH(n)の加算回路ADD(n)によって、他の発音チャンネルCH(n+1),CH(n+2),CH(n+3)にて生成されたサンプル値が加算され、その加算結果がフィルタ回路FLT(n)及び音量制御回路VOL(n)に供給される。したがって、フィルタ回路FLT(n)及び音量制御回路VOL(n)を有効に利用できる。
また、発音を開始する際、原音の波形データに割り当てられた動作モードに応じて1つ又は複数の発音チャンネルが確保される。すなわち、原音の波形データに割り当てられた動作モードが第1モードである場合には、1つの発音チャンネルが確保され、原音の波形データに割り当てられた動作モードが第2及び第3モードである場合には、4つの発音チャンネルが確保される。また、第4モードを利用する場合にも、4つの発音チャンネルが確保される。上記のように、各発音チャンネルに異なる動作モードを割り当てることができる。したがって、効率良く発音チャンネルを利用できる。
また、ピッチマーク及びアタックマークは、予め計算されて波形メモリWMに記憶されている。したがって、CPU12a、制御部CT、信号処理部DPなどが圧縮データを読み出しつつ原音のピッチを解析する場合に比べて、CPU12a、制御部CT、信号処理部DPなどの負荷を軽減できる。
また、上記のように、第2モード乃至第4モードにおいて、実際には利用されないリソース(エンベロープ発生回路及び低周波発振器)を流用してフォルマント周波数を時間経過に従って変化させるようにした。よって、フォルマント周波数を変化させるためのエンベロープ発生回路及び低周波発振器を別途設ける必要が無い。
さらに、本発明の実施にあたっては、上記実施形態に限定されるものではなく、本発明の目的を逸脱しない限りにおいて種々の変更が可能である。
例えば、上記実施形態では、再生音のピッチは制御部CTによって決定されているが、これに代えて、CPU12aによって決定されてもよい。また、第2モード乃至第4モードにおいて、カウント値ts (CT)を先頭アドレスに加算して得られたアドレスが末尾アドレスに一致するか否かを判定して、再生を終了するか否かを決定してもよい。
例えば、第1モード乃至第3モードにおいて、原音の一部の区間がループ再生されるように構成しても良い。この場合、ループスタート位置(アドレス)とループエンド位置(アドレス)を設定し、発音チャンネルCH(n)のデコード回路DEC(n)が、ループスタート位置に相当するサンプル値を最初に計算したとき、そのサンプル値を制御部CTが記憶し、ループエンド位置からループスタート位置に戻って再生を開始する際、前記記憶しておいたサンプル値を用いればよい。また、この場合、音量に関するエンベロープのレベルを用いて、再生位置が波形データの末尾に到達したか否かを判定してもよい。
また、上記実施形態の第2モード及び第3モードにおいては、3つの発音チャンネルCH(n+1),CH(n+2),CH(n+3)がグレインを再生しているが、圧縮データではなくサンプル値そのものが波形メモリWMに記憶されている場合には、第4モードと同様に、発音チャンネルCH(n)もグレインを再生する発音チャンネルとして利用できる。
また、上記実施形態の第2モード乃至第4モードにおいては、1つのトラックは4つの発音チャンネルから構成されている。しかし、1つのトラックが少なくとも2つの発音チャンネルから構成されていればよい。例えば、1つのトラックが8つの発音チャンネルから構成されていてもよい。なお、1つのトラックを構成する発音チャンネル数が多いほど、ピッチ倍率の上限値を大きくしたり、フォルマント倍率の下限値を小さくしたりすることができる。
また、上記実施形態においては、圧縮データは、1つ前のサンプリング期間におけるサンプル値と今回のサンプリング期間におけるサンプル値との差を表わしている。しかし、サンプル値の圧縮方法は上記実施形態に限られない。例えば、線形予測法を用いた圧縮方法を採用しても良い。
また、第2乃至第4モードにおけるセグメントに適用される窓関数の形状は上記実施形態に限られない。例えば、カウント値tp (n)に応じた係数を記憶したテーブルを用いることにより、窓関数の形状を任意に設定しても良い。
また、例えば、CPU12aがノート番号NNに応じたピッチと原音のピッチとの比率を計算して制御部CTに供給し、制御部CTは、前記供給された比率にピッチを変化させるエンベロープ信号、低周波信号などを加味して、再生音のピッチ倍率を決定しても良い。
また、ピッチマーク及びアタックマークをROM12bに記憶しておき、CPU12aがピッチマーク及びアタックマークをROM12bから読み出して制御部CTに供給してもよい。また、ピッチマーク及びアタックマークを予め計算して記憶しておくのではなく、CPU12a、制御部CT、信号処理部DPなどが波形データを読み込みつつピッチを解析しても良い。
また、第2乃至第4モードにおいて、利用されないエンベロープ発生回路及び低周波発振器を流用する例を示したが、その他の利用されないリソースを流用しても良い。例えば、第2モード乃至第4モードにおいては、発音チャンネルCH(n+1),CH(n+2),CH(n+3)のフィルタ回路FLT(n+1),FLT(n+2),FLT(n+3)は利用されない。そこで、これらのフィルタ回路FLT(n+1),FLT(n+2),FLT(n+3)を発音チャンネルCH(n)に連結して多段回路を形成して再生音の周波数特性を制御しても良い。
また、上記実施形態の第2モードにおいて、制御部CTはピッチに関するパラメータ、制御信号などに基づいてピッチ倍率βを算出するようにしているが、ここで、様々な演算をしてピッチ倍率βを算出することにより、面白みのある音響的効果を得るようにしてもよい。例えば、1つのトラックTKにおいて生成される楽音のピッチを、CPU12aから入力されたピッチ(又は周期)に矯正するようにしてもよい。すなわち、トラックTKにおいて、CPU12aから入力されたピッチ(又は周期)と差分値dpmとの比を用いて、時間経過とともに変化する原音のピッチを相殺するように、ピッチ倍率βを刻々と変化させてもよい。また、CPU12aから入力されたピッチ(又は周期)に基づいて差分値dpmを計算し、前記計算した差分値dpmを上記のステップS415における比較処理の際に用いてもよい。これにより、例えば図23に示すように、音色や音量の時間的変化はトラックTKに割り当てられた原音のままでありながら、ピッチはCPU12aから入力されたピッチに矯正されて平坦にされた楽音を得ることができる。例えば、ユーザが押鍵操作した鍵に応じて、原音のピッチを鍵に対応するピッチに矯正して再生することで、面白みのある音響的効果が得られる。
また、1つのトラックTK(m)において生成される楽音のピッチを、別のトラックTK(m+1)のピッチに矯正するようにしてもよい。すなわち、トラックTK(m+1)において順次得られる差分値dpmに応じて、トラックTK(m)におけるピッチ倍率βを変化させてもよい。また、トラックTK(m+1)の差分値dpmをステップS415における比較処理の際に用いてもよい。これにより、音色や音量の時間的変化はトラックTK(m)に割り当てられた原音のままでありながら、ピッチはトラックTK(m+1)に割り当てられた原音のピッチに追従した楽音を生成したり、トラックTK(m+1)に割り当てられた原音ピッチに対して所定の度数関係にあるハーモニー音を生成したりすることができ、面白みのある音響的効果が得られる。
また、例えば、楽曲の各パートの演奏であって、前記楽曲の楽譜における同一区間(例えば、各パートの3小節目の先頭から4小節目の終端まで)の演奏(フレーズ)をそれぞれサンプリングして波形データを生成しておき、各波形データを一組のトラックTK(m),TK(m+1),・・・に割り当ててもよい。以下、上記の一組のトラックTK(m),TK(m+1),・・・をグループGP(k)と呼ぶ(図24参照)。この場合、前記各トラックTK(m),TK(m+1),・・・にて再生されるフレーズを同期させたい(拍点を一致させたい)という要求が想定される。しかし、前記各波形データがいずれも前記楽曲の楽譜における同一位置の演奏を表わすとしても、それぞれの演奏テンポが異なることがある。つまり、波形データの長さが互いに異なることがある。この場合、前記再生されるフレーズを同期させるために、タイムストレッチ機能を用いて各トラックの演奏テンポ(フレーズの長さ)を揃えればよい。しかし、この場合、次のような問題がある。
まず、各トラックTK(m),TK(m+1),・・・が、それぞれに割り当てられたフレーズの再生を開始する際、それぞれのフレーズの長さが同一になるように、各トラックTK(m),TK(m+1),・・・のストレッチ率αを計算する。通常、ストレッチ率αは小数部を含むが、設定可能な小数部の桁数は実際には有限である。したがって、フレーズの長さを完全に一致させることは困難である。よって、再生開始時には各フレーズが同期していたとしても、次第に各フレーズの拍点のずれが大きくなる。
また、各フレーズが同期した状態を保ったまま、そのテンポを変更したいという要求が想定される。例えば、MIDIシーケンサのクロックに同期させてテンポを変化させたり、音長設定操作子をリアルタイムに操作して、その指示値にテンポを追従させたりすることが想定される。この場合、CPU12aが前記クロック、前記指示値などを検出して、各トラックTK(m),TK(m+1),・・・のストレッチ率αを計算し、それぞれの値を制御部CTのレジスタに書き込む必要がある。しかし、各トラックTK(m),TK(m+1),・・・のストレッチ率αのレジスタへの書き込み処理を同時に実行することはできない。すなわち、それぞれのストレッチ率αの書き込みタイミングにずれが生じる。この書き込みタイミングのずれに起因して、各フレーズの拍点がずれる。
また、各トラックTK(m),TK(m+1),・・・に割り当てられたフレーズが短い場合、各フレーズを同期させた状態のまま、フレーズの一部の区間又は全区間をループ再生したいという要求が想定される。しかし、上記のように、ピッチマーク又はアタックマークを用いて、タイムストレッチ機能、ピッチシフト機能及びフォルマントシフト機能を実現するため、ループスタート位置とループエンド位置を任意に定めることができない。すなわち、ループスタート位置とループエンド位置は、ピッチマーク又はアタックマークが付された位置に設定しなければならない。そのため、各トラックTK(m),TK(m+1),・・・の各ループスタート位置を完全に一致させるとともに、各ループエンド位置を完全に一致させることは困難である。また、CPU12aがそのずれを検出して補正することも困難である。
そこで、次のように構成するとよい。まず、グループGP(k)のテンポを管理するためにマスターサンプルカウンタCms (CT)を用いる。このマスターサンプルカウンタCms (CT)は、制御部CT内に設けられる。マスターサンプルカウンタCms (CT)のカウント値tms (CT)は、サンプリング期間ごとに更新される。すなわち、カウント値tms (CT)に、マスターテンポ倍率θが加算される。マスターテンポ倍率θは、所定の基準テンポ(例えば、60bpm)に対する、同期再生するフレーズのテンポ(以下、再生テンポと呼ぶ)の比率である。例えば、再生テンポが120bpmのときは、マスターテンポ倍率θは「2」である。
各トラックTK(m),TK(m+1),・・・の動作は、第2モードとほぼ同様であるが、第2モードにおけるサンプルカウンタCs (CT)がトラックごとに設けられる。以下、トラックTK(m),TK(m+1),・・・のサンプルカウンタをサンプルカウンタCm (CT),Cm+1 (CT),・・・と表記する。トラックTK(m),TK(m+1),・・・には、テンポが既知であるフレーズがそれぞれ割り当てられるとともに、各フレーズのテンポに対するマスターの基準テンポの比率を表わすスレーブテンポ倍率φm,φm+1,・・・が設定される。スレーブテンポ倍率φm,φm+1,・・・は、サンプリング期間ごとにサンプルカウンタCm (CT),Cm+1 (CT),・・・のカウント値tm (CT),tm+1 (CT),・・・にそれぞれ加算される。
例えば、基準テンポが60bpmであるのに対し、トラックTK(m)にはテンポが120bpmのフレーズが割り当てられ、トラックTK(m+1)にはテンポが30bpmのフレーズが割り当てられたとする。この場合、トラックTK(m)にはスレーブテンポ倍率φmとして「0.5」が設定され、トラックTK(m+1)にはスレーブテンポ倍率φm+1として「2.0」が設定される。
ここで、マスターサンプルカウンタが基準テンポと同じ60bpmのテンポでカウントを進めるとすると、マスターテンポ倍率θは「1.0」となる。つまり、マスターサンプルカウンタCms (CT)のカウント値tms (CT)は、サンプリング期間ごとにマスターテンポ倍率θの「1.0」ずつ加算されて更新される。このとき、トラックTK(m)のスレーブテンポ倍率φmは「0.5」に設定されているので、トラックTK(m)サンプルカウンタCm (CT)は、サンプリング期間ごとに、マスターテンポ倍率θの「1.0」とスレーブテンポ倍率φmの「0.5」とを乗算した、「0.5」ずつ加算されて更新される。また、トラックTK(m+1)のスレーブテンポ倍率φm+1は「2.0」に設定されているので、トラックTK(m+1)サンプルカウンタCm+1 (CT)は、サンプリング期間ごとに、マスターテンポ倍率θの「1.0」とスレーブテンポ倍率φm+1の「2.0」とを乗算した、「2.0」ずつ加算されて更新される。
また、マスターサンプルカウンタが基準テンポの0.5倍の30bpmのテンポでカウントを進めるとすると、マスターテンポ倍率θは「0.5」となる。つまり、マスターサンプルカウンタCms (CT)のカウント値tms (CT)は、サンプリング期間ごとにマスターテンポ倍率θの「0.5」ずつ加算されて更新される。このとき、トラックTK(m)のスレーブテンポ倍率φmは「0.5」に設定されているので、トラックTK(m)サンプルカウンタCm (CT)は、サンプリング期間ごとに、マスターテンポ倍率θの「0.5」とスレーブテンポ倍率φmの「0.5」とを乗算した、「0.25」ずつ加算されて更新される。また、トラックTK(m+1)のスレーブテンポ倍率φm+1は「2.0」に設定されているので、トラックTK(m+1)のサンプルカウンタCm+1 (CT)は、サンプリング期間ごとに、マスターテンポ倍率θの「0.5」とスレーブテンポ倍率φm+1の「2.0」とを乗算した、「1.0」ずつ加算されて更新される。
このように、マスターサンプルカウンタCms (CT)のカウント値tmとトラックTK(m),TK(m+1),・・・のサンプルカウンタCm (CT),Cm+1 (CT),・・・のカウント値tm (CT),tm+1 (CT),・・・の比は、スレーブテンポ倍率φm,φm+1,・・・で、一定に保たれる。また、マスターテンポ倍率θが再生途中で変わったとしても、この関係は保たれる。
マスターサンプルカウンタCms (CT)のカウント値tms (CT)とサンプルカウンタCm (CT),Cm+1 (CT),・・・のカウント値tm (CT),tm+1 (CT),・・・のうちのいずれか1つ又は複数のカウント値との比が何らかの要因(例えば、小数部の桁数が有限であること、ループスタート位置、ループエンド位置を設定できる位置が限られることなど)により理想値からずれてしまった場合、そのずれが所定の許容範囲内に含まれるように、そのトラックのテンポが次のようにして補正される。CPU12aは、サンプリング期間ごとに前記ずれを監視している。ここで、カウント値tms (CT)とカウント値tm (CT)との比が理想値からずれて、そのずれが前記許容範囲外にあるとする。この場合、制御部CTは、マスターテンポ倍率θとスレーブテンポ倍率φmとを乗算した値に、さらに所定の補正倍率ψを加味した値をカウント値tm (CT)に加算する(図25参照)。補正倍率ψは予めCPU12aから制御部CTに供給されている。例えば、補正倍率ψは、「1.19」及び「1/1.19」に設定される。トラックTK(m)の再生位置が他のフレーズの再生位置に対して遅れているときは、カウント値tm (CT)に、マスターテンポ倍率θとスレーブテンポ倍率φmとを乗算した値を更に1.19倍した値を加算する。つまり、テンポを速くする。一方、トラックTK(m)の再生位置が他のフレーズの再生位置に対して進みすぎているときは、マスターテンポ倍率θとスレーブテンポ倍率φmとを乗算した値を更に1/1.19倍した値を加算する。つまり、テンポを遅くする。
また、例えば、カウント値tm (CT)がピッチマーク又はアタックマークを超えたとき、ループエンド位置を超えた可能性がある。この場合、カウント値tm (CT)は、ループスタート位置にリセットされる。なお、マスターサンプルカウンタCms (CT)にもループスタート位置とループエンド位置が設定される。マスターサンプルカウンタCms (CT)にもループスタート位置とループエンド位置との比が、トラックTK(m)のサンプルカウンタCm (CT)のループスタート位置とループエンド位置との比とほぼ同じ値になるように、ループスタート位置とループエンド位置とが設定される。また、マスターサンプルカウンタCms (CT)のカウント値tms (CT)を直接書き換えても良い。この場合、カウント値tms (CT)とカウント値tm (CT)との比が理想値から大きくずれることがある。この場合、そのずれが許容範囲内に位置するように、各トラックのテンポが補正される。
なお、マスターサンプルカウンタCms (CT)を用いることなく、グループGP(k)を構成するトラックTK(m),TK(m+1),・・・のうちの1つのトラックに対応するサンプルカウンタCm (CT)をマスターサンプルカウンタとして用いても良い。すなわち、トラックTK(m),TK(m+1),・・・のうちの1つをマスタートラックとし、その他のトラックをスレーブトラックとしてもよい。また、複数のグループが形成されても良い。この場合、各グループに対応するマスターサンプルカウンタを設けても良い。また、この場合、マスターサンプルカウンタを設けることなく、各グループ内の1つのトラックをマスタートラックとしてもよい。
なお、各種パラメータは、入力操作子を用いて設定(変更)されるだけでなく、コンピュータ部12によって実現される自動演奏装置(所謂シーケンサ)によって各種パラメータが順次設定(変更)されても良い。また、外部インターフェース15を介して外部機器から供給された制御信号に応じて各種パラメータが設定(変更)されてもよい。
CH・・・発音チャンネル、CM・・・キャッシュ回路、CT・・・制御部、CT・・・再生時刻カウンタ、Cp・・・位相カウンタ、Cs・・・サンプルカウンタ、DEC・・・デコード回路、DM・・・電子楽器、DP・・・信号処理部、DRD・・・読み込み回路、FLT・・・フィルタ回路、GR・・・グレイン、OLA・・・重畳加算回路、RB・・・リングバッファ、SB・・・サンプルバッファ、SFn・・・状態フラグ、SP・・・発音部、SG・・・セグメント、TK・・・トラック、TR・・・目標値レジスタ、VOL・・・音量制御回路、WD・・・係数、WM・・・波形メモリ、dpm・・・差分値、tv・・・目標値、v・・・再生速度倍率、xfl・・・クロスフェード長、α・・・ストレッチ率、β・・・ピッチ倍率、γ・・・フォルマント倍率、11・・・入力操作子、12・・・コンピュータ部、16・・・音源回路、18・・・音声入力装置
Claims (4)
- 原音の波形を表す波形データを構成する複数のサンプル値又は前記複数のサンプル値に基づいて計算された複数の圧縮データを記憶した波形データ記憶手段と、
サンプリング期間ごとにカウント値が更新されるサンプルカウンタをそれぞれ有し、前記サンプルカウンタのカウント値に基づいて、1つ又は複数の前記サンプル値又は前記圧縮データを前記波形データ記憶手段から読み出して、前記サンプルカウンタのカウント値に対応するサンプル値であって、音の波形を表わす音響信号を構成するサンプル値を計算して出力する複数の発音手段と、
前記サンプルカウンタの初期カウント値を設定するとともにカウントを開始させ、サンプリング期間ごとに前記サンプルカウンタのカウント値に加算する加算値を前記発音手段に供給して前記サンプルカウンタのカウント値を更新させ、前記サンプルカウンタのカウント値が所定の値に達したとき前記サンプルカウンタのカウントを停止させる制御手段と、
を備えた音響信号生成装置であって、
時間間隔をおいて、前記原音における時間軸方向に互いにずれた複数の区間を前記複数の発音手段から選択した複数の発音手段に割り当て、前記割り当てた区間の先頭位置に対応する値に基づいて前記選択した複数の発音手段のサンプルカウンタの初期カウント値をそれぞれ設定するとともに前記選択した複数の発音手段のサンプルカウンタのカウントを開始させ、前記選択した複数の発音手段から出力されたサンプル値を重畳加算することにより、前記原音の長さ、前記原音のピッチ及び前記原音のフォルマントのうちのいずれか1つの要素又は複数の要素を変更した1つの再生音の波形を表わす音響信号を構成する1つのサンプル値をサンプリング期間ごとに生成し、前記発音手段のサンプルカウンタのカウント値が、前記発音手段に割り当てられた前記区間の末尾位置に対応する値に達したとき、前記発音手段のサンプルカウンタのカウントを停止させる複数のトラックを備え、
前記複数の区間、前記時間間隔及び前記加算値は、前記原音の長さに対する前記再生音の長さの比率を表わす第1比率、前記原音のピッチに対する前記再生音のピッチの比率を表わす第2比率、及び前記原音のフォルマント周波数に対する前記再生音のフォルマント周波数の比率を表わす第3比率のうちのいずれか1つの比率又は複数の比率に基づいて決定され、
前記複数のトラックにて同時に再生される再生音に共通の再生テンポに対応したマスターサンプルカウンタであって、所定の基準テンポに対する前記再生テンポの比率を表わすマスターテンポ倍率をサンプリング期間ごとに加算するマスターサンプルカウンタを備え、
前記基準テンポに対する前記各トラックにて再生される再生音のテンポの比率を表す各スレーブテンポ倍率が、サンプリング期間ごとに、前記各トラックのサンプルカウンタのカウント値に加算され、
前記マスターサンプルカウンタのカウント値と前記各トラックのサンプルカウンタのカウント値とのずれを監視し、そのずれに応じて、前記各トラックのスレーブテンポ倍率が補正される、音響信号生成装置。 - 請求項1に記載の音響信号生成装置において、
前記各トラックに割り当てられる波形データは、楽曲の各パートの演奏であって、前記楽曲の楽譜における同一区間の演奏をそれぞれサンプリングして形成されている、音響信号生成装置。 - 請求項1又は2に記載の音響信号生成装置において、
前記各トラックに割り当てられた波形データの所定の範囲がループ再生されるように、前記マスターサンプルカウンタ及び前記各トラックのサンプルカウンタがカウントされる、音響信号生成装置。 - 請求項1乃至3のうちのいずれか1つに記載の音響信号生成装置において、
前記複数のトラックのうちの1つのトラックのサンプルカウンタが前記マスターサンプルカウンタとして機能する、音響信号生成装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017021223A JP6350693B2 (ja) | 2017-02-08 | 2017-02-08 | 音響信号発生装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017021223A JP6350693B2 (ja) | 2017-02-08 | 2017-02-08 | 音響信号発生装置 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2014031724A Division JP6090204B2 (ja) | 2014-02-21 | 2014-02-21 | 音響信号発生装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2017083910A JP2017083910A (ja) | 2017-05-18 |
JP6350693B2 true JP6350693B2 (ja) | 2018-07-04 |
Family
ID=58714381
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2017021223A Expired - Fee Related JP6350693B2 (ja) | 2017-02-08 | 2017-02-08 | 音響信号発生装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP6350693B2 (ja) |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2630054B2 (ja) * | 1990-10-19 | 1997-07-16 | ヤマハ株式会社 | マルチトラックシーケンサ |
JP3329635B2 (ja) * | 1995-03-06 | 2002-09-30 | ローランド株式会社 | 効果装置 |
JP3379348B2 (ja) * | 1996-09-03 | 2003-02-24 | ヤマハ株式会社 | ピッチ変換器 |
JP3397082B2 (ja) * | 1997-05-02 | 2003-04-14 | ヤマハ株式会社 | 楽音発生装置および方法 |
JP4581190B2 (ja) * | 2000-06-19 | 2010-11-17 | ヤマハ株式会社 | 音楽信号の時間軸圧伸方法及び装置 |
JP6011064B2 (ja) * | 2012-06-26 | 2016-10-19 | ヤマハ株式会社 | 自動演奏装置及びプログラム |
-
2017
- 2017-02-08 JP JP2017021223A patent/JP6350693B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2017083910A (ja) | 2017-05-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6090204B2 (ja) | 音響信号発生装置 | |
JP6011064B2 (ja) | 自動演奏装置及びプログラム | |
JP2658463B2 (ja) | 自動演奏装置 | |
JP6019803B2 (ja) | 自動演奏装置及びプログラム | |
JP6547522B2 (ja) | 楽音信号発生装置 | |
JP6350692B2 (ja) | 音響信号発生装置 | |
JP6350693B2 (ja) | 音響信号発生装置 | |
JP2010113278A (ja) | 楽曲処理装置およびプログラム | |
EP3373289B1 (en) | Electronic musical instrument, musical sound generating method, and storage medium | |
JP2007011090A (ja) | カラオケ装置 | |
JP4835434B2 (ja) | 演奏パターン再生装置及びそのコンピュータプログラム | |
JP3651675B2 (ja) | 電子楽器 | |
JP4835433B2 (ja) | 演奏パターン再生装置及びそのコンピュータプログラム | |
JPH07287576A (ja) | 音楽再生方法 | |
JP2005257832A (ja) | 演奏再生装置 | |
JP2013024911A (ja) | 信号処理装置 | |
JP4259422B2 (ja) | 演奏制御装置及びプログラム | |
JPH10187155A (ja) | カラオケ装置 | |
JP2000221979A (ja) | テンポ等の演算装置 | |
JP2010113277A (ja) | 楽曲処理装置およびプログラム | |
JP2003330469A (ja) | 楽音生成装置及びプログラム | |
JP2005010462A (ja) | 自動演奏装置及び自動演奏処理プログラム並びに自動演奏パターンデータを記録したコンピュータ読み取り可能な記録媒体 | |
JP2016051005A (ja) | 自動伴奏装置及び自動伴奏プログラム | |
JP2003330468A (ja) | 楽音生成装置及びプログラム | |
JPH09281969A (ja) | 電子楽器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20170208 |
|
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: 20180508 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20180521 |
|
R151 | Written notification of patent or utility model registration |
Ref document number: 6350693 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R151 |
|
LAPS | Cancellation because of no payment of annual fees |