欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

樂音發(fā)生方法與設(shè)備的制作方法

文檔序號:2822044閱讀:343來源:國知局
專利名稱:樂音發(fā)生方法與設(shè)備的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種樂音發(fā)生方法與設(shè)備,該方法和設(shè)備允許用一種具有一個計算裝置的通用處理器來形成樂音。
本發(fā)明還涉及一種樂音發(fā)生方法,該方法通過在一個可編程計算單元上,例如一個CPU或DSP(數(shù)字信號處理器)上,執(zhí)行一個樂音發(fā)生程序來形成一種樂音波形。
背景技術(shù)
眾所周知,通常的樂音發(fā)生設(shè)備包括一個MIDI(樂器數(shù)字接口);一個演奏輸入部分,用于從一個鍵盤或定序器接收演奏信息;一個樂音發(fā)生器部分,用于形成一種樂音波形;和一個微處理器或中央處理單元(CPU),用于根據(jù)輸入演奏信息控制樂音發(fā)生器部分。CPU根據(jù)輸入演奏信息,進行樂音發(fā)生器驅(qū)動器處理(演奏處理),例如把每個樂音分配給一個選擇的通道(通道分配),和參數(shù)轉(zhuǎn)換;并且把經(jīng)轉(zhuǎn)換的參數(shù)和一個樂音發(fā)生指令(音通信號)供給樂音發(fā)生器部分分配的通道。樂音發(fā)生器部分是由一個電子電路,例如一個LSI(大規(guī)模集成電路),來實現(xiàn)的,并且根據(jù)所提供的參數(shù)形成樂音波形。
然而,已知的樂音發(fā)生設(shè)備是專用于樂音發(fā)生用途的,在過去,必須無條件地采用這樣一種專用樂音發(fā)生設(shè)備去發(fā)生樂音。
為了解決這個問題,已提出一種經(jīng)改進的樂音發(fā)生設(shè)備,其中CPU執(zhí)行一個專門的應(yīng)用程序,以便根據(jù)該應(yīng)用程序發(fā)生樂音。這種樂音發(fā)生設(shè)備能夠用一個通用計算單元來實現(xiàn),該單元不但可以通過執(zhí)行樂音發(fā)生應(yīng)用程序來完成樂音發(fā)生和其他功能,而且可以通過執(zhí)行其他應(yīng)用程序來完成。一種通用計算機,例如個人計算機,能夠用作上述樂音發(fā)生設(shè)備的硬件,它執(zhí)行一個用于樂音發(fā)生操作的樂音發(fā)生器程序。這樣,可用通用計算機提供一種所謂的“軟件樂音發(fā)生器”。
在在一個有計算單元(CPU)的通用設(shè)備上通過執(zhí)行一個應(yīng)用程序來發(fā)生樂音的這種情況下,通常在每個抽樣周期(即,所用D/A轉(zhuǎn)換器的轉(zhuǎn)換時間),為各個樂音發(fā)生通道形成樂音波形采樣。這樣,當CPU對每個樂音發(fā)生通道執(zhí)行所需的操作時,通過CPU把例如通道最后計算中所用的各種寄存器值讀入CPU寄存器中,進行某些準備操作。此外,在終止通道的樂音發(fā)生處理以后,有必要把CPU寄存器值寫入一個存儲器中,以供下次執(zhí)行處理之用。
然而,因為在每個樂音發(fā)生通道中逐個采樣地進行樂音波形采樣形成或計算過程,故常規(guī)的軟件樂音發(fā)生器會出現(xiàn)一個問題,即大量CPU的計算時間花在準備操作上,而不是花在樂音發(fā)生過程(導(dǎo)致增加系統(tǒng)開銷),從而不合乎需要地降低樂音發(fā)生器的計算效率和響應(yīng)與樂音器形成速度。即,在每個抽樣周期為各個樂音發(fā)生通道而進行樂音波形采樣形成過程時,有必要讓CPU使通道最后計算中所用的各種數(shù)據(jù),從存儲器回復(fù)到上述寄存器中;并且在終止波形形成計算以后,使寄存器的存儲內(nèi)容保存于存儲器中,以供下次執(zhí)行過程之用。這樣,大量處理時間花在操作上,而不是花在初始波形形成計算上。
此外,在CPU既進行樂音發(fā)生器處理,又進行演奏處理的已知樂音發(fā)生方法中,“演奏處理”是創(chuàng)立控制信息的處理,控制信息用于控制根據(jù)輸入演奏信息發(fā)生的樂音;“樂音發(fā)生器處理”是根據(jù)已創(chuàng)立的控制信息而形成波形數(shù)據(jù)的處理。例如,CPU通常在每個抽樣周期根據(jù)一個中斷信號執(zhí)行樂音發(fā)生器處理的同時,執(zhí)行演奏處理,例如檢測壓下低鍵。在樂音發(fā)生器處理中為一個采樣完成波形數(shù)據(jù)形成以后,CPU回復(fù)到演奏處理。
演奏信息(MIDI事件信息)是通過演奏者的演奏操作或經(jīng)一個定序器的事件復(fù)制而產(chǎn)生的,并且所產(chǎn)生的演奏信息是在演奏處理時處理的。即,每當產(chǎn)生上述演奏信息時,CPU除了執(zhí)行正常的樂音發(fā)生器處理之外,還必須執(zhí)行演奏處理;這樣,非周期性地產(chǎn)生演奏信息會導(dǎo)致臨時增加計算量。然而,根據(jù)未安排成適當?shù)靥幚砩鲜鲇嬎懔颗R時增加的已知樂音發(fā)生方法,不論是否已輸入演奏信息,都以一種周期性的方式優(yōu)先執(zhí)行樂音發(fā)生器處理,從而有時明顯地推遲演奏處理。
通過提高演奏處理的優(yōu)先權(quán),可以避免推遲演奏處理,然而,在這樣一種情況下,樂音發(fā)生器處理的操作會變成不穩(wěn)定的,使同時生成樂音的數(shù)目臨時減少,或使樂音波形斷開。

發(fā)明內(nèi)容
因此,本發(fā)明的一個目的是提供一種樂音發(fā)生方法和設(shè)備,能夠減少軟件樂音生成器系統(tǒng)中CPU的系統(tǒng)開銷。
本發(fā)明的另一個目的是提供一種樂音發(fā)生方法,它能夠防止臨時增加處理量。
本發(fā)明又一個另外的目的提供一種樂音發(fā)生方法,它能夠以穩(wěn)定的方式執(zhí)行波形形成計算,能夠在波形再生部分要求提供波形數(shù)據(jù)時迅速地輸出波形數(shù)據(jù),還能夠在一系列軟件樂音發(fā)生器的操作期間提供輸入波形數(shù)據(jù),供音色控制過程之用。
本發(fā)明之一個另外的目的是甚至在處理量由于出現(xiàn)演奏信息而增加時,也容許穩(wěn)定的樂音發(fā)生器處理。
本發(fā)明又一個另外的目的是把波形形成所需的算術(shù)運算量減至最少。
為了達到上述目的,一種根據(jù)本發(fā)明第一方面的樂音發(fā)生方法,包括第一步,發(fā)布發(fā)生指令,以發(fā)生多個指定的樂音;第二步,對從多個樂音發(fā)生通道中指定的各個樂音發(fā)生通道,分配指定的樂音,并且把用于指定樂音的控制數(shù)據(jù)寫入各個指定的樂音發(fā)生通道的通道寄存器中,以便在其中存儲;第三步,以預(yù)定的間隔發(fā)布計算開始指令;第四步,為了響應(yīng)第三叔所發(fā)布的計算開始指令,就根據(jù)第三步所發(fā)布的計算開始指令,對指定的樂音發(fā)生通道,相繼地進行樂音形成計算,以便根據(jù)存儲于通道的通道寄存器中的控制數(shù)據(jù),對每個指定的樂音發(fā)生通道,用算術(shù)方法形成多個采樣的波形數(shù)據(jù);第五步,對每個采樣,把由第4步為指定樂音發(fā)生通道而形成的波形數(shù)據(jù)加以混合,以便形成混合的采樣數(shù)據(jù);和第六步,把多個采樣中每個采樣的混合采樣數(shù)據(jù),在每個抽樣周期轉(zhuǎn)換成模擬信號。在樂音形成計算中,第四步根據(jù)在波形數(shù)據(jù)形成以后從通道寄存器讀出控制數(shù)據(jù)和把該控制數(shù)據(jù)寫入通道寄存器,對每個指定的樂音發(fā)生通道,都進行多個采樣的波形數(shù)據(jù)的形成。該樂音發(fā)生方法可以還包括一個第七步驟根據(jù)第一步驟為每個指定樂音發(fā)布的發(fā)生指令,發(fā)布一個中途計算開始指令,以便根據(jù)中途計算開始指令,第四步形成多個采樣的波形數(shù)據(jù),這相當于一個從最后形成波形的一個端點到發(fā)生指令由第一步發(fā)布時的時間點的部分。
根據(jù)本發(fā)明第一方面的樂音發(fā)生方法的另一實施例,包括第一步,把指定的樂音分配給各個從多個樂音發(fā)生通道中指定的樂音發(fā)生通道,并且把指定樂音的控制數(shù)據(jù)寫入指定樂音發(fā)生通道的通道寄存器中,以在其中存儲;第二步,以預(yù)定的間隔發(fā)布計算開始指令;第三步,應(yīng)第二步發(fā)布的計算開始指令的要求,根據(jù)儲存于通道的通道寄存器中的控制數(shù)據(jù),對每個指定的樂音發(fā)生通道,用算術(shù)方法形成多個采樣的波形數(shù)據(jù);第四步,對多個采樣中的每個采樣,把由第三步為指定樂音發(fā)生通道形成的波形數(shù)據(jù)進行混合,以便對多個采樣中每一個采樣都形成混合采樣數(shù)據(jù);第五步,在每個抽樣周期,都把多個采樣的混合采樣數(shù)據(jù)轉(zhuǎn)換成一個模擬信號;和第六步,發(fā)布一項指令,以便利用第五步處理期間的空閑時間發(fā)生多個樂音。第三步只對發(fā)出一個樂音的通道進行波形數(shù)據(jù)的算術(shù)形成。該樂音發(fā)生方法還可以包括一個第七步驟,設(shè)置一個預(yù)定的極限周期;和一個第八步驟,確定對全部指字樂音發(fā)生通道的計算,是否會在預(yù)定的極限周期內(nèi)完成。如果確定對全部指定樂音發(fā)生通道的計算不會在預(yù)定的極限周期內(nèi)完成,則第八步下達指令樂音應(yīng)當在任何樂音發(fā)生通道中失效或消失。
根據(jù)本發(fā)明第一方面的樂音發(fā)生方法的又一個另外的實施例,包括第一步,發(fā)布發(fā)生指令,以便發(fā)生多個指定的樂音;第二步,把這些指定的樂音分配到各個從多個樂音發(fā)生通道中指定的樂音發(fā)生通道內(nèi),并且把用于指定樂音的控制數(shù)據(jù)寫入各個指定樂音發(fā)生通道的通道寄存器內(nèi),以便存入其中;第三步,根據(jù)要在指定樂音發(fā)生通道中發(fā)生的各個樂音的重要程度,確定各指定樂音發(fā)生通道的計算處理次序;第四步,以預(yù)定的間隔發(fā)布計算開始指令;第五步,應(yīng)第四步發(fā)布的計算開始指令的要求,根據(jù)在指定樂音發(fā)生通道的通道寄存器中儲存的控制數(shù)據(jù),用算術(shù)方法形成用于多個采樣的波形數(shù)據(jù);第六步,對多個采樣中的每個采樣,都把為各通道形成的波形數(shù)據(jù)加以混合,以便形成用于多個采樣的混合采樣數(shù)據(jù);和第七步,在每個抽樣周期都把多個采樣的混合采樣數(shù)據(jù)轉(zhuǎn)換成一個模擬信號。第五步根據(jù)第三步確定的計算處理次序,為形成用于指定樂音發(fā)生通道的波形數(shù)據(jù)而進行計算;并且當很可能由第五步為形成波形數(shù)據(jù)而作的計算不會在預(yù)定的時間內(nèi)完成時,和由第七步轉(zhuǎn)換的模擬信號被斷開時,用于形成波形數(shù)據(jù)的計算,就在一個正在按計算處理順序在一個通道上進行計算的時刻,被中斷,以防止模擬信號被中斷。
就根據(jù)第一方面的上述本發(fā)明而論,只是在形成多個波形采樣以后才需要作一次每個通道的準備工作,從而可以大量減少系統(tǒng)開銷。這可提高所發(fā)生樂音的質(zhì)量,并且允許增加那些能夠同時發(fā)生樂音的通道數(shù)目。此外,通過控制每次輸入一個MIDI事件時以這樣的方式要發(fā)生波形采樣的計算或算術(shù)形成,就能夠用一種分散的方式進行計算,并且有可能防止所發(fā)生樂音的數(shù)目由于初始樂音形成操作而不合需要地減少。此外,安排在演奏信息發(fā)生時間執(zhí)行演奏信息輸入操作,并且在輸入操作期間,在空閑時間執(zhí)行的主要步驟中包括以讀入演奏信息為基礎(chǔ)的樂音控制或波形形成;就能夠把演奏信息發(fā)生時增加的處理量分散于空閑時間內(nèi),從而能夠避免臨時增加處理量。在正在進行樂音形成的通道(即,發(fā)音通道)中,把其音級(AEG波形)業(yè)已充分衰減的通道排斥于進一步計算之外,使之成為不發(fā)音的通道。
根據(jù)本發(fā)明第一方面的樂音發(fā)生方法的又一個另外的實施例,包括一個提供演奏能信息的提供步驟;一個用算術(shù)方法形成波形數(shù)據(jù)的主步驟;一個中斷步驟,在由提供步驟提供演奏信息時,臨時中斷主步驟,以便進行一項用于接收所提供演奏信息的預(yù)定輸入操作,并且在完成輸入操作時,在主步驟中斷恢復(fù)進行主步驟;和一個發(fā)生步驟,根據(jù)由主步驟形成的波形數(shù)據(jù),在晚于一個由中斷步驟用算術(shù)方法形成波形數(shù)據(jù)時刻的時刻,發(fā)生一個相應(yīng)的樂音。主步驟包括一個演奏信息處理步驟,用于根據(jù)已經(jīng)歷輸入操作的演奏信息來建立樂音控制數(shù)據(jù),和一個樂音發(fā)生器處理步驟,用于根據(jù)樂音控制數(shù)據(jù),用算術(shù)方法形成格式波形數(shù)據(jù)。當演奏信息由提供步驟提供時,為接收所提供的演奏信息而進行輸入操作,并且在輸入操作期間的空閑時間執(zhí)行的主步驟中,包括以所接收演奏信息為基礎(chǔ)的樂音控制或波形形成,因為如上安排,所以能夠把在演奏信息發(fā)生時間增加的處理量分散于空閑時間內(nèi),從而能夠有效地避免處理量的臨時增加。
一種根據(jù)本發(fā)明第二方面在一個計算單元上實施的樂音發(fā)生方法,包括一個系統(tǒng)步驟,用于執(zhí)行操作系統(tǒng);一個波形形成步驟,用于根據(jù)通過在操作系統(tǒng)上執(zhí)行的應(yīng)用程序所提供的演奏信息,在每個特定的周期用算術(shù)方法形成用于多個采樣的波形數(shù)據(jù);一個輸出步驟,用于在每個采樣循環(huán),輸出由波形形成步驟用算術(shù)方法形成的波形數(shù)據(jù)的一個采樣;和一個控制步驟,應(yīng)輸出步驟的請求,在所述周期內(nèi)進行一項在系統(tǒng)步驟與波形形成步驟之間的任務(wù)轉(zhuǎn)換。
根據(jù)本發(fā)明第二方面的樂音發(fā)生方法的另一實施例,包括一個輸入步驟,用于輸入演奏信息;一個波形形成步驟,用于根據(jù)在一個預(yù)定周期內(nèi)輸入的演奏信息,用算術(shù)方法形成相應(yīng)于預(yù)定周期的波形數(shù)據(jù);一個輸出步驟,用于在每個抽樣周期輸出一個相應(yīng)于預(yù)定周期的波形數(shù)據(jù)采樣;一個波形提供步驟,用于給輸出步驟提供由波形形成步驟形成的相應(yīng)于預(yù)定周期的波形數(shù)據(jù);和一個請求步驟,用于檢測何時由輸出步驟輸出的波形數(shù)據(jù)已有進展,以便請求從波形數(shù)據(jù)提供步驟再提供波形數(shù)據(jù)。波形數(shù)據(jù)提供步驟是應(yīng)請求步驟的請求而執(zhí)行的,且波形形成步驟是在波形數(shù)據(jù)提供步驟以后執(zhí)行的。
根據(jù)本發(fā)明第二方面的樂音發(fā)生方法的又一個另外的實施例,包括一個輸入步驟,用于輸入演奏信息,一個波形形成步驟,用于根據(jù)在一個預(yù)定的周期內(nèi)輸入的演奏信息,用算術(shù)方法形成相應(yīng)于該預(yù)定周期的波形數(shù)據(jù);一個波形合成步驟,用于輸入相慶于預(yù)定周期的外部波形數(shù)據(jù),并且把外部波形數(shù)據(jù)同由波形形成步驟用算術(shù)方法形成的波形數(shù)據(jù)結(jié)合起來,以便形成用于預(yù)定周期的合成波形數(shù)據(jù);和一個輸出步驟,用于在每個抽樣周期都輸出一個合成波形數(shù)據(jù)的采樣。
根據(jù)本發(fā)明第二方面的樂音發(fā)生方法的又一個另外的實施例,包括一個輸入步驟,用于輸入演奏信息;一個波形形成步驟,用于根據(jù)由輸入步驟輸入的演奏信息,在多個階段內(nèi)進行計算,以便用算術(shù)方法形成波形數(shù)據(jù);一個用于輸入外部波形數(shù)據(jù)的步驟;和一個把所輸入的外部波形數(shù)據(jù)插入諸計算階段的一個中的步驟。
作為一個在通用操作系統(tǒng)上運行的應(yīng)用程序來提供常規(guī)軟件樂音發(fā)生器,象MIDI定序器和游戲軟件之類的軟件也是一種在通用操作系統(tǒng)上運行的應(yīng)用程序。在一個不完整(非優(yōu)先)的多任務(wù)操作系統(tǒng)的控制下,不執(zhí)行新的任務(wù),除非一項運行任務(wù)恢復(fù)對該操作系統(tǒng)的控制。這樣,有時可以預(yù)定的時間間隔執(zhí)行軟件樂音發(fā)生器,結(jié)果,在每個抽樣周期樂音波形采樣不能夠穩(wěn)定地輸出到一個D/A轉(zhuǎn)換器中。與此不同,使根據(jù)本發(fā)明第二方面的軟件樂音發(fā)生器,在多任務(wù)管理程序的控制下,而不是在應(yīng)用程序的控制下,進行操作。這就允許用實時處理所需的上述時間間隔可靠地執(zhí)行軟件樂音發(fā)生器,還允許通用操作系統(tǒng)進行操作,以便在軟件樂音發(fā)生器不進行任何處理的周期在其上執(zhí)行應(yīng)用程序的處理。
另外,在像根據(jù)本發(fā)明第一方面的發(fā)生器之類的軟件樂音發(fā)生器中,其中為了提高計算效率,在一個波形緩沖器上用算術(shù)方法集體地形成多個采樣的波形數(shù)據(jù);當波形再生部分(DAC)提出一個波形信息的請求時,有必要迅速地在一個預(yù)定的時間范圍內(nèi)交付波形數(shù)據(jù)。然而,如果例如在那時發(fā)生一些事件,則不能迅速地交付波形,穩(wěn)定的樂音發(fā)生也困難。這一問題可通過根據(jù)本發(fā)明第二方面的改進來克服。此外,許多常規(guī)通用計算機,例如個人計算機,都裝有A/D轉(zhuǎn)換器,輸入聲音用的數(shù)字波形輸入插件,但它們不能根據(jù)這樣輸入的波形數(shù)據(jù)執(zhí)行一個軟件樂音發(fā)生器的樂音控制處理功能。這一問題也能夠通過根據(jù)第二方面的改進來克服。
根據(jù)本發(fā)明經(jīng)二方面的樂音發(fā)生方法的又一個另外的實施例,包括一個提供步驟,用于提供演奏信息;一個形成步驟,用于根據(jù)控制信息用算術(shù)方法形成波形數(shù)據(jù);一個中斷步驟,用于在由提供步驟提供演奏信息時,臨時中斷形成步驟,以便執(zhí)行演奏信息的處理,并且在完成演奏信息的處理時,在形成步驟中斷處繼續(xù)執(zhí)行形成步驟;和一個樂音發(fā)生步驟,用于根據(jù)由形成步驟形成的波形數(shù)據(jù),在遲于由形成步驟形成波形數(shù)據(jù)的時刻,發(fā)生一個相應(yīng)的樂音。
一種根據(jù)本發(fā)明第二方面的樂音發(fā)生設(shè)備,包括一個存儲器,用于存儲一個樂音發(fā)生器處理程序和一個演奏處理程度;一個供應(yīng)部分,用于供應(yīng)演奏信息;一個寄存器,用于存儲控制信息;一個計算部分,用于執(zhí)行樂音發(fā)生器處理程序和演奏處理程序。計算部分通常執(zhí)行樂音發(fā)生器處理程序,以便根據(jù)控制信息形成波形數(shù)據(jù)。當供應(yīng)部分供應(yīng)演奏信息時,計算部分臨時中斷樂音發(fā)生器處理程序的執(zhí)行,以便執(zhí)行演奏處理程序,從而創(chuàng)立相應(yīng)于所供應(yīng)演奏信息的控制信息,并且把所創(chuàng)立的控制信息存入寄存器中;還在完成演奏處理程序時,在樂音發(fā)生器處理程序的中斷處,繼續(xù)執(zhí)行樂音發(fā)生器處理程序。該設(shè)備還包括一個樂音輸出部分,用于根據(jù)由樂音發(fā)生器處理程序形成的波形數(shù)據(jù),在遲于由計算部分形成波形數(shù)據(jù)的時刻,發(fā)生一個相應(yīng)的樂音。
根據(jù)本發(fā)明第二方面的樂音發(fā)生方法的又一個另外的實施例,包括一個供應(yīng)步驟,用于供應(yīng)演奏信息;一個形成步驟,用于用算術(shù)方法形成波形數(shù)據(jù);一個中斷步驟,用于在由供應(yīng)步驟供應(yīng)演奏信息時,臨時中斷形成步驟,以便執(zhí)行演奏信息的處理,然后在完成演奏信息的處理時,在形成步驟中斷處,繼續(xù)執(zhí)行形成步驟;和一個樂音發(fā)生步驟,用于根據(jù)由形成步驟形成的波形數(shù)據(jù),在遲于由形成步驟形成波形數(shù)據(jù)的時刻,發(fā)生一個相應(yīng)的樂音。形成步驟根據(jù)由中斷步驟處理的演奏信息,用算術(shù)方法形成波形數(shù)據(jù)。
根據(jù)本發(fā)明第二方面的樂音發(fā)生方法的又一個另外的實施例,包括一個系統(tǒng)步驟,用于執(zhí)行一個預(yù)定的操作系統(tǒng);一個波形形成步驟,用于根據(jù)一個來自在預(yù)定操作系統(tǒng)上執(zhí)行的應(yīng)用程序的指令,在每個預(yù)定的周期,對預(yù)定數(shù)目的采樣用算術(shù)方法形成波形數(shù)據(jù);一個輸出步驟,用于在每個抽樣周期,都輸出一個由波形形成步驟用算術(shù)方法形成的波形數(shù)據(jù)的采樣,和一個控制步驟,用于應(yīng)輸出步驟的請求,在預(yù)定的周期內(nèi),進行一個在系統(tǒng)步驟與波形形成步驟之間的任務(wù)轉(zhuǎn)換。波形形成步驟用一種間歇方式,進行樂音參數(shù)計算操作。
根據(jù)本發(fā)明第二方面的樂音發(fā)生方法的又一個另外的實施例,包括一個輸入步驟,用于輸入演奏信息;一個波形形成步驟,用于根據(jù)在一個預(yù)定周期內(nèi)輸入的演奏信息,用算術(shù)方法形成相應(yīng)于預(yù)定周期的波形數(shù)據(jù);一個輸出步驟,用于在每個抽樣周期輸出一個相應(yīng)于預(yù)定周期的波形數(shù)據(jù)的采樣,一個波形數(shù)據(jù)交付步驟,用于給輸出步驟提供波形形成步驟形成的相應(yīng)于預(yù)定周期的波形數(shù)據(jù);和一個請求步驟,用于檢測何時在由輸出步驟輸出波形數(shù)據(jù)方面已有進展,以便請求由波形數(shù)據(jù)交付步驟另外提供波形數(shù)據(jù)。波形形成步驟以一種間歇的方式進行樂音參數(shù)計算操作,波形數(shù)據(jù)交付步驟是應(yīng)請求步驟的請求來執(zhí)行的,而波形形成步驟是在交付步驟以后執(zhí)行的。
根據(jù)本發(fā)明第二方面的樂音發(fā)生方法的又一個另外的實施例,包括一個輸入步驟,用于輸入演奏信息;一個波形形成步驟,用于根據(jù)在一個預(yù)定周期內(nèi)輸入的演奏信息,用算術(shù)方法形成相應(yīng)于該預(yù)定周期的波形數(shù)據(jù);一個波形合成步驟,用于輸入相應(yīng)于預(yù)定周期的外部波形數(shù)據(jù),并且把該外部波形數(shù)據(jù)同由波形形成步驟用算術(shù)方法形成的波形數(shù)據(jù)結(jié)合起來,以便形成用于預(yù)定周期的合成波形數(shù)據(jù);一個波形處理步驟,用于對預(yù)定周期的合成波形數(shù)據(jù)進行信號處理;和一個輸出步驟,用于在每個抽樣周期輸出合成波形數(shù)據(jù)的一個采樣。波形形成步驟以一種間歇的方式進行一個樂音參數(shù)計算操作。
根據(jù)如上所述的本發(fā)明第二方面,演奏處理最好依據(jù)演奏信息的發(fā)生情況來執(zhí)行,樂音發(fā)生器處理是在演奏處理期間在空閑時間里相繼地執(zhí)行的。就這種安排而論,甚至在由于響應(yīng)演奏信息的發(fā)生而增加處理量,從而不能以充分的程度執(zhí)行樂音發(fā)生器處理之處,也能夠在某些其他時間里彌補其不足額;因此,能夠以一種穩(wěn)定化的方式執(zhí)行樂音發(fā)生器處理。此外,因為有安排當提供步驟提供演奏信息時,就進行輸入操作,以接收所提供的演奏信息,并且在輸入操作期間的空閑時間里執(zhí)行的主步驟中,包括以所接收的演奏信息為基礎(chǔ)的樂音控制或波形形成;所以在演奏信息發(fā)生時間增加的處理量能夠分散于空閑時間里,從而能夠有效地避免處理量的臨時增加。


為了更好地了解本發(fā)明的上述特點和其他特點,下面參照附圖,詳述本發(fā)明的一些最佳實施例,在附圖中圖1是一個方塊圖,說明根據(jù)本發(fā)明第一方面的一個樂音發(fā)生設(shè)備實施例的硬件結(jié)構(gòu);
圖2是一個說明圖1所示RAM的一個音色數(shù)據(jù)區(qū)的圖;圖3是一個說明圖1的RAM的一個輸入緩沖區(qū)的圖;圖4是一個說明圖1的RAM的一個通道寄存區(qū)的圖;圖5是一個說明圖1的RAM的一個輸出緩沖區(qū)的圖;圖6是一個由圖1的CPU執(zhí)行的主程序的流程圖;圖7是一個根據(jù)本發(fā)明的樂音發(fā)生處理中一個MIDI接收中斷過程的流程圖;圖8是一個說明圖6主程序中由CPU執(zhí)行的一個MIDI過程的細節(jié)的流程圖;圖9A是一個當所接收數(shù)據(jù)是音通事件數(shù)據(jù)時,在圖8的MIDI過程中由CPU執(zhí)行的音通過程的流程圖;圖9B是一個當所接收數(shù)據(jù)是音斷事件數(shù)據(jù)時,在圖8的MIDI過程中由CPU執(zhí)行的音斷過程的流程圖;圖10是一個在圖8的主程序中的CPU執(zhí)行的樂音發(fā)生器過程的流程圖;圖11是一個在圖9A、9B和10的過程中執(zhí)行的波形形成計算過程的流程圖;圖12是一個說明本發(fā)明第二個實施例的時間圖;圖13是一個根據(jù)本發(fā)明第二個實施例說明軟件模塊配置的方塊圖;圖14是一個說明在實施例中是怎樣執(zhí)行一項特定任務(wù)的圖;圖15是一個說明圖13的樂音發(fā)生器任務(wù)中全部處理的等效電路圖;圖16是一個說明各種發(fā)生樂音的操作的處理時間的圖;圖17是一個樂音發(fā)生器任務(wù)的流程圖;和圖18A與18B是波形形成計算過程的流程圖;圖19是一個說明處理設(shè)備的典型硬件配置的方塊圖,在該設(shè)備上實現(xiàn)本發(fā)明的樂音發(fā)生方法;圖20是一個說明波形形成計算過程另一實施例的流程圖;
圖21是一個說明波形形成計算過程的又一個另外的實施例的流程圖;圖22是一個說明包絡(luò)波形計算操作的流程圖;圖23是一個說明低頻信號的包絡(luò)波形計算操作的流程圖;圖24是一個說明音量值與移動(panning)值內(nèi)插操作的流程圖;和圖25A和25B是說明包絡(luò)和低頻信號波形實例的圖。
具體實施例方式
首先,參照附圖1至12,描述根據(jù)本發(fā)明第一方面的一個實施例;在附圖中,圖1是一個說明一個能夠執(zhí)行本發(fā)明樂音發(fā)生方法的樂音發(fā)生設(shè)備實施例的硬件結(jié)構(gòu)的方塊圖。
在圖1中,樂音發(fā)生設(shè)備包括一個微處理機(CPU)1,它執(zhí)行應(yīng)用程序等,以便在樂音波形采樣等形成中進行各種控制;一個只讀存儲器(ROM),其中已存有預(yù)置音色數(shù)據(jù)等;一個隨機存取存儲器(RAM),其中包括一個供CPU1使用的工作存儲區(qū),一個音色數(shù)據(jù)區(qū),一個輸入緩沖區(qū),一個通道寄存器區(qū),一個輸出緩沖區(qū)等;一個計時器4,用于計算時間和指令CPU計時器中斷計時;一個MIDI接口,通過該接口把MIDI事件數(shù)據(jù)輸入和輸出該設(shè)備;一個鍵盤6,類似于個人計算機鍵盤,包括鍵入英文和日文字母、數(shù)字和符號用的鍵。
該樂音發(fā)生設(shè)備還包括一個顯示器(監(jiān)視器)7,它能使用戶與設(shè)備對話;一個硬盤8,其中裝有一個應(yīng)用程序,例如用于發(fā)生樂音的程序,并且其中存有樂音波形數(shù)據(jù),用于形成樂音波形采樣;一個再生部分(DMA直接存儲器存取),它在不干預(yù)CPU1的情況下,讀出存于CPU1指定的RAM3的一個區(qū)中的樂音波形數(shù)據(jù),并且把讀出的數(shù)據(jù)以預(yù)定的抽樣頻率(例如48KHz)供給一個D/A轉(zhuǎn)換器(DAC)10;和一個音響系統(tǒng)11,用于從D/A轉(zhuǎn)換器10可聽地再生或發(fā)出模擬樂音信號。
上述部件都類似于個人計算機或工作站的部件,都能夠用來實現(xiàn)本發(fā)明的樂音發(fā)生方法。
在RAM3內(nèi)的各種數(shù)據(jù)存儲區(qū)中,其音色數(shù)據(jù)區(qū)示于圖2中,輸入緩沖區(qū)示于圖3中,通道寄存區(qū)示于圖4中,和輸出緩沖區(qū)示于圖5中。
在圖2的音色數(shù)據(jù)區(qū)中,“PD1,PD2...,PD16”表示16種音色數(shù)據(jù),每種音色數(shù)據(jù)包括指定給定音調(diào)范圍的波形的數(shù)據(jù)(音調(diào)范圍波形指定數(shù)據(jù));控制LFO(低頻振蕩器)的數(shù)據(jù),用于給出顫音效果或類似效果;控制濾波器包跡發(fā)生的數(shù)據(jù),用于提供一種受控的音色濾波特性;用于控制一種振幅-控制包跡發(fā)生的數(shù)據(jù);按鍵控制數(shù)據(jù),用于根據(jù)檢出的鍵-按速度來改變樂音或類似音的上升速度;和其他數(shù)據(jù)。這些在圖2的音色數(shù)據(jù)區(qū)存儲的數(shù)據(jù)都是隨著一個樂音發(fā)生指令而提供的原始數(shù)據(jù),這些數(shù)據(jù)都將按照按鍵數(shù)據(jù)、音調(diào)數(shù)據(jù)等進行處理,以便建立由一個樂音發(fā)生器使用的樂音形成數(shù)據(jù)。
此外,在圖2中的“WD1,WD2,...,WDn”表示波形數(shù)據(jù),其中任何一個數(shù)據(jù)都是根據(jù)輸入音調(diào)數(shù)據(jù),由音色數(shù)據(jù)PD1,PD2,...PD16之一的音調(diào)范圍波形指定數(shù)據(jù)來指定的。
MIDI事件數(shù)據(jù)ID1,ID2,ID3,...,表示各種事件,例如音通和音斷事件,并且通過MIDI接口5而接收;它們都被順序?qū)懭雸D3所示的輸入緩沖器中。通過讀出這些MIDI事件數(shù)據(jù)ID1,ID2,ID3,...,可在樂音發(fā)生設(shè)備中進行一個事件過程。MIDI事件數(shù)據(jù)ID1,ID2,ID3,...的每個都包括指示MIDI事件內(nèi)容的和事件數(shù)據(jù)發(fā)生時間的(數(shù)據(jù)發(fā)生時間或事件發(fā)生時間)數(shù)據(jù)。在接收MIDI事件數(shù)據(jù)時,通過讀由計時器4計數(shù)的當前時間,能夠確定數(shù)據(jù)發(fā)生時間。
圖4所示的區(qū)用作一個通道(CH)寄存器,以存儲控制各個單樂音形成的數(shù)據(jù),并且在所說明的實例中,通道寄存區(qū)可提供總計32個通道的存儲位置。每個通道存儲位置都存儲一個音符號,波形指定數(shù)據(jù),LFO控制數(shù)據(jù),濾波器包跡指定數(shù)據(jù)(FEG控制數(shù)據(jù)),振幅包跡控制數(shù)據(jù)(AEG控制數(shù)據(jù)),音通數(shù)據(jù)和其他數(shù)據(jù),以及一個CPU在執(zhí)行程序期間使用的工作區(qū)。在圖4的通道寄存區(qū)中的波形指定數(shù)據(jù)、LFO控制數(shù)據(jù)、FEG控制數(shù)據(jù)和AEG控制數(shù)據(jù)都是通過處理圖2的各個原始數(shù)據(jù)而得出的樂音形成數(shù)據(jù)。
圖5所示的區(qū)是用于多個輸出緩沖器的,它們依次用作樂音波形形成輸出緩沖器X。每當用于各個樂音發(fā)生通道SD1、SD2、SD3、...的樂音波形采樣數(shù)據(jù),按照稍后所述的算術(shù)操作而形成時,這些數(shù)據(jù)就逐個通道地被累積,并且所得的累積數(shù)據(jù)被存入輸出緩沖器中。兩個或多個這類輸出緩沖器被指定為樂音波形形成輸出緩沖器X,并且用于波形計算操作。最簡單的形式是,可用兩個輸出緩沖器X提供一種雙緩沖器結(jié)構(gòu),以便在存儲于緩沖器X的一個中的數(shù)據(jù)正在由再生部分(DMA)9再生的同時,通過波形形成操作得出的新的波形采樣數(shù)據(jù),可存入另一個緩沖器X。
輸出緩沖器可被設(shè)置成具有任一任選尺寸,例如100、500、1K或5K字長。如果輸出緩沖器被設(shè)置成大尺寸,就會在樂音形成時發(fā)生明顯的時間延遲;如果輸出緩沖器被設(shè)置成小尺寸,就會大大減小時間余量,從而在臨時增加要作的算術(shù)運算量時,導(dǎo)致不良的響應(yīng)。這樣,對于不需要實時處理能力的定序器性能或類似性能來說,輸出緩沖器的尺寸可以作得大一些,因為樂音形成時的時間延遲能夠用提前演奏定時的方法來補償。另一方面,對于需要實時處理能力的鍵盤演奏或類似演奏來說,最好是,輸出緩沖器的尺寸被設(shè)置成100至200字長,以便防止在樂音形成時的時間延遲。在抽樣頻率為40至50KHz的情況下,上面提出的數(shù)據(jù)尺寸是最好的。然而,對于更低的抽樣頻率,輸出緩沖器的尺寸必須更小,才能避免樂音形成時的時間延遲。
其次,下面將描述本發(fā)明的樂音發(fā)生方法的第一至第五個實施例,其中每個實施例都能夠用圖1所示的樂音發(fā)生設(shè)備來實現(xiàn)。
根據(jù)第一實施例的樂音發(fā)生方法之特征在于通過CPU1執(zhí)行一個樂音形成應(yīng)用程序,在樂音形成過程中對每個通道都集體地形成多個(例如100個)樂音波形采樣。尤其是,在樂音形成過程中,根據(jù)D/A轉(zhuǎn)換器10的100個抽樣周期,對每個樂音發(fā)生通道,集體地形成樂音波形采樣。
這樣,在每個預(yù)定的計算點,對全部通道進行樂音形成過程。在此,所形成的樂音波形采樣數(shù)是“100”,順序地累積這些采樣,作為D/A轉(zhuǎn)換器10的100個抽樣周期的通道特有累積值,并且存入上述輸出緩沖器中。在對全部的樂音發(fā)生通道完成采樣累積以后,存儲于輸出緩沖器中的樂音波形采樣,按照一個抽樣周期一個采樣的方式,由再生部分(DMA)9讀出,并且通過D/A轉(zhuǎn)換器10供給音響系統(tǒng)11,以便可聽地再生。本實施例中的預(yù)定計算點是受控的,以便以下述間隔出現(xiàn)當依次用輸出緩沖器執(zhí)行樂音形成過程時,能夠讀出全部的樂音波形采樣,并且在沒有中途停頓的情況下把它們完全再生。
根據(jù)樂音發(fā)生方法的第一個實施例,對每個通道進行準備性操作,但對于要集體形成的多個樂音波形采樣僅需一次,從而允許減少算術(shù)運算或花在準備操作上的計算時間對整個計算時間的比例,故大大減少系統(tǒng)開銷操作。這就能夠大大提高所形成樂音波形采樣的質(zhì)量,并增加可同時發(fā)生的樂音數(shù)目。
在預(yù)定計算點之間的每個時間區(qū)段可以分成“n”個相等的部分,以便在相應(yīng)于“n”個部分的間隔進行波形采樣形成計算;并且再生段(DMA)9可以,對在第“n”個部分完成計算的各組樂音波形采樣,進行讀出。
下面描述根據(jù)第二個實施例的樂音發(fā)生方法,其中,按照類似于第一實施例的方式,通過CPU1執(zhí)行樂音形成應(yīng)用程序,在樂音發(fā)生過程中對每個通道,集體地形成多個樂音波形采樣;并且還要在每當通過MIDI接口5接收輸入數(shù)據(jù)(在這種情況下是MIDI事件數(shù)據(jù))時,都對采樣進行波形算術(shù)運算或計算,直至?xí)r間點為止。在預(yù)定的計算點,只對預(yù)定的多個樂音波形采樣(即,相應(yīng)于各個輸出緩沖器尺寸的采樣)中的未計算過的采樣,進行樂音波形采樣計算。
在樂音形成過程中,波形采樣計算是對當前正在發(fā)聲的各個樂音發(fā)生通道進行的;在這種情況下,如果各個通道出現(xiàn)一種涉及隨輸入數(shù)據(jù)(音調(diào)偏移或音量變化)而變的特殊形式樂音發(fā)生的鍵通或鍵斷事件,則所需的算術(shù)運算多于其他通道的算術(shù)運算;在其他通道中,由于不隨輸入數(shù)據(jù)而變化,故仍在繼續(xù)進行樂音發(fā)生。在這種情況下,由于計算點設(shè)置成發(fā)生于固定的間隔,故操作周期中的大量時間,被涉及樂音發(fā)生的形式變化的通道所占據(jù),這就最終減少樂音發(fā)生通道的數(shù)目,對這些通道來說,所需的算術(shù)運算是能夠在有限時間內(nèi)完成的。尤其是,對于要開始進行樂音發(fā)生的各個通道來說,都需要許多初始化的操作,例如地址計數(shù)器和包跡發(fā)生器的初始化以及一種“F”數(shù)的發(fā)生等,這就占用了長的操作時間。
圖12是一個說明第二個實施例的計時圖,其中按照上述雙緩沖器結(jié)構(gòu)裝有第一和第二輸出緩沖器A和B,并且示于(e)部的圖中。從緩沖器A和B再生所需的時間,分別用TA和TB示出,并且在本實施例中TA等于TB。
首先,在如圖12的(a)部所示的分配給第一輸出緩沖器A的從點t0到t1的計算時間范圍內(nèi),由一個MIDI接收部分在點ta接收兩個MIDI事件之后,一個樂音發(fā)生器(T.G.)驅(qū)動部分進行如(b)部所示的處理,并且一個樂音發(fā)生器(T.G.)部分對相應(yīng)于從t0點到ta點的期間接收的輸入的樂音波形采樣A1進行計算。
MIDI接收部分包括用來接收各個輸入MIDI事件的MIDI接口5,MIDI接收部分還把MIDI事件同它的發(fā)生時間一起寫入輸入緩沖器中。樂音發(fā)生器驅(qū)動部分從輸入緩沖器或從個人計算機鍵盤6接收數(shù)據(jù),把所接收的數(shù)據(jù)分配給多個樂音發(fā)生器通道之一,并且根據(jù)輸入數(shù)據(jù)執(zhí)行從聲音參數(shù)到樂音發(fā)生器參數(shù)的轉(zhuǎn)換。此外,樂音發(fā)生器部分接收樂音發(fā)生器參數(shù),并且處理波形數(shù)據(jù),以形成要實際發(fā)音的樂音波形采樣。一個LPF部分把混淆的噪聲成分從所形成的樂音波形采樣中清除,并且把從LPF部分輸出的數(shù)據(jù)寫入第一與第二輸出緩沖器A和B。上述樂音發(fā)生器驅(qū)動部分、樂音發(fā)生器部分和LPF部分都是通過CPU1執(zhí)行應(yīng)用程序來實施的功能。
其次,當MIDI接收部分在點tb接收一個MIDI事件以后,樂音發(fā)生器驅(qū)動部分就進行如(b)部所示的與上述情況類似的處理,并且樂音發(fā)生器部分計算相應(yīng)于從點ta到點tb的期間接收的輸入的樂音波形采樣A2。其后,在到達點t1時,樂音發(fā)生器部分計算相應(yīng)于從點tb到點t1期間所接收輸入的樂音波形采樣A3。在這種情況下,在點ta和tb接收一些鍵通事件時,就在這個點t1進行樂音發(fā)生初始化和算術(shù)運算。此后,LPF進行一個濾波操作,從而為第一輸出緩沖器A完成所需的樂音波形采樣形成。
其次,在如圖12的(a)部所示的為第二輸出緩沖器B分配的從點t1到點t2的計算時期中,MIDI接收部分在點tc接收三個MIDI事件。因為樂音發(fā)生器部分現(xiàn)在正在計算樂音波形采樣A3,故輸入事件數(shù)據(jù)被臨時地保存于輸入緩沖器中,直至把計算時間分配到該數(shù)據(jù)為止。在樂音發(fā)生器部分完成樂音波形采樣A3的計算和LPF部分完成濾波操作以后,樂音發(fā)生器驅(qū)動部分從要處理的輸入緩沖器讀出事件數(shù)據(jù),這樣樂音發(fā)生器部分計算相應(yīng)于從點t1到點tc期間所接收輸入的樂音波形采樣B1。即使在計算操作中發(fā)生一些時間延遲,也不會影響樂音發(fā)生時間,因為輸入事件數(shù)據(jù)的發(fā)生時間也已被寫入輸入緩沖器中。
此后,MIDI接收部分在樂音波形采樣B1的計算期間接收4個MIDI事件,并且處理這些事件,以便在計算樂音波形采樣B1之后計算相應(yīng)的樂音波形采樣,其情況類似于上述情況。
用相同的方式,作為相應(yīng)于從點tc到點td期間所接收的輸入的采樣,形成樂音波形采樣B2,作為相應(yīng)于從點td到點te期間所接收的輸入的采樣,形成樂音波形采樣B3,和作為相應(yīng)于從點te到點t2期間所接收的輸入的采樣,形成樂音波形采樣B4。其后,作為相應(yīng)于從點t2到點t3期間所接收的輸入的采樣形成樂音波形采樣A5。
正如從上面看到的那樣,每當輸入數(shù)據(jù)發(fā)生時,第二實施例都在輸入數(shù)據(jù)發(fā)生以前的一段時期計算波形采樣,從而能夠以基本上分散的方式進行波形采樣計算。這樣,以預(yù)定的間隔在每個計算時期進行的操作量就被適當?shù)叵拗?,從而甚至在發(fā)生許多涉及樂音發(fā)生的形式變化的輸入數(shù)據(jù),例如鍵通事件數(shù)據(jù)時,也有可能避免一些不便之處,例如可同時發(fā)生樂音的數(shù)目被減少。
下面描述根據(jù)第三個實施例的樂音發(fā)生方法。
為了在計算點是以預(yù)定間隔發(fā)生的情況下,和在預(yù)定數(shù)目的樂音波形采樣是通過算術(shù)運算在每個計算周期集體地形成的情況下,相繼地發(fā)生樂音,就必須在形成以前的樂音波形采樣被完成之前,供給預(yù)定數(shù)目的樂音波形采樣。然而,如果樂音發(fā)生通道的數(shù)目相當大,從而波形計算操作量過大,就會出現(xiàn)一個問題不能夠及時供應(yīng)全部通道的樂音波形采樣,使所發(fā)生的樂音不合乎需要地中斷或間斷。
根據(jù)第三個實施例的樂音發(fā)生方法打算用于解決上述的麻煩問題。更準確地說,第三實施例確定是否能夠在D/A轉(zhuǎn)換器10的數(shù)據(jù)轉(zhuǎn)換期間及時地供應(yīng)預(yù)定數(shù)目的樂音波形采樣。如果確定能夠在數(shù)據(jù)換期間及時地供應(yīng)樂音波形采樣,就選擇一個或多個這樣的樂音發(fā)生通道其樂音在當前時間正在發(fā)生的全部樂音中所具有的重要程度是比較小的。然后,對指定的通道,本實施例在短期內(nèi)計算相當于波形的初始時期的阻尼波形采樣。
因為只對指定的樂音發(fā)生通道計算短期阻尼波形采樣,所以能夠減少該通道所需的計算時間,從而可在D/A轉(zhuǎn)換器10的數(shù)據(jù)轉(zhuǎn)換期間及時地供應(yīng)全部的預(yù)定數(shù)目的樂音波形采樣。
一般說來,在第三實施例中被定為“重要”的樂音有(1)當前有大音量的樂音;(2)其初始部位(attack portion)剛開始發(fā)聲的樂音;
(3)當兩個或多個部分的樂音正在發(fā)聲時的最低音調(diào)樂音(低音部);(4)當兩個或多個部分的樂音正在發(fā)聲時的最高音調(diào)樂音;和(5)當兩個或多個部分的樂音正在發(fā)聲時的一個獨奏部分的樂音。
第三實施例可以修正如下。按照在波形采樣計算之前要在其中發(fā)生樂音的重要性遞降順序,以下述方式布置樂音發(fā)生通道從最重要的樂音到最不重要的樂音順序地完成采樣計算。如果不能及時地完成全部通道的波形采樣計算,就中斷計算,以便只用迄今已形成的樂音波形采樣發(fā)生樂音。這樣,如果需要中斷采樣計算,則只是重要性較小的一個樂音或幾個樂音被停用或消去,從而影響較小。
在上述第三實施例及其修正例中,可以總是在輸入數(shù)據(jù)發(fā)生時進行波形采樣的計算。換句話說,可以為每個時間段,而不是根據(jù)每個輸入數(shù)據(jù)的發(fā)生,集體地進行波形采樣的計算;在這種情況下,可能最好是按照輸入數(shù)據(jù)的數(shù)量超前計算點發(fā)生觸發(fā)信號。在另一修正例中,預(yù)定計算點之間的每個時間段可以被分成“n”個相等的部分,以便按照相應(yīng)于“n”個部分的間隔進行波形采樣計算,并且再生部分(DMA)9可以讀出在第“n”個部分完全形成的各組樂音波形采樣。
為了在計算點都是在預(yù)定的間隔下發(fā)生的情況下,和在預(yù)定數(shù)目的樂音波形采樣都是通過算術(shù)運算集體地形成的情況下,相繼地發(fā)生樂音,就必須在以前的樂音波形采樣的形成被完成之前,供給預(yù)定數(shù)目的樂音波形采樣。然而,如果樂音發(fā)生通道的數(shù)目比較大,從而波形計算操作量過大,或如果例如由于花在其他處理上的時間比花在樂音形成處理(例如定序器處理)上的時間多得多,而不能及時地供給預(yù)定數(shù)目的樂音波形采樣,就在仍然在進行處理的過程中讀出一個或多個樂音波形采樣,從而造成不希望有的噪聲。
根據(jù)第四個實施例的樂音發(fā)生方法打算解決這一麻煩問題。在第四實施例中,CPU1指令再生部分(DMA)9發(fā)送存儲于任何一個輸出寄存器中的數(shù)據(jù),并且能夠在再生部分9中設(shè)置它本身就用于存儲預(yù)定數(shù)目的所形成樂音波形采樣的輸出緩沖器的地址,將此地址用作讀出部分的地址,或要從其中重復(fù)地讀出數(shù)據(jù)的重復(fù)讀出部分的地址。此外,可以用下列方式作成讀出部分保留能夠在一個當前正在從其中讀出數(shù)據(jù)的特定讀出部分之后,立即讀出該地址中的數(shù)據(jù)。
根據(jù)第四個實施例,讀出部分保留允許所形成的樂音波形采樣,寄存于供保留用的輸出緩沖器中,并且在一個當前正在讀出的特定波形之后立即讀出。在預(yù)定數(shù)量的樂音波形采樣的計算沒有及時完成的情況下,這樣一種保留寄存是無效的,從而有可能防止發(fā)生噪聲;換句話說,任何處于正在處理過程中的樂音波形采樣發(fā)聲都會引起噪聲。這會臨時中斷某一樂音的發(fā)聲,但通過在例如44.1KHz的抽樣頻率情況下把中斷時間限制成只有幾個抽樣周期,就會大大減少中斷所帶來的負作用。如上所述,通過限制發(fā)生樂音的通道數(shù)目,可以實現(xiàn)中斷時間的限制。在完成計算以后,進行保留寄存,使相應(yīng)波形的采樣發(fā)聲。
可以為每個時間段集體地進行波形采樣計算,而不是根據(jù)每個輸入數(shù)據(jù)的發(fā)生來進行。在這種情況下,可能最好是按照輸入數(shù)據(jù)的數(shù)目提前于計算點發(fā)生一個觸發(fā)信號。在另一修正例中,在預(yù)定計算點之間的每個時間段可以被分成“n”個相等的部分,以便在相應(yīng)于“n”個部分的間隔進行波形采樣計算,并且可對一個時間段的已在最后第“n”次計算中完全形成的樂音波形采樣,為其發(fā)聲而作一種保留寄存。
如上所述,在計算點是在預(yù)定間隔發(fā)生的,和預(yù)定數(shù)目的樂音波形采樣是通過算術(shù)運算集體地形成的情況下,或者在波形采樣計算是根據(jù)每個輸入數(shù)據(jù)的出現(xiàn)執(zhí)行的情況下,為了相繼地發(fā)生樂音,必須在以前的樂音波形采樣的形成被完成之前,供應(yīng)預(yù)定數(shù)目的樂音波形采樣。
根據(jù)一個以前的樂音波形采樣的形成被結(jié)束的時間點(以前的樂音波形采樣的結(jié)束時間點),指定這樣的一個點作為一個特定樂音波形采樣的計算點,這個點比規(guī)定的結(jié)束時間點早完成一個波形所需的時間。因為結(jié)束時間點是通過CPU1核查再生部分(DMA)9的當前狀態(tài)(標志)而確認的,借此檢測何時采樣再生時間段已移到下一個時間段,所以實際結(jié)束時間點會延遲,直到CPU1檢測出再生部分(DMA)9的狀態(tài)(標志)變化為止。此外,因為這種時間延遲取決于何時CPU1完成上述的檢測,所以單獨形成的采樣會出現(xiàn)取決于各自的檢測計時的不均勻的延遲。
在根據(jù)這樣不均勻地延遲的結(jié)束時間點產(chǎn)生計算點時,不能夠得到正確的計算點。尤其是,如果根據(jù)延遲大的計時產(chǎn)生計算點時,則在計算開始與供給波形數(shù)據(jù)之間的總時間長度被顯著地縮短,從而同時發(fā)生的樂音數(shù)目被臨時減少。
根據(jù)第五個實施例的樂音發(fā)生方法打算解決這一麻煩問題。
根據(jù)第五個實施例,CPU1把多個時間點存入存儲器,這些時間點是過去測出其再生部分(DMA)9狀態(tài)有變化時的時間點;CPU1還通過平均這些已存儲的時間點,預(yù)測會在下次檢測出這種變化的時間點。因為預(yù)測的時間點相應(yīng)于再生部分(DAM)9中規(guī)定的結(jié)束時間點的時間延遲的平均,所以在預(yù)測時間點以前的一個預(yù)定的時間點能夠看成是一個實際上的正確結(jié)束時間點。這樣,可根據(jù)正確的結(jié)束時間點產(chǎn)生計算點。用這種方法,平均所檢測的結(jié)束時間點,以減少其不均勻性,從而分配給各個計算點的操作周期就按下述方式有效地均勻化用穩(wěn)定化的方式進行樂音形成操作。
波形采樣的計算可以對每個時間段集體地進行,而不是根據(jù)每個輸入數(shù)據(jù)的出現(xiàn)進行。在這種情況下,可能最好是按照輸入數(shù)據(jù)的數(shù)量超前計算點發(fā)生一個觸發(fā)信號。在另一修正例中,在預(yù)定計算點之間的各個時間段可以分成“n”個相等的部分,以使在相應(yīng)于“n”個部分的間隔進行波形形成計算過程,并且可對一時間段的已在最后第"n”次計算中全部形成的樂音波形采樣,為其發(fā)聲而作一種保留寄存。
下面參照流程圖,對與第一至第五實施例有關(guān)的如上所述的樂音發(fā)生設(shè)備與方法,描述其基本的操作。
圖6是一個由CPU1執(zhí)行的主程序的流程圖。主程序開始時,在步驟S10執(zhí)行一個初始化過程;在此步驟中,計時器4和DMA9被設(shè)置成各自的初始狀態(tài),全部樂音發(fā)生通道被清零,和音色數(shù)據(jù)和波形數(shù)據(jù)等被準備。其后,CPU1移到步驟S20,在此執(zhí)行一個鍵盤過程,以處理從鍵盤6輸入的數(shù)據(jù)。在下一步驟S30,對相應(yīng)于一個輸入MIDI事件的操作執(zhí)行一個MIDI過程。此外,在步驟S40執(zhí)行一個樂音發(fā)生器過程,用于進行波形采樣計算,以形成樂音波形采樣等;還在步驟S50執(zhí)行其他必要的過程。在步驟S50之后,主程序循環(huán)返回到步驟S20,以便在一個恒定的循環(huán)中重復(fù)地進行上述的S20至S50的過程。在使用多任務(wù)技術(shù)執(zhí)行另一軟件程序時,可以同時進行這些過程。
圖7是一個由CPU1執(zhí)行一個MIDI接收中斷過程的流程圖,它在通過MIDI接口5從外部接收MIDI事件數(shù)據(jù)時,用一個中斷信號來啟動。在優(yōu)先于任何其他過程的情況下執(zhí)行這個MIDI接收中斷過程。啟動MIDI接收中斷過程時,在步驟S100把通過接口5接收的MIDI事件數(shù)據(jù)讀入樂音發(fā)生設(shè)備;并且在步驟S110,同數(shù)據(jù)的發(fā)生時間或接收時間一起,寫入上述的輸入緩沖器中;然后CPP1返回到在給出中斷信號時正在執(zhí)行的主程序中的某一個過程中。用這種方式,把每個接收的MIDI事件數(shù)據(jù)都與接收時間一起寫入輸入緩沖器中。
圖8是一個說明在主程序中的步驟S30執(zhí)行的MIDI過程的細節(jié)的流程圖。首先,CPU1在步驟S200核查輸入緩沖器,并且在步驟S210,它查明是否輸入緩沖器含有任何仍未處理或未計算的所接收的數(shù)據(jù)。如果按照在步驟S210的測定,在輸入緩沖器中存在任何未計算的接收數(shù)據(jù),就在步驟220進行一個相應(yīng)于未計算接收數(shù)據(jù)內(nèi)容的操作。即,如果接收數(shù)據(jù)是音通事件數(shù)據(jù),CPU1就轉(zhuǎn)到步驟S230,以執(zhí)行一個音通過程;如果接收數(shù)據(jù)是音斷事件數(shù)據(jù),CPU1就轉(zhuǎn)到步驟S240,以執(zhí)行一個音斷過程;和如果接收數(shù)據(jù)是其他數(shù)據(jù),CPU1就轉(zhuǎn)以步驟S250,以進行其他過程。在完成步驟S220中的過程之一時,MIDI過程結(jié)束。在按照步驟S210的測定而在輸入緩沖器中不存在未計算的接收數(shù)據(jù)的情況下,MIDI過程立即結(jié)束,而不再執(zhí)行下面的操作。
圖9A是一個在所接收的數(shù)據(jù)是音通事件數(shù)據(jù)時在MIDI過程中S230步驟執(zhí)行的音通過程的流程圖。首先,作為步驟S300,把輸入緩沖器中音通事件的音符號碼、速度和發(fā)生時間作為“NN”、“VEL”和“TM”裝入音符號碼、速度和發(fā)生時間寄存器中。然后,在步驟S310、把音符號碼“NN”指定到通道之一中,并且把所指定通道的通道號碼作為“i”裝入一個通道號碼寄存器中。
此外,在步驟S320,把相應(yīng)于音符號碼“NN”和速度“VEL”的樂音控制數(shù)據(jù)置入為通道號碼“i”分配的圖4的通道寄存器CH之一中。這樣設(shè)置的樂音控制數(shù)據(jù)是按照音符號碼“NN”和速度“VEL”值相應(yīng)于已接收音通事件數(shù)據(jù)的MIDI通道,通過處理圖2的音色數(shù)據(jù)而導(dǎo)出的樂音形成數(shù)據(jù)(圖4的其他數(shù)據(jù))。在此,樂音形成數(shù)據(jù)中的波形指定數(shù)據(jù)是相應(yīng)于音符號碼“NN”,通過讀出圖2音色數(shù)據(jù)的音調(diào)范圍波形指定數(shù)據(jù)而得到的,并且讀出指定數(shù)據(jù)規(guī)定波形數(shù)據(jù)WD1到WDn中任何一個數(shù)據(jù)。在設(shè)置樂音控制數(shù)據(jù)以后,一個用于通道“i”的音通標志,在步驟S330被設(shè)置載或建起。
此后,CPU1著手步驟S340,以進行波形形成計算過程。在這種情況下,進行波形形成計算過程,旨在計算那些要寫入當前可寫輸出緩沖器X中的波形未計算部分的采樣,并且把這樣算出的部分波形寫入輸出緩沖器X中。部分波形相當于這樣一種范圍的波形,它變成能夠在一個時間點被計算或形成;在該時間點以步驟S210檢測所接收的數(shù)據(jù)(即,認可數(shù)據(jù)的接收)。要在此形成的部分波形是,在所接收音通事件的發(fā)生時間TM以前的一段時期里未計算的波形采樣,并且一個應(yīng)當根據(jù)音通事件開始發(fā)聲的波形未包含在當前的波形中,而是包含在一個要在以后形成的波形中,以后將參照圖11詳述。
在步驟S340和S350的操作相當于波形采樣A1,A2或上面曾參照圖12描述的類似采樣的波形計算。在步驟S350,根據(jù)已在上述步驟S320為通道號碼“i”設(shè)置的樂音控制數(shù)據(jù),為樂音發(fā)生而對通道號碼“i”的通道寄存器的工作區(qū)進行初始化。在這工作區(qū)中存儲地址的當前值,LFO波形的各種包跡、當前狀態(tài)、當前值,和形成各個通道波形所需的其他數(shù)據(jù)。在完成這個樂音發(fā)生初始化過程以后,音通過程結(jié)束。在初始化過程中,進行各種初始化操作,例如對當前波形讀地址初始地設(shè)定一個啟動地址,發(fā)生一個相應(yīng)于音符號碼NN的“F”號碼,初始地設(shè)定LFO、濾波器EG、音量EG,內(nèi)插操作和濾波器操作。這一初始化過程占用大量計算時間,已如上述。
圖13是當所接收的數(shù)據(jù)是音斷事件數(shù)據(jù)時,在MIDI過程中以步驟S240執(zhí)行的音斷過程的一個流程圖。首先,按照步驟S400,把存儲于輸入緩沖器中的音斷事件的音符號碼和發(fā)生時間作為“NN”和“TM”,裝入音符號碼和發(fā)生時間寄存器。然后,在步驟S410,確認一個當前正在發(fā)聲的音符號碼NN的樂音發(fā)生通道CH,并且把所確認的通道的通道號碼作為“i”,裝入通道號碼寄存器中。
此后,在步驟S420記下或重置用于"i”通道的音通標志;并且在步驟S430,以類似于上述步驟S340的方式,進行波形形成計算過程,以便計算應(yīng)當在發(fā)生時間TM之前形成的未計算波形采樣(部分波形),并把這樣計算的波形采樣寫入輸出緩沖器X。在步驟S440釋放“i”通道的啟動操作以后,音斷過程結(jié)束。在釋放啟動操作中,重寫工作區(qū)中所含“i”通道的各種包跡的各個狀態(tài),以便把該通道中的樂音形成狀態(tài)變成釋放狀態(tài)。
下面參照圖10,詳細描述在主程序中的步驟S40執(zhí)行的樂音發(fā)生器過程的流程圖。首先,在步驟S500,核查再生部分(DMA)9的再生狀態(tài)。如果DMA9已前進到下一個要被再生的段,則CPU1轉(zhuǎn)到下一步驟S510;但如果否,則CPU1跳到步驟S520。DMA9從一個由CPU1指定的RAM3的專用區(qū),以預(yù)定的抽樣頻率,逐一地讀出波形采樣;并且把讀出的采樣供給可聽再生的DAC10。在這樣從指定區(qū)讀波形采樣的同時,DMA9從CPU1指定的另一個要再生的區(qū)接收一個預(yù)約。在已完成前區(qū)的再生以后,這樣預(yù)約的下一區(qū)的波形采樣類似地由DMA逐一讀出,并且供給可聽再生的DAC10。DMA9前進到下一個要再生的段意味著其中,最后作為要再生段指定專用區(qū)再生被完成以后,DMA9已移到另一個作為下一個要再生段而預(yù)約的專用區(qū)。在這種情況下,按照它們用來預(yù)約的順序再生RAM3的專用區(qū)。
其后,在步驟S510,將在下次檢測的這樣一種推進時間(下一次推進檢測時間)是,根據(jù)當前時間和以前推進檢測時間來預(yù)測的;并且一個在預(yù)測檢測時間以前是一個預(yù)定時間的時間點是,作為下一個計算點而被指定的。下次推進檢測時間可用例如下面的方法來預(yù)測根據(jù)包括當前時間和最后時間在內(nèi)的多個推進檢測時間,通過“最小二乘法”以小的誤差計算出一個近似值;或者使用一個二次函數(shù)或類似函數(shù)去逼近一個檢測時間的變量。在推進發(fā)生與檢測之間的一個時期中,由于各個操作步驟位置與狀態(tài)的不同,而在DMA9中發(fā)生不均勻的時間延遲,使推進檢測時間包含不規(guī)則的非均勻性。因此,逼近函數(shù)的計算涉及一種平均非均勻檢測時間的運算。
上述在預(yù)定檢測時間以前的"預(yù)定時間”是一個為形成樂音波形而分配的時間,并且取決于波形形成算術(shù)運算所需的量;這運算量是由要發(fā)生樂音的要求數(shù),算術(shù)運算的要求質(zhì)量等決定的?!邦A(yù)定時間”的長度可以是固定的,也可以通過用戶在鍵盤6上的選擇來可變地設(shè)置,或由CPU1按照兩個或多個同時運行的程序來自動地設(shè)置。
其后,在步驟S520,在下一個計算點與由計時器4顯示的當前時間之間作比較,以便確定當前時間是否已到達下一個計算點。如果確定是肯定的,CPU1就進行步驟S530至S580的步驟。首先,在步驟S530,決定特定的計算順序,其中當前發(fā)聲的通道應(yīng)當以后在步驟S550經(jīng)歷波形采樣計算,以形成用于每個當前發(fā)聲通道的多個采樣的波形數(shù)據(jù)。
那就是說,在步驟S530,以下述方式設(shè)置計算順序從一個音樂上有效的樂音開始,或從一個如果它失效或消失,就會出現(xiàn)重大的音樂麻煩的樂音開始,相繼地進行波形采樣計算。然后,在步驟S540,確定是否全部當前發(fā)聲通道的波形采樣計算能夠在一個預(yù)定的計算時間(即涉及步驟S510描述的預(yù)定時間)內(nèi)完成。如果以否定的形式應(yīng)答,則一個或多個要在最后或在遲于任何其他通道的時間進行波形采樣計算的樂音發(fā)生通道,就被指定為要消失樂音的通道(樂音消失通道),以便按如此方式減少算術(shù)運算量,以致于能夠在預(yù)定的計算時間范圍內(nèi)完成全部當前發(fā)聲通道的波形采樣計算。這一過程的處理詳情見上述樂音發(fā)生方法第三個實施例。
在步驟S550,現(xiàn)在進行波形采樣計算。尤其是,對未計算的波形采樣進行計算,并且把它們寫入當前可用的輸出緩沖器X中,使緩沖器X裝滿計算波形數(shù)據(jù),從而為樂音發(fā)生作好準備。這一操作相當于形成波形A3或類似波形,如上面提及圖12時所述。
然后在步驟S560,使每個寫入已裝滿的輸出緩沖器X中的采樣受到一種低通濾波操作,以便從其中消除高頻成分。此后,在步驟S570,把存儲低通濾波波形的輸出緩沖器X預(yù)置成一個用于下次再生波形的專用存儲區(qū),以便在完成當前再生的和業(yè)已預(yù)置的存儲區(qū)中的波形再生以后這個存儲區(qū)被再生。然后,在步驟S580,與迄今使用緩沖器X不同的另一輸出緩沖器被清零,并且新設(shè)成輸出緩沖器X,以便為下一個被再生段準備波形。
如果當前時間尚未達到按步驟S520確定的計算點,則樂音發(fā)生過程結(jié)束,而不進行其他的操作。
圖11是一個在音通、音斷和樂音發(fā)生器過程中進行的波形形成計算過程的流程圖。對這一過程,按上面所述預(yù)置一個波形計算時間范圍。也就是說,在MIDI數(shù)據(jù)接收過程期間,例如在音通過程期間,執(zhí)行目前程序流程的情況下,波形計算時間范圍相當于上述的部分波形;而在樂音發(fā)生器過程期間執(zhí)行日前程序流程的情況下,則波形計算時間范圍相當于緩沖器X中一個未計算段的那些波形采樣。因為按照由樂音發(fā)生器過程的先前執(zhí)行確定的計算順序來進行計算,故在MIDI數(shù)據(jù)接收時間不確定通道的新計算順序。每當一個新的音通事件發(fā)生,并且被指定到通道中的一個特定通道時,則該特定通道被首先(給出一個第一順序)置入計算順序,并且各個其他通道的順序被向下移動一位。
首先,在步驟S600,為按計算順序首先安置的通道的第一個波形采樣作計算準備。計算準備包括設(shè)置各式各樣的數(shù)據(jù),例如最后閱讀地址,各種包跡EG的數(shù)值和狀態(tài)(投入、釋放等),和可存取條件下的LFO值;并且包括把這些數(shù)據(jù)裝入CPU1的內(nèi)寄存器,以便計算時直接利用。其后,在步驟S610,對LFO、濾波器G和音量EG進行波形采樣計算,以便形成LFO、FEG(濾波器包跡)和AEG(振幅包跡)波形的采樣。把LFO波形加到計算指定時間范圍所需的“F”數(shù)、FEG波形和AEG波形上,以便調(diào)制各個數(shù)據(jù)。對每個被指定為消音通道的樂音發(fā)生通道,按照在該時間范圍內(nèi)迅速衰減的音量EG來計算一種阻尼AEG波形。
其后,在步驟S620,F(xiàn)數(shù)被反復(fù)地添加到用作起始值的最后讀地址上,以便在該時間范圍內(nèi)產(chǎn)生用于各個采樣的讀地址。此外,根據(jù)閱讀地址的整數(shù)部分,從音色數(shù)據(jù)區(qū)中的波形存儲區(qū)WD讀出波形數(shù)據(jù);并且根據(jù)讀地址的小數(shù)部分,在各個讀出波形采樣之間作內(nèi)插,以形成在該時間范圍以內(nèi)的全部內(nèi)插采樣。例如,如果計時范圍相當于100個采樣所用的時間,就通過這步操作可集體地形成100個采樣。因為在該時間范圍內(nèi)的多個采樣的操作中,是作為一個整個的系統(tǒng)操作來進行相應(yīng)于讀地址的F數(shù)加和內(nèi)插的,故只需要把讀地址讀入CPU寄存器中一次,從而總的來說,能夠顯著地提高處理速度。
此外,在步驟S630,在該時間范圍內(nèi)的內(nèi)插采樣經(jīng)歷一個音色濾波操作,在此根據(jù)上述FEG波形進行采樣的音色控制。在下一個步驟S640,對濾波后的采樣進行一個振幅控制操作,以便根據(jù)上述AEG(振幅包跡)和音量數(shù)據(jù)控制采樣的振幅;還進行一個累加寫入操作,以便把所得的振幅控制采樣添加到存儲于指定通道的輸出緩沖器X的相應(yīng)采樣上。因為在這一過程中,振幅控制和添加到輸出緩沖器X中相應(yīng)采樣上是相繼地進行的,故有可能把需要裝入CPU寄存器中的采樣數(shù)目減至最少,從而顯著地提高處理速度。
進行步驟S620至S640的采樣形成操作之基本目的在于形成預(yù)定時間范圍內(nèi)的全部采樣,然而由于步驟S610作了音量EG波形計算,這些采樣具有充分低的AEG波形水平,和充分小的音量,故不需要進一步計算,從而能夠減少所需的操作量。尤其是,在樂音發(fā)生通道根據(jù)步驟S540的指定而產(chǎn)生了阻尼AEG波形的情況下,可能經(jīng)常在預(yù)定時間范圍內(nèi)中途得到充分的衰減。
其后,在步驟S650,對于是否要在繼續(xù)進行波形形成計算處理情況下,把波形在時間極限范圍內(nèi)供給DMA9,和是否應(yīng)當中止波形采樣計算,作出一個決定。在時間極限范圍內(nèi)及時地供應(yīng)波形在此意味著,當前正在再生來自專用存儲區(qū)的以前形成的波形采樣的DMA9,能夠在緩沖器X的一個新區(qū)預(yù)置接連的波形采樣,并且能夠在來自專用存儲區(qū)的以前形成的波形采樣的再生被完成之前,預(yù)置用于以后再生的緩沖器X的新區(qū)。如果在步驟S650確定,不會及時供應(yīng)波形,并且不會進一步繼續(xù)進行計算,就在步驟S670中止波形采樣計算,并且結(jié)束波形計算過程。
如果在步驟S650確定,可以繼續(xù)計算,就在步驟S660作出進一步的確定是否已為全部的指定通道完成了波形采樣的計算。在否定的應(yīng)答下,就在步驟S680指定按照計算順序(給出的下一個計算順序)在下次置于樂音發(fā)生通道中的第一個波形采樣,并且為計算這下一個通道中的波形采樣而作好準備。在完成這樣的準備時,CPU1回復(fù)步驟S610以便為該通道重復(fù)步驟S610至S640的操作。這樣,為所有指定的通道重復(fù)地進行步驟S610至S660的操作,并且每為諸通道的一個進行操作一次,就在步驟640把為預(yù)定時間范圍結(jié)果形成的采樣累積地加到在緩沖器X中存儲的對應(yīng)采樣上。
當在步驟S660中確定對于所有指定的通道已經(jīng)完成波形采樣計算時,該波形計算過程結(jié)束。于是,對于所有指定的通道現(xiàn)在已經(jīng)新存儲了預(yù)定數(shù)量的對應(yīng)于時間范圍形成的波形采樣的累計值。
當根據(jù)步驟S650的肯定確定在步驟S670中止波形采樣計算時,對于每一個指定的通道現(xiàn)在已經(jīng)新存儲了預(yù)定數(shù)量的對應(yīng)于時間范圍形成的波形采樣的累計值。
對于每一個計算轉(zhuǎn)向晚于計算中止的通道,并不完成波形采樣形成,結(jié)果,已經(jīng)通過通道產(chǎn)生的樂音將被消去。然而,因為那些給定的產(chǎn)生較不重要樂音的通道在步驟S530的計算次序中轉(zhuǎn)向較晚,所以能把由中止產(chǎn)生的不利影響減至最小。在步驟S670以這樣的方式設(shè)定通道寄存器CH,以致于如此排拆于計算這外的通道保持在消音狀態(tài),即使在下次波形形成計算過程的執(zhí)行中和執(zhí)行后也是如此。
在圖9A中用流程圖表示的配音過程(nott-on process)的步驟S340,執(zhí)行上述的波形形成計算過程,在這種情況下,這一過程一結(jié)束就進行步驟S350的操作,然后配音過程結(jié)束。在圖9B中用流程圖表示的去音過程(note-off process)的步驟430,執(zhí)行上述的波形形成計算過程,在過程情況下,這一過程一結(jié)束就進行步驟S440的操作,然后去音過程結(jié)束。另外,在圖10中用流程圖表示的去音過程的步驟S550,執(zhí)行上述的波形形成計算過程,在這種情況下,一結(jié)束這一形成過程就進行步驟S560至S580的操作,然后樂音發(fā)生器過程結(jié)束。
在圖6的主程序的恒定循環(huán)中周期地重復(fù)這些配音、去音和樂音發(fā)生器過程,以便為后來的聲音復(fù)制順序地形成波形采樣。
就本發(fā)明的樂音產(chǎn)生方法而論,應(yīng)該明白,這些相互獨立的處理數(shù)據(jù)步驟, 如命令產(chǎn)生多個樂音的步驟如命令以預(yù)定的時間間隔開始波形采樣計算的步驟,可以以任意選擇的次序進行,而不是以上述的次序進行。
另外,根據(jù)本發(fā)明的樂音發(fā)生方法,另一個應(yīng)用軟件請求的操作,包括樂音形成指令,可以利用在波形形成計算過程中的空閑時間來進行。在這種情況下,其他應(yīng)用軟件可以是如游戲、通信或辦公室事務(wù)處理之類的軟件。
上文把本發(fā)明的樂音產(chǎn)生方法描述成由圖1中樂音發(fā)生設(shè)備執(zhí)行的一個程序。另一方面,在基于操作系統(tǒng)(OS)如可從美國微軟件公司(Microsoft Corporation)買到的“Windows”(窗口)的通用計算機上,可以把本發(fā)明的樂音產(chǎn)生方法作為一個單一的應(yīng)用程序與另一個應(yīng)用程序同時完成。
就已經(jīng)描述的本發(fā)明而論,對于多個波形采樣的形成在每個通道中的準備僅需進行一次,因而實現(xiàn)了系統(tǒng)開銷的大幅度降低。這提高了發(fā)生的樂音的音質(zhì)并有可能增加能同時發(fā)生樂音的通道數(shù)量。
另外,通過控制每次MIDI(音樂器材數(shù)字界面)事件輸入時要出現(xiàn)的波形采樣計算,能以分散的方式進行該計算并能夠防止初始樂音形成操作對發(fā)生的樂音數(shù)量的不利減少。
此外,在演奏信息(performance information)出現(xiàn)時執(zhí)行演奏信息的輸入或讀入操作并把基于讀入演奏信息的樂音控制或波形形成包括在讀入操作期間的空閑時間執(zhí)行的主步驟中,利用這種安排,在演奏信息出現(xiàn)時增加的處理量能分散在空閑時間內(nèi),因此能有兒地避免處理量的暫時增加。
下面,參照圖13至25B,將進行根據(jù)本發(fā)明第二方面的一個實施例的描述。
在這個實施例中,依靠多任務(wù)管理程序運行一個在其上應(yīng)用程序如定序器和游戲軟件是可操作的通用操作系統(tǒng),并使軟件樂音發(fā)生器在多任務(wù)管理程序的控制下而不是在應(yīng)用程序的控制下運行。因為這種安排,使軟件樂音發(fā)生器可以在實時處理必需的時間間隔內(nèi)可靠地工作,并且當軟年樂音發(fā)生器中不執(zhí)行處理時,可以使通用操作系統(tǒng)運行以便在該操作系統(tǒng)上執(zhí)行該應(yīng)用程序。
在實施第二方面的實施例時,可以使用一個包括有如圖1中所示建立的硬件的音頻發(fā)生設(shè)備,或者使用一個包括有如圖19所示建立的硬件的音頻發(fā)生設(shè)備。在如下的描述中,將假定使用圖19的音頻發(fā)生設(shè)備來描述該實施例。
在圖19中,與圖1中相同的標號代表的元件與該圖中的對應(yīng)元件基本上具有相同的功能。本實施例在如下方面本質(zhì)上不同于圖1的實施例,本實施例包括有一個連接到CODEC設(shè)備32上用來輸入外部模擬音頻信號的輸入終端,并且通過在CPU1的總線35與音響系統(tǒng)11或輸入終端34之間的CODEC設(shè)備32互換聲學(xué)數(shù)據(jù)。CODEC設(shè)備32包括一個數(shù)/模轉(zhuǎn)換器(DAC)或一個模數(shù)轉(zhuǎn)換器(ADC)。根據(jù)每個取樣時鐘脈沖,把經(jīng)由CPU1處理形成的數(shù)字樂音波形數(shù)據(jù)經(jīng)總線35供給數(shù)/模轉(zhuǎn)換器,以便把供給的波形數(shù)據(jù)轉(zhuǎn)換成要供給音響系統(tǒng)11的模擬信號。模擬音頻信號經(jīng)輸入終端34輸入給模/數(shù)轉(zhuǎn)換器以便把供給的音頻信號轉(zhuǎn)換成將要供給總線35的數(shù)字數(shù)據(jù)。當樂音發(fā)生器波形數(shù)據(jù)是從外部取樣并存儲在內(nèi)存中時,能方便地利用輸入終端34的模擬音頻信號輸入功能和模數(shù)轉(zhuǎn)換功能。圖1和19的設(shè)備可以都裝有可選擇的外圍存儲設(shè)備,如軟盤驅(qū)動器、CD-ROM驅(qū)動器或MO(磁光盤)驅(qū)動器。例如,存儲用來實現(xiàn)本發(fā)明實施例的程序的記錄媒體(如軟盤或CD)可以置于外圍存儲設(shè)備中,因此讀出諸程序的任何一個并經(jīng)總線35傳送給硬盤8或RAM3以便存儲在其中。然后,借助于執(zhí)行該程序的CPU1,能根據(jù)要求的程序?qū)嵤┍景l(fā)明。在圖19所示的例子中,為此目的裝有一個CD-ROM驅(qū)動器33。
圖13是一張框圖,說明在該實施例中軟件模塊的建立,其中為了簡明起見,僅表示了與需要實施數(shù)據(jù)處理的音頻信號處理有關(guān)的部分,即與軟件樂音發(fā)生器和波形數(shù)據(jù)的處理有關(guān)的部分。
如所表示的那樣,一組包括樂音發(fā)生器(T.G.)混頻器控制軟件30、MIDI字序器軟件31、游戲之類的軟年13和波形復(fù)制軟件14的應(yīng)用程序位于頂層中。在應(yīng)用程序下面有一組系統(tǒng)程序,包括一個界面15,通過它應(yīng)用程序能利用由系統(tǒng)程序組提供的各種服務(wù);一個樂音發(fā)生器(T.G.)MIDI驅(qū)動器16,起MIDI樂音發(fā)生器驅(qū)動器的作用以形成一個樂音發(fā)生器(T.G.)任務(wù)20如下文所述;一個波輸入/輸出驅(qū)動器17,具有打開波輸入/輸出設(shè)備的功能;一個界面18,在樂音發(fā)生器MIDI驅(qū)動器16和波輸入/輸出驅(qū)動器17與內(nèi)核程序(環(huán)0)之間;及一個外部MIDI驅(qū)動器25。當處理器處于用戶狀態(tài)(環(huán)3)時,執(zhí)行這些程序。
系統(tǒng)軟件組還包括一個任務(wù)調(diào)度程序19、樂音發(fā)生器任務(wù)20、一個波任務(wù)21、一個混頻器任務(wù)22、一個包括一組用來完成混頻、分頻和取樣率轉(zhuǎn)換或音頻信號流的格式轉(zhuǎn)換的子程序的程序庫23、及一個CODEC驅(qū)動器24。當處理器處于核心狀態(tài)(環(huán)0)時,執(zhí)行這些程序。
任務(wù)調(diào)度程序19是一個用來進行控制的模塊,以便從多個就緒任務(wù)(過程)中選擇下次要完成的任務(wù)然后實際上再由處理器完成。在本發(fā)明中,任務(wù)調(diào)度程序19根據(jù)所謂的優(yōu)先法(完全多任務(wù)法)完成任務(wù)調(diào)度。
如下文更徹底地描述的那樣,由樂音發(fā)生器MIDI驅(qū)動器16生成了樂音發(fā)生器任務(wù)20,并且樂音發(fā)生器任務(wù)20根據(jù)從MDI驅(qū)動器16供給的樂音控制參數(shù)TGPARA為指定的通道(最多32個通道)提供波形表合成功能和音色控制處理功能。另外,根據(jù)由波輸入/輸出驅(qū)動器17打開的波輸入/輸出設(shè)備生成了波任務(wù)21和混頻器任務(wù)22。標號26代表一個CODEC電路,該電路包括用來輸入和輸出波形數(shù)據(jù)的模/數(shù)和數(shù)/模轉(zhuǎn)換器,而27代表一個MIDI接口(MIDII/O)。盡管沒有特別表示,該系統(tǒng)程序組還包括磁盤驅(qū)動器、存儲器管理程序、文件系統(tǒng)、用戶界面等,這些通常包含在通用的操作系統(tǒng)中。
下面,參照圖14,描述在根據(jù)第二方面的實施例中是如何執(zhí)行特定任務(wù)(過程)的。通過執(zhí)行CREATE(生成)指令生成一個任務(wù),并把生成的任務(wù)置于“就緒”狀態(tài),然后再放入隊列中。根據(jù)預(yù)定的優(yōu)先權(quán)次序,任務(wù)調(diào)度程序19從開始對其處理的隊列中選出就緒任務(wù)的一項,并把該選到任務(wù)置于“運行”狀態(tài)中。在該狀態(tài),一旦從計時器等產(chǎn)生時間片中斷,該運行任務(wù)就被中斷并再次被置于“就緒”狀態(tài)中且放到隊列中。然后,任務(wù)調(diào)度程序19從緊接著開始對其處理的隊列中選出一項任務(wù),并這樣控制以便執(zhí)行選到的任務(wù)。
因此,即使當特定的任務(wù)正在運行時,利用以預(yù)定頻率產(chǎn)生的時間片中斷等也能強制地中斷該任務(wù)。通過給樂音發(fā)生器任務(wù)20較高的優(yōu)先權(quán),能以預(yù)定的時間間隔可靠地執(zhí)行樂音發(fā)生器任務(wù)20。以類似的方式在通用的計算機上能執(zhí)行其他任務(wù)如要求實時處理的波任務(wù)21。此外,只要不在進行非實時處理,通用的操作系統(tǒng)就能作為一項單一的任務(wù)進行操作,因而能在實時處理的同時執(zhí)行在該操作系統(tǒng)上運行的應(yīng)用程序。
一旦在運行一個任務(wù)的同時執(zhí)行等待特殊事件如SLEEP(休眠)或PEND(未決)指令出現(xiàn)的指令,就把該任務(wù)置于“阻塞”(blocked)狀態(tài)中并分配另一個任務(wù)。然后,當特殊事件發(fā)生時,把“阻塞”的任務(wù)置于“就緒”狀態(tài)并放到隊列中。其次,當執(zhí)行EXIT(退出)或DELETE(刪除)指令時,把該任務(wù)置于“終止”狀態(tài)。
利用上述的安排,樂音發(fā)生器MIDI驅(qū)動器16、樂音發(fā)生器任務(wù)20、CODEC驅(qū)動器24和CODEC電路26共同實現(xiàn)本發(fā)明的軟件樂音發(fā)生器。
當從MIDI定序器軟件31等經(jīng)界面15輸入一個MIDI信號時,就啟動樂音發(fā)生器MIDI驅(qū)動器16。一旦樂音發(fā)生器MIDI驅(qū)動器16被啟動,就依據(jù)輸入的MIDI信號進行處理,如配音過程、去音過程、程序改變、控制改變、系統(tǒng)排他過程等等。在配音事件出現(xiàn)的情況下,樂音發(fā)生器MIDI驅(qū)動器16把一個新樂音分配給起樂音發(fā)生器作用的樂音發(fā)生器任務(wù)20的一個通道,并準備要置于分配的或指定的通道中的樂音控制參數(shù)和配音數(shù)據(jù)。該樂音控制參數(shù)是根據(jù)音符數(shù)(note number)和伴隨配音事件的性能特征(performance touch)通過處理音色參數(shù)而得到的、為各個MIDI通道選出的參數(shù)。當啟動任務(wù)20時,把準備好的樂音控制參數(shù)發(fā)送給在樂音發(fā)生器任務(wù)20中的樂音發(fā)生器寄存器。
該樂音發(fā)生器任務(wù)20具有一個用于32個通道的任一個的波形表合成功能和一個單聲道輸入/立體聲輸出混響功能,并且對于每個幀時間根據(jù)來自一個包括CODEC驅(qū)動器24和CODEC電路26的輸出設(shè)備的波形數(shù)據(jù)請求,啟動任務(wù)20。樂音發(fā)生器任務(wù)20接收外部的音頻輸入,并根據(jù)外部的音頻輸入和由此形成的波形表合成數(shù)據(jù)完成混響過程,以便把合成的音頻波形提供給輸出設(shè)備。
圖15是一張等效電路圖,說明在樂音發(fā)生器任務(wù)20中的全部處理,其中41代表對于32個通道的任一個的波形表合成過程,虛線方框42代表外部立體聲音頻信號輸入過程,及43代表混響過程。另外,44代表一個波形數(shù)據(jù)存儲器,50代表內(nèi)插操作部分,51和65代表數(shù)據(jù)轉(zhuǎn)換部分,及52、53和54代表放大器部分。55代表數(shù)據(jù)轉(zhuǎn)換部分,它接收以整數(shù)數(shù)據(jù)形式表示的立體聲音頻輸入信號并把接收到數(shù)據(jù)轉(zhuǎn)換成以浮點形式表示的數(shù)據(jù),然后再輸出左聲道信號L、右聲道信號R和一個代表左右聲道信號之和L+R的信號。另外,56、57、59和62代表加法器部分,58和64代表用來交插數(shù)據(jù)的加法器部分,60、61、63、66和67代表緩沖器,及65代表一個數(shù)據(jù)轉(zhuǎn)換部分,用來把以浮點形式表示的數(shù)據(jù)轉(zhuǎn)換成以整數(shù)數(shù)據(jù)形式表示的數(shù)據(jù)。要送給數(shù)據(jù)轉(zhuǎn)換部分55的立體聲音頻輸入信號可以是來自CODEC電路26的信號或是從波形復(fù)制軟件14經(jīng)波輸入/輸出驅(qū)動器17轉(zhuǎn)送來的信號。
盡管傳統(tǒng)的硬件樂音發(fā)生器為每一個采樣形成波形數(shù)據(jù)并且須經(jīng)數(shù)/模轉(zhuǎn)換,但本發(fā)明的軟件樂音發(fā)生器和音頻輸入/輸出卻一幀一幀地處理波形數(shù)據(jù)。用在這里的術(shù)語“幀”是給定過程的一個基本單位,并且本發(fā)明的軟件樂音發(fā)生器和音頻輸入/輸出為預(yù)定數(shù)量的、與大約5ms(毫秒)的復(fù)制周期相符的采樣分配一個緩沖區(qū),且把該緩沖區(qū)用作一個幀。這個緩沖器的大小取決于波形計算頻率(取樣頻率)。在圖15中,緩沖器60、61、63、66主67的每一個都具有一幀的容量。
另外,在圖15中,每個粗線箭頭都代表以浮點形式表示的32位數(shù)據(jù),而每個細線箭頭都代表16位整數(shù)數(shù)據(jù)。以粗線方框表示的緩沖器60、61、63的每一個都用來存儲以浮點形式表示的32位數(shù)據(jù),而以細線方框表示的緩沖器66和67的每一個都用來存儲16位整數(shù)數(shù)據(jù)。
在本系統(tǒng)使用的CPU中,浮點倍增比整數(shù)倍增進行得更快,因此信號處理盡可能以浮點形式實現(xiàn)。然而,由存儲在波形數(shù)據(jù)存儲器44,44中的大部分波形數(shù)據(jù)是8位整數(shù)數(shù)據(jù),所以為減少必需的執(zhí)行時間,內(nèi)插運算部分50以整數(shù)形式實現(xiàn)倍增,然后數(shù)據(jù)轉(zhuǎn)換部分51把形成的倍增數(shù)據(jù)轉(zhuǎn)換成浮點表示。
波開表合成過程41基本上包括波形內(nèi)插和增益調(diào)整。內(nèi)插運算部分50利用從樂音發(fā)生器MIDI驅(qū)動器16供給的音調(diào)信息(pitch information)把從波形數(shù)據(jù)存儲器44讀出的波形數(shù)據(jù)內(nèi)插,數(shù)據(jù)轉(zhuǎn)換部分51再把每個形成的內(nèi)插數(shù)據(jù)轉(zhuǎn)換成浮點表示。把從轉(zhuǎn)換部分51的輸出傳給三個輸出聲道,即分成左聲道信號L、右聲道信號R和混響輸入信號L+R,這些信號送給各自的放大器部分52、53和54,再利用從樂音發(fā)生器MIDI驅(qū)動器16供給的音量信息進行放大;該音量信息是通過用各個樂音產(chǎn)生通道的音量包跡信號乘以三個輸出聲道的電平而得到的數(shù)據(jù)。從各個樂音產(chǎn)生通道輸出的波形數(shù)據(jù)經(jīng)加法器部分56、57和62加在一起,從數(shù)據(jù)轉(zhuǎn)換部分55還分別向加法器部分56、57和62供有外部立體聲音頻信號的左聲道信號L、右聲道信號R及左右聲道信號之和L+R。因此,加法器部分56、57和62把所有通道的波形數(shù)據(jù)與外部立體聲音頻輸入信號相混合。
來自加法器部分56和57的輸出數(shù)據(jù)分別存進DRYL緩沖器60和DRYR寄存器61中,而來自加法器部分62的輸出數(shù)據(jù)存進混響(REV)緩沖器63中。如此存儲在混響緩沖器63中的“L+R”數(shù)據(jù)傳給用于混響操作的混響過程43。形成的混響數(shù)據(jù)(混響聲數(shù)據(jù))對于左右聲道L和R獨立地受到增益控制,然后再分別加到存儲在緩沖器60和61中的數(shù)據(jù)上。在此之后,數(shù)據(jù)轉(zhuǎn)換部分65把該混響數(shù)據(jù)進一步轉(zhuǎn)換成整數(shù)形式,并作為音頻輸出數(shù)據(jù)經(jīng)緩沖器66和67送給CODEC電路26的數(shù)/模轉(zhuǎn)換器。
參照圖16將解釋這些操作的處理計時,其中橫軸是時間軸,并且在時間軸之上的〔A〕代表在樂音發(fā)生器MIDI驅(qū)動器16中的處理,而在時間軸下方的〔B〕代表在樂音發(fā)生器任務(wù)20中的處理。另外,在圖16中,從底部數(shù)第一和第二條線代表音頻數(shù)據(jù)流,并且“音頻輸入設(shè)備”是一個波形數(shù)據(jù)輸入程序,用來接收從CODEC電路26送來的數(shù)據(jù)并轉(zhuǎn)換成數(shù)字形式的波形數(shù)據(jù),而“音頻輸出設(shè)備”是一個波形數(shù)據(jù)輸出程序,用來把數(shù)據(jù)轉(zhuǎn)換成模擬形式并把波形數(shù)據(jù)輸出到CODEC電路26。
本系統(tǒng)中的所有處理根據(jù)其處理優(yōu)先權(quán)能分為三個主要的過程。具有第一或最高優(yōu)先權(quán)的組是由作為時間中斷信號給出的MIDI信號啟動樂音發(fā)生器MIDI驅(qū)動器16的過程,在此期間完成把MIDI信號轉(zhuǎn)換成樂音控制參數(shù)。然而,當直接從應(yīng)用程序接收到MIDI信號而不是作為計時器中斷時,則給樂音發(fā)生器MIDI驅(qū)動器16的這一過程第三級或最低的優(yōu)先權(quán)。把第二級優(yōu)先權(quán)給樂音發(fā)生器任務(wù)20,該樂音發(fā)生器任務(wù)20由來自音頻輸入/輸出緩沖器的READY信息(即,當需要接著的數(shù)據(jù)時從音頻輸出設(shè)備產(chǎn)生的OUTPUT READY信息,或當音頻輸入設(shè)備準備傳送數(shù)據(jù)時從該設(shè)備產(chǎn)生的INPUT READY信息)啟動,當樂音發(fā)生器MIDI驅(qū)動器16發(fā)送新的樂音控制參數(shù)信息時則由從該驅(qū)動器16產(chǎn)生的TGPARA RECEIVED信息啟動,或者當樂音發(fā)生器MIDI驅(qū)動器16裝有波形數(shù)據(jù)時則由從該驅(qū)動器16產(chǎn)生的WAVE LOADREOUEST信息啟動。MIDI定序器軟件和其他應(yīng)用程序所給的優(yōu)先權(quán)最低。
在圖16的樂音發(fā)生器任務(wù)20中的處理〔B〕中,用于一個幀的數(shù)據(jù)處理包括如下操作(1)讀輸入音頻數(shù)據(jù);(2)處理樂音控制參數(shù);(3)形成用于32個通道的波形;(4)如有必要實行強制衰減;(5)發(fā)送樂音發(fā)生器狀態(tài);(6)進行混響計算;及(7)把數(shù)據(jù)作為音頻輸出數(shù)據(jù)轉(zhuǎn)送。在這些操作中,在上文的條目(3)中用于32個通道的波形計算操作包含有在CPU上的最大負載和最大波動,因此非??赡茉谝粠闹芷趦?nèi)不能完成必需的計算。由此看來,在所有的操作中最后進行這一不確定的操作是合理的,因此安排本系統(tǒng)從條目(5)的操作開始處理而不是從條目(1)的操作開始處理。
把條目(5)至(7)的操作指定為由來自音頻輸出設(shè)備的OUTPUT READY信息啟動的一系列操作。一旦接收到OUTPUTREADY信息并啟動了樂音發(fā)生器任務(wù)20,為了調(diào)用MIDI驅(qū)動器16的CALL BACK(回呼)功能,就把表示任務(wù)20的可操作狀態(tài)的樂音發(fā)生器狀態(tài)(TG STATUS)送給在條目(5)的操作中的樂音發(fā)生器MIDI驅(qū)動器16。在CALL BACK功能中,樂音發(fā)生器MIDI驅(qū)動器16讀TG STATUS并把包括樂音控制參數(shù)和為任務(wù)20準備的配音信號的樂音形成參數(shù)TG PARA放入樂音發(fā)生器任務(wù)20的樂音發(fā)生器寄存器中。然后,樂音發(fā)生器任務(wù)20在條目(6)啟動混響計算,其中利用存儲在緩沖器63中的波形數(shù)據(jù)進行混響計算并把形成的計算數(shù)據(jù)加到每個具有一幀容量的緩沖器60至61中。在此之后,樂音發(fā)生器任備20啟動上文條目(7)的音頻數(shù)據(jù)輸出操作,其中,把存儲在DRYL緩沖器60和DRYR緩沖器61中的波形數(shù)據(jù)轉(zhuǎn)換成一幀波形數(shù)據(jù)以便發(fā)送給輸出驅(qū)動器。然后,該操作系列終止。
在條目(7)的操作之后是由INPUT READY信息啟動的條目(1)的音頻輸入操作。因為事實上輸入數(shù)據(jù)在輸出數(shù)據(jù)就緒之前已經(jīng)就緒,如圖16中所示,所以接著條目(7)的操作就調(diào)用條目(1)的操作。在音頻輸入操作時,從音頻輸入設(shè)備或波輸入/輸出驅(qū)動器17中讀入一幀輸入數(shù)據(jù)。
最后,條目(2)至條目(4)的操作作為系統(tǒng)操作來進行,利用確認收到了樂音形成參數(shù)TG PARA的信息啟動該系列操作。因為事實上在條目(6)的操作之前已經(jīng)接收到了樂音形成參數(shù)TGPARA,所以接著條目(1)的操作啟動條目(2)至條目(4)的這些操作。在條目(2)的操作中,把由樂音發(fā)生器MIDI驅(qū)動器16存儲在樂音發(fā)生器寄存器中的、包括樂音控制參數(shù)和配音信號的樂音形成參數(shù)的TG PARA譯碼并轉(zhuǎn)換成波形計算數(shù)據(jù)。然后,在條目(3)的操作中,為32個通道的任何一個進行波形形成計算過程。對于每一個指定的通道,在以與要產(chǎn)生的音調(diào)相符的速率移動波形數(shù)據(jù)存儲器44的讀地址的同時讀出波形數(shù)據(jù),在讀出的采樣數(shù)據(jù)之間內(nèi)插,然后再根據(jù)基于音量信息如音量包(AEG)的內(nèi)插數(shù)據(jù)實現(xiàn)音量控制,通過以操作實現(xiàn)波形形成計算過程。在左聲道L、右聲道R和混響聲道L+R上相互獨立地進行樂音控制,并把一幀的、用于三個聲道的音量控制波形數(shù)據(jù)加到各自的緩沖器60、61和63中。
通過條目(3)的操作完成結(jié)束了所討論的用于幀的處理,然后使通用的操作系統(tǒng)運行直到下次OUTPUT READY信息的到來。如左部分(b)中所示,即使當接收到下次的OUT PUT READY信息時,如果條目(3)的波形形成沒有完成則也強制中止波形形成計算過程,并且此時,對沒有計算的通道實行強制衰減以便避免多余的噪聲的出現(xiàn)。根據(jù)該實施例,對于指定的通道,從一個特定的通道開始順序地為32個通道的任何一個進行波形計算操作,例如,這個特定的通道現(xiàn)在正在發(fā)出較高電平的樂音,如果以上述方式強制地中止,則該樂音會產(chǎn)生明顯的效果。
在樂音發(fā)生器20的執(zhí)行期間,當較高優(yōu)先權(quán)的計時器中斷產(chǎn)生MIDI事件時,強制地把控制轉(zhuǎn)移到樂音地發(fā)生器MIDI驅(qū)動器16上,并對應(yīng)于MIDI事件的操作,如圖16的部分〔A〕所示,其中七個MIDI事件的發(fā)生用向下的箭頭畫出。
參照圖17、18A和18B的流程圖,將進一步描述上述的樂音發(fā)生器任務(wù)20。
首先,在圖17的步驟100產(chǎn)生該樂音發(fā)生器任務(wù)20,并在步驟101把產(chǎn)生的樂音發(fā)生器任務(wù)20置于SLEEP狀態(tài)中。利用事件的發(fā)生,如信息的接收,把置于SLEEP狀態(tài)的樂音發(fā)生器任務(wù)20喚醒進入READY(就緒)狀態(tài),并且當利用任務(wù)調(diào)度程序調(diào)度處于READY狀態(tài)的任務(wù)20時,為了確定該事件程序轉(zhuǎn)到步驟102。就是說,在步驟102確定事件是(a)來自音頻輸入/輸出設(shè)備的READY信息,還是(b)來自樂音發(fā)生器MIDI驅(qū)動器16的WAVELOAD(波載)請求,或者是來自MIDI驅(qū)動器16的參數(shù)TG PARA確認信息。
如果在步驟102確定的事件是來自音頻輸入/輸出設(shè)備的READY信息,則程序分支到步驟103,在這里進一步確定該信息是來自音頻輸出設(shè)備的OUTPUT READY(輸出就緒)還是來自音頻輸入設(shè)備的INPUT READY(輸入就緒)信息。如果該信息是來自音頻輸出設(shè)備的OUTPUT READY,則在步驟104把觸發(fā)標志置于“1”并把TG STATUS發(fā)送給MIDI驅(qū)動器16(圖16中條目(5)的操作)-當終止條目(3)的波形形成計算時把觸發(fā)標志置于“0”而當接收到OUTPUT READY信息時把觸發(fā)標志置于“1”。然后,在步驟106,確定混響效果是ON(接通)還是否。如果在步驟106回答是肯定的,則在步驟107進行混響計算(圖16中條目(6)的操作),然后程序再轉(zhuǎn)到步驟108;否則,程序直接發(fā)轉(zhuǎn)到步驟108而不進行步驟107的操作。在步驟108輸出音頻數(shù)據(jù)(圖16中條目(7)的操作),程序再回復(fù)步驟101以返回SLEEP狀態(tài)。
如果在步驟103確定的事件是來自音頻輸入設(shè)備的INPUTREADY信息,則程序轉(zhuǎn)到步驟109以查明觸發(fā)標志的狀態(tài)。如果觸發(fā)標志處于“1”,則程序轉(zhuǎn)到步驟110以讀入音頻輸入數(shù)據(jù)(圖16中條目(1)的操作)然后再回復(fù)步驟101以返回SLEEP狀態(tài)。如果在步驟109確定的觸發(fā)標志處于“0”,則程序回復(fù)步驟101以返回SLEEP狀態(tài)。如前所述,當條目(3)的波形形成計算終止時把觸發(fā)標志置為“0”,而當接收到OUTPUT READY信息時則把標志置為“1”。因此,通過在步驟109查明觸發(fā)標志的現(xiàn)行狀態(tài),能夠進行控制以防止在根據(jù)OUTPUT READY信息的處理之前進行根據(jù)INPUT READY信息的處理。如果在步驟102確定的事件是來自樂音發(fā)生器MIDI驅(qū)動器16的WAVE LOAD請求,則程序轉(zhuǎn)到步驟111以便把波形數(shù)據(jù)讀入和存入存儲器,然后再回復(fù)步驟101以返回SLEEP狀態(tài)。WAVE LOAD請求是為樂音發(fā)生器任務(wù)20等的初始化而從MIDI驅(qū)動器16產(chǎn)生的信息。
如果在步驟102確定的事件是參數(shù)TG PARA的確認信息,則程序分支到步驟112,在這里根據(jù)由MIDI驅(qū)動器16置于樂音發(fā)生器寄存器中的樂音控制參數(shù)TG PARA進行處理(圖16中條目(1)的操作)。更準確地說,由接收到的樂音控制參數(shù)TG PARA確定樂音發(fā)生器控制參數(shù),如波形數(shù)據(jù)存儲器地址、音調(diào)信息、EG(包)參數(shù)、移動數(shù)據(jù)和LFO(低頻振蕩器)控制數(shù)據(jù)。然后,程序移到步驟113以確定現(xiàn)行狀態(tài)是否是TG EXIT(退出)。對于肯定的確定,該任務(wù)在步驟116終止;對于否定的確定,程序運行到步驟114,在這里為指定的通道(最多32個通道)完成波形形成計算過程(圖16中條目(3)的操作),正如參照圖18A和18B將要更完全地描述的那樣。在步驟114的波形形成計算過程之后,程序進行到步驟115以使觸發(fā)標志復(fù)位到“0”,然后再回復(fù)步驟101以返回SLEEP狀態(tài)。
參照圖18A和18B,在上述步驟114完成的波形形成計算過程下文中將作更詳細的描述。在步驟200波形形成計算過程的開始,就在步驟201首先確定是否存在有新的接通數(shù)據(jù)。如果在步驟201確定了有新的接通數(shù)據(jù),則程序轉(zhuǎn)到步驟202以便再確定樂音間生通道的計算次序。這是因為這些計算有時可能應(yīng)上述的OUTPUTREADY請求在途中中止,因此用于重要通道的計算可能事先已經(jīng)完成。在下面的描述中及在圖中,“C”代表由通道寄存器計算出的樂音產(chǎn)生通道的數(shù)量。
在這一步驟202之后,或者在前面的步驟201確定了沒有新的接通數(shù)據(jù),程序轉(zhuǎn)到步驟203,在這里把對已經(jīng)完成波形形成計算過程的通道數(shù)量進行計數(shù)的計數(shù)器i置為“0”,并且把通道數(shù)c和允許同時產(chǎn)生樂音的通道數(shù)R中較小的一個設(shè)置為變量vNum。變量vNum是一個代表要進行計算的通道數(shù)量的變量。此后,為了確定計數(shù)器i的計數(shù)值是否小于變量vNum,程序轉(zhuǎn)到步驟204。如果回答是否定的,即,如果計數(shù)器i的計數(shù)值等于或大于變量vNum,則在步驟209終止波形形成計算過程。
如果回答是肯定的,即,如果在步驟204確定了計數(shù)器i的計數(shù)值小于變量vNum,則程序轉(zhuǎn)到步驟205以便進一步確定是否已經(jīng)出現(xiàn)了OUTPUT READY請求。對于肯定的確定,程序轉(zhuǎn)到步驟206以便實現(xiàn)對通道CH(i)的音頻信號的強制衰減(圖16中條目(4)的操作)。如果在步驟205回答是否定的,則在步驟207對通道CH(i)完成波形形成計算過程,正如參照圖18B將要詳細描述的那樣。在步驟206的強制衰減或在步驟207的波形形成計算過程之后,程序轉(zhuǎn)到步驟208以增加數(shù)量i,然后再回復(fù)步驟204以便對下一個通道i+1重復(fù)步驟204至208的操作。
參照圖18B,將描述對每個通道的波形形成計算過程的細節(jié)。通過步驟211至218的一系列操作,該波形形成計算過程形成用“i”通道的一個采樣的波形數(shù)據(jù)。因此,通過重復(fù)這些操作形成用于多個采樣的波形數(shù)據(jù)。在步驟210開始波形形成計算過程時,根據(jù)在執(zhí)行上次波形形成計算過程時在步驟214已經(jīng)計算出的讀地址(read Ptr)的整數(shù)部分,從波形數(shù)據(jù)存儲器讀出一個內(nèi)插采樣必須的波形數(shù)據(jù),并根據(jù)該地址的小數(shù)部分在讀出的波形數(shù)據(jù)之間進行內(nèi)插計算,從而形成一個內(nèi)插的采樣。在下一步驟212,進行要加到DRYL緩沖器60、DRYR緩沖器61和REV緩沖器63中的數(shù)據(jù)的音量電平計算。通過對音量包絡(luò)線AEG、音量VOL、調(diào)諧AM、W移動值PAN和三個通道SENDLEVEL(輸送電平)的電平的參數(shù)求和實現(xiàn)該音量電平計算。然后,在步驟213,用對應(yīng)的內(nèi)插數(shù)據(jù)乘以三個通道的各個音量電平,然后把乘積結(jié)果加到各自的緩沖器中。
在此之后,程序轉(zhuǎn)到步驟214以便通過加上“F”數(shù)(音調(diào)信息)產(chǎn)生一個用來讀波形數(shù)據(jù)存儲器44的新讀地址read Ptr。通過以與F數(shù)相符的速率如此增加讀地址read Ptr,將從波形數(shù)據(jù)存儲器(波形表)中讀出具有與F數(shù)相符的音調(diào)的波形。在這種情況下,如果F數(shù)帶有小數(shù)部分,則能夠?qū)崿F(xiàn)較精細的音調(diào)控制。然后,程序轉(zhuǎn)到步驟215以更新音量包絡(luò)線AEG。在下一步驟216,確定更新的音量或振幅包絡(luò)線AEG是否小于預(yù)定的切斷電平。如果在步驟216的回答是否定的,則程序轉(zhuǎn)到步驟217以更新LFO,然后再轉(zhuǎn)到步驟218以便根據(jù)音量參數(shù)VOL和移動參數(shù)PAN執(zhí)行變平操作(即內(nèi)插操作)。這些步驟215、217和218的細節(jié)將在下面描述。在下一步驟219,確定是否還有其他的采樣要形成,即,用于討論通道的一幀波形采樣的形成是否仍沒有完成。對于在步驟219的肯定確定,即,如果仍有其他的采樣要形成,則程序回復(fù)步驟211;如果回答是否定的,就意味著對于該通道的所有采樣已經(jīng)完成波形形成計算過程,因此在步驟221,程序就終止對該通道步驟207的波形形成計算過程。
另一方面,如果在步驟216確定了更新的音量值小于預(yù)定的切斷電平,則程序轉(zhuǎn)到步驟220以便執(zhí)行切斷過程而把該通道置于消音狀態(tài)。在下一步驟221,程序終止對該通道步驟207的波形形成計算過程。
參照圖25A和25B將解釋上述的包絡(luò)線和LFO波形。圖25A表示包絡(luò)線(EG)波形的典型例子,該包絡(luò)線波形包括上升、下降、保持和斷開段。更準確地說,一旦接通事件發(fā)生,波形振幅就以上升率(ATKrate)的斜率迅速升到最高電平(EGMAXlevel)(上升段),以下降率(DCrate)的斜率從最高電平降低到保持電平(下降段),然后在給定的時間內(nèi)保持恒定的保持電平(SUSlevel)(保持段)。當接收到切斷事件數(shù)據(jù)時,波形振幅以斷開率(RLSrate)的斜率減小。然后,一旦振幅達到人耳聽不到的切斷電平時,就以衰減率(DMPrate)迅速減小以防止產(chǎn)生多余的噪聲。
LFO(低頻振蕩器)波形被用來得到用來調(diào)制樂音波形的波形,事實上LFO波形是具有由斜率LFOrate確定的LFO周期的鋸齒波,如圖25B中所示。通過查表或利用LFO波進行算術(shù)運算,就能得到必需的調(diào)制波形如正弦波。
這些EG波形和LFO波形的變化比樂音波形取樣循環(huán)要慢的多。其實,在圖18B中所示的對“i”通道的波形形成計算時,對每一個采樣更新振幅EG和LFO(步驟215和217)并執(zhí)行音量和移動值的內(nèi)插操作(步驟218),對每組較大數(shù)目的取樣循環(huán)而不是對每個取樣循環(huán)進行這些計算一次,因為正如所述的那樣,EG波形和LFO波形的變化要比樂音波形取樣循環(huán)慢的多。通過這樣做,就能減小波形形成所必需的計算量。
在圖20中,表示了用于“i”通道的波形形成計算過程的改進實施例,該實施例進行上述的振幅EG和LFO更新及音量和移動參數(shù)內(nèi)插是每八個采樣一次。然而,應(yīng)該理解,這些操作的頻率不必是每八個采樣一次,而是可以根據(jù)處理速度或CPU的載荷選擇任何一個最佳的頻率。在圖20中,在步驟231開始“i”通道的波形形成過程,在步驟231把用來計數(shù)采樣的計數(shù)器SN復(fù)位到“0”,并在步驟232,以與上述步驟211類似的方式從波形數(shù)據(jù)存儲器中讀出必要的波形采樣并對這些采樣進行內(nèi)插操作。然后,在步驟233,用對應(yīng)的內(nèi)插數(shù)據(jù)乘以上次執(zhí)行該計算過程時在步驟250已經(jīng)計算出的各個音量電平,并把乘積結(jié)果加到對應(yīng)通道的緩沖器中。此后,程序轉(zhuǎn)到步驟234以產(chǎn)生用來讀波形數(shù)據(jù)存儲器的新讀地址。
然后,在步驟235,確定計數(shù)器SN的計數(shù)值是否是“0”或是“8”的倍數(shù)。如果在步驟235的回答是肯定的,則意味著EG和LFO計算要在現(xiàn)行的采樣上進行,因此程序轉(zhuǎn)到步驟236以更新振幅(EG)然后再轉(zhuǎn)到步驟237。另一方面,如果計數(shù)器SN的計數(shù)值不是“0”而是“8”的倍數(shù),則程序轉(zhuǎn)到步驟237而不更新AEG。在步驟237,進一步確定現(xiàn)行的AEG值是否小于切斷電平。如果回答是否定的,則程序轉(zhuǎn)到步驟238以便進一步確定EG和LFO計算是否在現(xiàn)行的采樣上進行,這類似于步驟235。如果在步驟238確定是肯定的,則在步驟239更新LFO并在步驟240在音量和移動參數(shù)上進行內(nèi)插操作,然后在步驟241更新三個通道的數(shù)據(jù)音量極。這些操作完成用于現(xiàn)行采樣的波形形成,并且程序轉(zhuǎn)到步驟242。
如果在上述的步驟238回答是否定的,則意味著現(xiàn)行采樣沒有受到LFO更新操作等,因此對現(xiàn)行采樣的波形形成已經(jīng)完成,程序轉(zhuǎn)到步驟242。在步驟242,確定對所有的采樣是否已經(jīng)完成了波形形成計算過程,即,是否還有另外的采樣要處理,在步驟232和之后的上述操作在采樣計數(shù)器SN增加一之后重復(fù)。
如果在上述的步驟237確定了現(xiàn)行的AEG值小于切斷電平,則程序分支到步驟244的切斷過程,在這里波形振幅以圖25A的衰減率迅速減小,因此對“i”通道完成波形形成過程。
根據(jù)圖20的改進實施例,步驟236和239的AEG和LFO更新操作、步驟240的音量和移動值內(nèi)插操作及步驟241的音量級計算是每八個采樣執(zhí)行一次,結(jié)果,與圖18A和18B中所示的實施例相比能充分地減輕CPU的計算載荷。
在圖21中,表示了另一個用于“i”通道的波形形成計算過程的改進實施例,其中步驟261至266的操作與圖20中所述的步驟231至236的相同,步驟267至269的操作與上術(shù)步驟239至241的相同,步驟270的操作與上述步驟237的相同,及步驟271至273的操作與上述步驟242至244的相同。因此,在圖21中這些步驟的詳細內(nèi)容將不再描述以避免不必要的重復(fù)。
根據(jù)圖21的改進實施例,如果在步驟265確定了不對現(xiàn)行采樣進行EG和LFO計算,則程序跳到步驟270以便進一步確定現(xiàn)行AEG值是否小于切斷電平。另一方面,如果在步驟265確定了對現(xiàn)行采樣進行EG和LFO計算,則連續(xù)執(zhí)行步驟266和267的AEG和LFO更新操作、步驟268的音量和移動值的內(nèi)插操作及步驟269的音量級計算。
就是說,在圖20中,步驟236的AEG更新操作與步驟239的LFO更新操作、步驟240的音量和移動參數(shù)插入操作及步驟241的音量級計算是分開進行的,并且在AEG更新操作之后確定現(xiàn)行AEG值是否小于切斷電平,與該實施例不同,圖21的實施例以這樣的方式安排集體或連續(xù)地進行這些操作并且AEG值的確定緊接著這些連續(xù)的操作。采用這種安排,與圖18B的上述實施例相比,能充分減小圖21的實施例中CPU的計算載荷或計算量,盡管計算載荷稍大于圖20中的實施例。
盡管通過對每組預(yù)定數(shù)目較大的采樣進行一次AEG、LFO等的更新操作來安排這些實施例以減少計算量,但根據(jù)現(xiàn)行采樣屬于那個波形段,可以確定是否應(yīng)該實現(xiàn)EG計算。例如,可以僅對在上升和下降段中的采樣實行EG計算而對在保持段中的采樣可以省去EG計算,因為在保持段中的采樣處于恒定狀態(tài)。通過如此省去EG計算,也能降低必需的計算頻率。
下面,參照圖22將描述AEG更新操作(圖18B的步驟215、圖20的步驟236和圖21的步驟266)的細節(jié)。一開始AEG更新操作,就在步驟301讀入EG參數(shù)(EGPARA)、振幅EG(aeg)的現(xiàn)行值和性能觸發(fā)信息(TOUCH)。該EG控制信息典型地包括通過討論的通道產(chǎn)生的樂音的各個波形段的各持續(xù)時間和目標值(EG MAXlevel和SUSlevel)及上升率(ATKrate)、下降率(DCrate)斷開率(RLSrate)。
然后,在步驟302,確定現(xiàn)行狀態(tài)是否是接通狀態(tài)。如果在步驟302回答是否定的,則意味著現(xiàn)行狀態(tài)是切斷狀態(tài),并且控制轉(zhuǎn)到步驟303以轉(zhuǎn)移到斷開段。如果現(xiàn)行狀態(tài)是接通狀態(tài),則控制轉(zhuǎn)到步驟304,在這里進一步確定現(xiàn)行段是否是保持段以外的其他段。如果在步驟304的回答是否定的,即,如果現(xiàn)行段是保持段,則意味著AEG處于恒定狀態(tài),因此立即終止AEG更新操作。另一方面,如果在步驟304確定了現(xiàn)行段是保持段以外的其他段,則程序轉(zhuǎn)到步驟305以實現(xiàn)AEG更新。
由于本發(fā)明把EG值作為整數(shù)來處理,盡管以實數(shù)形式存儲EG參數(shù)如每段獨立EG段的速率值,所以以如下方式進行AEG更新。即,在實施例中這樣進行設(shè)定如果f>0,則m=n+1,且K=RATE/(n+1);而如果f=0,則m=n,且K=RATE/n=1,其中RATE代表現(xiàn)行段的速率值并且n和f分別代表該速率值的整數(shù)和小數(shù)部分。通過累計值“K”,并當該累計值超過“1”一次就把整數(shù)值“m”加到現(xiàn)行AEG值上(aeg)上一次,更新AEG。通過這樣做,能用RATE/m的概率加到小數(shù)集攏值“m”上,這就相當于通過把“m·(RATE/m)=RATE”加到現(xiàn)行AEG值(aeg)上更新AEG值。
為此目的,在步驟305把值“K”加到一個aeg小數(shù)寄存器AEGFRA中,該寄存器是一個用來累計所述的值“K”的寄存器。在步驟306,確定存儲在該小數(shù)寄存器AEGFRA中的現(xiàn)行值是否已變得大于“1”。對于否定的確定,AEG更新操作結(jié)束而不更新該現(xiàn)行的AEG值。一旦在小數(shù)寄存器AEGFRA中的現(xiàn)行值超過“1”且在步驟306的確定成為肯定的,程序就轉(zhuǎn)到步驟307,在這里把m=(現(xiàn)行段的斜率值的整數(shù)部分n+1)加到現(xiàn)行AEG值(aeg)上以得到新的AEG值(aeg)并用性能觸發(fā)信息TOUCH乘以新的AEG值以便得到更新的AEG值。
在下個步驟308,在小數(shù)寄存器AEGFRA中的值減一以便準備“K”累計的下次執(zhí)行,然后在步驟309確定AEG值(aeg)是否已經(jīng)達到目標值(在上升段情況下的EGMAXlevel和在下降段情況下的SUSlevel)。如果在步驟309的回答是肯定的,則程序轉(zhuǎn)移到步驟310的下一個波形段;否則,AEG更新操作結(jié)束而不進行步驟310的操作。
下面,參照圖23將描述LFO更新操作(圖18B的步驟217、圖20的步驟239和圖21的步驟267)的細節(jié)。由于本發(fā)明把LFO參數(shù)作為整數(shù)來處理,盡管它是以實數(shù)的形式存儲的,所以用類似于EG值的概率計算來進行LFO更新。首先,在步驟321,讀入現(xiàn)在存儲的LFO控制數(shù)據(jù),即,LFO速率(LFOrate)和現(xiàn)行的LFO相值(lfop)。
此后,類似于EG值,這樣進行設(shè)定如果f>0,則m=n+1,且K=LFOrate/(n+1);而如果f=0,則m=n,且K=LFOrate/n=1,其中LFOrate代表讀出的LFO速率值,并且n和f分別代表速率值的整數(shù)部分和小數(shù)部分。通過累計值“K”及每當該累計值超過“1”時把整數(shù)值“m”加到現(xiàn)行的LFO值(lfop)上,更新LFO值。
為此目的,在步驟322把值“K”加入一個lfop小數(shù)寄存器LFOFRA中。在步驟323,確定在該小數(shù)寄存器LFOFRA中存儲的現(xiàn)行值是否變得已經(jīng)大于“1”。對于否定的確定,LFO更新操作結(jié)束而不更新現(xiàn)行的LFO值。一旦在小數(shù)寄存器LFOFRA中的現(xiàn)行值超過“1”且在步驟323的確定成為肯定的,程序就轉(zhuǎn)到步驟324,在這里把m=(LFOrate的整數(shù)部分n+1)加到現(xiàn)行的LFO值(lfop)上以得到新的LFO值(lfop)。
在下一步驟325,把在小數(shù)寄存器LFOFRA中的值減一以準備操作的下次執(zhí)行,然后在步驟326確定現(xiàn)行的LFO值(lfop)是否已經(jīng)達到目標值。如果在步驟326回答是肯定的,則程序把現(xiàn)行的LFO值(lfop)復(fù)位到“0”。這樣,形成鋸齒波形的LFO值,如圖25B中所示。然后,在步驟328,通過根據(jù)現(xiàn)行的LFO相值(lfop)查表或計算得到預(yù)定LFO波形的振幅值。
上文已經(jīng)給出關(guān)于本方法的最佳實施例的描述,其中產(chǎn)生的圖25B中所示的鋸齒波形的LFO值被用作調(diào)制,或根據(jù)這些鋸齒波形的LFO值產(chǎn)生多種調(diào)制波形。
另一方面,可以通過其他的直接算術(shù)運算或者僅利用順序地查閱預(yù)定的調(diào)制波形表得到需要調(diào)制波形的LFO值。
下面,參照圖24將描述音量和移動值內(nèi)插操作(圖18B的步驟218、圖20的步驟240和圖21的步驟268)。音量和移動信息是通過用戶的操作設(shè)定的。在步驟331,確定音量信息(vol)的現(xiàn)行值是否還沒有達到用戶設(shè)定的目標值。如果現(xiàn)行的音量信息值(vol)已經(jīng)達到用戶設(shè)定的目標值,則在步驟331產(chǎn)生否定的確定,程序就轉(zhuǎn)到步驟333;如果現(xiàn)行的音量信息值(vol)還沒有到用戶設(shè)定的目標值,則在步驟331產(chǎn)生肯定的確定,程序就轉(zhuǎn)到步驟332執(zhí)行該vol數(shù)據(jù)的內(nèi)插操作以把內(nèi)插向的數(shù)據(jù)作為新的vol數(shù)據(jù)。
在步驟333,確定移動信息(pan)的現(xiàn)行值是否還沒達到用戶設(shè)定的目標值。如果現(xiàn)行的移動信息值(pan)已經(jīng)達到用戶設(shè)定的目標值,則在步驟333產(chǎn)生否定的確定,程序就終止該操作;如果現(xiàn)行的移動信息值(pan)還沒有達以用戶設(shè)定的目標值,則在步驟333產(chǎn)生肯定的確定,程序就轉(zhuǎn)到步驟334執(zhí)行移動數(shù)據(jù)的內(nèi)插操作以把內(nèi)插后的數(shù)據(jù)作為新的pan數(shù)據(jù)。
雖然上述的實施例是根據(jù)由輸出驅(qū)動器在一幀復(fù)制結(jié)束時產(chǎn)生的OUTPUT READY信息啟動樂音發(fā)生器任務(wù)20,當然也可以不同地安排。例如,可以在一幀復(fù)制的中間點處啟動樂音發(fā)生器任務(wù)20,因為在比一幀時間短的時間內(nèi)能完成條目(5)至(7)的操作。另外,當探測到置于輸出驅(qū)動器中的波形數(shù)據(jù)已經(jīng)減少到低于預(yù)定數(shù)量時啟動任務(wù)20,而不是在一幀具有恒定時間長度的時間內(nèi)啟動樂音發(fā)生器任務(wù)20。
而且,本發(fā)明的波形計算方法不僅可以以軟件樂音發(fā)生器的方式實現(xiàn),而且還可以以在電子樂器中裝上與OUTPUT READY信息相符的專用樂音發(fā)生設(shè)備的方式來實現(xiàn)。
況且,上述的形成的波形數(shù)據(jù)和外部輸入波形數(shù)據(jù)的合成、及在波形形成計算過程的中間階段的外部輸入波形數(shù)據(jù)的插入不僅適用于軟件樂音發(fā)生器,而且還適用于裝在電子樂器內(nèi)的專用樂音發(fā)生設(shè)備。
而且,盡管已經(jīng)描述的實施例是按所述的次序依次進行條目(5)、(6)、(7)、(1)、(2)和(3)的操作,但也可以按任何其他的次序進行這些操作。
此外,條目(3)的上述波形計算操作可以劃分成多個部分分開進行,而不是像在上述的實施例中那樣連續(xù)地進行。
況且,盡管已經(jīng)把最佳實施例描述成在MIDI事件中斷過程中集體地執(zhí)行樂音分配和樂音發(fā)生器寄存器的設(shè)定,但是僅可以在中斷過程中執(zhí)行樂音分配,或者中斷過程可以進行操作以把發(fā)生的MIDI事件讀入緩沖器中。在這種情況下,可以在樂音發(fā)生器處理時進行樂音分配和樂音發(fā)生器寄存器的設(shè)定,而不是在MIDI事件中斷過程中進行。另外,可以在同上述MIDI事件中斷過程分開的計時器中斷過程中進行。
而且,對于任何其他的演奏信息處理都可以進行上述的中斷過程,而不是限于樂音分配和讀入操作。
此外,本發(fā)明的樂音產(chǎn)生方法不應(yīng)該理解為僅限于基于波形存儲器的方法,而該方法可以基于任何其他原理,如FM(調(diào)頻)、物理方式或ADPCM。
就已經(jīng)描述的本發(fā)明而論,在任選的通用操作系統(tǒng)的同時,能以穩(wěn)定的方式執(zhí)行波形形成計算。
而且,根據(jù)來自波形復(fù)制部分的請求,本發(fā)明方便的允許迅速輸出輸出波形數(shù)據(jù)。
而且,就本發(fā)明而論,允許軟件樂音發(fā)生器根據(jù)外部的輸入波形數(shù)據(jù)執(zhí)行音色控制過程。
而且,由于與演奏信息的出現(xiàn)相對應(yīng)而增加的處理量,使樂音發(fā)生器過程不能執(zhí)行到足夠的程度,即使在這種場合,本發(fā)明也能用一些其他的時間來彌補不足,因此能有效地穩(wěn)定樂音發(fā)生器處理。
況且,能把演奏信息增加的處理量分散到空閑時間,因而能有效地避免處理量的暫時增加。
而且,通過間斷進行EG波形和LFO計算,本發(fā)明能減小波形形成必需的計算量,并因而有效地減小了用于波形形成的處理載荷。
權(quán)利要求
1.一種樂音發(fā)生方法,包括一個第一步驟,接收包括用以控制一個或多個樂音的可聽發(fā)生的指令的演奏信息;以及一個第二步驟,響應(yīng)于所述演奏信息,將已對其指令了開始可聽發(fā)生的指定樂音分配給樂音發(fā)生通道中的任一個,并且將用于指定樂音的控制數(shù)據(jù)寫入通道寄存器,所述通道寄存器對應(yīng)于已將所述指定樂音分配于其的樂音發(fā)生通道,其特征在于所述方法還包括一個第三步驟,以長于一個采樣循環(huán)的時間間隔發(fā)出計算開始指令;一個第四步驟,響應(yīng)于每個所述計算開始指令,根據(jù)在所述通道的所述通道寄存器中寫入的控制數(shù)據(jù),以集體方式為已將所述指定樂音分配于其的每個樂音發(fā)生通道執(zhí)行樂音形成計算,以便為每個已將所述指定樂音分配于其的樂音發(fā)生通道形成多個采樣的波形數(shù)據(jù),所述第四步驟還混合為各個樂音發(fā)生通道形成的波形數(shù)據(jù),以由此提供多個混合的采樣數(shù)據(jù);以及一個第五步驟,輸出混合的采樣數(shù)據(jù),每個采樣循環(huán)一個采樣。
2.根據(jù)權(quán)利要求1所述的方法,其中根據(jù)所述演奏信息生成要由所述第二步驟寫入所述通道寄存器中的所述控制數(shù)據(jù)。
3.根據(jù)權(quán)利要求1所述的方法,其中在所述樂音形成計算中,所述第四步驟根據(jù)從所述通道寄存器讀出一次控制數(shù)據(jù)和在形成波形數(shù)據(jù)后將控制數(shù)據(jù)寫入所述通道寄存器,為已將所述指定樂音分配于其的每個所述樂音發(fā)生通道執(zhí)行多個采樣的波形數(shù)據(jù)形成。
4.根據(jù)權(quán)利要求1所述的方法,還包括一個第六步驟,在每個采樣循環(huán)將第五步驟輸出的混合采樣數(shù)據(jù)轉(zhuǎn)換為模擬信號。
5.根據(jù)權(quán)利要求1-4所述的方法,其中所述第三步驟以規(guī)則的間隔發(fā)出所述計算開始指令。
6.根據(jù)權(quán)利要求1-4所述的方法,其中所述第三步驟響應(yīng)于所述第一步驟接收到所述所述演奏信息而發(fā)出所述計算開始指令。
7.根據(jù)權(quán)利要求1所述的方法,其中所述第四步驟根據(jù)一個條件,給予與其他通道相比當前正在生成較高音量的樂音的至少一個通道優(yōu)先級,來執(zhí)行波形數(shù)據(jù)的算術(shù)形成。
8.根據(jù)權(quán)利要求1-4所述的方法,還包括一個設(shè)置限制周期的步驟,以及一個確定步驟,確定已將所述指定樂音分配于其的所有樂音發(fā)生通道的計算是否會在該限制周期中完成,并且如果確定已將所述指定樂音分配于其的所有樂音發(fā)生通道的計算不會在限制周期中完成,則指令應(yīng)當在至少一個樂音發(fā)生通道中對樂音進行消音。
9.根據(jù)權(quán)利要求1-4所述的方法,還包括一個根據(jù)要在所述樂音發(fā)生通道中發(fā)生的樂音的相應(yīng)重要性確定已將所述指定樂音分配于其的各樂音發(fā)生通道上的計算處理順序的步驟,并且其中所述第四步驟根據(jù)所述確定步驟確定的計算處理順序為已將所述指定樂音分配于其的所述樂音發(fā)生通道執(zhí)行樂音形成計算。
10.根據(jù)權(quán)利要求1-4所述的方法,所述第四步驟根據(jù)一個計算處理順序為已將所述指定樂音分配于其的每個所述樂音發(fā)生通道執(zhí)行樂音形成計算,并且其中當所述第四步驟的樂音形成計算有可能不能在一個時間周期中完成并且所述第五步驟輸出的采樣數(shù)據(jù)將中斷時,所述第四步驟在樂音形成計算正在以計算處理順序在通道之一上執(zhí)行的一個時間點上斷開樂音形成計算,以防止由所述第五步驟輸出的采樣數(shù)據(jù)中斷。
11.根據(jù)權(quán)利要求10所述的方法,還包括一個將快速衰減包絡(luò)施加給在其中樂音形成計算應(yīng)當被斷開的一個通道的步驟,由此終止該一個通道的樂音發(fā)生。
12.根據(jù)權(quán)利要求10所述的方法,其中在針對一個通道斷開樂音形成計算的時間之前,已在在計算處理順序中先于該一個通道的其他通道中完成多個采樣的波形數(shù)據(jù)形成計算,并且所述第五步驟為其他通道輸出多個采樣的所述波形數(shù)據(jù)的混合采樣數(shù)據(jù)。
13.根據(jù)權(quán)利要求1所述的方法,還包括當在所述第四步驟執(zhí)行樂音形成計算期間由所述第一步驟接收到演奏信息時,進行控制,以暫時停止所述第四步驟的樂音形成計算,執(zhí)行一個輸入過程以輸入接收的演奏信息,并在輸入過程之后恢復(fù)所述第四步驟的樂音形成計算。
14.根據(jù)權(quán)利要求1所述的方法,還包括一個第六步驟,向所述第五步驟提供所述第四步驟形成的對應(yīng)于一個周期的波形數(shù)據(jù);以及一個第七步驟,檢測何時所述第五步驟的波形數(shù)據(jù)輸出已有進展,以請求進一步提供所述第四步驟形成的波形數(shù)據(jù),并且其中執(zhí)行所述第六步驟,以響應(yīng)于所述第七步驟的請求提供所述波形數(shù)據(jù),并且執(zhí)行所述第四步驟,以在所述第六步驟提供所述波形數(shù)據(jù)之后形成進一步的波形數(shù)據(jù)。
15.根據(jù)權(quán)利要求1所述的方法,還包括一個第六步驟,從外界輸入具有一個周期的外部波形數(shù)據(jù),并將輸入的外部波形數(shù)據(jù)與由所述第四步驟形成的混合采樣數(shù)據(jù)相結(jié)合,以形成所述周期的合成波形數(shù)據(jù)。
16.根據(jù)權(quán)利要求15所述的方法,還包括一個第七步驟,將信號處理應(yīng)用于由所述第六步驟形成的所述周期的合成波形數(shù)據(jù),以及其中所述第五步驟輸出由所述第七步驟應(yīng)用信號處理的合成波形數(shù)據(jù),每個采樣循環(huán)一個采樣。
17.根據(jù)權(quán)利要求1所述的方法,其中所述控制數(shù)據(jù)包括一個用于控制樂音的參數(shù),當多個采樣的所述波形數(shù)據(jù)要由所述第四步驟形成時,所述參數(shù)的值針對每一個或每多個采樣變化。
18.根據(jù)權(quán)利要求14-17所述的方法,其中所述第四步驟包括一個以間歇方式執(zhí)行樂音參數(shù)計算操作的步驟。
19.根據(jù)權(quán)利要求1所述的方法,其中當所述第四步驟完成多個采樣中每個的新混合采樣數(shù)據(jù)的形成時并且在完成由所述第四步驟先前形成的混合采樣數(shù)據(jù)的輸出后,所述第五步驟開始輸出新混合采樣數(shù)據(jù)。
20.根據(jù)權(quán)利要求1所述的方法,其中所述第三步驟以可變的時間點發(fā)出所述計算開始指令,并且所述第四步驟在對應(yīng)的所述可變時間點上,響應(yīng)于所述計算開始指令,在多個計算周期中的每個周期期間,形成所述多個采樣的所述波形數(shù)據(jù)。
21.一種樂音發(fā)生設(shè)備,包括第一裝置,用于接收包括用以控制一個或多個樂音的可聽發(fā)生的指令的演奏信息;以及第二裝置,響應(yīng)于所述演奏信息,將已對其指令了開始可聽發(fā)生的指定樂音分配給樂音發(fā)生通道中的任一個,并且將用于指定樂音的控制數(shù)據(jù)寫入通道寄存器,所述通道寄存器對應(yīng)于已將所述指定樂音分配于其的樂音發(fā)生通道,其特征在于所述設(shè)備還包括第三裝置,以長于一個采樣循環(huán)的時間間隔發(fā)出計算開始指令;第四裝置,響應(yīng)于每個所述計算開始指令,根據(jù)在所述通道的所述通道寄存器中寫入的控制數(shù)據(jù),以集體方式為已將所述指定樂音分配于其的每個樂音發(fā)生通道執(zhí)行樂音形成計算,以便為每個已將所述指定樂音分配于其的樂音發(fā)生通道形成多個采樣的波形數(shù)據(jù),所述第四裝置還混合為各個樂音發(fā)生通道形成的波形數(shù)據(jù),以由此提供多個混合的采樣數(shù)據(jù);以及第五裝置,輸出混合的采樣數(shù)據(jù),每個采樣循環(huán)一個采樣。
22.根據(jù)權(quán)利要求21所述的設(shè)備,其中根據(jù)所述演奏信息生成要由所述第二裝置寫入所述通道寄存器中的所述控制數(shù)據(jù)。
23.根據(jù)權(quán)利要求21所述的設(shè)備,其中在所述樂音形成計算中,所述第四裝置根據(jù)從所述通道寄存器讀出一次控制數(shù)據(jù)和在形成波形數(shù)據(jù)后將控制數(shù)據(jù)寫入所述通道寄存器,為已將所述指定樂音分配于其的每個所述樂音發(fā)生通道執(zhí)行多個采樣的波形數(shù)據(jù)形成。
24.根據(jù)權(quán)利要求21所述的設(shè)備,還包括第六裝置,在每個采樣循環(huán)將第五裝置輸出的混合采樣數(shù)據(jù)轉(zhuǎn)換為模擬信號。
25.根據(jù)權(quán)利要求21-24所述的設(shè)備,其中所述第三裝置以規(guī)則的間隔發(fā)出所述計算開始指令。
26.根據(jù)權(quán)利要求21-24所述的設(shè)備,其中所述第三裝置響應(yīng)于所述第一裝置接收到所述所述演奏信息而發(fā)出所述計算開始指令。
27.根據(jù)權(quán)利要求21所述的設(shè)備,其中所述第四裝置根據(jù)一個條件,給予與其他通道相比當前正在生成較高音量的樂音的至少一個通道優(yōu)先級,來執(zhí)行波形數(shù)據(jù)的算術(shù)形成。
28.根據(jù)權(quán)利要求21-24所述的設(shè)備,還包括一個設(shè)置限制周期的裝置,以及一個確定裝置,確定已將所述指定樂音分配于其的所有樂音發(fā)生通道的計算是否會在限制周期中完成,并且如果確定已將所述指定樂音分配于其的所有樂音發(fā)生通道的計算不會在限制周期中完成,則指令應(yīng)當在至少一個樂音發(fā)生通道中對樂音進行消音。
29.根據(jù)權(quán)利要求21-24所述的設(shè)備,還包括一個根據(jù)要在所述樂音發(fā)生通道中發(fā)生的樂音的相應(yīng)重要性確定已將所述指定樂音分配于其的各樂音發(fā)生通道上的計算處理順序的裝置,并且其中所述第四裝置根據(jù)所述確定裝置確定的計算處理順序為已將所述指定樂音分配于其的所述樂音發(fā)生通道執(zhí)行樂音形成計算。
30.根據(jù)權(quán)利要求21-24所述的設(shè)備,所述第四裝置根據(jù)一個計算處理順序為已將所述指定樂音分配于其的每個所述樂音發(fā)生通道執(zhí)行樂音形成計算,并且其中當所述第四裝置的樂音形成計算有可能不能在一個時間周期中完成并且所述第五裝置輸出的采樣數(shù)據(jù)將中斷時,所述第四裝置在樂音形成計算正在以計算處理順序在通道之一上執(zhí)行的一個時間點上斷開樂音形成計算,以防止由所述第五裝置輸出的采樣數(shù)據(jù)中斷。
31.根據(jù)權(quán)利要求30所述的設(shè)備,還包括一個將快速衰減包絡(luò)施加給在其中樂音形成計算應(yīng)當被斷開的一個通道的裝置,由此終止該一個通道的樂音發(fā)生。
32.根據(jù)權(quán)利要求30所述的設(shè)備,其中在針對一個通道斷開樂音形成計算的時間之前,已在在計算處理順序中先于該一個通道的其他通道中完成多個采樣的波形數(shù)據(jù)形成計算,并且所述第五裝置為其他通道輸出多個采樣的所述波形數(shù)據(jù)的混合采樣數(shù)據(jù)。
33.根據(jù)權(quán)利要求21所述的設(shè)備,還包括當在所述第四裝置執(zhí)行樂音形成計算期間由所述第一裝置接收到演奏信息時,進行控制,以暫時停止所述第四裝置的樂音形成計算,執(zhí)行一個輸入過程以輸入接收的演奏信息,并在輸入過程之后恢復(fù)所述第四裝置的樂音形成計算。
34.根據(jù)權(quán)利要求21所述的設(shè)備,還包括第六裝置,向所述第五裝置提供所述第四裝置形成的對應(yīng)于一個周期的波形數(shù)據(jù);以及第七裝置,檢測何時所述第五裝置的波形數(shù)據(jù)輸出已有進展,以請求進一步提供所述第四裝置形成的波形數(shù)據(jù),并且其中執(zhí)行所述第六裝置,以響應(yīng)于所述第七裝置的請求提供所述波形數(shù)據(jù),并且執(zhí)行所述第四裝置,以在所述第六裝置提供所述波形數(shù)據(jù)之后形成進一步的波形數(shù)據(jù)。
35.根據(jù)權(quán)利要求21所述的設(shè)備,還包括第六裝置,從外界輸入具有一個周期的外部波形數(shù)據(jù),并將輸入的外部波形數(shù)據(jù)與由所述第四裝置形成的混合采樣數(shù)據(jù)相結(jié)合,以形成所述周期的合成波形數(shù)據(jù)。
36.根據(jù)權(quán)利要求35所述的設(shè)備,還包括第七裝置,將信號處理應(yīng)用于由所述第六裝置形成的所述周期的合成波形數(shù)據(jù),以及其中所述第五裝置輸出由所述第七裝置應(yīng)用信號處理的合成波形數(shù)據(jù),每個采樣循環(huán)一個采樣。
37.根據(jù)權(quán)利要求21所述的設(shè)備,其中所述控制數(shù)據(jù)包括一個用于控制樂音的參數(shù),當多個采樣的所述波形數(shù)據(jù)要由所述第四裝置形成時,所述參數(shù)的值針對每一個或每多個采樣變化。
38.根據(jù)權(quán)利要求34-37所述的設(shè)備,其中所述第四裝置包括一個以間歇方式執(zhí)行樂音參數(shù)計算操作的裝置。
39.根據(jù)權(quán)利要求21所述的設(shè)備,其中當所述第四裝置完成多個采樣中每個的新混合采樣數(shù)據(jù)的形成時并且在完成由所述第四裝置先前形成的混合采樣數(shù)據(jù)的輸出后,所述第五裝置開始輸出新混合采樣數(shù)據(jù)。
40.根據(jù)權(quán)利要求21所述的設(shè)備,其中所述第三裝置以可變的時間點發(fā)出所述計算開始指令,并且所述第四裝置在對應(yīng)的所述可變時間點上,響應(yīng)于所述計算開始指令,在多個計算周期中的每個周期期間,形成所述多個采樣的所述波形數(shù)據(jù)。
全文摘要
對于給定的樂音發(fā)生通道,用算術(shù)方法集體地形成對應(yīng)于多個取樣循環(huán)的波形試樣數(shù)據(jù)。一旦把性能信息如MIDI事件數(shù)據(jù)供給來自在應(yīng)用程序的樂音發(fā)生器MIDI驅(qū)動器,該MIDI驅(qū)動器就根據(jù)輸入MIDI信號把新的樂音發(fā)生分配給樂音發(fā)生器任務(wù)的指定樂音發(fā)生通道。該樂音發(fā)生器任務(wù)利用樂音控制參數(shù)用算術(shù)方法形成樂音波形數(shù)據(jù)并把該樂音波形數(shù)據(jù)送給數(shù)/模轉(zhuǎn)換器作用的CODEC電路。利用優(yōu)先權(quán)多任務(wù)管理程序定序和執(zhí)行該程序和通用的操作系統(tǒng)以系統(tǒng)開銷。
文檔編號G10H1/18GK1516110SQ03125170
公開日2004年7月28日 申請日期1996年5月17日 優(yōu)先權(quán)日1995年5月19日
發(fā)明者田邑元一 申請人:雅馬哈株式會社
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
乳山市| 连南| 德阳市| 苏州市| 义乌市| 连江县| 阳江市| 新河县| 大洼县| 上犹县| 增城市| 马公市| 房山区| 昭苏县| 尼木县| 阿拉善盟| 宜良县| 伽师县| 望都县| 镇沅| 长垣县| 阿拉善盟| 眉山市| 茌平县| 娱乐| 土默特右旗| 冕宁县| 馆陶县| 宜都市| 上林县| 叙永县| 新安县| 洪泽县| 绥棱县| 扎鲁特旗| 东港市| 抚宁县| 紫金县| 石泉县| 湖北省| 临桂县|