(57)【特許請求の範囲】
【請求項１】
唄わせる歌詞の音素を表す歌詞情報と少なくともピッチ情報を含む演奏情報とを入力する入力手段と、
音素を指定する情報とピッチを指定する情報と当該音素の発音開始からの経過時間とを引数として与えると、それらに対応したフォルマントパラメータが出力される音素データベースと、
上記音素データベースを参照して、上記入力手段により入力した歌詞情報およびピッチ情報と当該歌詞情報が示す音素の発音開始からの経過時間とに対応するフォルマントパラメータを求める手段と、
求めたフォルマントパラメータに応じたフォルマントを有する音声を、上記ピッチ情報に応じたピッチで、合成出力するフォルマント合成音源と
を備えた楽音合成装置において、
前後の音素の組み合わせ毎に、前の音素から後の音素に移行する際の補間時間である調音結合時間を記憶した調音結合データベースと、
新たな音素の発音が指示された場合には、現在発音中の音素があるか否かを検出し、あったときには、当該発音中の音素から新たな音素へ移行する際に用いる調音結合時間を、前記調音結合データベースから取り出す手段と、
前記調音結合時間をかけて前記発音中の音素のフォルマントパラメータから新たな音素のフォルマントパラメータへと移行するように、補間して求めたフォルマントパラメータを順次前記フォルマント合成音源に出力する補間手段と
をさらに備えたことを特徴とする楽音合成装置。
【請求項２】
請求項１に記載の楽音合成装置において、
前記補間手段は、前記取り出した調音結合時間と前記新たな音素のデュレーションタイムとを比較し、前記調音結合時間が前記デュレーションタイムよりも長い場合は、前記調音結合時間を前記デュレーションタイムに一致させるものであることを特徴とする楽音合成装置。
【請求項３】
唄わせる歌詞の音素を表す歌詞情報と少なくともピッチ情報を含む演奏情報とを入力する入力ステップと、
音素を指定する情報とピッチを指定する情報と当該音素の発音開始からの経過時間とを引数として与えると、それらに対応したフォルマントパラメータが出力される音素データベースを用いて、上記入力手段により入力した歌詞情報およびピッチ情報と当該歌詞情報が示す音素の発音開始からの経過時間とに対応するフォルマントパラメータを求めるステップと、
求めたフォルマントパラメータに応じたフォルマントを有する音声を、上記ピッチ情報に応じたピッチで、合成出力するステップとを備えた楽音合成方法において、
前後の音素の組み合わせ毎に、前の音素から後の音素に移行する際の補間時間である調音結合時間を記憶した調音結合データベースを設けるとともに、
新たな音素の発音が指示された場合には、現在発音中の音素があるか否かを検出し、あったときには、当該発音中の音素から新たな音素へ移行する際に用いる調音結合時間を、前記調音結合データベースから取り出すステップと、
前記調音結合時間をかけて前記発音中の音素のフォルマントパラメータから新たな音素のフォルマントパラメータへと移行するように、補間して求めたフォルマントパラメータを順次前記フォルマント合成音源に出力する補間ステップと
をさらに備えたことを特徴とする楽音合成方法。
【請求項４】
請求項３に記載の楽音合成方法において、
前記補間ステップは、前記取り出した調音結合時間と前記新たな音素のデュレーションタイムとを比較し、前記調音結合時間が前記デュレーションタイムよりも長い場合は、前記調音結合時間を前記デュレーションタイムに一致させるものであることを特徴とする楽音合成方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、所望のフォルマントにしたがう自然な楽音を合成する楽音合成装置および方法に関する。
【０００２】
【従来の技術】
従来より、人が発する音声には所定のフォルマントが存在し、これにより音声が特徴づけられていることが知られている。一方、楽音合成装置で音声を合成して所望の音高で出力することにより歌を唄わせる試みがなされている。
【０００３】
【発明が解決しようとする課題】
このように楽音合成装置で歌唱させる場合、より自然な合成音を得ることが求められている。特に、音高（ピッチ）を含む各種の演奏情報が変化した場合でも、それらの演奏情報に適応して自然な歌声を合成できるようにすることが求められている。
【０００４】
この発明は、フォルマント合成音源を用いて歌唱させる場合に、より自然な合成音を得ることができ、特にピッチを含む各種の演奏情報の変化に適応した自然な歌声を合成することが可能な楽音合成装置および方法を提供することを目的とする。
【０００５】
【課題を解決するための手段】
この目的を達成するため、請求項１に係る発明は、唄わせる歌詞の音素を表す歌詞情報と少なくともピッチ情報を含む演奏情報とを入力する入力手段と、音素を指定する情報とピッチを指定する情報と当該音素の発音開始からの経過時間とを引数として与えると、それらに対応したフォルマントパラメータが出力される音素データベースと、上記音素データベースを参照して、上記入力手段により入力した歌詞情報およびピッチ情報と当該歌詞情報が示す音素の発音開始からの経過時間とに対応するフォルマントパラメータを求める手段と、求めたフォルマントパラメータに応じたフォルマントを有する音声を、上記ピッチ情報に応じたピッチで、合成出力するフォルマント合成音源とを備えた楽音合成装置において、前後の音素の組み合わせ毎に、前の音素から後の音素に移行する際の補間時間である調音結合時間を記憶した調音結合データベースと、新たな音素の発音が指示された場合には、現在発音中の音素があるか否かを検出し、あったときには、当該発音中の音素から新たな音素へ移行する際に用いる調音結合時間を、前記調音結合データベースから取り出す手段と、前記調音結合時間をかけて前記発音中の音素のフォルマントパラメータから新たな音素のフォルマントパラメータへと移行するように、補間して求めたフォルマントパラメータを順次前記フォルマント合成音源に出力する補間手段とを備えたことを特徴とする。
【０００６】
請求項２に係る発明は、請求項１において、前記補間手段は、前記取り出した調音結合時間と前記新たな音素のデュレーションタイムとを比較し、前記調音結合時間が前記デュレーションタイムよりも長い場合は、前記調音結合時間を前記デュレーションタイムに一致させるものであることを特徴とする。
【０００７】
請求項３に係る発明は、唄わせる歌詞の音素を表す歌詞情報と少なくともピッチ情報を含む演奏情報とを入力する入力ステップと、音素を指定する情報とピッチを指定する情報と当該音素の発音開始からの経過時間とを引数として与えると、それらに対応したフォルマントパラメータが出力される音素データベースを用いて、上記入力手段により入力した歌詞情報およびピッチ情報と当該歌詞情報が示す音素の発音開始からの経過時間とに対応するフォルマントパラメータを求めるステップと、求めたフォルマントパラメータに応じたフォルマントを有する音声を、上記ピッチ情報に応じたピッチで、合成出力するステップとを備えた楽音合成方法において、前後の音素の組み合わせ毎に、前の音素から後の音素に移行する際の補間時間である調音結合時間を記憶した調音結合データベースを設けるとともに、新たな音素の発音が指示された場合には、現在発音中の音素があるか否かを検出し、あったときには、当該発音中の音素から新たな音素へ移行する際に用いる調音結合時間を、前記調音結合データベースから取り出すステップと、前記調音結合時間をかけて前記発音中の音素のフォルマントパラメータから新たな音素のフォルマントパラメータへと移行するように、補間して求めたフォルマントパラメータを順次前記フォルマント合成音源に出力する補間ステップとを備えたことを特徴とする。
請求項４に係る発明は、請求項３に記載の発明において、前記補間ステップは、前記取り出した調音結合時間と前記新たな音素のデュレーションタイムとを比較し、前記調音結合時間が前記デュレーションタイムよりも長い場合は、前記調音結合時間を前記デュレーションタイムに一致させるステップとをさらに備えたことを特徴とする。
【０００９】
【発明の実施の形態】
以下、図面を用いてこの発明の実施の形態を説明する。
【００１０】
図１は、この発明に係る楽音合成装置（歌唱シンセサイザ）のシステム構成を示す。この楽音合成装置は、中央処理装置（ＣＰＵ）１０１、ＭＩＤＩ（Musical Instrument Digital Interface）インタフェース１０２、データメモリデバイス１０４、ワーキングメモリ１０６、プログラムメモリ１０７、設定操作子１０９、ディスプレイ１１１、ネットワークインターフェース１１２、フォルマント合成音源１１５、サウンドシステム１１６、およびシステム共通バス１１７を備えている。１０１，１０４，１０６〜１０９，１１１，１１２，１１５の各部は、システム共通バス１１７に接続されている。サウンドシステム１１６をシステム共通バス１１７に接続してＣＰＵ１０１から制御できるようにしてもよい。
【００１１】
ＣＰＵ１０１は、この楽音合成装置全体の動作を制御する。ＣＰＵ１０１は、ＭＩＤＩインタフェース１０２を介して、外部のＭＩＤＩ機器群１０３との間でＭＩＤＩ方式メッセージを送受信する機能を有する。データメモリデバイス１０４は、各種のデータを記憶する記憶装置であり、具体的には、半導体メモリ、フロッピーディスク装置（ＦＤＤ）、ハードディスク装置（ＨＤＤ）、光磁気（ＭＯ）ディスク装置、およびＩＣメモリカード装置などのローカルデータ記憶装置１０５である。特に、データメモリデバイス１０４は、ＭＩＤＩデータで演奏データや歌詞データなどを格納している。ローカルデータ記憶装置１０５としては、上記に例示したもののほかにも、様々な形態のメディアを利用する装置が使用できる。
【００１２】
ワーキングメモリ１０６は、ＣＰＵ１０１が動作する際にワーク領域として使用するＲＡＭ（ランダムアクセスメモリ）であり、各種のレジスタ、フラグ、およびバッファなどに使用する。プログラムメモリ１０７は、ＣＰＵ１０１が実行する制御プログラムや各種定数データなどを格納したＲＯＭ（リードオンリメモリ）である。設定操作子１０９は、ユーザが操作する各種スイッチなどの操作子であり、例えば通常のパーソナルコンピュータで用いられているマウス１１０やキーボードなどでよい。ディスプレイ１１１は、各種の情報を表示するために使用する表示装置である。
【００１３】
ネットワークインターフェース１１２は、電話回線などの公衆回線やイーサネット（Ｅｔｈｅｒｎｅｔ）などのローカルエリアネットワーク（ＬＡＮ）に接続するためのインターフェースである。いわゆるパソコン通信やインターネットなどに接続するためのインターフェースでもよい。このネットワークインターフェース１１２を介して、各種のネットワーク１１３に接続することにより、外部のサーバやホストコンピュータから（具体的には、それらに接続されたリモートデータ記憶装置１１４などから）各種のプログラムやデータをダウンロードすることができる。
【００１４】
フォルマント合成音源１１５は、ＣＰＵ１０１からの指示（フォルマントパラメータなど）に応じて、指定されたフォルマントの音声を指定された音高で生成出力する。フォルマント合成音源１１５から出力された音声信号は、サウンドシステム１１６により放音される。
【００１５】
この楽音合成装置では、データメモリ１０４から読み出したＭＩＤＩ形式の歌詞データ（唄わせる歌詞を指定するデータ）および演奏データ（音高などの演奏情報を指定するデータ）や、ＭＩＤＩインターフェース１０２を介してＭＩＤＩ機器１０３から入力した歌詞データおよび演奏データにしたがって、歌唱発音を行なうことができる。歌詞データおよび演奏データは、別に接続した演奏操作子（例えば鍵盤など）１０８から入力したＭＩＤＩデータを用いてもよいし、ネットワークインターフェース１１２を介して外部のネットワーク１１３から入力したＭＩＤＩデータを用いてもよい。この場合、入力したデータをリアルタイムに処理して歌唱させてもよいし、一旦、データメモリデバイス１０４（ローカルデータ記憶装置１０５）に格納した後、それを読み出して処理することにより歌唱させてもよい。歌詞データと演奏データとを別の系列から入力するようにしてもよい。例えば、データメモリデバイス１０４にあらかじめ格納されている歌詞データの歌詞を、演奏操作子１０８からリアルタイムに入力する演奏データの音高で、歌唱させるようにすることもできる。以上のように、歌詞データと演奏データはどのような方式で用意してもよい。
【００１６】
このような歌唱発音は、ＣＰＵ１０１の制御のもとで行なわれる。すなわち、ＣＰＵ１０１は、上述のように各種の方式で用意された歌詞データと演奏データを入力し、後述の図４〜図９で説明するような処理でフォルマント合成音源１１５に発音指示を出し、これにより歌唱させる。この際ＣＰＵ１０１が実行する制御プログラムはＲＯＭであるプログラムメモリ１０７に格納されているものであるが、プログラムメモリ１０７をＲＯＭの代わりにＲＡＭで構成し、ローカルデータ記憶装置１０５に制御プログラムを格納しておき、該制御プログラムを必要に応じてＲＡＭであるプログラムメモリ１０７にロードして実行するようにしてもよい。このようにすれば、制御プログラムの追加やバージョンアップなどが容易に行なえる。特に、ＣＤ−ＲＯＭなどの着脱可能な記録媒体に記憶されている本発明に係る制御プログラムや各種データをＨＤＤなどのローカルデータ記憶装置１０５にインストールして使用するようにすれば、制御プログラムやデータの新規インストールやバージョンアップなどが容易に行なえる。また、ＣＰＵ１０１が実行する制御プログラムは、ネットワークインターフェース１１２を介してネットワーク経由でダウンロードしたものでもよい。その際、ネットワークからダウンロードした制御プログラムを一旦ローカルデータ記憶装置１０５に格納し必要に応じてＲＡＭ構成のプログラムメモリ１０７にロードして実行するようにしてもよいし、ネットワークからダウンロードした制御プログラムを直接ＲＡＭ構成のプログラムメモリ１０７にロードして実行するようにしてもよい。
【００１７】
このような楽音合成装置は、各種の形態で実現可能である。例えば、シンセサイザ、音源モジュールなどの電子楽器に適用してもよいし、いわゆるマルチメディアパソコンに適用してもよい。汎用のパーソナルコンピュータに音源ボードを装着し、外部の鍵盤などのＭＩＤＩ機器から演奏情報（ＭＩＤＩ入力）を入力するＭＩＤＩインターフェースを装着して、必要なソフトウエアを実行することで実現することもできる。
【００１８】
図２は、本発明に係る図１の楽音合成装置で歌唱させる場合の処理概要を示す図である。演奏データ２０１や歌詞データ２０２は、上述したような各種の方式でＭＩＤＩデータでＣＰＵ１０１に入力する。演奏データ２０１は、音高（ピッチ）情報やベロシティ情報などを含むノートオンとノートオフである。歌詞データ２０２は、演奏データ２０１で指定した音符で発音すべき歌詞（音素データ）を示す。歌詞データ２０２は、ＭＩＤＩのシステムエクスクルーシブなどの形式で作成する。例えば、「さいた」という歌詞（音素で表わすと「ｓａｉｔａ」）を順次Ｃ３，Ｅ３，Ｇ３の音高で唄わせる場合、演奏データ２０１と歌詞データ２０２は、例えば以下のようなシーケンス（１）でＣＰＵ１０１に入力させる。・ｓ＜２０＞ａ＜００＞
・Ｃ３のノートオン
・Ｃ３のノートオフ
・ｉ＜００＞
・Ｅ３のノートオン        ………（１）
・Ｅ３のノートオフ
・ｔ＜０２＞ａ＜００＞
・Ｇ３のノートオン
・Ｇ３のノートオフ
【００１９】
なお、ここではノートオンメッセージの前にその音符で発音すべき歌詞データを送るようにしている。ｓ，ａ，ｉ，ｔはそれぞれ音素を示し、音素に続く＜＞内の数値はその音素のデュレーションタイム（持続時間）を示す。ただし、＜００＞は次の音素のノートオンが来るまでその音素を持続させて発音することを示す。歌詞データｓ＜２０＞ａ＜００＞とｉ＜００＞とｔ＜０２＞ａ＜００＞とは、それぞれ、所定のシステムエクスクルーシブのスタートを表すコードとエンドを表すコードに挟まれたデータであり、歌詞データであることが分かるようになっている。以下では、ｓ＜２０＞ａ＜００＞のような１ノート中で発音する歌詞のシーケンスをフォーンシーケンス（phoneSEQ）と呼び、歌詞データバッファ２１０をフォーンシーケンスバッファ（phoneSEQバッファ）と呼ぶものとする。
【００２０】
このようなシーケンス（１）を受信したＣＰＵ１０１は、以下のように動作する。まず始めに、フォーンシーケンスｓ＜２０＞ａ＜００＞を受信すると、そのフォーンシーケンスをフォーンシーケンスバッファ２１０に記憶しておく。フォーンシーケンスバッファ２１０は、ワーキングメモリ１０６内に用意してあるバッファである。次に、「Ｃ３のノートオン」を受信すると、ＣＰＵ１０１は、フォーンシーケンスバッファ２１０を参照して発音させる歌詞ｓ＜２０＞ａ＜００＞を知り、その歌詞を指定音高「Ｃ３」で発生するようにフォルマントパラメータを算出してフォルマント合成音源１１５に送出する。フォルマントパラメータは、所定時間（ここでは５ｍｓｅｃ）ごとに送出する。これにより、歌詞ｓ＜２０＞ａ＜００＞の音高「Ｃ３」での発音が行なわれる。
【００２１】
次に「Ｃ３のノートオフ」を受信するが、直前にａ＜００＞が指定されているので、次のノートオンまで「ａ」を持続させるため、ＣＰＵ１０１は受信した「Ｃ３のノートオフ」を無視する。次に発音すべきフォーンシーケンスｉ＜００＞を受信するとそのフォーンシーケンスをフォーンシーケンスバッファ２１０に記憶し、「Ｅ３のノートオン」を受信すると、ＣＰＵ１０１は、フォーンシーケンスバッファ２１０を参照して発音させる歌詞ｉ＜００＞を知り、その歌詞を指定音高「Ｅ３」で発生するようにフォルマントパラメータを算出してフォルマント合成音源１１５に送出する。以下、「ｔａ」の発音も同様の処理により行なう。
【００２２】
フォルマントパラメータは、時系列データであり、ＣＰＵ１０１から所定の時間間隔でフォルマント合成音源１１５に転送する。所定の時間間隔とは、通常、人の音声の特徴を出して発音するには、例えば数ｍｓｅｃ間隔程度の低レートでよい。この実施の形態では５ｍｓｅｃごととした。この時間間隔で逐次フォルマントを時間的に変化させることにより、人の音声の特徴を出して歌を唄わせる。フォルマントパラメータとしては、例えば、有声音／無声音の別、フォルマント中心周波数、フォルマントレベル、およびフォルマントバンド幅（周波数軸上でのフォルマントの形状を規定するパラメータ）などがある。
【００２３】
ＣＰＵ１０１は、入力したフォーンシーケンス２０２と演奏データ２０１に基づいてフォルマントパラメータを算出するが、その際、音素データベースと調音結合データベースを参照する。音素データベースと調音結合データベースは、あらかじめローカルデータ記憶装置１０５に用意されており、それをワーキングメモリ１０６にロードして使用するものとする。何種類かの発音声質（個人差、男声、女声など）で歌唱させることができるように、声質ごとに各種用意した音素データベースと調音結合データベースを選択して用いることができるようにしてもよい。
【００２４】
図３は、音素データベースの参照方式の概念図である。３０１は音素データベースを示す。音素データベース３０１は、各音素ごとのフォルマントパラメータを集めたものである。３０２−１，３０２−２，３０２−３，…，３０２−Ｎ（Ｎは音素の数）は、それぞれ、一つの音素のフォルマントパラメータを集めたものを示す。一つの音素のフォルマントパラメータの集まり（例えば３０２−１）とは、当該音素の発音開始からの経過時間とその時点のピッチとを入力すると対応するフォルマントパラメータが一意に出力されるようなデータベースである。したがって、音素データベース３０１は、音素を特定する音素ナンバ、ピッチ、およびその音素の発音開始からの経過時間を入力し、該入力データに応じたフォルマントパラメータを出力するデータベースである。その形態はどのようなものでもよい。例えば、テーブルの形態でもよいし、入力データの範囲を所定のセグメントに分けて各セグメントごとにフォルマントパラメータを保持しておき入力データに応じた補間処理を行なって出力するようなものでもよい。また、連続データあるいは数式データの形態でもよい。
【００２５】
なお、図３では音素データベース３０１のフォルマントパラメータとしてフォルマント周波数およびフォルマントレベルのグラフ３０５，３０６のみを例示したが、フォルマントパラメータというときは、フォルマント周波数およびフォルマントレベルに限らず、フォルマントバンド幅などの他のフォルマントパラメータを含んでいてもよい。また図３では、時間軸方向の次元は省略し、音素ナンバと矢印３０７のように入力するピッチに応じてフォルマント周波数およびフォルマントレベルが定まる様子を示した。
【００２６】
ＣＰＵ１０１が音素データベースを参照する際に使用するピッチは、３０３に示すように、ノートオンで指定される基本的なピッチデータにピッチベンドデータおよびその他のピッチ生成データを加算した値である。歌声のフォルマント（特にフォルマント周波数）は、ピッチに応じて音素ごとに異なる変化をする。本実施の形態では、ピッチに応じたフォルマントパラメータを出力するように音素データベースを構成しているので、ピッチに応じたフォルマントの変化を合成音声でシミュレートでき、自然な歌声を合成することが可能である。なお、３０４に示すように、ベロシティデータ、ボリュームデータ、およびその他レベル生成データを加算した値を、ピッチデータに反映させても良い。ベロシティ、ボリューム、およびその他レベルデータは、ピッチを変化させる場合があるので、そのピッチの変化をフォルマントパラメータに反映させるということである。特に、ＣＰＵ１０１の処理速度が速ければ、フォルマントパラメータを音源１１５に出力するタイミングの都度、その時点のピッチを反映させてフォルマントパラメータを算出するとよい。
【００２７】
図４は、この楽音合成装置の電源がオンされたときにＣＰＵ１０１が実行するメインプログラムの手順を示す。まずステップ４０１で、各種の初期設定を行なう。特に、後述する発音フラグＨＦＬＡＧは０に初期設定する。次にステップ４０２で各種のイベントを待つ。イベントが発生したときは、発生したイベントをステップ４０３で判別し、それぞれに応じた処理４０４〜４０６を実行し、再びステップ４０２に戻る。ステップ４０４は、ＭＩＤＩメッセージを受信したときに実行されるＭＩＤＩ受信処理である。ステップ４０５は，ＭＩＤＩ受信バッファ中のデータを処理するためのＭＩＤＩデータ処理である。このＭＩＤＩデータ処理は、他のイベントが発生せずタスクが空いているとき繰り返し実行される。その他、各種のイベントが発生したときには発生したイベントに応じた処理（ステップ４０６）を行なう。
【００２８】
図５は、図４のステップ４０４のＭＩＤＩ受信処理の手順を示す。ＭＩＤＩ受信処理では、ステップ５０１で、受信したＭＩＤＩメッセージをＭＩＤＩ受信バッファ（ワーキングメモリ１０６内に確保されている）へ書き込み、リターンする。
【００２９】
図６は、図４のステップ４０５のＭＩＤＩデータ処理の手順を示す。まず、ステップ６０１で、ＭＩＤＩ受信バッファより１バイトを取り込む。次にステップ６０２で、取り込んだ１バイトデータがステータスバイト（最上位ビットが１）であるか否か判別する。ステータスバイトであるときは、ステップ６０４で、ステータスバイト以降のデータバイトを取り込み、ステータスバイトとともに所定のバッファに記憶し、ステップ６０５に進む。ステップ６０２でステータスバイトでないときは、ステップ６０３でその他の処理を行なった後、リターンする。なお、ステータスバイトを取り込んだ時点でＭＩＤＩ受信バッファに以降に続くデータバイトが受信されているとは限らないので、ステップ６０３でステータスバイトに引き続くデータバイトを順次取り込み、１メッセージ分が取り込まれた時点でステップ６０４に進むようにしてもよい。ステップ６０４の時点では、一つのＭＩＤＩメッセージが所定のバッファに取り込まれていることになる。
【００３０】
ステップ６０５では、受信したＭＩＤＩメッセージの各ステータスごとに処理を分岐する。ノートオンであるときは、図７のノートオン処理に進む。ノートオフであるときは、図８のノートオフ処理に進む。システムエクスクルーシブであるときは、ステップ６０７に進み、当該ＭＩＤＩメッセージがフォーンシーケンスのメッセージであるか否かを判別する。フォーンシーケンスであるときは、ステップ６０８で、当該フォーンシーケンスをフォーンシーケンスバッファへ書き込み、リターンする。ステップ６０７でフォーンシーケンスでないときは、ステップ６０９で他のシステムエクスクルーシブの処理を行なった後、リターンする。ステップ６０５で当該ＭＩＤＩメッセージがその他のメッセージであるときは、ステップ６０６で、各ステータスに応じた処理を行なった後、リターンする。特に、受信したＭＩＤＩメッセージが歌唱終了情報（演奏データの最後には曲の終了を示す歌唱終了情報が入力するものとする）であったときは、ステップ６０６に進み、その時点で発音されているすべての音を消音して曲を終了する。
【００３１】
図７を参照して、ノートオンのＭＩＤＩメッセージを受信したときの処理を説明する。まずステップ７０１で、フォーンシーケンスのタイムカウンタtime_counterおよびフォーンカウンタphone_counterを０に初期化する。タイムカウンタtime_counterはタイマ割込（５ｍｓｅｃごと）がおきるごとにインクリメントされるカウンタであり、そのカウンタ値は各音素の発音開始時からの経過時間を５ｍｓｅｃ単位で表したものとなる。タイムカウンタtime_counterは、音素が切り替わるごとに０にリセットされる。フォーンカウンタphone_counterは、１ノート中（すなわち、１ノートで発音する１フォーンシーケンス中）における音素の順番を示すカウンタである。ノートが切り替わるごと、すなわちフォーンシーケンスが切り替わるごとに、０にリセットされ、１フォーンシーケンス中では音素が切り替わるごとにインクリメントされる。０から始まるので、１フォーンシーケンス中の最初の音素はphone_counter＝０、次の音素はphone_counter＝１、…、というようになる。
【００３２】
次に、ステップ７０２で、フォーンシーケンス中に呼気情報があるか否かを判別する。呼気情報とは、ある音素と次の音素とを区切って発音したい場合にフォーンシーケンス中に入れる情報である。呼気情報を入れる場合はフォーンシーケンス中の最後に入れるものとし、その場合、フォーンシーケンスの最後の音素の発音の後、その音素の発音が一旦停止し、次のフォーンシーケンスの発音が開始するようになる。ステップ７０２で呼気情報があるときは、呼気フラグf_kokiに１をセットし、ステップ７０５に進む。呼気情報がないときは、フラグf_kokiを０にリセットして、ステップ７０５に進む。
【００３３】
ステップ７０５では、フォーンシーケンスバッファ中のフォーンカウンタphone_counterで示される位置の音素ナンバとデュレーションタイム（duration time）を抽出する。いまはノートオン直後であってphone_counter＝０であるので、フォーンシーケンスバッファ中の最初の音素が抽出されることになる。次にステップ７０６で、抽出した音素ナンバとピッチデータより、図３で説明したように音素データベースを参照して、フォルマント周波数、フォルマントレベル、およびフォルマントバンド幅などのフォルマントパラメータを引き出す。ここで用いるピッチデータは、図３の３０３で説明したように、ノートオンで指定された基本的なピッチデータにピッチベンドデータやその他のピッチ生成データを反映して求めたピッチである。なお、音素データベースは入力した音素ナンバとピッチと発音開始からの経過時間に対応するフォルマントパラメータを出力するデータベースであるところ、ステップ７０６では音素ナンバとピッチのみを指定しているので、ここで引き出されるフォルマントパラメータは時系列データ（形態はテーブルや数式などの任意の形態でよいが、経過時間を入力するとフォルマントパラメータが一意に出力されるような情報）になる。後述するステップ７１０，９０５では、ステップ７０６で引き出されたフォルマントパラメータに、現タイムカウンタtime_counter値を入力して、その時点でのフォルマントパラメータを求めることになる。
【００３４】
次にステップ７０７で、前後の音素関係により調音結合データベースを参照し調音結合カーブと調音結合時間を取り出す。調音結合データベースは、ある音素から次の音素に滑らかに移行するために参照するデータベースである。前の音素と次の音素を特定すると調音結合データベースから調音結合カーブと調音結合時間を取り出すことができる。そして、その調音結合カーブに沿って前の音素のフォルマントパラメータから次の音素のフォルマントパラメータへと補間して求めたフォルマントパラメータを順次音源に送出することで、前の音素から次の音素への自然な移行が実現できる。このような処理を調音結合と呼ぶ。調音結合時間は、前の音素から次の音素へと補間を行ないつつ移行する時間である。ステップ７０７では、いまノートオンで発音しようとしている音素の前に発音中の音素があるかを確認し、前の音素があれば、その音素からいまノートオンで発音しようとしている音素へ移行する際に用いる調音結合カーブと調音結合時間を調音結合データベースから取り出す処理を行なうものである。
【００３５】
次にステップ７０８では、ステップ７０７で取り出した調音結合時間とステップ７０５で抽出した音素のデュレーションタイムとの大小関係を判別する。調音結合時間がデュレーションタイムより大きいときは、その調音結合時間だけの時間を使って調音結合を行なうと、いまノートオンで発音しようとしている音素のデュレーションタイムを越えてしまうので、発音のタイミングがずれてしまい不都合である。そこでステップ７０９で、調音結合時間をデュレーションタイムに一致させ、ステップ７１０に進む。ステップ７０８で調音結合時間がデュレーションタイムより大きくないときは、そのままステップ７１０に進む。
【００３６】
ステップ７１０では、先にステップ７０６で引き出したフォルマントパラメータを参照して現タイムカウンタtime_counterの値（ここではノートオン直後であるのでタイムカウンタtime_counterの値は０である）におけるフォルマントパラメータを取得し、さらにステップ７０７で調音結合カーブと調音結合時間が取り出されていたときは、取得したフォルマントパラメータと前の音素（現在発音中）のフォルマントパラメータを用いて、上記調音結合カーブと調音結合時間にしたがう調音結合処理を行ない、フォルマントパラメータを算出する。なお、ステップ７０７で調音結合カーブと調音結合時間が取り出されていなかったとき（前に発音中の音素なし）は、調音結合処理は行なう必要がない。次に、ステップ７１１で、算出したフォルマントデータとピッチを音源１１５へ書き込む。これにより、発音すべき音素の最初のフォルマントパラメータが音源１１５に転送され、発音が開始される。なおこれ以後は、後述する図９のタイマ処理で５ｍｓｅｃごとにフォルマントパラメータを音源１１５に送って発音を続ける。次にステップ７１２で、発音フラグＨＦＬＡＧに１をセットして、リターンする。発音フラグＨＦＬＡＧは、１のとき歌唱発音が行なわれていることを示し、０のとき行なわれていないことを示す。
【００３７】
次に図８を参照して、ノートオフのＭＩＤＩメッセージを受信したときの処理を説明する。まずステップ８０１で、いま発音中のフォーンシーケンスの音素のデュレーションタイムを参照し、該デュレーションタイムが＜００＞であって、かつ当該音素の後にさらに発音すべき音素があるか否かを判別する。そうであるとき（例えばデュレーションが＜００＞で伸ばして発音する音素の後を子音で終えたりするとき）は、その音素を発音するためにステップ８０２に進む。ステップ８０１で、いま発音中の音素のデュレーションタイムが＜００＞でないとき、またはデュレーションタイムは＜００＞だがその次に発音すべき音素がないときは、ステップ８０８に進む。
【００３８】
ステップ８０２では、フォーンシーケンス中のいま発音しているデュレーションタイムが＜００＞である音素の次の音素の位置にフォーンカウンタphone_counterを合わせる。さらにタイムカウンタtime_counterを０にリセットする。次にステップ８０３で、フォーンシーケンスバッファ中のフォーンカウンタphone_counterで示される位置の音素ナンバとデュレーションタイムを抽出する。いまはフォーンカウンタphone_counterが、最後に発音すべき音素に位置づけられておりその音素が抽出される。
【００３９】
次のステップ８０４，８０５，８０６，８０７は、それぞれ、図７で説明したステップ７０６，７０７，７１０，７１１と同じ処理である。これらのステップ８０４〜８０７により、発音すべき音素の最初のフォルマントパラメータが音源１１５に転送され、発音が開始される。なおこれ以後は、後述する図９のタイマ処理で５ｍｓｅｃごとにフォルマントパラメータを音源１１５に送って発音を続ける。以上のステップ８０４〜８０７により発音開始する音素は、デュレーションタイムが＜００＞で伸ばして発音した音素の次に発音される音素であるので、次にノートオンが受信されるまでの時間で発音されるものである。もし、ステップ８０４〜８０７により発音開始する音素のデュレーションタイムが長く、当該音素の発音中に次のノートオンが受信された場合は、図７で説明したように当該音素から次のノートオンの音素へと調音結合されて次の音素に強制的に移行することになる。
【００４０】
ステップ８０１でいま発音中の音素のデュレーションタイムが＜００＞でないとき、またはデュレーションタイムは＜００＞だがその次に発音すべき音素がないときは、ステップ８０８で、呼気フラグf_kokiが１であるか否かを判別する。呼気フラグf_kokiが１であるときは、ステップ８０９でキーオフ処理を行なって現在発音している音素を発音停止し、さらに発音フラグＨＦＬＡＧを０にリセットして、リターンする。ステップ８０８で呼気フラグf_kokiが１でないときは、そのままリターンする。結果として、呼気フラグf_kokiが１でないときは、現在発音中の音素の発音は持続することになる。
【００４１】
図９は、タイマ割込により５ｍｓｅｃごとに実行されるタイマ処理の処理手順を示す。タイマ処理では、まずステップ９０１で、発音フラグＨＦＬＡＧが１であるか否かを判別する。ＨＦＬＡＧが１でないときは、現在発音中でないからそのままリターンする。ＨＦＬＡＧが１のときは、ステップ９０２で、いま発音している音素のデュレーションタイムが＜００＞か否か判別する。デュレーションタイムが＜００＞のときは、現在発音中の音素の発音を継続するため、ステップ９０４に進む。デュレーションタイムが＜００＞でないときは、ステップ９０３で、タイムカウンタtime_counterの値が当該デュレーションタイム以下であるか否かを判別する。タイムカウンタtime_counterの値がデュレーションタイム以下のときは、現在発音している音素の発音をさらに継続するということであるから、ステップ９０４に進む。ステップ９０４ではタイムカウンタtime_counterをインクリメントし、現タイムカウンタtime_counter値におけるフォルマントパラメータを算出出力すべくステップ９０５に進む。
【００４２】
ステップ９０３でタイムカウンタtime_counterの値がデュレーションタイムを越えたときは、いま発音中の音素については当該デュレーションタイムだけ発音を終えたということだから、フォーンシーケンス中の次の音素の発音に移行するため、ステップ９０７に進む。ステップ９０７では、フォーンシーケンス中に次の音素があるか否か判別する。次の音素がないときは、ステップ９１２で発音フラグＨＦＬＡＧを０にリセットしてリターンする。次の音素があるときは、その発音をするため、まずステップ９０８で、フォーンカウンタphone_counterをインクリメントし、タイムカウンタtime_counterを０にリセットする。そして、ステップ９０９で、フォーンシーケンス中のフォーンカウンタphone_counterで示される位置（次に発音すべき音素）の音素ナンバとデュレーションタイムを抽出する。
【００４３】
次のステップ９１０，９１１，９０５，９０６は、それぞれ、図７で説明したステップ７０６，７０７，７１０，７１１と同じ処理である。これらのステップにより、発音すべき音素のフォルマントパラメータが音源１１５に転送される。なお、ステップ９０５では、先に音素データベースから引き出してあるフォルマントパラメータを参照して現タイムカウンタtime_counterの値におけるフォルマントパラメータを取得し、さらに先に調音結合データベースから取り出してある調音結合カーブと調音結合時間にしたがう調音結合処理を行なって、フォルマントパラメータを算出する。この「音素データベースから引き出してあるフォルマントパラメータ」とは、具体的には、ノートオンで発音開始した音素の場合はステップ７０６で引き出したもの、ノートオフ時にデュレーション＜００＞の後に存在した音素の場合はステップ８０４で引き出したもの、フォーンシーケンス中のデュレーションが＜００＞でない音素の次の音素の場合はステップ９１０で引き出したものである。同様に、ステップ９０５での調音結合に用いる調音結合カーブと調音結合時間は、具体的には、ノートオンで発音開始した音素の場合はステップ７０７で取り出したもの、ノートオフ時にデュレーション＜００＞の後に存在した音素の場合はステップ８０５で取り出したもの、フォーンシーケンス中のデュレーションが＜００＞でない音素の次の音素の場合はステップ９１１で取り出したものである。
【００４４】
次に、上述の図４〜図９の処理がどのように実行されるかの概要を、具体的な例で説明する。ここでは、「ｓａｉｔａ」をＣ３，Ｅ３，Ｇ３で発音する場合の下記シーケンス（１）の順でイベントが発生したとする。
・ｓ＜２０＞ａ＜００＞
・Ｃ３のノートオン
・Ｃ３のノートオフ
・ｉ＜００＞
・Ｅ３のノートオン        ………（１）
・Ｅ３のノートオフ
・ｔ＜０２＞ａ＜００＞
・Ｇ３のノートオン
・Ｇ３のノートオフ
【００４５】
これらの各ＭＩＤＩメッセージは、それぞれ、ステップ４０２→４０３→４０４→図５の５０１の手順で処理され、ＭＩＤＩ受信バッファに書き込まれる。また、書き込まれた各ＭＩＤＩメッセージは、空いた時間に図６のＭＩＤＩデータ処理のステップ６０５以降でＭＩＤＩメッセージの種類ごとに処理される。以下では、上記各ＭＩＤＩメッセージが、ステップ６０５以降どのように処理されるかを説明する。
【００４６】
まず、最初に受信したフォーンシーケンスｓ＜２０＞ａ＜０＞は、ステップ６０５→６０７→６０８の処理で、フォーンシーケンスバッファに書き込まれる。次の「Ｃ３のノートオン」は、ステップ６０５から図７のノートオン処理に進み処理される。ノートオン処理では、ステップ７０１→７０２→７０４→７０５と進み、フォーンシーケンスバッファから最初に発音すべき音素「ｓ」を示す音素ナンバとそのデュレーションタイム＜２０＞を抽出する。そして、ステップ７０６で音素データベースを参照し、音素「ｓ」の音素ナンバとピッチ「Ｃ３」に対応するフォルマントパラメータ群を引き出す。ここで引き出すフォルマントパラメータ群は、音素「ｓ」の発音開始時からの経過時間（５ｍｓｅｃごと）に応じて変化する時系列データのフォルマントパラメータ群（その形態は任意）である。次のステップ７０７では調音結合データベースを参照するが、いま発音しようとしている音素「ｓ」の前に発音している音素はないから、ステップ７０７，７０８では何も処理せず、ステップ７１０に進んで、現タイムカウンタtime_counter値（ノートオン直後なのでtime_counter＝０）におけるフォルマントパラメータを、先にステップ７０６で引き出したフォルマントパラメータ群から求める。求めたフォルマントパラメータを、ピッチデータおよびキーオン信号とともに、ステップ７１１で音源１１５に送出し、これにより音素「ｓ」で音高「Ｃ３」の楽音を発音開始させる。ステップ７１２で発音フラグＨＦＬＡＧ＝１とし、ノートオン処理を終える。
【００４７】
これ以降は、５ｍｓｅｃごとに図９のタイマ処理が実行され、ｓ＜２０＞の発音が継続される。タイマ処理では、始めはステップ９０１→９０２→９０３→９０４と進んでタイムカウンタtime_counterをインクリメントし、さらにステップ９０５で、現タイムカウンタtime_counter値におけるフォルマントパラメータを、先にステップ７０６で引き出したフォルマントパラメータ群から求める。ステップ９０６で、求めたフォルマントパラメータを音源に送出して、リターンするこのステップ９０１→９０２→９０３→９０４→９０５→９０６→リターンの流れを５ｍｓｅｃごとに繰り返し、タイムカウンタtime_counter＝２０に至ると、ステップ９０３から９０７に進み、次の音素ａ＜００＞に移行すべくステップ９０８に進む。そして、ステップ９０９で、フォーンシーケンスバッファから次に発音すべき音素「ａ」を示す音素ナンバとそのデュレーションタイム＜００＞を抽出する。ステップ９１０では音素データベースを参照し、音素「ａ」の音素ナンバとピッチ「Ｃ３」に対応するフォルマントパラメータ群を引き出す。ここで引き出すフォルマントパラメータ群は、音素「ａ」の発音開始時からの経過時間（５ｍｓｅｃごと）に応じて変化する時系列データのフォルマントパラメータ群である。次のステップ９１１では調音結合データベースを参照し、前の音素「ｓ」から今回の音素「ａ」に移行する際に用いる調音結合カーブおよび調音結合時間を取り出す。そして、ステップ９０５で、現タイムカウンタtime_counter値におけるフォルマントパラメータを、先にステップ９１０で引き出したフォルマントパラメータ群と、ステップ９１１で取り出した調音結合カーブおよび調音結合時間から、求める。求めたフォルマントパラメータを、ピッチデータおよびキーオン信号とともに、ステップ９０６で音源１１５に送出し、これにより音素「ｓ」から「ａ」に自然に移行しながら音高「Ｃ３」の楽音の発音を開始する。音素「ａ」のデュレーションタイムは＜００＞であるので、これ以降５ｍｓｅｃごとのタイマ処理では、ステップ９０２→９０４→９０５→９０６と進み、音素「ａ」の発音が継続する。
【００４８】
次の「Ｃ３のノートオフ」は、ステップ６０５から図８のノートオフ処理に進み処理される。現在発音中の音素「ａ」のデュレーションタイムは＜００＞であるが、その後に音素はないので、ステップ８０１から８０８に進む。また、呼気情報も設定されていないので、f_koki＝０であるから、そのままリターンする。したがって、音素「ａ」の発音は継続して実行される。
【００４９】
次のフォーンシーケンス「ｉ＜００＞」は、ステップ６０５→６０７→６０８の処理で、フォーンシーケンスバッファに書き込まれる。次の「Ｅ３のノートオン」は、ステップ６０５から図７のノートオン処理に進み処理される。ノートオン処理では、ステップ７０１→７０２→７０４→７０５と進み、フォーンシーケンスバッファから最初の音素「ｉ」を示す音素ナンバとそのデュレーションタイム＜００＞を抽出する。そして、ステップ７０６で音素データベースを参照し、音素「ｉ」の音素ナンバとピッチ「Ｅ３」に対応するフォルマントパラメータ群を引き出す。ここで引き出すフォルマントパラメータ群は、音素「ｉ」の発音開始時からの経過時間（５ｍｓｅｃごと）に応じて変化する時系列データのフォルマントパラメータ群（その形態は任意）である。次のステップ７０７では調音結合データベースを参照し、前の音素「ａ」（現在発音中）から今回の音素「ｉ」に移行する際に用いる調音結合カーブおよび調音結合時間を取り出す。ステップ７０８の判別では、「ｉ」のデュレーションタイムが＜００＞であり「ａ」から「ｉ」に移行するときの調音結合時間よりデュレーションタイムが長いと言えるので、ステップ７１０に進む。ステップ７１０では、現タイムカウンタtime_counter値におけるフォルマントパラメータを、先にステップ７０６で引き出したフォルマントパラメータ群と、ステップ７０７で取り出した調音結合カーブおよび調音結合時間から、求める。求めたフォルマントパラメータを、ピッチデータおよびキーオン信号とともに、ステップ７１１で音源１１５に送出し、これにより音素「ａ」から「ｉ」に自然に移行しながら音高「Ｅ３」の楽音を発音開始する。ステップ７１２で発音フラグＨＦＬＡＧ＝１とし、ノートオン処理を終える。
【００５０】
以下同様にして、「Ｅ３のノートオフ」から「Ｇ３のノートオフ」までの各メッセージを処理する。
【００５１】
なお、上記発明の実施の形態において、フォルマント合成音源１１５は、全体または部分的にかかわらず、ハードウェアまたはソフトウェアのどちらによって実現しても、また組み合わせて実現してもよい。また、上記発明の実施の形態では、母音と子音とを別の音素と区別した音素ごとの情報で音素データベースを持っているが、５０音（「ｓａ」、「ｓｉ」など）のそれぞれの音を音素とした音素ごとの情報で持ってもよい。音素データベースと調音結合データベースとを合わせた形態としてもよい。
【００５２】
上記実施の形態では、例として５ｍｓｅｃごとにフォルマントパラメータを変化させるシステムとしたが、フォルマントあるいはスペクトル特性の変化の大きいところは速く、変化の緩いところは遅いレートで、フォルマントパラメータの変化を制御するようにしてもよい。
【００５３】
【発明の効果】
以上説明したように、この発明によれば、音素データベースに格納するフォルマントパラメータを、ピッチの変化に対応したフォルマントパラメータの変化を反映したものにしているので、入力したピッチに応じたフォルマントで歌唱発音を行なうことができる。したがって、ピッチがダイナミックに変化した場合でも、そのピッチの変化に応じたフォルマントで自然な合成音を得ることができる。ピッチだけでなく、他の演奏情報をも加味してフォルマントパラメータを得るようにすれば、それらの演奏情報に適応した自然な音声を合成することができる。
【図面の簡単な説明】
【図１】  この発明に係る楽音合成装置のシステム構成図
【図２】  図１の楽音合成装置で歌唱させる場合の処理概要を示す図
【図３】  音素データベースの参照方式の概念図
【図４】  メインプログラムの手順を示すフローチャート図
【図５】  ＭＩＤＩ受信処理の手順を示すフローチャート図
【図６】  ＭＩＤＩデータ処理の手順を示すフローチャート図
【図７】  ノートオン処理の手順を示すフローチャート図
【図８】  ノートオフ処理の手順を示すフローチャート図
【図９】  タイマ処理の手順を示すフローチャート図
【符号の説明】
１０１…中央処理装置（ＣＰＵ）、１０２…ＭＩＤＩインタフェース、１０３…ＭＩＤＩ機器群、１０４…データメモリデバイス、１０５…ローカルデータ記憶装置、１０６…ワーキングメモリ、１０７…プログラムメモリ、１０８…演奏操作子、１０９…設定操作子、１１１…ディスプレイ、１１２…ネットワークインターフェース、１１５…フォルマント合成音源、１１６…サウンドシステム、１１７…システム共通バス、２０１…演奏データ、２０２…歌詞データ、２１０…歌詞データバッファ（フォーンシーケンスバッファ）、３０１…音素データベース。
【図１】
0003834804.tif 000002
【図２】
0003834804.tif 000003
【図３】
0003834804.tif 000004
【図４】
0003834804.tif 000005
【図５】
0003834804.tif 000006
【図６】
0003834804.tif 000007
【図７】
0003834804.tif 000008
【図８】
0003834804.tif 000009
【図９】
0003834804.tif 000010