乐器数字接口硬件指令的制作方法

文档序号:2831751阅读:456来源:国知局

专利名称::乐器数字接口硬件指令的制作方法
技术领域
:本发明涉及电子装置,且具体来说涉及产生音频的电子装置。
背景技术
:乐器数字接口(MIDI)是用于产生、传送及回放例如音乐、话音、音调、警报及其类似物的音频声音的格式。支持MIDI格式的装置可存储可用以产生各种"语音"的音频信息集合。每一语音可对应于特定声音,例如由特定器具产生的音符。举例来说,第--语音可对应于如由钢琴演奏的中音C,第二语音可对应于如由长号演奏的中音C,且第三语音可对应于如由长号演奏的D并音等等。为了复制不同器具演奏的声音,符合MIDI的装置可包括指定与声音相关联的各种音频特征(例如低频振荡器的行为、例如颤音等效果及可影响对声音的感知的许多其它音频特征)的语音信息集合。可界定、在MIDI文件中输送及由支持MIDI格式的装置重现几乎任何声音。支持MIDI格式的装置可在指示装置应开始产生音符的事件发生时产生音符(或其它声音)。类似地,装置在指示装置应停止产生音符的事件发生时停止产生音符。可通过指定指示特定语音何时应开始及停止的事件及对语音的各种影响而根据MIDI格式对整个音乐作品进行编码。以此方式,可以根据MIDI格式的紧凑文件格式来存储及传输音乐作品。多种装置中支持MIDI格式。举例来说,例如无线电话等无线通信装置可支持MIDI文件以用于可下载声音,例如铃声或其它音频输出。例如苹果计算机有限公司(AppleComputer,Inc)售卖的"iPod"装置及微软公司(MicrosoftCorp.)售卖的"Zune"装置等数字音乐播放器也可支持MIDI文件格式。其它支持MIDI格式的装置可包括各种音乐合成器,例如键盘、音序器、语音编码器(音码器)及节奏机。另外,多种装置也可支持MIDI文件或音轨的回放,包括无线移动装置、直接双向通信装置(有时称为对讲机)、网络电话、个人计算机、桌上型及膝上型计算机、工作站、卫星无线电装置、内部通信装置、无线电广播装置、手持型游戏装置、安装于装置中的电路板、信息查询站(informationkiosk)、视频游戏控制台、各种儿童计算机化玩具、用于汽车、船只及飞机中的机载计算机及多种其它装置。
发明内容大体而言,描述使用经特殊化以用于产生乐器数字接口(MIDI)语音的数字波形的机器代码指令集合来产生MIDI语音的数字波形的技术。举例来说,处理器可执行产生MIDI语音的数字波形的软件程序。软件程序的指令可为来自经特殊化以用于产生MIDI语音的数字波形的指令集的机器代码指令。确切地说,所述指令中的一者的执行可涉及基于界定MIDI语音的参数集合而选择操作及执行选定操作。在一方面中,一种方法包含执行产生MIDI语音的数字波形的软件程序中的机器代码指令。执行软件程序中的指令包含基于界定MIDI语音的语音参数集合选择操作,及输出控制信号以致使选定操作被执行。所述方法还包含输出数字波形。在另一方面中,一种装置包含存储界定MIDI语音的语音参数集合的存储器单元。所述装置还包含处理元件,其执行软件程序中的机器代码指令以产生MIDI语音的数字波形。完成机器代码指令的执行涉及基于语音参数集合而选择操作及执行选定操作。在另一方面中,一种计算机可读媒体包含指令。所述指令致使一个或一个以上处理器执行产生MIDI语音的数字波形的软件程序中的机器代码指令。执行软件程序中的指令包含基于界定MIDI语音的语音参数集合选择操作,及输出控制信号以致使选定操作被执行。计算机可读媒体还包含致使所述一个或一个以上处理器输出数字波形的指令。在另一方面中,一种装置包含用于存储界定MIDI语音的语音参数集合的装置。所述装置还包含用于执行软件程序中的机器代码指令以产生MIDI语音的数字波形的装置。完成机器代码指令的执行涉及基于语音参数集合而选择操作及执行选定操作。在另一方面中,一种电路可经配置以执行产生MIDI语音的数字波形的软件程序的机器代码指令,其中所述电路经配置以基于界定MIDI语音的语音参数集合而选择操作且输出控制信号以致使选定操作被执行,且输出数字波形。在随附图式及以下描述中阐述细节。其它特征、目标及优势将根据描述及图式且根据权利要求书而显而易见。9图1是说明包括产生声音的音频装置的示范性系统的框图。图2是说明音频装置的示范性乐器装置接口(MIDI)硬件单元的框图。图3是说明音频装置的实例操作的流程图。图4是说明音频装置中的数字信号处理器(DSP)的实例操作的流程图。图5是说明音频装置的MIDI硬件单元中的协调模块的实例操作的流程图。图6是说明使用指定存储器地址的语音指示符的列表的实例DSP的框图。图7是说明当DSP从处理器接收MIDI事件的集合时DSP的示范性操作的流程图。图8是说明当DSP在语音指示符的列表中插入语音指示符时DSP的实例操作的流程图。图9是说明当DSP在所述列表中插入语音指示符时DSP的示范性操作的流程图。图IO是说明当DSP在列表中的语音指示符的数目超过语音指示符的最大数目时从列表移除语音指示符时DSP的示范性操作的流程图。图11是说明使用指定可根据其导出存储器地址的索引值的语音指示符的列表的实例DSP的框图。图12是说明示范性处理元件的细节的框图。图13是说明音频装置的MIDI硬件单元中的处理元件的实例操作的流程图。具体实施例方式本发明描述使用经特殊化以用于产生MIDI语音的数字波形的机器代码指令集合来产生乐器数字接口(MIDI)语音的数字波形的技术。举例来说,处理器可执行产生MIDI语音的数字波形的软件程序。软件程序的指令可为来自经特殊化以用于产生MIDI语音的数字波形的指令集的机器代码指令。图1为说明包括产生声音的音频装置4的示范性系统2的框图。音频装置4可为若干不同类型的装置中的一者。举例来说,音频装置4可为移动电话、网络电话、个人计算机、直接双向通信装置(有时称为对讲机)、个人计算机、桌上型或膝上型计算机、工作站、卫星无线电装置、内部通信装置、无线电广播装置、手持型游戏装置、安装于例如查询站等装置中的电路板、各种儿童计算机化玩具、用于汽车、船只、飞机、宇宙飞船中的机载计算机或其它类型的装置。例如苹果计算机有限公司(AppleComputer,Inc)售卖的"iPod"装置及微软公司(MicrosoftCorp.)售卖的"Zune"装置等数字音乐播放器也可支持MIDI10文件格式。支持MIDI格式的其它装置可包括各种音乐合成器,例如键盘、音序器、语音编码器(音码器)及节奏机。图1中所说明的各种组件是解释本发明的方面所需的组件。然而,在一些实施方案中,可能存在其它组件且可能不包括所说明的组件中的一些。举例来说,如果音频装置4是无线电话,则可包括天线、发射器、接收器及调制解调器(调制器-解调器)以促进音频文件的无线传送。如图l的实例中所说明,音频装置4包括存储MIDI文件的音频存储单元6。音频存储单元6可包含任何易失性或非易失性存储器或存储装置。举例来说,音频存储单元6可为硬盘驱动器、快闪存储器单元、压縮光盘、软盘、数字化通用光盘、只读存储器单元、随机存取存储器或信息存储媒体。音频存储单元6可存储乐器装置接口(MIDI)文件及其它类型的数据。举例来说,如果音频装置4是移动电话,则音频存储单元6可存储包含个人联系人列表、相片及其它类型的数据的数据。音频装置4也包括可从音频存储单元6读取数据及向音频存储单元6写入数据的处理器8。此外,处理器8可从随机存取存储器(RAM)单元IO读取数据及向随机存取存储器(RAM)单元10写入数据。举例来说,处理器8可从音频存储模块6读取MIDI文件的一部分且将MIDI文件的所述部分写入到RAM单元10。处理器8可包含通用微处理器,例如英特尔奔腾4(IntelPentium4)处理器、遵照ARM控股公司(ARMHoldingsofCherryHinton,UK)的ARM架构的嵌入式微处理器或其它类型的通用处理器。RAM单元10可包含一个或一个以上静态或动态RAM单元。在处理器8读取MIDI文件之后,处理器8可剖析MIDI文件且对与MIDI文件相关联的MIDI事件进行调度。举例来说,对于每一MIDI帧,处理器8可读取一个或一个以上MIDI文件且可从MIDI文件提取MIDI事件。基于MIDI指令,处理器8可对MIDI事件进行调度以用于由DSP12加以处理。在对MIDI事件进行调度之后,处理器8可将调度提供到RAM单元10或DSP12以使得DSP12可处理所述事件。或者,处理器8可通过以时间同步方式向DSP12分派MIDI事件而执行调度。DSP12可如MIDI文件中的时序参数所指定而以同步方式来服务于经调度事件。MIDI事件可包括用以发送音乐演奏信息的通道语音消息。通道语音消息可包括用以打开或关闭特定MIDI语音的指令、改变复调键压力、通道压力、音高折曲改变、控制改变消息、触后效果、呼吸控制效果、程序改变、音高折曲效果、左右摇动、延音踏板、主音量、持续乐段及其它通道语音消息。另外,MIDI事件可包括影响MIDI装置响应于MIDI数据的方式的通道模式消息。此外,MIDI事件可包括系统消息,例如意图用于MIDI系统中的所有接收器的统共同消息、用于在基于时钟的MIDI组件之间进行同步的系统实时消息及其它系统相关消息。MIDI事件也可为MIDI表演控制消息(例如,灯光效果提示、幻灯片投影提示、机械效果提示、烟火提示及其它效果提示)。当DSP12从处理器8接收到MIDI指令时,DSP12可处理MIDI指令以产生连续脉冲编码调制(PCM)信号。PCM信号为模拟信号的数字表示,其中由存在规则间隔的数字样本表示波形。DSP12可将此PCM信号输出到数/模转换器(DAC)14。DAC14可将此数字波形转换为模拟信号。驱动电路18可使用模拟信号来驱动扬声器19A及19B以用于向用户输出物理声音。本发明将扬声器19A及19B统称为"扬声器19"。音频装置4可包括一个或一个以上额外组件(未图示),包括滤波器、预放大器、放大器及准备模拟信号以用于由扬声器19最后输出的其它类型的组件。以此方式,音频装置4可根据MIDI文件而产生声音。为了产生数字波形,DSP12可使用产生个别MIDI帧的数字波形的MIDI硬件单元18。每一MIDI帧可对应于IO毫秒或另一时间间隔。当MIDI帧对应于10毫秒且以48kHz对数字波形进行取样(亦即,每秒48,000个样本)时,在每一MIDI帧中存在480个样本。MIDI硬件单元18可作为音频装置4的硬件组件而实施。举例来说,MIDI硬件单元18可为嵌入到音频装置4的电路板中的芯片组。为了使用MIDI硬件单元18,DSP12可首先确定MIDI硬件单元18是否闲置。MIDI硬件单元18可在MIDI硬件单元18结束产生MIDI帧的数字波形之后闲置。DSP12可接着产生指示MIDI帧中存在的MIDI语音的语音指示符的列表。在DSP12产生语音指示符的列表之后,DSP12可设置MIDI硬件单元18中的一个或一个以上寄存器。DSP12可使用直接存储器交换(DME)来设置这些寄存器。DME是在处理器正执行其它操作的同时将数据从一个存储器单元转移到另一存储器单元的程序。在DSP12设置寄存器之后,DSP12可指令MIDI硬件单元18开始产生MIDI帧的数字波形。如下文所详细解释,MIDI硬件单元18可通过针对语音指示符的列表中的每一MIDI语音产生数字波形且将这些数字波形聚集为MIDI语音的波形而产生MIDI帧的数字波形。当MIDI硬件单元18结束产生MIDI帧的数字波形时,MIDI硬件单元18可向DSP12发送中断。在从MIDI硬件单元18接收到中断之后,DSP12可向MIDI硬件单元18发送对数字波形的DME请求。当MIDI硬件单元18接收到请求时,MIDI硬件单元18可向DSP12发送数字波形。为了产生指示MIDI帧中存在的MIDI语音的语音指示符的列表,DSP12可确定MIDI语音中的哪一者在MIDI帧中具有至少最小声学显著性水平。MIDI语音在MIDI帧中的声学显著性水平可随着所述MIDI语音对于MIDI帧的人类听者所感知的整体声音的重要性12而变化。为了产生MIDI语音的数字波形,MIDI硬件单元18可存取界定MIDI语音的语音参数集合中的至少一些语音参数。语音参数集合可通过指定对于产生MIDI语音的数字波形而言必要的信息及/或通过指定可将所述信息定位于何处而界定MIDI语音。举例来说,MIDI语音参数集合可指定谐振级、音高混响、音量及其它声学特征。另外,MIDI语音参数集合包括指向RAM单元IO中含有语音的基本波形的位置的地址的指针。MIDI帧的数字波形可为MIDI语音的数字波形的聚集。举例来说,MIDI帧的数字波形可为MIDI语音的数字波形的和。如下文将详细论述,MIDI硬件单元18可提供若干优势。举例来说,MIDI硬件单元18可包括导致数字波形的有效产生的若干特征。由于数字波形的此有效产生,音频装置4可能能够产生较高质量的声音、消耗较少功率或以其它方式对用于回放MIDI文件的常规技术加以改进。此外,因为MIDI硬件单元18可有效地产生数字波形,所以MIDI硬件单元18可能能够在固定量的时间内产生较多MIDI语音的数字波形。所述额外MIDI语音的存在可改进人类听者所感知的声音的质量。图2是说明音频装置4的示范性MIDI硬件单元18的框图。如图2的实例中所说明,MIDI硬件单元18包括发送及接收数据的总线接口30。举例来说,总线接口30可包括AMBA高性能总线(AHB)主接口、AHB从属接口及存储器总线接口。或者,总线接口30可包括AXI总线接口或另一类型的总线接口。AXI代表高级可扩展接口。另外,MIDI硬件单元18可包括协调模块32。协调模块32协调MIDI硬件单元18内的数据流。当MIDI硬件单元18从DSP12接收到开始产生MIDI帧的数字信号的指令时,协调模块32可将由DSP12产生的语音指示符的列表从RAM单元10加载到MIDI硬件单元18中的链接列表存储器单元42中。列表中的每一语音指示符指示在当前MIDI帧期间具有声学显著性的MIDI语音。语音指示符的列表中的每一语音指示符可指定RAM单元IO中存储界定MIDI语音的语音参数集合的存储器位置。举例来说,每一语音指示符可包括特定语音参数集合的存储器地址或一索引值,协调模块32可根据所述索引值导出特定语音参数集合的存储器地址。在协调模块32将语音指示符的列表加载到链接列表存储器单元42中之后,协调模块32可识别处理元件34A到34N中的一者,以产生由存储于链接列表存储器42中的语音指示符的列表中的语音指示符所指示的MIDI语音中的一者的数字波形。处理元件34A到34N在本文中统称为"处理元件34"。处理元件34可彼此并行地产生MIDI语音的数字波形。处理元件34中的每一者可与语音参数集合(VPS)RAM单元46A到46N中的一者相关联。本发明可将VPSRAM单元46A到46N统称为"VPSRAM单元46"。VPSRAM单元46可为存储由处理元件34使用的语音参数的寄存器。当协调模块32识别处理元件34中的一者以产生MIDI语音的数字波形时,协调模块32可将MIDI语音的语音参数集合的语音参数存储到与所识别的处理元件相关联的VPSRAM单元46中的一者中。另外,协调模块32可将语音参数集合的语音参数存储到波形获取单元/低频振荡器(WFU/LFO)存储器单元39中。在将语音参数加载到VPSRAM单元及WFU/LFO存储器单元39中之后,协调模块32可指令处理元件开始产生MIDI语音的数字波形。处理元件34中的每一者可与程序存储器单元44A到44N(统称为"程序存储器单元44")中的一者相关联。程序存储器单元44中的每一者存储程序指令集合。为了产生MIDI语音的数字波形,处理元件可执行存储于与处理元件相关联的程序存储器单元44中的一者中的程序指令集合。这些程序指令可使得处理元件从与处理元件相关联的VPS存储器单元46中的一者检索语音参数集合。另外,程序指令可使得处理元件向波形获取单元(WFU)36发送对在语音参数中由指向语音的基本波形样本的指针所指定的波形的请求。处理元件34中的每一者可使用WFU36。响应于来自处理元件34中的一者的请求,WFU36可向请求处理元件返回一个或一个以上波形样本。因为波形可在样本内相移(例如,高达一个波形循环),所以WFU36可返回两个样本以便使用内插而补偿相移。此外,因为立体声信号由两个单独的波形组成,所以WFU36可返回高达四个样本。由WFU36返回的最后样本可为可用于内插的分数相位。WFU36可使用高速缓冲存储器48来较快速地获取基本波形。在WFU36将音频样本返回到处理元件34中的一者之后,相应处理元件可执行额外程序指令。所述额外指令可包括从MIDI硬件单元18中的低频振荡器(LFO)38请求不对称三角形波形的样本。通过使WFU36返回的波形乘以LF038返回的三角波,处理元件可操纵波形的各种声学特征。举例来说,使波形乘以三角波可产生听起来较像所要器具的波形。其它指令可使得处理元件使波形循环特定次数、调整波形的振幅、添加混响、添加颤音效果或提供其它声学效果。以此方式,处理元件可产生持续一个MIDI帧的语音的波形。最后,处理元件可能会遇到退出指令。当处理元件遇到退出指令时,处理元件可向求和缓冲器40提供所产生的波形。或者,处理元件可在处理元件产生所述样本时将所产生的数字波形的每一样本存储到求和缓冲器40中。当求和缓冲器40从处理元件34中的一者接收到波形时,求和缓冲器将波形聚集为MIDI帧的整体波形。举例来说,求和缓冲器40可最初存储平顶波(亦即,所有数字样本均为零的波形)。当求和缓冲器40从处理元件34中的一者接收到波形时,求和缓冲器40可将所述波形的每一数字样本添加到存储于求和缓冲器40中的波形的相应样本。以此方式,求和缓冲器40产生并存储MIDI帧的整体波形。最后,协调模块32可确定处理元件34已完成产生链接列表存储器42中的列表中所指示的所有语音的数字波形,且已将那些数字波形提供到求和缓冲器40。在此点,求和缓冲器40可含有整个当前MIDI帧的完整数字波形。当协调模块32作出此确定时,协调模块32可向DSP12发送中断。响应于所述中断,DSP12可经由直接存储器交换(DME)向求和缓冲器中的控制单元(未图示)发送请求以接收求和缓冲器40的内容。或者,DSPIO也可经预编程以执行DME。或者,DSP12也可经预编程以执行DME。图3是说明音频装置4的实例操作的流程图。最初,处理器8遇到将MIDI文件从音频存储模块6加载到RAM单元IO中的程序指令(50)。举例来说,如果音频装置4是移动电话,则当音频装置4接收到传入的电话呼叫且MIDI文件描述铃声时处理器8可遇到将MIDI文件从持久存储模块6加载到RAM单元10中的程序指令。在将MIDI文件加载到RAM单元10中之后,处理器8可剖析来自RAM单元10中的MIDI文件的MIDI指令(52)。处理器8接着可对MIDI事件进行调度且根据此调度将MIDI事件传递到DSP12(54)。响应于MIDI事件,DSP12与MIDI硬件单元18协作可实时输出连续数字波形(56)。亦即,由DSP12输出的数字波形不被分段成离散MIDI帧。DSP12向DAC14提供连续数字波形(58)。DAC14将数字波形中的个别数字样本转换为电压(60)。可使用多种不同数/模转换技术来实施DAC14。举例来说,DAC14可作为脉冲宽度调制器、超取样DAC、加权二进制DAC、R-2R梯形DAC、温度计编码DAC、分段式DAC或另一类型的数/模转换器而实施。在DAC14将数字波形转换为模拟音频信号之后,DAC14可将模拟音频信号提供到驱动电路16(62)。驱动电路16可使用模拟信号来驱动扬声器19(64)。扬声器19可为将电模拟信号转换为物理声音的电机换能器。当扬声器19产生声音时,音频装置4的用户可听到声音且适当地作出响应。举例来说,如果音频装置4为移动电话,则用户可在扬声器19产生铃声声音时接听电话呼叫。图4是说明音频装置4中的DSP12的实例操作的流程图。最初,DSP12从处理器8接收MIDI事件(70)。在接收到MIDI事件之后,DSP12确定MIDI事件是否为更新MIDI语音的参数的指令(72)。举例来说,可接收MIDI事件以针对钢琴的中音C语音增大语音参数集合中的左侧通道参数的增益。以此方式,钢琴的中音C语音可能听起来如同音符正来自左侧。如果DSP12确定MIDI事件是更新MIDI语音的参数的指令(72为"是"),则DSP12可更新RAM单元IO中的参数(74)。另一方面,如果DSP12确定MIDI事件不是更新MIDI语音的参数的指令(72为"否"),则DSP12可产生语音指示符的列表(75)。链接列表中的语音指示符中的每一者通过指定RAM单元10中存储界定MIDI语音的语音参数集合的存储器位置而指示MIDI帧的MIDI语音。因为MIDI硬件单元18可产生受到有限时间限制的MIDI语音的数字波形,所以对于MIDI硬件单元18而言可能会不能产生由MIDI指令针对MIDI帧指定的所有MIDI语音的数字波形。因此,链接列表中的语音指示符所指示的MIDI语音是那些在MIDI帧期间具有最大声学显著性的MIDI语音。语音指示符的列表可为链接列表。亦即,除了列表中的最后一个语音指示符之外,列表中的每一语音指示符均可与指向列表中的下一语音指示符的存储器地址的指针相关联。为了确保MIDI硬件单元18仅产生最显著MIDI语音的数字波形,DSP12可使用一个或一个以上试探算法(heuristicalgorithm)来识别在声学上最为显著的语音。举例来说,DSP12可识别具有最高平均音量的那些语音、形成必要谐调的那些语音或其它声学特征。DSP12可产生语音指示符的列表以使得在声学上最为显著的语音是列表中的第一个语音、在声学上第二显著的语音是列表中的第二个语音等等。另外,DSP12可从列表移除在MIDI帧中不活动的任何语音。在产生语音指示符的列表之后,DSP12可确定MIDI硬件单元18是否闲置(76)。MIDI硬件单元18可在产生MIDI文件的第一MIDI帧的数字波形之前或在完成MIDI帧的数字波形的产生之后闲置。如果MIDI硬件单元18不是闲置的(76为"否"),则DSP12可等待一个或一个以上时钟循环且接着再次确定MIDI硬件单元18是否闲置(76)。如果MIDI硬件单元18闲置(76为"是"),则DSP12可将指令集合加载到MIDI硬件单元18中的程序RAM单元44中(78)。举例来说,DSP12可确定是否己将指令加载到程序RAM单元44中。如果尚未将指令加载到程序RAM单元44中,则DSP12可使用直接存储器交换(DME)将所述指令转移到程序RAM单元44中。或者,如果已将指令加载到程序RAM单元44中,则DSP12可跳过此步骤。在DSP12已将程序指令加载到程序RAM单元44中之后,DSP12可激活MIDI硬件单元18(80)。举例来说,DSP12可通过更新MIDI硬件单元18中的寄存器或通过向MIDI硬件单元18发送控制信号而激活MIDI硬件单元18。在激活MIDI硬件单元18之后,DSP12可等待直到DSP12从MIDI硬件单元18接收到中断(82)。在等待中断的同时,DSP12可处理并输出先前MIDI帧的数字波形。另外,DSP12也可产生下一MIDI帧的语音指示符的列表。在接收到中断之后,DSP12中的中断服务寄存器可设置从MIDI硬件单元18中的求和缓冲器40传递MIDI帧的数字波形的DME请求(84)。为了在正传递求和缓冲器40中的数字波形时避免长期硬件闲置,直接存储器交换请求可在三十二个32位字块中从求和缓冲器40传递数字波形。可通过求和缓冲器40中的防止处理元件34在求和缓冲器40中盖写数据的锁定机构来保持数字波形的数据完整性。因为可逐块地释放此锁定机构,所以直接存储器交换传递可与硬件执行并行进行。在DSP12从MIDI硬件单元18接收到MIDI帧的音频样本之后,DSP12可缓冲数字波形直到DSP12已向DAC14完全输出在从MIDI硬件单元18接收的MIDI帧的数字波形之前的MIDI帧的数位波形(86)。在DSP12已完全输出先前MIDI帧的数字波形之后,DSP12可输出从MIDI硬件单元18接收的当前MIDI帧的数字波形(88)。图5是说明音频装置4的MIDI硬件单元18中的协调模块32的实例操作的流程图。最初,协调模块32可从DSP12接收开始产生MIDI帧的数字波形的指令(100)。在从DSP12接收到所述指令之后,协调模块32可清除求和缓冲器40的内容(102)。举例来说,协调模块32可指令求和缓冲器40将求和缓冲器40中的数字波形全部设置为零。在协调模块32清除求和缓冲器40的内容之后,协调模块32可将DSP12所产生的语音识别符的列表从RAM单元10加载到链接列表存储器42中(104)。在加载语音指示符的链接列表之后,协调模块32可确定协调模块32是否已从处理元件34中的一者接收到指示处理元件已结束产生MIDI语音的数字波形的信号(106)。当协调模块32尚未从处理元件34中的一者接收到指示处理元件已结束产生MIDI语音的数字波形的信号时(106为"否"),处理元件34可返回且等待所述信号(106)。当协调模块32从处理元件34中的一者接收到指示处理元件已结束产生MIDI语音的数字波形的信号时(106为"是"),协调模块32可向RAM单元IO写入存储于与处理元件相关联的VPSRAM单元46中的一者中及WFU/LFO存储器39中的可能已由处理元件、波形获取单元36或LFO38改变的语音参数集合的一个或一个以上参数(108)。举例来说,在产生MIDI语音的波形的同时,处理元件34A可改变VPS存储器46A中的语音参数集合的特定参数。在此情况下,例如,处理元件34A可更新语音的语音参数以指示MIDI帧的末尾的语音的音量水平。通过将经更新的语音参数写回到RAM单元10,给定处理元件可开始产生下一MIDI帧中处于与当前MIDI帧所终止于的音量水平相同的音量水平的MIDI语音的数字波形。其它可写入参数可包括左右平衡、整体相移、由LF038产生的三角形波形的相移或其它声学特征。.在协调模块将参数写回到RAM单元IO之后,协调模块32可确定处理元件34是否已产生由列表中的语音指示符所指示的每一MIDI语音的数字波形(110)。举例来说,协17调模块32可维持指示语音指示符的链接列表中的当前语音指示符的指针。最初,此指针可指示链接列表中的第一语音指示符。如果处理元件34已针对列表中所指示的MIDI语音中的每一者产生数字波形(IIO为"是"),则协调模块32可向DSP12断言中断以指示MIDI帧的整体数字波形是完整的(112)。另一方面,如果处理元件34尚未针对列表中的语音指示符所指示的MIDI语音中的每一者产生数字波形(110为"否"),则协调模块32可识别处理元件34中闲置的一者(114)。如果所有处理元件34均不闲置(亦即,繁忙),则协调模块32可等待直到处理元件34中的一者闲置。在识别处理元件34中闲置的一者之后,协调模块32可将当前语音指示符所指示的语音参数集合的参数加载到VPSRAM单元44中与闲置处理元件相关联的一者中(112)。协调模块32可能仅将语音参数集合的与处理元件相关的那些参数加载到VPSRAM单元中。另外,协调模块32可将语音参数集合的与WFU36及LF038相关的参数加载到WFU/LFORAM单元39中(118)。协调模块32接着可使闲置处理元件能够开始产生MIDI语音的数字波形(120)。接下来,协调模块32可将当前语音指示符更新为列表中的下一语音指示符且返回以再次确定协调模块32是否已接收到指示处理元件34中的一者己完成产生MIDI语音的数字波形的信号(106)。图6是说明使用指定存储器地址的语音指示符的列表的实例DSP12的框图。如图6的实例中所说明,DSP12包括存储列表基础指针140的寄存器。列表基础指针140可指定链接列表存储器42中的语音指示符的列表142中的第一语音指示符的存储器地址。如果在列表142中不存在语音指示符(如在MIDI文件开始处可能的情形),则列表基础指针140的值可为空值地址(nulladdress)。另外,DSP12包括存储语音指示符数目寄存器144中的值的寄存器。语音指示符数目寄存器144中的值指定列表142中的语音指示符的数目的计数(tally)。在图6中所说明的实例数据结构中,列表142中的每一语音指示符可包含RAM单元10中的语音参数集合的存储器地址及链接列表存储器42中的下一语音指示符的存储器地址。列表142中的最后一个语音指示符可为列表142中的下一语音指示符的地址指定空值地址。RAM单元10可含有语音参数集合146的集合。RAM单元10中的每一语音参数集合可为指定语音参数集合中的语音参数的值的邻接存储器位置的块。第一语音参数的存储器位置的存储器地址可充当语音参数集合的存储器地址。在DSP12接收到MIDI文件的第一MIDI事件之前,列表142可能不含有任何语音指示符。为了反映列表142不含有任何语音指示符的事实,列表基础指针140的值可为空值存储器地址,且语音指示符数目寄存器144中的值可指定数目零。在MIDI文件的第一MIDI帧开始处,处理器8可向协调模块32提供在MIDI帧期间发生的MIDI事件的集合。举例来说,处理器8可向DSP12提供打开语音的MIDI事件、关闭语音的MIDI事件、与触后效果相关联的MIDI事件及产生其它所述效果的MIDI事件。为了处理MIDI事件,DSP12中的列表产生器模块156可在链接列表存储器42中产生链接列表142。一般而言,列表产生器模块156在每一MIDI帧期间不完全产生列表142。实情是,列表产生器模块156可再使用列表142中已存在的语音指示符。为了产生链接列表142,列表产生器模块156可确定列表142是否已包括指定DSP12所提供的MIDI事件的集合中所指定的每一MIDI语音的语音参数集合146中的一者的存储器地址的语音指示符。如果列表产生器模块156确定列表142包括MIDI语音中的一者的语音指示符,则列表产生器模块156可从列表142移除语音指示符。在从列表142移除语音指示符之后,列表产生器模块156可将语音指示符添加回列表142中。当列表产生器模块156将语音指示符添加回列表142中时,列表产生器模块156可在列表中的第一语音指示符处开始,且确定经移除的语音指示符所指示的MIDI语音与列表142中的第一语音指示符所指示的语音相比是否在声学上较为显著。换句话说,列表产生器模块156可确定哪一语音对于声音较为重要。列表产生器模块156可应用一个或一个以上试探算法以确定是MIDI事件中所指定的MIDI语音还是第一语音指示符所指定的MIDI语音在声学上较为显著。举例来说,列表产生器模块156可确定两个MIDI语音中的哪一者在当前MIDI帧期间具有最大平均音量。可应用其它心理声学技术来确定声学显著性。如果经移除的语音指示符所指示的MIDI语音比列表142中的第一语音指示符所指示的语音显著,则列表产生器模块156可将经移除的语音指示符添加到列表顶部。当列表产生器模块156将经移除的语音指示符添加到列表顶部时,列表产生器模块156可将列表基础指针的值改变为等于经移除的语音指示符的存储器地址。如果经移除的语音指示符所指示的MIDI语音不比第一语音指示符所指示的MIDI语音显著,则列表产生器模块156使列表142继续向下,直到列表产生器模块156识别出由列表142中的语音指示符中的一者所指示的与经移除的语音指示符所指示的MIDI语音相比较不显著的MIDI语音。当列表产生器模块156识别出所述MIDI语音时,列表产生器模块156可将经移除的语音指示符插入到列表142中所识别的MIDI语音的语音指示符的上方(亦即,在其之前)。如果经移除的语音指示符所指示的MIDI语音与列表142中的语音指示符所指示的所有其它MIDI语音相比在声学上较不显著,则列表产生器模块156将经移除的语音指示符添加到列表142的末尾。列表产生器模块156可针对MIDI事件的集合中的每一MIDI语音执行此过程。如果列表产生器模块156确定列表142不包括与MIDI事件相关联的MIDI语音的语音指示符,则列表产生器模块156可在链接列表存储器42中产生所述MIDI语音的新的语音指示符。在产生新的语音指示符之后,列表产生器模块156可以上文关于经移除的语音指示符而描述的方式将新语音指示符插入到列表142中。以此方式,列表产生器模块156可产生链接列表,其中以根据列表中的语音指示符所指示的MIDI语音的声学显著性的顺序来排列链接列表中的语音指示符。作为一个实例,列表产生器模块156可产生从MIDI帧中的最显著语音到最不显著语音而指示MIDI语音的语音指示符的列表。在图6的实例中,DSP12包括在产生列表142时帮助列表产生器模块156的一组指针。此组指针包括保持列表产生器模块156当前正使用的语音指示符的存储器地址的当前语音指示符指针148、保持列表产生器模块156正插入到列表142中的语音指示符的存储器地址的事件语音指示符指针150及保持列表产生器模块156在列表产生器模块156当前正使用的语音指示符之前所使用的语音指示符的存储器地址的先前语音指示符指针152。如果语音指示符数目寄存器144中的值超过语音指示符的最大数目,则列表产生器模块156可将与列表142中指示最不显著MIDI语音的语音指示符相关联的存储器解除分配。如果列表142中的语音指示符从最显著到最不显著而排列,则列表产生器模块156可通过跟随下一语音指示符存储器地址的链直到列表产生器模块156识别出包括指定空值存储器地址的下一语音指示符存储器地址的语音指示符而识别列表142中指示最不显著MIDI语音的语音指示符。在将与最后一个语音指示符相关联的存储器解除分配之后,列表产生器模块156可使语音指示符数目寄存器144中的值递减一。在列表产生器模块156产生列表142之后,列表产生器模块156可向协调模块提供列表基础指针140及语音指示符数目144的值。协调模块32可包括用以保持列表基础指针140及语音指示符数目144的这些值的寄存器(未图示)。协调模块32使用这些值来存取列表142且将列表142中的语音指示符所指示的MIDI语音指派给处理元件32。举例来说,当列表产生器模块156结束产生列表142时,协调模块32可使用列表产生器模块156所提供的列表基础指针140的值来将列表142加载到链接列表存储器42中。协调模块32接着可识别处理元件34中闲置的一者。协调模块32接着可获得RAM单元10中存储界定MIDI语音的语音参数集合的存储器位置的存储器地址,所述MIDI语音由列表142中的处于协调模块32中指示当前语音指示符的指针所指定的存储器位置处的语音指示符所指示。协调模块32接着可使用所获得的存储器地址来将语音参数集合中的至少一些语音参数存储于VPSRAM单元46中与闲置处理元件相关联的一者中。在将语音参数集合存储20于所述VPSRAM单元中之后,协调模块32可向处理元件发送开始产生语音的波形的信号。协调模块32可继续此操作,直到处理元件34已针对列表142中的语音指示符所指示的每一语音产生波形。DSP12及协调模块32对语音指示符的链接列表的使用可呈现若干优势。举例来说,因为DSP12对指示语音参数集合的语音指示符的链接列表进行分类及重新排列,所以不必对RAM单元10中的实际语音参数集合进行分类及重新排列。语音指示符可显著小于语音参数集合。因此,DSP12向RAM单元IO及从RAM单元IO移动(亦即,写入及读取)较少数据。因此,与DSP12对语音参数集合进行了分类及重新排列的情况相比,DSP12可需要从协调模块32到RAM单元10的总线上的较少带宽。此外,因为DSP12向RAM单元IO及从RAM单元IO移动较少数据,所以与DSP12移动了实际语音参数集合的情况相比,DSP12可消耗较少功率。又,对语音指示符的链接列表的使用可准许DSP12以任意次序向处理元件34提供语音参数集合。以任意次序向处理元件34提供语音参数集合在特定类型的音频处理中可能是有用的。另外,对指示符的链接列表的使用在不同于MIDI语音集合参数的识别符的环境中可具有适用性。举例来说,指示符可指示经预编程的数字滤波器而非MIDI语音参数集合。每一经预编程的数字滤波器可为双二次滤波器提供五个系数。双二次滤波器是滤出较远离极的频率的双极双零数字滤波器。双二次滤波器可用以对音频均衡器进行编程。与MIDI语音一样,第一数字滤波器与第二数字滤波器相比可较显著或较不显著。因此,应用数字滤波器的模块可使用对于数字滤波器参数的指示符的经分类链接列表以有效地应用一组数字滤波器。举例来说,音频装置4的模块可在DSP12产生数字波形之后对数字波形应用滤波器。图7是说明当DSP12从处理器8接收MIDI事件的集合时DSP12的示范性操作的流程图。最初,DS,12可从处理器8接收MIDI事件的集合(160)。在DSP12接收到MIDI事件的集合之后,列表产生器模块156可确定MIDI事件的集合是否为空(162)。如果MIDI事件的集合为空(162为"是"),则列表产生器模块156可向协调模块32提供列表基础指针140的值(164)。另一方面,如果MIDI事件的集合不为空(162为"否"),则列表产生器模块156可从MIDI事件的集合移除一事件(166)。在本文中将所述经移除事件称为"当前事件",且在本文中将与当前事件相关联的MIDI语音称为"当前语音"。在列表产生器模块156从MIDI事件的集合移除当前事件之后,列表产生器模块156可确定列表基础指针140的值是否为空值地址(168)。如果列表基础指针140的值不为空值地址(168为"否"),则列表产生器模块156可将当前语音的语音指示符插入到列表142中。图8及图9说明用于将语音指示符插入到列表142中的示范性程序。在列表产生器模块156将语音指示符插入到列表142中之后,列表产生器模块156可返回并再次确定MIDI事件的集合是否为空(162)。如果列表基础指针140的值指定空值地址(168为"是"),则列表产生器模块156可为当前语音的语音指示符分配链接列表存储器42中的存储器的邻接块(170)。在分配存储器的块之后,列表产生器模块156可在列表基础指针140中存储存储器的块的存储器地址(172)。列表产生器模块156接着可使语音指示符数目寄存器144中的值递增一(174)。另外,列表产生器模块156可初始化当前语音的语音指示符(176)。为了初始化语音指示符,列表产生器模块156可将语音指示符的下一语音指示符指针设置为空值,且将语音指示符的语音参数集合指针设置为当前语音的语音参数集合在语音参数集合146中的存储器地址。在初始化语音指示符之后,列表产生器模块156可返回并再次确定MIDI事件的集合是否为空(162)。图8是说明当DSP12将语音指示符插入到语音指示符的列表142中时DSP12的实例操作的流程图。确切地说,图8中的实例说明一操作,其中DSP12中的列表产生器模块156从列表142移除当前语音的语音指示符或产生当前语音的新的语音指示符以使得随后可将语音指示符插入于列表142中的合适位置处。在图8、图9、图10及图11中,将术语"语音指示符"縮写为"V丄",且将术语"语音参数集合"縮写为"V.RS."。图8的实例中所说明的流程图在标记为"A"且对应于图7的实例中的以圆标记的"A"的圆圈处开始。最初,列表产生器模块156可将当前语音指示符指针148的值设置为列表基础指针140的值(180)。接着,列表产生器模块156可将先前语音指示符指针152的值设置为空值(182)。在将先前语音指示符指针15,的值设置为空值之后,列表产生器模块156可确定当前语音指示符(亦即,具有等于当前语音指示符指针148中的存储器地址的存储器地址的语音指示符)的语音参数指针是否等于当前事件的语音的语音参数集合的存储器地址(184)。如果列表产生器模块156确定当前语音指示符的语音参数指针等于语音参数集合的存储器地址(184为"是"),则列表产生器模块156可确定先前语音指示符指针152的值是否为空值地址(186)。如果列表产生器模块156确定先前语音指示符指针152的值不为空值地址(186为"否"),则列表产生器模块156可将先前语音指示符(亦即,具有等于先前语音指示符指针152中的存储器地址的存储器地址的指示符)的下一语音指示符指针设置为当前语音指示符的下一语音指示符指针的值(188)。在设置先前语音指示符的下一语音指示符指针之后,列表产生器模块156可将事件语音指示符指针150的值设置为当前语音指示符指针148的值(190)。列表产生器模块156也可在先前语音指示符指针152的值为空值(186为"是")时将事件语音指示符指针150的值设置为当前语音指示符指针148的值。以此方式,列表产生器模块156不试图设置空值存储器地址处的语音指示符的下一语音指示符指针。在列表产生器模块156设置事件语音指示符指针148的值之后,列表产生器模块156可将当前语音指示符指针148的值设置为列表基础指针140的值(192)。列表产生器模块156接着可使用图9中所说明的实例操作来重新插入由事件语音指示符指针150指向的语音指示符。如果列表产生器模块156确定当前语音指示符的语音参数集合不等于语音参数集合的存储器地址(184为"否"),则列表产生器模块156可确定当前语音指示符的下一语音指示符指针的值是否为空值(194)。换句话说,列表产生器模块156可确定当前语音指示符是否为列表142中的最后语音指示符。如果列表产生器模块156确定当前语音指示符的下一语音指示符指针的值不为空值(194为"否"),则列表产生器模块156可将先前语音指示符指针152的值设置为当前语音指示符指针148的值(196)。列表产生器模块156接着可将当前语音指示符指针148的值设置为当前语音指示符中的下一语音指示符指针的值(19S)。以此方式,列表产生器模块156可使当前语音指示符前进到列表142中的下一语音指示符。列表产生器模块156接着可返回并再次确定新的当前语音指示符的语音参数集合指针是否等于当前语音的语音参数集合的地址(184)。另一方面,如果列表产生器模块156确定当前语音指示符的下一语音指示符指针为空值(194为"是"),则列表产生器模块156已到达列表142的末尾而未定位当前语音的语音指示符。出于此原因,列表产生器模块156可产生当前语音的新的语音指示符。为了产生当前语音的新的语音指示符,列表产生器模块156可为新的语音指示符分配链接列表存储器42中的存储器(200)。列表产生器模块156接着可将事件语音指示符指针148的值设置为新语音指示符的存储器地址(202)。新语音指示符现在是事件语音指示符。接下来,列表产生器模块156可使语音指示符数目寄存器144的值递增一(204)。在使语音指示符数目寄存器144的值递增之后,列表产生器模块156可设置事件语音指示符的语音参数集合指针以含有当前语音的语音参数集合的存储器地址(206)。列表产生器模块156接着可将当前语音指示符指针148的值设置为列表基础指针140的值(192),且接着可根据图9中所说明的实例操作而将事件语音指示符插入到列表142中。图9是说明当DSP将语音指示符插入到列表142中时DSP12的示范性操作的流程图。23图9的实例中所说明的流程图在标记为"B"且对应于图8的实例中的以圆标记的"B"的圆圈处开始。最初,DSP12中的列表产生器模块156可从RAM单元10检索由事件语音指示符指示的语音参数集合(210)。列表产生器模块156接着可从RAM单元IO检索由当前语音指示符指示的语音参数集合(212)。在检索两个语音参数集合之后,列表产生器模块156可基于语音参数集合中的值确定MIDI语音的相对声学显著性(214)。如果由事件语音指示符指示的MIDI语音比由当前语音指示符指示的MIDI语音显著(214为"是"),则列表产生器模块156可将事件语音指示符中的下一语音指示符设置为当前语音指示符指针148的值(216)。在设置下一语音指示符之后,列表产生器模块156可确定当前语音指示符指针148的值是否等于列表基础指针140的值(218)。换句话说,列表产生器模块156可确定当前语音指示符是否为列表142中的第一语音指示符。如果当前语音指示符指针148的值等于列表基础指针140的值(218为"是"),则列表产生器模块156可将列表基础指针140的值设置为事件语音指示符指针150的值(220)。以此方式,事件语音指示符变为列表142中的第一语音指示符。否则,如果当前语音指示符指针148的值不等于列表基础指针140的值(218为"否"),则列表产生器模块156可将先前语音指示符中的下一语音指示符指针的值设置为事件语音指示符指针150的值(222)。以此方式,列表产生器模块156可将事件语音指示符链接到列表142中。另一方面,如果由事件语音指示符指示的MIDI语音不比由当前语音指示符指示的MIDI语音显著(214为"否"),则列表产生器模块156可确定当前语音指示符中的下一语音指示符指针的值是否为空值(224)。如果下一语音指示符指针的值为空值,则当前语音指示符为列表142中的最后语音指示符。如果当前语音指示符中的下一语音指示符指针的值为空值(224为"是"),则列表产生器模块156可将当前语音指示符中的下一语音指示符指针的值设置为事件语音指示符指针150的值(226)。以此方式,列表产生器模块156可在由事件语音指示符所指示的语音为列表142中最不显著的语音时将事件语音指示符添加到列表142的末尾。然而,如果当前语音指示符中的下一语音指示符指针不为空值(224为"否"),则当前语音指示符不为列表142中的最后语音指示符。出于此原因,列表产生器模块156可将先前语音指示符152的值设置为当前语音指示符指针148的值(228)。接着,列表产生器模块156可将当前语音指示符指针148的值设置为当前语音指示符中的下一语音指示符指针的值(230)。在设置当前语音指示符指针148的值之后,列表产生器模块156可返回以再次检索由当前语音指示符所指示的语音参数集合(212)。图10是说明当DSP在列表142中的语音指示符的数目超过语音指示符的最大数目时从列表142移除语音指示符时DSP12的示范性操作的流程图。举例来说,DSP12可将列表142中的语音指示符的最大数目限制为十。在此实例中,MIDI硬件单元18将仅产生MIDI帧中的十个在声学上最为显著的MIDI语音的数字波形。DSP12可设置列表142中的语音指示符的最大数目,因为在无语音的受限数目的情况下,MIDI硬件单元18可能不能够在MIDI帧所准许的时间内处理列表142中的所有语音。另外,DSP12可设置列表142中的语音指示符的最大数目以保留链接列表存储器42中的空间。另外,列表142的语音指示符的最大数目可对将新语音指示符插入到列表142中所需的计算的数目设置上限。对计算的数目设置上限可为实时产生MIDI帧的数字波形的要求。最初,DSP12中的列表产生器模块156可确定语音指示符数目寄存器144的值是否大于列表142中的语音指示符的最大数目(240)。如果语音指示符数目寄存器144中的值不大于语音指示符的最大数目(240为"否"),则可能无需从列表142移除任何语音指示符。然而,在一些实例中,列表产生器模块156可扫描贯穿列表142且移除当前不活动或者在给定时间内未活动的语音的语音指示符。如果语音指示符数目寄存器144中的值大于语音指示符的最大数目(240为"是"),则列表产生器模块156可将当前语音指示符指针148的值设置为列表基础指针140的值(242)。接下来,列表产生器模块156可将先前语音指示符指针152的值设置为空值(244)。在此点处,列表产生器模块156可确定当前语音指示符的下一语音指示符指针的值是否为空值(亦即,当前语音指示符是否为列表142中的最后语音指示符)(248)。如果当前语音指示符的下一语音指示符指针的值不为空值(248为"否"),则列表产生器模块156可将先前语音指示符指针152的值设置为当前语音指示符指针148的值(250)。列表产生器模块156接着可将当前语音指示符指针148的值设置为当前语音指示符的下一语音指示符指针的值(252)。接下来,列表产生器模块156可返回以再次确定新的当前语音指示符的下一语音指示符指针的值是否等于空值(248)。如果当前语音指示符的下一语音指示符指针的值等于空值(248为"是"),则当前语音指示符为列表142中的最后语音指示符。列表产生器模块156接着可从列表142移除最后语音指示符。为了从列表142移除最后语音指示符,列表产生器模块156可将先前语音指示符的下一语音指示符指针设置为空值(254)。接下来,协调模块32将链接列表存储器42中用于当前语音指示符的存储器解除分配(256)。协调模块32接着可使语音指示符数目寄存器144中的值递减(258)。在使语音指示符数目寄存器144中的值递减之后,列表产生器模块156可返回以再次确定语音指示符数目寄存器144中的值是否大于语音指示符的最大允许数目(240)。图11是说明使用指定可根据其导出存储器地址的索引值的语音指示符的列表的实例DSP12的框图。在图12的实例中,列表142中的每一语音指示符包括一包括四个语音参数集合(VPS)索引值的32位字及列表142中的下一语音指示符的存储器地址。块260中的每一VPS索引值可指定与语音参数集合的块262中的语音参数集合相关联的号码。举例来说,第一VPS索引值可指定号码"2"来指示语音参数集合的块262中的第二语音参数集合。此外,块260中的每一VPS索引值可以RAM单元IO中的四字节字中的一个字节(亦即,八个位)表示。因为VPS索引值是以一个字节表示,所以单个VPS索引值可指示256(亦即,28=256)个语音参数集合中的一者。另外,在图ll的实例中,RAM单元IO将每一语音参数集合存储于存储器位置的邻接块262中。因为RAM单元IO将每一语音参数集合存储于邻接块中,所以一个语音参数集合在紧随先前语音参数集合的存储器位置中开始。当DSP12或协调模块32需要存取语音参数集合的块262中的语音参数集合时,DSP12或协调模块32可首先使块260中的语音参数集合的索引值乘以集合大小寄存器268中所含有的值。集合大小寄存器268中所含有的值可等于单个语音参数集合在RAM单元10中占据的可寻址位置的数目。DSP12或协调模块32接着可添加集合基础指针寄存器266的值。集合基础指针寄存器266中所含有的值可等于块262中的第一语音参数集合的存储器地址。因此,通过使语音参数集合的索引乘以语音指针集合的大小且接着添加第一语音参数集合的存储器地址,DSP12或协调模块32可导出块262中的语音参数集合的第一存储器地址。DSP12可在很大程度上以与图8到图10中协调模块32控制列表142中的语音指示符相同的方式来控制图11的列表142中的语音指示符。然而,在使用此示范性数据结构时,DSP12可对语音指示符内的VPS索引值进行分类。图11中所说明的实例数据结构可具有优于图6中所说明的实例数据结构的优势,因为图11中所说明的数据结构可能需要链接列表存储器42中的较少存储器位置来存储指向语音参数集合的相同数目的指针。然而,图11中所说明的数据结构可能需要DSP12及协调模块32执行额外计算。图12是说明示范性处理元件34A的细节的框图。虽然图12的实例说明处理元件34A的细节,但这些细节可适用于处理元件34中的其它者。如图12的实例中所说明,处理元件34A可包含若干组件。这些组件可包括(但不限于)控制单元280、算术逻辑单元(ALU)282、多路复用器284及一组寄存器286。另外,处理元件34A可包括用于VPSRAM单元46A的读取接口先入先出(FIFO)292、用于VPSRAM单元46A的写入接口FIFO、用于LF038的接口FIFO296、用于WFU36的接口FIFO298、用于求和缓冲器40的接口FIFO300及用于求和缓冲器40中的RAM的接□FIFO302。控制单元280可包含读取指令且基于所述指令输出控制处理元件34A的控制信号的一组电路。控制单元280可包括存储当前指令的存储器地址的程序计数器290、存储由处理元件34执行的第一程序循环的计数的第一循环计数器304及存储由处理元件34执行的第二程序循环的计数的第二循环计数器306。ALU282可包含对存储于寄存器286中的各者中的值执行各种算术运算的电路。ALU282可经特殊化以执行对于产生MIDI语音的数字波形具有特殊效用的算术运算。寄存器286可为可保持带符号或无符号值的一组八个32位寄存器。多路复用器284基于由控制单元280输出的控制信号可将来自ALU282、接口读取FIFO292、接口FIFO296、接口FIFO298及接口FIFO302的输出引导到寄存器286中的特定者。处理元件34A可使用经特殊化以产生MIDI语音的数字波形的程序指令集合。换句话说,处理元件34A中所使用的程序指令集合可包括在例如精简指令集计算机(RISC)指令集或例如x86指令集等复杂指令集架构指令集的通用指令集中不存在的程序指令。此外,处理元件34A中所使用的程序指令集合可排除在通用指令集中存在的一些程序指令。可将处理元件34A所使用的程序指令分类为算术逻辑单元(ALU)指令、加载/存储指令及控制指令。处理元件34A所使用的每一类别的程序指令可为不同长度。举例来说,ALU指令可为二十位长,加载/存储指令可为十八位长,且控制指令可为十六位长。ALU指令为使得控制单元280将控制信号输出到ALU282的指令。在一种示范性格式中,每一ALU指令可为二十位长。举例来说,ALU指令的位19:18经预留,位17:14含有ALU指令识别符,位13:11含有寄存器286中的第一者的识别符,位10:8含有寄存器286中的第二者的识别符,位7:5含有待移位的位的数目或寄存器286中的第三者的识别符,位4:2含有寄存器286中为目的地的一者的识别符,且位1:0含有ALU控制位。在本文中可将ALU控制位缩写为"ACC"。如下文将较为详细论述的,ALU控制位控制ALU指令的操作。由处理元件34A使用的ALU指令集合可包括以下指令MULTSS:语兹..MULTSSRx、Ry、移位量、Rz、ACC^激,使得控制单元280输出指令ALU282执行寄存器Rx与Ry中的带符号值的乘法27的控制信号,且接着使乘积向左移位由"移位量"指定的量。在使乘积移位之后,ALU282从乘积提取由ACC指定的位。ALU282接着输出这些位。如果ACC=0,则ALU282提取乘积的较低32个位。如果ACC=1,则ALU282提取乘积的中间32个位。如果ACC=2,则ALU282提取乘积的较高32个位。此指令还使得控制单元280向多路复用器284输出控制信号以将来自ALU282的输出引导到寄存器286中的Rz。MULTSU:语兹;MULTSURx、Ry、移位量、Rz、ACC劝蟲^使得控制单元280输出指令ALU282执行Rx中的带符号值与Ry中的无符号值的乘法的控制信号,且接着使乘积向左移位由"移位量"指定的量。在使乘积移位之后,ALU282从乘积提取由ACC指定的位。ALU282接着输出这些位。如果ACC=0,则ALU282提取乘积的较低32个位。如果ACC=1,则ALU282提取乘积的中间32个位。如果ACC=2,则ALU282提取乘积的较高32个位。此指令还使得控制单元280向多路复用器284输出控制信号以将来自ALU282的输出引导到寄存器286中的Rz。MULTUU:语法,MULTUURx、Ry、移位量、Rz、ACC劝y^;使得控制单元280输出指令ALU282执行寄存器Rx与Ry中的无符号值的乘法的控制信号,且接着使乘积向左移位由"移位量"指定的量。在使乘积移位之后,ALU282从乘积提取由ACC指定的位。ALU282接着输出这些位。如果ACC=0,则ALU282提取乘积的较低32个位且将这32个位存储于Rz中。如果ACC=1,则ALU282提取乘积的中间32个位。如果ACC=2,则ALU282提取乘积的较高32个位。此指令还使得控制单元280向多路复用器284输出控制信号以将来自ALU282的输出引导到寄存器286中的Rz。MACSS:语兹,MACSSRx、Ry、移位量、Rz、ACC劝激,使得控制单元280输出指令ALU282执行寄存器Rx与Ry中的带符号值的乘法的控制信号,且接着使乘积向左移位由"移位量"指定的量。在使乘积移位之后,ALU282从乘积提取由ACC指定的32个位且接着将这32个位添加到Rz中的值且输出所得位。如果ACC-O,则ALU282提取乘积的较低32个位。如果ACC4,则ALU282提取乘积的中间32个位。如果ACC-2,则ALU282提取乘积的较高32个位。此指令还使得控制单元280向多路复用器284输出控制信号以将来自ALU282的输出引导到寄存器286中的MACSU语兹.'MACSURx、Ry、移位量、Rz、ACC劝虔:使得控制单元280输出指令ALU282执行Rx中的带符号值与Ry中的无符号值的乘法的控制信号,且接着使乘积向左移位由"移位量"指定的量。在使乘积移位之后,ALU282从乘积提取由ACC指定的32个位。ALU282接着将这32个位添加到Rz中的值且输出所得位。如果ACC=0,则ALU282提取乘积的较低32个位。如果ACC=1,则ALU282提取乘积的中间32个位。如果ACC=2,则ALU282提取乘积的较高32个位。此指令还使得控制单元280向多路复用器284输出控制信号以将来自ALU282的输出引导到寄存器286中的Rz。MACUU语^:MACUURx、Ry、移位量、Rz、ACC劝蟲使得控制单元280输出指令ALU282执行寄存器Rx与Ry中的无符号值的乘法的控制信号,且接着使乘积向左移位由"移位量"指定的量。在使乘积移位之后,ALU282从乘积提取由ACC指定的32个位且接着将这32个位添加到Rz中的值。ALU282接着输出所得位。如果ACC=0,则ALU282提取乘积的较低32个位。如果ACC=1,则ALU282提取乘积的中间32个位。如果AC02,则ALU282提取乘积的较高32个位。此指令还使得控制单元280向多路复用器284输出控制信号以将来自ALU282的输出引导到寄存器286中的Rz。MULTU画IN语法..MULTUUMINRx、Ry、移位量、Rz、ACC劝虔,使得控制单元280输出指令ALU282执行寄存器Rx与Ry中的无符号值的乘法的控制信号,且接着使乘积向左移位由"移位量"指定的量。ALU282接着从乘积提取由ACC指定的位且确定这些位是否表示小于存储于Rz中的数目的数目。如果这些位表示小于存储于Rz中的数目的数目,则ALU282输出这些位。如果ACC^,则ALU282提取乘积的较低32个位。如果ACC=1,则ALU282提取乘积的中间32个位。如果ACC=2,则ALU282提取乘积的较高32个位。此指令还使得控制单元280向多路复用器284输出控制信号以将来自ALU282的输出引导到寄存器286中的Rz。MACSSD语法,MACSSDRx、Ry、移位量、Rz、ACC劝蟲~使得控制单元280输出指令ALU282执行寄存器Rx与Ry中的带符号值的乘法的控制信号,且接着使乘积向左移位由"移位量"指定的量。ALU282接着从乘积提取由ACC指定的32个位。在从乘积提取这些位之后,ALU282将这32个位添加到存储于Rz之后的寄存器(亦即,Rz+1)中的值。在添加这些值之后,ALU282输出总和。如果ACC=0,则ALU282提取乘积的较低32个位。如果ACC=1,则ALU282提取乘积的中间32个位。如果ACC=2,则ALU282提取乘积的较高32个位。此指令还使得控制单元280向多路复用器284输出控制信号以将来自ALU282的输出引导到寄存器286中的Rz。MACSUD语法,MACSSDRX、Ry、移位量、Rz、ACC劝虔..使得控制单元280输出指令ALU282执行寄存器Rx中的带符号值与寄存器Ry中的无符号值的乘法的控制信号,且接着使乘积向左移位由"移位量"指定的量。ALU282接着从乘积提取由ACC指定的32个位。在从乘积提取这些位之后,ALU282将这32个位添加到存储于Rz之后的寄存器(亦即,Rz+1)中的值。在添加这些值之后,ALU282输出总和。如果ACC=0,则ALU282提取乘积的较低32个位。如果ACC=1,则ALU282提取乘积的中间32个位。如果ACX^2,则ALU282提取乘积的较高32个位。此指令还使得控制单元280向多路复用器284输出控制信号以将来自ALU282的输出引导到寄存器286中的Rz。MACUUD语兹.'MACSSDRX、Ry、移位量、Rz、ACC劝激,使得控制单元280输出指令ALU282执行寄存器Rx与Ry中的无符号值的乘法的控制信号,且接着使乘积向左移位由"移位量"指定的量。ALU282接着从乘积提取由ACC指定的32个位。在从乘积提取这些位之后,ALU282将这32个位添加到存储于Rz之后的寄存器(亦即,Rz+1)中的值。在添加这些值之后,ALU282输出总和。如果ACC=0,则ALU282提取乘积的较低32个位。如果ACC=1,贝UALU282提取乘积的中间32个位。如果ACC=2,则ALU282提取乘积的较高32个位。此指令还使得控制单元280向多路复用器284输出控制信号以将来自ALU282的输出引导到寄存器286中的Rz。MASSS语兹,MASSSRx、Ry、移位量、Rz、ACC劝;^,使得控制单元280输出指令ALU282执行寄存器Rx与Ry中的带符号值的乘法的控制信号,且接着使乘积向左移位由"移位量"指定的量。ALU282接着从乘积提取由ACC指定的32个位。在提取位之后,ALU282从Rz中的值减去这些位且输出所得位。如果ACX^0,则ALU282提取乘积的较低32个位。如果ACCd,则ALU282提取乘积的中间32个位。如果ACC=2,则ALU282提取乘积的较高32个位。此指令还使得控制30单元280向多路复用器284输出控制信号以将来自ALU282的输出引导到寄存器286中的Rz。MASSU语总.'MASSSRx、Ry、移位量、Rz、ACC劝虔..使得控制单元280输出指令ALU282执行寄存器Rx中的带符号值与寄存器Ry中的无符号值的乘法的控制信号,且接着使乘积向左移位由"移位量"指定的量。ALU282接着从乘积提取由ACC指定的32个位。在提取位之后,ALU282从Rz中的值减去这些位且输出所得位。如果ACC-0,则ALU282提取乘积的较低32个位。如果ACC^,则ALU282提取乘积的中间32个位。如果ACC=2,则ALU282提取乘积的较高32个位。此指令还使得控制单元280向多路复用器284输出控制信号以将来自ALU282的输出引导到寄存器286中的Rz。MASUU语法.'MASUURx、Ry、移位量、Rz、ACC劝虔,使得控制单元280输出指令ALU282执行寄存器Rx与Ry中的无符号值的乘法的控制信号,且接着使乘积向左移位由"移位量"指定的量。控制信号还使得ALU282从乘积提取由ACC指定的32个位。在提取位之后,ALU282从Rz中的值减去这些位且输出所得值。如果ACC二O,则ALU282提取乘积的较低32个位。如果ACCd,贝!JALU282提取乘积的中间32个位。如果ACC-2,则ALU282提取乘积的较高32个位。此指令还使得控制单元280向多路复用器284输出控制信号以将来自ALU282的输出引导到寄存器286中的Rz。EGCOMP语法..EGCOMPRx、Ry、移位量、Rz、ACC劝#&使得控制单元280基于界定处理元件34A当前正处理的MIDI语音的语音参数集合的控制字而选择一操作。EGCOMP指令还使得控制单元280输出指令ALU282执行选定操作的控制信号。在第一模式中,ALU282使Rx中的值与Ry中的值相加且输出所得总和。在第二模式中,ALU282执行Rx中的值与Ry中的值的无符号乘法,使乘积向左移位移位量中所指定的量,且接着输出经移位的乘积的最高有效的三十二(32)个位。在第三模式中,ALU282输出Rx中的值。在第四模式中,ALU282输出Ry的值。在EGCOMP指令的环境中,为零的ACC值可使得控制单元280输出控制信号以指令ALU282计算当前MIDI语音的音量包络的新值。为一的ACC值可使得控制单元280输出控制信号以指令ALU282计算当前MIDI语音的新的调制包络。EGCOMP指令还使得控制单元280向31多路复用器284输出控制信号以将来自ALU282的输出引导到寄存器286中的Rz。在执行EGCOMP指令中与一模式相关联的操作之前,ALU282首先计算所述模式。举例来说,ALU282可使用以下等式来计算模式裙式v戸.Co/Uro/Wni(YACC^S+wcow^/一/c^—coww^(7:0)*2+7),'换句话说,"模式"的值等于当前语音参数集合的控制字中的两个位。可通过执行以下步骤来确定那两个位中较高有效的一者的索引(1)通过使ACC的值乘以八(亦即,使ACC的值的按位表示向左移位三个位置)而产生第一乘积。(2)通过使第二循环计数器的两个最低有效位乘以二(亦即,使ACC的值的按位表示向左移位一个位置)而产生第二乘积。(3)使第一乘积、第二乘积及数字一相加。可通过执行相同步骤(除了在第三步骤中不添加数字一)而确定控制字的两个位中较低有效的一者的索引。举例来说,控制字可等于0x0000807(亦即,0b0000000000000000010000000111)。此外,ACC的值可为0b0001,且第二循环计数器的值可为0b0001。在此实例中,控制字中较高有效位的索引为0b0Qffii071(亦即,十进制的数字十一),且控制字中较低有效位的索引为0b0QQQi0/0(亦即,十进制的数字十)。在先前语句中,索引值的加下划线的位表示来自ACC的位,且索引值的斜体的位表示来自第二循环计数器的位。因此,模式为01(亦即,十进制的数字一),因为值O及l分别处于控制字的位置ll及10处。因为模式为01,所以ALU282执行Rx中的值与Ry中的值的无符号乘法,使乘积向左移位移位量中指定的量,且接着输出经移位的乘积的最高有效的三十二(32)个位。包络产生是一种为个别音符的音量或调制质量建模的方法。每一音符可具有若干阶段。举例来说,音符可具有延迟阶段、起声阶段(attackphase)、保持阶段、衰退阶段、持续阶段及释放阶段。延迟阶段可界定在起声阶段开始之前的时间的量。在起声阶段期间,音量或调制水平增大到峰值水平。在保持阶段期间,音量或调制水平维持于峰值水平。在衰退阶段期间,音量或调制水平下降到持续水平。在持续水平期间,音量或调制水平维持于持续水平。在释放阶段期间,音量或调制水平下降到零。此外,音量或调制水平的改变可为线性或指数的。可以子帧为单位来界定包络产生阶段的长度。术语"子帧"可指代MIDI帧的四分之一。举例来说,如果MIDI帧为10毫秒,则子帧为2.5毫秒。举例来说,MIDI语音的起声阶段可持续一个子帧,MIDI语音的衰退阶段可持续一个子帧,且MIDI语音的持续阶段可持续两个子帧。EGCOMP指令执行操作以执行包络产生。举例来说,添加操作(亦即,模式OO)可对应于音量或调制水平在子帧期间的线性斜坡上升(例如,在起声阶段期间)或斜坡下降(亦即,在衰退或释放阶段期间)。乘法操作(亦即,模式01)可对应于音量或调制水平在子帧期间的指数斜坡上升或斜坡下降(亦即,在衰退或释放阶段期间)。指派操作(亦即,模式10及11)可对应于音量或调制强度在子帧期间的持续。在控制字中,位1:0可指示针对音量在第一子帧中使用哪一EGCOMP模式;位3:2可指示针对音量在第二子帧中使用哪一EGCOMP模式;位5:4可指示针对音量在第三子帧中使用哪一EGCOMP模式;位7:6可指示针对音量在第四子帧中使用哪一EGCOMP模式;位9:8可指示针对调制在第一子帧中使用哪一EGCOMP模式;位11:10可指示针对调制在第二子帧中使用哪一EGCOMP模式;位13:12可指示针对调制在第三子帧中使用哪一EGCOMP模式;且位15:14可指示针对调制在第四子帧中使用哪一EGCOMP模式。加载/存储指令是从处理元件34A外部的若干模块中的一者读取信息或向其写入信息的指令。当控制单元280遇到加载/存储指令时,控制单元280中断(block)直到加载/存储指令完整为止。在一种示范性格式中,每一加载/存储指令为十八位长。举例来说,加载/存储指令的位17:16经预留,位15:13含有加载/存储指令识别符,位12:6含有加载源或存储目的地地址,位5:3含有寄存器286中的第一者的识别符,且位2:0含有寄存器286中的第二者的识别符。处理元件34A所使用的加载/存储指令集合可包括以下指令LOADDATA语兹,LOADDATA地址、Ry、Rz。劝虔,如果Ry等于Rz,则在Ry中加载地址处的值。如果地址为偶数,则分别在寄存器Ry及Rz中加载地址及(地址+l)处的值。如果地址为奇数,则分别在Ry及Rz中加载(地址-l)及地址处的值。STOREDATA语法,STOREDATA地址、Ry、Rz。劝虔,如果Ry等于Rz,则将Ry的值存储到地址。如果地址为偶数,则分别在地址及(地址+l)处存储Ry及Rz处的值。如果地址为奇数,则分别在(地址-l)及地址处存储Ry及Rz处的值。LOADSUM语兹,LOADSUMRx、Ry。劝#&向寄存器Ry及Rz中加载求和缓冲器40中由样本计数指示的值。LOADSUM指令中所使用的样本计数为使用下文描述的STORESUM指令的相同计数。LOADFIFO语法;LOADFIFOfifo—low—high、fifo—signed一unsigned、Rx。劝虔,从WFU接口FIFO298的顶部(head)移除一值且将所述值存储于Rx中。寄存器286中加载所述值的一者及如何将所述值加载到所述寄存器中取决于fifo一low—high旗标及fifo—signed—unsigned旗标。如果fifo—lowjiigh为0,则将值加载到Rx的较低的16个位中。如果fifo一low一high为1,则将值加载到Rx的较高的16个位中。如果fifo—signed—unsigned为0,则将值存储为无符号数字。如果fifo—signed—unsigned为1,则将值存储为带符号数字且使值带符号扩展为32位。然而,如果将fifo—low—high旗标设置为1,则fifo—signecLunsigned旗标不具有作用。STOREWFU语兹,STOREWFURx。劝能-将Rx中的值发送到WFU36。STORES画语法;STORESUMacc—sat—mode、Rx、Ry。劝^,将寄存器Rx及Ry中的值存储到求和缓冲器40。另外,此指令发送隐含地取决于第一及第二循环计数器的样本计数器。样本计数器描述数字波形的哪一样本当前正由处理元件34A处理。当控制单元280从协调模块32接收到复位命令时,控制单元280将所述值初始化为零。随后,控制单元280在每次控制单元280遇到STORESUM指令时使样本计数器递增一。控制单元280可将样本计数器作为控制信号输出到求和缓冲器40。acc一sat—mode参数可界定求和缓冲器40是否使样本的值饱和化。饱和化可在样本的值上升到针对样本可存储的最大数目以上或下降到针对样本可存储的最小数目以下时发生。如果启用饱和化,则求和缓冲器40可在使&及Ry的值相加会使得样本的值上升到针对样本可表示的最大数目以上或下降到针对样本可表示的最小数目以下时将值维持于最大数目或最小数目。如果未启用饱和化,则求和缓冲器40可在使Rx及Ry的值相加时使样本的数目上滚。另外,acc—sat—mode参数可确定求和缓冲器40是用寄存器&及Ry中的值替代样本的值还是将寄存器Rx及Ry中的值添加到求和缓冲器40中的样本的值。以下图表可说明acc—sat—mode参数的示范性操作<table>tableseeoriginaldocumentpage34</column></row><table>10将输入与求和缓冲器ram中的现有元素累加。不对经累加的输出执行饱和化。11将输入与求和缓冲器ram中的现有元素累加。输出在其被存储回到求和缓冲器40之前经饱和化。LOADLFO语兹,LOADLFOlfo—id、Ifo—update、Rx其中(lfojdH待读取的LFO的类型2位00:modLfo》音高01:modLfo^增益10:modLfo—频率拐角(frequencycorner)11:vibLfo+音高(lfo一update^在当前输出之后更新哪一参数2位00:无更新01:仅更新LFO值10:仅更新LFO相位11:更新LFO值及相位两者。劝虔,从具有由"Ifo—id"指定的识别符的LFO38载入一值到Rx。另外,此指令指令LFO38在将值加载Rx之后更新哪一参数。如上文所论述,LFO38可产生一个或一个以上精确的三角形数字波形。对于处理元件34中的每一者,LF038可提供四个输出值调制音高值、调制增益值、调制频率拐角值及颤音音高值。这些输出值中的每一者可表示三角形数字波形上的一变化。当控制单元280读取LOADLFO指令时,控制单元280可向LFO38输出表示"lfo—id"参数的控制信号。表示"lfo一id"参数的控制信号可指令LF038将输出值中的一者中的值发送到处理元件34A中的接口FIFO296。举例来说,如果控制单元280发送表示"Ifo—id"的值Ol的控制信号,则LF038可发送调制增益输出值的值。另夕卜,控制单元280可向多路复用器284输出控制信号以将来自接口FIFO296的输出引导到寄存器286中的寄存器Rz。另外,当控制单元280读取LOADLFO指令时,控制单元280可向LFO38输出表示"Ifo—update"参数的控制信号。表示"Ifo—update"参数的控制信号指令LFO38如何更新输出值。当LFO38接收到表示"Ifo—叩date"参数的控制信号时,LFO38可基于处理元件34A当前正处理的MIDI语音的语音参数集合而选择一操作来执行。举例来说,LFO38可使用语音参数集合的控制字来确定LFO38是处于"延迟"状态还是处于"产生"状态中。为了确定LF038是处于"延迟"状态还是处于"产生"状态中,LF038可存取存储于VPSRAM46A中的语音参数集合的控制字的位。举例来说,控制字的位23:16可确定LFO是处于"产生"模式还是处于"延迟"状态中。在"产生"状态中,LFO38可使音高的参数倍增。在"延迟"状态中,LFO38不使音高的参数倍增。举例来说,控制字的位16可指示LFO38的调制模式对于当前MIDI帧的第一子帧是处于延迟状态还是处于产生状态中;位17可指示LF038的调制模式对于当前MIDI帧的第二子帧是处于延迟状态还是处于产生状态中;位18可指示LF038的调制模式对于当前MIDI帧的第三子帧是处于延迟状态还是处于产生状态中位19可指示LF038的调制模式对于当前MIDI帧的第四子帧是处于延迟状态还是处于产生状态中。另外,控制字的位20可指示LFO38的颤音模式对于当前MIDI帧的第一子帧是处于延迟状态还是处于产生状态中;控制字的位21可指示LFO38的颤音模式对于当前MIDI帧的第二子帧是处于延迟状态还是处于产生状态中;控制字的位22可指示LF038的颤音模式对于当前MIDI帧的第三子帧是处于延迟状态还是处于产生状态中;且控制字的位23可指示LFO38的颤音模式对于当前MIDI帧的第四子帧是处于延迟状态还是处于产生状态中。在选择操作(亦即,是在"延迟"模式还是在"产生"模式中执行)之后,LFO38可执行选定操作。如果LFO38处于延迟状态中,则LFO38可针对所述模式将由"Ifo—id"参数识别的LFO的模式的偏差值存储到LFO38的输出寄存器中。另一方面,如果LFO38处于产生状态中,则LFO38可首先确定"Ifo—update"参数的值是否等于2或3。如果"Ifo—update"的值等于2或3,则LFO38可更新LFO相位或更新LFO值及相位。如果"Ifo—update"参数的值等于2或3,则LFO38可通过向LFO的当前相位添加LFO比而更新LFO的相位。接下来,LFO38可确定"Ifo—update"参数的值是否等于1或3。如果"Ifo—update"的值等于1或3,则LFO38可通过使LFO38中的当前样本乘以增益且添加偏差值而计算由"lfojd"参数识别的LFO输出寄存器的更新值。以下实例伪码可概括LOADLFO指令的操作Rx=peLfoOut[lfoID];36Switch(lfoState){CaseDELAY:peLfoOut[lfoID]=bias[lfoID];break;CaseGENERATE:if(lfoUpdate==2IIlfoUpdate==3){lfoCur=lfoCur+lfoRatio;if(lfoUpdate==lIIlfoUpdate==3){〃upper16-bitsoflfoCurlfoSample=lfoCur[31:16];if(lfoSample>0){lfoGain=positiveSideGain[lfoID];else{lfoGain=negativeSideGain[lfoID];peLfoOut[lfoID]=bias[lfoID]+lfoSample*lfoGaiir,break;此实例伪码不意图表示由处理元件34A及LF038执行的软件指令。实情是,此伪码可描述在处理元件34A及LF038的硬件中执行的操作。控制指令是用以控制控制单元280的行为的指令。在一种示范性格式中,每一控制指令为十六位长。举例来说,位15:13含有控制指令识别符,位12:4含有存储器地址,且位3:0含有用于控制的掩码。由处理元件34A使用的控制指令集合可包括以下指令JUMPD语兹JUMPD地址、掩码。劝y^,指令使得控制单元280在对[掩码]及VPSRAM单元46A中的控制字的位27:24的按位AND运算评估为非零值的情况下在程序计数器290中加载[地址]的值。控制字的位27可指示波形是否循环。控制字的位26可指示波形是八位还是十六位宽。控制字的位25可指示波形是否为立体的。控制字的位24可指示是否启用滤波器。因为控制单元280可能已加载JUMPD指令之后的指令,所以对程序计数器290的值的更新遵循JUMPD指令之后的指令可变得有效。J丽PND语兹JUMPND地址、掩码劝^,指令使得控制单元280在对[掩码]及VPSRAM单元46A中的控制字的位27:24的按位AND运算评估为零值的情况下在程序计数器290中加载[地址]的值。按位AND运算的结果在结果不含有1时评估为假。因为控制单元280可能已加载JUMPND指令之后的指令,所以对程序计数器290的值的更新遵循JUMPND指令之后的指令可变得有效。LOOPIBEGIN语法;LOOPIBEGIN计数劝虔,起始第一循环的开始。控制单元280在控制单元280遇到LOOP1ENDD指令时将程序计数器290的值设置为LOOPIBEGIN指令之后的指令的存储器地址[计数]加一的次数。另外,控制单元280将第一循环计数器304的值设置为等于[计数]。举例来说,当控制单元280遇到指令"LOOPIBEGIN119"时,控制单元280将程序计数器290的值设置为LOOPIBEGIN指令之后的指令的存储器地址120次。LOOP1ENDD语法.-LOOP1ENDD劝激,LOOPIENDD之后的指令为第一循环中的最后指令。控制单元280确定第一循环计数器304的值是否大于零。如果第一循环计数器304的值大于零,则控制单元280使第一循环计数器304的值递减且将程序计数器290的值设置为LOOPIBEGIN指令之后的指令的存储器地址。否则,如果第一循环计数器304的值不大于零,则控制单元280仅使程序计数器290的值递增。LOOP2BEGIN语法,LOOP2BEGIN计数。劝4~起始第二循环的开始。控制单元280在控制单元280遇到LOOP2ENDD指令时将程序计数器290的值设置为LOOP2BEGIN指令之后的指令的存储器地址[计数]加一38的次数。另外,控制单元280将第二循环计数器306的值设置为等于[计数]。LOOP2ENDD语兹,LOOP2ENDD劝虔;LOOP2ENDD之后的指令是第二循环中的最后指令。控制单元280在第二循环计数器不为零的情况下使第二循环计数器306递减且将程序计数器290的值设置为LOOP2BEGIN指令的存储器地址。CTRL—NOP语兹.-CTRL—NOP劝虔.《控制单元280不进行任何动作。EXIT语兹,EXIT劝虔,当控制单元280遇到EXIT指令时,控制单元280向协调模块32输出控制信号以通知协调模块32处理元件34A己完成MIDI帧的整体数字波形的产生。在发送控制信号之后,控制单元280可等待直到协调模块32向控制单元280发送信号以将程序计数器290的值复位为初始值(例如,复位为零)。在处理元件34A开始产生MIDI语音的数字波形之前,协调模块32可向控制单元280发送复位信号。当控制单元280从协调模块32接收到复位信号时,控制单元280可将第一循环计数器304、第二循环计数器306及程序计数器290的值复位为其初始值。举例来说,控制单元280可将第一循环计数器304、第二循环计数器306及程序计数器290的值设置为零。随后,协调模块32可向控制单元280发送启用信号以指令处理元件34A开始产生VPSRAM单元46A中所描述的MIDI语音的数字波形。当控制单元280接收到启用信号时,处理元件34可开始执行存储于程序RAM单元44A中的连续存储器位置中的一系列程序指令(亦即,程序)。程序RAM单元44A中的程序指令中的每一者可为上文描述的指令集合中的指令的实例。一般而言,由处理元件34A执行的程序可由第一循环及嵌套于第一循环内的第二循环组成。在第一循环的每一循环期间,处理元件34A可执行整个第二循环直到第二循环终止。当第二循环终止时,处理元件34A可能已导出MIDI语音的波形的一个样本的符号。当第一循环终止时,处理元件34A已导出整个MIDI帧的MIDI语音的波形的每一样本的每一符号。举例来说,以上实例指令集中的以下系列的指令可概述由处理元件34A执行的程序的基本结构LOOP1BEGIN/i'mLoop固WerLOOP2BEGINsecon化oo;Coim^〃lie〃'ves戸&oZ/oraram/ZeLOOP2ENDDCTRL—NOP〃/"/orma础'"'owa/praces"'rtgLOOP1ENDDCTRL—NOP//per/ormfl础'"'owa/pracejs!'ngEXIT在此实例系列的指令中,双前向斜杠之后的词语表示用以执行所描述的操作的一个或一个以上指令。此外,在此实例中,CTRL—NOP操作跟在LOOP1ENDD及LOOP2ENDD指令之后,因为控制单元280可能在控制单元280使用程序计数器290中经更新的存储器地址以存取程序RAM34A中含有相应LOOP1BEGIN或LOOP2BEGIN指令的位置之前已开始执行LOOPlENDD或LOOP2ENDD指令之后的指令。换句话说,控制单元280可能已将循环结束指令之后的指令添加到处理管线。为了执行程序RAM单元44A中的程序,控制单元280可向程序RAM单元44A发送请求以读取程序RAM单元44A中具有存储于程序计数器290中的存储器地址的存储器位置。响应于所述请求,程序RAM单元44A可向控制单元280发送程序RAM单元44A中具有存储于程序计数器290中的存储器地址的存储器位置的内容。所请求的存储器位置的内容可为四十位的字,其包括处理元件34A可并行执行的两个程序指令。举例来说,程序RAM单元44A中的一个存储器位置可包括以下各项中的一者(1)一个字中的ALU指令及加载/存储指令;(2)—个字中的加载/存储指令及第二加载/存储指令;(3)—个字中的控制指令及加载/存储指令;或(4)一个字中的ALU指令及控制指令。在包括ALU指令及加载/存储指令的字中,位0:17可为加载/存储指令,位18:37可为ALU指令,且位38及39可为指示字含有ALU指令及加载/存储指令的旗标。在包括两个加载指令的字中,位0:17可为第一加载/存储指令,位18及19可经预留,位20:37可为第二加载/存储指令,且位38及39可为指示字含有两个加载/存储指令的旗标。在包括控制指令及加载指令的字中,位0:17可为加载指令,位18及19可经预留,位20:35可为控制指令,位36及37可经预留,且位38及39可为指示字含有控制指令及加载/存储指令的旗标。在包括ALU指令及控制指令的字中,位0:15可为控制指令,位16及17可经预留,位18:37可为ALU指令,且位38及39可为指示字含有ALU指令及控制指令的旗标。在接收到存储器位置的内容之后,控制单元280可解码并应用存储器位置的内容中指定的指令。控制单元280可以原子方式解码并应用指令中的每一者。换句话说,一旦控制单元280开始执行指令,控制单元280便直到控制单元280结束执行指令为止才改变由指令使用或作用的任何数据。此外,在一些实例中,控制单元280可并行解码及应用从程序RAM单元44A接收的字中的两个指令。一旦控制单元280已执行字中的指令,控制单元280便可使程序计数器290递增且请求程序RAM单元44A中由递增的程序计数器所识别的存储器位置的内容。处理元件34对经特殊化的指令集的使用可提供一个或一个以上优势。举例来说,执行各种音频处理操作以产生数字波形。在第一方法中,可在硬件中实施音频处理操作。举例来说,可设计专用集成电路(ASIC)来实施这些操作。然而,在硬件中实施这些操作阻止了对所述硬件的出于其它目的的再使用。亦即,一旦已将经设计以实施这些操作的ASIC安装于装置中,一般即无法改变ASIC来执行不同操作。在第二方法中,使用通用指令集的处理器可执行音频处理操作。然而,对所述处理器的使用可能是浪费的。举例来说,使用通用指令集的处理器可包括用以对在产生数字波形时从未使用的指令进行解码的电路。对特殊化指令集的使用可解决这两种方法的弱点。举例来说,对特殊化指令集的使用可允许更新使用所述指令以产生数字波形的程序。同时,对特殊化指令集的使用可允许芯片设计者将处理器的实施保持为简单的。此外,对例如EGCOMP及LOADLFO等基于语音参数集合中的值执行不同功能的特殊化指令的使用可提供一个或一个以上额外优势。举例来说,因为将EGCOMP及LOADLFO实施为单个的指令,所以不需要有条件的跳跃或分支来执行这些指令。因为EGCOMP及LOADLFO不包括有条件的跳跃或分支,所以不需要在这些有条件的跳跃或分支期间更新程序计数器。此外,因为将EGCOMP及LOADLFO实施为单个的指令,所以不需要加载单独的指令来执行EGCOMP及LOADLFO的操作。举例来说,EGCOMP指令的情况1需要乘法操作。然而,因为EGCOMP为单个指令,所以不需要从程序存储器加载单独的乘法操作。因为EGCOMP及LOADLFO不需要从程序存储器进行多次加载,所以EGCOMP及LOADLFO与将EGCOMP及LOADLFO实施为单独指令集合的情况相比可在较少时钟循环中执行。在另一实例中,对基于语音参数集合的值执行不同功能的特殊化指令的使用可为有利的,因为使用所述指令的程序可较为紧凑。举例来说,可能需要十个单独的指令来实施由一个EGCOMP指令执行的操作。较为紧凑的程序可能较易于供程序员读取。另外,较为紧凑的程序可占据程序存储器中的较少空间。因为较为紧凑的程序可占据程序存储器中的较少空间,所以程序存储器可较小。较小程序存储器实施起来可较为廉价,且可节省芯片组上的空间。图13是说明音频装置4的MIDI硬件单元18中的处理元件34A的实例操作的流程图。虽然参看处理元件34A来解释图13的实例,但处理器34中的每一者可同时执行此操作。最初,处理元件34A中的控制单元280可从协调模块32接收控制信号以使内部寄存器的值复位以便准备产生MIDI语音的新的数字波形(320)。当控制单元280接收到复位信号时,控制单元280可将第一循环计数器304、第二循环计数器306、程序计数器290及寄存器286的值复位为零。接下来,控制单元280可从协调模块32接收开始产生具有VPSRAM单元46A中的参数的MIDI语音的数字波形的指令(322)。在控制单元280从协调模块32接收到开始产生MIDI语音的数字波形的指令之后,控制单元280可从程序存储器44A读取程序指令(324)。控制单元280接着可确定程序指令是否为"循环结束"指令(326)。如果指令是"循环结束"指令(326为"是"),则控制单元280可使处理元件34A中的寄存器中的循环计数值递减(328)。另一方面,如果指令不是"循环结束"指令(326为"否"),则控制单元280可确定指令是否为"退出"指令(330)。如果指令是"退出"指令(330为"是"),则控制单元280可输出一通知协调模块32处理元件34A已结束产生MIDI语音的数字波形的控制信号(332)。如果指令不是"退出"指令(330为"否"),则控制单元280可输出控制信号或改变程序计数器290的值以使指令执行(334)。己描述各种实例。本文中描述的技术的一个或一个以上方面可在硬件、软件、固件或其组合中实施。描述为模块或组件的任何特征可一起实施在集成逻辑装置中,或单独地实42施为离散但可交互操作的逻辑装置。如果在软件中实施,则所述技术的一个或一个以上方面可至少部分地由包含指令的计算机可读媒体实现,所述指令在被执行时执行上文所述的方法中的一者或一者以上。计算机可读数据存储媒体可形成可包括封装材料的计算机程序产品的部分。计算机可读媒体可包含例如同步动态随机存取存储器(SDRAM)等随机存取存储器(RAM)、只读存储器(ROM)、非易失性随机存取存储器(NVRAM)、电可擦除可编程只读存储器(EEPROM)、快闪存储器、磁性或光学数据存储媒体及其类似物。另外或替代地,所述技术可至少部分地由计算机可读通信媒体来实现,所述计算机可读通信媒体以指令或数据结构的形式来载运或传送代码,且可由计算机来存取、读取及/或执行。可由例如一个或一个以上数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其它等效集成或离散逻辑电路等一个或一个以上处理器来执行所述指令。因此,在本文中使用时,术语"处理器"可指代上述结构中的任一者或适于实施本文中描述的技术的任何其它结构。另外,在一些方面中,本文中描述的功能性可提供于经配置或适于执行本发明的技术的专用软件模块或硬件模块内。如果在硬件中实施,则本发明的一个或一个以上方面可针对经配置或适于执行本文中描述的技术中的一者或一者以上的例如集成电路、芯片组、ASIC、FPGA、逻辑或其各种组合等电路。电路可包括集成电路或芯片组中的处理器及一个或一个以上硬件单元(如本文中所描述)。也应注意,所属领域的技术人员将认识到电路可实施上文描述的功能中的一些或全部。可能存在实施所有功能的一个电路,或者也可能存在实施功能的电路的多个区段。在当前移动平台技术的情况下,集成电路可包含至少一个DSP及至少一个高级精简指令集计算机(RISC)机器(ARM)处理器以控制及/或通信到DSP。另外,电路可设计或实施于若干区段中,且在一些情况下,可再使用区段以执行本发明中所描述的不同功能。已描述各种实例。这些及其它实例属于随附权利要求书的范围内。权利要求1.一种方法,其包含执行产生乐器数字接口(MIDI)语音的数字波形的软件程序中的机器代码指令,其中执行所述软件程序中的所述指令包含基于界定所述MIDI语音的语音参数集合选择操作,及输出控制信号以致使所述选定操作被执行;以及输出所述数字波形。2.根据权利要求1所述的方法,其中所述方法进一步包含从存储器单元检索字,其中所述字含有所述软件程序中的多个指令。3.根据权利要求1所述的方法,其中所述软件程序包含加载/存储指令、算术指令及控制指令。4.根据权利要求1所述的方法,其中所述指令为固定长度。5.根据权利要求1所述的方法,其中所述方法进一步包含执行所述软件程序中的指令以将所述数字波形的样本添加到第二数字波形的时间等效样本以产生MIDI帧的整体数字波形的整体样本。6.根据权利要求l所述的方法,其中所述方法进一步包含使用通用处理器剖析MIDI文件且对与所述MIDI文件相关联的MIDI事件进行调度以及使用数字信号处理器(DSP)处理所述MIDI事件以输出连续数字波形;其中硬件单元执行所述软件程序。7.根据权利要求l所述的方法,其中所述方法进一步包含将所述数字波形转换为模拟输出;以及将所述模拟输出作为声音而输出。8.根据权利要求1所述的方法,其中所述方法进一步包含产生语音指示符的链接列表,其中所述链接列表中的所述语音指示符中的每一者通过指定存储界定MIDI帧的MIDI语音的语音参数集合的存储器位置而指示所述MIDI语音,其中由所述链接列表中的所述语音指示符所指示的所述MIDI语音为在所述MIDI帧期间具有最大声学显著性的那些MIDI语音;且其中所述链接列表包括指示当前MIDI语音的语音指示符。9.根据权利要求8所述的方法,其中产生链接列表包含将由第一语音指示符所指示的MIDI语音的声学显著性与由第二语音指示符所指示的MIDI语音的声学显著性进行比较;以及在由所述第一语音指示符所指示的所述MIDI语音的所述声学显著性大于由所述第二语音指示符所指示的所述MIDI语音的所述声学显著性时将所述第一语音指示符插入到所述链接列表中所述第二语音指示符之前。10.根据权利要求1所述的方法,其中选择操作包含识别所述语音参数集合中的控制参数中的位的值。11.根据权利要求l所述的方法,其中选择操作包含选择包络产生操作。12.根据权利要求11所述的方法,其中执行所述选定操作包含计算包络产生调制的电平。13.根据权利要求11所述的方法,其中执行所述选定操作包含计算包络产生振幅的电平。14.根据权利要求1所述的方法,其中执行指令进一步包含向模块提供参数值;且其中所述模块选择所述操作且执行所述选定操作。15.根据权利要求14所述的方法,其中向模块提供参数值包含向低频振荡器(LFO)模块提供所述参数值,且其中执行所述机器代码指令进一步包含将来自所述LFO模块中的寄存器的值存储到本地寄存器;以及更新所述LFO模块中的所述寄存器中的值。16.根据权利要求15所述的方法,其中更新所述LFO模块中的所述寄存器中的值包含更新所述LFO模块中的指示由所述LFO模块输出的三角形波形的相位的值。17.根据权利要求15所述的方法,其中更新所述LFO模块中的所述寄存器中的值包含更新由所述LFO模块输出的三角形波形的增益。18.—种装置,其包含存储器单元,其存储界定MIDI语音的语音参数集合;以及处理元件,其执行软件程序中的机器代码指令以产生所述MIDI语音的数字波形,其中所述机器代码指令的完全执行涉及基于所述语音参数集合而选择操作及执行所述选定操作。19.根据权利要求18所述的装置,其中所述处理元件通过读取包括多个指令的字而从程序存储器读取指令。20.根据权利要求18所述的装置,其中所述指令为固定长度指令。21.根据权利要求18所述的装置,其中所述处理元件为第一处理元件;其中所述存储器单元存储界定MIDI语音的多个语音参数集合;其中所述MIDI语音为所述MIDI语音中的第一者;且其中所述装置进一步包含第二处理元件,所述第二处理元件执行软件程序中的机器代码指令以产生所述MIDI语音中的第二者的数字波形,而所述第一处理元件执行所述程序中的指令以产生所述第一MIDI语音的所述数字波形。22.根据权利要求21所述的装置,其中所述装置进一步包含求和缓冲器以存储聚集所述第一MIDI语音的所述数字波形及所述第二MIDI语音的所述数字波形的数字波形。23.根据权利要求18所述的装置,其中所述装置进一步包含MIDI硬件单元,其产生MIDI帧中的MIDI语音集合的数字波形,其中所述处理元件为所述MIDI硬件单元的组件;通用处理器,其剖析MIDI文件且对与所述MIDI文件相关联的MIDI事件进行调度;以及DSP,其处理所述MIDI事件以输出包括所述MIDI帧中的所述MIDI语音集合的所述数字波形的连续数字波形。24.根据权利要求23所述的装置,其中所述装置进一步包含-数/模转换器,其将所述连续数字波形转换为模拟音频信号;以及驱动电路,其使用所述模拟音频信号以驱动扬声器输出声音。25.根据权利要求23所述的装置,其中所述DSP包含列表产生器模块,其产生语音指示符的链接列表,其中所述链接列表中的所述语音指示符中的每一者通过指定存储界定MIDI帧的MIDI语音的语音参数集合的存储器位置而指示所述MIDI语音,其中由所述链接列表中的所述语音指示符所指示的所述MIDI语音为在所述MIDI帧期间具有最大声学显著性的那些MIDI语音;且其中所述链接列表包括指示当前MIDI语音的语音指示符。26.根据权利要求18所述的装置,其中所述处理元件进一步包含执行数学运算的算术逻辑单元(ALU);其中所述控制单元选择所述操作;且其中所述控制单元向所述ALU输出指令所述ALU执行所述选定操作的控制信号。27.根据权利要求26所述的装置,其中所述控制单元在所述控制单元读取包络产生计算指令时选择所述操作。28.根据权利要求27所述的装置,其中所述控制单元向所述ALU输出控制信号以计算所述当前MIDI语音的调制包络的新值。29.根据权利要求27所述的装置,其中所述控制单元向所述ALU输出控制信号以计算所述当前MIDI语音的音量包络的新值。30.根据权利要求18所述的装置,其中音频合成设备进一步包含产生三角形数字波形的低频振荡器(LFO);其中所述LFO选择所述操作;且其中所述LFO执行所述选定操作。31.根据权利要求30所述的装置,其中所述处理元件包含一组寄存器;且其中所述控制单元向所述LFO输出控制信号以将所述三角形波形的样本存储到所述寄存器中的一者且更新由所述LFO产生的所述三角形波形。32.根据权利要求31所述的装置,其中所述控制单元输出控制信号以指令所述LFO更新所述三角形波形的相位。33.根据权利要求31所述的装置,其中所述控制单元输出控制信号以指令所述LFO更新所述三角形波形的增益。34.—种包含指令的计算机可读媒体,所述指令致使一个或一个以上处理器-执行产生MIDI语音的数字波形的软件程序中的机器代码指令,其中所述致使所述一个或一个以上处理器执行所述机器代码指令的指令致使基于界定所述MIDI语音的语音参数集合而选择操作且输出控制信号以致使所述选定操作被执行;且输出所述数字波形。35.根据权利要求34所述的计算机可读媒体,其中所述操作为包络产生操作。36.根据权利要求34所述的计算机可读媒体,其中所述指令致使所述一个或一个以上处理器向不同于所述一个或一个以上处理器的模块提供参数值,其中所述模块选择所述操作且执行选定操作。37.—种装置,其包含用于存储界定MIDI语音的语音参数集合的装置;、用于执行软件程序中的机器代码指令以产生所述MIDI语音的数字波形的装置,其中所述机器代码指令的完全执行涉及基于所述语音参数集合而选择操作及执行所述选定操作。38.根据权利要求37所述的装置,其中所述用于执行所述机器代码指令的装置在所述用于执行所述机器代码指令的装置读取包络产生计算指令时选择所述操作。39.根据权利要求37所述的装置,其中所述装置包含用于产生三角形数字波形的装置,其中所述用于产生所述三角形数字波形的装置选择所述操作,且其中所述用于产生所述三角形数字波形的装置执行所述选定操作。40.—种电路,其经配置以执行产生MIDI语音的数字波形的软件程序的机器代码指令,其中所述电路经配置以基于界定所述MIDI语音的语音参数集合而选择操作且输出控制信号以致使所述选定操作被执行;且输出所述数字波形。41.根据权利要求40所述的电路,其中所述操作为包络产生操作。全文摘要本发明描述使用经特殊化以用于产生乐器数字接口(MIDI)语音的数字波形的机器代码指令集合来产生MIDI语音的数字波形的技术。举例来说,处理器可执行产生MIDI语音的数字波形的软件程序。所述软件程序的指令可为来自经特殊化以用于产生MIDI语音的数字波形的指令集的机器代码指令。确切地说,所述指令中的一者的执行可涉及基于界定MIDI语音的参数集合而选择操作及执行所述选定操作。文档编号G10H1/00GK101641730SQ200880009285公开日2010年2月3日申请日期2008年3月17日优先权日2007年3月22日发明者尼迪什·拉马钱德拉·卡马特,普拉加克特·V·库尔马尼,苏雷什·德瓦拉帕里申请人:高通股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1