JPH09258737A - コンピュータソフトウェアを用いた音源システム - Google Patents

コンピュータソフトウェアを用いた音源システム

Info

Publication number
JPH09258737A
JPH09258737A JP8083157A JP8315796A JPH09258737A JP H09258737 A JPH09258737 A JP H09258737A JP 8083157 A JP8083157 A JP 8083157A JP 8315796 A JP8315796 A JP 8315796A JP H09258737 A JPH09258737 A JP H09258737A
Authority
JP
Japan
Prior art keywords
waveform data
sound source
software
generated
interface
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.)
Granted
Application number
JP8083157A
Other languages
English (en)
Other versions
JP2970526B2 (ja
Inventor
Genichi Tamura
元一 田邑
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yamaha Corp
Original Assignee
Yamaha Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Yamaha Corp filed Critical Yamaha Corp
Priority to JP8083157A priority Critical patent/JP2970526B2/ja
Priority to DE69705434T priority patent/DE69705434T2/de
Priority to EP97100550A priority patent/EP0785539B1/en
Priority to CNB971022534A priority patent/CN1159698C/zh
Priority to KR1019970001193A priority patent/KR100478469B1/ko
Priority to CN2006100998189A priority patent/CN1932969B/zh
Priority to US08/784,232 priority patent/US6023016A/en
Priority to CN2004100485456A priority patent/CN1545084B/zh
Priority to SG1997000103A priority patent/SG65634A1/en
Publication of JPH09258737A publication Critical patent/JPH09258737A/ja
Application granted granted Critical
Publication of JP2970526B2 publication Critical patent/JP2970526B2/ja
Priority to KR1020040057745A priority patent/KR100500077B1/ko
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/16Sound input; Sound output
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H1/00Details of electrophonic musical instruments
    • G10H1/0033Recording/reproducing or transmission of music for electrophonic musical instruments
    • G10H1/0041Recording/reproducing or transmission of music for electrophonic musical instruments in coded form
    • G10H1/0058Transmission between separate instruments or between individual components of a musical system
    • G10H1/0066Transmission between separate instruments or between individual components of a musical system using a MIDI interface
    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10HELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
    • G10H7/00Instruments in which the tones are synthesised from a data store, e.g. computer organs
    • G10H7/002Instruments in which the tones are synthesised from a data store, e.g. computer organs using a common processing for different operations or calculations, and a set of microinstructions (programme) to control the sequence thereof
    • G10H7/006Instruments in which the tones are synthesised from a data store, e.g. computer organs using a common processing for different operations or calculations, and a set of microinstructions (programme) to control the sequence thereof using two or more algorithms of different types to generate tones, e.g. according to tone color or to processor workload

Abstract

(57)【要約】 【課題】 OSを介してMIDI演奏情報を受け、これ
に基づきアプリケーションレベルのソフト音源を駆動
し、ソフト音源のOSレベルでの簡易な応用範囲を広げ
る。 【解決手段】 擬似的ドライバ(FMD)をOSにイン
ストールし、アプリケーションソフト(APS1)から
出力された演奏情報をOSを介して該擬似的ドライバで
受け取り、該演奏情報をアプリケーションレベルのソフ
ト音源(SSM)に与えるようにする。別の例として
は、該ソフト音源(SSM)をOSにドライバとしてイ
ンストールし、アプリケーションソフト(APS1)か
ら出力された演奏情報をOSを介して該ソフト音源が受
け取れるようにする。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】この発明は、CPUのような
汎用の演算処理手段すなわちコンピュータを使用して、
ソフトウェアとして記述された音波形データ生成処理プ
ログラムを実行することに基づき音波形データを生成す
る音源システムに関する。
【0002】
【従来の技術】電子楽器では、楽音生成処理(楽音生成
処理によって生成した楽音波形データにエフェクトを付
加する処理を含む場合もある)を、マイクロプロセッサ
に実行させることが広く行なわれている。そのようなマ
イクロプロセッサとしては、楽音生成方式(例えば波形
メモリ方式やFM合成方式等)に応じた回路構成を採用
して成る専用のハードウェア(例えば音源LSIやDS
P(ディジタルシグナルプロセッサ)等)を設計するこ
とが一般的であった。
【0003】しかし近年、CPUの演算能力の向上に伴
って、汎用コンピュータや専用の楽音発生装置に搭載し
たCPUにおいて、所定の楽音生成処理手順を記述した
プログラムを実行させることにより、楽音波形データを
生成させるようにしたものが登場している。ここでは、
そのような楽音生成処理プログラムを基礎としている楽
音生成装置や楽音生成方法のことをCPU音源またはソ
フトウェア音源(必要に応じてソフト音源と略称する)
と呼び、これに対し、専用のハードウェアを使用する従
来からの楽音生成装置や楽音生成方法をハード音源と呼
ぶことにする。
【0004】従来のソフト音源は、アプリケーションレ
ベルのソフトウェアとして構成されている。図22は、
アプリケーションレベルのソフト音源を具備する従来技
術のソフトウェア構造の一例を示す図である。このソフ
トウェア構造は、プログラミングの複雑さの低減化を目
的として、独立にプログラミングできる最小単位(モジ
ュール)の複合体として階層的に構成されている。最上
位の階層のプログラムは、MIDIメッセージを作成す
るためのモジュールであり、具体的には、シーケンサソ
フトやゲームソフトやカラオケソフト等の形態をとるア
プリケーションソフトウェアからなっている。
【0005】図22では、アプリケーションソフトウェ
アの形態例として2つの形態が並列的に示されている。
1つは、カラオケプレイヤーに搭載されたカラオケソフ
ト等の形態をとっており、もう1つは、MIDIプレイ
ヤーに搭載されたMIDI再生ソフトの形態をとってい
る。カラオケプレイヤーでは、多数のカラオケ曲につい
てのファイルをMIDI形式で記憶しており、選択され
たカラオケ曲のファイルを読み出し、その演奏情報をM
IDIメッセージのフォームで出力する。カラオケソフ
トの下位の階層に、ソフト音源モジュールが設けられ
る。このソフト音源モジュールの入力側には、所定のソ
フト音源用API(アプリケーションプログラミングイ
ンターフェース)が設けられている(図中“SGM M
IDI out API”と記されたものがソフト音源
用APIである)。
【0006】ソフト音源モジュールは、図中の“SGM
MIDI out API”のような専用のソフト音
源用API経由で供給されるMIDIメッセージに基づ
いて楽音波形データを生成するためのプログラムからな
っている。このソフト音源モジュールは、図23に示す
ように、「MIDI出力ドライバ部」と「音源部(エン
ジン部)」との2つのモジュールで構成されている。
「MIDI出力ドライバ部」は、「音源部」を駆動する
ためのモジュールであり、MIDIメッセージに応じ
て、ボイスデータを「音源部」制御用の制御パラメータ
に変換する。この制御パラメータは、モジュール間の所
定のインターフェース経由で「音源部」に送られる。ま
た、「MIDI出力ドライバ部」が初期化されるとき、
必要な波形データ群がファイルからロードされて「波形
データ記憶部」に蓄えられる。「音源部」は、この制御
パラメータに従い、「波形データ記憶部」に蓄えられた
波形データ群を利用して(例えば所要のピッチで読み出
して)、所要のピッチや音色等の楽音特徴を具備する楽
音波形データ(順次サンプル点の楽音波形データ)を生
成する。
【0007】コンピュータにおいて採用される所定のオ
ペレーティングシステム(例えばマイクロソフト社製の
Windows3.1(商標)やWindows95
(商標)など)においては、生成済みの波形データ(波
形サンプルデータ)を授受するためのインターフェース
(例えばWindows3.1(商標)では“WAVE
out API”)が用意されている。「出力デバイ
ス」は、オペレーティングシステム(以下必要に応じて
OSと略称する)にインストールされたドライバモジュ
ールであり、アプリケーションソフトとしての上記ソフ
ト音源モジュールで生成された波形データを、上記“W
AVE out API”のような所定のインターフェ
ースを介して受け取り、これを外部のハードウェアに対
して出力する処理を行う。「出力デバイス」は、例え
ば、ソフト音源モジュールの処理によって生成されてハ
ードディスクのような記憶装置にバッファ記憶された波
形データをダイレクトメモリアクセス(DMA)コント
ローラを介して読み出して、例えばディジタル/アナロ
グコンバータ(DAC)からなる上記外部ハードウェア
に対して出力する処理を行うソフトウェアからなってい
る。
【0008】図22において示されたMIDIプレイヤ
ーは、MIDI再生モジュールとソフト音源モジュール
を予め内蔵しているタイプである。MIDI再生モジュ
ールでは、スタンダードMIDIファイル(SMF)を
読み出してMIDIメッセージを再生する。再生された
MIDIメッセージがソフト音源モジュールで処理され
て、上記と同様に、該MIDIメッセージに対応する楽
音波形データが生成される。このMIDIプレイヤー内
のソフト音源モジュールで生成された楽音波形データ
は、上記と同様に、上記“WAVE out API”
のような所定のインターフェースを介して「出力デバイ
ス」によって処理され、外部のハードウェア(例えばD
AC)に対して出力される。
【0009】一方、コンピュータのオペレーティングシ
ステムにおいては、波形データを生成する基となる演奏
情報(典型的にはMIDIメッセージ)を授受するため
のインターフェース(例えばWindows3.1(商
標)では“MIDI API”)も用意されている。こ
のようなインターフェースの存在によって、MIDIメ
ッセージを出力するソフトウェアをアプリケーションソ
フトとして利用することもできる。図24は、その一例
を示したもので、ゲームソフトやシーケンサソフトある
いはマルチメディアソフト等から、様々なゲーム効果音
や背景音(BGM)のMIDIデータあるいは自動シー
ケンス演奏音の演奏情報がMIDIメッセージのフォー
ムで出力される。これが上記“MIDI API”のよ
うな所定のインターフェースを介してOSで受け取ら
れ、MIDIドライバに与えられる。MIDIドライバ
では、与えられたMIDIメッセージに基づく音生成用
データを外部のハードウェア音源に与える。外部のハー
ドウェア音源では、与えられたデータに基づき所定の楽
音生成用ハードウェア装置を用いて音波形データを生成
する。
【0010】
【発明が解決しようとする課題】上述のように、従来の
アプリケーションレベルのソフト音源においては、OS
の所定のインターフェース(例えばWAVE out
API)に生成済みの波形データを出力することができ
るが、波形データを生成する基となる演奏情報を授受す
るためのインターフェース(例えばMIDI API)
からのデータを受け取ってこれに基づく波形データ生成
処理を行うことができない。そのため、ゲームソフトや
シーケンサソフトあるいはマルチメディアソフト等の演
奏情報(MIDIメッセージ)を発生する各種のソフト
ウェアと、アプリケーションレベルのソフト音源とを、
コンピュータのOSを介して、簡便に組み合わせること
ができなかった。また、それ故に、ゲームソフトやシー
ケンサソフトあるいはマルチメディアソフト等の演奏情
報(MIDIメッセージ)を発生する各種のソフトウェ
アをコンピュータのOSに適用して簡便に使用できるよ
うにするためには、どうしてもハードウェア音源が必要
とされ、コストがかかるものとなっていた。
【0011】ところで、MIDIメッセージ等の演奏情
報に基づいて楽音発生処理を行おうとする場合、コンピ
ュータが楽音発生処理のみを実行することは希であり、
他のソフトウェアのプログラムを同じOS上で並行して
処理することが多い。例えば、ゲームソフトを実行する
ときは、音声発生処理に並行して動画像の発生処理等を
行う必要があるし、カラオケソフトを実行する場合でも
歌詞画像及び背景画像の発生処理を同時並行的に行う必
要がある。そのような場合、ソフトウェア音源を使用す
る場合、コンピュータはそのソフトウェア音源のプログ
ラムと他の必要なソフトウェアのプログラムを同じOS
上で並行して処理することになる。その場合には、他の
処理に影響されることなくソフトウェア音源による楽音
波形データ生成処理の実行が確保されるようにするため
に、マルチタスク機能を有するOS(例えばWindo
ws95(商標)等)上で楽音生成処理を実行させるこ
とが望ましい。しかし、完全なマルチタスク機能を有し
ないOS(例えばWindows3.1(商標)等)も
広く普及しており、そうしたOS上でも楽音生成処理を
実行させたいというニーズが存在している。しかるに、
そうしたOS上では、他のソフトウェアの処理の影響に
よって楽音生成処理の実行が遅れ、その結果、発音に支
障が生じることがあり得るし、逆に、楽音生成処理に長
い時間を費やすことに影響されて他の処理の実行が遅れ
るという問題も起こり得る。特に、従来は、ハードウェ
ア音源を用いていたので、そのような並行処理の問題が
起こらなかったアプリケーションソフトにおいて、本発
明に従ってソフトウェア音源を使用するようにすると、
そのような並行処理の問題が起こるおそれが出てくるの
で、予め解決策を講ずることが望まれる。
【0012】この発明は上述の点に鑑みてなされたもの
で、オペレーションシステムを介してMIDIメッセー
ジのような演奏情報を受けて、これに基づきアプリケー
ションレベルのソフトウェア音源を駆動することができ
るようにすることにより、ソフトウェア音源の応用範囲
を広げることができるようにしたコンピュータソフトウ
ェアを用いた音源システムを提供しようとするものであ
る。また、完全なマルチタスク機能を有しないOS上で
ソフトウェア音源による音波形データ生成処理と他のソ
フトウェアの処理を並行して実行させる場合でも、楽音
生成処理や他の処理に支障が生じないようにしたコンピ
ュータソフトウェアを用いた音源システムを提供しよう
とするものである。
【0013】
【課題を解決するための手段】第1の観点によれば、こ
の発明は、所定のオペレーティングシステムとソフトウ
ェア音源のプログラムとを搭載したコンピュータを用い
て音波形データを生成するための音源システムにおい
て、前記オペレーティングシステムは、波形データを生
成する基となる演奏情報を授受するための第1のインタ
ーフェースと、生成済みの波形データを授受するための
第2のインターフェースとを有しており、また、前記ソ
フトウェア音源は、演奏情報を受け取り、これに基づき
波形データを生成する処理を行い、生成した波形データ
を前記第2のインターフェースを介して出力するアプリ
ケーションレベルのソフトウェアであり、そこにおい
て、前記オペレーティングシステムにドライバとしてイ
ンストールされ、前記第1のインターフェースを介して
与えられる前記演奏情報を受け取り、受け取った該演奏
情報を前記ソフトウェア音源に与えるようにプログラム
された擬似的ドライバを更に具備することを特徴とする
ものである。
【0014】上記第1の観点によれば、擬似的ドライバ
を設けたことにより、適宜のアプリケーションソフトを
介して第1のインターフェースを介して与えられる演奏
情報(例えばMIDIメッセージ)を該擬似的ドライバ
によって受け取り、この受け取った演奏情報をソフトウ
ェア音源に与えることができる。従って、自らがアプリ
ケーションソフトでもあるソフトウェア音源が、上記別
のアプリケーションソフトから与えられる演奏情報を入
力し、これに基づき音波形データ生成処理を行うことが
できる。従って、アプリケーションソフトであるソフト
ウェア音源と別のアプリケーションソフトとをOSレベ
ルで簡単に組み合わせることができ、該別のアプリケー
ションソフトから第1のインターフェースを介して与え
られる演奏情報(例えばMIDIメッセージ)をソフト
ウェア音源に入力して、それに対応する音波形データを
生成することができる。これにより、アプリケーション
ソフトであるソフトウェア音源の応用範囲を広げること
ができると共に、ゲームソフトやシーケンサソフトある
いはマルチメディアソフト等の演奏情報(MIDIメッ
セージ)を発生する各種のアプリケーションソフトウェ
アをコンピュータのOSに適用して簡便に使用できるよ
うにする場合に、ハードウェア音源を不要にすることが
できるので、これらの簡便な応用性を確保しながら、コ
ストの面でも有利になる、という優れた効果を奏する。
【0015】前記第1のインターフェースに演奏情報を
与える第1の手段(すなわち、MIDIメッセージのよ
うな演奏情報を発生する上記別のアプリケーションソフ
ト)と、前記ソフトウェア音源に演奏情報を与える第2
の手段(すなわち、OSを経由せずに、従来知られたよ
うに、ソフトウェア音源に専用に組み込まれたカラオケ
ソフト等の適宜のソフトウェア)とを具備し、前記ソフ
トウェア音源は、前記第1のインターフェースを経由し
て前記第1の手段から与えられる演奏情報に基づく波形
データ生成処理と前記第2の手段から直接与えられる演
奏情報に基づく波形データ生成処理とを実行するように
してもよい。これによって、従来知られたようなソフト
ウェア音源に専用に組み込まれたソフトウェア(つまり
第2の手段)と、OSを介して該ソフトウェア音源と組
み合わされる別のソフトウェア(つまり第1の手段)と
によって、並行して、該ソフトウェア音源を利用するこ
とができるようになる。
【0016】第2の観点によれば、この発明は、所定の
オペレーティングシステムとソフトウェア音源のプログ
ラムとを搭載したコンピュータを用いて音波形データを
生成するための音源システムにおいて、前記オペレーテ
ィングシステムは、波形データを生成する基となる演奏
情報を授受するための第1のインターフェースと、生成
済みの波形データを授受するための第2のインターフェ
ースとを有しており、また、前記ソフトウェア音源は、
演奏情報を受け取り、これに基づき波形データを生成す
る処理を行い、生成した波形データを前記第2のインタ
ーフェースを介して出力するアプリケーションレベルの
ソフトウェアであり、そこにおいて、前記ソフトウェア
音源のプログラムを前記オペレーティングシステムにド
ライバとしてインストールすると共に、該ソフトウェア
音源が前記第1のインターフェースを介して与えられる
前記演奏情報を受け取るようにプログラムし、前記第1
のインターフェースを介して受け取った演奏情報に基づ
く波形データ生成処理を前記ソフトウェア音源によって
実行するようにしたことを特徴とする。
【0017】上記第2の観点によれば、アプリケーショ
ンソフトである前記ソフトウェア音源のプログラムを前
記オペレーティングシステムにドライバとしてインスト
ールすると共に、該ソフトウェア音源が前記第1のイン
ターフェースを介して与えられる前記演奏情報を受け取
るようにプログラムしたことにより、適宜のアプリケー
ションソフトを介して第1のインターフェースを介して
与えられる演奏情報(例えばMIDIメッセージ)をO
Sを介してソフトウェア音源に与えることができる。従
って、この場合も、自らがアプリケーションソフトでも
あるソフトウェア音源が、上記別のアプリケーションソ
フトから与えられる演奏情報を入力し、これに基づき音
波形データ生成処理を行うことができ、前記と同様の効
果を奏する。
【0018】第3の観点によれば、上記の各音源システ
ムにおいて、前記コンピュータは、前記ソフトウェア音
源のプログラムとその他のプログラムを並行して実行す
る制御を行うメイン制御部を有しており、このメイン制
御部は、所定時間内の複数回の起動機会のうち、前記ソ
フトウェア音源のプログラムを実際に実行してよい機会
に起動命令を発生する起動命令発生手段を具備してお
り、また、前記ソフトウェア音源において、前記起動命
令に応じて波形データ生成処理を実際に起動した機会だ
けで、通算として前記所定時間内に所定サンプル数分の
波形データを生成させるように、波形データ生成処理を
調整する調整処理手段を具備していることを特徴とす
る。
【0019】これによれば、コンピュータのメイン制御
部において起動命令発生手段を設け、波形データ生成処
理を起動する機会を所定時間内に複数回設定し、この複
数回の機会のうち、前記ソフトウェア音源のプログラム
を実際に実行してよい機会にだけ起動命令を発生する。
これにより、メイン制御部は、他のプログラムの実行状
況との兼ね合いで、ソフトウェア音源のプログラムを実
際に実行してよい機会にだけ起動命令を発生することが
でき、ソフトウェア音源のプログラムとその他のプログ
ラムとを適切に時分割制御して並行して実行させること
ができる。
【0020】一方、ソフトウェア音源において、前記起
動命令に応じて波形データ生成処理を実際に起動した機
会だけで、通算として前記所定時間内に所定サンプル数
分の波形データを生成させるように、波形データ生成処
理を調整する調整処理手段を具備している。従って、所
定時間内に設定された複数回の起動機会のうち何回かの
機会で起動命令が発生されなかったとしても、起動命令
に応じて波形データ生成処理を実際に起動した機会だけ
を使用して、通算して上記所定時間内に所定サンプル数
分の音波形データを生成が完了するように制御される。
すなわち、ソフトウェア音源における1回の起動命令に
基づく波形データ生成処理量がフレキシブルに可変制御
され、所定時間内における実際の起動命令発生回数がメ
イン制御部の状況に依存する可変数であっても、通算し
て上記所定時間内に所定サンプル数分の音波形データを
生成が完了するように制御することができる。
【0021】従って、完全なマルチタスク機能を有しな
いOS上でソフトウェア音源による音波形データ生成処
理と他のソフトウェアの処理を並行して実行させる場合
でも、音波形データ生成処理及び他のソフトウェアの処
理に支障が生じないようにすることができる、という優
れた効果を奏する。すなわち、他のソフトウェアの処理
の影響によって音波形データ生成処理の起動命令発生回
数が相対的に減ったとしても、通算して上記所定時間内
に所定サンプル数分の音波形データを生成が完了するよ
うに制御されるので、発音遅れ等の支障が生じることが
なくなる。逆に、音波形データ生成処理を固定の時分割
的処理時間で行わないことにより、他のソフトウェアの
処理の実行が音波形データ生成処理によって阻害されて
その処理が遅れるという問題が起こらないようにするこ
とができる。
【0022】一実施態様として、前記調整処理手段は、
各起動命令に対応する時点において、その時点までに生
成処理すべき波形データの未処理量の関数として、該時
点の1起動命令に応じて生成すべき波形データ量を決定
するものであってよく、その場合、前記ソフトウェア音
源は、該決定された波形データ量分の波形データを生成
する処理を、該1起動命令に応じて実行する。これによ
って、上記関数を適切に定めることにより、生成処理す
べき波形データの未処理量との兼ね合いで、1起動命令
に応じて生成すべき波形データ量を適切に決定すること
ができ、1起動命令に対応するソフトウェア音源の処理
によってメイン制御部の作業が占有されることによって
他の処理の実行が阻害されることが起こる確率をできる
だけ低くするように制御することができるようになる。
【0023】次に、第4の観点によれば、この発明は、
所定のオペレーティングシステムで動作するサウンドプ
ログラムを実行することによって音波形データを生成す
るための音源システムにおいて、前記オペレーティング
システムは、生成済みの波形データを授受するための第
1のインターフェースと、波形データを生成する基とな
る演奏情報を授受するための第2のインターフェース
と、生成済みの波形データを授受するための第3のイン
ターフェースとを有しており、前記サウンドプログラム
は、前記オペレーティングシステムにドライバとしてイ
ンストールされており、前記第2のインターフェースか
ら入力された演奏情報に基づき、楽音生成処理を実行し
て波形データを生成する生成ステップと、前記第3のイ
ンターフェースから入力された波形データと前記生成ス
テップで生成された波形データとを同期をとって混合す
る混合ステップと、前記混合ステップで混合した波形デ
ータを前記第1のインターフェースに出力する出力ステ
ップとを実行することを特徴とする。
【0024】前述の第2の観点に係る音源システムで
は、ソフトウェア音源がスタートすると、生成済みの波
形データを授受するための第1のインターフェースがソ
フトウェア音源によって占有されてしまい、その他のア
プリケーションソフトから発生した波形データを当該イ
ンターフェースに出力することができなかった。これに
対し、この第4の観点によれば、オペレーティングシス
テムが、生成済みの波形データを授受するためのインタ
ーフェースとして、第1のインターフェースとは別に第
3のインターフェースを有している。従って、第1のイ
ンターフェースがソフトウェア音源によって占有されて
いても、他の適宜のアプリケーションソフトから発生し
た波形データを第3のインターフェースに出力すること
ができる。
【0025】ところで、従来の課題として述べたよう
に、完全なマルチタスク機能を有しないOS上では、演
奏情報に基づく楽音生成処理に、並行して実行しなけれ
ばならない他のソフトウェアの処理の影響によって遅れ
が生じる。そのため、他のアプリケーションソフトから
第2のインターフェースを介して入力された演奏情報に
基づいてソフトウェア音源において波形データの生成が
完了するタイミングは、当該演奏情報の発生タイミング
と同じタイミングで他のアプリケーションソフトから発
生した波形データが第3のインターフェースに出力され
るタイミングよりも遅れることになるので、これらの波
形データをそのタイミングのままOSに与えると、再生
タイミングがずれてしまい演奏上不都合である。
【0026】そこで、この第4の観点によれば、オペレ
ーティングシステムにドライバとしてインストールされ
たアプリケーションソフトであるサウンドプログラム
が、第2のインターフェースを介して入力された演奏情
報に基づいて波形データを生成し、その波形データを第
3のインターフェースを介して入力された波形データと
同期をとって混合し、混合した波形データを第1のイン
ターフェースに出力する。このように、演奏情報に基づ
いて生成した波形データを、第3のインターフェースを
介して入力された波形データと同期をとって混合した
後、第1のインターフェースを介してOSに与えること
により、波形データの生成の時間遅れが調整され、再生
タイミングを揃えられるようになる。
【0027】尚、この第4の観点の一実施態様として、
前記混合ステップでは、第3のインターフェースを介し
て入力された波形データを初期値として、前記生成ステ
ップで生成された波形データを該初期値に累算すること
によって波形データを混合することが望ましい。なぜな
ら、演奏情報に基づく波形データの生成タイミングは、
並行して実行中の他のソフトウェア如何によって変動す
るので、第3のインターフェースを介して入力された波
形データを、この演奏情報に基づく波形データの生成時
に混合することは困難である。そこで、第3のインター
フェースを介して入力された波形データをこのように波
形データの生成時よりも前に初期値として供給しておく
ことにより、演奏情報に基づく波形データの生成タイミ
ングに左右されずに、波形データを同期をとって混合す
ることができるようになるので、タイミングを揃えた波
形データの再生を安定して行なうことができるようにな
る。
【0028】
【発明の実施の形態】以下、添付図面を参照してこの発
明の実施の形態を詳細に説明しよう。図1は、この発明
の第1の観点に従う実施形態のソフトウェアシステム構
成例を概念的に示す図である。オペレーティングシステ
ム(OS)としては、例えば、Windows3.1又
はWindows95(共にマイクロソフト社の商標)
を使用する。このOSは、MIDIメッセージ(すなわ
ち波形データを生成する基となる演奏情報)を授受する
ための第1のインターフェースIF1として前述の“M
IDI API”を有しており、生成済みの波形データ
を授受するための第2のインターフェースIF2として
前述の“WAVE out API”を有している。
【0029】MIDIメッセージ(すなわち波形データ
を生成する基となる演奏情報)を発生するアプリケーシ
ョンソフトAPS1として、例えば“Directo
r”ソフトが適用されている。この“Directo
r”ソフトは、“Director files”を具
備しており、背景音楽(BGM)の演奏情報をMIDI
メッセージのフォームでリアルタイムに出力する。勿
論、アプリケーションソフトはこれに限らず、MIDI
メッセージ(すなわち波形データを生成する基となる演
奏情報)を発生するものであれば何でもよい。ソフトウ
ェア音源モジュールSSMは、MIDIメッセージ(す
なわち波形データを生成する基となる演奏情報)を受け
取るための専用のインターフェース(例えば前述の“S
GM MIDI out API”)を有しており、受
け取ったMIDIメッセージに基づき波形データを生成
する処理を行い、生成した波形データをOSレベルの前
記第2のインターフェースIF2(すなわち“WAVE
out API”)を介して出力するアプリケーション
レベルのソフトウェアである。このソフトウェア音源モ
ジュールの構成例は例えば図23に示したようであって
よい。
【0030】図1では、OSの前記第1のインターフェ
ースIF1(すなわち“MIDIAPI”)を介して与
えられるMIDIメッセージ(すなわち波形データを生
成する基となる演奏情報)を受け取り、受け取った該M
IDIメッセージを前記ソフトウェア音源モジュールS
SMに与えるようにプログラムされた擬似的ドライバと
して、フェイクMIDIドライバFMDが設けられる。
このフェイクMIDIドライバFMDは、オペレーティ
ングシステムにドライバとしてインストールされる。従
って、アプリケーションソフトAPS1から第1のイン
ターフェースIF1(“MIDI API”)を介して
与えられるMIDIメッセージが、フェイクMIDIド
ライバFMDによって受け取られ、この受け取られたM
IDIメッセージがソフトウェア音源モジュールSSM
に与えられる。
【0031】ソフトウェア音源モジュールSSMでは、
フェイクMIDIドライバFMDから与えられるMID
Iメッセージを自己のインターフェース(例えば“SG
MMIDI out API”)を介して受け取り、前
述の通り、受け取ったMIDIメッセージに基づき波形
データを生成する処理を行い、生成した波形データを第
2のインターフェースIF2(“WAVE out A
PI”)を介してOSに与える。こうして、自らがアプ
リケーションソフトでもあるソフトウェア音源モジュー
ルSSMが、別のアプリケーションソフトAPS1から
OSの“MIDI API”を介して与えられたMID
Iメッセージを入力し、これに基づき音波形データ生成
処理を行うことができる。従って、アプリケーションソ
フトであるソフトウェア音源モジュールSSMと別のア
プリケーションソフトAPS1とをOSレベルで簡単に
組み合わせることができる。
【0032】ソフトウェア音源モジュールSSMには、
従来と同様に、MIDIメッセージを出力する適宜のソ
フトウェアが専用に組み込まれていてもよい。例えば、
図1のアプリケーションソフト(例えばカラオケソフ
ト)APS2はそのような専用のMIDIメッセージ供
給ソフトの一例を示している。ソフトウェア音源モジュ
ールSSMでは、専属のアプリケーションソフトAPS
2から供給されるMIDIメッセージも自己のインター
フェース(例えば“SGM MIDI outAP
I”)を介して受け取り、前述の通り、受け取ったMI
DIメッセージに基づき波形データを生成する処理を行
い、生成した波形データを第2のインターフェースIF
2(“WAVE out API”)を介してOSに与
える。これによって、従来知られたようなソフトウェア
音源モジュールSSMに専用に組み込まれたソフトウェ
アAPS2と、OSを介して該ソフトウェア音源モジュ
ールSSMと組み合わされる別のソフトウェアAPS1
とによって、並行して、該ソフトウェア音源モジュール
SSMを利用することができるようになる。第2のイン
ターフェースIF2(“WAVE out API”)
を介してOSレベルで受け取られる生成済み波形データ
は、図22の従来例と同様に、出力デバイスOUDを介
して外部の装置例えばcodecハードウェア(すなわ
ちディジタル/アナログ変換器DAC)に出力される。
【0033】図2は、この発明の第2の観点に従う実施
形態のソフトウェアシステム構成例を概念的に示す図で
ある。ここでは、アプリケーションソフトであるソフト
ウェア音源モジュールSSMがオペレーティングシステ
ムにドライバとしてインストールされ、該ソフトウェア
音源モジュールSSMがOSの第1のインターフェース
IF1(“MIDIAPI”)を介して与えられるMI
DIメッセージを受け取るようにプログラムされる。従
って、アプリケーションソフトAPS1から第1のイン
ターフェースIF1(“MIDI API”)を介して
MIDIメッセージを、OSを介してソフトウェア音源
モジュールSSMに与えることができる。ソフトウェア
音源モジュールSSMでは、受け取ったMIDIメッセ
ージに基づく波形データ生成処理を実行し、生成した波
形データを第2のインターフェースIF2(“WAVE
out API”)を介してOSに与える。従って、こ
の場合も、自らがアプリケーションソフトでもあるソフ
トウェア音源モジュールSSMが、別のアプリケーショ
ンソフトAPS1からOSレベルで与えられるMIDI
メッセージを入力し、これに基づき音波形データ生成処
理を行うことができ、生成した波形データを第2のイン
ターフェースIF2(“WAVE out API”)
を介してOSレベルで出力することができる。
【0034】図25は、上記第4の観点に従う実施形態
のソフトウェアシステム構成例を概念的に示す図であ
る。このシステムでは、アプリケーションソフトAPS
1として、MIDIメッセージ以外に波形データをMI
DIメッセージと同期して発生するMultimedi
aソフトが適用されている。そして、OSは、“WAV
E out API”として、図2に示したインターフ
ェースIF2(“WAVE out API”)とは別
に、OSにドライバとしてインストールされたアプリケ
ーションソフトであるサウンドモジュールSGMが用意
したインターフェースIF3(図の左側の“WAVE
out API”)を有している。アプリケーションソ
フトAPS1から発生した波形データは、このサウンド
モジュールSGMが用意したインターフェースIF3で
授受される。
【0035】サウンドモジュールSGMはソフトウェア
音源モジュールSSMを内蔵しており、該ソフトウェア
音源モジュールSSMは、図2に示したシステムにおけ
るソフトウェア音源モジュールSSMと同様に、インタ
ーフェースIF1(“MIDI API”)を介して与
えられるMIDIメッセージを受け取るようにプログラ
ムされている。ソフトウェア音源モジュールSSMで
は、受け取ったMIDIメッセージに基づく波形データ
生成処理を実行する。
【0036】またサウンドモジュールSGMは、アプリ
ケーションソフトAPS1からインターフェースIF3
を介して与えられる波形データと、ソフトウェア音源モ
ジュールSSMが生成した波形データとの両者を受け取
り、受け取った波形データを累算した後、インターフェ
ースIF2に出力するようにプログラムされている。従
って、この場合も、自らがアプリケーションソフトでも
あるサウンドモジュールSGMが、別のアプリケーショ
ンソフトAPS1からOSレベルで与えられるMIDI
メッセージを入力して波形データ生成処理を行うととも
に、生成した波形データとアプリケーションソフトAP
S1からインターフェースIF3を介して与えられる波
形データとを累算した波形データを、インターフェース
IF2を介してOSレベルで出力することができる。
【0037】次に、この発明の第1の観点に従う実施形
態の詳細例を第3の観点に従う実施形態とあわせて説明
し、その後に、第2の観点に従う実施形態と、第4の観
点に従う実施形態とを説明することにする。図3は、こ
の発明に係るコンピュータソフトウェアを用いた音源シ
ステムの実施に使用するハードウェア構成例を示す全体
ブロック図である。この音源システムでは、メイン制御
部としてパーソナルコンピュータのCPU(中央処理
部)3を使用し、このCPU3の制御の下でソフトウェ
ア音源プログラムによる波形データ生成処理とその他の
プログラムの処理を並行して実行する。なお、以下では
「楽音生成処理」という用語も使用するが、これは「波
形データ生成処理」と実質的に同義であり、さらには
「波形データ生成処理」のみならずエフェクト等の各種
楽音処理を含んでいてよい。
【0038】CPU3には、MIDIのインターフェー
ス1,タイマ2,ROM(リードオンリーメモリ)4,
RAM(ランダムアクセスメモリ)5,マウス7,キー
ボード8,ディスプレイ9,ハードディスク装置10,
及びDMA(ダイレクトメモリアクセス)コントローラ
11が、データ及びアドレスバス6を介して接続されて
いる。DMAコントローラ11は、楽音生成処理の実行
によって生成されてRAM5内の出力バッファに書き込
まれた楽音データを、DAC(ディジタル/アナログ変
換器)12からの再生サンプリングクロックに同期して
1サンプルずつダイレクトメモリアクセス方式で出力バ
ッファから読み出してDAC12に送る処理(再生処
理)を実行するためのものである。DAC12でアナロ
グ変換された楽音データは、サウンドシステム13に送
られて、該システム13から音響的に発音される。
【0039】ハードディスク装置10内のハードディス
クには、OS(ここでは、マイクロソフト社製のWin
dows3.1(商標)を使用するものとする)やユー
ティリティソフトといったソフトウェアの他に、ソフト
音源を実現するためのソフトウェア(すなわち図1又は
図2のソフトウェア音源モジュールSSM)と、その他
のアプリケーションソフト(すなわち図1又は図2のA
PS1とAPS2)が記録されており、更に、複数種類
の音色についての1または複数周期分の波形データ群を
予め記憶した波形データメモリの領域を含んでいる。フ
ェイクMIDIドライバFMD等の各種プログラムをハ
ードディスク装置10に記憶してもよいし、あるいはR
AM5又はROM4に記憶してもよい。なお、以下の説
明では、ハードディスク装置10内の波形データメモリ
に予め記憶されている「波形データ」群と、ソフトウェ
ア音源モジュールSSMの処理によってMIDIメッセ
ージに対応してこの記憶波形データを利用して(読み出
して)生成する「波形データ」とを区別するために、ソ
フトウェア音源モジュールSSMの処理によって生成す
る順次サンプル点「波形データ」を「楽音データ」とい
うこともある。
【0040】ソフトウェア音源モジュールSSMの概略
構成は、図23と同様であってよい。すなわち、図23
において、「MIDI出力ドライバ部」は、「音源部」
を駆動するためのモジュールであり、MIDIメッセー
ジに応じて、ボイスデータを「音源部」制御用の制御パ
ラメータに変換する。この制御パラメータは、モジュー
ル間の所定のインターフェース(例えば“SGM en
gine API”)経由で「音源部」に送られる。ま
た、「MIDI出力ドライバ部」が初期化されるとき、
上記波形データメモリの所要のファイルから波形データ
群がロードされて適宜の「波形データ記憶部」に蓄えら
れる。「音源部」は、この制御パラメータに従い、「波
形データ記憶部」に蓄えられた波形データ群を利用して
(例えば所要のピッチで読み出して)、MIDIメッセ
ージに対応する所要のピッチや音色等の楽音特徴を具備
する楽音データを生成する。
【0041】図1及び図2に示された「出力デバイス」
は、OSレベルの前記第2のインターフェース(“WA
VE out API”)経由でソフトウェア音源モジュ
ールSSMから供給される楽音データをDAC12に送
るためのモジュールに相当する。前述のように、DMA
コントローラ11がダイレクトメモリアクセス方式で楽
音データをDAC12に送るようになっている。したが
って、「出力デバイス」は、CPU3の制御のもとで、
DMAコントローラ11による割込み処理として実行さ
れる。
【0042】次に、以下で詳細に説明しようとするCP
U3による起動制御に基づく、ソフトウェア音源モジュ
ールSSMによる楽音生成処理の一例の概要を、図4を
参照して説明する。アプリケーションソフトAPS1又
はAPS2のプログラムが起動すると、ソフトウェア音
源モジュールSSMにMIDIメッセージが供給されは
じめる。この供給は、前述の通り、図1のシステム構成
では、アプリケーションソフトAPS1の出力について
は第1のインターフェースIF1(“MIDI AP
I”)とフェイクMIDIドライバFMDを経由して、
アプリケーションソフトAPS2の出力については直接
的に、ソフトウェア音源モジュールSSMの入力インタ
ーフェース(“SGM MIDI out API”)
に対してなされる。ソフトウェア音源モジュールSSM
の入力インターフェース(“SGM MIDIout
API”)に対してMIDIメッセージが供給される
と、ソフトウェア音源モジュールSSMの「MIDI出
力ドライバ部」(図23)が起動され、各MIDIメッ
セージに応じてボイスデータを制御パラメータに変換
し、その制御パラメータ等を、当該MIDIメッセージ
に基づく発音を割り当てた発音チャンネル用の音源レジ
スタに格納する。換言すれば、これらの音源レジスタが
ソフトウェア音源モジュールSSMの入力インターフェ
ース(例えば“SGM MIDI out API”)
の一構成要素をなしている。
【0043】ソフトウェア音源モジュールSSMの「音
源部」(図23)は、CPU3の制御の下で、基本的に
は、所定の時間長の区間(フレームと呼ぶ)毎に設定さ
れる起動機会に応じて起動されて、それぞれその直前の
フレーム内に供給されたMIDIメッセージに基づく楽
音生成処理を、各制御パラメータに従って実行する(例
えば、図4に示すように、時刻T1からT2までのフレ
ーム内に供給されたMIDIメッセージに基づく楽音生
成処理を、時刻T2からT3までのフレームで実行す
る)。楽音生成処理の一例として、波形メモリ方式の楽
音生成処理では、まず、発音を割り当てられている各発
音チャンネル毎に、当該発音チャンネル用の音源レジス
タに格納された制御パラメータに従うピッチでRAM5
から波形データを読み出し、その波形データに、音色制
御(フィルタ演算)と、音量制御(音量エンベロープデ
ータの乗算)と、ピッチ,音色または音量等の変調制御
とを制御パラメータに従って施すことにより、当該発音
チャンネルについての所定数サンプル分の楽音データを
生成する。そして、各発音チャンネルについての楽音デ
ータを累算し、累算した楽音データを(あるいは、累算
した楽音データにエフェクトを付加し、その楽音データ
を)、RAM5内の出力バッファに書き込む。そして、
その出力バッファの再生を「出力デバイス」に予約す
る。この出力バッファの再生を「出力デバイス」に予約
することが、生成した楽音データをソフト音源SSMか
らOSレベルの第2のインターフェース(“WAVE
out API”)に出力することに相当する。
【0044】「出力デバイス」は、各フレーム毎に、そ
れぞれその直前のフレームで「音源部」によって再生予
約された出力バッファから1サンプルずつ楽音データを
読み出してDAC12に送る(例えば、図4に示すよう
に、時刻T2からT3までのフレームで生成された楽音
データを書き込まれて再生予約された出力バッファか
ら、時刻T3からT4までのフレームで楽音データを読
み出す)。
【0045】こうしたソフトウェアのうち、アプリケー
ションソフトAPS1及び/又はAPS2のプログラム
の起動と、MIDIメッセージの供給に基づく「MID
I出力ドライバ部」の起動とは、リアルタイムに行なわ
れる。また、「出力デバイス」は、DMAコントローラ
11による割込み処理として強制的に起動されるので、
時間的な遅れが生じることはない。これに対し、「音源
部」の起動は、CPU3自身の内部割込みによる起動命
令によって行なわれるので、完全なマルチタスク機能を
有しないOS上でこのソフトウェアを走らせた場合に
は、他の処理の影響によって「音源部」の起動が遅れる
ことにより、発音に支障が生じることがある。そこで、
この音源システムでは、次のような対策を講じることに
より、発音に支障が生じる事態を防止している。
【0046】〔対策1〕「音源部」を起動させる内部割
込み信号(すなわち起動命令)を発生するための機会
を、各フレーム内でそれぞれ複数回設定し(例えばタイ
マによって定期的に設定する)、ソフト音源で楽音生成
処理を実行してよい機会に対応して内部割込み信号(す
なわち起動命令)を実際に発生する。内部割込み信号
(すなわち起動命令)に基づく各起動毎に、それぞれ上
記所定数サンプル分(1出力バッファ分)の楽音データ
のうちの一部の楽音データを生成することにより、通算
として当該フレーム内に1出力バッファ分の楽音データ
が生成されるように調整を行なう。そして、いずれかの
機会で、内部割込み信号(すなわち起動命令)が発生し
なかったために「音源部」が起動せず、その結果楽音デ
ータが生成されなかった場合には、その未生成の楽音デ
ータを、当該フレーム内のその後の内部割込み信号が発
生した機会で併せて生成することにより、当該フレーム
内での1出力バッファ分の楽音データの生成が確保され
るように調整を行なう。
【0047】このように、「音源部」を起動させる内部
割込み信号(起動命令)を発生する機会を各フレーム毎
に複数回設け、この複数回の機会のうち何回か内部割込
み信号(起動命令)が発生しなくても、内部割込み信号
(起動命令)が発生した機会だけで、当該フレーム内に
1出力バッファ分の楽音データの生成を完了するように
したので、発音に支障が生じる事態が防止される。図5
及び図6は、それぞれこの〔対策1〕の一例を示す図で
ある。これらの例では、100ミリ秒の長さのフレーム
内に、「音源部」を起動する内部割込み信号を10ミリ
秒毎のタイミングで(したがって、1フレーム内に合計
10回)発生し、各起動毎に、それぞれ1出力バッファ
分の楽音データの10分の1の量の楽音データを生成す
るようにしている。
【0048】そして、図5の例では、内部割込み信号が
発生しなかったタイミングでの未生成の楽音データを、
その直後に内部割込み信号が発生した機会で全て生成す
るようにしている。すなわち、内部割込み信号が発生し
なかった2回目の機会(図の10ミリ秒目)で未生成と
なった楽音データを、その直後に内部割込み信号が発生
した3回目の機会(図の20ミリ秒目)での処理で、当
該機会での楽音データと併せて全て生成し(図では2,
3として示している)、内部割込み信号が発生しなかっ
た6,7回目の機会(図の50及び60ミリ秒目)で未
生成となった楽音データを、その直後に内部割込み信号
が発生した8回目の機会(図の70ミリ秒目)での処理
で、当該機会での楽音データと併せて全て生成している
(図では6〜8として示している)。この図5のような
処理方式は、未生成分がこれを直ちに一括して生成する
ので、楽音生成遅れが起こりにくい、という利点を持
つ。
【0049】これに対し、図6の例では、内部割込み信
号が発生しなかった機会での未生成の楽音データを、そ
の後に内部割込み信号が発生した複数の機会で分散して
生成するようにしている。すなわち、内部割込み信号が
発生しなかった2,3回目の機会(図の10,20ミリ
秒目)で未生成となった楽音データを、その後に内部割
込み信号が発生した4,5回目の機会(図の30及び4
0ミリ秒目)での処理で、それらの機会での楽音データ
と併せてそれぞれ分散して生成している(図ではそれぞ
れ2,3と4,5として示している)。但し、最後の1
0回目の機会(図の90ミリ秒目)では、当該フレーム
内での1出力バッファ分の楽音データの生成を確保する
ために、内部割込み信号が発生しなかった7,8,9回
目の機会(図の60,70,80ミリ秒目)で未生成と
なった楽音データを全て生成している。この図6のよう
な処理方式は、未生成量が多い場合に、これを適切に分
散した回数で処理するので、1回分の処理時間が多すぎ
ないように制御でき、CPUの有効活用に有利である。
【0050】図6では、未生成の楽音データを、1回の
起動の機会で生成する量の楽音データに分散してその後
に内部割込み信号が発生した機会で生成しているが、こ
れに限らず、未生成の楽音データを、適宜の量の楽音デ
ータ(例えば、1回の起動の機会で生成する量の楽音デ
ータや、1回の起動の機会で生成する量の1.5倍の楽
音データや、1回の起動の機会で生成する量の半分の楽
音データ)に分散してその後の機会で生成するようにし
てもよい。また、更に別の例として、内部割込み信号が
発生しなかった機会での未生成の楽音データを、当該フ
レーム内の最後の機会(図5及び図6では10回目の機
会)までに徐々に生成するようにしてもよい。
【0051】図16は、上記と同様に、〔対策1〕の一
例を示す図であるが、1回の内部割込み信号(起動命
令)に対応して生成される楽音データの量が、図5や図
6に示したように1出力バッファ分の楽音データの10
分の1の量の整数倍になるとは限らず、該単位に対する
端数を持った量になることがありうる例を示すものであ
る。この図16の例では、各内部割込み信号(起動命
令)に対応する時点において、その時点までに生成処理
すべき楽音データの未処理量の関数として、該時点の1
回の内部割込み信号(起動命令)に応じて生成すべき楽
音データ量を決定するようにしており、図16は、その
ようにして決定される楽音データの量の一例を内部割込
み信号の発生との関係で示す図である。同図では、或る
フレームにおいて内部割込み信号が発生した1回目の機
会(図の0ミリ秒目)に、当該フレームにおける1出力
バッファ分の楽音データの10分の1の量の楽音データ
を生成している。そして、内部割込み信号が発生しなか
った2及び3回目の機会(図の10及び20ミリ秒目)
の後、内部割込み信号が発生した4回目の機会(図の3
0ミリ秒目)に、未生成の楽音データのうち、1出力バ
ッファ分の楽音データの10分の1.6の量の楽音デー
タを生成している(したがってこの機会までに通算とし
て当該フレームにおける1出力バッファ分の楽音データ
の10分の2.6の量の楽音データを生成したことにな
り、図ではこのことを2.6と示している)。
【0052】続いて、内部割込み信号が発生した5回目
の機会(図の40ミリ秒目)に、1出力バッファ分の楽
音データの10分の1.5の量の楽音データを生成し
(したがってこの機会までに通算として1出力バッファ
分の楽音データの10分の4.1の量の楽音データを生
成したことになり、図ではこのことを4.1と示してい
る)、内部割込み信号が発生した6回目の機会(図の5
0ミリ秒目)に、1出力バッファ分の楽音データの10
分の1.4の量の楽音データを生成している(したがっ
てこの機会までに通算として1出力バッファ分の楽音デ
ータの10分の5.5の量の楽音データを生成したこと
になり、図ではこのことを5.5と示している)。そし
て、内部割込み信号が発生しなかった7及び8回目の機
会(図の60,70ミリ秒目)の後、内部割込み信号が
発生した9回目の機会(図の80ミリ秒目)に、1出力
バッファ分の楽音データの10分の1.7の量の楽音デ
ータを生成している(したがってこの機会までに通算と
して1出力バッファ分の楽音データの10分の7.2の
量の楽音データを生成したことになり、図ではこのこと
を7.2と示している)。続いて、内部割込み信号が発
生した10回目の機会(図の90ミリ秒目)に、1出力
バッファ分の楽音データの10分の1.6の量の楽音デ
ータを生成している(したがって1フレーム内に通算と
して当該フレームにおける1出力バッファ分の楽音デー
タの10分の8.8の量の楽音データを生成したことに
なり、図ではこのことを8.8と示している)。
【0053】そして次のフレームにおいて、内部割込み
信号が発生した1回目の機会(図の100ミリ秒目)
に、直前のフレームにおける残りの未生成の楽音データ
である1出力バッファ分の楽音データの10分の1.2
の量の楽音データと、今回のフレームにおける1出力バ
ッファ分の楽音データの10分の0.3の量の楽音デー
タとを生成している(図ではこのことを10.3と示し
ている)。この段階で、1出力バッファ分を超える楽音
データが生成されることになるので、そのうち1出力バ
ッファ分の楽音データ量に相当する10分の10の量の
楽音データについては、生成済みの楽音データ群から取
り出して「出力デバイス」に供給して再生予約するもの
とする。従って、生成中の楽音データとして、1出力バ
ッファ分の楽音データの10分の0.3の量の楽音デー
タが残されることになる。
【0054】続いて、内部割込み信号が発生した2回目
の機会(図の110ミリ秒目)に、今回のフレームにお
ける1出力バッファ分の楽音データの10分の1.4の
量の楽音データを生成し(したがってこの機会までに通
算として今回のフレームにおける1出力バッファ分の楽
音データの10分の1.7の量の楽音データを生成した
ことになり、図ではこのことを1.7と示している)、
以下同様にして、内部割込み信号が発生した機会毎に、
楽音データを生成していく。なお、追って詳しく説明す
る通り、決定された生成すべき楽音データ量が所定の上
限値SRmaxを超える場合は、該上限値SRmaxの
範囲内に収まるように制御される。
【0055】このように、図16の例では、ソフトタイ
マによる内部割込み信号が発生する毎に、それまでに未
生成となっている楽音データの量の関数として、楽音生
成処理に要する時間があまり長くならないような一定範
囲内で楽音データの生成量を決定し、その量だけ楽音デ
ータを生成する処理を実行する。内部割込み信号が発生
する毎にこうした処理が実行されることにより、未生成
の楽音データが徐々に生成されていくことになる。すな
わち、この方式は、内部割込み信号の発生を起動要因と
して楽音生成処理を実行する点では、図5,図6の例と
同じであるから、これらの例と同様の効果を期待するこ
とができる。他方、未生成の楽音データを一度に全て生
成せずに所定の関数に従って徐々に生成していく点で、
それらとは異なっており、その点で特有の効果を有す
る。すなわち、CPU3がソフトウェア音源モジュール
SSMによる楽音生成処理のために長時間連続して独占
されることはないので、CPU3において他のソフトウ
ェアのプログラムを並行して実行する場合や、ソフトウ
ェア音源モジュールSSMにおける優先度の低い他の処
理を行なう要求が生じた場合に、それらの処理に比較的
速やかに移行させることができるので、資源の効率的な
利用が図れる。
【0056】すなわち、例えば図5のような方式では、
未生成の楽音データの生成を最も早期に行なうことがで
きるという点では優れているが、内部割込み信号が何回
も連続して発生しなかったような場合には、その直後に
内部割込み信号が発生した機会での楽音データの生成量
が大きくなってしまう。このように生成量が大きくなる
と、一回の起動でソフトウェア音源モジュールSSMに
よる楽音生成処理を行なうためにCPU3が費やさなけ
ればならない時間が長くなり、したがってCPU3がソ
フトウェア音源モジュールSSMによる楽音生成処理の
実行のために長時間連続して独占されるようになるの
で、その実行中にソフトウェア音源モジュールSSMに
よる楽音生成処理よりも優先順位の低い処理の起動要因
が発生しても、CPU3がそれらの処理をなかなか実行
できなくなってしまうことがある。また、そのように1
回分の楽音データ生成量が大きくなると、演算可能時間
が残り少ない場合には、楽音データを生成可能な発音チ
ャンネル数が極端に減少してしまうことがある。これに
対して、図16のような方式を採用すれば、それらの問
題点を解決することができる。従って、以下で詳細に説
明する実施例では、図16のような方式に従って処理す
る例について説明することにする。
【0057】ところで、内部割込み信号が発生しなかっ
た機会が多くなると、その後の内部割込み信号が発生し
た機会で、楽音生成処理を割り当てられている全ての発
音チャンネルについて楽音データを生成しきれなくなる
場合がある。そこで、上記〔対策1〕において、そのよ
うな機会では、楽音データを生成する発音チャンネル数
を減少させることにより、楽音データの生成を確保する
ようにすることが望ましい。楽音データを生成する発音
チャンネル数を減少させなければならない頻度は、図5
の例の場合が最も高く、図6の例の場合や、未生成の楽
音データを当該フレーム内の最後の機会までに徐々に生
成する場合、あるいは図16の例の場合には、図5の例
の場合よりも低くなる(但し、未生成の楽音データの生
成を早期に行なうという観点からは、図5の例が最も望
ましい)。
【0058】〔対策2〕各発音チャンネル用の音源レジ
スタとして、発音チャンネルが未使用である際に割り当
てた楽音生成処理を制御するパラメータを格納するため
の第1の音源レジスタ(表の音源レジスタ)と、当該発
音チャンネル使用中となった際に割り当てた新たな楽音
生成処理を制御するパラメータを格納するための第2の
音源レジスタ(裏の音源レジスタ)とを設ける。そし
て、当該発音チャンネルで用いるべき音源レジスタとし
て、新たな楽音生成処理を開始すべきタイミングまで
は、表の音源レジスタを選択し、該タイミング以降は、
表の音源レジスタに替えて裏の音源レジスタを選択す
る。
【0059】これにより、現在使用中の発音チャンネル
に新たな楽音生成処理を割り当てた場合でも、表の音源
レジスタを用いて当該発音チャンネルでの現在の楽音生
成処理の実行を確保しつつ、当該発音チャンネルでの新
たな楽音生成処理を直ちに裏の音源レジスタに用意する
ことができる。したがって、楽音生成処理の用意の遅れ
を原因とする楽音データの生成の遅れを防止することが
できる。
【0060】〔対策3〕RAM5内に複数の出力バッフ
ァの領域を設けておき、「音源部」の起動に先行して、
そのうちの一部の出力バッファの再生を「出力デバイ
ス」に予約しておく。これにより、他の処理の影響によ
り、各フレームで起動すべき「音源部」が当該フレーム
内に起動しなくても、先行して再生予約した出力バッフ
ァの再生処理が全て完了するまでに「音源部」が起動し
て出力バッファの再生が予約されれば、楽音の再生に音
切れが生じなくなる。したがって、音切れを生じさせな
いための楽音生成処理の起動時間の遅れの許容範囲が拡
がる。
【0061】図7は、この〔対策3〕の一例を示す図で
ある。この例では、「音源部」の起動に先行して、4つ
の出力バッファの再生を「出力デバイス」に予約してい
る。そして、フレームF1の開始時には、それより前の
フレームで1出力バッファ分の再生処理が完了したこと
によって予約数が3になっているが、フレームF1の途
中に、1出力バッファ分の楽音データの生成が完了して
その出力バッファが再生予約されたために、予約数が4
に増えている。そして、フレームF1の終了時に、次の
1出力バッファ分の再生処理が完了したことによって予
約数が3に減るが、フレームF2の途中に、次の1出力
バッファ分の楽音データの生成が完了してその出力バッ
ファが再生予約されたために、予約数が4に増えてい
る。
【0062】そしてその後、「音源部」の起動の遅れに
より楽音データが生成されないために、フレームF4の
終了時には予約数が1に減っている。そして、フレーム
F5で、再生予約済の最後の出力バッファ(フレームF
2の途中に再生予約した出力バッファ)が読み出されて
いる(図では、この再生予約と読み出しとの関係を明ら
かにするために、フレームF2の途中に再生予約の発生
を太い矢印で示し、フレームF5を斜線で網かけしてい
る)が、フレームF5の途中に、1出力バッファ分の楽
音データの生成が完了してその出力バッファが再生予約
されたために、予約数が2に増えている。そしてその後
も、再生処理の完了と再生予約の発生とに応じて予約数
が増減している。
【0063】このように、各フレームで起動すべき「音
源部」が当該フレーム内に起動しなくても、先行して再
生予約した4つの出力バッファの再生処理が全て完了す
るまでに「音源部」が起動して出力バッファの再生が予
約されれば、楽音の再生に遅れが生じなくなる。尚、予
約数が4であるときにフレームの途中で次の1出力バッ
ファ分の楽音データの生成が完了した場合には、当該フ
レームでの再生処理の完了を待って出力バッファの再生
予約を行なうことにより、予約数が4を越えないように
するものとする。
【0064】この〔対策3〕を実施するためにRAM5
内に設けておくべき出力バッファの数は、「音源部」の
起動に先行して再生予約する出力バッファの数と、「音
源部」で生成を完了した楽音データを書き込むための1
つの出力バッファと、「音源部」で生成した楽音データ
の量が1出力バッファ分を越えた場合のための予備の出
力バッファとの合計(図7の例では、6つ)になる。尤
も、「音源部」において、生成した楽音データの量が1
出力バッファ分を越える場合には生成をストップするよ
うにすれば、予備の出力バッファは不要になる(したが
って、図7の例では、5つで足りるようになる)。
【0065】〔対策4〕所定時間内に「出力デバイス」
に出力バッファが再生予約されていない場合、そのタイ
ミングで生成完了しているはずの楽音データの生成を打
ち切り、そのタイミングで生成開始する楽音データから
生成動作を新たに開始する。これにより、再生予約が間
に合わず、一時的に楽音が乱れた場合でも、すぐに安定
した楽音生成動作に復帰し、ノイズを最小限に抑えるこ
とができる。例えば、前述の〔対策3〕の図7の例で
は、先行して「出力デバイス」に再生予約した出力バッ
ファの再生処理が全て完了するまでに、「音源部」で生
成を完了した楽音データを書き込んだ出力バッファが再
生予約されている。しかし、他の処理の影響により「音
源部」の起動が大幅に遅れた場合には、先行して再生予
約した出力バッファの再生処理が全て完了した区間内に
おいても、「音源部」で生成を完了した楽音データを書
き込んだ出力バッファがまだ再生予約されていないこと
(予約数が0になること)も起こりうる。そのような場
合でも、〔対策3〕及び〔対策4〕を併せて実施すれ
ば、予約数が0になった場合、そのタイミングで生成完
了しているはずの楽音データの生成が打ち切られ、「出
力デバイス」に出力バッファの再生の先行予約を再び行
なった後、そのタイミングで生成開始する楽音データか
ら生成動作が新たに開始する。
【0066】次に、以上のような対策の実施を含んだこ
のコンピュータソフトウェアを用いた音源システムの実
施例を、図8以下を参照して説明する。まず、始めに、
図1のシステム構成に対応する実施例(すなわち、フェ
イクMIDIドライバFMDを使用する例)について説
明する。図8は、CPU3によって実行されるソフトウ
ェア音源モジュールSSMのプログラムのメインルーチ
ンを示すフローチャートである。最初に、「初期設定」
(ステップS1)を実行する。「初期設定」では、図9
に示すように、最初に、各発音チャンネル用の音源レジ
スタ(〔対策2〕として説明したように、表の音源レジ
スタと裏の音源レジスタとが設けられている)内のデー
タと、RAM5のワークエリア(このワークエリア内に
は、〔対策3〕として説明したように、複数の出力バッ
ファの領域が含まれている)内のデータとを全てクリア
する(ステップS21)。続いて、ハードディスク装置
10内のハードディスクに記録されている波形データを
RAM5にロードする(ステップS22)。続いて、
「出力デバイス」を初期設定し(ステップS23)、
〔対策3〕として説明したように、「音源部」の起動に
先行して、データをクリアされた幾つか(ここでは、図
7の例と同じく4つとする)の出力バッファの再生を
「出力デバイス」に予約する(ステップS24)。続い
て、DAC12から再生サンプリングクロックを発生さ
せてDMAコントローラ11に与えることにより「出力
デバイス」を起動するとともに、「音源部」を起動する
内部割込み信号(起動命令)を発生するためのソフトタ
イマ(例えば、ハード的に構成したタイマをCPU3が
参照することによって内部割込み信号を発生するように
したもの)をスタートさせる(ステップS25)。
【0067】ソフトタイマは、この内部割込み信号(起
動命令)を、前記〔対策1〕として説明したように各フ
レーム毎にそれぞれ複数の機会で発生可能である(ここ
では、図5,図6,図16の例と同じく、100ミリ秒
の長さのフレーム内に、10ミリ秒毎に合計10回の機
会において発生することが可能であるものとする)。な
お、前述の通り、ソフトタイマによる内部割込み信号
(起動命令)は、各起動機会で(つまり10ミリ秒毎
に)必ず発生できるとは限らず、起動機会が到来して
も、CPU3がOSの処理や他のソフトウェアの処理に
占有されているときは、ソフトウェア音源モジュールS
SMに対する内部割込み信号(起動命令)をかけること
ができない。そのための起動命令発生手段の構成として
は、例えば、タイマ2で1回の起動機会に対応する所定
時間(例えば10ミリ秒)を計時する毎にフラグを立て
るようにし、CPU3がソフト音源の処理を実行しても
よい状態のとき、このフラグの有無をチェックするよう
にし、未処理のフラグが立っていれば内部割込み信号
(起動命令)を発生するようにすると共にそのフラグを
消去するようにする。従って、1回の起動機会に対応す
る所定時間(例えば10ミリ秒)の間に、CPU3がソ
フト音源の処理をする余裕がある場合は、1回の内部割
込み信号(起動命令)が発生される。しかし、1回の起
動機会に対応する所定時間(例えば10ミリ秒)の間
に、CPU3がソフト音源の処理をする余裕がない場合
は、フラグチェックに行かないので、内部割込み信号
(起動命令)が発生されることなく、所定時間が経過し
てしまい、次のフラグが立ってしまう。つまり、前のフ
ラグに対応して内部割込み信号(起動命令)が発生され
ることがない。こうして、内部割込み信号(起動命令)
は、図5,図6,図16に例示されるように、各起動機
会毎に必ず発生できるとは限らないものとなる。また、
上記から理解できるように、内部割込み信号(起動命
令)がいくつかの各起動機会で連続して発生される場合
でも、その発生時間間隔は正確な上記所定時間(例えば
10ミリ秒)とはならず、10ミリ秒の前後で適宜の変
動がある。すなわち、内部割込み信号(起動命令)の微
視的な発生タイミングはCPU3の処理状態(いつタイ
マフラグを見に行くか)に依存しているからである。
【0068】図8に戻り、初期設定を終えると、ディス
プレイ9に、処理の進行に応じた情報を表示したり、マ
ウス7を用いて各種の制御データを入力したりするため
のパネル(図示せず)を表示する(ステップS2)。
尚、「音源部」の起動に先行して「初期設定」(図9)
で出力バッファを「出力デバイス」に再生予約している
ので、「出力デバイス」では、この先行予約しした4つ
の出力バッファについての再生処理が完了してから、
「音源部」でその後に再生予約した出力バッファについ
ての再生処理を実行する。したがって、MIDIメッセ
ージが供給されてから楽音が再生されるまでの時間が、
この先行予約した出力バッファの数に等しい数のフレー
ム分(図7の例では4フレーム分)だけ長くなる(遅れ
る)ことになる。そこで、ディスプレイ9のパネルにM
IDIメッセージの供給に基づく表示を行なう際には、
表示のタイミングをこのフレーム分だけ後にずらすよう
にすることが望ましい。
【0069】ステップS2に続くステップS3では、下
記の各起動要因の発生をチェックする。 起動要因:「ソフトウェア音源モジュールのAPI」
(例えば“SGM MIDI out API”、以下
これを「ソフト音源API」という)を介してMIDI
メッセージが供給されたこと(すなわち、アプリケーシ
ョンソフトAPS1又はAPS2(図1参照)からMI
DIメッセージが供給されたこと)。 起動要因:ソフトタイマにより、「音源部」を起動す
る内部割込み信号(起動命令)が発生したこと。(この
発生タイミングは、上記のように、所定時間すなわち1
0ミリ秒毎に割り込みを入れることを目標としてはいる
が、必ずしもその通りに正確に発生されるものではな
い。) 起動要因:「出力デバイス」からの処理要求が検出さ
れたこと。 起動要因:その他の要求(パネルの入力イベントや、
キーボード8のコマンド入力イベント(メインルーチン
終了コマンドを除く)が検出されたこと。 起動要因:キーボード8のメインルーチン終了コマン
ドの入力イベントが検出されたこと。
【0070】続いて、上記起動要因のいずれかが発生し
たか否かを判断する(ステップS4)。ノーであれば、
ステップS3に戻り、いずれかの起動要因が発生するま
でステップS3及びS4の処理を繰り返す。そしていず
れかの起動要因が発生すると、ステップS4でイエスと
なってステップS5に進む。ステップS5では、どの起
動要因が発生したのかを判定する。以後、発生した起動
要因に応じた処理を行なう。
【0071】ここで、起動要因を起こさせる他のソフ
トウェアのプログラム例について図17及び図18を参
照して説明する。図17は、フェイクMIDIドライバ
FMD(図1)のプログラム例を示す。このフェイクM
IDIドライバFMD(図1)のプログラムは、アプリ
ケーションソフトAPS1(図1)からOSの第1のイ
ンターフェースIF1(すなわち“MIDI AP
I”)にMIDIメッセージが与えられたとき起動され
る。ここで、アプリケーションソフトAPS1(図1)
から出力されるMIDIメッセージは1乃至16チャン
ネルのMIDIチャンネル番号情報を含んでいるものと
する。ステップS220では、上記第1のインターフェ
ースIF1(すなわち“MIDI API”)に入力さ
れたMIDIメッセージのMIDIチャンネル番号情報
を17乃至36チャンネルに変換する処理を行なう。こ
れは、この例では、ソフトウェア音源を1乃至36チャ
ンネル構成(32パート構成)とし、そのうち1乃至1
6チャンネルを該ソフトウェア音源に専用のアプリケー
ションソフトAPS2(図1)に割当て、残りの17乃
至36チャンネルをフェイクMIDIドライバFMDを
介在させた別のアプリケーションソフトAPS1に割り
当てるようにしたためである。従って、ソフトウェア音
源をフェイクMIDIドライバFMDを介在させたアプ
リケーションソフトAPS1のみで利用する場合は、ス
テップS220の処理は不要である。ステップS221
では、上記第1のインターフェースIF1(すなわち
“MIDI API”)を介して受け取った、ステップ
S220でチャンネル番号変換処理済の、MIDIメッ
セージを「ソフト音源API」(ソフトウェア音源モジ
ュールSSMのAPI)に転送する処理を行なう。この
転送に応じて、ソフトウェア音源モジュールSSMで
は、上記起動要因が発生したと判断する。
【0072】図18は、ソフトウェア音源に専用のアプ
リケーションソフトAPS2(図1)におけるMIDI
イベント処理のプログラム例を示す。このMIDIイベ
ント処理は、該アプリケーションソフトAPS2の実行
中に、MIDIイベントが発生したとき実行される。す
なわち、ステップS230では、発生したMIDIイベ
ントに関するMIDIメッセージを、「ソフト音源AP
I」(ソフトウェア音源モジュールSSMのAPI)に
入力する処理を行なう。この入力に応じて、ソフトウェ
ア音源モジュールSSMでは、上記起動要因が発生し
たと判断する。このように、ソフトウェア音源に専属の
アプリケーションソフトAPS2と、OSレベルで該ソ
フトウェア音源に組み合わされるアプリケーションソフ
トAPS1、の2つのアプリケーションソフトからのM
IDIメッセージの供給に応じて、上記起動要因が発
生される。ソフトウェア音源では、1乃至36チャンネ
ルを上記のように使い分けて、2つのアプリケーション
ソフトに基づく楽音生成処理を並行して行なう。なお、
MIDIチャンネル番号の変換形態は、上記例に限ら
ず、他の形態でもよい。例えば、ソフトウェア音源の1
乃至36チャンネルのうち1乃至16チャンネルをフェ
イクMIDIドライバFMDを介在させた別のアプリケ
ーションソフトAPS1に割り当て、残りの17乃至3
6チャンネルを該ソフトウェア音源に専用のアプリケー
ションソフトAPS2(図1)に割り当てるようにして
もよく、その場合は、図17のステツプS220に示さ
れたようなチャンネル番号変換処理を図18のプログラ
ムで行うようにする。
【0073】図8に戻り、ステップS5において、起動
要因が発生したことが判定されると、ステップS6に
行き、MIDI処理を実行する。それから、ステップS
7に行き、所定の受信表示(例えば、どのMIDIチャ
ンネルについてのMIDIメッセージが供給されたかの
表示等)を、パネル上に行なう。そして、ステップS3
に戻り、ステップS3以下の処理を繰り返す。
【0074】ステップS6で実行するMIDI処理に
は、例えば、ノートオンに基づくノートオンイベント処
理や、ノートオフに基づくノートオフイベント処理等が
含まれる。図10は、ノートオンイベント処理の一例を
示すフローチャートである。最初に、ノートナンバ,ベ
ロシティ,ノートオンを入力したMIDIチャンネルを
受信するパートのパート番号,MIDIメッセージの入
力時刻を示す時間軸上でノートオンイベントが発生した
時刻を示すデータを、それぞれ所定のレジスタNN,V
EL,p,TMに格納する(ステップS31)。続い
て、当該ノートオンに基づく発音の割当て処理を行な
い、割り当てた発音チャンネルのチャンネル番号をレジ
スタiに格納する(ステップS32)。続いて、レジス
タp内のパート番号に対応して選択されている音色のボ
イスデータをRAM5から読み出し、そのボイスデータ
を、レジスタNN,VEL内のノートナンバ,ベロシテ
ィに応じて「音源部」制御用の制御パラメータ(ピッチ
を指定する周波数ナンバFNを含む)に変換する(図2
参照)(ステップS33)。
【0075】続いて、この制御パラメータを、ノートオ
ン及びレジスタTM内の発生時刻のデータとともに、レ
ジスタi内のチャンネル番号の発音チャンネル用の音源
レジスタに格納することにより、当該発生時刻に応じた
タイミングでのノートオンの予約を行なう(ステップS
34)。レジスタTM内の発生時刻のデータを音源レジ
スタに格納するのは、次のような理由による。ノートオ
ンイベントの発生時刻と、当該ノートオンイベントに基
づく楽音が再生される時刻とには、前述のように約4フ
レーム分の時間差がある(楽音の再生がそれだけ遅れ
る)。楽音生成処理(後述する「音源処理1」)は、そ
の時間差の範囲内の任意のタイミングで、対応する楽音
データを生成すればよい(つまり、その範囲内での処理
の遅れが許容されている)。したがって、ノートオンイ
ベントの発生時刻と異なる任意のタイミングで実行され
る楽音生成処理では、ノートオンイベントの発生時刻が
わかっていないと、対応する楽音データが生成できない
からである。
【0076】尚、ステップS34において、当該発音チ
ャンネルが使用中であれば、〔対策2〕として説明した
ように、当該発音チャンネル用の表の音源レジスタと裏
の音源レジスタとのうち、裏の音源レジスタに制御パラ
メータ等を格納する。これにより、表の音源レジスタを
用いて当該発音チャンネルでの現在の楽音生成処理の実
行を確保しつつ、当該発音チャンネルでの新たな楽音生
成処理を直ちに裏の音源レジスタに用意することができ
る。またこのように裏の音源レジスタに格納を行なった
場合には、表の音源レジスタ内の予約領域にも、レジス
タTM内の発生時刻に応じたタイミングでのダンプ(音
量エンベロープを急激に減少させる処理)の予約を行な
う。ステップS34に続くステップS35では、ノート
オンの発生時刻が遅い発音チャンネルの順に楽音生成演
算が行なわれるように、発音の割当て処理を行なった各
発音チャンネルの間での演算順序を決定する。(すなわ
ち、後着のノートオンに対応した発音チャンネルが、楽
音の生成において優先的に処理されるようになる)。そ
してリターンする。
【0077】図11は、ノートオフイベント処理の一例
を示すフローチャートである。最初に、ノートナンバ,
ノートオフを入力したMIDIチャンネルを受信するパ
ートに対応して選択されている音色,MIDIメッセー
ジの入力時刻を示す時間軸上でノートオフイベントが発
生した時刻を示すデータを、それぞれ所定のレジスタN
N,t,TMに格納する(ステップS41)。続いて、
レジスタt内の音色での発音を割り当てた発音チャンネ
ルを捜し、その発音チャンネルのチャンネル番号をレジ
スタiに格納する(ステップS42)。続いて、レジス
タi内のチャンネル番号の発音チャンネル用の表の音源
レジスタと裏の音源レジスタのうち、レジスタt内の音
色に対応するほうの音源レジスタ内の予約領域に、レジ
スタTM内の発生時刻に応じたタイミングでのノートオ
フの予約を行なう(ステップS43)。そしてリターン
する。
【0078】図8の説明に戻り、ステップS5において
起動要因が発生していることが判定されると、「音源
処理1」を実行し(ステップS8)、それから、所定の
状態表示(例えば、CPU3の演算能力や、生成した楽
音の音量レベル等の表示)を、パネル上に行なう(ステ
ップS9)。そしてステップS3に戻り、ステップS3
以下の処理を繰り返す。
【0079】「音源処理1」は、前述の「音源部」の一
部を成すものである。この「音源処理1」の詳細例は図
12に示されている。図12において、最初のステップ
S50では、MIDIメッセージの入力時刻を示す時間
軸上での現在の時刻GTから、その時間軸上でのMID
Iメッセージの入力時刻のうち当該MIDIメッセージ
に基づく楽音生成処理が終了しているものの最終の入力
時刻STを減じた時間を、遅れ量OR(現時点までに生
成すべき楽音データでありながら未生成である楽音デー
タの量を時間の長さで表わしたもの)として設定する。
続くステップS51では、生成量SR(今回の1起動で
生成すべき楽音データの目標サンプル数を時間の長さで
表現したもの)を、遅れ量ORの関数として決定する。
【0080】図19は、この関数の特性の一例を示す図
である。この例では、遅れ量ORが一定未満である場合
には、生成量SRは10ミリ秒(1出力バッファ分の楽
音データの10分の1に対応した時間)であるが、遅れ
量ORが一定以上になると、遅れ量ORが増加するにつ
れて、生成量SRが連続的に増加していく。そして、生
成量SRが、楽音生成処理に要する時間があまり長くな
らないような範囲内の一定の上限値SRmaxに達する
と、遅れ量ORがそれ以上増加しても、生成量SRは上
限値SRmaxを維持する。上限値SRmaxは、例え
ば20ミリ秒であってもよく、あるいはそれ以外の値で
あってもよい。図20は、この関数の特性の別の一例を
示す図である。この例では、遅れ量ORが一定未満であ
る場合には、生成量SRは10ミリ秒であるが、遅れ量
ORが一定以上になると、遅れ量ORが増加するにつれ
て、生成量SRが不連続に増加していく。そして、生成
量SRが、楽音生成処理に要する時間があまり長くなら
ないような範囲内の一定の上限値SRmaxに達する
と、遅れ量ORがそれ以上増加しても、生成量SRは上
限値SRmaxを維持する。
【0081】尚、このようにして決定される生成量SR
は、10ミリ秒を単位としてその整数倍の値のみをとる
のではなく、該単位に対する端数を持った値をとりう
る。したがって、一回の「音源処理1」の実行によって
生成される楽音データの量は、1出力バッファ分の楽音
データの10分の1の量の整数倍になるとは限らず、図
16に示したように、該単位に対する端数を持った量に
なることがありうる。すなわち、この図12の「音源処
理1」は、図16に示したような態様で、楽音生成処理
を行なうものである。従って、前述の通り、1フレーム
内の所定の起動機会において何回か内部割込み信号(起
動命令)が発生しなかったとしても、実際に内部割込み
信号(起動命令)が発生した機会だけで、当該フレーム
内で生成すべき1出力バッファ分の楽音データの生成を
効率的に行なうことができ、発音に支障が生じる事態を
防止することができると共に、他の処理を阻害するおそ
れが少なくなる。
【0082】ステップS51に続くステップS52で
は、「初期設定」で再生予約した出力バッファ以外の残
りの出力バッファのうちの1つの出力バッファ上に、時
刻STを先頭とした生成量SR分の楽音生成領域を設定
する。続くステップS53では、生成量SRの楽音デー
タを生成する発音チャンネル数を決定する。ここで、こ
の発音チャンネル数は、一例として、遅れ量ORの関数
として決定するようにしてよい。図21は、そのような
関数の特性の一例を示す図である。この例では、遅れ量
ORが一定未満である場合には、ノートオンイベント処
理(図10)で発音割当てを行なった発音チャンネル数
CHmaxが、そのまま楽音データを生成する発音チャ
ンネル数となるが、遅れ量ORが一定以上になると、遅
れ量ORが増加するにつれて、楽音データを生成する発
音チャンネル数がCHmaxよりも減少していく。この
ように、遅れ量ORが一定以上である場合には、発音チ
ャンネル数が減少することにより、楽音生成処理に要す
る時間が短縮されるようになる。
【0083】ステップS53に続くステップS54で
は、演算順序(ノートオンイベント処理のステップS3
5で決定したもの)が1位である発音チャンネルのチャ
ンネル番号をレジスタiに格納し、スタートポインタs
pで時刻STを指す。続いて、レジスタi内のチャンネ
ル番号の発音チャンネル用の表の音源レジスタの予約領
域を参照して、スタートポインタsp以降の生成量SR
分の楽音生成領域で、最初の予約(ピッチベンドの予
約,ノートオフの予約,ダンプの予約等)を検出する
(ステップS55)。続いて、予約が検出されたか否か
を判断する(ステップS56)。
【0084】イエスであれば、当該発音チャンネルにつ
いて、当該予約の時刻までの楽音生成処理を実行し、ス
タートポインタspを当該予約の時刻にまで進める(ス
テップS57)。この楽音生成処理では、前述のよう
に、音源レジスタに格納された制御パラメータに従うピ
ッチでRAM5から波形データを読み出し、その波形デ
ータに、音色制御(フィルタ演算)と、音量制御(音量
エンベロープデータの乗算)と、ピッチ,音色または音
量等の変調制御と、エフェクトの付加とを制御パラメー
タに従って施すことによって楽音データを生成する。そ
して、生成した楽音データを、それまでの出力バッファ
内のデータに累算する。
【0085】ステップS57に続くステップS58で
は、当該予約の内容を当該音源レジスタに格納すること
により、その予約内容を実行する。ここで、ノートオフ
の予約が検出された場合には、当該発音チャンネルの表
の音源レジスタにノートオフを書き込み、音量エンベロ
ープのリリーススラートを開始する。また、ダンプの予
約が検出された場合には、ダンプの実行の完了後(すな
わち、音量エンベロープのレベルが一定以下の低い値に
なった後)、〔対策2〕として示したように、当該発音
チャンネルで用いるべき音源レジスタとして、表の音源
レジスタに替えて裏の音源レジスタを選択する(尤も、
先に表の音源レジスタから裏の音源レジスタへの入替え
を行なった後で、表の音源レジスタについてダンプを実
行してもよい)。尚、図10のステップS34で説明し
たように、裏の音源レジスタに制御パラメータ,ノート
オン及びレジスタTM内のノートオンの発生時刻のデー
タを格納する場合には、表の音源レジスタの予約領域
に、レジスタTM内の発生時刻に応じたタイミングでの
ダンプの予約がされる。したがって、楽音生成処理にお
いて、このレジスタTM内の発生時刻に応じたタイミン
グが来ると、ダンプが実行された後、表の音源レジスタ
に替えて裏の音源レジスタを用いた楽音生成処理が開始
されることになる。
【0086】ステップS58を終了すると、ステップS
55に戻り、ステップS55以下の処理を繰り返す。他
方、ステップS56でノーと判断されれば(あるいは、
最初はイエスと判断されたがその後ステップS57及び
S58を経由することによりノーと判断されるようにな
れば)、当該発音チャンネルについて、スタートポイン
タsp以降の生成量SR分の楽音生成領域の楽音生成処
理を全て実行する(ステップS59)。これにより、ス
テップS52で出力バッファ上に設定した生成量SR分
の楽音生成領域への当該発音チャンネルの楽音データの
書き込みが完了する。
【0087】続いて、ステップS53で決定した数の発
音チャンネルについての楽音生成処理が全て実行された
か否かを判断する(ステップS60)。ノーであれば、
演算順序が次順位である発音チャンネルのチャンネル番
号をレジスタiに格納し、スタートポインタspを時刻
STに設定する(ステップS61)。そしてステップS
55に戻り、ステップS55以下の処理を繰り返す。こ
れにより、発音チャンネル毎に生成された楽音データ
が、順次出力バッファ上の生成量SR分の楽音生成領域
に累算されていく。他方、ステップS60でイエスと判
断されれば(あるいは、最初はノーと判断されたが、そ
の後ステップS55以下を繰り返すことによりイエスと
判断されるようになれば)、楽音生成処理を終了する。
これにより、ステップS62に示すように、各発音チャ
ンネルについての楽音データを累算した楽音データ(あ
るいはその楽音データに適宜のエフェクトを付加したも
の)が、出力バッファ上の生成量SR分の楽音生成領域
に書き込まれたことになる。またこのようにして、生成
可能な発音チャンネル数が発音の割当て処理を行なった
発音チャンネル数未満である場合には、演算順序の遅い
発音チャンネルについての楽音生成処理が省略されると
いう形で、同時発音チャンネル数が減少することにな
る。
【0088】ステップS62に続くステップS63で
は、時刻STに生成量SRの長さを加えた時刻を、新た
な時刻STとして設定する。この新たな時刻STは、次
に「音源処理1」を実行する際の演算スタート位置にな
る。続くステップS264では、今回ノートオフのあっ
た発音チャンネルについての音量エンベロープの大きさ
を、徐々にゼロに向けて下げる。続いて、1出力バッフ
ァ分の楽音データが完成したか否かを判断する(ステッ
プS65)。ノーであればリターンする。他方イエスに
なると、その出力バッファを、後述の「音源処理2」に
よって当該出力バッファに連結されている他の出力バッ
ファから切り離して、「出力デバイス」に再生予約する
(ステップS66)。そしてリターンする。図1,図2
との対応を示すと、このステツプS66の処理は、ソフ
ト音源SSMで生成した楽音データを、OSの第2のイ
ンターフェースIF2(“WAVE out AP
I”)に対して出力することに相当している。
【0089】なお、ステップS50及びS51の別の例
として、「GT−ST」の結果をそのままSRとして設
定することも可能である。その場合は、前記〔対策1〕
における図5の例のように、いずれかの機会で内部割込
み信号が発生しなかったために「音源部」が起動しなか
った場合に、その機会での未生成の楽音データを、その
直後に内部割込み信号が発生した機会で全て生成するよ
うになる。これによっても、1フレーム内に何回か内部
割込み信号が発生しなくても、内部割込み信号が発生し
た機会だけで、当該フレーム内に1出力バッファ分の楽
音データの生成が完了するので、発音に支障が生じる事
態が防止される。また、内部割込み信号が発生しなかっ
た機会での未生成の楽音データを、図6の例のようにそ
の後に内部割込み信号が発生した複数の機会で分散して
生成するようにしたり、あるいは当該フレーム内の最後
の機会までに徐々に生成するようにしてもよいことは、
前記〔対策1〕において述べたとおりである。
【0090】また、ステップS53における発音チャン
ネル数の決定法の別の例として、次のようにしてもよ
い。まず、1つの発音チャンネルで生成量SR分の楽音
データを生成するのに要する演算時間と、今回の演算可
能時間EJ(次に内部割込み信号が発生する予定の時刻
である演算終了時刻SJから、今回内部割込み信号が実
際に発生した時刻である演算開始時刻KJを減じた時
間)とに基づき、時間EJ内に幾つの発音チャンネルで
生成量SR分の楽音データの生成が可能かを算出する。
そして、算出した生成可能な発音チャンネル数が、ノー
トオンイベント処理(図10)で発音割当てを行なった
発音チャンネル数以上であれば、当該発音割当てを行な
った発音チャンネル数を、そのまま楽音データを生成す
る発音チャンネル数として決定する。他方、算出した生
成可能な発音チャンネル数が、発音割当てを行なった発
音チャンネル数未満であれば、当該生成可能な発音チャ
ンネル数を、楽音データを生成する発音チャンネル数と
して決定する(すなわち、〔対策1〕として説明したよ
うに、楽音データを生成する発音チャンネル数を減少さ
せることにより、1フレーム内に1出力バッファ分の楽
音データの生成を確保する)。
【0091】図8の説明に戻り、ステップS5において
起動要因が発生していることが判定されると、「音源
処理2」を実行し(ステップS10)、所定の状態表示
をパネル上に行なう(ステップS11)。そしてステッ
プS3に戻り、ステップS3以下の処理を繰り返す。
「音源処理2」も、「音源部」の一部を成すものであ
る。この「音源処理2」は、「出力デバイス」(すなわ
ちDMAコントローラ11による外部割込み処理)の実
行によって発生する要求に基づいて実行される。図1,
図2との対応を示すと、この「音源処理2」は、ソフト
音源SSMから第2のインターフェースIF2(“WA
VE out API”)への楽音データの授受に関連
する処理に対応している。
【0092】図13は、DMAコントローラ11による
外部割込み処理の一例を示すフローチャートである。こ
の外部割込み処理は、DAC12に楽音データを1サン
プル分ずつ送るタイミング(DAC12の再生サンプリ
ング周期)で、DMAコントローラ11が実行するもの
であり、この処理によって、出力バッファに記憶された
1フレーム分の楽音データが、再生サンプリング周期毎
に1サンプル分ずつ読み出されてDAC12に供給され
る。これは、図1,図2における「出力デバイス」の処
理に相当する。すなわち、OSのドライバである「出力
デバイス」によって、第2のインターフェースIF2
(“WAVE out API”)に対してソフト音源
SSMから与えられた楽音データを受け取り、これを外
部のハードウェアつまりDAC12に出力する処理に対
応している。最初に、「初期処理」(図9)または「音
源処理1」(図12)によって「出力デバイス」に再生
予約された出力バッファのうちの現在読出し中の出力バ
ッファ(ポインタPBで指した出力バッファ)内の現在
読出し中の1サンプル分の楽音データ(ポインタppで
指した楽音データ)を、DAC12に送る(ステップS
71)。続いて、ポインタppを1サンプル分進め(ス
テップS72)、当該出力バッファ内の全ての楽音デー
タをDAC12に送り終えたか(すなわち当該出力バッ
ファについての再生処理を完了したか)否かを判断する
(ステップS73)。ノーであればリターンする。
【0093】他方、ステップS73でイエスと判断され
れば、次の出力バッファの再生予約があるか否かを判断
する(ステップS74)。これは、第2のインターフェ
ースIF2(“WAVE out API”)に対して
OSを介して「出力デバイス」からアクセスする処理、
つまりOSを介在させた処理に相当する。他の何らかの
処理の影響により「音源部」の起動が遅れているため
に、「音源部」で生成を完了した楽音データを書き込ん
だ出力バッファが未だ再生予約されていない場合であっ
ても、既に再生予約されている出力バッファ(「初期設
定」(図9)で先行して再生予約した出力バッファや、
音源処理1で既に再生予約している出力バッファ)があ
れば、その再生処理が全て完了するまでは、ステップS
74でイエスと判断されてステップS75に進み、その
出力バッファにポインタPBを進める。これにより、
〔対策3〕として説明したように、楽音生成処理の遅れ
による音切れを防ぐための楽音生成処理の起動時間の許
容範囲が拡がることになる。ステップS75に続くステ
ップS76では、再生処理を完了した出力バッファを、
「音源処理2」のルーチンに返却する要求を発生する。
そしてリターンする。
【0094】他方、「音源部」の起動が大幅に遅れてい
るために、既に再生予約している出力バッファの再生処
理を全て完了した区間内においても、「音源部」で生成
を完了した楽音データを書き込んだ出力バッファがまだ
再生予約されていない場合には、ステップS74でノー
と判断されてステップS77に進む。ステップS77で
は、ノイズ音の発生を防止するためにDAC12の出力
をミュートする。続いてステップS78では、「音源処
理2」に対してリセット要求(楽音生成処理のリセット
を要求するもの)を発生する。そしてリターンする。
【0095】図14は、「出力デバイス」からの返却要
求(図13のステップS76)に基づく「音源処理2」
の一例を示すフローチャートである。最初に、「出力デ
バイス」から返却された出力バッファを受け取る(ステ
ップS81)。続いて、その出力バッファをクリアし
て、「音源部」が既に保有している出力バッファの後に
その出力バッファを連結する(ステップS82)。尚、
この連結とは、出力バッファ同士を仮想的に順番につな
げて大きな1つのバッファとして扱うことである。した
がって、RAM5内で物理的に相互に隣接した領域にそ
れらの出力バッファを存在させることは必要ではない。
ステップS82に続くステップS83では、「音源部」
と「出力デバイス」との間での時刻のずれの有無を確認
して「音源部」の動作を補正するために、「出力デバイ
ス」からの返却要求のタイミングを示すデータを作成す
る。そしてリターンする。
【0096】図15は、「出力デバイス」からのリセッ
ト要求(図13のステップS78)に基づく「音源処理
2」の一例を示すフローチャートである。最初に、各発
音チャンネル用の音源レジスタ内のデータと、RAM5
の出力バッファ内のデータとを全てクリアする(ステッ
プS91)。続いて、「初期設定」(図9)のステップ
S23乃至S25と同じく、「出力デバイス」を初期設
定し(ステップS92)、データをクリアされた4つの
出力バッファの再生を再び「出力デバイス」に予約し
(ステップS93)、「出力デバイス」を起動するとと
もに、ソフトタイマをスタートさせる(ステップS9
4)。そしてリターンする。
【0097】このように、リセット要求に基づく「音源
処理2」では、「出力デバイス」に出力バッファが再生
予約されていない場合には、〔対策4〕として説明した
ように、それまでに「音源部」で実行していた楽音生成
処理を打ち切り、クリアされた出力バッファの再生の先
行予約を「出力デバイス」に再び行なった後、それ以降
に供給されるMIDIメッセージに基づいて「音源部」
を起動することにより、楽音生成処理を新たに開始して
いる。これにより、再生予約が間に合わず、一時的に楽
音が乱れた場合でも、すぐに安定した楽音生成動作に復
帰するので、ノイズを最小限に抑えることができる。
【0098】図8のステップS5に戻って、起動要因
が発生していると判定されると、その要求に応じた処理
(例えば、ディスプレイ9上のパネルの入力イベント処
理や、キーボード8からのコマンド入力イベント処理
等)を実行し(ステップS12)、それに応じた表示を
パネル上に行なう(ステップS13)。そしてステップ
S3に戻り、ステップS3以下の処理を繰り返す。他
方、起動要因が発生していると判定されると、メイン
ルーチンを終了させるための所定の処理を実行し(ステ
ップS14)、ディスプレイ9からパネルを消去する
(ステップS15)。そしてリターンする。
【0099】尚、ステップS5において、起動要因乃
至のうちの2以上の起動要因が同時的に発生している
と判断された場合には、起動要因が最優先,起動要因
とがその次の優先順位,起動要因が更にその次の
優先順位,起動要因が最下位の優先順位、で該優先順
位に従って処理されるものとする。起動要因との間
には特段の優先順位を付けず、対等とする。また、ステ
ップS3乃至ステップS5は、擬似マルチタスク処理に
おけるタスク管理を仮想的に示したものであり、実際に
は、いずれかの起動要因の発生に基づいて処理を実行し
ている途中で、それよりも優先順位の高い起動要因が発
生したことにより、割込みで別の処理を実行すること
(例えば、起動要因の発生に基づいて「音源処理1」
を実行している途中で、起動要因が発生したことによ
り、割込みで「MIDI処理」を実行すること等)があ
る。ところで、例えば、起動要因の発生に基づいて
「音源処理1」を実行している途中で、それよりも優先
順位の低い起動要因又はが発生された場合、これら
の起動要因又はについての起動は、起動要因の発
生に基づく1回の「音源処理1」が終了するまで待たな
ければならない。しかし、図19又は図20に示すよう
な適切な関数に従って1回の起動に対応する生成量SR
を遅れ量ORの関数として適切に決定するようにしたこ
とにより、遅れ量ORが多い場合でも、起動要因の発
生に基づく1回の「音源処理1」が過度に処理時間を占
有することかなくなるので、優先順位の低い起動要因に
対応する処理を阻害する確率が低くなり、有効である。
【0100】次に、図2のシステム構成に対応する実施
形態について説明する。図2のシステム構成を採用する
場合でも、ソフトウェア音源モジュールSSMにおける
プログラムは、図8〜図15と同様の内容からなってい
てよい。また、図16,図19〜図21に従う説明も、
同様に適用可能である。勿論、図17と図18は適用さ
れない。ただし、図2のシステム構成を採用する場合に
は、図8のステップS3における起動要因のチェックの
仕方が上述例とは異なる。すなわち、図2のシステム構
成を採用する場合には、図8のステップS3において、
下記の各起動要因の発生をチェックする。 起動要因:「MIDI API」を介してMIDIメ
ッセージが供給されたこと(すなわち、アプリケーショ
ンソフトAPS1(図2参照)からMIDIメッセージ
が供給されたこと) 起動要因:ソフトタイマにより、「音源部」を起動す
る内部割込み信号が発生したこと 起動要因:「出力デバイス」からの処理要求が検出さ
れたこと 起動要因:その他の要求(パネルの入力イベントや、
キーボード8のコマンド入力イベント(メインルーチン
終了コマンドを除く)が検出されたこと 起動要因:キーボード8のメインルーチン終了コマン
ドの入力イベントが検出されたこと 上記起動要因のうち、起動要因が、図1のシステム構
成を採用する場合の前述した起動要因と相違してお
り、他の起動要因〜は同じである。
【0101】前述の通り、図2のシステム構成を採用す
る場合においては、ソフトウェア音源モジュールSSM
はOSにインストールされる。そして、図8のステップ
S3でチェックする起動要因として、「OSの第1の
インターフェースIF1(つまり“MIDI AP
I”)を介してMIDIメッセージが供給されたこと」
をチェックするようにプログラムされる。これによっ
て、アプリケーションソフトであるソフトウェア音源モ
ジュールSSMがOS上でドライバとしてふるまい、他
のアプリケーションソフトAPS1から第1のインター
フェースIF1(つまり“MIDI API”)を介し
て与えられるMIDIメッセージを受け取る。ソフトウ
ェア音源モジュールSSMでは、前述と同様に、内部割
込み信号(起動命令)の発生に基づいて楽音生成処理が
起動されるこに応じて、この受け取ったMIDIメッセ
ージに基づく楽音データの生成処理を行なう。そして、
生成された楽音データは、前述の通り、フレーム単位で
OSの前記第2のインターフェースIF2(つまり“W
AVE out API”)を介して出力される。
【0102】次に、図25のシステム構成に対応する実
施形態について説明する。図26は、図25のシステム
構成を採用する場合にCPU3によって実行されるサウ
ンドモジュールSGM−MMのプログラムのメインルー
チンを示すフローチャートである。このメインルーチン
では、図8のステップS1及びS2と同様の処理内容の
ステップS301及びS302を実行した後、続くステ
ップS303において、下記の各起動要因の発生をチェ
ックする。 起動要因:アプリケーションソフトAPS1(図2
5)から発生したMIDIメッセージをインターフェー
ス1F1(“MIDI API”)(図25)を介して
受信したこと 起動要因:ソフトタイマにより、「音源部」を起動す
る内部割込み信号が発生したこと 起動要因:「出力デバイス」からの処理要求が検出さ
れたこと 起動要因:アプリケーションソフトAPS1から発生
した波形データをインターフェース1F3(図25)を
介して受信したこと 起動要因:その他の要求(パネルの入力イベントや、
キーボード8のコマンド入力イベント(メインルーチン
終了コマンドを除く)が検出されたこと 起動要因:キーボード8のメインルーチン終了コマン
ドの入力イベントが検出されたこと 上記起動要因のうち、起動要因が、図25のシステム
構成を採用する場合に新たに加わった起動要因であり、
他の起動要因,,,,は、図2のシステム構
成を採用する場合に図8のステップS3でチェックする
起動要因,,,,とそれぞれ同じである。
【0103】ここで、起動要因を起こさせるアプリケ
ーションソフトAPS1のプログラムの一例を図27に
示す。このプログラムは、再生中のマルチメディアデー
タのイベントタイミングで起動し、最初のステップS4
01で、そのイベントが、波形データの発生イベントで
あるか、MIDIメッセージの発生イベントであるか、
その他の種類の情報の発生イベントであるかを判断す
る。波形データの発生イベントであれば、ステップS4
01に進み、発生した波形データをインターフェース1
F3(図25)に出力する。これにより、起動要因が
発生することになる。他方、MIDIメッセージの発生
イベントであれば、ステップS402に進み、発生した
波形データをインターフェース1F1(“MIDI A
PI”)(図25)に出力する。他方、その他の種類の
情報(例えば画像データ等)の発生イベントであれば、
ステップS403に進み、当該種類に対応してOSが有
するAPIに、その情報を出力する。
【0104】図26に戻り、ステップS304以下で
は、起動要因の発生に基づくステップS312の「W
AVE処理」及びそれに基づくS313の状態表示が追
加されている点が図8と異なっており、またステップS
310の「音源2処理」の一部の内容と図8のステップ
S10と異なっているが、その他は図8のステップS4
以下と同じである。尚、ステップS305において、起
動要因乃至のうちの2以上の起動要因が同時的に発
生していると判断された場合には、起動要因が最優先
であり、起動要因乃至の間では、起動要因,,
,,の順に優先順位が高くなっている。
【0105】図28は、起動要因の発生に基づく「W
AVE処理」の一例を示す図である。この処理では、最
初のステップS501で、アプリケーションソフトAP
S1からインターフェース1F1(“MIDI AP
I”)(図25)を介してノートオンを受信してから、
当該ノートオンに基づいて「音源1処理」で生成された
楽音データが再生されるまでの時間Δt(この時間Δt
内で「音源1処理」での楽音生成の遅れが許容されてお
り、図7の例ではこの遅れ許容時間は約4フレーム分の
時間である)を、現在の時刻に加算してRAM5内の所
定のレジスタWTに書き込む。
【0106】続くステップS502では、アプリケーシ
ョンソフトAPS1からインターフェース1F3(図2
5)を介して与えられた波形データを、レジスタWT内
の時刻データとともにRAM5内の所定のウェーブバッ
ファWBに書き込む。続くステップS503では、RA
M5内の所定のフラグWPF(出力バッファへの波形デ
ータの書込み中は1とし、書込み中でないときは0とす
るるフラグ)の値が1であるか否かを判断する。イエス
であれば、そのままリターンする。他方ノーであれば、
ステップS504に進み、現在保有している出力バッフ
ァが再生されることになる時刻範囲の中に、レジスタW
T内の時刻が含まれているか否かを判断する。イエスで
あれば、ステップS505に進み、現在保有している出
力バッファの、レジスタWT内の時刻以降の再生時刻に
対応する領域に、ウェーブバッファWB内の波形データ
を書き込む。尚、一度の波形データ受信イベントに基づ
いて「WAVE処理」でウェーブバッファWBに書き込
まれる波形データ量は1出力バッファ分のデータ量より
もかなり多い(一例として再生時間にして約5秒分の量
である)ので、このステップS505では、ウェーブバ
ッファWB内の波形データのうちの先頭部分の一部の波
形データが出力バッファに書き込まれる。そしてステッ
プS506に進んでフラグWPFの値を1に切り換えた
後、リターンする。他方、ステップS504でノーと判
断されれば、そのままリターンする。
【0107】図29は、「出力デバイス」からの返却要
求(図13のステップS76)に基づく「音源処理2」
の一例を示すフローチャートである。この処理では、図
14のステップS81乃至S83と同様の処理内容のス
テップS601乃至S603を実行した後、続くステッ
プS604で、フラグWPFの値が1であるか否かを判
断する。
【0108】ノーであれば(すなわち出力バッファへの
波形データへの書込み中でなければ)、ステップS60
5に進み、ステップS601で受け取った出力バッファ
が次に再生されることになる時刻範囲をチェックする。
続くステップS606では、当該再生時刻の範囲内に、
「WAVE処理」でレジスタWTに書き込んだ時刻が含
まれているか否かを判断する。ノーであれば、ステップ
S607に進んで当該出力バッファに書き込まれている
波形データを全てクリアした後、リターンする。他方イ
エスであれば、ステップS608に進み、当該出力バッ
ファに書き込まれている波形データのうち、レジスタW
T内の時刻に対応する領域までの波形データをクリアす
る。続くステップS609では、当該出力バッファの、
レジスタWT内の時刻以降の再生時刻に対応する領域
に、ウェーブバッファWB内の波形データのうちの先頭
部分の一部の波形データを書き込む。そしてステップS
610に進んでフラグWPFの値を1に切り換えた後、
リターンする。
【0109】これに対し、ステップS604でイエスと
判断された場合(すなわち出力バッファへの波形データ
の書込み中の場合)には、ステップS611に進み、ス
テップS601で受け取った出力バッファの再生時刻に
対応するウェーブバッファWB内の波形データ(それま
でに出力バッファに書き込んだ波形データに続く一部の
波形データ)を、当該出力バッファに書き込む。続くス
テップS612では、当該出力バッファの記憶領域の途
中で書込みが終了したか否かを判断する。ノーであれ
ば、そのままリターンする。他方イエスであれば、ステ
ップS613に進み、その次の波形データ受信イベント
に基づく波形データがウェーブバッファWBに書き込ま
れているか否かを判断する。
【0110】ノーであれば、ステップS614に進み、
当該出力バッファに書き込まれている波形データのう
ち、ステップS611で書き込みを終了した領域以降の
領域の波形データをクリアする。そしてステップS61
5に進んでフラグWPFの値を0に切り換えた後、リタ
ーンする。他方ステップS613でイエスと判断された
場合には、ステップS616に進み、上記次の波形デー
タ受信イベントに基づいて波形データと共にウェーブバ
ッファWBに書き込まれたレジスタWT内の時刻が、当
該出力バッファの再生時刻よりもまだ先の時刻なのか、
その再生時刻の範囲内に含まれているのか、あるいはそ
の再生時刻よりも前の時刻(すなわち既に経過してしま
っている時刻)なのかを判断する。
【0111】まだ先の時刻であれば、前述のステップS
614に進み、ステップS614及びS615の処理を
実行する。他方、当該出力バッファの再生時刻の範囲内
であれば、ステップS617に進み、当該出力バッファ
に書き込まれている波形データのうち、レジスタWT内
の時刻に対応する領域までの波形データをクリアする。
続くステップS618では、当該出力バッファの、レジ
スタWT内の時刻以降の再生時刻に対応する領域に、上
記次の波形データ受信イベントに基づいてウェーブバッ
ファWBに書き込まれた波形データのうちの先頭部分の
一部の波形データを書き込む。そしてリターンする。他
方、既に経過してしまっている時刻であれば、ステップ
S619に進み、ステップS611で書き込みを終了し
た領域に続く領域に、上記次の波形データ受信イベント
に基づいてウェーブバッファWBに書き込まれた波形デ
ータのうちの先頭部分の一部の波形データを書き込む。
そしてリターンする。
【0112】こうした「音源処理2」を実行することに
より、「音源1処理」において生成した波形データが出
力バッファに書き込まれる前に、アプリケーションソフ
トAPS1から供給された波形データが、「音源1処
理」における波形生成処理の許容遅れ時間を考慮した出
力バッファ中の領域に初期値として書き込まれる。そし
て、その後図12に示したのと同じ「音源1処理」にお
いて、各チャンネル毎に生成された波形データがこの初
期値に順次累算されていく。これにより、「音源1処
理」における波形データの生成タイミングに左右されず
に、波形データが同期をとって混合されるようになる。
【0113】図30は、「出力デバイス」からのリセッ
ト要求(図13のステップS78)に基づく「音源処理
2」の一例を示すフローチャートである。この処理で
は、最初のステップS701において、音源レジスタ及
び出力バッファ内のデータを全てクリアすると共に、ウ
ェーブバッファWB内のデータも全てクリアする。すな
わち、それまでの波形データ受信イベントに基づいて
「WAVE処理」でウェーブバッファWBに書き込んだ
波形データ及び時刻データを全てキャンセルして、新た
に受信する波形データから再生を開始するようにする。
そして、続くステップS702乃至704で、図15の
ステップS92乃至S94と同じ処理内容を実行した
後、リターンする。
【0114】尚、アプリケーションソフトAPS1から
供給された波形データを出力バッファ中の領域に初期値
として書き込む処理は、必ずしも図29の例のように
「出力デバイス」からの返却要求に基づく「音源処理
2」の一部として実行しなければならないものではな
く、「音源1処理」で波形データが生成されるまでに実
行すれば足りるものである。したがって、別の例とし
て、図12の「音源1処理」のステップS52でSR分
の楽音生成領域を設定する際に、この初期値の書き込み
処理を併せて行なうようにしてもよい。
【0115】また、アプリケーションソフトAPS1か
ら発生する波形データは、サンプリング周波数がまちま
ちであり、したがって「音源1処理」で生成した波形デ
ータとはサンプリング周波数が一致しない場合がある。
そこで、ウェーブバッファWB内の波形データを出力バ
ッファに書き込む処理の前段階として、所定の補間処理
またはオーバーサンプリング処理を該波形データに施す
ことにより、サンプリング周波数を一致させておくよう
にしてもよい。
【0116】また、アプリケーションソフトAPS1か
ら発生する画像データ等のその他の情報についても、
「音源1処理」における波形生成処理の許容遅れ時間を
考慮した再生タイミングの調整処理を同様にして行なう
ようにしてもよい。
【0117】このように、図25のシステム構成では、
アプリケーションソフトAPS1から発生してインター
フェース1F3に出力された波形データは、アプリケー
ションソフトAPS1からインターフェース1F1
(“MIDI API”)を介して受信したノートオン
に基づいてソフトウェア音源モジュールSSMで生成さ
れた波形データと同期をとって混合した後、インターフ
ェース1F2を介してOSに与えられるようになる。こ
れにより、ソフトウェア音源モジュールSSMにおける
波形データの生成の時間遅れが調整され、波形データの
再生タイミングが揃えられるようになる。
【0118】尚、以上の実施の形態では、〔対策1〕に
おいて、通算として1フレーム内に所定サンプル数の楽
音データを生成するようにしている。しかし、ここで
「通算として」というのは、必ずしも1つのフレーム内
で該所定サンプル数の楽音データの生成が完了すること
を要求するものではない。特に、これらの実施の形態で
は、図7に示すように、楽音データを書き込んだ出力バ
ッファを複数再生予約できるようになっているので、1
つのフレーム内で楽音データの生成演算が完了しなくて
も、その後のフレームでその分を補う演算を行なうこと
が可能である。図6を例にとってこのことを説明すれ
ば、図6では、内部割込み信号の発生しなかった機会で
の未生成の楽音データを、1つのフレーム内の最後の機
会までに間に合うように生成するようにしているが、該
最後の機会までに生成できなくても、その次のフレーム
にその生成を持ち越すようにしてよい(例えば、未生成
の4回分の楽音データを図6のように10回目の機会
(100ミリ秒目)で全て生成するかわりに、10回目
の機会で7,8回目の2回分の楽音データだけを生成
し、それ以降のフレームで内部割込み信号が発生した機
会で、残りの9,10回目の2回分の楽音データを生成
するようにしてよい)。尚、図16に例示しているよう
に、或るフレームにおける未生成の楽音データの生成
を、その次のフレームに持ち越すことがありうる。
【0119】また、以上の実施の形態では、ノートオン
イベント処理やノートオフイベント処理といったMID
I処理において、「音源部」制御用の制御パラメータ,
ノートオン及びイベントの発生時刻を示すデータを、各
発音チャンネル毎に設けた音源レジスタに格納してい
る。しかし、このようにこれら制御パラメータ等を各発
音チャンネル毎に別の音源レジスタに格納するかわり
に、1つの記憶エリアに、制御パラメータ等を発音チャ
ンネルのチャンネル番号を示すデータと組にして順次書
き込むようにしてもよい。その場合には、MIDIメッ
セージの供給に基づいて、一旦シーケンスデータを作成
し、このシーケンスデータに基づいて楽音データの生成
を行なうことになる。
【0120】また、以上の実施の形態では、「音源処理
2」において、「出力デバイス」から返却された出力バ
ッファを、「音源部」が既に保有している出力バッファ
の後に連結しており、したがって「音源処理1」におい
ては、このように連結された出力バッファに、1出力バ
ッファ分ずつ楽音データを生成している。しかし、この
ように出力バッファを連結するかわりに、個々の出力バ
ッファを単位として楽音データを生成するようにしても
よい。
【0121】また、以上の実施の形態では、「音源部」
の起動に先行して、4つの出力バッファの再生を「出力
デバイス」に予約している。しかし、「音源部」の起動
に先行して「出力デバイス」に再生予約する出力バッフ
ァの数は、もちろん4以外であってよい。また、また、
RAM5内に設ける出力バッファの数も、「音源部」の
起動に先行して「出力デバイス」に再生予約する出力バ
ッファの数よりも1以上多い適宜の数であってよい。
【0122】また、以上の実施の形態では、〔対策
1〕,〔対策2〕,〔対策3〕及び〔対策4〕を全て実
施している。しかし、これらの対策は、それぞれ相互に
独立して実施しても、「音源部」の起動の遅れを原因と
して発音に支障が生じる事態を防止できるものである。
したがって、これらの対策のうちのいずれか1つのみを
実施したり、2つまたは3つを適宜組み合わせて実施し
たりしてもよい。また、上記の実施形態においては、ソ
フト音源においては、生成した楽音波形データを出力バ
ッファに最大で400ms分貯めてから、これを出力す
るようにしている。そのため、他のソフトウェアによっ
て処理される該再生音楽情報に関連する他の情報(例え
ばカラオケの背景画像や歌詞画像情報)の再生タイミン
グと同期がとれなくなると不都合が生じるので、適宜の
同期化対策を講ずるようにすかるのがよい。例えば、M
IDIメッセージを出力するタイミングを、該MIDI
メッセージに対応する再生音楽情報に同期されるべき他
の情報(例えばカラオケの背景画像や歌詞画像情報)の
出力タイミングよりも早めてやり、ソフト音源における
楽音生成処理が他の処理よりも幾分先行して行なわれる
ようにしてやれば、最終的に必要な全情報を同期して出
力することができる。
【0123】また、以上の実施の形態では、波形メモリ
方式の楽音生成処理をCPUに実行させるタイプのソフ
トウェア音源にこの発明を適用しているが、他の適宜の
楽音生成方式(例えばFM合成方式等)をCPUに実行
させるタイプのソフトウェア音源においてこの発明を適
用してもよい。また、この発明は、パーソナルコンピュ
ータ(つまり汎用コンピュータ)のCPUによって楽音
生成処理を実行させるようにしたソフトウェア音源にお
いて適用することができるのみならず、専用の楽音発生
装置やその他の特機化された適宜の装置内に搭載された
コンピュータのCPUによって楽音生成処理を実行させ
るソフトウェア音源を具備するシステムにおいて適用す
ることができる。また、波形データ生成の基となる演奏
情報は、必ずしもMIDIフォームの情報に限定される
ものではなく、その他の形式であってもよい。
【0124】
【発明の効果】以上の通り、この発明の第1の観点によ
れば、擬似的ドライバ(FMD)を設けたことにより、
適宜のアプリケーションソフト(APS1)を介してO
S上の第1のインターフェース(MIDI API)を
介して与えられる演奏情報(例えばMIDIメッセー
ジ)を該擬似的ドライバによって受け取り、この受け取
った演奏情報をアプリケーションレベルのソフトウェア
音源(SSM)に与えることができる。従って、自らが
アプリケーションソフトでもあるソフトウェア音源(S
SM)が、上記別のアプリケーションソフト(APS
1)から与えられる演奏情報を入力し、これに基づき音
波形データ生成処理を行うことができるようになり、ア
プリケーションソフトであるソフトウェア音源と別のア
プリケーションソフトとをOSレベルで簡単に組み合わ
せることができ、該別のアプリケーションソフトから第
1のインターフェースを介して与えられる演奏情報(例
えばMIDIメッセージ)をソフトウェア音源に入力し
て、それに対応する音波形データを生成することができ
るものである。これにより、アプリケーションソフトで
あるソフトウェア音源の応用範囲を広げることができる
と共に、ゲームソフトやシーケンサソフトあるいはマル
チメディアソフト等の演奏情報(MIDIメッセージ)
を発生する各種のアプリケーションソフトウェアをコン
ピュータのOSに適用して簡便に使用できるようにする
場合に、ハードウェア音源を不要にすることができるの
で、これらの簡便な応用性を確保しながら、コストの面
でも有利になる、という優れた効果を奏する。
【0125】また、第1のインターフェース(MIDI
API)に演奏情報を与える第1の手段(アプリケー
ションソフトAPS1)と、ソフトウェア音源(SS
M)に演奏情報を与える第2の手段(ソフトウェア音源
に専用に組み込まれたソフトウェアAPS2)とを具備
し、ソフトウェア音源(SSM)が両方の演奏情報に基
づく楽音波形データ生成処理を実行するようにすること
により、従来知られたようなソフトウェア音源に専用に
組み込まれたソフトウェア(APS2)と、OSを介し
て該ソフトウェア音源と組み合わされる別のソフトウェ
ア(APS1)とによって、並行して、該ソフトウェア
音源を利用することができるようになる、という優れた
効果を奏する。
【0126】また、この発明の第2の観点によれば、ア
プリケーションソフトであるソフトウェア音源(SS
M)のプログラムをOSにドライバとしてインストール
して、該ソフトウェア音源が第1のインターフェース
(MIDI API)を介して与えられる演奏情報をO
S経由で受け取るようにしたことにより、適宜のアプリ
ケーションソフト(APS1)を介して第1のインター
フェースを介して与えられる演奏情報(例えばMIDI
メッセージ)をOSを介してソフトウェア音源に与える
ことができる。従って、この場合も、自らがアプリケー
ションソフトでもあるソフトウェア音源が、上記別のア
プリケーションソフトから与えられる演奏情報を入力
し、これに基づき音波形データ生成処理を行うことがで
き、前記と同様の効果を奏する。
【0127】更に、この発明の第3の観点によれば、コ
ンピュータのメイン制御部(CPU3)において起動命
令発生手段を設け、波形データ生成処理を起動する機会
を所定時間内に複数回設定し、この複数回の機会のう
ち、前記ソフトウェア音源のプログラムを実際に実行し
てよい機会にだけ起動命令を発生し、これにより、メイ
ン制御部は、他のプログラムの実行状況との兼ね合い
で、ソフトウェア音源のプログラムを実際に実行してよ
い機会にだけ起動命令を発生することができ、ソフトウ
ェア音源のプログラムとその他のプログラムとを適切に
時分割制御して並行して実行させることができる一方
で、ソフトウェア音源(SSM)において、前記起動命
令に応じて波形データ生成処理を実際に起動した機会だ
けで、通算として前記所定時間内に所定サンプル数分の
波形データを生成させるように、波形データ生成処理を
調整する調整処理手段を具備したので、所定時間内に設
定された複数回の起動機会のうち何回かの機会で起動命
令が発生されなかったとしても、起動命令に応じて波形
データ生成処理を実際に起動した機会だけを使用して、
通算して上記所定時間内に所定サンプル数分の音波形デ
ータを生成が完了するように制御することができ、発音
遅れの問題を解決することができる。従って、完全なマ
ルチタスク機能を有しないOS上でソフトウェア音源に
よる音波形データ生成処理と他のソフトウェアの処理を
並行して実行させる場合でも、音波形データ生成処理及
び他のソフトウェアの処理に支障が生じないようにする
ことができる、という優れた効果を奏する。すなわち、
他のソフトウェアの処理の影響によって音波形データ生
成処理の起動命令発生回数が相対的に減ったとしても、
通算して上記所定時間内に所定サンプル数分の音波形デ
ータを生成が完了するように制御されるので、発音遅れ
等の支障が生じることがなくなる。逆に、音波形データ
生成処理を固定の時分割的処理時間で行わないことによ
り、他のソフトウェアの処理の実行が音波形データ生成
処理によって阻害されてその処理が遅れるという問題が
起こらないようにすることができる。
【0128】その場合、各起動命令に対応する時点にお
いて、その時点までに生成処理すべき波形データの未処
理量の関数として、該時点の1起動命令に応じて生成す
べき波形データ量を決定し、該決定された波形データ量
分の波形データを生成する処理を、該1起動命令に応じ
て実行するようにしたことにより、上記関数を適切に定
めることにより、生成処理すべき波形データの未処理量
との兼ね合いで、1起動命令に応じて生成すべき波形デ
ータ量を適切に決定することができ、1起動命令に対応
するソフトウェア音源の処理によってメイン制御部の作
業が占有されることによって他の処理の実行が阻害され
ることが起こる確率をできるだけ低くするように制御す
ることができるようになる。
【0129】更に、この発明の第4の観点によれば、O
Sオペレーティングシステムが、生成済みの波形データ
を授受するためのインターフェースとして、第1のイン
ターフェースとは別に第3のインターフェースを有して
おり、且つ、オペレーティングシステムにドライバとし
てインストールされたアプリケーションソフトであるサ
ウンドプログラムが、第2のインターフェースを介して
入力された演奏情報に基づいて波形データを生成し、そ
の波形データを第3のインターフェースを介して入力さ
れた波形データと同期をとって混合し、混合した波形デ
ータを第1のインターフェースを介してOSに与える。
従って、適宜の別のアプリケーションソフトから発生し
た波形データを第3のインターフェースから入力し、こ
の波形データと、適宜の別のアプリケーションソフトか
ら第2のインターフェースを介して入力された演奏情報
に基づいて生成した波形データとをタイミングを揃えて
再生することができるようになる。
【0130】また、第3のインターフェースを介して入
力された波形データを初期値として、演奏情報に基づい
て生成した波形データを該初期値に累算することによっ
て波形データを混合するようにすれば、演奏情報に基づ
く波形データの生成タイミングに左右されずに、波形デ
ータを同期をとって混合することができるようになるの
で、タイミングを揃えた波形データの再生を安定して行
なうことができるようになる。
【図面の簡単な説明】
【図1】 この発明の第1の観点に従う実施形態のソフ
トウェアシステム構成を略示する図。
【図2】 この発明の第2の観点に従う実施形態のソフ
トウェアシステム構成を略示する図。
【図3】 この発明の一実施形態に係る音源システムの
ハードウェア構成例を示す全体ブロック図。
【図4】 この発明の一例として採用するソフトウェア
による楽音生成処理の概略を説明する図。
【図5】 この発明の一実施形態において採用可能な
〔対策1〕の一例を示す説明図。
【図6】 この発明の一実施形態において採用可能な
〔対策1〕の別の例を示す説明図。
【図7】 この発明の一実施形態において採用可能な
〔対策3〕の一例を示す説明図。
【図8】 図3のCPUによって実行されるソフトウェ
ア音源プログラムのメインルーチンの一例を示すフロー
チャート。
【図9】 図8における初期設定処理の一例を示すフロ
ーチャート。
【図10】 図8におけるMIDI処理において実行さ
れるノートオンイベント処理の一例を示すフローチャー
ト。
【図11】 図8におけるMIDI処理において実行さ
れるノートオフイベント処理の一例を示すフローチャー
ト。
【図12】 図8における音源処理1の一例を示すフロ
ーチャート。
【図13】 図3のDMAコントローラによる割込み処
理の一例を示すフローチャート。
【図14】 図3のDMAコントローラからの返却要求
に基づいて実行される図8の音源処理2の一例を示すフ
ローチャート。
【図15】 図3のDMAコントローラからのリセット
要求に基づいて実行される図8の音源処理2の一例を示
すフローチャート。
【図16】 この発明の一実施形態において採用可能な
〔対策1〕の更に別の例を示すものであって、内部割込
み信号の発生と楽音データの生成量との関係の一例を示
す説明図。
【図17】 図1のフェイクMIDIドライバにおける
プログラム例を示すフローチャート。
【図18】 図1のソフトウェア音源モジュールに専属
のアプリケーションソフトに含まれるMIDIイベント
処理のプログラム例を示すフローチャート。
【図19】 生成量SRを遅れ量ORの関数として決定
する際の関数の特性の一例を示す図。
【図20】 生成量SRを遅れ量ORの関数として決定
する際の関数の特性の別の一例を示す図。
【図21】 発音チャンネル数を遅れ量ORの関数とし
て決定する際の関数の特性の一例を示す図。
【図22】 アプリケーションレベルのソフトウェア音
源を実施するソフトウェアシステム構成の従来例を示す
図。
【図23】 従来知られたソフトウェア音源モジュール
の概念的構成例を示す図。
【図24】 MIDIメッセージを出力するアプリケー
ションソフトを実施するシステム構成の従来例を示す
図。
【図25】 この発明の第4の観点に従う実施形態のソ
フトウェアシステム構成を略示する図。
【図26】 図25のシステムにおいて図3のCPUに
よって実行されるサウンドモジュールのプログラムのメ
インルーチンの一例を示すフローチャート。
【図27】 図25のシステムにおいてアプリケーショ
ンソフトAPS1が再生中のデータのイベントタイミン
グで実行する処理の一例を示すフローチャート。
【図28】 図26におけるWAVE処理の一例を示す
フローチャート。
【図29】 図3のDMAコントローラからの返却要求
に基づいて実行される図26の音源処理2の一例を示す
フローチャート。
【図30】 図3のDMAコントローラからのリセット
要求に基づいて実行される図26の音源処理2の一例を
示すフローチャート。
【符号の説明】
SSM ソフトウェア音源モジュール APS1,APS2 アプリケーションソフト IF1,IF2 第1及び第2のインターフェース FMD フェイクMIDIドライバ 1 MIDI 2 タイマ 3 CPU 4 ROM 5 RAM 6 データ及びアドレスバス 7 マウス 8 キーボード 9 ディスプレイ 10 ハードディスク装置 11 DMAコントローラ 12 DAC 13 サウンドシステム

Claims (7)

    【特許請求の範囲】
  1. 【請求項1】 所定のオペレーティングシステムとソフ
    トウェア音源のプログラムとを搭載したコンピュータを
    用いて音波形データを生成するための音源システムにお
    いて、 前記オペレーティングシステムは、波形データを生成す
    る基となる演奏情報を授受するための第1のインターフ
    ェースと、生成済みの波形データを授受するための第2
    のインターフェースとを有しており、 前記ソフトウェア音源は、演奏情報を受け取り、これに
    基づき波形データを生成する処理を行い、生成した波形
    データを前記第2のインターフェースを介して出力する
    アプリケーションレベルのソフトウェアであり、 前記オペレーティングシステムにドライバとしてインス
    トールされ、前記第1のインターフェースを介して与え
    られる前記演奏情報を受け取り、受け取った該演奏情報
    を前記ソフトウェア音源に与えるようにプログラムされ
    た擬似的ドライバを更に具備することを特徴とする音源
    システム。
  2. 【請求項2】 前記第1のインターフェースに演奏情報
    を与える第1の手段と、前記ソフトウェア音源に演奏情
    報を与える第2の手段とを更に具備し、前記ソフトウェ
    ア音源は、前記第1のインターフェースを経由して前記
    第1の手段から与えられる演奏情報に基づく波形データ
    生成処理と前記第2の手段から直接与えられる演奏情報
    に基づく波形データ生成処理とを実行するものである請
    求項1に記載の音源システム。
  3. 【請求項3】 所定のオペレーティングシステムとソフ
    トウェア音源のプログラムとを搭載したコンピュータを
    用いて音波形データを生成するための音源システムにお
    いて、 前記オペレーティングシステムは、波形データを生成す
    る基となる演奏情報を授受するための第1のインターフ
    ェースと、生成済みの波形データを授受するための第2
    のインターフェースとを有しており、 前記ソフトウェア音源は、演奏情報を受け取り、これに
    基づき波形データを生成する処理を行い、生成した波形
    データを前記第2のインターフェースを介して出力する
    アプリケーションレベルのソフトウェアであり、 前記ソフトウェア音源のプログラムを前記オペレーティ
    ングシステムにドライバとしてインストールすると共
    に、該ソフトウェア音源が前記第1のインターフェース
    を介して与えられる前記演奏情報を受け取るようにプロ
    グラムし、前記第1のインターフェースを介して受け取
    った演奏情報に基づく波形データ生成処理を前記ソフト
    ウェア音源によって実行するようにしたことを特徴とす
    る音源システム。
  4. 【請求項4】 前記コンピュータは、前記ソフトウェア
    音源のプログラムとその他のプログラムを並行して実行
    する制御を行うメイン制御部を有しており、このメイン
    制御部は、所定時間内の複数回の起動機会のうち、前記
    ソフトウェア音源のプログラムを実際に実行してよい機
    会に起動命令を発生する起動命令発生手段を具備してお
    り、 前記ソフトウェア音源において、前記起動命令に応じて
    波形データ生成処理を実際に起動した機会だけで、通算
    として前記所定時間内に所定サンプル数分の波形データ
    を生成させるように、波形データ生成処理を調整する調
    整処理手段を具備していることを特徴とする請求項1又
    は3に記載の音源システム。
  5. 【請求項5】 前記調整処理手段は、各起動命令に対応
    する時点において、その時点までに生成処理すべき波形
    データの未処理量の関数として、該時点の1起動命令に
    応じて生成すべき波形データ量を決定するものであり、
    前記ソフトウェア音源において、該決定された波形デー
    タ量分の波形データを生成する処理を、該1起動命令に
    応じて実行するようにした請求項4に記載の音源システ
    ム。
  6. 【請求項6】 所定のオペレーティングシステムで動作
    するサウンドプログラムを実行することによって音波形
    データを生成するための音源システムにおいて、 前記オペレーティングシステムは、生成済みの波形デー
    タを授受するための第1のインターフェースと、波形デ
    ータを生成する基となる演奏情報を授受するための第2
    のインターフェースと、生成済みの波形データを授受す
    るための第3のインターフェースとを有しており、 前記サウンドプログラムは、前記オペレーティングシス
    テムにドライバとしてインストールされており、前記第
    2のインターフェースから入力された演奏情報に基づ
    き、楽音生成処理を実行して波形データを生成する生成
    ステップと、前記第3のインターフェースから入力され
    た波形データと前記生成ステップで生成された波形デー
    タとを同期をとって混合する混合ステップと、前記混合
    ステップで混合した波形データを前記第1のインターフ
    ェースに出力する出力ステップとを実行することを特徴
    とする音源システム。
  7. 【請求項7】 前記混合ステップでは、前記第3のイン
    ターフェースから入力された波形データを初期値とし
    て、前記生成ステップで生成された波形データを該初期
    値に累算することによって波形データを混合する請求項
    7に記載の音源システム。
JP8083157A 1996-01-17 1996-03-12 コンピュータソフトウェアを用いた音源システム Expired - Fee Related JP2970526B2 (ja)

Priority Applications (10)

Application Number Priority Date Filing Date Title
JP8083157A JP2970526B2 (ja) 1996-01-17 1996-03-12 コンピュータソフトウェアを用いた音源システム
EP97100550A EP0785539B1 (en) 1996-01-17 1997-01-15 Tone generator system using computer software
DE69705434T DE69705434T2 (de) 1996-01-17 1997-01-15 Tonerzeugungssystem unter Verwendung eines Computerprogrammes
KR1019970001193A KR100478469B1 (ko) 1996-01-17 1997-01-16 컴퓨터소프트웨어를이용한음원시스템
CN2006100998189A CN1932969B (zh) 1996-01-17 1997-01-16 利用计算机软件的乐音发生器系统
US08/784,232 US6023016A (en) 1996-01-17 1997-01-16 Tone generator system using computer software
CNB971022534A CN1159698C (zh) 1996-01-17 1997-01-16 利用计算机软件的乐音发生器系统
CN2004100485456A CN1545084B (zh) 1996-01-17 1997-01-16 利用计算机软件的乐音发生器系统
SG1997000103A SG65634A1 (en) 1996-01-17 1997-01-16 Tone generator system using computer software
KR1020040057745A KR100500077B1 (ko) 1996-01-17 2004-07-23 악음 생성 방법 및 장치

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP8-24748 1996-01-17
JP2474896 1996-01-17
JP8083157A JP2970526B2 (ja) 1996-01-17 1996-03-12 コンピュータソフトウェアを用いた音源システム

Publications (2)

Publication Number Publication Date
JPH09258737A true JPH09258737A (ja) 1997-10-03
JP2970526B2 JP2970526B2 (ja) 1999-11-02

Family

ID=26362326

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8083157A Expired - Fee Related JP2970526B2 (ja) 1996-01-17 1996-03-12 コンピュータソフトウェアを用いた音源システム

Country Status (7)

Country Link
US (1) US6023016A (ja)
EP (1) EP0785539B1 (ja)
JP (1) JP2970526B2 (ja)
KR (2) KR100478469B1 (ja)
CN (3) CN1932969B (ja)
DE (1) DE69705434T2 (ja)
SG (1) SG65634A1 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010109755A (ja) * 2008-10-30 2010-05-13 Toshiba Corp 情報処理装置、エフェクトプログラムおよびコンテンツ補正処理方法
JP2015011342A (ja) * 2013-06-26 2015-01-19 アップリフィエル オーユーApplifier Oy 携帯デバイスのオーディオ装置

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6366971B1 (en) * 1998-01-09 2002-04-02 Yamaha Corporation Audio system for playback of waveform sample data
JP4240575B2 (ja) * 1998-05-15 2009-03-18 ヤマハ株式会社 楽音合成方法、記録媒体および楽音合成装置
JP3614061B2 (ja) 1999-12-06 2005-01-26 ヤマハ株式会社 自動演奏装置及び自動演奏プログラムを記録したコンピュータ読取り可能な記録媒体
US7319764B1 (en) * 2003-01-06 2008-01-15 Apple Inc. Method and apparatus for controlling volume
EP1555772A3 (en) * 2004-01-15 2013-07-17 Yamaha Corporation Remote control method of external devices
US20060155543A1 (en) * 2005-01-13 2006-07-13 Korg, Inc. Dynamic voice allocation in a vector processor based audio processor
US8566721B2 (en) * 2009-04-30 2013-10-22 Apple Inc. Editing key-indexed graphs in media editing applications
US8286081B2 (en) * 2009-04-30 2012-10-09 Apple Inc. Editing and saving key-indexed geometries in media editing applications
US8383924B2 (en) * 2010-03-10 2013-02-26 Yamaha Corporation Musical tone signal generating apparatus

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4373416A (en) * 1976-12-29 1983-02-15 Nippon Gakki Seizo Kabushiki Kaisha Wave generator for electronic musical instrument
JPS55500959A (ja) * 1978-12-11 1980-11-13
JPH0743591B2 (ja) * 1988-03-08 1995-05-15 ヤマハ株式会社 楽音発生制御装置
US5086475A (en) * 1988-11-19 1992-02-04 Sony Corporation Apparatus for generating, recording or reproducing sound source data
US5319151A (en) * 1988-12-29 1994-06-07 Casio Computer Co., Ltd. Data processing apparatus outputting waveform data in a certain interval
JP2576617B2 (ja) * 1988-12-29 1997-01-29 カシオ計算機株式会社 処理装置
US5121667A (en) * 1989-11-06 1992-06-16 Emery Christopher L Electronic musical instrument with multiple voices responsive to mutually exclusive ram memory segments
JP2797142B2 (ja) * 1990-07-02 1998-09-17 カシオ計算機株式会社 電子楽器用処理装置
US5200564A (en) * 1990-06-29 1993-04-06 Casio Computer Co., Ltd. Digital information processing apparatus with multiple CPUs
US5054360A (en) * 1990-11-01 1991-10-08 International Business Machines Corporation Method and apparatus for simultaneous output of digital audio and midi synthesized music
JPH0573046A (ja) * 1991-06-27 1993-03-26 Yamaha Corp 楽音信号演算処理装置
US5283386A (en) * 1991-08-30 1994-02-01 Casio Computer Co., Ltd. Musical-tone signal generating apparatus and musical-tone controlling apparatus including delay means and automatic reset means
JP2722907B2 (ja) * 1991-12-13 1998-03-09 ヤマハ株式会社 波形発生装置
JP2743726B2 (ja) * 1992-07-07 1998-04-22 ヤマハ株式会社 電子楽器
JP2768168B2 (ja) * 1992-09-18 1998-06-25 ヤマハ株式会社 楽音合成装置
US5331111A (en) * 1992-10-27 1994-07-19 Korg, Inc. Sound model generator and synthesizer with graphical programming engine
JPH07146679A (ja) * 1992-11-13 1995-06-06 Internatl Business Mach Corp <Ibm> 音声データを変換する方法及びシステム
US5613147A (en) * 1993-01-08 1997-03-18 Yamaha Corporation Signal processor having a delay ram for generating sound effects
JP2850707B2 (ja) * 1993-06-15 1999-01-27 ヤマハ株式会社 楽音制御装置
US5596159A (en) * 1995-11-22 1997-01-21 Invision Interactive, Inc. Software sound synthesis system

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010109755A (ja) * 2008-10-30 2010-05-13 Toshiba Corp 情報処理装置、エフェクトプログラムおよびコンテンツ補正処理方法
US8666227B2 (en) 2008-10-30 2014-03-04 Kabushiki Kaisha Toshiba Information processing apparatus, effect program, and content correction processing method
JP2015011342A (ja) * 2013-06-26 2015-01-19 アップリフィエル オーユーApplifier Oy 携帯デバイスのオーディオ装置
JP2015165306A (ja) * 2013-06-26 2015-09-17 アップリフィエル オーユーApplifier Oy 携帯デバイスのオーディオ装置

Also Published As

Publication number Publication date
EP0785539B1 (en) 2001-07-04
EP0785539A1 (en) 1997-07-23
JP2970526B2 (ja) 1999-11-02
KR970059908A (ko) 1997-08-12
CN1545084A (zh) 2004-11-10
US6023016A (en) 2000-02-08
CN1159698C (zh) 2004-07-28
KR100478469B1 (ko) 2005-09-14
CN1932969A (zh) 2007-03-21
CN1545084B (zh) 2010-11-24
DE69705434D1 (de) 2001-08-09
KR100500077B1 (ko) 2005-07-12
SG65634A1 (en) 1999-06-22
CN1164726A (zh) 1997-11-12
DE69705434T2 (de) 2002-05-16
CN1932969B (zh) 2011-03-23

Similar Documents

Publication Publication Date Title
JP3072452B2 (ja) カラオケ装置
JP3206619B2 (ja) カラオケ装置
US5703310A (en) Automatic performance data processing system with judging CPU operation-capacity
JP2970526B2 (ja) コンピュータソフトウェアを用いた音源システム
US5770812A (en) Software sound source with advance synthesis of waveform
WO2001065536A1 (fr) Generateur de sons musicaux
US6479739B2 (en) Method of controlling tone generating drivers by integrating driver on operating system
JP3221314B2 (ja) 楽音合成装置及び方法
JP2962217B2 (ja) 楽音生成装置及び方法
JP3572847B2 (ja) コンピュータソフトウェアを用いた音源システム及び方法
JP3152198B2 (ja) 楽音発生方法および楽音発生装置
JP3791162B2 (ja) 信号処理装置
JP3003559B2 (ja) 楽音生成方法
JP3781171B2 (ja) 楽音発生方法
JP3405181B2 (ja) 楽音発生方法
JP3139490B2 (ja) 楽音生成装置及び方法
JP3334483B2 (ja) 外部波形を入力可能な波形メモリ型楽音発生装置
JP3518339B2 (ja) 音源装置およびカラオケ装置
JP3627590B2 (ja) 音生成方法
JP2000214867A (ja) カラオケ装置
JP2005292858A (ja) 楽音発生方法及び装置
JP2002196763A (ja) 楽音発生方法
JPH06289884A (ja) カラオケ装置

Legal Events

Date Code Title Description
S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313532

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20070827

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080827

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090827

Year of fee payment: 10

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100827

Year of fee payment: 11

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100827

Year of fee payment: 11

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110827

Year of fee payment: 12

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120827

Year of fee payment: 13

LAPS Cancellation because of no payment of annual fees