[go: up one dir, main page]

JPH09146556A - 楽音発生方法 - Google Patents

楽音発生方法

Info

Publication number
JPH09146556A
JPH09146556A JP8023323A JP2332396A JPH09146556A JP H09146556 A JPH09146556 A JP H09146556A JP 8023323 A JP8023323 A JP 8023323A JP 2332396 A JP2332396 A JP 2332396A JP H09146556 A JPH09146556 A JP H09146556A
Authority
JP
Japan
Prior art keywords
waveform
waveform data
processing
predetermined period
output
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
JP8023323A
Other languages
English (en)
Other versions
JP3246312B2 (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 JP02332396A priority Critical patent/JP3246312B2/ja
Priority to DE69619587T priority patent/DE69619587T2/de
Priority to EP96107770A priority patent/EP0743631B1/en
Priority to CN 200510116176 priority patent/CN1763839B/zh
Priority to CN96100281A priority patent/CN1129110C/zh
Priority to CNB031251706A priority patent/CN100495532C/zh
Priority to CN 200510116175 priority patent/CN1763838B/zh
Priority to US08/649,168 priority patent/US5895877A/en
Priority to KR1019960016767A priority patent/KR100421589B1/ko
Publication of JPH09146556A publication Critical patent/JPH09146556A/ja
Priority to US09/222,395 priority patent/US6184455B1/en
Application granted granted Critical
Publication of JP3246312B2 publication Critical patent/JP3246312B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Landscapes

  • Electrophonic Musical Instruments (AREA)

Abstract

(57)【要約】 【課題】 ソフトウエア音源を汎用のOSと並列的に安
定して動作させる。 【解決手段】 MIDIシーケンサ12などのアプリケ
ーションプログラムからMIDIイベントなどの演奏情
報が音源MIDIドライバ16に供給されると、音源M
IDIドライバ16は、入力されたMIDI信号に応じ
て新規な発音をトーンジェネレータタスク20の発音チ
ャンネルに割り当て、該割り当てたチャンネルに設定す
るための楽音制御パラメータを用意する。トーンジェネ
レータタスク20は該楽音制御パラメータにより楽音波
形データを演算により生成し、A/D変換器であるコー
デック26に出力する。これらのプログラムと汎用のO
Sとが、プリエンプティブ方式のマルチタスク管理プロ
グラムによりスケジューリングされて実行される。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、CPUやDSPな
どのプログラマブルな演算装置上において、楽音生成プ
ログラムを実行することにより楽音波形を生成する、楽
音発生方法に関する。
【0002】
【従来の技術】従来の楽音発生装置は、通常、MIDI
(Musical Instrument Digital Interface)、鍵盤ある
いはシーケンサなどからの演奏情報を入力する演奏入力
部、楽音波形を発生する音源部、入力された演奏情報に
応じて前記音源部を制御する中央処理装置(CPU)な
どから構成されていた。ここで、CPUは、入力された
演奏情報に応じて、チャンネルアサイン、パラメータ変
換などの音源ドライバ処理(演奏処理)を実行し、音源
部の割り当てたチャンネルに変換したパラメータと発音
開始指示(ノートオン)を供給する。また、音源部は供
給されたパラメータに基づいて楽音波形を生成するもの
であり、この音源部としては電子回路などのハードウエ
アが採用されていた。このため、楽音発生装置は楽音を
発生するための専用機器となってしまい、楽音を発生す
るときには専用の楽音発生装置を準備することが必要で
あった。
【0003】そこで、パーソナルコンピュータなどの汎
用コンピュータにおいて、MIDIイベントなどの演奏
情報を入力データとし、対応する波形データを演算生成
するアプリケーションプログラム、いわゆるソフトウエ
ア音源を使用して楽音を生成する楽音発生方法が提案さ
れている。この音源処理を行うプログラムを使用するこ
とにより、専用の楽音発生装置を用いることなく、CP
Uとソフトウエアの他にはDA変換用のチップだけを備
えるだけで、楽音を発生させることが可能となる。
【0004】ところで、楽音を発生させるためには、サ
ンプリング周期、すなわち、DAC(Digtal Analog Co
nverter )における変換タイミング毎に波形サンプルを
DACに供給することが必要である。このために、従来
のソフトウエア音源においては、1サンプリング周期毎
に各発音チャンネルの楽音波形サンプルを発音チャンネ
ル分演算生成するようにしていた。したがって、CPU
は、各サンプリング周期において各発音チャンネルの演
算処理を行うときに、まず、前回の当該発音チャンネル
の演算に用いた各種のデータをメモリからレジスタに復
帰させること、および、当該波形生成演算終了後に次回
の処理のために前記レジスタの内容をメモリに退避する
ことが必要であり、本来の波形生成演算以外の処理に多
くの処理時間を必要としていた。そこで、本出願人は、
所定期間(フレーム時間)ごとに該所定期間に対応する
複数サンプルの波形データをまとめて生成演算すること
により、演算効率を向上させたソフトウエア音源による
楽音生成方法を提案している(特願平7−144159
号)。
【0005】
【発明が解決しようとする課題】しかしながら、このよ
うな従来のソフトウエア音源は、汎用OS(OperatingS
ystem)の上で動作するアプリケーションプログラムと
して提供されている。また、このソフトウエア音源に対
してMIDIイベントなどの演奏情報を供給するMID
Iシーケンサやゲームソフトウエアなどのソフトウエア
も、同じ汎用OSの上で動作するアプリケーションプロ
グラムである。したがって、非完全マルチタスク方式
(プリエンプティブでないマルチタスク方式)のOSの
制御下においては、実行中のタスクがOSに制御を戻さ
ない限り他のタスクは実行されないため、当該ソフトウ
エア音源が所定時間ごとに実行されないことがあり、楽
音波形サンプルをDACに1サンプリング周期毎に安定
して出力させることができない場合があった。
【0006】また、前述したような、波形バッファ上に
複数サンプル分の波形データをまとめて演算生成して、
演算効率を向上させる方法を採用したソフトウエア音源
においては、波形再生部(DAC)からの波形生成の要
求が発生したとき、所定の期間内に速やかに波形データ
を受け渡すことが要求されるが、そのときに多数のイベ
ントが発生していたりすると、速やかに波形データの受
け渡しを行うことができなくなり、やはり、安定した楽
音の発生が困難となる。さらに、パーソナルコンピュー
タなどの汎用コンピュータにおいては音声入力用のAD
C(Analog Digital Converter)やデジタル波形入力ボ
ードなどが備えられている場合が多いが、これらからの
波形データ入力に対し、ソフトウエア音源が備えている
音色制御処理機能を施すことができなかった。
【0007】さらにまた、上記したCPUにより音源処
理と演奏処理を実行する楽音発生方法において、演奏処
理とは入力した演奏情報に基づき生成される楽音を制御
するための制御情報を作成する処理であり、他方、音源
処理とは前記演奏処理により作成された制御情報に基づ
き楽音の波形データを生成する処理である。そこで、例
えば、通常は押鍵検出などの演奏処理を実行し、該演奏
処理に対して各サンプリング周期で音源処理を割り込み
実行し、1サンプル分の波形データを生成した後、演奏
処理に復帰するようにしている。
【0008】演奏情報(MIDIイベント)は、演奏者
の演奏操作やシーケンサでのイベントの再生により発生
し、該演奏情報が発生した場合には前記演奏処理により
処理される。つまり、演奏情報の発生した時点では、C
PUは通常の音源処理に加えて演奏処理を実行しなけれ
ばならないため、非定期的に発生する演奏情報により演
算量が一時的に増加することになる。しかしながら、従
来の楽音発生方法においてはこれに対応しておらず、音
源処理は演奏情報のあるなしに関わらず定期的に優先実
行され、場合によっては演奏処理が遅れてしまうことが
あった。なお、このような演奏処理の遅れを防止するた
めに、逆に演奏処理の優先度を上げることが考えられる
が、このようにすると今度は、一時的に発音数が減少し
たり、あるいは、楽音波形が途切れてしまうなど、音源
処理の動作が不安定になるという問題が発生することに
なる。
【0009】そこで、本発明は、波形生成演算を安定し
て実行することができ、また、波形再生部から波形要求
があったときに速やかに波形データを出力することがで
き、さらに、入力された波形データをソフトウエア音源
の一連の処理の途中に供給して音色制御処理を行うこと
ができる楽音発生方法を提供することを目的とする。ま
た、演奏情報が発生した時点で処理が増加しても、安定
した音源処理を行うことを目的としている。さらにま
た、波形生成のための演算量を可能な限り少なくするこ
とを目的としている。
【0010】
【課題を解決するための手段】上記目的を達成するため
に、本発明の楽音発生方法は、所定のオペレーティング
システムを実行するシステムステップ、前記所定のオペ
レーティングシステム上で実行されるアプリケーション
プログラムからの指示に基づいて、所定期間ごとに波形
データを所定サンプル数ずつ演算生成する波形生成ステ
ップ、上記波形生成ステップにより演算生成された波形
データをサンプリング周期毎に1サンプルずつ出力する
出力ステップ、および、前記所定期間内に、前記出力ス
テップからの要求に応じて前記システムステップと前記
波形生成ステップとの間でタスク切換を行う制御ステッ
プを含む、演算装置において実行される楽音発生方法で
ある。
【0011】また、本発明の他の楽音発生方法は、演奏
情報を入力する入力ステップ、所定期間内に入力された
演奏情報に基づいて、該所定期間に対応した波形データ
を演算生成する波形生成ステップ、所定期間分の波形デ
ータをサンプリング周期毎に1サンプルずつ出力する出
力ステップ、前記波形生成ステップにおいて演算生成さ
れた所定期間分の波形データを、前記出力ステップに受
け渡しする受け渡しステップ、および、前記出力ステッ
プに受け渡された波形データの出力が進行したことを検
出して、波形データの受け渡しを要求する要求ステップ
を含み、前記要求ステップからの要求に応じて、前記受
け渡しステップが実行され、その後に前記波形生成ステ
ップが実行されることを特徴とする、演算装置において
実行される楽音発生方法である。
【0012】さらにまた、本発明のさらに他の楽音発生
方法は、演奏情報を入力する入力ステップ、所定期間内
に入力された演奏情報に基づいて、該所定期間に対応し
た波形データを演算生成する波形生成ステップ、所定期
間分の外部波形データを入力して、前記波形生成ステッ
プにより演算生成された波形データと合成する波形合成
ステップ、前記波形合成ステップにおいて合成された前
記所定期間分の波形データに対して信号処理を施す波形
処理ステップ、および、前記信号処理ステップにおいて
信号処理が施された波形データをサンプリング周期毎に
1サンプルずつ出力する出力ステップからなる、演算装
置において実行される楽音発生方法である。
【0013】さらにまた、本発明のさらに他の楽音発生
方法は、所定のオペレーティングシステムを実行するシ
ステムステップ、前記所定のオペレーティングシステム
上で実行されるアプリケーションプログラムからの指示
に基づいて、所定期間ごとに波形データを所定サンプル
数ずつ演算生成する波形生成ステップ、前記波形生成ス
テップにより演算生成された波形データをサンプリング
周期毎に1サンプルずつ出力する出力ステップ、およ
び、前記所定期間内に、前記出力ステップからの要求に
応じて前記システムステップと前記波形生成ステップと
の間でタスク切換を行う制御ステップを含み、前記波形
生成ステップは、間欠的に楽音パラメータ演算を実行す
るようになされている、演算装置において実行される楽
音発生方法である。
【0014】さらにまた、本発明のさらに他の楽音発生
方法は、演奏情報を入力する入力ステップ、所定期間内
に入力された演奏情報に基づいて、該所定期間に対応し
た波形データを演算生成する波形生成ステップ、所定期
間分の波形データをサンプリング周期毎に1サンプルず
つ出力する出力ステップ、前記波形生成ステップにおい
て演算生成された所定期間分の波形データを、前記出力
ステップに受け渡しする受け渡しステップ、および、前
記出力ステップに受け渡された波形データの出力が進行
したことを検出して、波形データの受け渡しを要求する
要求ステップを含み、前記波形生成ステップは、間欠的
に楽音パラメータ演算を実行するようになされており、
また、前記要求ステップからの要求に応じて、前記受け
渡しステップが実行され、その後に前記波形生成ステッ
プが実行される、演算装置において実行される楽音発生
方法である。
【0015】さらにまた、本発明の他の楽音発生方法
は、演奏情報を入力する入力ステップ、所定期間内に入
力された演奏情報に基づいて、該所定期間に対応した波
形データを演算生成する波形生成ステップ、所定期間分
の外部波形データを入力して、前記波形生成ステップに
より演算生成された波形データと合成する波形合成ステ
ップ、前記波形合成ステップにおいて合成された前記所
定期間分の波形データに対して信号処理を施す波形処理
ステップ、前記波形処理ステップにおいて信号処理が施
された波形データをサンプリング周期毎に1サンプルず
つ出力する出力ステップを含み、前記波形生成ステップ
は間欠的に楽音パラメータ演算を実行するようになされ
ている、演算装置において実行される楽音発生方法であ
る。
【0016】演奏情報の発生時に演奏処理を優先的に行
い、演奏処理の空き時間に音源処理を継続的に行うよう
にしているので、演奏情報が発生した時点で処理量が増
加して音源処理があまり実行されなくても、それ以外の
時間でその穴埋めをすることができるので、音源処理を
安定して実行することができる。また、演奏情報の発生
時に演奏情報の受入処理を行い、受け入れた演奏情報に
基づく楽音制御あるいは波形生成は、該受入処理の空き
時間に行われるようにしたので、演奏情報が発生した時
点での処理の増加分を前記空き時間内に分散させること
ができ、一時的な処理の増加を防止することができる。
【0017】
【発明の実施の形態】図1に本発明の楽音発生方法がそ
の上で実行される楽音発生装置の構成を示す。この図に
おいて、1はアプリケーションプログラムや楽音波形サ
ンプルの生成等の各種演算処理を行うマイクロプロセッ
サなどの中央処理装置(CPU)、2はプリセット音色
データ等が記憶されているリードオンリメモリ(RO
M)、3はCPU1のワークメモリエリアや音色データ
エリア、チャンネルレジスタエリア、出力バッファエリ
ア等の記憶エリアを有するランダムアクセスメモリ(R
AM)、4は時刻を指示すると共に、タイマ割り込み処
理のタイミングをCPU1に指示するタイマ、5はMI
DIイベントが入力されると共に、生成されたMIDI
イベントを出力するMIDIインターフェース、6は英
字、かな、数字、記号などのキーと備えるいわゆるパソ
コン用のキーボードである。
【0018】7はユーザが楽音発生装置と対話するため
のディスプレイ(モニタ)装置、8は楽音を発生するシ
ーケンサソフトやゲームソフトなどの各種アプリケーシ
ョンプログラムが格納されているとともに、楽音波形サ
ンプルを生成するために使用する波形データ等が記憶さ
れているハードディスク(HDD)である。また、9
は、その内部にデジタルアナログ変換器(DAC)、ア
ナログデジタル変換器(ADC)などが設けられている
コーデック(CODEC)であり、該DACには演算生
成された楽音波形データが1サンプリングクロック毎に
供給され、また、前記ADCを介して外部オーディオ信
号入力端子からのオーディオ入力信号を取り込む。10
は前記コーデック9内のDACの出力に接続されたサウ
ンドシステムであり、DACから1サンプリング周期毎
に出力されるアナログ信号に変換された楽音信号を増幅
し外部に出力するものである。なお、フロッピィディス
ク装置やCD- ROM駆動装置、MO駆動装置などの上
記した以外の外部記憶装置が接続されている場合もあ
る。以上の構成はパソコン、ワークステーション等と同
等であり、それらの上で本発明の楽音発生方法を実施す
ることができる。
【0019】本発明においては、このような汎用演算処
理装置において、シーケンサソフトやゲームソフトなど
のアプリケーションプログラムがその上で動作する汎用
のOSをマルチタスク管理プログラムの上で動作させる
ようにし、また、ソフトウエア音源は、アプリケーショ
ンプログラムとはせずに、該マルチタスク管理プログラ
ムの制御の元で動作させているようにしている。これに
より、ソフトウエア音源を実時間処理に必要な時間間隔
で確実に実行させることができ、また、該ソフトウエア
音源の処理が実行されない時間に前記汎用のOSが動作
され、該OS上のアプリケーションプログラムの処理が
実行されることとなる。
【0020】図2に本発明の一実施の形態におけるソフ
トウエアモジュール構成を示す。なお、この図において
は、説明を簡略にするため、実時間の処理が必要なオー
ディオ信号処理に関係する部分、すなわち、ソフトウエ
ア音源および波形データの処理に関係する部分のみが示
してある。図2に示すように、最上位層にはアプリケー
ションプログラム群が位置しており、11は音源ミキサ
ー制御ソフトウエア、12はMIDIシーケンサソフト
ウエア、13はゲームソフトなどのソフトウエア、およ
び14は波形再生ソフトウエアである。次は、システム
ソフトウエア群であり、15はアプリケーションプログ
ラムがシステムソフトウエア群が提供する各種のサービ
スを利用するためのインターフェース、16は、MID
I音源ドライバとして機能し、後述するトーンジェネレ
ータタスク20を生成する音源MIDIドライバ、17
はウェーブ入出力デバイスをオープンする機能を提供す
るWAVE入出力ドライバ、18は音源MIDIドライ
バ16およびWAVE入出力ドライバ17とカーネル
(Ring0)とのインタフェース、また、25は外部MI
DIドライバである。以上の各プログラムは、プロセッ
サのユーザ・モード(Ring3)において実行される。
【0021】また、19はタスクディスパッチャ、20
はトーンジェネレータタスク、21はウェーブタスク、
22はミキサタスク、23は複数のオーディオストリー
ムの混合、分割、サンプルレート変換あるいはフォーマ
ット変換などを行うためのサブルーチン群であるライブ
ラリ、24はコーデックドライバであり、これらのプロ
グラムは、プロセッサのカーネルモード(Ring0)にお
いて実行される。
【0022】タスクディスパッチャ19は、複数の実行
可能状態にあるタスク(プロセス)の中から次に実行を
開始されるタスクを選択してプロセッサ上で実行される
ように制御を行うモジュールであり、本発明において
は、タスクの実行中においてもタイマなどからの割込を
許可し、現在処理中のタスクの処理を中断して別のタス
クの処理を開始することを許す、いわゆるプリエンプテ
ィブ方式(完全マルチタスク方式)のタスクスケジュー
リングを行うものである。
【0023】また、トーンジェネレータタスク20は、
その詳細は後述するが、音源MIDIドライバ16によ
り生成され、該音源MIDIドライバ16から供給され
る楽音制御パラメータTGparamsに基づいて最大32チ
ャンネル分の波形テーブル合成機能とリバーブなどの音
色制御処理機能とを提供するものである。さらに、ウェ
ーブタスク21およびミキサタスク22はWAVE入出
力ドライバ17によりオープンされるウェーブ入出力デ
バイスに対応して生成されるタスクである。
【0024】さらに、26は波形データを入出力するた
めのA/D変換器およびD/A変換器を有するコーデッ
ク回路、27はMIDIインタフェース(MIDI I/O)で
ある。なお、図示していないが、上記システムプログラ
ム群には、通常の汎用OSに含まれているデバイスドラ
イバ群およびメモリ管理、ファイルシステム、ユーザイ
ンターフェースなどのプログラム群が含まれている。
【0025】図3を参照して、タスク(プロセス)の実
行状態について説明する。タスクはcreate命令を実行す
ることによって生成され、生成されたタスクはまず実行
可(READY )状態とされて待ち行列につながれる。タス
クディスパッチャ19は、待ち行列につながれている実
行可(READY )状態のタスクの中から所定の優先順位に
従って処理を開始すべきタスクを選択し、これにより、
当該タスクは実行中(RUNNING )状態とされる。この状
態において、タイマからのタイムスライス割込などが発
生すると実行中のタスクはその処理を中断され、実行可
(READY )状態とされて再び待ち行列につながれる。そ
して、タスクディスパッチャ19は、所定の優先順位に
従って、待ち行列につながれているタスクの中から次に
実行すべきタスクを選択し、該選択したタスクを実行さ
せるように制御する。
【0026】したがって、他のタスクを実行中であって
も、所定の間隔で発生するタイムスライス割込などによ
りそのタスクの処理を強制的に中断することができ、ト
ーンジェネレータタスク20の優先順位を高くしておく
ことにより、所定時間間隔でトーンジェネレータタスク
20を確実に実行することが可能となる。また、ウェー
ブタスク21などの実時間処理が必要とされるタスクに
ついても同様に実行させることができ、汎用コンピュー
タ上において実時間処理を可能とすることができる。そ
して、該所定の時間間隔のうち実時間処理が行われてい
ない期間には、汎用のOSをタスクの1つとして動作さ
せ、該OS上で動作するアプリケーションプログラムを
前記実時間処理と並列的に実行することが可能である。
【0027】なお、タスクが実行中(RUNNING )状態に
あるときに、sleep 命令あるいはpend命令のような特定
の事象の発生を待つ命令が実行されたときはそのタスク
は待ち状態(BLOCKED )とされ、他のタスクがディスパ
ッチされる。そして、待ち状態(BLOCKED )とされてい
たタスクは、当該特定の事象が発生したときに再び実行
可(READY )状態とされて待ち行列につながれる。さら
に、exit命令やdelete命令などが実行されたときは、タ
スクは終了(TERMINATED)状態となる。
【0028】さて、このような構成において、音源MI
DIドライバ16、トーンジェネレータタスク20、コ
ーデックドライバ24およびコーデック回路26により
本発明のソフトウエア音源が実現される。音源MIDI
ドライバ16は、MIDIシーケンサソフトウエア12
などから、インターフェース15を介してMIDI信号
の入力イベントがあったときに起動される。起動される
と、音源MIDIドライバ16は、入力されたMIDI
信号に応じて、ノートオン、ノートオフ、プログラムチ
ェンジ、コントロールチェンジ、システムエクスクルー
シブなどの処理を行う。ノートオンイベントの場合は、
新規な発音を音源であるトーンジェネレータタスク20
の発音チャンネルに割り当て、該割り当てたチャンネル
に設定するための楽音制御パラメータとノートオンを用
意する。用意される楽音制御パラメータは、MIDIチ
ャンネルごとに選択されている音色の音色パラメータを
ノートオンイベントに付随するノートナンバ、演奏タッ
チに応じて加工処理したパラメータである。なお、この
用意された楽音制御パラメータはトーンジェネレータタ
スク20の起動時にトーンジェネレータタスク20の音
源レジスタに転送される。
【0029】トーンジェネレータタスク20は、最大3
2chの波形テーブル合成機能と、モノラル入力ステレ
オ出力のリバーブ機能を有しており、コーデックドライ
バ24とコーデック回路26とからなる出力デバイスか
らの波形データ要求に応じて、1フレーム時間ごとに起
動される。このトーンジェネレータタスク20は、外部
オーディオ入力を受け付け、自ら生成する波形テーブル
合成データと該外部オーディオ入力とに対してリバーブ
処理を行い、処理結果であるオーディオ波形を出力デバ
イスに出力する。
【0030】トーンジェネレータタスク20における処
理の全体構造を示す等価回路図を図4に示す。この図に
おいて、41は最大32チャンネルの波形テーブル合成
処理、点線で囲んだ42は外部ステレオオーディオ信号
入力処理、43はリバーブ処理を表している。また、4
4は波形データメモリ、50は補間演算部、51および
65はデータ変換部、52、53および54は乗算部、
55は整数形式で入力されるステレオオーディオ入力信
号を受け取り、浮動小数点形式のデータに変換するとと
もに、左チャンネル信号L、右チャンネル信号Rおよび
両者の和L+R信号を出力するデータ変換部、56、5
7、59および62は加算部、58および64はインタ
ーリーブを行うための加算部、60、61、63、66
および67はバッファ、65は浮動小数点形式のデータ
を整数形式のデータに変換するデータ変換部である。な
お、データ変換部55に入力されるステレオオーディオ
入力信号は、コーデック26からの入力あるいは波形再
生ソフトウエア14からWAVE入出力ドライバ17を
介しての入力のいずれであってもよい。
【0031】従来のハードウエア音源においては1サン
プル毎に波形を生成し、順にD/A変換処理を行ってい
るが、本ソフトウエア音源およびオーディオ入出力にお
いては、波形データはフレーム単位で処理される。フレ
ームとは、あるまとまった処理を行う単位であり、本ソ
フトウエア音源およびオーディオ入出力においては5m
s程度の再生時間に相当するサンプル数分のバッファを
確保し、これを1フレームの単位としている。このバッ
ファのサイズは波形計算周波数(サンプル周波数)によ
って変化する。図4における各バッファ60、61、6
3、66および67は、いずれも、1フレーム分の容量
を有するバッファである。
【0032】また、図4において、太い矢印は32ビッ
トの浮動小数点形式で表されたデータを示し、細い矢印
は16ビット整数データを表している。さらに、太い四
角で囲まれたバッファ60、61および63は32ビッ
ト浮動小数点形式のデータを格納するバッファを表して
おり、細い四角で囲まれたバッファ66および67は1
6ビット整数データを格納するバッファを表している。
なお、このシステムにおいて使用しているCPUにおい
ては、浮動小数点乗算の方が整数乗算よりも高速に実行
されるので、信号処理は極力浮動小数点形式で行うよう
になされている。ただし、波形データメモリ44上の波
形データはほとんど8ビットの整数データであるため
に、補間演算部50においては、整数で乗算を実行し、
その後にデータ変換部50において浮動小数点形式に変
換して実行時間を短縮している。
【0033】さて、波形テーブル合成処理41は、基本
的に波形補間とゲイン調整とからなっている。波形デー
タメモリ44から読み出した波形データは補間演算部5
0により音源MIDIドライバ16から供給されるピッ
チ情報を用いて補間され、データ変換部51により浮動
小数点形式に変換される。この出力は3つの出力系列、
すなわち、左チャンネル信号L、右チャンネル信号R、
および、リバーブ入力信号L+Rに分けられて、それぞ
れ、乗算部52、53および54において音源MIDI
ドライバ16から供給されるVolume情報(各発音チャン
ネルの音量エンベロープ信号にそれぞれ上記3系列の各
出力毎のレベルを乗じたデータ)が乗算される。この各
発音チャンネルから出力される波形データは、それぞ
れ、加算部56、57および62において互いに加算さ
れる。各加算部56、57および62には、それぞれ、
データ変換部55から外部ステレオオーディオ入力信号
の左チャンネル信号L、右チャンネル信号Rおよび和の
信号L+Rも供給されており、生成された全発音チャン
ネルの波形データの和と外部オーディオ入力信号とのミ
キシングが行われる。
【0034】加算器56および57の出力は、それぞ
れ、DryLバッファ60およびDryRバッファ61に格納さ
れ、また、加算器62の出力はリバーブ用バッファRev
63に格納される。バッファRev 63に格納されたL+
Rデータはリバーブ処理43に入力されてリバーブ演算
が行われ、生成されたリバーブ出力データ(反響音デー
タ)は、LとR独立にゲイン調整された後、DryLバッフ
ァ60およびDryRバッファ61に格納されているデータ
にそれぞれ加算され、さらにデータ変換部65において
整数形式に変換された後、バッファ66および67を介
してオーディオ出力データとしてコーデック26のD/
A変換器に出力されることとなる。
【0035】これらの処理の処理タイミングを図5を用
いて説明する。この図において、横軸は時間軸であり、
時間軸の上方に記載されている[A]は音源MIDIド
ライバ16の処理を示し、時間軸の下に記載されている
[B]はトーンジェネレータタスク20における処理を
示している。また、最下部の2行はオーディオ入出力ス
トリームを表しており、オーディオ入力デバイスはライ
ブラリ23に用意されているコーデック回路26からの
A/D波形データ入力ルーチン、オーディオ出力デバイ
スは同じくコーデック回路へのD/A変換するための波
形データ出力ルーチンである。
【0036】このシステム全体は、3種類の優先順位を
もつ処理単位に大きく分けられる。最も優先順位の高い
処理は、タイマ割り込みによるMIDI信号の発生によ
って起動される音源MIDIドライバ16の処理であ
り、MIDI信号から楽音制御パラメータへの変換が当
該割り込み処理中において実行される。ただし、タイマ
割り込みではなくアプリケーションから直接MIDI出
力した場合には、最も低い優先順位とされる。次の優先
順位は、トーンジェネレータタスク20であり、このト
ーンジェネレータタスク20は、オーディオ入出力バッ
ファからのreadyッセージ(オーディオ出力デバイスが
次のデータを要求するときに出すoutput readyメッセー
ジおよびオーディオ入力デバイスがデータ送出可能のと
きに出すinput ready メッセージ)、音源MIDIドラ
イバ16が新しい楽音制御パラメータを送るときに出す
TG params receivedメッセージおよび音源MIDIドラ
イバ16が波形をロードするときに出すwave load requ
est メッセージによって起動される。MIDIシーケン
サなどのその他のアプリケーションは、最も優先順位の
低い処理とされている。
【0037】図5のトーンジェネレータタスク20にお
ける処理[B]において、1フレーム分に相当するデー
タの処理は、(1)オーディオ入力データを読む、
(2)楽音制御パラメータを処理する、(3)32ch分
の波形を演算生成する、(4)必要に応じて強制ダンプ
を行う、(5)音源ステータスを送る、(6)リバーブ
計算を行う、(7)データをオーディオ出力する、とな
る。これらのうちで、最もCPU負荷が大きく、かつ、
変動の激しいものは(3)の32ch波形生成処理であ
り、1フレームの間に計算が完了しない可能性がある。
したがって、処理の順番としては、不確定なものを一番
最後にもっていくことが合理的であるため、処理は上記
(1)から始めるのではなく、上記(5)から始めるよ
うになされている。
【0038】上記(5)〜(7)は、一連の処理とされ
ており、オーディオ出力デバイスからのoutput readyメ
ッセージにより起動される。このメッセージが受信さ
れ、トーンジェネレータタスク20が起動されると、ま
ず、処理(5)において音源MIDIドライバ16に対
し、トーンジェネレータタスク20の動作状況である音
源ステータス(TG status )を送出し、音源MIDIド
ライバ16のコールバック関数が呼ばれる。音源MID
Iドライバ16はこのコールバック関数中でTG status
を読み、トーンジェネレータタスク20に対して用意さ
れている発音チャンネルの楽音制御パラメータおよびノ
ートオン信号などからなるTG params をトーンジェネレ
ータタスク20の音源レジスタに設定する。続いて、ト
ーンジェネレータタスク20は(6)のリバーブ演算の
実行を開始し、バッファ63に格納されている波形デー
タを入力としてリバーブ演算処理を実行するとともに、
その出力をそれぞれ1フレーム分のDryLバッファ60お
よびDryRバッファ61に足し込む。そして、(7)のオ
ーディオデータ出力処理を開始し、各バッファ60およ
び61に格納されている波形データを出力ドライバ用の
1フレーム分の波形データに変換して出力ドライバに受
け渡しして当該一連の処理を終了する。
【0039】次に行われる一連の処理は(1)のオーデ
ィオ入力処理である。この処理はinput ready メッセー
ジによって起動される。実際には、図5に図示するよう
に、input はoutputよりも先にready になっているため
に、上記(7)の処理の後に続けて処理(1)が呼び出
されることとなる。このオーディオ入力処理(1)にお
いては、オーディオ入力デバイスあるいはWAVE入出
力ドライバ17から1フレーム分の入力データが読み込
まれる。
【0040】最後の一連の処理は(2)〜(4)であ
る。これらはTG params の受信メッセージにより起動さ
れる。実際には、前述したように、処理(6)よりも前
にTG params は受信されているために、前記処理(1)
のあとに続けてこの一連の処理が読み出される。ここで
は、まず、処理(2)において、音源MIDIドライバ
16により音源レジスタに設定されている楽音制御パラ
メータ、ノートオン信号などのTG params が解釈され、
波形生成演算用のデータに変換される。続いて、処理
(3)において、前記(2)において準備されたパラメ
ータやデータなどに基づいて、最大32ch分の波形生成
処理が行われる。この波形生成処理は、前述したよう
に、波形データメモリ44のアドレスを楽音ピッチに応
じた速さで進めながら波形データを読み出し、読み出さ
れたサンプル間の補間を行い、音量エンベロープ(AEG)
などのvolume情報に基づく音量制御を行うことにより、
1ch分の波形データを生成し、これを最大32ch分繰り
返すことにより行われる。また、音量制御は左チャンネ
ルL、右チャンネルRおよびリバーブ用のL+Rの3系
列独立に行われ、生成された1フレーム×3系列分の波
形データは、各バッファ60、61および63に足し込
まれる。
【0041】この処理(3)が終了したときに、当該フ
レームの処理は終了し、次のoutputreadyメッセージが
受信されるまでの時間は、汎用のOSが動作されること
となる。なお、図5の(ロ)に示すように、次のoutput
readyメッセージが来ても、上記(3)の波形生成処理
が終了していないときには、該波形生成処理は打ち切ら
れることとなるが、このとき未計算チャンネルに対して
強制ダンプ処理(4)が行われて、クリックノイズが発
生しないようになされている。なお、上述した最大32
チャンネル分の波形生成処理は、上記打ち切りが行われ
た場合に影響が目立つチャンネル、例えば現在のレベル
が大きいチャンネル、から順に行われるようになってい
る。
【0042】また、上述したトーンジェネレータタスク
20の実行中に、より優先順位の高いタイマ割り込みに
よるMIDIイベントが発生したときには、制御は強制
的に音源MIDIドライバ16に移され、そこで対応す
る処理が行われる。この様子は、図5の[A]に矢印で
示されている。この図には7個のMIDIイベントが発
生した様子が示されている。
【0043】以上説明したトーンジェネレータタスク2
0を図6〜7のフローチャートによりさらに詳細に説明
する。まず、図6のステップS100において、このト
ーンジェネレータタスク20が生成される。トーンジェ
ネレータタスク20はステップS100において生成さ
れた後、ステップS101においてスリープ状態にされ
る。該スリープ状態にあるときに、メッセージの受信な
どのイベントが発生してアウェイクされてレディ状態と
なり、タスクディスパッチャによりディスパッチされる
と、ステップS102に移り、イベントが判定される。
すなわち、(a)オーディオ入/出力デバイスからのre
ady であるのか、(b)音源MIDIドライバ16から
の波形データロード要求wave load request であるの
か、それとも、(c)音源MIDIドライバ16からの
TG params の受信メッセージであるのかが判定される。
【0044】この判定結果が、(a)のオーディオ入/
出力デバイスからのready メッセージの受信であるとき
は、ステップS103に進み、該メッセージが、オーデ
ィオ出力デバイスからのoutput readyであるのか、オー
ディオ入力デバイスからのinput ready であるのかが判
定される。この判定結果がオーディオ出力デバイスから
のoutput readyメッセージであるときは、ステップS1
04においてtriggerラグを「1」とし、次にステップ
S105において音源MIDIドライバ16に対してTG
status を送出する(図5における処理(5))。そし
て、ステップS106において、リバーブがオンとされ
ているか否かを判定し、該判定結果がYESのときはス
テップS107においてリバーブ計算処理(図5におけ
る処理(6))を行った後に、また、該判定結果がNO
のときは直接ステップS108に進む。そして、ステッ
プS108においてオーディオデータを出力(図5にお
ける処理(7))し、前記ステップS101に戻り、ス
リープ状態となる。
【0045】一方、前記ステップS103における判定
結果がオーディオ入力デバイスからのinput ready メッ
セージであるときには、ステップS109に進み、trig
gerラグの状態が判定される。この判定の結果、trigger
=1のときはステップS110に進み、オーディオ入
力データの読み込み(図5における処理(1))を行っ
た後、前記ステップS101に戻りスリープ状態とな
る。また、trigger =0のときは前記ステップS101
に戻りスリープ状態となる。ここで、trigger フラグ
は、(3)波形生成処理が終了したときに「0」とさ
れ、output readyメッセージが受信されたときに「1」
にセットされるフラグである。したがって、このステッ
プS109においてtrigger フラグの状態を判定するこ
とにより、output readyメッセージに対する処理よりも
先にinput ready メッセージに対する処理が行われるこ
とがないようになされている。
【0046】さて、前記ステップS102における判定
結果が(b)の音源MIDIドライバ16からの波形デ
ータロード要求wave load request メッセージであると
きは、ステップS111に進み、該ステップS111に
おいて波形データを読み込んでメモリに格納する処理を
行い、前記ステップS101に戻ってスリープ状態とな
る。なお、この波形データロード要求は、トーンジェネ
レータタスク20の初期化時などに音源MIDIドライ
バ16から波形データを送るために出されるメッセージ
である。
【0047】前記ステップS102における判定結果が
(c)のTG params の受信メッセージであるときはステ
ップS112に進み、該ステップS112において、音
源MIDIドライバ16により音源レジスタに設定され
ている楽音制御パラメータTGparams の処理(図5にお
ける処理(2))が行われる。具体的には、受信した楽
音制御パラメータTG params から波形データメモリアド
レス、ピッチ情報、EGパラメータ、パンデータ、LF
O制御データなどの音源制御パラメータが決定される。
続いて、ステップS113に進みTG EXIT であるか否か
が判定され、該判定結果がYESのときは、ステップS
116に進みタスクは終了する。該判定結果がNOのと
きはステップS114に進み、該ステップS114にお
いて最大32チャンネル分の波形生成処理(図5の処理
(3))を行う。この処理の詳細については、図7
(a)および(b)を参照して後述する。この波形生成
処理が終了した後は、ステップS115に進みtrigger
フラグを「0」にリセットして、前記ステップS101
に戻り、スリープ状態となる。
【0048】前記ステップS114の32ch分の波形
生成処理について、図7の(a)および(b)を参照し
て説明する。前記ステップS114の波形生成処理が図
7の(a)のステップS200において開始されると、
まず、ステップS201において、新しいキーオンデー
タが発生したか否かが判定される。ここで、新しいキー
オンデータ有りと判定されると、ステップS202に進
み、発音チャンネルの演算順序の並べ替えが行われる。
これは、複数チャンネルの波形生成演算を行っている途
中で前述したようにoutput ready requestが発生して該
演算を途中で打ち切らなければならなくなる場合があ
り、重要なチャンネルについては先に演算を完了してお
くようにするために行われる処理である。なお、cは発
音チャンネル数である。
【0049】このステップS202が終了した後、ある
いは、前記ステップS201において新しいキーオンデ
ータの発生がないと判定されたときには、ステップS2
03が実行される。このステップS203においては、
演算チャンネル数をカウントするカウンタiに「0」を
セットして該カウンタiをリセットし、変数vNumに
発音チャンネル数cと同時発音許可チャンネル数rのう
ちの小さい方の値をセットする。この変数vNumは演
算すべきチャンネルの数を表す変数である。続いて、ス
テップS204に進み、カウンタiの値が変数vNum
よりも小さいか否かを判定する。この判定結果がNO、
すなわち、カウンタiの値が演算すべきチャンネル数v
Numよりも大きいか等しいときには、ステップS20
9に進み、この波形生成処理を終了する。
【0050】ステップS204の判定結果がYES、す
なわち、カウンタiの値が変数vNumよりも小さいと
きには、ステップS205に進みoutput ready request
が発生しているか否かが判定される。この判定結果がY
ESのときはステップS206に進み、そのチャンネル
iの発音信号の強制ダンプ処理(図5における(4))
が行われる。一方、この判定結果がNOのときは、ステ
ップS207において、第iチャンネルの波形生成演算
が行われる。この詳細は図7の(b)を参照して後述す
る。第iチャンネルについての強制ダンプ処理206あ
るいは波形生成演算207が終了すると、ステップS2
08に進みカウンタiをインクリメントして、再びステ
ップS204に戻り、今度はその次のチャンネルi+1
に対して前記ステップS204からステップS208の
処理が繰り返される。
【0051】前記ステップS207の第iチャンネルの
波形生成演算の詳細について図7の(b)を参照して説
明する。この波形生成演算処理は、ステップS211〜
S218の一連の処理により第iチャンネルの1サンプ
ル分の波形データが生成され、この一連の処理を複数回
繰り返すことにより、複数サンプル分の波形データ生成
されるようになされている。
【0052】第iチャンネルの波形生成演算S207が
ステップS210において開始されると、まず、ステッ
プS211において、前回の波形生成演算時におけるス
テップS214において既に算出されている読出アドレ
ス(readPtr )の整数部に応じて、波形データメモリか
ら補間に必要な数の波形サンプルを読み出し、前記読出
アドレスの小数部に応じて該波形サンプル間の補間演算
が行われる。これにより一つの補間サンプルが生成され
る。次に、ステップS212においてdryLバッファ6
0、dryRバッファ61およびrev バッファ63に足し込
まれる各データの音量データ(ボリュームレベル)の計
算が行われる。これは、音量エンベロープAEG 、音量vo
l 、変調AM、パンPan 、先述した3系列の各レベルSend
Level の各パラメータを加算することにより行われる。
続いて、ステップS213において、ステップS212
において求められた3系列の各ボリュームレベルをそれ
ぞれ対応する補間演算結果データ(補間サンプル)と乗
算し、その結果を各系列に対応するバッファに足し込
む。
【0053】続いて、ステップS214に進み、fナン
バー(ピッチ情報)を加算して波形データメモリ44の
新たな読み出しアドレスreadPtr を作成する。このよう
に、波形データメモリの読み出しアドレスreadPtr をF
ナンバーに応じた速度で増加させていくことにより、波
形データメモリ(波形テーブル)からFナンバーに比例
したピッチ(音高)を有する波形が読み出されることと
なる。また、Fナンバが小数部を有するデータであると
きは、より精密なピッチの制御を行なうことができる。
【0054】次に、ステップS215に進み、音量エン
ベロープAEG の更新を行う。次いで、ステップS216
において該更新した音量エンベロープAEG がkeyoffLeve
l よりも小さい値であるか否かが判定される。この判定
結果がNOのときはステップS217に進んでLFO の更
新処理を行い、次いでステップS218において音量パ
ラメータvol とパンパラメータpan の平滑化処理(補間
処理)を行う。(これら、ステップS215、S217
およびS218の詳細については後述する。)次に、ス
テップS219に進み、このチャンネルについて生成す
べき波形サンプルがまだ残っているか、すなわち、この
チャンネルについて1フレームに相当する数のサンプル
の波形の生成が終わっていないかどうかを判定し、その
判定結果がYES、すなわち、演算生成すべきサンプル
があるときは再びステップS211に戻る。この判定結
果がNOのときは該チャンネルの全てのサンプルについ
ての波形演算処理が終了したのであるから、ステップS
221に進み、ステップS207の当該チャンネルの波
形生成演算を終了する。
【0055】また、先のステップS216の判定におい
て、更新された音量パラメータの値がkeyoffLevel より
も小さく、判定結果がYESとなったときは、ステップ
S220においてkeyoff処理を行い当該チャンネルを消
音状態に設定した後、ステップS221に進んで、この
チャンネルの波形生成演算207を終了する。
【0056】ここで、前述したエンベロープ波形および
LFO波形について、図13を参照して説明する。図1
3の(a)はエンベロープ(EG)波形の典型的な例を
示すものであり、周知のように、アタック(ATTACK)、
ディケイ(DECAY )、サスティン(SUSTAIN )およびリ
リース(RELEASE )の4つのセグメントからなってい
る。すなわち、キーオン(keyon )が発生すると、アタ
ックレート(ATKrate )の傾きをもって最大レベル(EG
MAXlevel)まで一気に上昇し(アタックセグメント)、
次いで、該最大レベルからサステインレベルまでディケ
イレート(DCrate)の傾きで減衰する(ディケイセグメ
ント)。そして、サステインレベル(SUSlevel)で一定
時間定常状態となり(サステインセグメント)、キーオ
フ(keyoff)が入力されると、リリースレート(RLSrat
e )の傾きで減衰する。そして、レベルが人間の耳には
聞こえない程度のキーオフレベル(keyofflevel )に達
すると、ダンプレート(DMPrate )によりクリックノイ
ズが発生しない程度に急速に減衰させる。
【0057】また、LFO(Low Frequency Oscillato
r)波形は、楽音波形に対する変調波形を得るために用
いられるもので、図13の(b)に示すように、傾きLF
Orateより決定されるLFO周期を有する鋸歯状波とな
っている。このLFO波形を用いてテーブル参照や演算
により、例えば、正弦波などの必要な変調波形を得るこ
とができる。
【0058】このようなEG波形やLFO波形は楽音波
形のサンプリング周期に比して非常にゆっくりと変化す
るものである。上記した図7(b)に示した第iチャン
ネルの波形生成演算においては、各サンプル毎にこの振
幅EGの更新(S215)、LFOの更新(S217)
およびボリュームおよびパンの補間演算(S218)を
行なっているが、EG波形やLFO波形の変化はサンプ
リング周期に比してゆっくりとしたものであるから、こ
れらの演算処理を各サンプリング周期毎に実行する必要
はなく、複数サンプリング周期毎に実行するようにして
も、なんら不都合は生じない。そして、このようにする
ことにより、波形生成演算における演算量を少なくする
ことが可能となる。
【0059】このようにした第iチャンネル波形生成演
算処理の他の実施の形態を図8に示す。この図に示した
実施の形態においては、8サンプル演算毎にAEGの更
新処理、LFOの更新処理およびボリュームとパンの補
間演算処理を行なうものである。なお、これらの演算処
理の頻度は、8サンプル毎とする必要はなく、使用する
CPUの処理速度やCPUの負荷状態に応じて最適な頻
度を選択すればよい。図8において、ステップS230
で第iチャンネルの波形生成演算が開始されると、ま
ず、ステップS231においてサンプル番号をカウント
するカウンタsnの内容を「0」にリセットする。次い
で、ステップS232において、前述したS211(図
7(b))と同様に、波形データメモリから必要な波形
サンプルを読み出し、補間演算が行なわれる。次に、前
回の波形生成演算時におけるステップS250において
既に算出されている各ボリュームレベルをそれぞれ対応
する補間演算結果データと乗算し、その結果を各系列に
対応するバッファに足し込む。次に、ステップS234
において、波形データメモリの新たな読出アドレスを作
成する。
【0060】次に、ステップS235において、サンプ
ル番号カウンタsnの内容が0あるいは8の倍数である
か否かが判定される。この判定の結果がYESのときは
EGやLFOの演算を実行すべきサンプルであるから、
ステップS236に進み、振幅EG(AEG)の更新処
理が行なわれ、その後ステップS237に進む。一方、
このS235の判定結果がNOのときはAEGの更新を
行なうことなくステップS237に進む。S237にお
いて、現在のAEGの値がキーオフレベルよりも小さい
ものであるか否かが判定され、その結果がNOのとき
は、ステップS238に進み、前記S235と同様にこ
のサンプルがLFOの更新処理などを行なうべきサンプ
ルであるか否かの判定が行なわれる。この判定の結果が
YESのときは、ステップS239においてLFOの更
新処理を行ない、次いでステップS240においてボリ
ュームとパンの補間演算を行なった後、S241におい
て3系列の各データのボリュームレベルの更新処理が行
なわれ、このサンプル分の波形生成処理が終了されたこ
ととなり、ステップS242に進む。
【0061】また、前記S238の判定結果がNOであ
るときには、LFOの更新処理などを実行すべきサンプ
ルではないために、この時点でこのサンプル分の波形生
成処理が終了したこととなり、ステップS242に進
む。ステップS242においては、全てのサンプルの処
理が終了したか否かを判定し、処理すべきサンプルが残
っているときには、ステップS243においてサンプル
番号カウンタをインクリメントして前述したステップS
232以降の処理が繰り返される。さらに、前記ステッ
プS237において、AEGがキーオフレベル(keyoff
level )よりも小さいものと判定されたときには、ステ
ップS244のキーオフ処理に進み、波形をダンプレー
ト(図13(a))で急速に減衰させて、このチャンネ
ルiの波形生成処理を終了する。
【0062】この図8に示した実施の形態によれば、S
236のAEGの更新処理、S239のLFOの更新処
理、S240のボリュームとパンの補間処理およびS2
41のボリュームレベルの計算処理が8サンプル毎に実
行されるようになり、前述した図7に示した実施の形態
の場合よりもCPUの演算負荷量を軽減することができ
る。
【0063】第iチャンネルの波形生成演算のさらに他
の実施の形態を図9に示す。この図9における各ステッ
プS261〜S266は、それぞれ、図8におけるステ
ップS231〜S236と同一内容であり、また、図9
のステップS267〜S269はそれぞれ図8のステッ
プS239〜S241と同一内容であり、さらに、図9
のステップS270は図8のステップS237と、図9
のステップS271〜S273は図8のステップS24
2〜S244と、それぞれ同一内容であるから、図9に
おける各ステップの処理内容についての詳細な説明は省
略する。
【0064】この図9に示した実施の形態においては、
ステップS265において当該サンプルがEGやLFO
の演算を行なわないサンプルであると判定されたときに
ステップS270に進み、AEGの値がキーオフレベル
よりも小さいものであるか否かを判定する。また、前記
ステップS265の判定の結果演算を行なうべきサンプ
ルであるときには、ステップS266のAEG更新処
理、S267のLFO更新処理、S268のボリューム
とパンの補間処理およびS269のボリュームレベルの
計算処理を順次行なうようになされている。
【0065】すなわち、上述した図8の実施の形態にお
いては、ステップS236のAEGの更新演算をLFO
更新演算(S239)、ボリュームおよびパンの補間演
算(S240)およびボリュームレベル計算(S24
1)と分離して、AEGの更新演算終了後にAEGの値
がキーオフレベルよりも小さいか否かの判定を行なって
いたが、この図9に示した実施の形態においては、これ
らの演算処理をまとめて行なうようにし、その後にAE
G値の判定を行なうようにしたものである。これによ
り、CPUの演算量は図8の場合と比べて若干増加する
ものの、前述した図7(b)の場合よりは減少してい
る。
【0066】なお、これらの実施の形態においては、A
EG、LFOなどの更新処理の頻度を所定サンプル毎と
することにより演算量を軽減しているが、このほかに、
当該サンプルがEGにおけるどのセグメントにあるかに
応じてEG演算を行なうか否かを決定するようにしても
よい。例えば、アタックセグメントおよびディケイセグ
メントにおいてはEG演算を実行するがサステインセグ
メントにおいては定常状態にあるのであるからEG演算
を省略することができる。このようにEG波形のセグメ
ントに応じてEG演算を省略することにより、演算頻度
を実質的に低下させることも可能である。
【0067】次に、AEGの更新処理(図7(b)のス
テップS215、図8のS236および図9のS26
6)の詳細について図10を参照して説明する。AEG
更新処理が開始されると、まず、ステップS301にお
いて、EGパラメータ(EGPARM)、振幅EGの現在の値
(aeg )および演奏タッチ情報(touch )が読み込まれ
る。このEG制御情報は当該発音チャンネルにおいて生
成される楽音に対応するEG波形の各セグメントの継続
時間、目標値(EGMAXlevel、SUSlevel) およびアタック
レート(ATKrate )、ディケイレート(DCrate)、リリ
ースレート(RLSrate )などからなる。
【0068】次にステップS302に進み、現在キーオ
ン中であるか否かが判定される。この判定の結果がNO
であるときは、キーオフであるからステップS303に
進み、リリースセグメントに移行する。また、キーオン
中であるときはそのままステップS304に進む。この
ステップS304において、現在のセグメントがサステ
インセグメントでないか否かが判定される。この判定結
果がNO、すなわち、サステインセグメントであるとき
は、AEGは定常状態であるから、このままAEG更新
処理は終了される。また、S304の判定結果がYES
のときは、ステップS305以下に進み、AEGの更新
が行なわれることとなる。
【0069】EGの各セグメントのレート値などのEG
パラメータは実数値で記憶されているが、本発明におい
ては、EG値を整数として取り扱っているため、AEG
の更新は、次のようにして行なわれている。すなわち、
対応するセグメントにおけるレート値をrateとして、そ
の整数部をn、小数部をfとする。そして、f>0のと
きはm=n+1、k=rate/(n+1)、f=0のとき
はm=n、k=rate/n=1とする。そして、kを累算
し、その値が1を越える毎に現在のAEG値aeg に整数
値mを加算することにより、AEGを更新するようにし
ている。このようにすることにより、レート値rateの小
数切り上げ値mをrate/mの確率で加算することがで
き、結局はm・(rate/m)=rateを現在値aeg に加算
してAEGの更新をしていることとなる。
【0070】このために、まずステップS305におい
て、aegフラクションレジスタ(aegfrac reg )に前
述したkの値を足し込む。このaegfrac reg は、前述し
たkを累算するためのレジスタである。そして、ステッ
プS306において、該aegfrac reg の内容が1よりも
大きくなったか否かを判定する。この判定の結果がNO
のときは、前述したように、現在のAEG値の更新をし
ないのであるから、そのままこの処理を終了する。ま
た、aegfrac reg の内容が1を越えてS306の判定結
果がYESとなったときは、ステップS307に進み、
現在のAEG値aeg にm=(当該セグメントのレート値
rateの整数部n+1)を加算して新たなaeg とし、該新
たなaeg に演奏タッチ情報TOUCH を乗算して、更新され
たAEG値を求める。
【0071】次に、ステップS308においてaegfrac
reg の内容から1を減算し、次回のkの累算に備える。
続いて、ステップS309において、aeg は目標値(ア
タックセグメントのときはEGMAXlevel、ディケイセグメ
ントのときはSUSlevel)に達したか否かが判定され、そ
の判定結果がYESのときはステップS310において
次のセグメントに移行し、NOのときはそのまま、この
回のAEG更新処理を終了する。
【0072】次に、LFO更新処理(図7(b)のS2
17、図8のS239および図9のS267)の詳細に
ついて説明する。このLFO制御データも上述したEG
パラメータと同様に実数値で記憶されているが、実際の
LFOパラメータは整数で取り扱っているために、上述
したEG値と同様に確率的な演算により更新されてい
る。 まず、ステップS321において、記憶されてい
るLFO制御データ、すなわちLFOレート(LFOrate
)と、現在のLFO位相値(lfop)を読み込む。ここ
で、上述したEGの場合と同様に、読み出されたLFO
レート値(LFOrate )の整数部をn、小数部をfとし
て、f>0のときはm=n+1、k=LFOrate /(n+
1)、f=0のときはm=n、k=LFOrate /n=1と
する。そして、kを累算し、その値が1を越える毎に現
在のLFO値lfopに整数値mを加算することにより、L
FO値を更新するようにしている。
【0073】すなわち、ステップS322において、l
foフラクションレジスタ(lfofrac reg )にkを足し
込み、その値が1を越えたか否かをステップS323に
おいて判定する。この判定の結果がNOのときはこの回
のLFO更新処理を終了する。また、YESのときは、
ステップS324において、LFOの現在位相値lfopに
m(=LFOrate の整数値n+1)を加算して、新たな現
在位相値lfopに更新する。続いて、ステップS325に
おいてlfofrac reg の内容から1を減算して次回の処理
に備え、ステップS326に進む。S326において現
在位相値lfopが目標値lfopdistに達したか否かを判定す
る。この判定結果がNOのときはそのままステップS3
28に進む。一方、lfopが目標値lfopdistに到達し、S
326の判定結果がYESとなったときは、ステップS
327においてlfopを0にリセットする。これにより、
図13(b)に示したように鋸波状波のLFO値が生成
されることとなる。次にステップS328が実行され、
現在のLFO位相値lfopの値に基づいて、テーブル参照
あるいは演算により所定のLFO波形の振幅値lfo求め
られる。以上、図13(b)のような鋸歯状波のLFO
値を発生して変調波形として用いたり、あるいはこの鋸
歯状波LFO値に基づいて各種変調波形を発生する方法
を実施例として挙げて説明したが、他に直接的な演算に
よって所望の変調波形のLFO値を求めるようにしても
よいし、また単純に順次、所定の変調波形テーブルを参
照するようにしてもよい。
【0074】次に、図12に基づいて、ボリュームおよ
びパンの計算処理(図7(b)におけるS218、図8
のS240および図9のS268)について説明する。
なお、このボリューム情報およびパン情報はユーザーの
操作により設定されるものである。まず、ステップS3
31においてボリューム情報の現在値vol がユーザーに
よってセットされた目標値に等しくなっていないかどう
かかを判定する。vol目標値と等しくなっており、この
判定結果がNOとなったときは、ステップS332に進
む。また、目標値と等しくないときはステップS332
に進み、vol データの補間処理を行ない補間されたデー
タをあらたなvol データとする。
【0075】次に、ステップS332において、パンデ
ータの現在値pan がユーザーにより設定された目標値と
等しくないか否かを判定する。pan が目標値と等しく、
この判定結果がNOとなったときは、このままでボリュ
ームおよびパンの計算処理を終了する。一方、S333
のYESとなったときは、ステップS334においてパ
ンデータの補間処理を行ない、補間後のデータを新たな
pan データとする。
【0076】なお、上記した実施の形態においては、ト
ーンジェネレータタスク20を出力ドライバの1フレー
ム分の再生終了時に発生されるoutput readyメッセージ
により起動しているが、必ずしもこれに限られることは
ない。トーンジェネレータタスク20における(5)〜
(7)の処理は1フレーム時間に比べて短時間で終了す
るものであるから、トーンジェネレータタスク20を1
フレームの再生時間の中程で起動するようにしてもよ
い。また、一定時間長の各フレーム毎に起動するように
しなくても、出力ドライバにセットされた波形データが
少なくなったことを検出した時点で起動するようにして
もよい。
【0077】また、波形データの受け渡し要求(output
readyメッセージ)があったときにまず、波形データの
受け渡しを行い、その後に波形生成演算をおこなうとい
う、本発明の波形生成方法は、ソフトウエア音源の場合
に限らず、電子楽器などに内蔵された専用の楽音発生装
置にも適用することができる。さらに、生成した波形デ
ータと外部から入力された波形データを合成すること、
および、外部から入力された波形データを複数ステージ
の波形生成演算処理の途中のステージに挿入すること
も、ソフトウエア音源の場合に限らず、専用の楽音発生
装置の場合にも適用することができる。
【0078】さらにまた、上記においては、前記したよ
うに処理(5)、(6)、(7)、(1)、(2)、
(3)の順で一連の処理を行っているが、処理の順序は
必ずしもこれに限られることはない。さらにまた、上記
実施の形態においては、波形生成演算処理(3)を連続
して行っているが、必ずしもこれに限られることはな
く、複数個に分割して行うようにしてもよい。
【0079】さらにまた、上記においては、MIDIイ
ベントの割込処理において発音割当および音源レジスタ
の設定までまとめて実行するようになっていたが、この
割込処理において発音割当処理のみを実行するようにし
たり、あるいは、同割込処理では単に発生したMIDI
イベントをバッファに取り込む取込処理のみを実行する
ようにしてもよい。この場合には、MIDI割込処理か
ら発音割当ないし音源レジスタの設定を省略するかわり
に、同様の処理を例えば音源処理中で実行すればよいの
である。または、さらに、タイマなどで別の割込要因を
設定し、その割込処理で実行することも可能である。
【0080】さらにまた、上記割込処理は、上述したよ
うな割当処理や取込処理に限定されるものではなく、楽
音生成につながる演奏情報処理に関するものならばどの
ような処理でもよい。さらにまた、楽音生成方法は上述
した実施の形態のような波形メモリ方式に限定されるこ
とはなく、FM方式、物理モデル方式、ADPCM方式
など、どのような方式のものであってもよい。
【0081】
【発明の効果】本発明によれば、任意の汎用のOSと並
列的に波形生成演算を安定して実行することが可能とな
る。また、波形再生部から要求があったときに速やかに
波形データを出力することができ、データの受け渡しが
遅れる危険性をなくすことができる。さらに、外部から
入力された波形データに対して、ソフトウエア音源の音
色制御処理を施すことが可能となる。
【0082】さらにまた、演奏情報が発生した時点で処
理が増えて音源処理があまり実行できなくても、それ以
外の時点でその穴埋めをすることができるので、音源処
理を安定化することができる。さらにまた、演奏情報が
発生した時点での処理の増加分を空き時間内に分散化さ
せることができ、一時的な処理の増加を防止することが
できる。さらにまた、EG波形演算やLFO演算を間欠
的に行なうことにより、波形生成のための演算量を少な
くすることが可能となり、波形生成による処理負担を軽
減することができる。
【図面の簡単な説明】
【図1】 本発明の楽音発生方法が実行される処理装置
の一般的な構成を示すブロック図である。
【図2】 本発明におけるソフトウエアモジュール構成
を示す図である。
【図3】 タスクの実行状態を説明するための図であ
る。
【図4】 トーンジェネレータタスクの機能を説明する
ための図である。
【図5】 楽音発生に関する各処理の実行タイミングを
説明するための図である。
【図6】 トーンジェネレータタスクのフローチャート
である。
【図7】 波形生成演算のフローチャートである。
【図8】 波形生成演算の他の実施の形態を示すフロー
チャートである。
【図9】 波形生成演算のさらに他の実施の形態を示す
フローチャートである。
【図10】 EG波形計算のフローチャートである。
【図11】 LFO波形計算のフローチャートである。
【図12】 ボリュームおよびパンの補間演算のフロー
チャートである。
【図13】 EG波形およびLFO波形の例を示す図で
ある。
【符号の説明】
1 CPU、2 ROM、3 RAM、4 タイマ、
5、27 MIDIインターフェース、6 キーボー
ド、7 ディスプレイ装置、8 ハードディスク装置、
9、26 コーデック回路、10 サウンドシステム、
11 音源ミキサ制御ソフト、12 MIDIシーケン
サソフト、13 ゲームソフトなど、14波形再生ソフ
ト、15、18 インタフェース、16 音源MIDI
ドライバ、17 WAVEドライバ、19 タスクディ
スパッチャ、20 トーンジェネレータタスク、21
ウェーブタスク、22 ミキサタスク、23 ライブラ
リ、24 コーデックドライバ、25 外部MIDIド
ライバ、41 波形テーブル合成処理、42 外部ステ
レオオーディオ信号入力処理、43 リバーブ処理、4
4 波形データメモリ、50 補間演算部、51、5
5、65 データ変換部、52、53、54 乗算部、
56、57、58、59、62、64 加算部、60、
61、63、66、67 バッファ、

Claims (6)

    【特許請求の範囲】
  1. 【請求項1】 次の(1)〜(4)のステップを含む、
    演算装置において実行される楽音発生方法。 (1)所定のオペレーティングシステムを実行するシス
    テムステップ (2)前記所定のオペレーティングシステム上で実行さ
    れるアプリケーションプログラムからの指示に基づい
    て、所定期間ごとに波形データを所定サンプル数ずつ演
    算生成する波形生成ステップ (3)前記波形生成ステップにより演算生成された波形
    データをサンプリング周期毎に1サンプルずつ出力する
    出力ステップ (4)前記所定期間内に、前記出力ステップからの要求
    に応じて前記システムステップと前記波形生成ステップ
    との間でタスク切換を行う制御ステップ
  2. 【請求項2】 (1)演奏情報を入力する入力ステッ
    プ、 (2)所定期間内に入力された演奏情報に基づいて、該
    所定期間に対応した波形データを演算生成する波形生成
    ステップ、 (3)所定期間分の波形データをサンプリング周期毎に
    1サンプルずつ出力する出力ステップ、 (4)前記波形生成ステップにおいて演算生成された所
    定期間分の波形データを、前記出力ステップに受け渡し
    する受け渡しステップ、 (5)前記出力ステップに受け渡された波形データの出
    力が進行したことを検出して、波形データの受け渡しを
    要求する要求ステップを含み、前記要求ステップからの
    要求に応じて、前記受け渡しステップが実行され、その
    後に前記波形生成ステップが実行されることを特徴とす
    る、演算装置において実行される楽音発生方法。
  3. 【請求項3】 次の(1)〜(5)のステップを含む、
    演算装置において実行される楽音発生方法。 (1)演奏情報を入力する入力ステップ (2)所定期間内に入力された演奏情報に基づいて、該
    所定期間に対応した波形データを演算生成する波形生成
    ステップ (3)所定期間分の外部波形データを入力して、前記波
    形生成ステップにより演算生成された波形データと合成
    する波形合成ステップ (4)前記波形合成ステップにおいて合成された前記所
    定期間分の波形データに対して信号処理を施す波形処理
    ステップ (5)前記波形処理ステップにおいて信号処理が施され
    た波形データをサンプリング周期毎に1サンプルずつ出
    力する出力ステップ
  4. 【請求項4】 (1)所定のオペレーティングシステム
    を実行するシステムステップ、 (2)前記所定のオペレーティングシステム上で実行さ
    れるアプリケーションプログラムからの指示に基づい
    て、所定期間ごとに波形データを所定サンプル数ずつ演
    算生成する波形生成ステップ、 (3)前記波形生成ステップにより演算生成された波形
    データをサンプリング周期毎に1サンプルずつ出力する
    出力ステップ、 (4)前記所定期間内に、前記出力ステップからの要求
    に応じて前記システムステップと前記波形生成ステップ
    との間でタスク切換を行う制御ステップを含み、 前記波形生成ステップは、間欠的に楽音パラメータ演算
    を実行するようになされていることを特徴とする、演算
    装置において実行される楽音発生方法。
  5. 【請求項5】 (1)演奏情報を入力する入力ステッ
    プ、 (2)所定期間内に入力された演奏情報に基づいて、該
    所定期間に対応した波形データを演算生成する波形生成
    ステップ、 (3)所定期間分の波形データをサンプリング周期毎に
    1サンプルずつ出力する出力ステップ、 (4)前記波形生成ステップにおいて演算生成された所
    定期間分の波形データを、前記出力ステップに受け渡し
    する受け渡しステップ、 (5)前記出力ステップに受け渡された波形データの出
    力が進行したことを検出して、波形データの受け渡しを
    要求する要求ステップを含み、 前記波形生成ステップは、間欠的に楽音パラメータ演算
    を実行するようになされており、 また、前記要求ステップからの要求に応じて、前記受け
    渡しステップが実行され、その後に前記波形生成ステッ
    プが実行されることを特徴とする、演算装置において実
    行される楽音発生方法。
  6. 【請求項6】 (1)演奏情報を入力する入力ステッ
    プ、 (2)所定期間内に入力された演奏情報に基づいて、該
    所定期間に対応した波形データを演算生成する波形生成
    ステップ、 (3)所定期間分の外部波形データを入力して、前記波
    形生成ステップにより演算生成された波形データと合成
    する波形合成ステップ、 (4)前記波形合成ステップにおいて合成された前記所
    定期間分の波形データに対して信号処理を施す波形処理
    ステップ、 (5)前記波形処理ステップにおいて信号処理が施され
    た波形データをサンプリング周期毎に1サンプルずつ出
    力する出力ステップを含み、 前記波形生成ステップは間欠的に楽音パラメータ演算を
    実行するようになされていることを特徴とする、演算装
    置において実行される楽音発生方法。
JP02332396A 1995-05-19 1996-01-17 楽音発生方法および装置 Expired - Lifetime JP3246312B2 (ja)

Priority Applications (10)

Application Number Priority Date Filing Date Title
JP02332396A JP3246312B2 (ja) 1995-09-20 1996-01-17 楽音発生方法および装置
EP96107770A EP0743631B1 (en) 1995-05-19 1996-05-15 Tone generating method and device
DE69619587T DE69619587T2 (de) 1995-05-19 1996-05-15 Verfahren und Vorrichtung zur Tonerzeugung
CN96100281A CN1129110C (zh) 1995-05-19 1996-05-17 乐音发生方法与设备
CNB031251706A CN100495532C (zh) 1995-05-19 1996-05-17 乐音发生方法与设备
CN 200510116175 CN1763838B (zh) 1995-05-19 1996-05-17 乐音发生方法与设备
CN 200510116176 CN1763839B (zh) 1995-05-19 1996-05-17 乐音发生方法与设备
US08/649,168 US5895877A (en) 1995-05-19 1996-05-17 Tone generating method and device
KR1019960016767A KR100421589B1 (ko) 1995-05-19 1996-05-18 악음생성방법및장치
US09/222,395 US6184455B1 (en) 1995-05-19 1998-12-29 Tone generating method and device

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP7-264629 1995-09-20
JP26462995 1995-09-20
JP02332396A JP3246312B2 (ja) 1995-09-20 1996-01-17 楽音発生方法および装置

Publications (2)

Publication Number Publication Date
JPH09146556A true JPH09146556A (ja) 1997-06-06
JP3246312B2 JP3246312B2 (ja) 2002-01-15

Family

ID=26360663

Family Applications (1)

Application Number Title Priority Date Filing Date
JP02332396A Expired - Lifetime JP3246312B2 (ja) 1995-05-19 1996-01-17 楽音発生方法および装置

Country Status (1)

Country Link
JP (1) JP3246312B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010522364A (ja) * 2007-03-22 2010-07-01 クゥアルコム・インコーポレイテッド 楽器用デジタルインターフェース(midi)ファイルを処理するためのパイプライン技法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010522364A (ja) * 2007-03-22 2010-07-01 クゥアルコム・インコーポレイテッド 楽器用デジタルインターフェース(midi)ファイルを処理するためのパイプライン技法

Also Published As

Publication number Publication date
JP3246312B2 (ja) 2002-01-15

Similar Documents

Publication Publication Date Title
EP0743631B1 (en) Tone generating method and device
US5703310A (en) Automatic performance data processing system with judging CPU operation-capacity
USRE41757E1 (en) Sound source system based on computer software and method of generating acoustic waveform data
JP2970689B2 (ja) オーディオ・シンセサイザ
EP0750290B1 (en) Method and device for forming a tone waveform by combined use of different waveform sample forming resolutions
US6326537B1 (en) Method and apparatus for generating musical tone waveforms by user input of sample waveform frequency
JP3246312B2 (ja) 楽音発生方法および装置
JP3269361B2 (ja) 楽音発生方法および装置
JP3137043B2 (ja) 波形メモリ音源装置および楽音発生装置
JP2797142B2 (ja) 電子楽器用処理装置
CN1763838B (zh) 乐音发生方法与设备
JP3632744B2 (ja) 音生成方法
JP3148803B2 (ja) 音源装置
JP3723973B2 (ja) 音源装置
JPH10207465A (ja) 楽音発生方法および楽音発生装置
JP3275678B2 (ja) 楽音発生方法および装置
JP3285137B2 (ja) 楽音発生装置および楽音発生方法、並びに該方法に係るプログラムを記憶した記憶媒体
JPH0944160A (ja) 楽音生成方法
JP2797138B2 (ja) 電子楽器用処理装置
JPH10124060A (ja) 楽音発生方法、楽音発生装置および楽音発生用プログラムを記録した記録媒体
JP3627590B2 (ja) 音生成方法
JP3693045B2 (ja) 楽音発生装置
JP3693046B2 (ja) 楽音発生装置
JP2000122650A (ja) 音声データ処理装置およびコンピュータシステム
JPH09269774A (ja) 楽音発生装置

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20011002

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: 20071102

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20081102

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20081102

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20091102

Year of fee payment: 8

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

Free format text: PAYMENT UNTIL: 20101102

Year of fee payment: 9

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

Free format text: PAYMENT UNTIL: 20101102

Year of fee payment: 9

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

Free format text: PAYMENT UNTIL: 20111102

Year of fee payment: 10

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

Free format text: PAYMENT UNTIL: 20111102

Year of fee payment: 10

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

Free format text: PAYMENT UNTIL: 20121102

Year of fee payment: 11

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

Free format text: PAYMENT UNTIL: 20121102

Year of fee payment: 11

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

Free format text: PAYMENT UNTIL: 20131102

Year of fee payment: 12

EXPY Cancellation because of completion of term