(57)【特許請求の範囲】
【請求項１】
コンピュータを、
入力する位相情報に基づき該位相情報と対応するサンプル値を波形情報として生成する波形生成手段と、
供給された周波数情報に基づき第１位相情報を生成する位相情報生成手段と、
前記第１位相情報を、前記波形生成手段が生成した波形情報を用いて変調する変調手段と、
前記変調手段による変調により生じる位相情報の変動周期のずれを補正する補正手段と、
前記波形生成手段に対し、前記第１位相情報に対し前記変調手段による変調と前記補正手段による補正とを加えた第２位相情報を入力する入力手段として機能させるためのプログラム。
【請求項２】
請求項１に記載のプログラムであって、
前記補正手段は、前記変調手段による変調後の位相情報が所定の値となった時点における、変調前後の位相情報の差分を前記変動周期のずれ量として検出し、その差分だけ、前記変調手段による変調前の位相情報を補正することを特徴とするプログラム。
【請求項３】
請求項１に記載のプログラムであって、
前記補正手段は、前記第２位相情報が所定の値となった時点における、前記第１位相情報と前記第２位相情報の差分を検出し、その差分だけ位相情報の補正量を調整し、その調整後の補正量だけ位相情報を補正することを特徴とするプログラム。
【請求項４】
請求項１乃至３のいずれか一項に記載のプログラムであって、
前記補正手段は、前記補正に係る補正量の時間変化を、検出した前記変動周期のずれ量の時間変化よりも緩慢にする手段を備えることを特徴とするプログラム。
【請求項５】
入力する位相情報に基づき該位相情報と対応するサンプル値を波形情報として生成する波形生成手段と、
供給された周波数情報に基づき第１位相情報を生成する位相情報生成手段と、
前記第１位相情報を、前記波形生成手段が生成した波形情報を用いて変調する変調手段と、
前記変調手段による変調により生じる位相情報の変動周期のずれを補正する補正手段と、
前記波形生成手段に対し、前記第１位相情報に対し前記変調手段による変調と前記補正手段による補正とを加えた第２位相情報を入力する入力手段とを備える波形生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、コンピュータに波形情報を生成する機能を実現させるためのプログラム及び、波形情報を生成する機能を備える波形生成装置に関する。
【背景技術】
【０００２】
従来から、指定されたピッチに従ってサンプル期間毎の位相情報を生成し、その位相情報と対応する正弦波テーブルの値を読み出し、サンプル期間毎の波形データとして出力することにより、指定されたピッチの楽音に係る波形データを出力する技術が知られている。
【０００３】
この技術において、特許文献１に記載のように、生成した位相情報に、正弦波テーブルから読み出した波形データを帰還させて位相情報を変調するようにすることが知られている。このような変調を行った位相情報と対応する正弦波テーブルの値を読み出すことにより、複雑な波形の波形データを出力することができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００１−１７５２６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に記載のような変調を行う場合、変調に必要な処理、例えば読み出した波形データに基づき変調量を算出する処理、に要する時間に起因して、変調前の位相情報の変化周期と、変調後の位相情報の変化周期とにずれが生じてしまう。このずれは、例えば図４に示すものであり、実線が、変調前の位相情報の変化周期を示し、点線が、変調前の位相情報の変化周期を示す。
【０００６】
このようなずれが生じると、変調後の位相情報を用いて出力波形データを取得した場合のその出力波形データの位相が、変調前の位相情報を用いて出力波形データを取得したとした場合のその出力波形データの位相からずれてしまうことになる。
特許文献１に記載のような従来の装置においては、変調処理の内容が一定であったし、さほど大きな位相ずれが生じるような変調処理も行っていなかったため、この点はあまり問題となっていなかった。
【０００７】
しかし、この位相ずれの大きさは、変調処理の内容が変化すれば、それに応じて変化することになる。このため、変調処理の内容をダイナミックに変化させようとした場合、その変化に応じて出力波形データの位相も変化してしまうこととなり、位相変化に伴うドップラー効果により、出力波形データのピッチも意図せず変化してしまうという問題が生じる。
また、位相情報に基づく出力波形データの取得に正弦波テーブル以外のテーブルを用いる場合でも、また、テーブル以外の手段を用いる場合でも、これと同様な問題が生じ得る。
【０００８】
この発明は、このような事情に鑑みてなされたものであり、処理内容がダイナミックに変化する変調処理を施された位相情報に基づき出力波形データを生成する場合でも、出力波形データにおける意図しないピッチの変化を抑えられるようにすることを目的とする。
【課題を解決するための手段】
【０００９】
この発明は、上記の目的を達成するため、コンピュータを、入力する位相情報に基づきその位相情報と対応するサンプル値を波形情報として生成する波形生成手段と、供給された周波数情報に基づき第１位相情報を生成する位相情報生成手段と、上記第１位相情報を、上記波形生成手段が生成した波形情報を用いて変調する変調手段と、上記変調手段による変調により生じる位相情報の変動周期のずれを補正する補正手段と、上記波形生成手段に対し、上記第１位相情報に対し上記変調手段による変調と上記補正手段による補正とを加えた第２位相情報を入力する入力手段として機能させるためのプログラムを提供する。
【００１０】
このようなプログラムにおいて、上記補正手段が、上記変調手段による変調後の位相情報が所定の値となった時点における、変調前後の位相情報の差分を上記変動周期のずれ量として検出し、その差分だけ、上記変調手段による変調前の位相情報を補正するようにするとよい。
あるいは、上記補正手段が、上記第２位相情報が所定の値となった時点における、上記第１位相情報と上記第２位相情報の差分を検出し、その差分だけ位相情報の補正量を調整し、その調整後の補正量だけ位相情報を補正するようにするとよい。
【００１１】
さらに、上記補正手段に、上記補正に係る補正量の時間変化を、検出した上記変動周期のずれ量の時間変化よりも緩慢にする手段を設けるとよい。
また、この発明は、上記のようにプログラムとして実施する他、装置、システム、方法、記録媒体等、任意の態様で実施することができる。
【発明の効果】
【００１２】
以上のような構成によれば、処理内容がダイナミックに変化する変調処理を施された位相情報に基づき出力波形データを生成する場合でも、出力波形データにおける意図しないピッチの変化を抑えることができる。
【図面の簡単な説明】
【００１３】
【図１】この発明の一実施形態である波形生成装置のハードウェア構成を示す図である。
【図２】図１に示した波形生成装置における波形データの生成及び出力に係る機能の構成を示す図である。
【図３】図２に示した波形生成部の機能構成をより詳細に示す図である。
【図４】加算部２０２による補正を行わない状態での、第１位相情報と、第１位相情報を変調して得られる第２位相情報の経時変化の例を示す図である。
【図５】位相カウンタ２０１が出力する位相値と、加算部２０２による補正後の第１位相情報と、その補正後の第１位相情報を加算部２０３で変調して得られる第２位相情報との経時変化の例を示す図である。
【図６】図３に示した波形生成部１３１の機能と対応する処理を示すフローチャートである。
【図７】この発明の実施形態の変形例における波形生成部１３１の機能構成を示す、図３と対応する図である。
【発明を実施するための形態】
【００１４】
以下、この発明を実施するための形態を図面に基づいて具体的に説明する。
まず、図１に、この発明の一実施形態である波形生成装置のハードウェア構成を示す。
図１に示すように、波形生成装置１０は、ＣＰＵ１１、ＲＯＭ１２、ＲＡＭ１３、ＨＤＤ（ハードディスクドライブ）１４、ＤＭＡ（ダイレクトメモリアクセス）制御部１５、ＤＡＣ（デジタルアナログ変換器）１６、外部機器Ｉ／Ｆ（インタフェース）１７、表示回路１８、検出回路１９、通信Ｉ／Ｆ２０を備え、これらがシステムバス２１により接続されている。
【００１５】
このうち、ＣＰＵ１１は、波形生成装置１０の動作を統括制御する制御手段であり、ＲＯＭ１２あるいはＨＤＤ１４に記憶された所要の制御プログラムを実行して波形生成装置１０の各部を制御することにより、後述する波形生成機能をはじめとする種々の機能を実現する。
ＲＯＭ１２及びＨＤＤ１４は、ＣＰＵ１１が実行する制御プログラムをはじめ、電源を切っても残しておくべきデータを記憶する書き換え可能な不揮発性記憶手段である。
ＲＡＭ１３は、ＣＰＵ１１のワークメモリとして使用する記憶手段である。
【００１６】
ＤＭＡ制御部１５は、ＲＡＭ１３に記憶されたデータにアクセスする機能を備える。例えば、ＤＭＡ制御部１５は、ＣＰＵ１１が実行するシーケンサアプリケーション（以下「アプリケーション」を「アプリ」と略称する）１１０及びソフトウェアシンセサイザプラグイン１２０の機能により生成されＲＡＭ１３上に記憶されたデジタル波形データ（オーディオデータ）を、ＤＡＣ１６から出力して発音に用いる場合に、時間経過に従ってＲＡＭ１３からＤＡＣ１６への波形データの転送を行う。
ＤＡＣ１６は、デジタル波形データをアナログ音響信号に変換して、スピーカ等の外部のサウンドシステム（発音手段）へ出力する機能を備える。
【００１７】
外部機器Ｉ／Ｆ１７は、外部機器を波形生成装置１０に接続するためのインタフェースであり、例えばＵＳＢ（Universal  Serial  Bus）規格のインタフェースを採用可能である。外部機器Ｉ／Ｆ１７には、ＭＩＤＩ（Musical  Instrument  Digital  Interface：登録商標）データを生成するＭＩＤＩ機器を接続してここからＭＩＤＩデータを入力することが考えられる。また、外部機器Ｉ／Ｆ１７にオーディオ機器を接続し、ＣＰＵ１１が生成した波形データを、上述のＤＡＣ１６からの出力に代えて、外部機器Ｉ／Ｆ１７からそのオーディオ機器に出力して発音を行わせることも考えられる。
【００１８】
表示回路１８は、ディスプレイ等の表示手段を接続し、ＣＰＵ１１からの制御によりその表示手段に表示を行わせるためのインタフェースである。
検出回路１９は、キーボートやマウス等、ユーザからの操作を受け付けるための操作手段を接続し、その操作手段が受け付けた操作を検出してＣＰＵ１１に供給するためのインタフェースである。
【００１９】
通信Ｉ／Ｆ２０は、ＬＡＮ（ローカルエリアネットワーク）等のネットワークを介して外部装置と通信するためのインタフェースである。
以上の波形生成装置１０は、ハードウェアとしては汎用のＰＣ（パーソナルコンピュータ）を用いて構成することもできる。
【００２０】
以上の波形生成装置１０において特徴的な点は、指定された周波数情報に基づき波形データ（以下単に「波形データ」と言った場合にはデジタル波形データを指す）を生成する機能である。以下、この点について説明する。
まず、図２に、波形生成装置１０における波形データの生成及び出力に係る機能の構成を示す。
【００２１】
図２に示すように、波形生成装置１０は、波形データの生成及び出力に関与する機能として、ＭＩＤＩドライバ１０１、オーディオドライバ１０２、シーケンサアプリ１１０、ソフトウェアシンセサイザプラグイン１２０を備える。
このうち、ＭＩＤＩドライバ１０１は、外部機器Ｉ／Ｆ１７に接続される外部機器から送信されるＭＩＤＩイベントを取得して、ＯＳ（オペレーティングシステム）上で動作する各種アプリに渡す機能を備える。オーディオドライバ１０２は、各種アプリが生成した波形データを、ＤＡＣ１６あるいは外部機器Ｉ／Ｆ１７を介して外部に出力する機能を備える。これらのＭＩＤＩドライバ１０１及びオーディオドライバ１０２は、ＯＳにより提供される機能である。
【００２２】
シーケンサアプリ１１０は、ＭＩＤＩイベントと対応する波形データを、ソフトウェアシンセサイザプラグイン１２０を用いて生成して出力する機能を備える。
より具体的には、シーケンサアプリ１１０は、受け取ったＭＩＤＩイベントをソフトウェアシンセサイザプラグイン１２０に渡し、波形データの生成を開始させ、それに応じてソフトウェアシンセサイザプラグイン１２０が生成し出力する波形データを受け取って、オーディオドライバ１０２へ出力する。このとき、シーケンサアプリ１１０は、オーディオドライバ１０２が切れ目なく波形データを出力できる程度の頻度とサンプル数で（例えば５ミリ秒毎に３００サンプル程度ずつ）ソフトウェアシンセサイザプラグイン１２０に波形データのサンプルを要求する。ソフトウェアシンセサイザプラグイン１２０はこの要求に応じて波形データを生成し、シーケンサアプリ１１０に渡す。
【００２３】
なお、シーケンサアプリ１１０がソフトウェアシンセサイザプラグイン１２０に渡すＭＩＤＩイベントには、例えば、発音開始を指示するノートオンイベントや発音停止を指示するノートオフイベントがある。また、波形を規定する波形パラメータの値の変更を指示するイベントもある。
【００２４】
このようなＭＩＤＩイベントは、シーケンサアプリ１１０がタイマ制御のもとＳＭＦ(Standard  MIDI  File)形式の演奏データを再生して生成することができるし、外部ＭＩＤＩ機器から波形生成装置１０に入力されたＭＩＤＩイベントをＭＩＤＩドライバ１０１から取得することもできる。
以上のようなシーケンサアプリ１１０の機能は、例えばシーケンサ機能を備えるＤＡＷ（Digital  Audio  Workstation）アプリにより提供可能である。
【００２５】
ソフトウェアシンセサイザプラグイン１２０は、シーケンサアプリ１１０が使用するダイナミックリンクライブラリにより提供される機能であり、他のプロセスから渡されるＭＩＤＩイベントに従い波形データを生成して要求元のプロセスへ返す機能を備える。
より具体的には、ソフトウェアシンセサイザプラグイン１２０は、イベントハンドラ１２１、ピッチ生成部１２２、エンベロープ信号生成部１２３、オペレータ１２４、および出力部１２５の機能を備える。
【００２６】
このうちイベントハンドラ１２１は、シーケンサアプリ１１０等の、ソフトウェアシンセサイザプラグイン１２０を使用するアプリからＭＩＤＩイベントが送られたことを検知し、イベントを受け取り、そのイベントに応じた処理を、ソフトウェアシンセサイザプラグイン１２０内の各部に指示する機能を備える。
【００２７】
例えば、イベントハンドラ１２１は、ノートオンイベントを検知した場合、そこに含まれる、発音すべき音高を表すノート番号をピッチ生成部１２２に伝えて周波数情報の生成開始を指示すると共に、押鍵（発音）操作速度を表すベロシティをエンベロープ信号生成部１２３に伝えてエンベロープ信号の生成開始を指示させる。これらの指示の後、ピッチ生成部１２２、エンベロープ信号生成部１２３及びオペレータ１２４は、１サンプルずつ時系列的に波形データを生成する。
【００２８】
また、イベントハンドラ１２１は、波形パラメータの値の変更を指示するイベントを検出した場合に、そこに含まれる情報に従い、各オペレータ１２４の波形生成部１３１が波形情報の生成に使用する波形パラメータの値を変更する。この波形パラメータには、例えば、図３に示す変調値演算部２０５における変調値の演算内容を規定するパラメータが含まれる。
【００２９】
次に、ピッチ生成部１２２は、ノート番号で指定された音高の基本周波数で発音する際に１サンプル期間で図３の位相カウンタ２０１において位相を進める量を示す周波数情報を生成し、オペレータ１２４の波形生成部１３１に供給する機能を備える。
エンベロープ信号生成部１２３は、発音開始から１サンプルずつ処理が進むに従って時間的に変化する信号であって、ベロシティに応じた音量を示す制御信号を生成し、オペレータ１２４の音量制御部１３２に供給する機能を備える。
【００３０】
オペレータ１２４は、ピッチ生成部１２２から供給される周波数情報と、エンベロープ信号生成部１２３から供給される制御信号と、イベントハンドラ１２１により設定される波形パラメータとに基づき、波形生成部１３１及び音量制御部１３２により波形データを生成して出力部１２５に供給する機能を備える。このうち波形生成部１３１は、周波数情報と波形パラメータとに基づき波形情報を生成する機能を備える。音量制御部１３２は、波形生成部１３１が生成した波形情報の振幅を、制御信号に従って調整することにより、出力すべき波形データを生成する機能を備える。
【００３１】
このオペレータ１２４は、複数設けることもできる。この場合、イベントハンドラ１２１、ピッチ生成部１２２及びエンベロープ信号生成部１２３は、発音に用いるオペレータ１２４のそれぞれに、波形パラメータ、周波数情報及び制御信号を供給する。また、あるオペレータ１２４が出力する波形データを、出力部１２５に出力することに加え、又はこれに代えて、他のオペレータ１２４の波形生成部１３１の動作を変調するために用いることもできる。変調値演算部２０５における変調値の演算内容を、他のオペレータ１２４が出力した波形データに基づき調整する等である。
【００３２】
出力部１２５は、各オペレータ１２４が生成した波形データのサンプルをバッファし、アプリからの要求に応じて、要求されたサンプル数のデータをそのアプリに渡す機能を備える。
なお、ピッチ生成部１２２、エンベロープ信号生成部１２３及びオペレータ１２４の処理は、出力波形データのサンプル単位よりも細かいオーバーサンプリングされた単位で波形データの生成処理を行ってもよい。その場合、１サンプルの波形データを出力部１２５に出力するために、複数周期の処理をし、その結果を出力する。
【００３３】
次に、図３に、波形生成部１３１の機能構成をより詳細に示す。
図３に示すように、波形生成部１３１は、位相カウンタ２０１、加算部２０２，２０３、波形情報取得部２０４、変調値演算部２０５、タイミング検知部２０６、差分算出部２０７、切替部２０８、補正値保持部２０９、およびＬＰＦ（ローパスフィルタ）２１０を備える。
【００３４】
これらのうち、位相カウンタ２０１は、ピッチ生成部１２２から供給された周波数情報に基づき第１位相情報を生成する位相情報生成手段の機能を備える。この例では、位相カウンタ２０１は、１サンプル処理する毎に周波数情報が示す値を現在の値に加算する。そして、カウント値が１を超えた場合、加算結果から１を減じる。このことにより、図４に実線で示すように、時間の経過に従って０から１まで徐々に増加し、１に達すると０に戻る鋸波状の第１位相情報を生成する。なお、各タイミングにおけるカウント値を位相値と呼ぶことにし、位相値が０から１まで変化するのに要する期間が、波形の１周期に対応する。
【００３５】
加算部２０２は、位相カウンタ２０１が出力する第１位相情報を、ＬＰＦ２１０から供給される後述する補正値Ａｄｊを加算して補正する機能を備える。
加算部２０３は、加算部２０２における補正後の第１位相情報を、変調値演算部２０５から供給される後述する変調値Ｍｏｄを加算して変調し、第２位相情報を生成する機能を備える。
なお、加算部２０２，２０３はそれぞれ、加算結果が０から１の範囲に収まらない場合に、加算結果に対し１を減算又は加算して、０から１の範囲に収めるようにする。
【００３６】
波形情報取得部２０４は、第２位相情報を入力し、その第２位相情報に基づき該第２位相情報と対応するサンプル値を波形情報として生成する波形生成手段の機能を備える。この例では、波形情報取得部２０４は、各位相値と対応する正弦波のサンプル値を格納した正弦波テーブルを備え、第２位相情報が示す各サンプルの位相値と対応する正弦波のサンプル値を、必要に応じて補間処理を行って正弦波テーブルから読み出し、そのサンプルの波形情報として出力する。例えば、位相値０が正弦波の位相０に対応し、位相値１が正弦波の位相２πに対応する等である。位相値０が正弦波の位相−πに対応し、位相値１が正弦波の位相πに対応する等でもよい。正弦波の位相を弧度法でなく度数法で表現しても構わない。
【００３７】
また、テーブルに他の波形のサンプル値を格納したり、位相値を数式に代入して演算することにより波形情報を生成したりすることも考えられる。
いずれにせよ、波形情報取得部２０４は、生成した波形情報を、後段の音量制御部１３２に供給すると共に、変調値演算部２０５にも供給する。
【００３８】
変調値演算部２０５は、第１位相情報を、波形情報取得部２０４が生成した波形情報を用いてフィードバック変調するための変調値Ｍｏｄを生成する機能を有する。そして、加算部２０３と合わせて変調手段の機能を実現する。
変調値演算部２０５が行う変調値Ｍｏｄの生成のための演算等の処理の内容は、イベントハンドラから供給される波形パラメータ（及び他のオペレータ１２４が出力する波形データ）に基づき、動的に変更される。この変更は、例えばディレイ処理における遅延サンプル数のようにパラメータの調整に留まる場合もあれば、フィルタ処理を追加あるいは削除したり、絶対値変換処理と二乗演算処理を切り替えたり、といった、処理アルゴリズム自体の変更を伴う場合もある。
【００３９】
ここで、変調値演算部２０５が行う変調値Ｍｏｄの生成のための演算処理アルゴリズムの一例を述べると、まず絶対値変換部により波形情報取得部２０４が生成した波形情報に係るサンプル値の絶対値を求め、その後、その絶対値をローパスフィルタに入力し、フィルタの出力値を遅延部で所定サンプル分遅延させる処理が考えられる。この処理を行うと、あるサンプリング期間で変調値演算部２０５に入力したサンプル値が加算部２０３に供給される変調値Ｍｏｄに反映されるまでには、ある程度の遅延が生じることになる。
【００４０】
いずれにせよ、変調値Ｍｏｄを、加算部２０３において、（加算部２０２における補正後の）第１位相情報に加算することにより、第１位相情報を変調して第２位相情報を生成することができる。なお、この加算において、位相値が０〜１の範囲から外れる場合には、加算結果から１を減じるか又は加算結果に１を加えて、加算後の位相値が０〜１の範囲に収まるようにする。
【００４１】
ここで、図４に、加算部２０２による補正を行わない状態での、第１位相情報（実線）と、第１位相情報を変調して得られる第２位相情報（点線）の経時変化の例を示す。縦軸は各サンプル期間の位相情報が示す位相値、横軸はサンプル数単位で示した時間である。
この図からわかるように、波形情報取得部２０４が生成した波形情報を反映した変調値Ｍｏｄを用いて第１位相情報の変調を行うと、その変調後の第２位相情報の変動周期（例えば０から１までの変動を１周期とする）は、元の第１位相情報の変動周期とずれることになる。この「ずれ」は、位相情報の変動の様子を波形に見立てると、波形の位相がずれ量Ｄだけずれていることに該当する。
そして、この「ずれ」の大きさは、変調値演算部２０５における演算内容によって変動することが、発明者らのシミュレーションによってわかっている。
【００４２】
次に、タイミング検知部２０６は、加算部２０３での加算時に位相値が１を超えたタイミング（このときに位相値から１を減じる処理を行うため図４のグラフでは１付近の値から０付近への値の変動が起きるタイミング）を検知する機能を備える。また、その検知したタイミング前後の第２位相情報の位相値を差分算出部２０７に供給する機能を備える。さらに、その検知したタイミングで、切替部２０８を接続状態（１→０）に切り替え、差分算出部２０７が算出した差分値を、補正準備値Ａｄｊｐとして補正値保持部２０９に保持させる機能も備える。なお、タイミング検知部２０６は、位相値が１を超えたタイミング以外では、切替部２０８を離間状態（otherwise）に切り替え、補正値保持部２０９に、一旦保持した補正準備値Ａｄｊｐをそのまま保持させる。
【００４３】
差分算出部２０７は、タイミング検知部２０６から第２位相情報の位相値が供給された場合に、その位相値と、加算部２０３による変調前の第１位相情報の位相値とに基づき、第２位相情報の位相値が「０」になった時点での、第２位相情報の位相値と第１位相情報の位相値との差分を算出する。位相値があるサンプリング期間にちょうど「０」になることは希であるので、通常は、「１」を超えたタイミング前後の位相値を用いて補間を行って求める。
【００４４】
この求めた差分は、変調手段による変調後の位相情報が所定の値となった時点における、変調前後の位相情報の差分に該当し、第１位相情報と第２位相情報の変動周期のずれ量Ｄを反映した値となる。したがって、基本的にはこの差分値だけ第１位相情報を補正すればよいのであるが、この例では、補正量の時間変化を、差分値の時間変化より緩慢にする手段として、補正値保持部２０９及びＬＰＦ２１０を設け、これらを介して補正を行うようにしている。
【００４５】
切替部２０８は、タイミング検知部２０６によって接続状態と離間状態を切り替えられ、接続状態となった場合に、差分算出部２０７が算出した差分値を補正値保持部２０９に供給する機能を備える。
補正値保持部２０９は、切替部２０８を介して差分算出部２０７から差分値が供給された場合に、次に差分値が供給されるまで、その差分値を補正準備値Ａｄｊｐとして保持し、サンプリング期間毎にＬＰＦ２１０に供給する機能を備える。
【００４６】
ＬＰＦ２１０は、補正値保持部２０９から供給される各サンプリング期間の補正準備値Ａｄｊｐに基づき、その高周波成分を除去し、時間変化を緩慢にした各サンプリング期間の補正値Ａｄｊを生成して、加算部２０２に供給する機能を備える。
加算部２０２は、上述のように、第１位相情報の位相値にこの補正値Ａｄｊを加算して補正する。
以上のタイミング検知部２０６、差分算出部２０７、切替部２０８、補正値保持部２０９、ＬＰＦ２１０及び加算部２０２が、補正手段を構成する。
【００４７】
次に、図４及び図５を用いて、補正手段による位相情報の補正の意義について説明する。
図４は上述した通りであり、図５は、位相カウンタ２０１が出力する位相値（補正前の第１位相情報：実線）と、加算部２０２による補正後の第１位相情報（二点鎖線）と、その補正後の第１位相情報を加算部２０３で変調して得られる第２位相情報（点線）との経時変化を、図４と同じ軸上に示したものである。
ここで、加算部２０２による補正の趣旨は、図４に示したずれ量Ｄをなくし、波形情報取得部に入力される第２位相情報の変動周期を、位相カウンタ２０１が出力する第１位相情報の変動周期に合わせるものである。ここで、位相カウンタ２０１の出力自体は、位相情報の変調や補正を行っても変化するものではない。
【００４８】
そして、図３の構成においては、差分算出部２０７において、第２位相情報の位相値が「０」になった時点での、第２位相情報の位相値と第１位相情報の位相値との差分（図５では、説明を簡単にするため、この差分そのものが補正値Ａｄｊであるとする）を求め、各サンプル期間の第１位相情報の位相値にその差分Ａｄｊを加えている。このことにより、もとの第１位相情報よりも、ずれ量Ｄだけ「位相」が早い位相情報を得ることができる。
【００４９】
そして、この補正後の位相情報に対し変調量Ｍｏｄを加算して変調することにより、もとの第１位相情報に加算した場合よりもずれ量Ｄだけ「位相」が早い第２位相情報を得ることができる。そして、このことにより、図５に示すように、第２位相情報の変動周期は、第１位相情報の変動周期と重なることになる。
【００５０】
なお、図３の例では、補正量Ａｄｊを、補正後の第１位相情報（図５の二点鎖線）と、その補正後の第１位相情報を変調して得た第２位相情報（図５の点線）との差分として求めている。しかし、図４と図５の対比からわかるように、これらのグラフは、位相カウンタが出力する第１位相情報（図４の実線）及び、補正しない第１位相情報を変調して得た第２位相情報（図４の点線）のグラフを、時間を早める方向へずれ量Ｄだけ平行移動したものとなる。このため、図３の手法でも、補正の影響を受けることなく（実際にはＬＰＦ２１０を通すため若干影響はあるが特に問題とならずに）、ずれ量Ｄと対応する補正量Ａｄｊを求めることができる。
【００５１】
以上の補正を行うことにより、変調値演算部２０５で行う処理の内容によらず、波形情報取得部２０４に入力する第２位相情報の変動周期を一定に保つことができるため、処理内容がダイナミックに変化する変調処理を施された位相情報に基づき出力波形データを生成する場合でも、出力波形データにおける意図しないピッチの変化を抑えることができる。
【００５２】
なお、図３に示した波形生成部１３１の機能と対応する処理は、例えば図６のフローチャートに示すものとすることができる。
ＣＰＵ１１は、ソフトウェアシンセサイザプラグインのプログラムを実行することにより、サンプル期間毎に図６の処理を開始する。なお、波形データを出力に間に合うように用意できるのであれば、図６の処理の実行間隔は、必ずしも再生時のサンプリング周期と一致していなくてもよい。
【００５３】
図６の処理において、ＣＰＵ１１はまず、ピッチ生成部１２２から供給された周波数情報に基づき位相カウンタ２０１のカウント値（第１位相情報）を加算する（Ｓ１１）。このときカウント値が０〜１に収まるように調整することは上述の通りである。
次に、ＣＰＵ１１は、ステップＳ１１での加算後の第１位相情報に前回の処理で設定した補正値Ａｄｊを加算する（Ｓ１２）。そしてさらに、その加算結果に対し、前回の処理で設定した変調値Ｍｏｄを加算して、第２位相情報を生成する（Ｓ１３）。これらのステップでもカウント値が０〜１に収まるように調整することは上述の通りである。
【００５４】
次に、ＣＰＵ１１は、波形情報取得部２０４の機能と対応する処理により、第２位相情報と対応する波形情報のサンプル値を取得し（Ｓ１４）、これを音量制御部１３２へ出力する（Ｓ１５）。また、ステップＳ１４で取得したサンプル値を、変調値演算部２０５の機能と対応する変調値生成ルーチンに入力する（Ｓ１６）。そして、ＣＰＵ１１は、このサンプル期間における変調値生成ルーチンの出力を変調値Ｍｏｄとする（Ｓ１７）。
【００５５】
また、ＣＰＵ１１は、ステップＳ１３での変調値Ｍｏｄの加算の際に、第２位相情報がオーバーフローした（加算結果が１を超えたため１を減算した）か否か判断する（Ｓ１８）。ここでＹｅｓであれば、ＣＰＵ１１は、補間により、第２位相情報が０になった時点の第１位相情報＋補正値Ａｄｊの値を算出し、補正準備値Ａｄｊｐとする（Ｓ１９）。ステップＳ１８でＮｏであれば、ステップＳ１９はスキップする。
いずれの場合も、ＣＰＵ１１は、この時点の補正準備値Ａｄｊｐを、ＬＰＦ２１０の機能と対応するＬＰＦ処理ルーチンに入力する（Ｓ２０）。そして、ＣＰＵ１１は、このサンプル期間におけるＬＰＦ処理ルーチンの出力を補正値Ａｄｊとして（Ｓ２１）、処理を終了する。
【００５６】
次に、上述した実施形態の変形例について説明する。この変形例は、波形生成部１３１の構成が上述した実施形態と異なるのみである。
図７に、変形例における波形生成部１３１の機能構成を示す。この図において、図３に示したものと対応する構成要素には、図３と同じ符号を付した。
【００５７】
図７に示す変形例においては、差分算出部２０７が、位相カウンタ２０１が出力する位相値（補正前の第１位相情報である）と、加算部２１１にて補正値Ａｄｊ及び変調値Ｍｏｄを加算後の位相値（第２位相情報である）との差分を求める。すなわち、補正値Ａｄｊと変調値Ｍｏｄの合計値の符号を反転した値を求める。第２位相情報の位相値が「０」になった時点での差分を算出する点は、図３の場合と同様である。
【００５８】
なお、加算部２１１は、図３の加算部２０２と加算部２０３の機能を合わせたものであり、位相カウンタ２０１が出力する位相値に、補正値Ａｄｊ及び変調値Ｍｏｄを加算して、波形情報取得部２０４に入力する第２位相情報を生成する。加算の順序は、補正値Ａｄｊ及び変調値Ｍｏｄのどちらが先でもよい。
また、加算部２１２を設け、切替部２０８が接続状態になった場合に、補正値保持部２０９が現在保持している補正準備値Ａｄｊｐに、差分算出部２０７が検出した差分を加算した値を、新たな補正準備値Ａｄｊｐとして補正値保持部２０９に供給して保持させる。
タイミング検知部２０６、切替部２０８、およびＬＰＦ２１０を含め、その他の各部の機能は図３の例と同じである。
【００５９】
以上の波形生成部１３１によれば、図５に点線で示す変調後位相情報が１から０に変化するタイミングの、実線で示す位相カウンタ２０１の出力に基づき、補正値Ａｄｊを調整することができる。従って、変調後位相情報と、位相カウンタ２０１の出力とで「位相」がずれ、１から０に変化するタイミングが異なる場合、それを打ち消す方向へ補正値Ａｄｊの値を変更することができる。このため、図３の構成の場合と同様、変調後位相情報と位相カウンタ２０１の出力の「位相」を一致させることができる。
【００６０】
以上で実施形態の説明を終了するが、装置及び機能の構成、具体的な処理の手順などが、上述の実施形態で説明したものに限られないことはもちろんである。
例えば、差分算出部２０７が差分を算出し補正値保持部２０９に供給するタイミングを、第２位相情報あるいは第１位相情報がオーバーフローする（変動領域の端部の値を基準とした）タイミングではなく、位相値０．５を超えた時点など、変動領域の途中の値を基準としたタイミングとしてもよい。
【００６１】
また、位相値の変動範囲は０から１には限られない。さらに、この変動範囲が波形の１周期と対応していることも必須ではない。例えば、位相値の０が正弦波の位相０に、位相値の１が正弦波の位相４πにそれぞれ対応する、というように、位相値の変動範囲が波形の複数周期と対応していてもよい。
また、図２及び図３等に示した波形データの生成及び出力に係る機能を、ソフトウェアではなく、専用のハードウェアにより、あるいは、ソフトウェアとハードウェアの組み合わせにより実現してもよい。
【００６２】
また、この発明は、マルチトラックレコーダや電子楽器、音源装置等、図２及び図３に示した機能により波形データの生成及び出力以外の機能を合わせ持つ任意の音響信号処理装置、あるいはコンピュータにそのような音響信号処理装置の機能を実現させるためのプログラムに適用可能であることはもちろんである。
この場合において、音響信号処理装置が、図１において波形生成装置１０の外部に示したサウンドシステム、ディスプレイ等を備えていてよいことはもちろんである。
【００６３】
また、上記の音響信号処理装置あるいは波形生成装置の機能を実現するためのプログラムは、はじめからコンピュータに備えるＲＯＭや他の不揮発性記憶媒体（フラッシュメモリ，ＥＥＰＲＯＭ等）などに格納しておいてもよい。しかし、メモリカード、ＣＤ、ＤＶＤ、ブルーレイディスク等の任意の不揮発性記録媒体に記録して提供することもできる。それらの記録媒体に記録されたプログラムをコンピュータにインストールして実行させることにより、上述した各手順を実行させることができる。
【００６４】
さらに、ネットワークに接続され、プログラムを記録した記録媒体を備える外部装置あるいはプログラムを記憶手段に記憶した外部装置からダウンロードし、コンピュータにインストールして実行させることも可能である。
また、以上述べてきた構成及び変形例は、矛盾しない範囲で適宜組み合わせて適用することも可能である。
【産業上の利用可能性】
【００６５】
以上の説明から明らかなように、処理内容がダイナミックに変化する変調処理を施された位相情報に基づき出力波形データを生成する場合でも、出力波形データにおける意図しないピッチの変化を抑えることができる。
従って、この発明を適用することにより、出力波形データの品質を向上させることができる。
【符号の説明】
【００６６】
１０…波形生成装置、１１…ＣＰＵ、１２…ＲＯＭ、１３…ＲＡＭ、１４…ＨＤＤ、１５…ＤＭＡ制御部、１６…ＤＡＣ、１７…外部機器Ｉ／Ｆ、１８…表示回路、１９…検出回路、２０…通信Ｉ／Ｆ、２１…システムバス、１０１…ＭＩＤＩドライバ、１０２…オーディオドライバ、１１０…シーケンサアプリ、１２０…ソフトウェアシンセサイザプラグイン、１２１…イベントハンドラ、１２２…ピッチ生成部、１２３…エンベロープ信号生成部、１２４…オペレータ、１２５…出力部、１３１…波形生成部、１３２…音量制御部、２０１…位相カウンタ、２０２，２０３，２１１，２１２…加算部、２０４…波形情報取得部、２０５…変調値演算部、２０６…タイミング検知部、２０７…差分算出部、２０８…切替部、２０９…補正値保持部、２１０…ＬＰＦ
【図１】
0006428326.tif 000002
【図２】
0006428326.tif 000003
【図３】
0006428326.tif 000004
【図４】
0006428326.tif 000005
【図５】
0006428326.tif 000006
【図６】
0006428326.tif 000007
【図７】
0006428326.tif 000008