図1は、パーソナルコンピュータ1と外部音源装置21との接続を示す図である。パーソナルコンピュータ1は、本実施例による音声データ処理装置を含む。パーソナルコンピュータ1は、シーケンサでもよい。
まず、外部音源装置21の構成を説明する。検出回路33は、スイッチ34の操作を検出し、スイッチ信号を生成する。スイッチ34は、例えば各種パラメータを設定するためのスイッチを含む。
バス22には、検出回路33の他、RAM24、ROM25、CPU26、表示回路28、MIDIインターフェース23、音声合成回路32、楽音波形合成回路29が接続される。
ROM25は、音声を合成するためのフォルマントデータ、その他の各種データ及びコンピュータプログラムを記憶する。RAM24は、フラグ、バッファ等を記憶する。コンピュータプログラムは、ROM25に記憶させる代わりに、RAM24に記憶させてもよい。CPU26は、ROM25又はRAM24に記憶されているコンピュータプログラムに従い、演算または制御を行う。
CPU26は、MIDIインターフェース23を介してパーソナルコンピュータ1から受信した演奏データに基づいて楽音パラメータを生成し、楽音波形合成回路29に供給する。楽音波形合成回路29は、供給される楽音パラメータに応じて楽音信号を生成し、サウンドシステム31に供給する。サウンドシステム31は、D/A変換器およびスピーカを含み、供給されるデジタル形式の楽音信号をアナログ形式に変換し、発音する。
なお、楽音波形合成回路29は、波形メモリ方式、FM方式、物理モデル方式、高調波合成方式、フォルマント合成方式、VCO+VCF+VCAのアナログシンセサイザ方式等、どのような方式であってもよい。
MIDIインターフェース23は、パーソナルコンピュータ1のMIDIインターフェース8にMIDIケーブルで接続される。外部音源装置21とパーソナルコンピュータ1は、MIDI通信を行うことができる。
CPU26は、MIDIインターフェース23を介して、パーソナルコンピュータ1から音声データを受け取り、RAM24に格納する。音声データは、ノート(音符)データと歌詞データを含む。
CPU26は、RAM24に記憶されている音声データを読み出し、ROM25に記憶されているフォルマントデータ等に基づき、フォルマントデータやノートナンバ(音高)等を音声合成回路32に供給する。フォルマントデータは、例えばフォルマント中心周波数データ、フォルマントバンド幅データ、フォルマントレベルデータ等である。
音声合成回路32は、供給されるフォルマントデータ等に応じて音声信号を生成する。音声信号は、所定の音高を有し、歌声に相当する。音声合成回路32は、フォルマント合成方式(フォルマント音源)でもよいし、その他の方式でもよい。なお、音声合成回路32の方式がフォルマント合成方式以外の場合は、供給するデータもフォルマントデータではなく、その音声合成方式に特有のデータとなる。
音声合成回路32がフォルマント音源である場合を説明する。音声合成回路32には、音声データに応じて生成されたフォルマントデータ等が入力される。フォルマントデータは、フォルマント中心周波数データ、フォルマントレベルデータ、フォルマント帯域幅データ等を含む。
音声合成回路32は、有声音合成グループVTGと無声音合成グループUTGを有する。有声音グループVTGは、フォルマントデータ等に応じて、第1〜4の有声音フォルマントをそれぞれ形成するための有声音合成部V1、V2、V3、V4を有する。無声音合成グループUTGは、フォルマントデータ等に応じて、第1〜4の無声音フォルマントをそれぞれ形成するための無声音合成部U1、U2、U3、U4を有する。
第1フォルマント生成ユニットTG1は第1フォルマントを形成するための有声音合成部V1と無声音合成部U1を有し、第2フォルマント生成ユニットTG2は第2フォルマントを形成するための有声音合成部V2と無声音合成部U2を有し、第3フォルマント生成ユニットTG3は第3フォルマントを形成するための有声音合成部V3と無声音合成部U3を有し、第4フォルマント生成ユニットTG4は第4フォルマントを形成するための有声音合成部V4と無声音合成部U4を有する。
合成部V1〜V4,U1〜U4は、それぞれ生成したフォルマントに対応する音声信号を出力する。それらの音声信号は加算され、サウンドシステム31に供給される。サウンドシステム31は、供給されるデジタル形式の音声信号をアナログ形式に変換し、発音する。
フォルマント音源のより具体的な構成は、例えば特開平3−200299号公報の第1図に示されている。
なお、音声合成回路32は、4系統のフォルマント生成ユニットTG1〜TG4を有する場合に限定されない。それ以上又はそれ以下の系統のフォルマント生成ユニットを有するものでもよい。
破裂音等の特殊な音は、専用のユニットを設けるようにしてもよい。また、発音チャンネルを複数用意し、2声以上の歌唱を発生させることができるようにしてもよい。この場合、1つの回路を時分割で使用することによって複数の発音チャンネルを形成するようなものでもよいし、1つの発音チャンネルが1つの回路で構成されるような形式のものであってもよい。
音声合成回路32と楽音波形合成回路29は、専用のハードウエアを用いて構成するものに限らず、DSP+マイクロプログラムを用いて構成してもよいし、CPU+ソフトウェアのプログラムで構成するようにしてもよい。
次に、パーソナルコンピュータ1の構成を説明する。検出回路11は、キーボード12上のキー(数字キーや文字キー等)入力を検出し、キー信号を生成する。検出回路9は、マウス10の移動操作やスイッチ(右ボタン、左ボタン等)操作を検出し、マウス信号を生成する。操作者は、マウス10又はキーボード12を用いて、音声データの編集を行うことができる。
表示回路7には、音声データ等を編集するための編集画面を表示することができる。操作者は、表示回路7上の編集画面を参照しながら音声データの編集を行うことができる。
バス2には、検出回路11、検出回路9及び表示回路7の他、MIDIインターフェース8、RAM3、ROM4、CPU5、外部記憶装置13、通信インターフェース14が接続される。
ROM4は、各種パラメータ及びコンピュータプログラムを記憶する。RAM3は、フラグ、バッファ、演奏データ、音声データ等を記憶する。また、RAM3は、外部記憶装置13、又は通信インターフェース14を介して外部から供給されたコンピュータプログラムや演奏データ、音声データ等を記憶することもできる。CPU5は、RAM3又はROM4に記憶されているコンピュータプログラムに従い、音声データの編集又は処理等のための演算または制御を行う。
タイマ6は、CPU5に時間情報を供給する。CPU5は、当該時間情報に応じて、所定時間間隔で割り込み処理を行うことができる。
MIDIインターフェース8は、上記のように、外部音源装置21のMIDIインターフェース23にMIDIケーブルで接続される。パーソナルコンピュータ1は、MIDIインターフェース8を介して、演奏データや音声データを外部音源装置21に送信することができる。
通信インターフェース14は、ローカルエリアネットワーク(LAN)、インターネット、電話回線等の通信ネットワーク41に接続される。通信ネットワーク41には、サーバコンピュータ42が接続されている。パーソナルコンピュータ1は、通信ネットワーク41を介して、サーバコンピュータ42から音声データ又はコンピュータプログラムを受信することができる。
外部記憶装置13は、外部記憶装置用のインターフェースを含み、そのインターフェースを介してバス2に接続される。外部記憶装置13は、例えばフロッピディスクドライブ(FDD)、ハードディスクドライブ(HDD)、光磁気ディスク(MO)ドライブ、CD−ROM(コンパクトディスク−リードオンリィメモリ)ドライブ、デジタル多目的ディスク(DVD)装置等である。演奏データや音声データは、外部記憶装置13又はRAM3に記憶される。
コンピュータプログラム等をROM4に記憶させずに、外部記憶装置13(例えばハードディスク)に記憶させることもできる。ハードディスクからRAM3にコンピュータプログラム等を読み出すことにより、ROM4にコンピュータプログラム等を記憶させている場合と同様の動作をCPU5にさせることができる。このようにすると、CD−ROM等の他の外部記憶媒体からハードディスクにコンピュータプログラム等をコピーすることでコンピュータプログラム等の追加やバージョンアップ等が容易に行える。
通信インターフェース14は、ローカルエリアネットワーク(LAN)やインターネット、電話回線等の通信ネットワーク41に接続されており、該通信ネットワーク41を介して、サーバコンピュータ42と接続される。外部記憶装置13内にコンピュータプログラム等が記憶されていない場合、サーバコンピュータ42からコンピュータプログラム等をダウンロードすることができる。クライアントとなるパーソナルコンピュータ1は、通信インターフェース14及び通信ネットワーク41を介してサーバコンピュータ42へとコンピュータプログラム等のダウンロードを要求するコマンドを送信する。サーバコンピュータ42は、このコマンドを受け、要求されたコンピュータプログラム等を、通信ネットワーク41を介してパーソナルコンピュータ1へと配信し、パーソナルコンピュータ1が通信インターフェース14を介して、これらコンピュータプログラム等を受信して外部記憶装置13内に蓄積することにより、ダウンロードが完了する。
パーソナルコンピュータ1は、RAM3に記憶している演奏データや音声データを、所定のテンポにしたがって再生し、再生した演奏データや音声データをMIDIインターフェース8を介して外部音源装置21へと送信する。外部音源装置21は、送信されてきた演奏データや音声データをMIDIインターフェース23を介して受信し、受信した演奏データを楽音波形合成回路29へ供給することにより伴奏楽音信号を形成するとともに、受信した音声データを音声合成回路32へ供給することにより歌唱信号を形成する。すなわち、パーソナルコンピュータ1と外部音源装置21により、伴奏楽音を伴った歌唱を生成するシステムが構成される。
次に、音声データ処理装置(パーソナルコンピュータ1)が行う処理を説明する。
図2は、インポート処理を示す図である。インポート処理は、演奏データ51にテキストデータ(歌詞データ)52を割り当て、ノートプラスデータ53を生成する処理である。本明細書では、演奏データ51、テキストデータ52、ノートプラスデータ53のいずれをも音声データという。
演奏データ51は、例えば、8つのノート(音符)に対応するノートイベントN1〜N8を有する。ノートイベントN1〜N8の各々は、例えばノートオンタイミングデータ、ノートナンバ(音高)、ベロシティ(音量)、ゲートタイム(ノートオンからノートオフまでの時間)を含む。
テキストデータ52は、例えば「赤(あか)_い/夕日〔ゆう!ひ〕_が¥」である。ここで、()内は読み仮名を示し、〔〕内はルビを示し、「_,!」等は歌詞区切り記号を示し、「/,¥」等は呼気記号を示す。
呼気記号は、息継ぎを示す記号である。呼気記号があるときは、その前の歌詞データはゲートタイムだけ発音され、その後、無音状態になる。呼気記号がないときには、ある歌詞データとその次の歌詞データとが滑らかにつながるように発音される。すなわち、ゲームタイムが無視される。
歌詞区切り記号は、1つの音符(ノートイベント)に対応する歌詞データ(第1の歌詞イベント)とその次の音符に対応する歌詞データ(第2の歌詞イベント)の間に挿入される。歌詞データ52は、歌詞区切り記号に従い、歌詞イベントに分解され、各ノートイベントN1〜N8に割り当てられる。例えば、「N1,あか」、「N2,い▽」、「N3,ゆう」、「N4,ひ」、「N5,が▽」のように割り当てられる。ここで、「▽」は、呼気記号「/,¥」に対応する呼気データであり、息継ぎを示すとともに、「N2,い▽」の例でも判るとおり、歌詞区切りの役割も果たしている。このノートイベントと歌詞(文字列)イベントあるいは音素列イベント(音素列イベントについては後述)の組をノートプラスイベント(ノートに対して歌詞イベントがプラスされたイベント)と呼ぶ。ノートプラスデータ53は、ノートプラスイベントの集まりである。
ノートプラスデータ53は、読み仮名及びルビを考慮し、漢字を削除してそれに対応する仮名のみを残す。読み仮名記号「()」があるときには、()の前の漢字「赤」及び読み仮名記号「()」を削除して()内の仮名「かな」を残す。ルビ記号「〔〕」の場合も同様である。
ノートプラスデータ53中の仮名は、音素列に変換される。例えば、仮名「か」は、音素列「CL(7.5ms)+kha(4×7.5ms)+aj(無限長)」に変換される。「か」等の音節は、時間軸上の音素列に分解することができる。音素は、例えば「CL」、「kha」、「aj」である。
パーソナルコンピュータ1は、仮名と音素列との間で変換を行うためのテーブルを記憶している。このテーブルを使い、仮名から音素列への変換を行うことができる。しかし、漢字や記号や英数字等から音素列への変換を行うことはできない。なぜなら、漢字や記号や英数字等は、読み方が複数通り存在する可能性があるからである。
仮名は音素列へ変換され、漢字や記号等はそのまま残される。パーソナルコンピュータ1は、漢字等から仮名へ変換を行うための辞書を記憶している。この辞書を用いて、漢字等を仮名に変換し、さらにその仮名を音素列に変換することができる。パーソナルコンピュータ1は、音素列等を外部音源装置21(図1)に供給する。外部音源装置21は、音素列等を受けて、音声を発音する。
パーソナルコンピュータ1は、歌詞データとしてテキストデータを使用することができる。例えばカラオケ用のテキストデータ等、既存のテキストデータを使用することができる。
また、歌詞区切り記号は「_,!」等であり、呼気記号は「/,¥」等であり、いずれも複数種類設定することができる。例えば、カラオケ用のテキストデータを使用する場合、改行マークと副改行マークの両方を歌詞区切り記号とし、改ページマークを呼気記号として設定することができる。歌詞区切り記号を複数種類設定することができるので、改行マークと副改行マークの両方を歌詞区切り記号として使用することができる。
改行マークは、歌詞を画面に表示する際に、歌詞の1行分の区切りを示すマークである。副改行マークは、小さい画面に表示する際にのみ用いる改行のためのマークである。すなわち、通常画面では改行マークのみで改行を行い、小画面では改行マークと副改行マークの両方で改行を行う。例えば、改行マークとして「_」を使用し、副改行マークとして「!」を使用することができる。なお、歌詞区切り記号や呼気記号は、改行マークや福改行マークのように本来は他の用途に用いるために挿入された記号をこれら歌詞区切り記号や呼気記号として流用する場合に限らず、ユーザが任意に設定し挿入した記号を、歌詞区切り記号や呼気記号としてもよい。
図3は、パーソナルコンピュータ1のCPUが行うテキストインポート処理を示すフローチャートである。テキストインポート処理は、上記のように(図2)、演奏データ51にテキストデータ52を割り当てて、ノートプラスデータ53を生成する処理である。
ステップSA1では、インポートするテキストファイルを選択する。テキストファイルはテキストデータ52(図2)を含み、外部記憶装置13(図1)等に記憶される。操作者は、マウス10等を用いて、1つ又は複数のテキストファイルの中から1つを選択することができる。
ステップSA2では、演奏データ51中の最初のノートイベントN1の位置にポインタをセットする。演奏データ51は、RAM4又は外部記憶装置13(図1)等に記憶される。
ステップSA3では、テキストデータ52中の最初の文字コードの位置にポインタをセットする。例えば、テキストデータ52中の「赤」の位置にポインタをセットする。
ステップSA4では、当該文字コードが呼気記号として設定されている文字コードのいずれかと一致するか否かをチェックする。例えば、呼気記号として、「/,¥」が設定されている。一致しないときには、NOの矢印に従い、ステップSA5へ進む。
ステップSA5では、当該文字コードが歌詞区切り記号として設定されている文字コードのいずれかと一致するか否かをチェックする。例えば、歌詞区切り記号として、「_,!」が設定されている。一致しないときには、NOの矢印に従い、ステップSA6へ進む。
ステップSA6では、当該文字コードを文字列レジスタの内容に追加する。文字列レジスタは、1音符に対応する1又は複数の文字コード(以下、歌詞イベントという)を記憶するためのレジスタであり、初期時には何も記憶していない。
ステップSA7では、次の文字コードの位置にポインタをセットする。例えば、テキストデータ52中の「()の位置にポインタをセットする。その後、ステップSA4へ戻り、上記の処理を繰り返す。
ステップSA7でセットされたポインタの位置における文字コードが「_」又は「!」であった場合は、ステップSA4を介して、ステップSA5へ進み、文字コード「_」又は「!」が歌詞区切り記号であると判断し、YESの矢印に従いステップSA9へ進む。
一方、ステップSA7でセットされたポインタの位置における文字コードが「/」又は「¥」あった場合は、ステップSA4で文字コード「/」又は「¥」が呼気記号であると判断し、YESの矢印に従いステップSA8へ進む。ステップSA8では、呼気マーク「▽」を文字列レジスタの内容に追加する。その後、ステップSA9へ進む。
ステップSA9では、読み仮名及びルビ処理を行う。具体的には、文字列レジスタに格納された歌詞イベント内に読み仮名又はルビが含まれている場合には、漢字等を削除して仮名を残す処理である。この処理の詳細は、後に図4のフローチャートを参照しながら説明する。その後、ステップSA10へ進む。
ステップSA10では、文字列レジスタの内容をポインタが位置するノートイベントに付加して、ノートプラスイベントを生成する。例えば、文字列レジスタ内の歌詞イベント「あか」をノートイベントN1に付加して、ノートプラスイベント「N1,あか」を生成する。
ステップSA11では、テキストデータ52の続きがあるか否かをチェックする。すなわち、テキストデータ52が終わりか否かをチェックする。終わりでないときには、YESの矢印に従い、ステップSA12へ進む。
ステップSA12では、文字列レジスタの内容をクリアし、次の歌詞イベントの格納に備える。
ステップSA13では、演奏データ51中の次のノートイベントの位置にポインタをセットする。例えば、ノートイベントN2の位置にポインタをセットする。
ステップSA14では、テキストデータ52中の次の文字コードの位置にポインタをセットする。例えば、文字コード「い」の位置にポインタをセットする。その後、ステップSA4へ戻り、上記の処理を繰り返す。
テキストデータ52の最後の文字コードの処理が終了すると、ステップSA11でNOの矢印に従い、テキストインポート処理を終了する。この処理により、ノートプラスデータ53が生成される。
なお、上記のフローチャートでは、テキストファイル中のテキストデータ52をインポートする場合を説明したが、スタンダードMIDIファイル中の所定トラックに含まれるテキストをインポートするようにしてもよい。
図4は、図3のステップSA9に示す読み仮名及びルビ処理の詳細を示すフローチャートである。
ステップSB1では、文字列レジスタ中に()又は〔〕に囲まれた仮名の文字コードがあるか否かをチェックする。例えば、テキストデータ52中の「(あか)」又は「〔ゆうひ〕」がこれに該当する。
また、「夕日〔ゆう!ひ〕_」の場合は、文字列「夕日〔ゆう〕と文字列「ひ」」との両方もこれに該当する。すなわち、()又は〔〕のいずれかの片括弧に囲まれた仮名文字があればこれに該当する。
当該文字コードがあるときには、YESの矢印に従い、ステップSB2へ進む。当該文字コードがないときには、NOの矢印に従い、読み仮名及びルビ処理を終了する。
ステップSB2では、文字列レジスタ中の()又は〔〕の前にある非仮名の文字コードを削除する。非仮名の文字コードは、漢字、記号、英数字を含む。例えば、テキストデータ52中の「赤」や「夕日」を削除する。
ステップSB3では、文字列レジスタ中の()又は〔〕を削除する。その結果、例えば、文字列「夕日〔ゆう〕は「ゆう」に変換され、文字列「ひ」」は「ひ」に変換される。その後、読み仮名及びルビ処理を終了し、図3のテキストインポート処理に戻る。
上記の処理により、読み仮名やルビが振られた漢字等は、漢字等が削除されて仮名が残る。漢字等は、発音に不必要な文字コードである。
図5は、パーソナルコンピュータ1のCPUが行う音素列変換処理を示すフローチャートである。音素列変換処理は、ノートプラスデータ53(図2)を生成した後に、歌詞イベントを音素列に変換する処理である。
表示回路7においては、1つのノートプラスイベントが1行に表示されている。すなわち、1つの行は1つのノートプラスイベントに対応する。ステップSC1では、ノートプラスデータ53中から変換する行を選択する。操作者は、表示回路7に表示された各行の表示内容を参照し、マウス10等を用いて、1行又は複数行(すなわち1又は複数のノートプラスイベント)を選択することができる。
ステップSC2では、選択された行の中の第1行目の位置にポインタをセットする。例えば、ノートプラスイベント「N1,あか」の位置にポインタをセットする。
ステップSC3では、当該行の文字列(歌詞イベント)は仮名のみか否かをチェックする。仮名のみのときは、音素列変換を行うため、YESの矢印に従いステップSC4へ進む。仮名のみでないときには、NOの矢印に従い、音素列変換を行わずにステップSC6へ進む。なお、仮名以外に呼気記号も含まれている場合は、仮名のみと判断する。
ステップSC4では、仮名−音素列テーブルを参照して、当該文字列に対応する音素列を求める。例えば、文字列「あか」に対応する音素列を求める。
ステップSC5では、文字列と音素列との置き換えを行う。すなわち、ノートプラスデータ53中では、文字列「あか」が削除され、それに対応する音素列が書き込まれる。その後、ステップSC6へ進む。
ステップSC6では、選択範囲行の中に次の行があるか否かをチェックする。選択範囲行が1行のみの場合は次の行がないので、NOの矢印に従い、音素列変換処理を終了する。次の行があるときには、YESの矢印に従い、ステップSC7へ進む。
ステップSC7では、次の行の位置にポインタをセットする。例えば、ノートプラスイベント「N2,い▽」の位置にポインタをセットする。その後、ステップSC3へ戻り、上記の処理を繰り返す。呼気記号「▽」は音素列に変換されない。仮名「い」のみが音素列に変換される。
全ての行の処理が終了すると、ステップSC6においてNOの矢印に従い、音素列変換処理を終了する。後の処理で、変換された音素列は、外部音源装置21(図1)へ供給され、発音される。
なお、音素列に変換された後は、当該音素列を再び文字列に変換して、音素列と文字列の両方を表示回路7上の画面に表示する。操作者は、文字列とそれに対応する音素列を知ることができる。また、音素列の変換が正常に行われたか否かを知ることもできる。
次に、空白行挿入処理を説明する。上記のように、ノートイベントに歌詞イベントを割り当てた後、歌詞の間に新たな歌詞を挿入したい場合がある。例えば、歌詞の一部分が欠落しており、該欠落部分以降の歌詞が前方に詰まった状態でノートイベントと歌詞イベントが対応づけられてしまい、結果として、ノートイベントと歌詞イベントの対応が間違った状態でノートプラスイベントが生成されてしまった場合等である。その場合に、所望の場所に空白行を挿入し、その空白行に新たな歌詞を埋めればよい。
図6(A)〜(D)は、空白行挿入処理を説明するための図である。図6(A)は、ノートプラスデータの例を示す。ノートプラスデータは、例えば8行のノートプラスイベントを有する。第1行目のノートプラスイベントは、ノートイベントN1と歌詞イベントL1を有する。
操作者は、マウス等を用いて、空白行を挿入したい位置PTと行数LLを指定することができる。例えば、挿入位置PTとして第3行目を指定し、挿入行数LLとして2行を指定することができる。
まず、図6(B)のバッファに、挿入位置PT以降の歌詞イベントL3〜L8をコピーする。なお、バッファ内には、空白行が含まれていてもよい。
次に、図6(C)に示すように、図6(A)のノートプラスデータの挿入位置PT(第3行目)から挿入行数LL(2行)だけ歌詞イベントを消去する。すなわち、歌詞イベントL3及びL4を消去する。
次に、図6(D)に示すように、図6(C)のノートプラスデータ中の第5行目以降にバッファ(図6(B))内の歌詞イベントをコピーする。ただし、ノートイベントN8よりも後ろにはノートイベントがないので、ノートイベントN8に残りの歌詞イベントがまとめて割り当てられる。すなわち、ノートイベントN8には、歌詞イベントL6〜L8が割り当てられる。
図6(D)のノートプラスデータでは、ノートイベントN3及びN4に空白行の歌詞イベントが割り当てられる。結果として、2行の空白行が挿入されたことになる。そして、空白行挿入箇所以降のノートプラスイベントは、ノートイベントと歌詞イベントの対応づけが変更された状態となる。なお、空白行については、歌詞イベントが消去されたため、ノートプラスイベントではなく、通常のノートイベントとなる。
図7は、上記の空白行挿入処理を実現するためのフローチャートである。ステップSD1では、空白行の挿入位置PTと挿入行LLを指定する。
ステップSD2では、挿入位置PT以降の歌詞イベント(音素列/文字列)をバッファ(図6(B))にコピーする。
ステップSD3では、挿入位置PTから挿入行数LL分の歌詞イベントを消去する(図6(C))。
ステップSD4では、バッファ(図6(B))の歌詞イベントを、挿入位置PTから挿入行数LL分より後ろのノートイベントに割り当てる。このとき、割り当てるべきノートイベントが無くなったにもかかわらず歌詞イベントがバッファ内に残っているときは、残りの歌詞イベントを全て最後のノートイベントに追加する。以上で、空白行の挿入処理を終了する。
なお、図6(A)のノートプラスデータに空白行を挿入して図6(D)のノートプラスデータを生成する方法は上記以外の方法でもよい。
図8(A)〜(F)は、歌詞イベント挿入処理を説明するための図である。図8(A)は、ノートプラスデータの例を示す。操作者は、マウス等を用いて、挿入したい歌詞イベントの範囲RGを指定することができる。例えば、範囲RGとして、歌詞イベントL5及びL6を指定することができる。
まず、図8(B)のクリップボードに、範囲RG内の歌詞イベントL5及びL6をコピーする。
次に、図8(C)に示すように、操作者は、マウス等を用いて、挿入位置PTを指定することができる。例えば、挿入位置PTとして、第3行目のノートプラスイベント「N3,L3」を指定することができる。
次に、図8(D)のバッファに、挿入位置PT以降の歌詞イベントL3〜L8をコピーする。
次に、図8(E)に示すように、図8(C)の挿入位置PT以降のノートイベントN3及びN4に、クリップボード(図8(B))の歌詞イベントL5及びL6を割り当てる。
次に、図8(F)に示すように、図8(E)のノートプラスデータ中の第5行目「N5,L5」以降に、バッファ(図8(D))内の歌詞イベントL3〜L8を割り当てる。ただし、ノートイベントN8よりも後ろにはノートイベントがないので、ノートイベントN8に残りの歌詞イベントL6〜8をまとめて割り当てる。その結果、図8(F)のノートプラスデータには、挿入位置PTに歌詞イベントL5及びL6が挿入されたことになる。
図9は、上記の歌詞イベント挿入処理を実現するためのフローチャートである。
ステップSE1では、任意行数RGの歌詞イベントを指定し(図8(A))、クリップボード(図8(B))にコピーする。
ステップSE2では、歌詞イベントの挿入位置PTを指定する(図8(C))。
ステップSE3では、挿入位置PT以降の歌詞イベントをバッファ(図8(D))にコピーする。
ステップSE4では、クリップボード(図8(B))の歌詞イベントを、挿入位置PTから挿入行数RG分だけノートプラスデータに割り当てる(図8(E))。
ステップSE5では、バッファ(図8(D))の歌詞イベントを、挿入位置PTから挿入行数RG分より後ろのノートプラスデータに割り当てる(図8(F))。以上で、歌詞イベント挿入処理を終了する。
なお、図8(A)のノートプラスデータに所望の歌詞イベントを挿入して、図8(F)のノートプラスデータを生成する方法は上記以外の方法でもよい。
図10(A)〜(E)は、歌詞イベント削除処理を説明するための図である。図10(A)は、ノートプラスデータの例を示す。操作者は、マウス等を用いて、削除したい歌詞イベントの範囲RGを指定することができる。例えば、範囲RGとして、歌詞イベントL3及びL4を指定することができる。
まず、図10(B)のクリップボードに、範囲RG内の歌詞イベントL3及びL4をコピーする。このクリップボードの内容は、この後の処理で使用することはないが、必要に応じて図8(B)のクリップボードとして使用することができる。
次に、図10(C)のバッファに、範囲RGより後ろの歌詞イベントL5〜L8をコピーする。
次に、図10(D)に示すように、図10(A)の範囲RG以降の歌詞イベントL3〜L8を削除する。
次に、図10(E)に示すように、図10(D)の範囲RG以降のノートイベントN3〜N8に、バッファ(図10(C))内の歌詞イベントL5〜L8を割り当てる。ただし、歌詞イベントL3及びL4を削除したため、最後のノートイベントN7及びN8には空白行の歌詞イベントが割り当てられる。図10(E)のノートプラスデータでは、歌詞イベントL3及びN4が削除されたため、歌詞イベントL2の次に歌詞イベントL5が続く。
図11は、上記の歌詞イベント削除処理を実現するためのフローチャートである。
ステップSF1では、削除すべき任意行数RGの歌詞イベントを指定し(図10(A))、クリップボード(図10(B))にコピーする。
ステップSF2では、削除される行RGより後ろの歌詞イベントをバッファ(図10(C))にコピーする。
ステップSF3では、削除される行RG以降の歌詞データを消去する(図10(D))。
ステップSF4では、バッファ(図10(C))の歌詞イベントを、削除行RG以降のノートプラスデータに割り当てる(図10(E))。以上で、歌詞イベント削除処理を終了する。
歌詞イベント削除処理は、演奏データをアレンジしてノートイベントの数が少なくなったり、歌詞データの入力ミスにより歌詞イベントの数が多くなった場合等に有効な処理である。
なお、図10(A)のノートプラスデータから所望の歌詞イベントを削除して図10(E)のノートプラスデータを生成する方法は上記以外の方法でもよい。
図12(A)〜(D)は、第1の歌詞自動割り当て処理を説明するための図である。
図12(A)は、ノートプラスデータの例を示す。操作者は、マウス等を用いて、自動割り当てを行いたいノートプラスイベントの範囲RGを指定することができる。例えば、範囲RGとして、第2〜6のノートプラスイベントを指定することができる。
まず、図12(B)のバッファに、範囲RG内の歌詞イベント「いうえおかきく」をコピーする。次に、図12(C)に示すように、図12(A)の範囲RG内の歌詞イベントを削除する。
次に、図12(D)に示すように、図12(D)の範囲RG内のノートイベントN2〜N6に、バッファ(図12(B))内の歌詞イベント「いうえおかきく」を1文字ずつ割り当てる。ただし、最後のノートイベントN6には、残りの文字列「かきく」を割り当てる。図12(D)のノートプラスデータでは、範囲RG内のノートイベントN2〜N5にそれぞれ1文字ずつ割り当てられ、ノートイベントN6に3文字「かきく」が割り当てられる。基本的に、1音符に1文字(音節)が割り当てられる。
第1の歌詞自動割り当て処理は、範囲RGの行数内で、すなわち、行数を増減させることなく、各行に自動的に歌詞イベントを割り当てる処理である。
図13は、上記の第1の歌詞自動割り当て処理を実現するためのフローチャートである。
ステップSG1では、歌詞を自動割り当てする複数行RGを選択する(図12(A))。
ステップSG2では、選択された複数行RGに含まれる歌詞イベントをバッファ(図12(B))にコピーする。ただし、歌詞イベントが音素列により構成されているときには、バッファ中の音素列を文字データに変換する。
ステップSG3では、選択された複数行RG内の歌詞イベントを消去する(図12(C))。
ステップSG4では、バッファ(図12(B))内の文字列データを、選択された複数行RGのノートプラスデータに割り当てる(図12(D))。以上で、第1の歌詞自動割り当て処理を終了する。
図14(A)、(B)は、空白行自動挿入処理を説明するための図である。図14(A)は、ノートプラスデータの例を示す。操作者は、マウス等を用いて、空白行を挿入したい行RGを選択することができる。例えば、選択行RGとして、第4行のノートプラスイベントを指定することができる。
まず、選択行RG内の歌詞イベントを構成する文字数をカウントする。例えば、歌詞イベント「おかきく」の文字数は4文字である。
次に、図14(B)に示すように、「当該文字数−1」行の空白行を、選択行RGの位置に挿入する。例えば、4−1=3行の空白行を挿入する。選択行RG以降のノートイベントN4〜N6には空白行が割り当てられ、ノートイベントN7に歌詞イベント「おかきく」が割り当てられる。
なお、選択行RGの歌詞イベント「おかきく」の前に空白行を挿入する場合に限定されず、歌詞イベント「おかきく」の後ろに空白行を挿入してもよい。
この後、第4行〜第7行を選択して、図12に示した第1の歌詞自動割り当て処理を行えば、当該空白行に歌詞イベントを割り当てることができる。具体的には、「N4,お」、「N5,か」、「N6,き」、「N7,く」のように割り当てることができる。
図15は、上記の空白行自動挿入処理を実現するためのフローチャートである。
ステップSH1では、空白行を自動挿入する行RGを選択する(図14(A))。
ステップSH2では、選択された行RG内の歌詞イベントの文字数を検出する。歌詞イベントが音素列により構成されるときには、音素列を文字に換算してから文字数を検出する。
ステップSH3では、「文字数−1」の行数の空白行を選択行RGの位置に挿入する。この挿入は、上記空白行挿入と同様に、バッファを用いて行うことができる。以上で、空白行自動挿入処理を終了する。
図16(A)〜(D)は、第2の歌詞自動割り当て処理を説明するための図である。
図16(A)は、ノートプラスデータの例を示す。操作者は、マウス等を用いて、自動割り当てを行いたいノートプラスイベントの範囲RGを指定することができる。例えば、範囲RGとして、第2〜6のノートプラスイベントを指定することができる。
まず、図16(B)のバッファに、範囲RG内の歌詞イベント「いうえおかきく」をコピーする。
次に、図16(C)に示すように、バッファ内の文字数(7文字)が範囲RGの行数(5行)よりも2文字多いので、2行の空白行を範囲RGの位置に挿入する。
次に、図16(D)に示すように、選択行RGの位置からバッファ(図16(B))内の文字数(7文字)までの数のノートイベントN2〜N8に、バッファ内の文字列「いうえおかきく」を1文字ずつ割り当てる。ノートイベントN2〜N8には、それぞれ1文字の歌詞イベントが割り当てられる。
第2の歌詞自動割り当て処理は、選択された行RGに含まれる全ての文字が、必ず1ノートイベントに付き1文字割り当てられるようにする処理である。
図17は、上記の第2の歌詞自動割り当て処理を実現するためのフローチャートである。
ステップSI1では、歌詞を自動割り当てする複数行RGのノートプラスイベントを選択する(図16(A))。
ステップSI2では、選択された複数行RG内の歌詞イベントをバッファ(図16(B))にコピーする。ただし、歌詞イベントが音素列により構成されているときには、バッファ中の音素列を文字データに変換する。
ステップSI3では、バッファ内の文字数を検出する。ステップSI4では、選択された行数RGと検出された文字数を比較する。
ステップSI5では、比較した行数が等しいか、多いか、少ないかをチェックする。行数が多いときにはステップSI6へ進み、余分な行数を削除し、ステップSI8へ進む。行数が少ないときにはステップSI7へ進み、足りない行数を挿入し(図16(C))、ステップSI8へ進む。行数が等しいときには、行数を変更せずに、ステップSI8へ進む。
ステップSI8では、バッファ内の文字列データを、選択行RGの先頭行から、選択行RGの行数だけ、又は削除後の行数だけ、又は挿入後の行数だけ、ノートプラスイベントに割り当てる(図16(D))。以上で、第2の歌詞自動割り当て処理を終了する。
図18(A)〜(D)は、複数行併合処理を説明するための図である。図18(A)は、ノートプラスデータの例を示す。ノートプラスデータは、ノートプラスイベント「N1,あ」、「N2,い」、「N3,う」、「N4,え」、「N5,お」を有する。
操作者は、マウス等を用いて、併合するノートプラスイベントの範囲RGを指定することができる。例えば、範囲RGとして、第2及び3のノートプラスイベントを指定することができる。
まず、図18(B)のバッファに、範囲RG内の歌詞イベント「いう」をコピーする。
次に、図18(C)に示すように、範囲RG内の先頭行の歌詞イベント「い」だけを残し、残りの行の歌詞イベント「う」を削除する。範囲RGより後ろの歌詞イベント「え、お」は、前の行に詰められる。ノートプラスデータは、ノートプラスイベント「N1,あ」、「N2,い」、「N3,え」、「N4,お」、「N5,_」を有する。
次に、図18(D)に示すように、範囲RG内の先頭行のノートイベントN2に、バッファ内の文字列「いう」を割り当てる。第2のノートイベントN2には、範囲RG内の歌詞イベント「いう」が併合されて割り当てられる。
上記の第1又は第2の歌詞自動割り当て処理では、1つのノートイベントに1文字の歌詞イベントが割り当てたが、その後にこの複数行併合処理を利用することにより、1つのノートイベントに2文字以上の歌詞イベントを割り当てるように修正することができる。
図19は、上記の複数行併合処理を実現するためのフローチャートである。ステップSJ1では、歌詞イベントを併合する複数行RGを選択する(図18(A))。
ステップSJ2では、選択された複数行RG内の歌詞イベントをバッファ(図18(B))にコピーする。ただし、歌詞イベントが音素列により構成されているときには、バッファ中の音素列を文字データに変換する。
ステップSJ3では、選択された複数行RGのうち、1行を残して残りの行の歌詞イベントを削除する(図18(C))。削除された後の歌詞イベントは、前の行に詰められる。
ステップSJ4では、バッファ内の文字列データを、範囲RG内の残った行のノートプラスデータ内のノートイベントに割り当てる(図18(D))。以上で、複数行併合処理を終了する。
図20(A)、(B)は、歌詞イベント分割処理を説明するための図である。図20(A)は、ノートプラスデータの例を示す。ノートプラスデータは、ノートプラスイベント「N1,あ」、「N2,いう」、「N3,え」を有する。
操作者は、マウス等を用いて、歌詞イベントの分割を行いたい行RGを選択し、その行内で分割を行いたい文字位置にカーソルCSを設定する。例えば、範囲RGとして、第2のノートプラスイベント「N2,いう」を選択し、カーソルCSを「い」と「う」の間に設定する。その後、操作者がリターンキー(実行キー)を操作することにより、以下の分割処理が行われる。
図20(B)に示すように、文字「い」と「う」とが分割される。ノートプラスデータは、ノートプラスイベント「N1,あ」、「N2,い」、「N3,うえ」を有する。カーソルCSの後ろの文字「う」は、選択行RGの後ろの行の歌詞イベント「え」と併合される。
空白行の歌詞イベントを多数挿入しておき(図6)、先頭から順番に歌詞を割り当てる際に便利である。
図21は、上記の歌詞イベント分割処理を実現するためのフローチャートである。
ステップSK1では、分割する歌詞イベントを含む行RGを選択する(図20(A))。
ステップSK2では、マウス操作等により分割位置にカーソルを設定する(図20(A))。
ステップSK3では、リターンキーの操作に応じて、分割位置以降の歌詞イベントをその次の行のノートプラスデータ内の歌詞イベントに追加する(図20(B))。以上で、歌詞イベント分割処理を終了する。
図22(A)〜(C)は、仮名変換処理を説明するための図である。図22(A)は、ノートプラスデータの例を示す。ノートプラスデータは、ノートプラスイベント「N1,あか」、「N2,い」、「N3,夕」、「N4,日」を有する。
操作者は、マウスを用いて、仮名変換を行いたい歌詞イベント「夕」の位置にマウスポインタ71を移動し、マウスの右ボタンをクリックする。
図22(B)に示すように、歌詞イベント「夕」の読み仮名候補がメニュー72に表示される。メニュー72には、例えば「ゆう」、「せき」が表示される。操作者は、適切な読み仮名である文字列「ゆう」の位置にマウスポインタ71を移動させ、マウスの左ボタンをクリックする。
図22(C)に示すように、ノートイベントN3に割り当てられる歌詞イベントは漢字「夕」から仮名「ゆう」に変換される。漢字の他、英数字や記号等も仮名に変換することができる。漢字や英数字等を仮名に変換すれば、その後に仮名から音素列に変換することができるので(図5)、音素列の発音が可能になる。
図23は、上記の仮名変換処理を実現するためのフローチャートである。ステップSL1では、仮名変換する文字の行をマウスポインタ71で指定する(図22(A))。
ステップSL2では、マウスの右ボタンがクリックされると、選択文字に対応する読み仮名をデータベースから検索し、読み仮名候補として表示する(図22(B))。データベースは、漢字等から仮名への変換するための辞書であり、外部記憶装置13又はRAM3等に記憶される。
ステップSL3では、読み仮名候補のいずれかをマウスポインタ71で指定する(図22(B))。
ステップSL4では、マウスの左ボタンがクリックされると、指定された読み仮名候補を指定行の文字列として、ノートプラスデータ内のノートイベントに割り当てる(図22(C))。以上で、仮名変換処理を終了する。
以上のようにして作成されたノートプラスイベント(図5の音素列変換処理によって文字列を音素列に変換したもの)を、外部音源装置21へと供給することによって、外部音源装置21内の音声合成回路32において、歌唱音声信号を生成させることができる。なお、本実施の形態において説明した音声データ処理装置(パーソナルコンピュータ1)においては、ノートプラスデータを、そのままの形式で再生処理可能な、いわば、専用の音声データ処理装置である。この音声データ処理装置は、ノートイベントと歌詞イベント(音素列)を適切な順序で送信することができる。
ここで、ノートイベントと歌詞イベントを送信する際の適切な順序について説明する。図24(A)、(B)は、ノートイベントと歌詞イベントの送信順序を説明するための図である。ノートプラスイベントは、例えばノートイベントN1と歌詞イベントL1の組である(図6(A)))。ノートイベントN1と歌詞イベントL1は理論上は同じタイミングで送信するべきであるが、MIDI通信はシリアル通信であるため、いずれを先に外部音源装置21(図1)へ送信すべきかが問題になる。ノートイベントN1はノートオンイベントに変換されて送信される。歌詞イベントは音素列に変換(図5)されて送信される。
図24(A)は、音素列、ノートオンの順序で送信するタイミングを示す。まず、音節「あ」に対応する音素列「aj」を送信する。その後にノートオンを送信すると、そのタイミングで「あ」の発音が開始する。次に、音節「い」に対応する音素列「ij」を送信する。その後にノートオンを送信すると、そのタイミングで「あ」から「い」に発音が切り換わる。次に、音節「う」に対応する音素列「uj」を送信する。その後にノートオンを送信すると、そのタイミングで「い」から「う」に発音が切り換わる。
図24(A)では、ノートオン(ノートイベント)と音素列(歌詞イベント)との対応がとれており、適正な歌を歌わせることができる。
図24(B)は、ノートオン、音素列の順序で送信するタイミングを示す。まず、ノートオンを送信する。この時点では、音素列が設定されていないので、例えば「あ」等の初期設定されている音素列が発音を開始する。その後、音節「あ」に対応する音素列「aj」を送信する。この時点では、発音に変化はなく初期設定されている「あ」の発音が持続される。次に、ノートオンを送信すると、そのタイミングで初期設定された音素列「あ」の発音から、送信された音素列「あ」の発音に切り換わる。その後に、音節「い」に対応する音素列「ij」を送信するが、発音に影響はない。次に、ノートオンを送信すると、そのタイミングで「あ」から「い」に発音が切り換わる。その後に、音節「う」に対応する音素列「uj」を送信するが、発音に影響はない。
図24(B)では、ノートオン(ノートイベント)と音素列(歌詞イベント)との対応がとれていず、1つのノート分だけ遅れて歌詞が発音されてしまう。これでは、適正な歌を歌わせることができない。
外部音源装置21には、図24(A)に示したように、まず音素列を送信し、その後、対応するノートオンを送信する必要がある。上述したように、この実施の形態における音声データ処理装置は、ノートプラスデータを正しく扱うことができる装置であり、つ1のノートプラスイベントについて、先に音素列を送信した後、ノートオンを送信するようになっている。ところが、本音声データ処理装置以外のシーケンサ等においては、ノートプラスイベントを正しく扱うとこができない。このため、本音声データ処理装置は、ノートプラスデータを、より汎用的なスタンダードMIDIファイルに変換する機能を備えている。このとき、単純にスタンダードMIDIファイルに変換するだけでは、後述するような不都合が生じてしまう可能性があるため、上述したような送信順序を考慮しての変換をするようにしている。以下、ノートイベントと歌詞イベント(音素列)の送信順序を考慮して、ノートプラスデータを、スタンダードMIDIファイルに変換する方法を説明する。
図25は、ノートプラスデータ75をスタンダードMIDIファイル76に変換する方法を説明するための図である。
ノートプラスデータ75は、順にノートイベントN1、歌詞イベントL1、デュレーションT2、ノートイベントN2、歌詞イベントL2、デュレーションT3を有する。
ノートイベントN1は、ノートオンイベントNON1とゲートタイムGT1を有する。ノートオンイベントNON1は、例えばノートナンバ(音高)、ベロシティ(音量)を含む。ゲートタイムGT1は、ノートオンからノートオフまでの時間であり、例えば450である。歌詞イベントL1は、音素列により構成される。ただし、呼気記号や漢字等は文字列として歌詞イベントL1内に含まれる。
ノートイベントN2は、ノートイベントN1と同様に、ノートオンイベントNON2とゲートタイムGT2を有する。ゲートタイムGT2は、例えば220である。歌詞イベントL2は、歌詞イベントL1と同様に、音素列により構成される。
デュレーションT2は、ノートオンイベントNON1の発音開始からノートオンイベントNON2の発音開始までの時間であり、例えば480である。デュレーションT3は、ノートオンイベントNON2の発音開始から次のノートオンイベントの発音開始までの時間であり、例えば240である。ゲートタイムやデュレーションの値は、クロック数で表される。1クロックは、例えば4分音符長の1/480の時間である。
スタンダードMIDIファイル76は、MIDI規格に適した汎用フォーマットのファイルである。スタンダードMIDIファイル76は、デュレーションとイベントの組で構成される。
スタンダードMIDIファイル76は、順に、歌詞イベントL1、デュレーションTT1、ノートオンイベントNON1、デュレーションTT2、ノートオフイベントNOFF1、デュレーションTT3、歌詞イベントL2、デュレーションTT4、ノートオンイベントNON2、デュレーションTT5、ノートオフイベントNOFF2、デュレーションTT6を有する。
歌詞イベントL1及びノートオンイベントNON1は、ノートプラスデータ75中の歌詞イベントL1及びノートオンイベントNON1と同じであるが、並び順が異なる。歌詞イベントL1をノートオンイベントNON1よりも先に送信することにより、図24(A)のように正常な歌を歌わせることができる。
デュレーションTT1は、歌詞イベントL1の送信からノートオンイベントNON1の送信までの時間であり、例えば5である。歌詞イベントL1をノートオンイベントNON1よりも前のアドレスに位置するのであれば、理論的にはデュレーションTT1は0でもよいと考えることができる。
しかし、デュレーションTT1を0にすると、スタンダードMIDIファイルを送信するパーソナルコンピュータ1又はシーケンサによって送信順序が異なることがある。すなわち、デュレーションTT1を0にすると、歌詞イベントL1、ノートオンイベントNON1の順で送信されるとは限らず、ノートオンイベントNON1、歌詞イベントL1の順で送信されることがある。さらに、デュレーションTT1が0でなく、1又は2であるときにも同様な現象が生じる。
これは、シーケンサ等が歌詞イベントL1とノートオンイベントNON1との重要度を比較し、ノートオンイベントNON1の重要度が高いと判断し、ノートオンイベントNON1を歌詞イベントL1よりも先に送信しているものと考えられる。なお、歌詞イベントは、MIDI規格で決められたシステムエクスクルーシブメッセージにより送信することができる。
上記の弊害を防止するため、デュレーションTT1を5にする。デュレーションTT1は3以上が好ましいが、値が大きすぎると前のイベントに悪影響を与えることも考えられる。デュレーションTT1は、3〜10が好ましい。ただし、これはクロックの音符分解能が4分音符長の1/480の場合であって、音符分解能が異なる場合は上記好ましい数値は他の値をとる。例えば、クロックの音符分解能が4分音符の1/96であれば、1〜3程度が好ましい。
デュレーションTT2は、ノートオンNON1からノートオフNOFF1までの時間であり、ノートプラスデータ75のゲートタイムGT1に相当し、例えば450である。
ノートプラスデータ75中のデュレーションT2は、ノートオンNON1から次のノートオンNON2までの時間であり、スタンダードMIDIファイル76中のデュレーションTT2とTT3とTT4とに分解される。
デュレーションTT2は、上記のように、ノートプラスデータ75のゲートタイムGT1と同じく450である。デュレーションTT4は、歌詞イベントL2の送信からノートオンイベントNON2の送信までの時間であり、デュレーションTT1と同様に5である。デュレーションTT3は、ノートオフイベントNOFF1の送信から歌詞イベントL2の送信までの時間であり、TT3=T2−TT2−TT4で表される。すなわち、TT3=480−450−5=25である。
上記のように、歌詞イベントL1をノートオンイベントNON1よりも前のアドレスに位置させ、かつデュレーションTT1を5にすることにより、確実に、歌詞イベントL1をノートオンイベントNON1よりも先に送信することができる。その際、ノートオンイベントNON1のタイミングは変えずに、歌詞イベントL1のタイミングを5だけ早めるので、ノートオンNON1による発音タイミングはずれることがない。
また、ノートプラスデータ75をスタンダードMIDIファイル76に変換することにより汎用性が増し、他のシーケンサ等でも処理することが可能になると共に、スタンダードMIDIファイル76をフロッピディスク等でユーザに供給することが可能になる。
図26(A)に示すように、スタンダードMIDIファイル(SMF)変換手段81は、ノートプラスデータ75をSMFデータ76に変換することができる。パーソナルコンピュータ1は、SMF変換手段81において、ノートプラスデータ75をスタンダードMIDIファイル76に変換し、外部記憶装置13にセーブすることができる。セーブされたスタンダードMIDIファイル76は、他のパーソナルコンピュータやシーケンサ等で使用することができる。また、パーソナルコンピュータ1がスタンダードMIDIファイル76を外部音源装置21に送信すれば、外部音源装置21はスタンダードMIDIファイル76に応じて発音処理を行う。
また、図26(B)に示すように、ノートプラス変換手段82は、SMFデータ76をノートプラスデータ75に変換することができる。パーソナルコンピュータ1は、外部記憶装置13に記憶されているスタンダードMIDIファイル76をロードし、ノートプラス変換手段82において、ノートプラスデータ75に変換してRAM3に記憶することができる。この際、上記ノートプラスデータ75をスタンダードMIDIファイル76に変換したのとは逆に、ノートイベントとは独立して記憶されている歌詞イベントを、1つのノートプラスイベントにまとめる処理を行う。まず、スタンダードMIDIファイル中のデータを先頭から順次サーチし、ノートオンイベントが見つかったら対応するノートオフイベントを探してゲートタイムを含む1つのノートオンイベントを生成する。そして、該ノートオンイベントよりも5クロック前までに存在する歌詞イベントをサーチして、見つかった場合は、該歌詞イベントをノートオンイベントに付加してノートオンイベントと歌詞イベントを組にしたノートプラスイベントを生成する。操作者は、上記に示したように、ノートプラスデータ75について、種々の編集を行うことができる。なお、ノートプラスデータ75をスタンダードMIDIファイルに変換する際の処理と同様の処理を、スタンダードMIDIファイル以外の比較的汎用性の高いデータ形式に変換する場合に適用してもよい。
なお、外部音源装置21内の音声合成回路に音素列を発音させる場合に限定されない。音声合成回路を含む音源ボードをパーソナルコンピュータ1に差し込み、当該音源ボードに音素列を発音させてもよい。その場合は、パーソナルコンピュータ1に外部音源装置21を接続する必要はない。
本実施例による音声データ処理装置は、パソコンとアプリケーションソフトウエアとによる形態に限らず、電子楽器やシーケンサの形態でもよい。アプリケーションソフトウエアは、磁気ディスク、光ディスク、半導体メモリ等の記憶媒体に記憶させ、パソコンに供給するようにしてもよいし、ネットワークを介して供給するようにしてもよい。
音声データのフォーマットはスタンダードMIDIファイルのような演奏イベントの発生時刻を1つ前のイベントからの時間で表した「イベント+相対時間」に限定されず、演奏イベントの発生時刻を曲や小節内における絶対時間で表した「イベント+絶対時間」、音符の音高と符長あるいは休符と休符長で演奏データを表した「音高(休符)+符長」、演奏の最小分解能毎にメモリの領域を確保し、演奏イベントの発生する時刻に対応するメモリ領域に演奏イベントを記憶した「ベタ方式」等の形式でもよい。
音声データは、複数のチャンネルのデータが混在した形式であってもよいし、各チャンネルのデータがトラック毎に別れているような形式であってもよい。
以上実施例に沿って本発明を説明したが、本発明はこれらに制限されるものではない。例えば、種々の変更、改良、組み合わせ等が可能なことは当業者に自明であろう。
1 パーソナルコンピュータ、 2 バス、 3 RAM、 4 ROM、 5 CPU、 6 タイマ、 7 表示回路、 8 MIDIインターフェース、 9,11 検出回路、 10 マウス、 12 キーボード、 13 外部記憶装置、 14 通信インターフェース、 21外部音源装置、 22 バス、 23 MIDIインターフェース、24 RAM、 25 ROM、 26 CPU、 28 表示回路、29 楽音波形合成回路、 31 サウンドシステム、 32 音声合成回路、 33 検出回路、 34 スイッチ、 41 通信ネットワーク、 42 サーバコンピュータ、 51 演奏データ、 52 テキストデータ、 53 ノートプラスデータ、 75 ノートプラスデータ、76 スタンダードMIDIファイル、 81 スタンダードMIDIファイル変換手段、 82 ノートプラス変換手段