亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

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

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

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


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