相關申請參照
本申請基于并主張2016年3月23日提出的日本專利特愿2016-058773的優先權,將該基礎申請的內容全部并入本申請。
本發明涉及波形寫入裝置、方法、使用了該裝置的電子樂器以及存儲介質。
背景技術:
在通過波形寫入方式產生樂音波形的音源裝置中,為了能夠利用更多的更長時間的波形數據,有時采用將不使用的波形數據預先保存在例如rom(一級存儲裝置)中、僅將要使用的波形數據向音源裝置能夠直接存取的作為波形存儲器發揮功能的ram(二級存儲裝置)轉送并使其發音的系統。即,可以說是一種將高價的ram具有的存儲容量以上的存儲容量的波形數據預先保存在廉價的rom中,僅在需要的情況下移動并用于發音的在成本上有效的方法。
在為這種系統的情況下,在從rom向ram上寫入新的音色波形時ram上的空閑的空間不足的情況下,在被寫入了別的音色的波形的ram上的存儲區域中進行覆寫。
作為用于進行這種控制的現有技術,已知有如下的技術(例如專利文獻1記載的技術)。rom中按每個音色保存有1個以上的波形數據。音源lsi(大規模集成電路)參照所指定的曲的曲數據,在這些波形數據中確定樂音的發音所需的數據,將確定為需要的波形數據從rom讀出后向ram轉送并使其保存。由此,提供能夠在為了生成要發音的樂音的峰值而將波形數據保存于ram的情況下進一步抑制其數據量的樂音產生裝置。
專利文獻1:日本特開2007-271827號公報
另外,一般來說,即使是1個音色中具有多個波形數據的情況,1個波形數據斷開地配置在ram上的情況在音源lsi的讀出構造上也是不允許的,必然需要連續地配置。即,在選擇新的音色并配置在ram上時需要準備各波形數據連續配置的量的空閑空間。
但是,現有技術中,由于反復進行波形的寫入或覆寫,ram上的波形的使用區域和未使用區域的配置變得無秩序,作為由此發生的問題,有即使丟棄寫入到ram上的不需要的音色波形而在容量上確保被認為充分的空閑空間,若沒有連續性則波形也不能寫入的情況。例如即使400kb(千字節)的空閑空間有10處,也不能裝載500kb的波形。因此,產生進一步犧牲ram上的音色波形而進行所期望的音色的波形的寫入的需要。若這樣則不光存在ram的使用效率變得非常差的情況,還產生即使使ram上存在相同的音色的波形也難以預測是否寫入某種音色這樣的操作難度。在例如a、b、c這樣的音色處于ram上的情況下,想要將d這樣的音色從rom新寫入到ram的情況下,難以預測在某種情況下原樣寫入、在其他的情況需要將a覆寫、進而在其他的情況下需要將a、b覆寫等。
一般的計算機上等也同樣具有一級存儲裝置、二級存儲裝置,因此會發生相同的問題,但為了解決該問題,還有將各文件正使用的存儲區域集中到一處的所謂的碎片整理或垃圾回收這樣的處理,在像樂器這樣不始終要求實時性的計算機的世界,也有時由用戶有意識地進行上述處理。
但是,這些處理是非常需要時間的處理,因此有在電子樂器中進行了音色選擇那樣的時候不能執行的課題。另外,在不演奏時由用戶執行也給用戶帶來了多余的精神負擔,有作為樂器不是優選的這樣的課題。
技術實現要素:
因此,本發明的優點是,在二級存儲裝置上不存在波形的音色被選擇而將新的音色波形數據從一級存儲裝置寫入到二級存儲裝置時能夠可靠地寫入新的波形,從而避免在具有比想要寫入的波形的容量大得多的空閑空間的同時卻不能寫入這樣的非效率的狀態。
技術方案的一例為一種波形寫入裝置,包含處理器,上述處理器進行以下的處理:
區段組信息取得處理,按具有存儲在一級存儲裝置中的多個波形數據的音色波形數據中的上述多個波形數據的每個波形數據,分別取得與上述多個波形數據分別建立對應地存儲在上述一級存儲裝置中的多個區段組信息;
組波形數據取得處理,取得與通過上述區段組信息取得處理取得的上述區段組信息相對應的組波形數據,其中,所取得的上述組波形數據是(1)共用上述區段組信息的2個以上的波形數據、以及(2)不共用上述區段組信息的1個波形數據中的至少一方;以及
寫入處理,將通過上述組波形數據取得處理取得的上述組波形數據作為1個組,向二級存儲裝置中的多個區段中的某一區段寫入,該多個區段分別是尺寸被預先確定的存儲區域。
技術方案的另一例為一種波形寫入方法,包括:
區段組信息取得步驟,按具有存儲在一級存儲裝置中的多個波形數據的音色波形數據中的上述多個波形數據的每個波形數據,分別取得與上述多個波形數據分別建立對應地存儲在上述一級存儲裝置中的多個區段組信息;
組波形數據取得步驟,取得與通過上述區段組信息取得步驟取得的上述區段組信息相對應的組波形數據,其中,所取得的上述組波形數據是(1)共用上述區段組信息的2個以上的波形數據、以及(2)不共用上述區段組信息的1個波形數據中的至少一方;以及
寫入步驟,將通過上述組波形數據取得步驟取得的上述組波形數據作為1個組,向二級存儲裝置中的多個區段中的某一區段寫入,該多個區段分別是尺寸被預先確定的存儲區域。
技術方案的另外一例為一種電子樂器,具備:
權利要求1中記載的波形寫入裝置;
上述一級存儲裝置;
上述二級存儲裝置;以及
根據寫入到上述二級存儲裝置中的上述波形數據生成樂音的音源。
技術方案的另外又一例為一種存儲介質,是非暫時性地存儲有波形寫入裝置的計算機可執行的程序的、計算機可讀取的存儲介質,上述程序使計算機執行以下的處理:
區段組信息取得處理,按具有存儲在一級存儲裝置中的多個波形數據的音色波形數據中的上述多個波形數據的每個波形數據,分別取得與上述多個波形數據分別建立對應地存儲在上述一級存儲裝置中的多個區段組信息;
組波形數據取得處理,取得與通過上述區段組信息取得處理取得的上述區段組信息相對應的組波形數據,其中,所取得的上述組波形數據是(1)共用上述區段組信息的2個以上的波形數據、以及(2)不共用上述區段組信息的1個波形數據中的至少一方;以及
寫入處理,將通過上述組波形數據取得處理取得的上述組波形數據作為1個組,向二級存儲裝置中的多個區段中的某一區段寫入,該多個區段分別是尺寸被預先確定的存儲區域。
附圖說明
在結合以下的附圖來考慮以下的詳細的記述時,能夠得到本申請的更深刻的理解。
圖1是本發明的電子鍵盤樂器的實施方式的外觀圖。
圖2是表示電子鍵盤樂器的實施方式的硬件構成例的圖。
圖3是說明本實施方式中的波形數據區段的概念的圖。
圖4a及圖4b是表示閃存音色信息表和音色選擇優先級表的數據結構例的圖。
圖5a至圖5c是說明每個音色的波形數據的從大容量閃存向波形存儲器的轉送動作的圖。
圖6是波形分割(split)的說明圖。
圖7是表示存儲在rom中的構造體的常數數據的例子的圖。
圖8是表示存儲在ram中的變量數據的例子的圖。
圖9是表示控制處理的整體處理的例子的主程序(mainroutine)的流程圖。
圖10是表示初始化處理的詳細例的流程圖。
圖11是表示音色切換處理的詳細例的流程圖。
圖12a及圖12b是表示ram波形數據調查程序(routine)以及波形區域確保程序的詳細例的流程圖。
圖13是表示空閑區段數調查程序的詳細例的流程圖。
圖14是表示波形區域開放程序的詳細例的流程圖。
圖15是表示波形寫入指示程序的詳細例的流程圖。
圖16是表示波形寫入處理的詳細例的流程圖。
圖17是表示波形轉送程序的詳細例的流程圖。
圖18是表示按鍵處理的詳細例的流程圖。
圖19是表示分割波形檢索程序的詳細例的流程圖。
圖20是表示區段內波形檢索程序的詳細例的流程圖。
具體實施方式
以下,參照附圖詳細說明用于實施本發明的方式(以下記載為“本實施方式”)。本實施方式以如下的樂音產生裝置作為對象,該樂音產生裝置是,適用于例如電子鍵盤樂器的、為了再現音色根據音高(鍵區域)或音量(力度(velocity):敲鍵的速度)等演奏信息變化的情況而將每個音高或每個音量的波形數據(以下將其稱為“分割波形”)從大容量的一級存儲裝置(例如閃存)向二級存儲裝置(例如基于ram的波形存儲器)寫入的樂音產生裝置。本實施方式實現了在這樣的樂音產生裝置中在二級存儲裝置上不存在波形的音色被選擇而將新的音色波形數據從一級存儲裝置向二級存儲裝置寫入時、能夠可靠地寫入新的波形并且能夠避免在具有比想要寫入的波形的容量大得多的空閑空間的同時卻不能寫入這樣的非效率的狀態的電子樂器。
圖1是本發明的電子鍵盤樂器的實施方式的外觀圖。本實施方式作為電子鍵盤樂器100被實施。電子鍵盤樂器100具備:作為演奏操作鍵的由多個鍵構成的鍵盤101、由作為音色選擇操作鍵的用于進行音色選擇的音色選擇按鈕102以及進行音色以外的各種功能選擇的功能選擇按鈕103構成的開關面板、附加彎音或震音(tremolo)、顫音(vibrato)等各種轉調(modulation,演奏效果)的彎音/轉調輪104、顯示音色或音色以外的各種設定信息的lcd(liquidcrystaldisplay:液晶顯示器)105等。并且,雖沒有特別圖示,但電子鍵盤樂器100在里面部、側面部或背面部等具備對通過演奏生成的樂音進行放音的揚聲器。
音色選擇按鈕102如圖1所示是用于選擇鋼琴(圖中“piano”)、電子鋼琴(圖中“e.piano”)、風琴(圖中“organ”)、吉他(圖中“guitar)等各種音色的類別的按鈕群。用戶通過按下該音色選擇按鈕102能夠選擇例如16音色中的任意音色。
圖2是表示圖1的電子鍵盤樂器100的實施方式的硬件構成例的圖。圖2中,電子鍵盤樂器100具備cpu(中央運算處理裝置)201、rom(只讀存儲器)202、ram(隨機存取存儲器)203、大容量閃存(flash)存儲器204、連接波形存儲器206的音源lsi(大規模集成電路)205、連接圖1的鍵盤101和由圖1的音色選擇按鈕102以及功能選擇按鈕103構成的開關面板的鍵掃描器207、連接圖1的彎音/轉調輪104的a/d變換器210、連接圖1的lcd105的lcd控制器209、以及受理midi(musicalinstrumentdigitalinterface)輸入的midii/f(接口)213分別被連接到系統總線214的構成。并且,從音源lsi205輸出的數字樂音波形數據通過d/a變換器208被變換為模擬樂音波形信號,通過放大器211放大后,從沒有特別圖示的揚聲器或輸出端子輸出。
cpu201通過邊將ram203作為工作存儲器使用邊執行存儲在rom202中的控制程序,來執行圖1的電子鍵盤樂器100的控制動作。并且,rom202存儲上述控制程序以及各種固定數據。
大容量閃存存儲器204(一級存儲裝置)是構成多個音色的波形數據等大容量數據的保存區域,通過連續的存取而被依次存取。另一方面,音源lsi205上連接由展開波形數據的ram構成的波形存儲器206(二級存儲裝置),所發音的樂音的波形數據必然需要配置在該波形存儲器206上。cpu201將與通過用戶操作圖1的音色選擇按鈕102而指定的音色相對應的1組以上的波形數據從大容量閃存存儲器204連續地讀出,并經由音源lsi205將其轉送到波形存儲器206,從而能夠更換音色數據。
lcd控制器209是控制lcd105的ic(集成電路)。鍵掃描器207是掃描鍵盤101、音色選擇按鈕102或功能選擇按鈕103等開關面板的狀態并通知cpu201的ic。a/d變換器208是檢測彎音/轉調輪104的操作位置的集成電路。
首先說明具有以上的構成的電子鍵盤樂器100的實施例中的動作樣式的概要。
首先,說明用戶界面。在本實施方式的電子鍵盤樂器100中,通過用戶按下圖1的音色選擇按鈕102,能夠選擇例如16音色中的任意音色來演奏。
接著,說明波形數據的寫入轉送動作。圖3是說明本實施方式中的波形數據區段的概念的圖。在波形存儲器(ram)上不被進行區段管理的以往的電子鍵盤樂器中,如作為數據配置301而示出的那樣,若反復進行波形數據的寫入,則使用區域和空閑區域變成無秩序的配置,即使合計具有充足的空閑區域,也可能發生只是因為沒有連續性而不能確保寫入空間的情況。
對此,本實施方式中具有作為302而示出的數據配置。在該數據配置中,在波形存儲器206的存儲區域中以一定的間隔設置不能跨越的邊界線。本實施方式中,將該相鄰的邊界線與邊界線之間的區域稱為區段。該1區段的數據尺寸全部相同,且被設定為不低于構成各音色的1個以上的波形數據中尺寸最大的波形數據。本實施方式中,以該區段為單位而執行從大容量閃存存儲器204向波形存儲器206的波形數據的寫入。本實施方式中,1個音色具有1個或多個波形數據。在1個音色的1個以上的波形數據的寫入中,以1個或多個區段為單位,確保波形存儲器206的存儲區域(區段確保處理),執行寫入。在該情況下,所確保的多個區段不需要連續配置。并且,1個區段中能夠寫入多個相同音色的波形數據,但以不同的音色的波形數據不混合寫入的方式執行控制。
大容量閃存存儲器204上記錄有例如全16音色的波形數據組,通過將其中構成用戶指定的音色的1個以上的波形數據向音源lsi205的波形存儲器206寫入,從而能夠發音。該音色信息通過存儲在圖2的rom202中的閃存音色信息表來管理。圖4a是表示閃存音色信息表的數據結構例的圖。在作為圖4a的表例示的閃存音色信息表的作為第2行以后的各行而表示的各音色的記錄(entries)中,存儲有如圖4a的表的第1行所示、表示音色編號的“編號”項目值、“音色名”項目值、表示從大容量閃存存儲器204的波形存儲區域的開頭起的存儲地址的偏移(16進制數)的“波形地址偏移”項目值、表示該音色中包含的波形數據組的合計的波形尺寸(16進制數)的“波形尺寸”項目值、和這些波形數據組使用的“使用區段數”項目值。
上述16音色分別為,每1音色最大由例如64種波形數據構成,并被連續地保存在大容量閃存存儲器204中。音色內的各波形數據中的、被向波形存儲器206內的1個區段內轉送的1個以上的波形數據被分組為1個組。被向波形存儲器206內的1個區段內轉送的波形數據在大容量閃存存儲器204上也必然連續。1個音色的各波形數據的信息,通過存儲在圖2的rom202中的音色波形信息表來管理。圖4b是表示對每1音色最大64種波形數據進行管理的音色波形信息表的數據結構例的圖。在作為圖4b的表例示的音色波形信息表的作為第2行以后的各行表示的各波形數據的記錄中,存儲有如圖4b的表的第1行所示那樣、從0到63的“波形編號”項目值。并且該記錄存儲有“最低力度”項目值、“最高力度”項目值、“最低琴鍵(key)編號”項目值、以及“最高琴鍵編號”項目值,作為用于判斷根據演奏時所演奏的琴鍵或力度(強度)將哪個波形讀出并使其發音的信息(分割區塊參數)。并且在該記錄中存儲有表示該波形數據從轉送目的地的波形存儲器206的區段的哪個地址被存儲的“區段開頭起的地址”項目值、和表示該波形數據的尺寸的“波形尺寸”項目值。另外,對值的右端賦予的記號“h”表示該值是16進制數。進而在該記錄中存儲有表示包含該波形數據的組的“區段組”項目值。
本實施方式中,在構成由用戶指定的音色的波形數據組沒有被存儲在波形存儲器206上的情況下,執行接下來的控制處理。首先,以區段為單位,在波形存儲器206上搜索并確保(區段確保處理)從大容量閃存存儲器204新寫入到波形存儲器206的構成音色的1個以上的波形數據組所需的數量的區段的空閑區域。所需的區段數通過參照存儲在rom202中的圖4a所例示的閃存音色信息表中的、與所指定的音色對應的記錄的“使用區段數”項目值來決定。在波形存儲器206上沒有所需的數量的空閑區段的情況下,依次開放并確保與按從早到晚的順序使用的音色相對應的區段,直到確保了所需的區段數為止。
接著,存儲在大容量閃存存儲器204中的與被指定的音色相對應的波形數據組被依次轉送到波形存儲器206上所確保的空閑區段。此時,與指定的音色相對應的rom202中存儲的圖4b所例示的音色波形信息表中,“區段組”項目值按(從0開始)從小到大的順序且具有相同值的波形數據組被轉送到波形存儲器206上的(編號從小到大順序的)1個空閑區段。圖5a~圖5c是說明每個音色的波形數據的從大容量閃存存儲器204向波形存儲器206的轉送動作的圖。在例如圖5a所示的構成guitar音色的大容量閃存存儲器204上的第0個到第10個波形數據組被轉送到圖5b的波形存儲器206的情況下,“區段組”項目值=0的第0個到第2個的連續的3組波形數據組被轉送到圖5b的波形存儲器206上的空閑區段=seg0,“區段組”項目值=1的第3個到第5個的連續的3組波形數據組被轉送到波形存儲器206上的空閑區段=seg4,“區段組”項目值=2的第6個到第8個的連續的3組波形數據組被轉送到波形存儲器206上的空閑區段=seg6,“區段組”項目值=3的第9個和第10個的連續的2組波形數據組被轉送到波形存儲器206上的空閑區段=seg63。另一方面例如,在例如圖5c所示的構成saxophone音色的大容量閃存存儲器204上的第0個到第8個波形數據組被轉送到圖5b的波形存儲器206的情況下,“區段組”項目值=0的第0個到第2個的連續的3組波形數據組被轉送到圖5b的波形存儲器206上的空閑區段=seg2,“區段組”項目值=1的第3個到第5個的連續的3組波形數據組被轉送到波形存儲器206上的空閑區段=seg3,“區段組”項目值=2的第6個和第7個的連續的2組波形數據組被轉送到波形存儲器206上的空閑區段=seg5,“區段組”項目值=3的第8個的1組波形數據組被轉送到波形存儲器206上的空閑區段=seg7。與轉送目的地的區段建立對應地、在例如ram203(圖2)中存儲與被轉送到該區段的波形數據對應的“區段組”項目值。
各區段具有如上所述那樣與尺寸最大的波形數據相匹配的例如100000h(“h”表示16進制數)字節=1mb(兆字節)的尺寸。從而,能夠使1個波形數據必然被轉送到1個區段內的存儲區域。合計為例如1mb以下的具有相同的“區段組”項目值的連續的多個波形數據也能夠轉送到1個區段。由此,依賴于偶然性而不能寫入尺寸遠遠小于空閑容量的波形數據的情況不會發生。
在構成由用戶指定的音色的波形數據組被存儲在波形存儲器206上的情況下,這些波形數據組不需要從大容量閃存存儲器204再次寫入,因此能夠原樣用于發音處理。此時,雖然不發生寫入,但履歷上作為最新的音色被記錄。
圖6是發生了按鍵的情況下的發音處理時的波形分割的說明圖。本實施方式中,如圖6所例示的那樣,演奏時的琴鍵編號和力度(演奏強度)最大以2維方式被分割到64區域中,各個被分割的區域(分割空間)中,分別被分配如上所述那樣轉送到波形存儲器206的、每1個音色有1組以上且最大64組的波形數據。圖2中,cpu201在經由鍵掃描器207檢測出鍵盤101中的按鍵的發生時,在與當前演奏中的音色相對應的rom202(圖2)內的圖4b所例示的音色波形信息表的記錄中,搜索按鍵發生時的琴鍵編號值包含在“最低琴鍵編號”項目值到“最高琴鍵編號”項目值的范圍中、且按鍵發生時的力度包含在“最低力度”項目值到“最高力度”項目值的范圍中的記錄。此外,從與搜索出的該記錄的“區段組”項目值相同的區段組的值建立了對應的波形存儲器206上的區段內的、與該記錄的“從區段開頭開始的地址”項目值對應的地址起的、與該記錄的“波形尺寸”項目值對應的波形尺寸大小的波形數據,以與按鍵發生時的琴鍵編號相對應的速度被讀出后以與按鍵發生時的力度相對應的強度發音。
在構成由用戶指定的音色的波形數據組沒有被存儲在波形存儲器206上的情況下,cpu201將這些波形數據組從大容量閃存存儲器204轉送到波形存儲器206,但該波形轉送作為后臺處理按每1組的波形數據而分割地執行。從而,按鍵發生時cpu201判別分割空間并向音源lsi205指示將與該空間對應的波形數據從波形存儲器206讀出時,是相應的波形數據從大容量閃存存儲器204向波形存儲器206的轉送的過程中的情況下,由于波形數據還沒有被聚齊到波形存儲器206上,因此音源lsi205不進行發音。
rom202(圖2)中存儲的圖4a的例子的閃存音色信息表以及圖4b的例子的音色波形信息表,作為構造體的常數數據能夠從cpu201(圖2)執行的控制程序上存取。圖7是表示存儲在rom202中的構造體的常數數據的例子的圖。
首先,圖4a中例示的閃存音色信息表通過圖7所示的構造體tone_inf[16]([]內的數字表示索引)、構成該構造體的作為成員常數的排列常數name[16]([]內的數字表示索引)、常數wave_total_size、以及常數num_seg構成。構造體tone_inf[16]例如作為tone_inf[t]通過ram203(圖2)上的變量t來存取。變量t例如取0到15的值域,從而指定圖4a的閃存音色信息表中的“編號”項目值為0到15的各音色的記錄。成員常數name[16]保存與圖4a的例子的“音色名”項目值相對應的直到16字符的音色顯示名。例如通過ram203上的變量i,以tone_inf[t].name[i]的格式對該成員常數存取。變量i取例如0到15的值域,從而表示與變量t的值相對應的音色的音色顯示名(第0~15個字符)。成員常數wave_total_size保存與圖4a的“波形尺寸”項目值相對應的音色內的波形數據的合計尺寸。例如以tone_inf[t].wave_total_size的格式對該成員常數存取。這表示與變量t的值相對應的音色的波形數據的合計尺寸。成員常數num_seg保存與圖4a的“使用區段數”項目值相對應的音色內的波形數據使用的區段數。例如以tone_inf[t].num_seg的格式對該成員常數存取。這表示與變量t的值相對應的音色的使用區段數。
接著,圖4b中例示的音色波形信息表通過圖7所示的上位構造體tone_inf[16]([]內的數字表示索引)、構成該構造體的成員構造體即中位構造體wave[64]([]內的數字表示索引)、構成該中位構造體的成員常數即常數vel_lo、vel_hi、key_lo、key_hi、flash_adrs、seg_adrs、size、seg_group、以及下位構造體tg_inf構成。關于上位構造體tone_inf[16]如以上所述的那樣。中位構造體wave[64]例如作為wave[w],通過ram203(圖2)上的變量w來存取。變量w取例如0到63的值域,從而指定圖4b的音色波形信息表中的“波形編號”項目值為0到63的各波形數據的記錄。成員常數vel_lo以及vel_hi分別對應于圖4b的“最低力度”項目值以及“最高力度”項目值,保存波形數據發音的范圍的本來的最低力度以及最高力度的各值。例如以tone_inf[t].wave[w].vel_lo或tone_inf[t].wave[w].vel_hi這樣的格式對這些成員常數存取。這表示與變量t的值相對應的音色的、與變量w的值相對應的波形數據的、最低力度或最高力度。成員常數key_lo以及key_hi分別對應于圖4b的“最低琴鍵編號”項目值以及“最高琴鍵編號”項目值,保存波形數據發音的范圍的本來的最低琴鍵編號以及最高琴鍵編號的各值。例如以tone_inf[t].wave[w].key_lo或tone_inf[t].wave[w].key_hi這樣的形式對這些成員常數存取。這表示與變量t的值對應的音色的、與變量w的值對應的波形數據的、最低琴鍵編號或最高琴鍵編號。成員常數flash_adrs在圖4b中沒有被明示,但保存波形數據的開頭在大容量閃存存儲器204上的地址。例如以tone_inf[t].wave[w].flash_adrs這樣的格式對該成員常數存取。這表示與變量t的值相對應的音色的、與變量w的值相對應的波形數據的、開頭在大容量閃存存儲器204上的地址。成員常數seg_adrs對應于圖4b的“區段開頭開始的地址”項目值,保存波形數據應當寫入到波形存儲器206上的區段的開頭起的地址偏移。例如以tone_inf[t].wave[w].seg_adrs這樣的格式對該成員常數存取。這表示與變量t的值相對應的音色的、與變量w的值相對應的波形數據的、應當寫入到波形存儲器206上的區段的開頭起的地址偏移。成員常數size對應于圖4b的“波形尺寸”項目值,保存波形數據的尺寸。例如以tone_inf[t].wave[w].size這樣的格式對該成員常數存取。這表示與變量t的值相對應的音色的、與變量w的值相對應的波形數據的尺寸。tone_inf[t].wave[w].size=0時,表示波形數據不存在。成員常數seg_group對應于圖4b的“區段組”項目值,保存當波形數據被向波形存儲器206上的1個區段轉送時對該區段賦予的區段組的值。例如以tone_inf[t].wave[w].seg_group這樣的格式向該成員常數存取。這表示與變量t的值相對應的音色的、與變量w的值相對應的波形數據的區段組值。tone_inf[t].wave[w].seg_group的值相同的波形數據被轉送到波形存儲器206上的相同的區段。成員構造體tg_inf將音源lsi205(圖2)對被轉送到波形存儲器206上的1個區段的波形數據執行發音處理的情況下的各種參數,作為該構造體的成員常數(圖4a及圖4b中省略)來存儲。這些參數例如是波形數據的讀出的開始地址、表示反復位置的循環地址、表示結束位置的結束地址、音量、調諧信息等。
圖8是表示在cpu201(圖2)執行的控制處理中使用的ram203所存儲的主要的變量的一覽的圖。變量timestamp保存按用戶操作音色選擇按鈕102(圖1)而發生的每個音色選擇事件各增加1的履歷編號。在區段被分配時,保存在后述的構造體成員變量seg_inf[s].timestamp中。變量cur_tone保存為了當前演奏而選擇的音色編號。該值為“-1”的情況表示無相符、即沒有進行當前演奏。變量transder_wave在當前后臺處理中保存波形轉送中的波形數據的波形編號。該值為“-1”的情況表示全部完成轉送。
接著,通過構造體seg_inf[64]([]內的數字表示索引)和構成該構造體的成員變量tone、seg_group、以及timestamp保存波形存儲器206中的每個區段的信息。構造體seg_inf[64]例如作為seg_inf[s],通過ram203(圖2)上的變量s來存取。變量s取例如0到63的值域,由此指定波形存儲器206上的0到63的64區段的每一個區段。成員變量tone保存該區段被分配的音色編號。該值為“-1”的情況表示該區段為空狀態(未使用)。例如以seg_inf[s].tone這樣的格式對該成員變量存取。這表示被分配到與變量s的值相對應的區段的音色編號。對執行向該區段的波形轉送時的音色編號進行保存的ram203上的變量t值被復制到成員變量tone。成員變量seg_group保存被分配到該區段的音色的區段組值。例如以seg_inf[s].seg_group這樣的形式對該成員變量存取。這表示被分配到與變量s的值相對應的區段的音色的區段組的值。與轉送到該區段的波形數據相對應的、rom202中存儲的圖4b的音色波形信息表中的“區段組”項目值即圖7的tone_inf[t].wave[w].seg_group的值被復制到成員變量seg_group中。是區段組信息取得處理。成員變量timestamp保存使用該區段的履歷編號。例如以seg_inf[s].timestamp這樣的格式對該成員變量存取。這表示使用與變量s的值相對應的區段的履歷編號。按通過用戶操作音色選擇按鈕102(圖1)而發生的每個音色選擇事件,復制在該定時每次增加1的變量timestamp的值。以相同的定時被分配的區段具有相同的timestamp值。
接著,與在波形存儲器206中的各區段內保存的1組以上的波形數據有關的信息,通過上位構造體seg_inf[64]([]內的數字表示索引)、構成該構造體的成員構造體即中位構造體wave_inf[64]([]內的數字表示索引)、構成該中位構造體的成員變量wave、wave_num、seg_adrs以及size來保存。關于上位構造體seg_inf[64],如上所述那樣。中位構造體wave_inf[64]例如作為wave_inf[i],通過ram203(圖2)上的變量i來存取。變量i取例如0到63的值域,從而指定1個區段內的0到63的各波形數據。成員變量wave保存該區段中的該波形數據的有無,該值為0時表示沒有波形數據,該值為1時表示有波形數據(完成轉送)。例如以seg_inf[s].wave_inf[i].wave這樣的格式對該成員變量存取。這表示與變量s的值相對應的區段的、與變量i的值相對應的波形數據的有無。成員變量wave的值,在被指示了向該區段轉送該波形數據時被設為值0,在通過之后的后臺轉送完成向該區段的該波形數據的轉送時被設為值1。成員變量wave_num保存該區段中的該波形數據的音色中的波形編號,若該值為“-1”,則表示沒有波形數據的分配。例如以seg_inf[s].wave_inf[i].wave_num這樣的格式對該成員變量存取。這表示與變量s的值相對應的區段的、與變量i的值相對應的波形數據的音色中的波形編號。成員變量seg_adrs保存該區段中的該波形數據的地址偏移。例如以seg_inf[s].wave_inf[i].seg_adrs這樣的格式向該成員變量存取。與被轉送到該區段的波形數據相對應的、rom202中存儲的圖4b的音色波形信息表中的“區段開頭起的地址”項目值即圖7的tone_inf[t].wave[w].seg_adrs的值被復制到成員變量seg_adrs中。成員變量size保存該區段中的該波形數據的尺寸。例如以seg_inf[s].wave_inf[i].size這樣的形式對該成員變量存取。與被轉送到該區段的波形數據相對應、rom202中存儲的圖4b的音色波形信息表中的“波形尺寸”項目值即圖7的tone_inf[t].wave[w].size的值被復制成員變量size中。
以下,說明為了實現上述的動作而由cpu201執行的控制處理的詳細例。
圖9是表示cpu201執行的控制處理的整體處理的例子的主程序的流程圖。該處理例是cpu201執行存儲在rom202中的控制程序的處理例。
cpu201在首先將ram203的內容初始化后(步驟s901),進入到步驟s902到s911的一系列的處理所示的固定循環處理。
固定循環處理中,cpu201首先執行用戶界面處理(圖中表示為“用戶i/f”)(步驟s902)。這里,cpu201經由圖2的鍵掃描器207取得圖1的音色選擇按鈕102的狀態。
接著,cpu201根據步驟s902的處理的結果,判斷是否因用戶操作音色選擇按鈕102而發生了音色選擇事件(指定處理,步驟s903)。
然后,cpu201在發生了音色選擇事件的情況下(步驟s903的判斷為“是”的情況下)執行音色切換處理(步驟s904)。若步驟s903的判斷為“否”,則cpu201跳過步驟s904的處理。
接著,cpu201執行波形轉送處理(步驟s905)。這里,cpu201執行圖2的從大容量閃存存儲器204向波形存儲器206的基于后臺處理的波形轉送。
接著,cpu201執行鍵盤讀入處理(步驟s906)。這里,cpu201經由圖2的鍵掃描器207取得圖1的鍵盤101的按鍵狀態。
接著,cpu201根據步驟s906的處理的結果,判斷是否因用戶對鍵盤101上的任意的鍵進行按鍵而發生了按鍵事件(步驟s907)。
然后,cpu201在發生了按鍵事件的情況下(步驟s907的判斷為“是”的情況下)執行按鍵處理(步驟s908)。若步驟s907的判斷為“否”,則cpu201跳過步驟s908的處理。
接著,cpu201根據步驟s906的處理的結果,判斷是否因用戶對鍵盤101上的任意的按鍵中的鍵進行了離鍵操作而發生了離鍵事件(步驟s909)。
然后,cpu201在發生了離鍵事件的情況下(步驟s909的判斷為“是”的情況下)執行離鍵處理(步驟s910)。若步驟s909的判斷為“否”,則cpu201跳過步驟s910的處理。
之后,cpu201執行音源固定服務處理(步驟s911)。這里,執行與按壓了例如圖1的功能選擇按鈕103的情況相對應的處理、與操作了圖1的彎音/轉調輪104的情況相對應的處理等的、對于電子鍵盤樂器100的一般的處理。
之后,cpu201返回到步驟s90即固定循環處理的開頭。
圖10是表示圖9的步驟s901的初始化處理的詳細例的流程圖。
首先,cpu201使ram203上的圖8所示的變量的值全部為“0”(步驟s1001)。
接著,cpu201在用于保存為了當前演奏而選擇的音色編號的ram203上的變量cur_tone(參照圖8)中,保存表示無相符的值“-1”(步驟s1002)。
接著,cpu201在用于保存在當前后臺處理中正在波形轉送中的波形數據的波形編號的ram203上的變量transfer_wave中,保存表示全部轉送完成的值“-1”(步驟s1003)。
接著,cpu201對于用于計數區段的ram203上的變量s,在步驟s1004中初始設定為值“0”后,邊在步驟s1011中每次增加1,邊反復執行步驟s1005到步驟s1009的處理,直到在步驟s1010中判斷為達到值“63”為止。
在該反復處理中,cpu201首先在表示被分配到與變量s的值相對應的區段中的音色編號的變量seg_inf[s].tone中,保存表示該區段為空狀態(未使用)的值“-1”(步驟s1005)。
接著,cpu201關于用于計數區段內的波形數據的次序的ram203上的變量i,在步驟s1006中初始設定為值“0”后,邊在步驟s1009中每次增加1,邊反復執行步驟s1007的處理直到在步驟s1008中判斷為達到值“63”為止。即,cpu201在該步驟s1007中,在保存與變量s的值相對應的區段內的第i個(變量i表示的值)波形數據的音色中的波形編號的變量seg_inf[s].wave_inf[i].wave_num中,保存表示沒有波形數據的分配的值“-1”。
在以上的反復處理之后,若步驟s1010的判斷為“是”,則cpu201結束圖10的流程圖所示的圖9的步驟s901的初始化處理。
圖11是表示圖9的音色選擇事件發生時(步驟s903的判斷為“是”時)的步驟s904的音色切換處理的詳細例的流程圖。在該處理的執行時,ram203上的音色編號變量t的值被交付。音色編號變量t中,在圖10的步驟s1001的執行時如上述那樣保存初始值“0”,在圖9的步驟s904的執行時,保存基于用戶對圖1的音色選擇按鈕102的操作而在圖9的步驟s902的用戶界面處理中獲取的由用戶選擇的音色的音色編號。
在圖11的音色切換處理的流程圖中,cpu201首先判斷用于保存為了當前演奏而選擇的音色編號的變量cur_tone的值是否與保存在ram203的變量t中的、由用戶新指定的音色編號的值相等(步驟s1101)。
若步驟s1101的判斷為“是”,則由于已作為選擇音色選擇完成或當前正在從大容量閃存存儲器204向波形存儲器206轉送相符的音色的波形數據,因此將圖11的流程圖所示的圖9的步驟s904的音色切換處理原樣結束。
若步驟s1101的判斷為“否”,則cpu201將保存履歷編號的變量timestamp的值增加1(步驟s1102)。
接著,cpu201在保存為了當前演奏而選擇的音色編號的變量cur_tone中,保存在ram203的變量t中保存的由用戶新指定的音色編號的值(步驟s1103)。
接著,cpu201執行ram波形數據調查程序的處理(判別處理,步驟s1104)。cpu201將在ram203上的變量t中保存的新指定的音色編號作為自變量而交付到該程序。cpu201根據該程序的處理的結果,在ram203上的變量r中得到表示與所指定的音色編號相對應的音色的波形數據是否存在于波形存儲器206上的返回值(如果值是0為不存在,如果值是1為存在)(步驟s1104)。關于該處理的詳細情況,在后面敘述。
cpu201判斷變量r的值是否為1(步驟s1105)。
若步驟s1105的判斷為“是”,則不需要將與所指定的音色編號相對應的音色的波形數據新轉送到波形存儲器206,cpu201將圖11的流程圖所示的圖9的步驟s904的音色切換處理原樣結束。
若步驟s1105的判斷為“否”,則cpu201執行波形區域確保程序的處理(步驟s1106)。cpu201將在ram203上的變量t中保存的新指定的音色編號作為自變量而交付到該程序。cpu201根據該程序的處理的結果,在波形存儲器206上確保從大容量閃存存儲器204轉送與所指定的音色編號相對應的音色的波形數據所需的數量的空閑區段。關于該處理的詳細情況,在后面敘述。
之后,cpu201執行波形轉送指示程序的處理(步驟s1107)。cpu201將在ram203上的變量t中保存的新指定的音色編號作為自變量而交付到該程序。cpu201在該程序的處理中,執行用于將與所指定的音色編號相對應的音色的波形數據通過圖9的步驟s905的波形轉送處理從大容量閃存存儲器204向波形存儲器206轉送的準備處理。
圖12a是表示圖11的步驟s1104的ram波形數據調查程序的詳細例的流程圖。
首先,cpu201將用于對調查的區段進行計數的ram203上的變量s復位為0(步驟s1201)。
接著,cpu201判斷保存有被分配到與變量s的值相對應的區段的音色編號的ram203上的變量seg_inf[s].tone(參照圖8)的值、與保存有作為自變量而被交付的新指定的音色編號的值的ram203上的變量t的值是否相等(步驟s1202)。
若步驟s1202的判斷為“否”,則cpu201邊在步驟s1203中將變量s的值每次增加1,邊對由變量s指定的各區段反復執行步驟s1202的判斷處理,直到在步驟s1204中判斷為變量s的值達到64為止(步驟s1203→s1204的判斷為“否”→s1202→s1203的處理的反復)。
在從上述步驟s1202到s1204的處理的反復中,若步驟s1202的判斷為“是”,則cpu201首先在表示使用了與變量s的值相對應的區段的履歷編號的變量seg_inf[s].timestamp中,保存基于本次的音色選擇事件而增加的ram203上的變量timestamp的值(參照圖11的步驟s1102),更新該區段的履歷編號(步驟s1205)。
接著,由于判斷出在與變量s相對應的區段中保存有與所指定的音色編號對應的音色的波形數據,因此cpu201在ram203上的變量r中保存表示在波形存儲器206上有與所指定的音色編號相對應的音色的波形數據的返回值1(步驟s1206)。之后,cpu201結束圖12a的流程圖所示的圖11的步驟s1104的ram波形數據調查程序的處理。
在從步驟s1202到s1204的處理的反復中,若變量s對區段的指定到達末尾而步驟s1204的判斷成為“是”,則判斷出與所指定的音色編號相對應的音色的波形數據沒有保存在任何區段,因此cpu201在ram203上的變量r中保存表示在波形存儲器206上沒有與所指定的音色編號相對應的音色的波形數據的返回值0(步驟s1207)。之后,cpu201結束圖12a的流程圖所示的圖11的步驟s1104的ram波形數據調查程序的處理。
圖12b是表示圖11的步驟s1106的波形區域確保程序的詳細例的流程圖。該程序如上述所述那樣、在判斷出在波形存儲器206上的任何區段中都沒有與通過圖11的步驟s1104的ram波形數據調查程序指所定的音色編號的音色的波形數據的情況下被執行。
cpu201首先將rom202上的常數值tone_inf[t].num_seg(參照圖7)保存在ram203上的變量u中,rom202上的常數值tone_inf[t].num_seg中保存與ram203上的變量t的值相對應的音色的使用區段數,ram203中保存有作為自變量被交付的、所指定的音色編號(步驟s1210)。
接著cpu201執行空閑區段數調查程序。通過該程序取得波形存儲器206上沒有被使用的空閑區段的數量。cpu201根據該程序的處理的結果,在ram203上的變量r中得到空閑區段數的值(步驟s1211)。關于該處理的詳細情況在后面敘述。
cpu201判斷變量r中得到的空閑區段數是否為步驟s1210中在變量u中保存的與所指定的音色編號相對應的音色的使用區段數以上(步驟s1212)。
若步驟s1212的判斷為“否”,則cpu201執行波形區域開放程序(步驟s1213)。在該程序中,將波形存儲器206上具有最早的履歷編號的音色的區段開放。關于該處理的詳細情況在后面敘述。
之后,cpu201返回步驟s1211,再次執行空閑區段數調查程序,判斷變量r中得到的空閑區段數是否為步驟s1210中在變量u中保存的使用區段數以上(步驟s1212)。
根據以上的步驟s1211到步驟s1213的反復處理的結果,若變量r中得到的空閑區段數為與所指定的音色編號相對應的音色的使用區段數以上、從而步驟s1212的判斷成為“是”,則由于能夠確保需要的空閑區段,因此cpu201結束圖12b的流程圖所示的圖11的步驟s1106的波形區域確保程序。
圖13是表示圖12b的步驟s1211的空閑區段數調查程序的詳細例的流程圖。如上述所述,在該程序中,取得波形存儲器206上的空閑區段的數量。
cpu201首先將用于計數區段的ram203上的變量s復位為0,并且將保存返回值即空閑區段數的ram203上的變量r的值復位為0(步驟s1301)。
接著,cpu201邊在步驟s1304中將變量s的值每次增加1,邊按通過變量s的值指定的每個區段反復執行步驟s1302和s1303的處理,直到在步驟s1305中判斷為變量s的值達到64為止。
在上述的反復處理中,cpu201首先判斷保存有被分配到與變量s的值相對應的區段的音色編號的變量seg_inf[s].tone的值是否等于表示該區段為空狀態(未使用)的值“-1”(步驟s1302)。
若根據該區段為空狀態而步驟s1302的判斷成為“是”,則cpu201將保存返回值即空閑區段數的ram203上的變量r的值增加1(步驟s1303)。
若步驟s1302的判斷為“否”,則cpu201跳過步驟s1303的處理。
在以上的反復處理后,若步驟s1305的判斷成為“是”,則cpu201結束圖13的流程圖所示的圖11的步驟s1211的空閑區段數調查程序的處理。其結果,在ram203上的變量r中得到波形存儲器206上的空閑區段的數量。
圖14是表示圖12b的步驟s1213的波形區域開放程序的詳細例的流程圖。如上所述,在該程序中,波形存儲器206上具有最早的履歷編號的音色的區段被開放。
cpu201首先將用于計數區段的ram203上的變量s復位為0,并且在保存比較用的履歷編號的ram203上的變量t中設置足夠大的值例如ffffffffh(末尾的“h”表示其左側是16進制數)(步驟s1401)。
接著,cpu201邊在步驟s1405中將變量s的值每次增加1,邊按通過變量s的值指定的每個區段來反復執行步驟s1402到s1404的一系列的處理,直到在步驟s1406中判斷為變量s的值達到64為止。
在上述的反復處理中,cpu201首先判斷保存有被分配到與變量s的值相對應的區段中的音色編號的變量seg_inf[s].tone的值是否等于表示該區段為空狀態(未使用)的值“-1”(步驟s1402)。
若步驟s1402的判斷為“是”,則cpu201向步驟s1405轉移,轉移到下一個區段的反復處理。
若步驟s1402的判斷為“否”,則cpu201判斷表示使用了與變量s的值相對應的區段的履歷編號的變量seg_inf[s].timestamp的值是否小于保存比較用的履歷編號的ram203上的變量t的值(步驟s1403)。
若步驟s1403的判斷為“是”,則cpu201在保存比較用的履歷編號的ram203上的變量t中保存表示使用了與變量s的值相對應的區段的履歷編號的變量seg_inf[s].timestamp的值(步驟s1404)。其結果,在當前時刻根據音色指定而使用了與變量s的值相對應的區段的履歷編號作為最早的履歷編號被保存在變量t中。
若步驟s1403的判斷為“否”,則cpu201跳過步驟s1404的處理,維持當前的變量t的值。
以上的反復處理的結果,若與全部的區段的履歷編號的比較完成而步驟s1406的判斷成為“是”,則在變量t中得到最小即最早的履歷編號。
接著,cpu201在步驟s1407中將用于計數區段的變量s的值復位為0后,邊在步驟s1410中將變量s的值每次增加1,邊按由變量s的值指定的每個區段,執行將具有變量t中得到的最早的履歷編號的區段開放的處理作為步驟s1408和s1409的反復處理,直到在步驟s1411中判斷為變量s的值達到64為止。
在上述的反復處理中,cpu201首先判斷表示使用了與變量s的值相對應的區段的履歷編號的變量seg_inf[s].timestamp的值是否等于變量t中保存的最早的履歷編號的值(步驟s1408)。
若步驟s1408的判斷為“是”,則cpu201在保存有被分配到與變量s的值相對應的區段中的音色編號的變量seg_inf[s].tone中,保存表示該區段為空狀態(未使用)的值“-1”(步驟s1409)。由此,該區段被開放。
若步驟s1408的判斷為“否”,則cpu201跳過步驟s1409的處理,與變量s的值相對應的區段不開放。
以上的反復理的結果,若步驟s1411的判斷為“是”,則cpu201結束圖14的流程圖所示的圖12b的步驟s1213的波形區域開放程序。其結果,具有最早的履歷編號的1個以上的區段被開放。
圖15是表示圖11的步驟s1107的波形轉送指示程序的詳細例的流程圖。如上所述,在該程序中,執行用于將與所指定的音色編號相對應的音色的波形數據通過圖9的步驟s905的波形轉送處理從大容量閃存存儲器204向波形存儲器206轉送的準備處理。該準備處理是如下處理,即:對構成與從大容量閃存存儲器204轉送了波形數據的波形存儲器206上的空閑區段相對應的ram203上的seg_inf構造體的各成員變量(參照圖8)設置需要的信息,并且將控制轉送的ram203上的變量transfer_wave所表示的波形編號設置為初始值0。
cpu201首先將用于計數所轉送的波形數據的區段組的ram203上的變量g的值、用于計數所轉送的波形數據的在新指定的音色中的波形編號的ram203的變量w的值、和用于計數波形存儲器206上的區段的ram203上的變量s的值分別復位為0(步驟s1501)。
接著,cpu201邊在步驟s1511中將變量s的值每次增加1,邊按通過變量s的值指定的每個區段來反復執行步驟s1502到s1510的一系列的處理,直到在步驟s1512中判斷為變量s的值達到64為止。
在上述的反復處理中,cpu201首先判斷保存有被分配到與變量s的值相對應的區段中的音色編號的變量seg_inf[s].tone的值是否等于表示該區段為空狀態(未使用)的值“-1”(步驟s1502)。
若步驟s1502的判斷為“否”,則該區段不是空閑區段,因此cpu201向步驟s1511轉移,向下一個區段的反復處理轉移。
若步驟s1502的判斷為“是”,則cpu201在與對應于變量s的值的空閑區段對應地保存音色編號的ram203上的變量seg_inf[s].tone中,保存作為自變量而交付的ram203上的變量t中所保存的新指定的音色編號的值。并且,cpu201在保存與對應于變量s的值的空閑區段對應地使用了區段的履歷編號的變量seg_inf[s].timestamp中,保存基于本次的音色選擇事件而被增加的ram203上的變量timestamp的值(參照圖11的步驟s1102),并更新該區段的履歷編號。進而,cpu201在保存與對應于變量s的值的空閑區段對應的音色的區段組值的變量seg_inf[s].seg_group中,保存變量g所保存的當前進行轉送的波形數據的區段組值(以上,為步驟s1503)。
之后,cpu201將對被轉送到與變量s的值對應的當前的區段中的波形數據進行計數的ram203上的變量i的值復位為0(步驟s1504)。
接著,cpu201邊在步驟s1506中將對被轉送到與變量s的值對應的當前的區段中的波形數據進行計數的變量i的值、和用于對所轉送的波形數據的新指定的音色中的波形編號進行計數的變量w的值分別每次增加1,邊反復執行步驟s1505的處理,直到通過步驟s1507以及s1508判斷為區段組已變化為止。即,在步驟s1505中,cpu201首先在與對應于變量s的值的當前區段中的第i個(=變量i的值)波形數據相對應的、表示波形數據是否完成轉送的變量seg_inf[s].wave_inf[i].wave中,設置表示還沒有轉送波形的值0。接著,cpu201在與對應于變量s的值的當前區段中的第i個波形數據相對應的、表示所指定的音色中的波形編號的變量seg_inf[s].wave_inf[i].wave_num中,設置ram203上的變量w表示的當前轉送中的波形數據的所指定的音色中的波形編號。接著,cpu201在與對應于變量s的值的當前區段中的第i個波形數據相對應的、保存該區段中的該波形數據的地址偏移的變量seg_inf[s].wave_inf[i].seg_adrs中,設置與被轉送到該區段的音色編號t(=變量t的值)的音色中的第w個(=變量w的值)波形數據相對應的、rom202中的常數tone_inf[t].wave[w].seg_adrs(參照圖7)的地址偏移值。進而,cpu201在保存與變量s的值相對應的當前區段中的第i個波形數據的尺寸的變量seg_inf[s].wave_inf[i].size中,設置與被轉送到該區段的音色編號t(=變量t的值)的音色中的第w個(=變量w的值)波形數據相對應的、rom202中的常數tone_inf[t].wave[w].size(參照圖7)的尺寸值(以上,為步驟s1505)。
在上述步驟s1505的設置處理之后,cpu201將對被轉送到與變量s的值相對應的當前區段中的波形數據進行計數的變量i的值、和用于對所轉送的波形數據的新指定的音色中的波形編號進行計數的變量w的值分別每次增加1(步驟s1506)。
之后,cpu201將與被轉送到該區段中的音色編號t(=變量t的值)的音色中的新指定的第w個(=變量w的值)波形數據相對應的、rom202中的常數tone_inf[t].wave[w].seg_group的區段組值設置到ram203上的變量a中。并且,cpu201將與被轉送到該區段的音色編號t(=變量t的值)的音色中的前一個的第w-1個(=變量w的值-1)波形數據相對應的、rom202中的常數tone_inf[t].wave[w-1].seg_group的區段組值設置到ram203上的變量b中(以上,為步驟s1507,區段組信息取得處理)。
然后,cpu201判斷變量a所示的新指定的音色中的第w個波形數據的區段組的值是否等于變量b所示的前一個的第w-1個波形數據的區段組的值(步驟s1508)。
若步驟s1508的判斷為“是”,則能夠進一步將波形數據轉送到相同的區段中,因此返回到步驟s1505的處理繼續進行與新的波形數據相對應的設置處理。
若步驟s1508的判斷為“否”,則cpu201將保存在變量g中的區段組的值增加1(步驟s1509)。
之后,cpu201判斷變量g的值是否達到與音色編號t(=變量t的值)相對應的常數tone_inf[t].num_seg的使用區段數的值(步驟s1510)。
若步驟s1510的判斷為“否”,則cpu201向步驟s1511的處理轉移,繼續進行對下一個空閑區段的轉送處理。
若步驟s1510的判斷為“是”,則與所指定的音色編號t(=變量t的值)相對應的全部使用區段數的波形數據的轉送處理結束,因此cpu201在表示當前轉送中的波形編號的ram203上的變量transfer_wave中設置為初始值0(步驟s1513)。之后,cpu201結束圖15的流程圖所示的圖11的步驟s1107的波形轉送指示程序的處理。
圖16是表示圖9的步驟s905的波形轉送處理的詳細例的流程圖。如上所述,這里cpu201執行從圖2的大容量閃存存儲器204向波形存儲器206的基于后臺處理的波形轉送。作為結果,共用在一級存儲裝置即大容量閃存存儲器204中存儲的區段組的組波形數據作為1個組,被轉送到二級存儲裝置即波形存儲器206的區段。這里,所謂組波形數據是,(1)共用區段組信息的2個以上的波形數據、以及(2)不共用區段組信息的1個波形數據中的至少一方。然后,將上述組波形數據作為1個組,向二級存儲裝置中的多個區段中的某一區段寫入,該多個區段分別是尺寸被預先確定的存儲區域。
cpu201首先判斷ram203上的變量transfer_wave的值是否是表示全部轉送完成的值“-1”(步驟s1601)。
若步驟s1601的判斷為“是”,則不需要執行波形轉送處理,因此cpu201將圖16的流程圖所示的圖9的步驟s905的波形轉送處理原樣結束。
若步驟s1601的判斷為“否”,則cpu201將變量transfer_wave表示的在所指定的音色中接下來應當轉送的波形編號的值保存到表示ram203上的當前正在轉送的音色中的波形編號的變量w內(步驟s1602)。
接著,cpu201將對區段進行計數的ram203上的變量s的值在步驟s1603中復位為0后,邊在步驟s1605中每次增加1,邊執行基于步驟s1604的判斷的搜索處理。在步驟s1604中,cpu201判斷表示被分配了與變量s相對應的區段的音色編號的變量seg_inf[s].tone的值是否等于ram203上的變量cur_tone中所保存的為了當前演奏而選擇的音色編號(參照圖11的步驟s1103),并且被分配了變量seg_inf[s].seg_group中設置的與變量s相對應的區段的區段組的值是否等于rom202上的常數tone_inf[cur_tone].wave[w].seg_group中保存的變量cur_tone對應的音色的變量w表示的當前正在轉送的音色中的波形編號所對應的波形數據的區段組的值。
通過預先執行上述的波形轉送指示程序內的步驟s1503的處理,從而在步驟s1604和步驟s1605的反復處理中步驟s1604的判斷必然成為“是”。若步驟s1604的判斷成為“是”,則cpu201在將對變量s的值表示的區段內的波形數據的次序進行計數的ram203上的變量i的值在步驟s1606中復位為0后,邊在步驟s1608中每次增加1,邊執行基于步驟s1607的判斷的搜索處理。步驟s1607中,cpu201判斷變量seg_inf[s].wave_inf[i].wave_num中所保存的、變量s的值表示的區段內的第i個(=變量i的值)波形數據在所指定的音色中的波形編號,是否等于變量w表示的當前正在轉送的波形數據在所指定的音色中的波形編號。
通過預先執行上述的波形轉送指示程序內的步驟s1505的處理,在步驟s1607和步驟s1608的反復處理中步驟s1607的判斷必然成為“是”。若步驟s1607的判斷成為“是”,則cpu201執行將大容量閃存存儲器204中的變量cur_tone的值表示的音色中的變量w的值所表示的波形編號的波形數據作為波形存儲器206中的變量s的值所表示的區段內的第i個(=變量i表示的值)波形數據而轉送的波形轉送程序(步驟s1609)。此時,cpu201將ram203上的變量fa、sa、l以及s分別設置為自變量。cpu201在變量fa中設置通過變量cur_tone和變量w參照的rom202上的常數tone_inf[cur_tone].wave[w].seg_adrs的值,作為被轉送的波形數據的轉送源的大容量閃存存儲器204上的地址。并且,cpu201在變量sa中設置通過變量s和變量i參照的ram203上的變量seg_inf[s].wave_inf[i].seg_adrs的值,作為波形數據被轉送的轉送目的地的波形存儲器206中的地址偏移。進而,cpu201在變量l中設置通過變量s和變量i參照的ram203上的變量seg_inf[s].wave_inf[i].size的值,作為被轉送的波形數據的尺寸。然后,cpu201在變量s中設置變量s的值。關于波形轉送程序的詳細情況在后面敘述。
在步驟s1609的波形轉送程序的處理之后,cpu201在與對應于變量s的值的當前區段中的第i個(=變量i的值)波形數據相對應的、表示是否完成波形數據轉送的變量seg_inf[s].wave_inf[i].wave中設置表示波形已被轉送的值1(步驟s1610)。
進而,cpu201將表示音色中接下來應當轉送的波形編號的值的變量transfer_wave的值增加1(步驟s1611)。
之后,cpu201判斷與變量cur_tone表示的音色中的變量w表示的波形編號的波形數據相對應的常數tone_inf[cur_tone].wave[w].seg_group的區段組的值是否達到了與變量cur_tone表示的音色相對應的常數tone_inf[cur_tone].num_seg中所保存的使用區段數(步驟s1612)。
若步驟s1612的判斷為“否”,則cpu201將變量transfer_wave的值維持為在步驟s1611中增加后的值,并結束圖16的流程圖所示的圖9的步驟s905的波形轉送處理。其結果,接下來在執行步驟s905的波形轉送處理的定時,執行對變量transfer_wave的新的值的波形編號的波形數據的轉送。
另一方面,若步驟s1612的判斷為“是”,則新指定的音色的波形數據的轉送全部結束,因此cpu201在變量transfer_wave中保存表示全部轉送結束的值“-1”。之后,cpu201結束圖16的流程圖所示的圖9的步驟s905的波形轉送處理。
圖17是表示圖16的步驟s1609的波形轉送程序的詳細例的流程圖。
首先,cpu201在對大容量閃存存儲器204的讀出地址進行指定的ram203上的變量rp(讀指針)中設置在圖16的步驟s1609的開始時作為ram203上的變量fa而被交付的轉送的波形數據的轉送源的大容量閃存存儲器204上的地址(步驟s1701)。
接著,cpu201在對向波形存儲器206的寫入地址進行指定的ram203上的變量wp(寫指針)中,設置基于圖16的步驟s1609的開始時作為ram203上的變量s以及sa而被分別交付的區段編號以及區段內地址、通過下式計算的內容(步驟s1702)。
wp=100000h×s+sa
在該式中,1區段的尺寸如上所述是例如100000h字節,因此變量s表示的區段編號的區段的開頭的字節地址在波形存儲器206上為100000h×s。進而,本次的波形數據被轉送的地址為,相對于該地址偏移了作為變量sa而交付的區段內地址后的地址。
之后,cpu201將指定所轉送的字節數據數的ram203上的變量c的值在步驟s1703中復位為0后,邊在步驟s1706中每次增加1個采樣,邊反復執行步驟s1704和s1705的處理,直到在步驟s1707中判斷為達到作為ram203上的變量l而交付的數據尺寸為止。
首先,cpu201根據大容量閃存存儲器204上的將變量rp的值和變量c的值相加得到的地址,讀出波形數據的采樣(字節值)并設置到ram203上的變量a中(步驟s1704)。
然后,cpu201在波形存儲器206上的將變量wp的值和變量c的值相加得到的地址中,寫入變量a所保存的數據(步驟s1705)。
以上的反復處理的結果,若步驟s1707的判斷為“是”,則cpu201結束圖17的流程圖所示的圖16的步驟s1609的波形轉送程序的處理。
圖18是表示圖9的步驟s908的按鍵處理的詳細例的流程圖。
首先,cpu201判斷在ram203上的變量cur_tone中是否保存有表示沒有選擇音色的無效值“-1”(步驟1801)。
若步驟s1801的判斷為“是”,則cpu201結束圖18的流程圖所示的圖9的步驟s908的按鍵處理,不執行發音處理。
若步驟s1801的判斷為“否”,則cpu201判斷ram203上的變量transfer_wave的值是否為表示完成了波形轉送的值“-1”(步驟s1802)。
若步驟s1802的判斷為“否”,則cpu201結束圖18的流程圖所示的圖9的步驟s908的按鍵處理,不執行發音處理。即,cpu201在波形轉送結束而變量transfer_wave的值成為“-1”之前,不執行發音處理。
若步驟s1802的判斷為“是”,則cpu201執行分割波形檢索程序(步驟s1803)。該情況下,cpu201將圖9的步驟s902中取得的琴鍵編號和力度分別作為自變量并保存到ram203上的變量k以及v中。通過該程序的處理,判別例如圖6的分割空間內的一個,在ram203上的變量tw中得到當前的音色內的波形編號作為返回值。另外,作為變量tw的返回值而設置“-1”的情況是無相符的分割空間的情況。
接著,cpu201判斷變量tw的返回值是否為“-1”(步驟s1804)。
若步驟s1804的判斷為“是”,則cpu201結束圖18的流程圖所示的圖9的步驟s908的按鍵處理,不執行發音處理。
若步驟s1804的判斷為“否”,則cpu201執行區段內波形檢索程序(步驟s1805)。此時,cpu201交付保存在變量tw中的音色內的波形編號作為自變量。通過該程序的處理,在ram203上的變量s得到區段編號,作為返回值。該變量s的返回值為64的情況是不存在相符的波形數據的情況。并且,在ram203上的變量sw中得到區段內的波形編號,作為返回值。
在步驟s1805的區段內波形檢索程序的處理之后,cpu201判斷變量s的返回值是否為64(步驟s1806)。
若步驟s1806的判斷為“是”,則cpu201結束圖18的流程圖所示的圖9的步驟s908的按鍵處理,不執行發音處理。
若步驟s1806的判斷為“否”,則cpu201在ram203上的變量a中設置由下式計算的地址,作為向音源lsi205通知的波形數據的地址(步驟s1807)。
a=s×10000h
+seg_inf[s].wave_inf[sw].seg_adrs
與圖17的步驟s1702的情況同樣,變量s所示的區段編號的區段的開頭的字節地址在波形存儲器206上為100000h×s。對該值加上了常數seg_inf[s].wave_inf[sw].seg_adrs中保存的變量s表示的區段的變量sw所示的波形編號的波形數據的區段內偏移地址的值后得到的值,為音源lsi205應當讀出的波形存儲器206中的開頭地址。
之后,cpu201對音源lsi205執行發音程序(步驟s1808)。此時,cpu201將變量k所保存的琴鍵編號、變量v所保存的力度、和變量a所保存的地址值作為自變量向音源lsi205交付。并且,cpu201將由常數tone_inf[cur_tone].wave[sw].tg_inf表示的參數組(參照圖7)作為自變量向音源lsi205交付,來作為其他波形信息。音源lsi205的處理由于是既存的處理,所以對其詳細情況進行省略,但基于上述自變量,從波形存儲器206讀出波形數據而執行發音處理。
圖19是表示圖18的步驟s1803的分割波形檢索程序的詳細例的流程圖。
cpu201將表示音色內的波形編號的ram203上的變量w的值在步驟s1901中復位為0后,邊在步驟s1906中每次增加1,邊反復執行步驟s1902到s1905的一系列的判斷處理,直到在步驟s1907中判斷為達到64為止。
在上述的反復處理中,cpu201首先判斷作為變量v而交付的力度是否為通過變量cur_tone和變量w參照的rom202上的常數tone_inf[cur_tone].wave[w].vel_lo的最低力度值以上(步驟s1902)。
若步驟s1902的判斷為“否”,則向步驟s1906的處理轉移而轉移到接下來的波形編號的處理。
若步驟s1902的判斷為“是”,則接著由cpu201判斷作為變量v而交付的力度是否為通過變量cur_tone和變量w參照的rom202上的常數tone_inf[cur_tone].wave[w].vel_hi的最高力度值以下(步驟s1903)。
若步驟s1903的判斷為“否”,則向步驟s1906的處理轉移而轉移到接下來的波形編號的處理。
若步驟s1903的判斷為“是”,則接著由cpu201判斷作為變量k而交付的琴鍵編號是否為通過變量cur_tone和變量w參照的rom202上的常數tone_inf[cur_tone].wave[w].key_lo的最低琴鍵編號以上(步驟s1904)。
若步驟s1904的判斷為“否”,則向步驟s1906的處理轉移而轉移到接下來的波形編號的處理。
若步驟s1904的判斷為“是”,則接著由cpu201判斷作為變量k而交付的琴鍵編號是否為通過變量cur_tone和變量w參照的rom202上的常數tone_inf[cur_tone].wave[w].key_hi的最高琴鍵編號以下(步驟s1905)。
若步驟s1905的判斷為“否”,則向步驟s1906的處理轉移而轉移到接下來的波形編號的處理。
若步驟s1905的判斷為“是”,則cpu201將變量w的值作為音色內波形編號的返回值而設置到變量tw。之后,cpu201結束圖19的流程圖所示的圖18的步驟s1803的分割波形檢索程序。
若步驟s1905的判斷為“否”,則向步驟s1906的處理轉移而轉移到接下來的波形編號的處理。
步驟s1902到s1907的反復處理的結果,若步驟s1907的判斷為“是”,則cpu201在變量tw中設置表示無相符的值“-1”。之后,cpu201結束圖19的流程圖所示的圖18的步驟s1803的分割波形檢索程序。
圖20是表示圖18的步驟s1805的區段內波形檢索程序的詳細例的流程圖。
cpu201在將計數區段的ram203上的變量s的值在步驟s2001中復位為0后,邊在步驟s2009中每次增加1,邊反復執行步驟s2002到s2008的一系列的處理,直到在步驟s2010中判斷為達到64為止。
上述的反復處理中,cpu201首先判斷作為ram203上的變量seg_inf[s].tone(參照圖8)的值而設定在與變量s的值相對應的區段中的音色編號是否等于作為ram203上的變量cur_tone(參照圖8)的值而當前正在選擇的音色編號(步驟s2002)。
若步驟s2002的判斷為“否”,則cpu201向步驟s2009的處理轉移而轉移到對下一個區段的處理。
若步驟s2002的判斷為“是”,則cpu201在將對區段內的波形編號進行保存的ram203上的變量sw的值在步驟s2003中復位為0后,邊在步驟s2007中每次增加1,邊反復執行步驟s2004到s2007的一系列的處理,直到在步驟s2008中判斷為達到64為止。
在上述的反復處理中,cpu201首先將基于變量s以及變量sw而作為變量seg_inf[s].wave_inf[sw].wave_num的值被參照的與變量s的值相對應的區段內的第sw個(=變量sw的值)波形數據的音色內的波形編號保存在ram203上的變量w中(步驟s2004)。
接著,cpu201判斷變量w的值是否等于作為自變量而交付的ram203上的變量tw所表示的音色內的波形編號(步驟s2005)。
若步驟s2005的判斷為“否”,則判斷變量tw的值是否為“-1”(步驟s2006)。
若步驟s2006的判斷為“否”,則cpu201向步驟s2007轉移而轉移到對下一個區段內波形編號的波形數據的處理。
若步驟s2006的判斷為“是”,則cpu201向步驟s2009轉移而轉移到對下一個區段的處理。
在上述的反復處理中,若步驟s2005的判斷為“是”,則cpu201將此時的變量s的值和變量sw的值分別作為區段的返回值以及區段內波形編號的返回值而設置,并結束圖20的流程圖所示的圖18的步驟s1805的區段內波形檢索程序的處理。
在上述的反復處理中,若步驟s2010的判斷為“是”,則cpu201將變量s的返回值設置為表示無相符的值,結束圖20的流程圖所示的圖18的步驟s1805的區段內波形檢索程序的處理。
通過以上說明過的實施方式,在波形存儲器上不存在波形的音色被選擇而將新的音色波形數據向波形存儲器寫入時,若將區段相同的使用數的音色開放,則能夠可靠地寫入新的波形。例如,在選擇了使用3區段的音色波形時,只要對使用3區段以上的音色進行覆寫即可。
由此能夠避免雖然具有比希望寫入的波形的容量大得多的空閑空間但卻不能寫入那樣的非效率的狀態,因此從需要進行如對演奏造成障礙那樣的花費時間的垃圾回收等存儲器整理中解放出來。
并且,若寫入到波形存儲器上的音色的組合是相同的,則用于寫入所選擇的音色的波形的條件、例如若覆寫以該狀態寫入的某音色則能夠寫入等,能夠與過去寫入波形的順序無關地預測,因此能夠實現容易管理的電子樂器。
此外,本發明不限定于上述的實施方式,在實施階段在不脫離其主旨的范圍內能夠進行各種變形。并且,由上述的實施方式執行的功能只要可能也可以適當組合來實施。在上述的實施方式中包含有各種階段,通過公開的基于多個構成要件的適宜的組合能夠提取各種發明。例如,即使從實施方式所示的全部構成要件中刪除一些構成要件,若能夠得到效果,則該刪除了構成要件的構成也能夠作為發明而提取。
額外的優勢和變更對于本領域技術人員是容易發生的。因此,本發明在其更廣泛的方面不僅限于具體細節和具體實施例所示的和所描述的。因此,這些實施方式及其變形都包含在發明的范圍和主旨中,并且包含在權利要求的范圍所記載的發明及與其等同的范圍中。