JP3627590B2 - 音生成方法 - Google Patents
音生成方法 Download PDFInfo
- Publication number
- JP3627590B2 JP3627590B2 JP28390499A JP28390499A JP3627590B2 JP 3627590 B2 JP3627590 B2 JP 3627590B2 JP 28390499 A JP28390499 A JP 28390499A JP 28390499 A JP28390499 A JP 28390499A JP 3627590 B2 JP3627590 B2 JP 3627590B2
- Authority
- JP
- Japan
- Prior art keywords
- sound
- waveform
- channel
- generation
- data
- 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.)
- Expired - Lifetime
Links
Images
Landscapes
- Electrophonic Musical Instruments (AREA)
Description
【発明の属する技術分野】
本発明は、演算処理装置を備える汎用処理装置により楽音を生成できるようにした音生成方法に関するものである。
【0002】
【従来の技術】
従来の楽音生成装置は、通常、MIDI(Musical Instrument Digital Interface)、鍵盤、あるいはシーケンサ等からの演奏情報を入力する演奏入力部、楽音波形を生成する音源部、入力した演奏情報に応じて前記音源部を制御するマイクロプロセッサ(CPU)等から構成されていた。CPUは、入力した演奏情報に応じて、チャンネルアサイン、パラメータ変換等の音源ドライバ処理(演奏処理)を実行し、音源部の割り当てたチャンネルに変換したパラメータと発音開始指示(ノートオン)を音源部に供給する。音源部は、LSI(Large Scale Integrated circuit)等の電子回路(ハードウェア)で構成され、供給されたパラメータに基づいて楽音波形を生成する。
このため、楽音生成装置は楽音を生成するための専用機器となってしまい、楽音を生成する時には専用の楽音生成装置を用意する必要があった。
【0003】
そこで、これを解決するために、CPUによりアプリケーションプログラムを実行し、アプリケーションプログラムに基づいて楽音を生成する楽音生成方法が提案されている。この楽音生成方法においては、楽音を生成するアプリケーションプログラムのほかに他のアプリケーションプログラムを実行させることができ、他の機能も実行させることのできる汎用の演算処理装置により実行することができるものである。
【0004】
【発明が解決しようとする課題】
ところで、演算処理装置(CPU)を備える汎用の装置によりアプリケーションプログラムを実行させて楽音を生成する場合、従来は1サンプリング周期(デジタル・アナログ変換器の変換タイミング)毎に各チャンネルの楽音波形サンプルを発音チャンネル分演算生成するようにしている。従って、CPUは各発音チャンネルの処理を行う場合、まず、前回の当該発音チャンネルの演算に用いた各種レジスタ値をメモリからCPUのレジスタに読み出す等の準備処理が行われる。また、当該発音チャンネルの楽音生成処理後には次回の処理のため、前記レジスタ値をメモリに書き込む必要がある。
すなわち、各発音チャンネルの楽音波形サンプルの演算処理を1サンプルずつ生成するようにしていたため、楽音を生成する楽音生成処理以外の、準備処理に多くのCPUの演算時間が費やされ(オーバヘッドが大きくなる)、演算効率が悪くなり応答や楽音生成処理が遅くなるという問題点があった。
【0005】
また、上記楽音生成方法において、演奏処理とは、入力した演奏情報に基づき、生成される楽音を制御する制御情報を作成する処理である。他方、音源処理とは、作成された制御情報に基づき楽音の波形データを生成する処理である。
例えば、通常は押鍵検出等の演奏処理を実行し、この演奏処理に対して各サンプリング周期で音源処理を割り込み実行して、1サンプル分の波形データを生成した後、演奏処理に復帰するようにしている。
【0006】
演奏情報(MIDI)は、演奏者の演奏操作やシーケンサでのイベントの再生により発生し、演奏情報が発生した場合には演奏処理により演奏情報が処理される。つまり、演奏情報の発生した時点では、CPUは、通常の音源処理に加えて演奏処理を実行しなければならないため、非定期的に発生する演奏情報により、演算量が一時的に増加することになる。しかしながら、従来の楽音生成方法においてはこれに対応しておらず、音源処理は、演奏情報のあるなしにかかわらず定期的に優先実行され、場合によっては演奏処理が遅れてしまうという問題点があった。
なお、このような演奏処理の遅れを防止するために、演奏処理の優先度を上げることが考えられるが、このようにすると今度は、一時的に発音数が減少したり、楽音波形が途切れてしまうという問題が発生することになる。
【0007】
そこで、本発明は上記した問題点を解決することのできる音生成方法を提供することを目的としている。
【0008】
【課題を解決するための手段】
前記目的を解決するために、本発明の音生成方法は、1または複数の指定された楽音を発生するための1または複数の発生命令を受け取る第1のステップと、前記発生命令に応答して、各指定された楽音を複数の発音チャンネルのうちの各1つに割り当て、該指定された楽音の制御データを各指定された楽音が割り当てられた各発音チャンネルに対応するチャンネルレジスタに書き込む第2のステップと、演算開始命令を順次発行する第3のステップと、各演算開始命令に応答して、前記チャンネルのチャンネルレジスタに記憶された制御データに基づき各発音チャンネル毎に複数サンプル分の波形データを生成する第4のステップと、前記第4のステップで各発音チャンネルにつき生成された波形データを、前記複数サンプルの各サンプル毎に混合し、混合サンプルデータを生成する第5のステップと、前記第5のステップで前記複数サンプルの各々についての新たな混合サンプルデータの生成が完了したとき、それ以前に生成された前記混合サンプルデータの再生が完了した後に、該新たな混合サンプルデータの再生が行われるように予約する第6のステップと、各サンプリング周期毎に順次サンプル点の前記混合サンプルデータを、前記第6のステップの予約にしたがって順次出力する第7のステップとを具備するようにしたものである。
【0009】
また、前記目的を達成することのできる本発明の他の音生成方法は、複数の指定楽音を発生するための発生命令を発行する第1のステップと、各指定楽音を複数の発音チャンネルの中から指定されたいずれかの発音チャンネルに割り当て、該指定楽音の制御データを各指定された発音チャンネルのチャンネルレジスタに書き込んで記憶させる第2のステップと、所定時間間隔で演算開始命令を発行する第3のステップと、前記第3のステップで発行された各演算開始命令に応じて各チャンネルの楽音生成演算を順次実行し、前記チャンネルのチャンネルレジスタに記憶された制御データに基づき各指定された発音チャンネル毎に複数サンプル分の波形データを算術的に生成する第4のステップと、前記第4のステップで指定された発音チャンネルにつき生成された波形データを、各サンプル毎に混合し、混合サンプルデータを生成する第5のステップと、前記複数サンプルの各々についての前記混合サンプルデータを、サンプリング周期毎にアナログ信号に変換する第6のステップとからなり、前記第4のステップの楽音生成演算においては、各指定された発音チャンネル毎に、前記チャンネルレジスタからの1回の制御データの読出しに基づいて、該制御データの読み出された発音チャンネルの複数サンプル分の波形データを生成し、該波形データ生成後に前記チャンネルレジスタに制御データを書き込むようにしたものである。
【0010】
このような本発明によれば、複数サンプルの各々についての新たな混合サンプルデータの生成が完了したとき、それ以前に生成された混合サンプルデータの再生が完了した後に、新たな混合サンプルデータの再生が行われるように予約するようにしたので、途切れることなく楽音を再生を行うことができる。
また、チャンネルレジスタからの1回の制御データの読出しに基づいて、制御データの読み出された発音チャンネルの複数サンプル分の波形データを生成し、波形データ生成後に前記チャンネルレジスタに制御データを書き込むようにしたので、複数の楽音波形サンプルの演算について1回だけ各発音チャンネルの準備処理を行えば良く、オーバヘッドが小さくすることができる。このため、生成された楽音の質を向上することができると共に、同時発音チャンネル数を増加することができる。
【0011】
【発明の実施の形態】
本発明の楽音生成方法の各実施の形態を実行することのできる楽音生成装置の構成を図1に示す。
この図において、1はアプリケーションプログラム等を実行して楽音波形サンプルの生成等の各種制御を行うマイクロプロセッサ(CPU)、2はプリセット音色データ等が記憶されているリードオンリメモリ(ROM)、3はCPU1のワークメモリエリアや音色データエリア、入力バッファエリア、チャンネルレジスタエリア、出力バッファエリア等の記憶エリアを有するランダムアクセスメモリ(RAM)4は時刻を指示すると共に、タイマ割り込み処理のタイミングをCPU1に指示するタイマ、5はMIDIイベントが入力されると共に、生成されたMIDIイベントを出力するMIDIインターフェース、6は英字、かな、数字、記号などのキーと備えるいわゆるパソコン用のキーボードである。
【0012】
7はユーザが楽音生成装置と対話するためのディスプレイ(モニタ)、8は楽音を生成するプログラム等のアプリケーションプログラムがインストールされていると共に、楽音波形サンプルを生成するために使用する楽音波形データ等が記憶されているハードディスク(HDD)、9はRAM3の一部のCPUにより指定されたエリアに記憶されている楽音波形サンプルのデータをCPU1を介することなく直接に受渡を行い、一定のサンプリング周期(例えば、48kHz)毎にデジタル・アナログ変換器(DAC)10に供給する再生部(DMA;Direct Memory Access)、10は楽音波形サンプルのデータを受け取りアナログ信号に変換するデジタル・アナログ変換器(DAC)、11はDAC10から出力されたアナログ信号に変換された楽音信号を放音するサウンドシステムである。
以上の構成はパソコン、ワークステーション等と同等であり、それらの上で本発明の楽音発生方法を実施することができる。
【0013】
前記したようにRAM3は種々のデータが記憶されるエリアを有しているが、その内の音色データが記憶されるエリアを図2に、入力バッファのエリアを図3に、チャンネルレジスタのエリアを図4に、出力バッファのエリアを図5に示す。
図2に示すエリアにおいて、PD1,PD2,・・・,PD16は16種類分の音色データであり、それぞれの音色データは各音域の波形を指定するデータ(各音域波形指定)、ビブラート等をかける時に使用するLFO(Low Frequency Oscillator)制御用のデータ(LFO制御OD)、音色フィルタ特性を制御するフィルタエンベロープの発生制御用のデータ(FEG制御OD)、振幅を制御するエンベロープの発生制御用のデータ(AEG制御OD)、ベロシティにより楽音の立ち上がりの速さ等を変えるタッチ制御用のデータ(タッチ制御OD)、その他のデータ(その他OD)からなっている。
【0014】
なお、ODはオリジナルデータであることを示しており、発音指示時のタッチデータ,音高データ等に応じてこれらのオリジナルデータに加工を施して音源が使用する発音用のデータを作成するようにしている。
また、WD1,WD2,・・・,WDnは波形データであり、入力される音高データに応じて、PD1,PD2,・・・,PD16の音色データにおける各音域波形指定データによりいずれかの波形データが指定される。
【0015】
次に図3に示す入力バッファのエリアにはMIDIインターフェース5を介して入力されるノートオン、ノートオフや各種イベントのMIDIイベントデータID1,ID2,ID3,・・・が順次書き込まれ、このMIDIイベントデータID1,ID2,ID3,・・・が読み出されることによりそのイベント処理が楽音生成装置内において実行される。
このMIDIイベントデータID1,ID2,ID3,・・・は、MIDIイベントのデータ内容(例えば、データ1内容)と、そのデータの発生時刻(データ1発生時刻)とにより構成される。この発生時刻はMIDIイベントデータ受信時にタイマ4の現在時刻を取り込むことにより知ることができる。
【0016】
次に図4に示すエリアは、それぞれ互いに独立した複数の楽音の生成を制御するためのデータを記憶するチャンネル(ch)レジスタとして使用され、この例では1ch,2ch,・・・,32chの32チャンネル分のエリアが用意されている。各チャンネルのエリアはノートナンバ、波形指定データ(波形指定D)、LFO制御データ(LFO制御D)、フィルタエンベロープ制御データ(FEG制御D)、振幅エンベロープ制御データ(AEG制御D)、ノートオンデータ、その他のデータ(その他D)、およびCPU1がプログラム実行時に使用するワークエリアからなっている。
この波形指定D、LFO制御D、FEG制御D、AEG制御Dは前記したオリジナルデータに加工が施された発音用のデータである。
【0017】
次に図5に示すエリアは複数の出力バッファ用のエリアであり、順次交代して発音波形生成用の出力バッファXとして使用されている。この出力バッファは、後述するように演算処理により生成された各発音チャンネルの楽音波形サンプルデータSD1,SD2,SD3,・・・が生成される毎にチャンネル累算され格納される。出力バッファのいずれかが発音波形生成用の出力バッファXとして指定され、波形生成演算に使用される。この出力バッファXは2つ以上用意される。最も簡単な構成としては出力バッファXを2個とし、片方に格納されているデータを再生部(DMA)9に渡して再生している間に、もう片方に演算した次の楽音波形サンプルのデータを格納するダブルバッファ構成とすることができる。
【0018】
なお、出力バッファのサイズは、100ワード、500ワード、1Kワード、5Kワード等任意に設定することができるが、サイズを大きくすると発音に遅れを生じ、サイズを小さくすると時間的マージンが減少し、一時的な演算量の増加時に応答が悪くなることになる。
そこで、リアルタイム性が要求されない、例えばシーケンサ演奏等の場合は、演奏タイミングを前にずらすことにより発音遅れを吸収できるため、出力バッファのサイズを大きくすることができる。一方、リアルタイムの演奏が必要とされる、例えば鍵盤演奏等の場合は、発音遅れを防止するため、バッファサイズは100〜200ワードとするのが好適である。
以上は、再生のサンプリング周波数が40kHz〜50kHzの場合であり、サンプリング周波数を低く設定する場合は、発音遅れを防止するためもっと小さいサイズにする必要がある。
【0019】
次に、本発明の楽音生成方法の第1の実施の形態ないし第5の実施の形態を説明するが、各実施の形態は前記図1に示す楽音生成装置によりそれぞれ実行することができるものである。
本発明の第1の実施の形態の楽音生成方法は、CPU1が楽音を生成するアプリケーションプログラムを実行する各発音チャンネルの楽音生成処理において、複数楽音波形サンプル、例えば100楽音波形サンプルまとめて生成するようにしたものである。すなわち、各発音チャンネルの処理において、DAC10のサンプリング周期の例えば100サイクル分まとめて楽音波形サンプルが生成されるようになる。
【0020】
そして、所定の計算時刻毎に全発音チャンネル分の楽音生成処理が実行され、生成された複数の楽音波形サンプルが100サンプルとされた場合は、DAC10の100サンプリング周期分のチャンネル累算値として順次累算され、前記した出力バッファに記憶される。出力バッファに記憶された楽音波形サンプルは、全発音チャンネル分の累算完了後に再生部(DMA)9により、前記サンプリング周期毎に1サンプルずつ読み出され、DAC10に供給されてサウンドシステム11から発音される。
なお、計算時刻は、複数の出力バッファを交代して用いて楽音生成処理を実行した場合に、楽音波形サンプルが途切れず読み出し再生できる間隔で発生されるように制御されている。
【0021】
この第1の実施の形態の楽音生成方法によれば、各発音チャンネルの準備処理は、まとめて生成される複数の楽音波形サンプルの演算について1回だけ行えば良いため、全体の演算時間の内でこの準備処理に費やされる演算時間の割合が減少し、オーバヘッドを小さくすることができる。このため、生成される楽音波形サンプルの質の向上や同時発音数を増加することができる。
なお、計算時刻間の1区間(出力バッファのサイズに相当)をさらにn等分して、それに対応する時間間隔で発音波形演算を行い、最後のn個目の演算で完成した1区間分の楽音波形サンプルを単位として、再生部(DMA)9が読み出すようにしてもよい。
【0022】
次に、本発明の第2の実施の形態の楽音生成方法の説明を行う。
本発明の第2の実施の形態の楽音生成方法は、前記第1実施例と同様にCPU1が楽音を生成するアプリケーションプログラムを実行する各発音チャンネルの楽音生成処理において、複数の楽音波形サンプルをまとめて生成するようにしているが、さらに加えて入力データ、この例ではMIDIイベントがMIDIインターフェース5において受信される毎に、その時点までの発音波形演算を行うようにしている。そして、所定の計算時刻には予め定められた複数の楽音波形サンプル(1つの出力バッファ分のサンプル)の内、未演算の楽音波形サンプルのみの発音波形演算を行うようにしたものである。
【0023】
これは、各発音波形演算では発音している発音チャンネルについての演算を行うのであるが、その中の入力データに応じて発音態様が変化するキーオンイベントあるいはキーオフイベント(ピッチベンド,音量変化)等がある発音チャンネルにおいては、対応を変化させずに発音を継続する発音チャンネルに比べて多くの演算処理が必要となる。
この場合、一定時間おきの計算時刻とすると、入力データが増加した時に、演算時間が発音態様が変化する発音チャンネルに多く占められてしまうため、結果的に演算できる発音チャンネル数が減少してしまうことになる。
特に、発音を開始する発音チャンネルについては、アドレスカウンタ、各種エンベロープ発生器の初期設定、Fナンバ発生等多くの初期設定処理が必要であり、演算処理時間が多くかかる。
【0024】
この第2の実施の形態を図12に示すタイミングチャートを参照しながらさらに説明すると、出力バッファは前記したダブルバッファ構成とされており、この2つの出力バッファがA,Bとされてその読み出しタイミングが同図(e)に示されている。そして、各バッファA,Bの再生に要する時間がTA およびTB とされており、TA =TB とされている。
まず、出力バッファA用の計算対象となる時刻範囲t0 〜t1 において、同図(a)に示すように時刻ta でMIDIイベントを2つMIDI受信部が受信すると、同図(b)に示すように音源ドライバ部で処理が行われ、さらに同図(c)に示すように音源部によりt0 〜ta 間の楽音波形サンプルA1 が計算される。
【0025】
なお、MIDI受信部は入力されたMIDIイベントを受信するMIDIインターフェース5を含み、前記したようにMIDIイベントのデータを入力バッファに発生時刻と共に書き込む。音源ドライバ部は入力バッファのデータあるいはパソコンキーボード6よりの入力を受け取り、音源チャンネルアサインおよび入力に従ってボイシングパラメータから音源パラメータへの変換を行う。また、音源部は音源パラメータを受け取り、波形データを加工して実際に発音する楽音波形サンプルを生成する。LPF部は生成された楽音波形サンプル中の折り返しノイズ成分を除去する。そして、LPF部の出力が出力バッファA,Bに書き込まれる。
なお、音源ドライブ、音源部、LPF部はCPU1がアプリケーションプログラムを実行することにより実現される機能である。
【0026】
次いで、時刻時刻tb でMIDIイベントが1つMIDI受信部において受信されると、同様に音源ドライバ部で処理が行われ、さらに音源部によりta 〜tb 間の楽音波形サンプルA2 が計算される。
その後、時刻t1 に達すると音源部によりtb 〜t1 間の楽音波形サンプルA3 が計算される。この場合、時刻ta ,tb においてキーオンイベントが入力されると、その発音初期処理も含めてこの時刻t1 において演算処理される。さらに、LPF部においてフィルタ処理が行われて出力バッファA用の楽音波形サンプルの生成が終了する。
【0027】
次に、出力バッファB用の計算対象となる時刻範囲t1 〜t2 において、同図(a)に示すように時刻tc で新たなMIDIイベントを3つMIDI受信部が受信するが、音源部は楽音波形サンプルA3 を計算中なので、入力データは計算時間が割り当てられるまで入力バッファにおかれる。そして、楽音波形サンプルA3 の計算が終了し、さらにLPF部のフィルタ処理も完了すると、入力バッファ中のデータが音源ドライバ部で処理されて、音源部によりt1 〜tc 間の入力に対応する楽音波形サンプルB1 が計算される。この場合、計算処理が遅れても入力データの発生時刻も入力バッファに書き込まれているため、発音タイミングには影響しないようになる。
【0028】
同様に、楽音波形サンプルB1 の計算時間中に新たなMIDIイベントを4つ受信するが、この入力データも楽音波形サンプルB1 の計算終了後に計算される。
これにより、楽音波形サンプルB2 はtc 〜td 間の入力に対応する楽音波形サンプルとなり、楽音波形サンプルB3 はtd 〜te 間の入力に対応する楽音波形サンプルとなり、楽音波形サンプルB4 はte 〜t2 間の入力に対応する楽音波形サンプルとなる。
さらに、楽音波形サンプルA5 はt2 〜t3 間の入力に対応する楽音波形サンプルとなる。
【0029】
このように第2の実施の形態は入力データが発生した場合は、その時点までの発音波形演算をその時点で実行するようにしているため、楽音波形サンプルの計算時間が分散される。従って、所定時間毎に行われる計算時間における処理が増加しないため、キーオンイベント等の発音態様を変化させる入力データが多く発生しても、同時発音数が減少する等の不都合が生じることを防止することができる。
【0030】
次に、本発明の第3の実施の形態の楽音波形生成方法の説明を行う。
ところで、所定のタイミングで計算時刻を発生し、所定数の楽音波形サンプルをまとめて演算生成するようにした場合、連続的に楽音を発生するためには、過去に生成した波形サンプルの生成終了以前に、それに続く該所定数の波形サンプルを供給する必要がある。すると、処理すべき発音チャンネル数が多くその発音波形演算量が多過ぎる場合、全チャンネル分演算を実行すると、その楽音波形サンプルの供給が間に合わず、楽音が途切れてしまうという欠点が生じる。
【0031】
この第3の実施の形態の楽音波形生成方法はこの欠点を解決しようとするものであって、楽音波形サンプルの供給がDAC10の変換タイミングに間に合うか否かを判定し、間に合わないと判定された場合は、重要度の低い発音チャンネルから消音する発音チャンネルを選定する。そして、選定された発音チャンネルについては演算時に、該所定数の波形サンプルのうちの初期期間に対応するダンプ波形サンプルのみが短時間で演算される。
このように、選定された消音される発音チャンネルにおける楽音波形サンプルは、短期間のダンプ波形しが演算しないので、この発音チャンネルの演算時間が短縮され、全体として楽音波形サンプルの供給がDAC10の変換タイミングに間に合うようになる。
【0032】
なお、重要な音とは、
(1)その時点で音量の大きい音。
(2)アタック部再生中の発音を開始したばかりの音。
(3)複数パート音演奏されている場合、一番低い音(ベース音)。
(4)複数パート演奏されている場合、一番高い音(リード音)。
(5)複数パート音演奏されている場合におけるソロのパート音。
とするのが一般的である。
【0033】
また、前記第3の実施の形態の変形例を説明すると、演算する発音チャンネルを発音波形演算に先立って重要な音から順位付けし、その順位に従って重要な音から順番に発音演算を行うようにし、発音波形演算が間に合わない場合に、発音波形演算を途中で打ち切って、その時点までに生成された楽音波形サンプルのみで発音を行うようにしたものである。
このようにすれば、万が一演算打ち切りをする必要が生じた場合でも、それによって音の消えてしまうチャンネルは、重要度の低い比較的影響の少ない楽音を生成しているチャンネルと云うことになる。
なお、第3の実施の形態およびその変形例において、入力データが発生する毎に発音波形演算を行うようにしてもよい。
【0034】
さらに、入力データが発生する毎に発音波形演算を行なわず、最後に1区間分まとめて発音波形演算をするようにしてもよい。この場合、入力データの数に応じて計算時刻を早めるようにトリガをかけるのが好適である。
または、計算時刻間の1区間をさらにn等分して、それに対応する時間間隔で発音波形演算を行い、最後のn個目の演算で完成した1区間分の楽音波形サンプルを単位として、再生部(DMA)9が読み出すようにしてもよい。
【0035】
ところで、所定のタイミングで計算時刻を発生し、複数の楽音波形サンプルをまとめて演算生成するようにした場合、あるいは入力データが発生する毎に発音波形演算を行なう場合、連続的に楽音を発生するためには、過去に生成した波形サンプルの生成終了以前に、それに続く波形サンプルを供給する必要がある。すると、処理すべき発音チャンネル数が多くその発音波形演算量が多過ぎる場合や、楽音生成処理以外の処理(シーケンサ処理等)に時間が費やされた等の理由でその楽音波形サンプルの供給が間に合わなかった場合、処理途中の楽音波形サンプルが読み出されノイズが発音される可能性があった。
そこで、本発明の第4の実施の形態の楽音発生方法においては、次のようにしてこれを解決している。
【0036】
本発明の第4の実施の形態において、再生部(DMA)9にはCPU1が出力バッファのデータを渡す指令を出すようにしている。この場合、生成した所定数の楽音サンプルを記憶する出力バッファ自体のアドレスを、一回の読み出し区間として再生部に9に設定したり、繰り返し読み出される繰り返し読み出し区間として設定をすることができるが、さらに加えて、該アドレスを現在すでに読み出し中の読み出し区間に続けて読み出せるよう読み出し区間の予約を設定することができる。
本実施の形態では、この読み出し区間の予約により、楽音波形演算サンプルが生成された後に出力バッファに予約登録が行われ、すでに読み出し中の波形に続けてて読み出される。楽音波形サンプルの演算が終了しなかった場合は、その予約登録が行われないので、処理途中の楽音波形サンプルが発音されることによるノイズの発生を防止することができる。
【0037】
この場合、発音は一時途切れることになるが、途切れる時間は、例えば44.1kHzのサンプル周波数における数サンプル時間に抑えれば影響は小さい。数サンプル時間に抑えるには、前述したように発音されているチャンネル数を制御すればよい。さらに、処理が完了すると予約登録が行われて発音されるようになる。
なお、入力データが発生する毎に発音波形演算を行なわず、最後に1区間分まとめて発音波形演算をするようにしてもよい。この場合、入力データの数に応じて計算時刻を早めるようにトリガをかけるのが好適である。
または、計算時刻間の1区間をさらにn等分して、それに対応する時間間隔で発音波形演算を行い、最後のn個目の演算で完成した1区間分の楽音波形サンプルの発音予約を行うようにしてもよい。
【0038】
前述したように、所定のタイミングで計算時刻を発生し、複数の楽音波形サンプルをまとめて演算生成するようにした場合、あるいは入力データが発生する毎に発音波形演算を行なう場合、連続的に楽音を発生するためには、過去に生成した波形サンプルの生成終了以前に、それに続く波形サンプルを供給する必要がある。
ところで、この計算時刻は、過去に生成した楽音波形サンプルの終了タイミングに基づいて、発音波形の生成を実行するのに必要な時間分、その終了タイミングより早いタイミングが指定される。この終了タイミングは、CPU1が再生部(DMA)9の状態(フラグ)を確認し、楽音波形サンプルの再生区間が次の区間に移行したことを検知するようにして検出しているため、再生部(DMA)9の状態(フラグ)が変化してからCPU1がそのことを検知するまでに時間遅れが生じることになる。さらに、この時間遅れはCPU1が上述した検知を実行するタイミングによるため、そのタイミングに応じて不均一な時間遅れとなる。
【0039】
すると、この不均一な時間遅れの生じているタイミングに基づいて計算時刻を発生するようにすると、正確な計算時刻が発生することができないこととなる。
特に、1度だけ大きく遅れたタイミングが検出されると、それに基づいて発生された計算時刻は演算開始時刻から発音波形供給までの演算時間が短いことになるため、この場合は同時発音数が一時的に減少してしまうことになる。
そこで、本発明の第5の実施の形態の楽音生成方法においては次のようにしてこれを解決している。
【0040】
CPU1は過去に再生部(DMA)9の状態変化が検出された時刻を複数記憶しておく。この複数の時刻の時刻間の平均を取ることにより、次の検出時刻を予測するようにする。この予測された時刻は、再生部(DMA)9における真の終了タイミングからの検出遅れが平均化されたものとされるので、予測されたタイミングより所定時間前のタイミングを、ほぼ正確な終了タイミングとして検出することができる。そして、この終了タイミングに基づいて計算時刻を発生するようにする。
このように、検出される終了タイミングは平均化されたものとなり、ばらつきが少なくなるので、毎計算時刻に確保される演算時間も均一化され、安定した楽音生成動作が実行されるようになる。
【0041】
なお、入力データが発生する毎に発音波形演算を行なわず、最後に1区間分まとめて発音波形演算をするようにしてもよい。この場合、入力データの数に応じて計算時刻を早めるようにトリガをかけるのが好適である。
または、計算時刻間の1区間をさらにn等分して、それに対応する時間間隔で発音波形演算を行い、最後のn個目の演算で完成した1区間分の楽音波形サンプルの発音予約を行うようにしてもよい。
【0042】
次に、前記した本発明の第1の実施の形態ないし第5の実施の形態の要素を1まとめにした楽音生成方法および装置の動作をフローチャートを参照しながら説明する。
図6はメインルーチンのフローチャートを示す図であり、メインルーチンがスタートされるとステップS10にて初期設定が行われる。初期設定ではタイマ4やDMAの設定、全発音チャンネルのクリアや、音色データおよび波形データ等の準備が行われる。次いで、ステップS20にてキーボード6からの入力が処理されるキーボード処理が行われ、ステップS30にて入力されたMIDIイベントに応じた処理が行われるMIDI処理が行われる。さらに、ステップS40にて楽音波形サンプルが生成される発音波形演算等が行われる音源処理が行われ、ステップS50にてその他の処理が行われ、ステップS20に戻り、ステップS20ないしステップS50の処理が循環して繰返し行われる(定常ループ)。
これらの処理は、マルチタスクの方法を用いて他のソフトと同時に実行される。
【0043】
次に、CPU1の実行するMIDI受信割込処理のフローチャートを図7に示す。この処理は、MIDIインタフェース5が外部より何らかのMIDIイベントを受信した際に割込により起動される。このMIDI受信割込処理は、他の処理より優先して行われる処理である。このMIDI受信割込処理が開始されると、ステップS100にてMIDIインターフェース5により受信された受信データが取り込まれ、ステップS110にてその受信データは受信された時点の時刻データと組にして図3に示されるような形式で前述した入力バッファに書き込まれるようにされて、割込発生時の処理へリターンされる。これにより、受信したMIDIデータは、順次、受信時刻と共に入力バッファに書き込まれるようになる。
【0044】
次に、メインルーチンの定常ループでステップS30として実行されるMIDI処理の詳細フローチャートを図8に示す。
MIDI処理が開始されるとステップS200にて入力バッファを読みに行き、未処理の受信データがあるかどうかの確認を行う。未処理の受信データがあるとステップS210にて判断されると、ステップS220に進み、受信データの内容に応じた分岐を行う。受信データがノートオンイベントの場合は、ステップS230に分岐されてノートオン処理が実行される。また、受信データがノートオフの場合は、ステップS240に分岐されてノートオフ処理が実行され、受信データがその他のデータの場合は、ステップS250に分岐されてその他処理が実行される。そして、これらのいずれかの処理が終了すると、MIDI処理は終了する。なお、受信データがないとステップS210にて判断されると、そのままMIDI処理を終了する。
【0045】
次に、前述したMIDI処理において、受信データがノートオンイベントの場合にステップS230にて実行されるノートオン処理のフローチャートを図9(a)に示す。
ノートオン処理が開始されると、ステップS300にて、入力バッファ中のそのノートオンイベントのノートナンバがNNとして、ベロシティがVELとして、それぞれレジスタに取り込まれ、そのノートオンイベントの発生時刻がTMとしてレジスタに取り込まれる。次いで、ステップS310にてレジスタに取り込まれたノートナンバNNの発音割当処理が行われ、割り当てられたチャンネル(ch)の番号がiとしてレジスタに取り込まれる。
【0046】
さらに、ステップS320にて図4に示すchレジスタのうちレジスタに取り込まれたch番号iのchレジスタに、前記ノートナンバNN,ベロシティVELに応じた楽音制御データを設定する。設定される楽音制御データは、図2に示す16音色分の音色データのうち、前記ノートオンイベントを受信したMIDIチャンネルに対応した音色データ(各種OD)を、前記ノートナンバNN,ベロシティVELの値に応じて加工して得られる発音用データ(各種D)である。
ここで、発音用データの中の波形指定データDは、図2に示す音色データ中の音域波形指定データをノートナンバNNで参照することにより求められ、該ノートナンバNNに対応した楽音生成に用いるべき波形として、波形データWD1から波形データWDnのうちのいずれか1つを指定する。前記楽音制御データの設定後、ステップS330にてichのノートオンフラグを立てるようにする。
【0047】
次に、ステップS340にて発音波形の演算生成を実行するが、この場合の演算生成は、現在準備中のバッファXに書き込むべき全波形のうち、時刻TM以前で、かつ、未計算の波形(部分波形)について実行され、算出された該部分波形を出力バッファXに書き込むようにする。ここで、部分波形は、ステップS210において新たな受信データが検出された時点で(データが確定し)演算生成が可能になる範囲の発音波形に相当する。生成する波形は、受信したノートオンイベントの発生時刻TMの時点までの発音波形であり、該ノートオンに応じて発音開始する楽音波形は、該発音波形に含まれず、以後に生成される発音波形の方に含まれる。この処理の詳細については、後述する図11に示されている。
【0048】
このステップS340およびステップS350の処理は、先に図12に関連して説明した楽音波形A1 あるいはA2 等の演算生成処理に対応するが、ステップS350では、前述したステップS320でchレジスタに設定されたichの楽音制御データに基づき、ichにおける発音の初期設定をchレジスタのワークエリアに対して行う。ここで、このワークエリアは、各発音chの楽音生成に必要な、アドレス現在値、各種エンベロープ現在値および現在ステート、LFO波形現在値等、各chの波形生成に必要な複数のデータ現在値を記憶する。この発音初期処理が終了すれば、ノートオン処理は終了する。
なお、初期設定においては、波形読み出しアドレス現在値へのスタートアドレスの設定、ノートナンバNNに応じたFナンバの発生、およびLFO、フィルタEG、音量EG、補間演算、フィルタ演算等の各初期設定が行われる。この初期設定は前記したように演算時間を要する処理である。
【0049】
次に、前述したMIDI処理において、受信データがノートオフイベントの場合にステップS240にて実行されるノートオフ処理のフローチャートを図9(b)に示す。
ノートオフ処理が開始されると、ステップS400にて、入力バッファ中のそのノートオフイベントのノートナンバがNNとしてレジスタに取り込まれ、ノートオフイベントの発生時刻がTMとしてレジスタに取り込まれる。次いで、ステップS410にてノートナンバNNで発音されている発音チャンネル(ch)がサーチされ、見つかった発音chの番号がiとしてレジスタに取り込まれる。
【0050】
次に、ステップS420にてichのノートオンフラグを倒し、ステップS430にて発音波形の演算生成が実行される。この場合の演算生成処理は、前述したステップS340と同様の処理であり、時刻TM以前の未計算波形(部分波形)を算出して出力バッファXに書き込むようにする。さらに、ステップS440にてichのリリース開始処理が行われてノートオフ処理は終了する。ここで、ichのリリース開始処理とは、ワークエリア中のichの各種エンベロープのステート等を書き換え、ichにおける楽音生成の状態をリリース状態に変化させる処理である。
【0051】
次に、メインルーチンの定常ループでステップS40として実行される音源処理の詳細フローチャートを図10を参照しながら説明する。
音源処理が開始されると、ステップS500にて再生部(DMA)9の再生状態をチェックし、再生区間が次に進んでいたらステップS510に進み、再生区間が進んでいない場合はステップS520に進む。
DMA9は、CPU1により指定されたRAM3上の特定エリアの波形サンプルを再生エリアとして、所定のサンプリング周期毎にその特定エリアの最初のサンプルから1サンプルづつ順次読み出し、DAC10に供給し再生する。さらに、DMA9はその特定エリアを再生しつつ、CPU1から次に再生すべき別のエリアを指定する予約を受け付ける。予約された別の特定エリアの波形サンプルは、再生中の特定エリアの再生が完了した後、引き続いてDMA9により同様に1サンプルづつ順次読み出され、DAC10に供給され再生される。ここで、再生区間が次に進むというのは、先に特定エリアとして指定した再生区間の再生が完了し、次の特定エリアとして予約された別の再生区間に再生が移ったことを意味する。なお、一度に複数の特定エリアを再生予約することが可能であり、その場合、複数の特定エリアは予約した順に順次再生される。
【0052】
ステップS510にて今回進行が検出された時刻(現在時刻)と過去に検出された時刻から次回の検出時刻を予測し、予測された検出時刻より所定時間前の時刻を次回の計算時刻として指定する。次回の検出時刻の予測の仕方としては、現在時刻と過去の検出時刻を含む複数回の検出時刻に基づき最小二乗法で誤差の少ない近似値を求めて予測する方法や、複数回の検出時刻の変化の様子を2次関数等、別の関数で近似して予測する方法がある。DMA9では進行が発生してからステップS510で検出されるまでの時間は、その時々の処理ステップ位置、状況の違い等により、一定でない時間遅れが生じ、複数回の検出時刻には、一定でないばらつきが含まれている。従って、前記近似関数の算出には、複数回の検出時刻のばらつきを平均化する処理が含まれる。
【0053】
前記所定時間は、楽音波形を生成するために確保される時間であり、どのくらいの長さにするかは、確保したい発音数、演算のクォリティ等、その演算生成に必要な演算量に基づいて決定される。前記所定時間の長さは、固定値でもよいが、キーボード6で設定できるようにしたり、同時に走る複数の処理プログラムとの兼ね合いでCPU1が自動的に決定するようにしてもよい。
【0054】
次に、ステップS520にて次回の計算時刻とタイマ4が指示する現在時刻とを比較することにより、計算時刻に達したか否かが判断され、計算時刻に達したと判断された場合はステップS530ないしステップS580の処理を実行する。
まず、ステップS530にて現在発音中の発音チャンネルを、どの順番で演算するか決定する。後述するステップS550の波形演算生成処理では、発音中のチャンネルについて、1チャンネルづつ複数サンプル分の発音波形を生成していくわけであるが、その時のチャンネルの処理順をここで決めているわけである。
【0055】
ここでは、前記した第3の実施の形態の方法に従って、音楽的に重要な楽音、消えてしまっては困る楽音から順番に演算を行うように順番付けをする。次いで、ステップS540にて発音中の全発音チャンネルを、予定した演算時間(ステップS510で説明した所定時間)内に演算可能か否かが判定され、不可能の場合は演算順序が最後の発音チャンネルから消音すべき発音チャンネルを1ないし複数チャンネル分指定し、予定した演算時間内に演算可能になるよう演算量を削減する。この処理は、前記した第3の実施の形態の楽音生成方法に基づく具体的な処理である。
次いで、ステップS550にて発音波形の演算が行われる。ここでは、現在準備中の出力バッファXが発音波形データで満たされ、準備完了となるように、バッファXの未計算分について楽音波形サンプルが演算されて発音波形が算出され、出力バッファXに書き込まれる。この処理は、先に図12に関連して説明した発音波形A3 等の演算生成処理に対応する。
【0056】
発音波形で満たされ準備完了となったバッファXの各サンプルは、さらに、ステップS560にてローパスフィルタ(LPF)処理が施され、高域成分がカットされる。次いで、ステップS570にて波形再生部(DMA)9に、LPF処理済の発音波形を記憶する出力バッファXのエリアが、続いて再生すべき再生波形を記憶する特定エリアとして予約登録される。これにより、現在再生中の特定エリアおよび既に予約されている特定エリアの発音波形が再生完了した後に再生されるよう予約される。そして、ステップS580にて、それまでバッファXとして使用していた出力バッファとは別の新規の出力バッファ領域が確保され、全てのサンプル値がゼロにクリアされて、次の区間の発音波形を作成し準備するための出力バッファXとして新たに設定され、音源処理が終了する。
なお、ステップS520にて計算時刻に達していないと判断された場合は、そのまま終了する。
【0057】
次に、ノートオン処理、ノートオフ処理および音源処理にて実行される発音波形演算処理のフローチャートを図11に示す。この処理が行われる場合には、既に説明したように前もって発音波形が演算される発音波形の時間範囲が定められている。すなわち、ノートオン処理等のMIDIデータ受信時の処理として本フローを実行する場合は、前記時間範囲とは前述した部分波形のことであり、音源処理中で本フローを実行する場合は、バッファXの全サンプルのうち、未計算部分の発音波形サンプルのことである。なお、MIDIデータ受信時には、直前の音源処理で決定した演算順序に基づいて演算を行うため、発音チャンネルの演算順序を新たに決定していない。新たなノートオンがあった場合は、他の全発音チャンネルの順位を1つ繰り下げ、その新たなノートオンのチャンネルを演算順序の第1番に順次加えていく。
【0058】
発音波形演算処理が開始されると、ステップS600にて演算順序の1番の発音チャンネル(ch)の最初の楽音波形サンプルの演算準備が行われる。演算準備処理とは、前回の読み出しアドレス、各種EG値、各種EGのステート(アタックやリリース等の状態)、LFO値等のデータを、ただちに演算に使えるようにアクセス準備したりCPU1の内部レジスタにロードしたりする処理のことである。そして、ステップS610にてLFO、フィルタG、音量EGの波形演算を行い、指定された前記時間範囲の演算に必要なLFO波形、FEG波形、AEG波形のサンプルを生成する。LFO波形はFナンバ、FEG波形、AEG波形に加算され、各データを変調する。また、ステップS540で消音すべきチャンネルとして指定された発音チャンネルに関しては、音量EGとして前記範囲内で急速に減衰するダンプ用のAEG波形が演算生成される。
【0059】
次いで、ステップS620にて上記前回の読み出しアドレスを初期値としてFナンバを繰り返し加算し前記時間範囲内の各サンプルの読み出しアドレスを発生し、この読み出しアドレスの整数部に基づいて音色データ内の波形記憶領域WDより波形サンプルを読み出すと共に、この読み出しアドレスの小数部に基づいて読み出された波形サンプル間の補間を行い、前記時間範囲内の全補間サンプルを算出するようにする。例えば、前記時間範囲が100サンプル分の時間に相当する場合、100サンプル分まとめてこのステップにより処理が行われる。ここで、前記時間範囲内の複数サンプル分の処理は、読み出しアドレスに対するFナンバの加算と、加算により生成されたアドレスに基づく読み出しから補間の処理までの処理を単位処理として、この単位処理を繰り返して行うようになっているため、読み出しアドレスのCPUレジスタへの読み込みが全体として1回で済み、処理が高速化されている。
【0060】
さらに、ステップS630にて前記時間範囲内の補間サンプルに対し音色フィルタ処理が行われ、前記FEG波形に基づいて音色制御が行われ、ステップS640にて、フィルタ処理済の前記時間範囲内のサンプルに対し振幅制御処理が行われ、前記AEGおよび音量データに基づいて楽音波形サンプルの振幅制御が行われると共に、振幅制御処理された前記時間範囲分の楽音波形サンプルがそれぞれ出力バッファXの対応するサンプルに足し込まれる累算書込処理が実行される。この処理においては、前記時間範囲内の各サンプルについて、振幅制御とバッファXの対応サンプルへの足し込みを連続して行うようになっているので、サンプルのCPUレジスタへの取り込み回数が少なくて済み、処理速度が向上している。
【0061】
上述したように、ステップS620からステップS640にかけての楽音波形サンプルの演算生成処理は、基本的には前記所定時間範囲内の全サンプルを生成するように行われるわけであるが、ステップS610における音量EGの波形演算の結果、AEG波形のレベルが下がり音量が十分減衰した範囲については、演算の対象からはずされ、その分処理を少なくするようになっている。特に、ステップS540の指示により、ダンプ用AEG波形を生成した発音チャンネルに関しては、前記所定時間範囲の途中で十分な減衰が得られる場合が多い。
【0062】
そして、ステップS650にて、波形演算処理をこのまま続行したい場合にDMA9に対し期限内に波形を供給できそうか否か判定されて、演算を打ち切るか否かの判断が行われる。ここで、期限内に波形を供給するというのは、先に生成された発音波形を記憶する特定エリアを再生中のDMA9が、そのエリアの再生を終了してしまう前に、バッファXにそれに引き続く発音波形を準備し、そのバッファXのエリアを再生予約できることである。そのまま続行すると間に合わなくなる場合は、演算を打ち切ると判断され、ステップS670にて打ち切り処理が実行されて、この発音波形演算処理は終了する。
【0063】
また、また演算を続行しても大丈夫と判定された場合、演算を打ち切る必要がないと判断され、続くステップS660にて演算すべき全発音チャンネル分の楽音波形の演算生成が終了したか否かが判断され、全発音チャンネルの演算が終了したと判断されない場合は、ステップS680にて次の演算順序を付与された発音チャンネルの最初の楽音波形サンプルが指定され、次順の発音チャンネルの楽音チャンネルの楽音波形の演算生成準備が行われる。準備が完了したら、処理はステップS610に戻り、その発音チャンネルのついて先程と同様にステップS610ないしステップS640に渡る楽音生成の処理が実行される。このようにして、全発音チャンネルの演算が終了するまでステップS610ないしステップS660の処理が繰り返し行われるようになる。各発音チャンネルの処理毎に、生成された前記所定時間範囲分のサンプルは、ステップS640にてバッファXの対応するサンプルに順次足し込まれる。
【0064】
ステップS660で演算生成処理が終了したと判定された場合、本発音波形演算を終了する。この時、バッファXには、演算すべき全発音チャンネルの生成された楽音波形サンプルを累算した累算値が、前記時間範囲に対応するサンプル数分、新たに記憶されている。
一方、ステップS650で打ち切りを行うと判断され、ステップS670の打ち切り処理を経て発音波形演算が終了した場合、バッファXには、演算すべき全発音チャンネルの内、その時点までに演算生成を完了した発音チャンネルについての楽音波形サンプルの累算値が、前記時間範囲に対応するサンプル数分、新たに記憶されている。
【0065】
打ち切り以降の演算順序を付与された発音チャンネルについては楽音の演算生成が行われず、結果的にそのチャンネルの楽音が消えてしまうわけであるが、ステップS530の処理により、消えてしまった場合に影響の少ないチャンネルほど後ろの演算順序とされているので、打ち切りによる悪影響は最小限に抑えられる。なお、ステップS670の打ち切り処理では、一旦演算できなかったチャンネルについて、次回以降の発音波形演算においても消音したままになるよう、chレジスタを設定している。
【0066】
以上説明した発音波形演算処理が図9(a)にフローチャートを示すノートオン処理のステップS340にて実行された場合には、上述した発音波形演算処理が終了すると、該フローチャートのステップS350の処理が続けて実行されて、ノートオン処理が終了する。
また、発音波形演算処理が図9(b)にフローチャートを示すノートオフ処理のステップS430にて実行された場合には、上述した発音波形演算処理が終了すると、該フローチャートのステップS440の処理が続けて実行されて、ノートオフ処理が終了する。
【0067】
さらに、発音波形演算処理が図10にフローチャートを示す音源処理のステップS550にて実行された場合には、上述した発音波形演算処理が終了すると、該フローチャートのステップS560以降の処理が続けて実行されて、ステップS580の処理が終了すると音源処理が終了する。
これらのノートオン処理、ノートオフ処理、および音源処理は、図6に示す定常ループ内において循環して繰り返し行われ、発音される楽音波形サンプルが順次生成されるようになる。
【0068】
なお、本発明の楽音生成方法において、いうまでもないことであるが、例えば複数の楽音の発生を指示するステップと、所定時間時間間隔で演算開始を指示するステップのように、互いに独立したデータを扱うステップについては、前記説明した順番で処理を行う必要はなく、その処理の順番を入れ替えて実行するようにしてもよい。
また、本発明の楽音生成方法においては、前記した楽音生成演算処理の空き時間を利用して他のアプリケーションソフトから依頼された発音指示を含む処理を行うことができる。他のアプリケーションソフトとしては、ゲームソフト、通信ソフト、事務処理ソフト等がある。
【0069】
以上においては、前記図1に示す楽音生成装置にて実行されるプログラムとして本発明の楽音生成方法の説明を行った。また、本発明の楽音生成方法を、Windows (米マイクロソフト社のパソコン用OS)やその他のオペレーティングシステムの動作する汎用コンピュータ上で、1つのアプリケーションプログラムとして、他のアプリケーションプログラムと並列実行させてもよい。
【0070】
【発明の効果】
本発明は以上のように構成されて、複数サンプルの各々についての新たな混合サンプルデータの生成が完了したとき、それ以前に生成された混合サンプルデータの再生が完了した後に、新たな混合サンプルデータの再生が行われるように予約するようにしたので、途切れることなく楽音を再生を行うことができる。
また、チャンネルレジスタからの1回の制御データの読出しに基づいて、制御データの読み出された発音チャンネルの複数サンプル分の波形データを生成し、波形データ生成後に前記チャンネルレジスタに制御データを書き込むようにしたので、複数の楽音波形サンプルの演算について1回だけ各発音チャンネルの準備処理を行えば良く、オーバヘッドが小さくすることができる。このため、生成された楽音の質を向上することができると共に、同時発音チャンネル数を増加することができる。
また、楽音波形サンプルの演算をMIDIイベントが入力される毎に行うようにすると、演算が分散されるようになり、発音初期処理による発音数の減少を防止することができる。
【0071】
さらにまた、演奏情報の発生時に演奏情報の受入処理を行い、受け入れた演奏情報に基づく楽音制御あるいは波形生成は、該受入処理の空き時間に実行されるメインステップに含まれるようにしたので、演奏情報が発生した時点での処理の増加分を前記空き時間内に分散させることができ、一時的な処理の増加を防止することができる。
【図面の簡単な説明】
【図1】本発明の楽音生成方法を実行できる楽音生成装置の構成を示すブロック図である。
【図2】RAM上の音色データエリアを示す図である。
【図3】RAM上の入力バッファエリアを示す図である。
【図4】RAM上のchレジスタエリアを示す図である。
【図5】RAM上の出力バッファエリアを示す図である。
【図6】本発明の楽音生成方法のメインルーチンのフローチャートを示す図である。
【図7】本発明の楽音生成方法のMIDI受信割込処理のフローチャートを示す図である。
【図8】メインルーチンにおけるMIDI処理のフローチャートを示す図である。
【図9】MIDI処理におけるノートオン処理およびノートオフ処理のフローチャートを示す図である。
【図10】メインルーチンにおける音源処理のフローチャートを示す図である。
【図11】本発明の楽音生成方法の発音波形演算処理のフローチャートを示す図である。
【図12】本発明の第2の実施の形態におけるタイミング図を示す図である。
【符号の説明】
1 CPU、2 ROM、3 RAM、4 タイマ、5 MIDIインターフェース、6 キーボード、7 ディスプレイ、8 ハードディスク、9 再生部、10 DAC、11 サウンドシステム
Claims (2)
- 1または複数の指定された楽音を発生するための1または複数の発生命令を受け取る第1のステップと、
前記発生命令に応答して、各指定された楽音を複数の発音チャンネルのうちの各1つに割り当て、該指定された楽音の制御データを各指定された楽音が割り当てられた各発音チャンネルに対応するチャンネルレジスタに書き込む第2のステップと、
演算開始命令を順次発行する第3のステップと、
各演算開始命令に応答して、前記チャンネルのチャンネルレジスタに記憶された制御データに基づき各発音チャンネル毎に複数サンプル分の波形データを生成する第4のステップと、
前記第4のステップで各発音チャンネルにつき生成された波形データを、前記複数サンプルの各サンプル毎に混合し、混合サンプルデータを生成する第5のステップと、
前記第5のステップで前記複数サンプルの各々についての新たな混合サンプルデータの生成が完了したとき、それ以前に生成された前記混合サンプルデータの再生が完了した後に、該新たな混合サンプルデータの再生が行われるように予約する第6のステップと、
各サンプリング周期毎に順次サンプル点の前記混合サンプルデータを、前記第6のステップの予約にしたがって順次出力する第7のステップと
を具備することを特徴とする音生成方法。 - 複数の指定楽音を発生するための発生命令を発行する第1のステップと、
各指定楽音を複数の発音チャンネルの中から指定されたいずれかの発音チャンネルに割り当て、該指定楽音の制御データを各指定された発音チャンネルのチャンネルレジスタに書き込んで記憶させる第2のステップと、
所定時間間隔で演算開始命令を発行する第3のステップと、
前記第3のステップで発行された各演算開始命令に応じて各チャンネルの楽音生成演算を順次実行し、前記チャンネルのチャンネルレジスタに記憶された制御データに基づき各指定された発音チャンネル毎に複数サンプル分の波形データを算術的に生成する第4のステップと、
前記第4のステップで指定された発音チャンネルにつき生成された波形データを、各サンプル毎に混合し、混合サンプルデータを生成する第5のステップと、
前記複数サンプルの各々についての前記混合サンプルデータを、サンプリング周期毎にアナログ信号に変換する第6のステップとからなり、
前記第4のステップの楽音生成演算においては、各指定された発音チャンネル毎に、前記チャンネルレジスタからの1回の制御データの読出しに基づいて、該制御データの読み出された発音チャンネルの複数サンプル分の波形データを生成し、該波形データ生成後に前記チャンネルレジスタに制御データを書き込むようにしたことを特徴とする音生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP28390499A JP3627590B2 (ja) | 1995-05-19 | 1999-10-05 | 音生成方法 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP14415995 | 1995-05-19 | ||
JP7-144159 | 1995-05-19 | ||
JP28390499A JP3627590B2 (ja) | 1995-05-19 | 1999-10-05 | 音生成方法 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP7299185A Division JP3003559B2 (ja) | 1995-05-19 | 1995-10-23 | 楽音生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2000099019A JP2000099019A (ja) | 2000-04-07 |
JP3627590B2 true JP3627590B2 (ja) | 2005-03-09 |
Family
ID=26475668
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP28390499A Expired - Lifetime JP3627590B2 (ja) | 1995-05-19 | 1999-10-05 | 音生成方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3627590B2 (ja) |
-
1999
- 1999-10-05 JP JP28390499A patent/JP3627590B2/ja not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
JP2000099019A (ja) | 2000-04-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5895877A (en) | Tone generating method and device | |
KR100319481B1 (ko) | 악음발생방법,파형데이터압축방법,이러한방법을실행하기위한제어명령어를포함하는기계판독가능한기록매체및사운드장치 | |
JP3637578B2 (ja) | 楽音生成方法 | |
US6326537B1 (en) | Method and apparatus for generating musical tone waveforms by user input of sample waveform frequency | |
JP3293474B2 (ja) | 楽音発生方法 | |
KR100500077B1 (ko) | 악음 생성 방법 및 장치 | |
KR100302626B1 (ko) | 악음생성장치 및 방법 | |
JP3632744B2 (ja) | 音生成方法 | |
JP3003559B2 (ja) | 楽音生成方法 | |
JP3627590B2 (ja) | 音生成方法 | |
JP3918817B2 (ja) | 楽音生成装置 | |
JPH07121181A (ja) | 音声情報処理装置 | |
US6040516A (en) | Tone generation system using computer software and storage medium storing the computer software | |
JP3637577B2 (ja) | 楽音生成方法 | |
JP3409642B2 (ja) | 自動演奏装置、自動演奏データ処理方法及び電子的情報記憶媒体 | |
JP3799711B2 (ja) | 楽音発生方法および楽音発生装置 | |
JP4103706B2 (ja) | 音源回路の制御プログラムおよび音源回路の制御装置 | |
JP3000894B2 (ja) | 楽音発生方法 | |
JPH11202866A (ja) | 楽音発生方法および楽音発生装置 | |
JP7159583B2 (ja) | 楽音生成装置、楽音生成方法、楽音生成プログラム及び電子楽器 | |
JP3740717B2 (ja) | 音源装置及び楽音生成方法 | |
JP3603638B2 (ja) | 楽音発生方法 | |
JP3716701B2 (ja) | 発音チャンネル割り当て方法及び装置 | |
JP2833485B2 (ja) | 楽音発生装置 | |
JP2956552B2 (ja) | 楽音発生方法および装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20041029 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20041116 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20041129 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
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: 20081217 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081217 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091217 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101217 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101217 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111217 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111217 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121217 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131217 Year of fee payment: 9 |
|
EXPY | Cancellation because of completion of term |