(57)【要約】【課題】高性能なプロセッサを使用せずに多ポリフォニックに対応可能な発音音源システムを提供する。【解決手段】楽曲データは楽曲データ格納部１４に格納された後、楽曲データ読出部１５によってメッセージ群単位に読み出され、処理時間判定部１６でその処理に必要なプロセッサの演算処理時間が算出される。演算処理時間が所定の時間よりも大きいと、前倒し処理が必要と判定され、楽曲データ変換部１７でメッセージ群単位の楽曲データが準備フェーズと実行フェーズのメッセージに変換される。前倒し処理が不要と判定された楽曲データと楽曲データ変換部１７で変換された楽曲データは、メッセージ群単位でデータバッファ１８に一旦格納され、タイマ１９からのタイミング信号に従ってデータ出力制御部２０によって読み出されて音源駆動用の制御データが生成され、音声合成処理を行う音源アクセラレータ２１に出力される。【選択図】図１
2007333780.tif 000002
【特許請求の範囲】
【請求項１】
外部から順次与えられる楽曲データを格納する楽曲データ格納部と、
前記楽曲データ格納部に格納された楽曲データを同時に処理すべきメッセージ群単位に読み出す楽曲データ読出部と、
前記読み出されたメッセージ群単位の楽曲データの処理に必要なプロセッサの演算処理時間を算出して所定の時間と比較し、前倒し処理の必要性の有無を判定する処理時間判定部と、
前記前倒し処理が必要と判定されたときに、前記メッセージ群単位の楽曲データを準備フェーズと実行フェーズのメッセージに変換する楽曲データ変換部と、
前記前倒し処理が不要と判定された楽曲データと前記楽曲データ変換部で変換された楽曲データをメッセージ群単位で一時的に格納するデータバッファと、
タイミング信号に従って前記データバッファに格納されたメッセージ群単位の楽曲データを読み出して音源駆動用の制御データを生成するデータ出力制御部と、
前記制御データに従って音声合成処理を行う音源アクセラレータとを、
備えたことを特徴とする多ポリフォニック発音音源システム。
【請求項２】
前記所定の時間は、前記メッセージ群単位の楽曲データと、その後に続く楽曲データの開始時間までの時間であることを特徴とする請求項１記載の多ポリフォニック発音音源システム。
【請求項３】
前記所定の時間は、予め設定された一定時間であることを特徴とする請求項１記載の多ポリフォニック発音音源システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、携帯機器等に使用される音源システムの多ポリフォニック（和音）化に関するものである。
【背景技術】
【０００２】
携帯機器等に使用される音源システムは、例えばＭＩＤＩ(Musical  Instrument  Digital  Interface)データのような楽曲データが入力され、これを所望の楽器音などのＰＣＭ(Pulse  Code  Modulation）データに変換して出力する機能を持ったシステムである。
【０００３】
音源システムでは、外部のホストＣＰＵ(Central  Processing  Unit）から、外部ホストＣＰＵバスを通してＭＩＤＩデータが転送されると、ＣＰＵコアがホストＣＰＵインタフェースを介して、そのＭＩＤＩデータを受け取って解析を行う。ＭＩＤＩデータは、演奏指示の内容を表すメッセージ・データと、メッセージ間の時間的な間隔を表すデルタタイム・データの２つの主要なデータで構成されている。なお、これらのデータ以外にも、総合的な情報を表すヘッダ・データも存在するが、ここでは説明を省略する。
【０００４】
メッセージ・データが入力されると、ＣＰＵコアはそのメッセージ・データを解析して、音源の割り当てや、音程パラメータ、音量パラメータ等の各種設定を行い、制御データを生成して、専用ハードウエアとして実装されている音源アクセラレータへ転送する。音源アクセラレータでは、転送されてきた制御データと自身の持つ波形ＲＯＭ(Read  Only  Memory)テーブルを使用して波形合成処理を実行し、所望のＰＣＭデータを生成して出力する。
【０００５】
一方、デルタタイム・データが入力されると、ＣＰＵコアはタイマを使用して、このデルタタイム・データで示された時間を計測し、次のメッセージ処理のタイミングを待つ。そして、次のメッセージ処理のタイミングになると、再び、次のメッセージ・データに対する解析処理等が行われる。
【０００６】
６４ポリフォニック等の多和音を再生する場合、音源であるメッセージ・データは和音数分のチャネルを持っており、ＣＰＵコア及び音源アクセラレータにおいて、各チャネルが排他的に順次処理され、最後に全チャネルの出力が加算されるようになっている。
【０００７】
【特許文献１】特開平１０−２２８２８２号公報
【特許文献２】特開平１１−９５７４６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
携帯電話向けとして、６４ポリフォニック等の多和音再生の要求が一般的となってきたが、従来の音源システムでは、和音数分のチャネルを持つ音源に対し、各チャネルが排他的に順次処理される構成となっているため、演奏する和音数が増えるに従ってその処理量が比例関係で増加する。
【０００９】
例えば、１番目のメッセージ・データＭＤ１、１番目のデルタタイム・データＤＴ１、多和音を指定するための２番目から５番目のメッセージ・データＭＤ２〜ＭＤ５、２番目のデルタタイム・データＤＴ２の順番で、音源システムにＭＩＤＩデータ転送されてきたとする。
【００１０】
音源システムでは、まず最初のメッセージ・データＭＤ１を読み出して処理を行う。次に、音源システムは、デルタタイム・データＤＴ１を読み出し、このデルタタイム・データＤＴ１で指定された時間まで待機する。そして、指定された時間になると、２番目のメッセージ・データＭＤ２を読み出して処理し、更に、３番目のメッセージ・データＭＤ３、４番目のメッセージ・データＭＤ４、５番目のメッセージ・データＭＤ５を順次読み出して処理する。その後、２番目のデルタタイム・データＤＴ２を読み出し、このデルタタイム・データＤＴ２で指定された時間まで待機することになる。しかしながら、２番目から５番目までのメッセージ・データＭＤ２〜ＭＤ５の処理時間は０ではないので、デルタタイム・データＤＴ２で指定された時間は、転送されたＭＩＤＩデータで想定しているタイミングよりも遅れてしまう。このため、ＰＣＭデータの出力タイミングが狂い、楽音の演奏にもたつきが生じるという問題があった。
【００１１】
このような状況は、ＣＰＵコアの処理速度を向上させればある程度緩和できるが、その結果、必要とされるＣＰＵパフォーマンスが増大し、音源システムのために高性能で高価なＣＰＵを使用しなければならない、といったコスト面での課題があった。
【００１２】
本発明は、高性能なプロセッサを使用せずに多ポリフォニックに対応可能な発音音源システムを目的としている。
【課題を解決するための手段】
【００１３】
本発明の多ポリフォニック発音音源システムは、外部から順次与えられる楽曲データを格納する楽曲データ格納部と、前記楽曲データ格納部に格納された楽曲データを同時に処理すべきメッセージ群単位に読み出す楽曲データ読出部と、前記読み出されたメッセージ群単位の楽曲データの処理に必要なプロセッサの演算処理時間を算出して所定の時間と比較し、前倒し処理の必要性の有無を判定する処理時間判定部と、前記前倒し処理が必要と判定されたときに、前記メッセージ群単位の楽曲データを準備フェーズと実行フェーズのメッセージに変換する楽曲データ変換部と、前記前倒し処理が不要と判定された楽曲データと前記楽曲データ変換部で変換された楽曲データをメッセージ群単位で一時的に格納するデータバッファと、タイミング信号に従って前記データバッファに格納されたメッセージ群単位の楽曲データを読み出して音源駆動用の制御データを生成するデータ出力制御部と、前記制御データに従って音声合成処理を行う音源アクセラレータとを備えたことを特徴としている。
【発明の効果】
【００１４】
本発明では、メッセージ群単位の楽曲データの処理に必要なプロセッサの演算処理時間を算出して所定の時間と比較することにより、前倒し処理の必要性の有無を判定する処理時間判定部と、前倒し処理が必要と判定されたメッセージ群単位の楽曲データを準備フェーズと実行フェーズのメッセージに変換する楽曲データ変換部を有している。これにより、準備フェーズでの処理が前倒し処理されるので、高性能なプロセッサを使用せずに多ポリフォニックに対応可能な発音音源システムが得られるという効果がある。
【発明を実施するための最良の形態】
【００１５】
この発明の前記並びにその他の目的と新規な特徴は、次の好ましい実施例の説明を添付図面と照らし合わせて読むと、より完全に明らかになるであろう。但し、図面は、もっぱら解説のためのものであって、この発明の範囲を限定するものではない。
【実施例１】
【００１６】
図１は、本発明の実施例１を示す多ポリフォニック発音音源システムの構成図である。  この多ポリフォニック発音音源システムは、外部のホストＣＰＵ１に接続されてＭＩＤＩデータ等の楽曲データが転送される外部バス１１と、この外部バス１１と内部バス１２との間の接続を行うインタフェース（Ｉ／Ｆ）部１３を有している。内部バス１２には、ホストＣＰＵ１から転送されてきたＭＩＤＩデータを一旦格納するための楽曲データ格納部１４、この楽曲データ格納部１４に格納されたＭＩＤＩデータを同時に処理すべきメッセージのグループであるメッセージ群単位に読み出す楽曲データ読出部１５、このメッセージ群の処理に必要なプロセッサの演算処理時間を算出して所定の時間と比較し、前倒し処理の必要性の有無を判定する処理時間判定部１６、前倒し処理が必要と判定されたときに、ＭＩＤＩデータを準備フェーズと実行フェーズのメッセージに変換する楽曲データ変換部１７、前倒し処理が不要と判定されたＭＩＤＩデータと楽曲データ変換部１７で変換されたメッセージをメッセージ群単位で一時的に格納するデータバッファ１８、一定周期でタイミング信号を出力するタイマ１９、及びこのタイマ１９からのタイミング信号に合わせてデータバッファ１８からメッセージを読み出して音源アクセラレータ２１に対する制御データを生成するデータ出力制御部２０が接続されている。音源アクセラレータ２１は、各種の楽器に対応する波形データが予め記憶された波形ＲＯＭを有し、データ出力制御部２０から与えられる制御データに従って音声合成処理を行って、ＰＣＭデータを生成して出力するものである。
【００１７】
図２は、図１の動作を示すフローチャートである。
ステップＳ１において、外部のホストＣＰＵ１から外部バス１１を介して転送されてきたＭＩＤＩデータは、インタフェース部１３によって受信され、内部バス１２を介して楽曲データ格納部１４に一旦格納される。
【００１８】
ここで、楽曲データ格納部１４に格納されたＭＩＤＩデータは、メッセージ・データとデルタタイム・データの２種類のデータを交互に並べたものである。メッセージ・データは、例えば、ピアノの鍵盤を押す／離すといった、楽器の各種の演奏動作として定義されている。このメッセージ・データには、音を出すノートオン、音を止めるノートオフ、音色（楽器）を切り替えるプログラムチェンジ及び音程を変えるピッチベンド等のメッセージが存在し、各メッセージ・データは、メッセージの種類等を示すステータスバイトと、それに続く単数または複数のデータバイトで構成されている。
【００１９】
ステータスバイトの上位４ビットはメッセージ種別を示し、下位４ビットは楽器の区別を示すチャネル番号に割り当てられている。前述のメッセージ・データは、下記のような具体的な数値が割り当てられている。
ノートオン        ：９（ｎ），ノート番号，ベロシティ
ノートオフ        ：８（ｎ），ノート番号，ベロシティ
プログラムチェンジ：Ｃ（ｎ），プログラム番号
ピッチベンド      ：Ｅ（ｎ），データＬＳＢ，…，データＭＳＢ
【００２０】
ここで、（ｎ）は４ビットのチャネル番号、ノート番号は発音／消音の音階の番号を表すデータバイト、ベロシティは発音／消音の際の強さ（音の大きさ）を表すデータバイト、そして、プログラム番号は各楽器に割り当てられた番号を表すデータバイトである。また、ピッチベンドは、２バイトのデータバイトを使用して音程の変化量を表すもので、ＬＳＢは最下位ビット、ＭＳＢは最上位ビットである。各データバイトのＭＳＢは“０”に設定され、ステータスバイトとの区別が付けられている。
【００２１】
一方、デルタタイム・データは、各メッセージ・データによるイベントの相対的位置を表すために使用されるもので、メッセージ・データの間に挿入されるようになっている。デルタタイム・データは、４分音符１つ分の時間を表したデータ（このデータの値は、ヘッダ・データの中で定義されている）を基準として、各イベント間の時間として取り扱われる。例えば、４分音符１つ分の時間が４８０と定義されている場合、あるイベント間のデルタタイムが２４０に設定されていれば、４分音符の半分の８分音符後に、次のイベントが譜面上に位置することになる。
【００２２】
デルタタイム・データは、その性質上、可変長の数値として任意のバイト数で表現される。複数バイトで表現する場合、各バイトのＭＳＢはフラグとして使われ、これが“０”の場合に、そのバイトが数値を構成する最後のバイトと見なされる。なお、２つのメッセージ・データによるイベントが同時に発生する場合には、これらの２つのメッセージ・データ間に時間が０に設定されたデルタタイム・データが挿入されるようになっている。
【００２３】
ステップＳ２において、楽曲データ格納部１４に格納されたＭＩＤＩデータは、楽曲データ読出部１５によってメッセージ群単位に読み出される。即ち、時間が０に設定されたデルタタイム・データの前後のメッセージ・データは、同時に楽音として出力する必要があるので、１つのメッセージ群として読み出される。楽曲データ読出部１５は、メッセージ群と、それに続くデルタタイム・データ（このデルタタイムは０ではない）を読み出して処理時間判定部１６へ出力する。
【００２４】
ステップＳ３において、処理時間判定部１６では、メッセージ群の処理に必要なプロセッサの演算処理時間を算出する。なお、各メッセージ・データに必要な演算処理時間は、使用するプロセッサとメッセージ種別によって決まっているので、予めシミュレータやエミュレータを使用してメッセージ種別毎に処理時間を実測しておき、この実測データを換算テーブルに記憶しておく。処理時間判定部１６では、楽曲データ読出部１５で読み出されたメッセージ群のメッセージ種別に従って換算テーブルを参照し、各メッセージ・データの処理時間を合計することで演算処理時間を算出することができる。
【００２５】
ステップＳ４において、処理時間判定部１６では、メッセージ群の演算処理時間とその後に続くデルタタイム・データの比較を行う。演算処理時間がデルタタイム・データよりも大きい場合は、リアルタイムでのプロセッサによる演算処理が間に合わなくなるので、前倒し処理の可能性を判定するためにステップＳ５へ進む。一方、演算処理時間がデルタタイム・データよりも小さい場合は、リアルタイムでの演算処理に問題はないと判断して、ステップＳ８へ進む。
【００２６】
ステップＳ５において、処理時間判定部１６では、引き続いてメッセージ群の演算処理時間とその前のデルタタイム・データの比較を行う。そして、演算処理時間がデルタタイム・データよりも大きければ、前倒し処理が不可能と判定してステップＳ６へ進む。演算処理時間がデルタタイム・データよりも小さければ、前倒し処理が可能と判定してステップＳ７へ進む。
【００２７】
ステップＳ６において、処理時間判定部１６では、メッセージ群のメッセージ・データをすべて処理することは不可能と判定し、メッセージ群のメッセージ・データの内の最後のメッセージ・データの処理を断念し、この最後のメッセージ・データを削除してステップＳ３ａへ進む。これにより、最後のメッセージ・データが削除されたメッセージ群に対して、処理時間判定部１６によるステップＳ３ａ，Ｓ５の処理が繰り返される。この繰り返しにより、メッセージ群を構成するメッセージ・データの数は、最終的に前倒し処理が可能な数まで削減される。
【００２８】
ステップＳ５で前倒し処理が可能と判定されると、ステップＳ７において、処理時間判定部１６によって前倒し処理が可能と判定されたメッセージ群（このメッセージ群には、ステップＳ６で削除されたメッセージ・データが含まれていない）に対して、楽曲データ変換部１７によるデータ変換処理が行われる。このデータ変換処理では、通常のメッセージ・データの処理を、準備フェーズと実行フェーズに分けて処理するメッセージ形式に変換する。例えば、ノートオン・メッセージの場合、ノートオン準備メッセージと出力制御開始メッセージの２つの処理に分割し、ノートオン準備メッセージの方のみ時間的前倒しし、ノートオン準備の処理のみを前倒して実行しておき、出力制御開始メッセージの方は変換前の通常のメッセージのタイミングで実行するようにする。ノートオン・メッセージの処理では、通常ノートオン準備の処理が処理量の大半を占めるので、前倒し処理により、プロセッサの処理を時間的に分散させることが可能になる。次に、１処理単位のメッセージ群のＭＩＤＩデータを変換した例を示す。
変換前：（Δ１，ＭＳＧ１，Δ０，ＭＳＧ２，Δ２）
変換後：（Δ０，ＭＳＧ１準備，Δ０，ＭＳＧ２準備，Δ１，ＭＳＧ１実行，Δ０，ＭＳＧ２実行，Δ２）
【００２９】
ここで、Δ１，Δ２は通常のデルタタイム・データである。Δ０は時間が０のデルタタイム・データであり、ＭＳＧはメッセージ・データである。
【００３０】
なお、ノートオン準備メッセージ等の準備フェーズ・メッセージと、出力制御開始メッセージ等の実行フェーズ・メッセージは、例えば、下記のような形式である。
（準備フェーズ・メッセージ）
ノートオン        ：９（ｎ），ノート番号，ベロシティ
ノートオフ        ：８（ｎ），ノート番号，ベロシティ
プログラムチェンジ：Ｃ（ｎ），プログラム番号
ピッチベンド      ：Ｅ（ｎ），データＬＳＢ，…，データＭＳＢ
（実行フェーズ・メッセージ）
ノートオン        ：９（ｎ），９（ｎ）
ノートオフ        ：８（ｎ），８（ｎ）
プログラムチェンジ：Ｃ（ｎ），Ｃ（ｎ）
ピッチベンド      ：Ｅ（ｎ），Ｅ（ｎ）
【００３１】
このように、準備フェーズ・メッセージは、通常のメッセージ・データと同一形式とし、実行フェーズ・メッセージは、ステータスバイトが２バイト連続し、データバイトを持たない形式としている。ＭＩＤＩデータでは、ステータスバイトとデータバイトをＭＳＢで識別しており、ステータスバイトが２バイト続くことはないので、このような形式が可能となる。
【００３２】
前記の変換前と変換後の１処理単位のメッセージ群のＭＩＤＩデータを、上記の準備フェーズ・メッセージと実行フェーズ・メッセージの形式で表現すると、次のようになる。ここで、“０ｘ”は、その後に続く２文字が１６進数であることを示している。
変換前：（０ｘ４０，０ｘ９０，０ｘ７Ｆ，０ｘ７Ｆ，０ｘ００，０ｘ９１，０ｘ５Ｆ，０ｘ５Ｆ，０ｘ２０）
変換後：（０ｘ００，０ｘ９０，０ｘ７Ｆ，０ｘ７Ｆ，０ｘ００，０ｘ９１，０ｘ５Ｆ，０ｘ５Ｆ，０ｘ４０，０ｘ９０，０ｘ９０，０ｘ００，０ｘ９１，０ｘ９１，０ｘ２０）
【００３３】
ステップＳ８において、ステップＳ４で処理が可能と判定されたメッセージ群のメッセージ・データと、ステップＳ７で楽音データ変換部１７によって変換されたメッセージ群のメッセージ・データが、データバッファ１８に格納される。１処理単位のメッセージ群のデータ量は、同時に発音されるポリフォニック数に、１音当たりのデータ量を乗算した値である。１音当たりのデータ量は、前述したように、（０ｘ００，０ｘ９０，０ｘ７Ｆ，０ｘ７Ｆ）＋（０ｘ９０，０ｘ９０，０ｘ００）の合計７バイトである。従って、ポリフォニック数の最大を６４とすれば、データバッファ１８の最大容量は７×６４＝４４８バイトとなるが、実際のＭＩＤＩデータで６４音が同時に発音される場合は極めて稀なケースであるので、１２８〜２５６バイトで実用的には十分と考えられる。
【００３４】
ステップＳ９において、データバッファ１８に格納されたメッセージ群のメッセージ・データが、データ出力制御部２０によって所定のタイミングで読み出され、音源アクセラレータ２１に対する制御データが生成されて出力される。
【００３５】
データ出力制御部２０では、変換データのノートオン準備処理、及び音源アクセラレータ２１への制御処理のタイミングは、タイマ１９によって時間制御される。時間の基準は、各メッセージ間に挿入されているデルタタイム・データである。タイマ１９は、一定周期Ｔでデータ出力制御部２０に割り込みを発生させるようになっている。
【００３６】
データ出力制御部２０では、タイマ１９からの割り込みがあると、時間Ｔが経過したものとして、その経過分の処理を開始する。データ出力制御部２０は、割り込みを受け付けると、データバッファ１８から１バイトのデータを読み出す。これにより、デルタタイム・データ０ｘ００が読み出されるが、この時点では時間Ｔが経過しているので、先の処理に進む。次に、準備フェーズのメッセージ０ｘ９０，０ｘ７Ｆ，０ｘ７Ｆが読み出され、データ出力制御部２０は、メッセージ内容に従ってノートオン準備の処理を実行する。
【００３７】
処理完了後、データ出力制御部２０は、次のデータをデータバッファ１８から読み出す。これにより、デルタタイム・データ０ｘ４０が読み出される。この時点で、データ出力制御部２０は、これまでのデルタタイムの累積（０ｘ４０）と実際の経過時間Ｔを比較する。そして、デルタタイムの累積が実際の経過時間Ｔよりも小さければ、更に処理を続け、デルタタイムの累積が実際の経過時間Ｔよりも大きければ、次の処理時間には到達していないと判断して処理を停止する。
【００３８】
処理を停止する場合、データ出力制御部２０は、｛（デルタタイムの累積）−（実際の経過時間Ｔ）｝を余り時間として記憶しておき、次のタイマ１９からの割り込みがあるまで処理を停止する。そして、次のタイマ１９の割り込みにより、データ出力制御部２０は、そのタイミングで続きの処理を実行することになる。即ち、データ出力制御部２０は、記憶しておいた余り時間と経過時間Ｔを比較し、次のメッセージの処理タイミングに到達しているかを判断する。その後は、同様の処理が繰り返して実行される。
【００３９】
データ出力制御部２０は、データバッファ１８から読み出した準備フェーズのメッセージに従って、音源アクセラレータ２１に対する制御データを生成する。制御データは、音源アクセラレータ２１内に設けられた波形データが記憶された波形ＲＯＭのアドレス、音程制御データ、振幅制御データ、及びフィルタ制御データ（フィルタ種類、カットオフ周波数）の要素で構成されている。
【００４０】
例えば、ノートオン・メッセージの場合、データ出力制御部２０は、そのノート番号の指定に基づいて対応する波形ＲＯＭのアドレス、音程制御データ、及びフィルタ制御データを生成し、ベロシティの指定に基づいて振幅制御データを生成する。データ出力制御部２０は、これらのデータを発音毎に管理しており、音源アクセラレータ２１への出力制御タイミングである実行フェーズ・メッセージ（この場合は、ノートオン・メッセージの０ｘ９ｎ，０ｘ９ｎ）が読み出されると、対象発音の全制御データを音源アクセラレータ２１へ転送する。また、ピッチベンド・メッセージは音程制御のみであるので、データ出力制御部２０は、対応する波形ＲＯＭのアドレス、音程制御データ及びフィルタ制御データを生成する。そして、データ出力制御部２０は、音源アクセラレータ２１への出力制御タイミングであるピッチベンド・メッセージ（０ｘＥｎ，０ｘＥｎ）が読み出されると、対象発音の波形ＲＯＭのアドレス、音程制御データ及びフィルタ制御データを音源アクセラレータ２１へ転送する。同様に、音量系のメッセージでは、振幅制御データのみが、生成と転送の対象となる。
【００４１】
ステップＳ１０において、データ出力制御部２０から転送された制御データが、音源アクセラレータ２１によって解読され、波形合成されたＰＣＭデータが出力される。ＰＣＭデータは、図示しない音響出力部に与えられ、アナログ信号に変換されてスピーカ等から音響信号として出力される。
【００４２】
図３は、前述したとおりの、図１における同時発音処理時のタイミングを示すタイムチャートである。
【００４３】
以上のように、この実施例１の多ポリフォニック発音音源システムは、ＭＩＤＩデータを同時処理のメッセージ群単位に読み出す楽曲データ読出部１５と、同時処理のメッセージ群の処理に必要なプロセッサの演算処理時間を算出する処理時間判定部１６と、ＭＩＤＩデータを準備フェーズと実行フェーズのメッセージに変換する楽曲データ変換部１７と、タイマ１９からのタイミング信号に合わせてメッセージを読み出して音源アクセラレータ２１に対する制御データを生成するデータ出力制御部２０を有している。これにより、集中した処理を時間的に分散させることが可能になり、プロセッサに対する負荷が平均化されるので、特別に高性能なプロセッサを使用しなくても多ポリフォニックに対応することができるという利点がある。
【実施例２】
【００４４】
実施例１では、ステップＳ４に示すように、メッセージ群の後のデルタタイムを条件として処理の過密度合を判定しているため、例えば同時に６４音の発音が発生した場合等にも、次のメッセージとの間隔が６４音分のノートオン処理時間を超えて設定されているＭＩＤＩデータの場合には、変換処理を実施しないことになる。しかしながら、この場合、６４個目に処理されたノートは、１個目に処理されたノートに対して、あいだの６３個の処理だけ制御が遅れてしまうので、その分遅れて発音される。従って、処理能力の低いプロセッサを使用した場合、出力された音が違和感を生じさせるおそれがある。即ち、実施例１の判定処理では、同時処理のメッセージ群の演算処理時間がいくら長くても、その後のデルタタイムがそれ以上に長ければ、処理が過密しているとは判定されず、前倒し処理が行われないので、不自然な音が出力されるおそれがある。この実施例２は、上記の問題点を解決するものである。
【００４５】
図４は、本発明の実施例２の動作を示すフローチャートであり、図２中の処理と同様の処理には同様の符号が付されている。
【００４６】
この実施例２の動作は、図１と同様の多ポリフォニック発音音源システムで行われる。但し、図１の多ポリフォニック発音音源システムとは、処理時間判定部１６の判定動作が若干異なっている。即ち、この実施例２の処理時間判定部１６は、ステップＳ４Ａに示すように、ステップＳ３で算出されたメッセージ群の演算処理時間を、デルタタイム・データではなく、所定時間（例えば、２０ｍｓ）と比較する。そして、演算処理時間が所定時間よりも大きい場合は、プロセッサによる演算処理が間に合わなくなるので、前倒し処理の可能性を判定するためにステップＳ５へ進む。一方、演算処理時間が所定時間よりも小さい場合は、演算処理に問題はないと判断して、ステップＳ８へ進む。
【００４７】
このように、この実施例２ではメッセージ群の後のデルタタイム・データを判断条件として使用しないので、処理単位は次のようになる。
（Δ１，ＭＳＧ１，Δ０，ＭＳＧ２）
【００４８】
なお、ステップＳ４Ａ以外の処理は、図２と同様である。
以上のように、この実施例２のステップＳ４Ａの処理では、実際に人間が聞いたときに違和感無く聞くことができる所定時間（例えば、２０ｍｓ）を、処理の過密度合を判定する基準時間としているので、演算処理時間がこの所定時間を超える場合は、前倒し処理が行われ、プロセッサの処理能力による処理の遅れを低減することができるという利点がある。
【図面の簡単な説明】
【００４９】
【図１】本発明の実施例１を示す多ポリフォニック発音音源システムの構成図である。
【図２】図１の動作を示すフローチャートである。
【図３】図１における同時発音処理時のタイミングを示すタイムチャートである。
【図４】本発明の実施例２の動作を示すフローチャートである。
【符号の説明】
【００５０】
１    外部ホストＣＰＵ
１１    外部バス
１２    内部バス
１３    インタフェース部
１４    楽曲データ格納部
１５    楽曲データ読出部
１６    処理時間判定部
１７    楽曲データ変換部
１８    データバッファ
１９    タイマ
２０    データ出力制御部
２１    音源アクセラレータ
【図１】
2007333780.tif 000003
【図２】
2007333780.tif 000004
【図３】
2007333780.tif 000005
【図４】
2007333780.tif 000006