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

文档序号:2831744阅读:363来源:国知局
专利名称:乐器数字接口硬件指令集的制作方法
技术领域
本发明涉及电子装置,且具体来说涉及产生音频的电子装置。
背景技术
乐器数字接口 (MIDI)是用于产生、传送及回放例如音乐、话音、音调、警报及其 类似物的音频声音的格式。支持MIDI格式的装置可存储可用以产生各种"语音"的音 频信息集合。每一语音可对应于特定声音,例如由特定器具产生的音符。举例来说,第 一语音可对应于如由钢琴演奏的中音C,第二语音可对应于如由长号演奏的中音C,且 第三语音可对应于如由长号演奏的D弁音。为了复制不同器具演奏的声音,符合MIDI 的装置可包括指定与声音相关联的各种音频特征(例如低频振荡器的行为、例如颤音等 效果及可影响对声音的感知的许多其它音频特征)的语音信息集合。可界定、在MIDI 文件中输送及由支持MIDI格式的装置重现几乎任何声音。
支持MIDI格式的装置可在指示装置应开始产生音符的事件发生时产生音符(或其 它声音)。类似地,装置在指示装置应停止产生音符的事件发生时停止产生音符。可通 过指定指示特定语音何时应开始及停止的事件及对语音的各种影响而根据MIDI格式对 整个音乐作品进行编码。以此方式,可以根据MIDI格式的紧凑文件格式来存储及传输 音乐作品。
多种装置中支持MIDI格式。举例来说,例如无线电话等无线通信装置可支持MIDI 文件以用于可下载声音,例如铃声或其它音频输出。例如苹果计算机有限公司(Apple Computer, Inc)售卖的"iPod"装置及微软公司(Microsoft Corp.)售卖的"Zune"装置 等数字音乐播放器也可支持MIDI文件格式。其它支持MIDI格式的装置可包括各种音 乐合成器,例如键盘、音序器、语音编码器(音码器)及节奏机。另外,多种装置也可 支持MIDI文件或音轨的回放,包括无线移动装置、直接双向通信装置(有时称为对讲机)、网络电话、个人计算机、桌上型及膝上型计算机、工作站、卫星无线电装置、内 部通信装置、无线电广播装置、手持型游戏装置、安装于装置中的电路板、信息査询站 (information kiosk)、视频游戏控制台、各种儿童计算机化玩具、用于汽车、船只及飞机 中的机载计算机及多种其它装置。

发明内容
大体而言,本发明描述用于使用经特殊化以用于产生MIDI语音的数字波形的机器 代码指令集合来产生乐器数字接口 (MIDI)语音的数字波形的技术。举例来说,处理器 可执行致使产生MIDI语音的数字波形的软件程序。软件程序的指令可为经特殊化以用 于产生根据MIDI格式的数字波形的指令集的机器代码指令。
在一方面中, 一种方法包含使用处理元件并行执行机器代码指令集合以产生MIDI 帧中存在的MIDI语音的数字波形。机器代码指令集合中的机器代码指令是在经特殊化 以用于产生MIDI语音的数字波形的指令集中界定的机器代码指令的实例。所述方法还 包含聚集MIDI语音的数字波形以产生MIDI帧的整体数字波形。另外,所述方法包含 输出整体数字波形。
在另一方面中,装置包含存储机器代码指令集合的一组程序存储器单元。机器代码 指令集合中的机器代码指令是在经特殊化以用于产生MIDI语音的数字波形的指令集中 界定的机器代码指令的实例。所述装置还包含一组处理元件,所述处理元件并行执行机 器代码指令集合以产生MIDI帧中的MIDI语音的数字波形。另外,所述装置包含求和 缓冲器,其聚集MIDI语音的数字波形以产生MIDI帧的整体数字波形。
在另一方面中,计算机可读媒体包含致使可编程处理器致使一组处理元件使用处理 元件并行执行机器代码指令集合以产生MIDI帧中存在的MIDI语音的数字波形的指令。 机器代码指令集合中的机器代码指令是在经特殊化以用于产生MIDI语音的数字波形的 指令集中界定的机器代码指令的实例。另外,所述计算机可读媒体包含致使处理器致使 求和缓冲器聚集MIDI语音的数字波形以产生MIDI帧的整体数字波形的指令。所述计 算机可读媒体还包含用于致使处理器致使求和缓冲器输出整体数字波形的指令。
在另一方面中,装置包含用于存储机器代码指令集合的装置。机器代码指令集合中 的机器代码指令是在经特殊化以用于产生MIDI语音的数字波形的指令集中界定的机器 代码指令的实例。所述装置还包含用于并行执行机器代码指令集合以产生MIDI语音的 数字波形的装置。另外,所述装置包含用于聚集MIDI语音的数字波形以产生MIDI帧 的整体数字波形的装置。所述装置还包含用于输出整体数字波形的装置。在随附图式及以下描述中阐述本发明的各种细节。其它特征、目标及优势将根据描 述及图式且根据权利要求书而显而易见。


图l是说明包括产生声音的音频装置的示范性系统的框图。
图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可为移动电话、网络电话、个人计 算机、直接双向通信装置(有时称为对讲机)、个人计算机、桌上型或膝上型计算机、 工作站、卫星无线电装置、内部通信装置、无线电广播装置、手持型游戏装置、安装于 例如査询站等装置中的电路板、各种儿童计算机化玩具、用于汽车、船只、飞机、宇宙飞船中的机载计算机或其它类型的装置。例如苹果计算机有限公司(Apple Computer, Inc)售卖的"iPod"装置及微软公司(Microsoft Corp.)售卖的"Zune"装置等数字音 乐播放器也可支持MIDI文件格式。支持MIDI格式的其它装置可包括各种音乐合成器, 例如键盘、音序器、语音编码器(音码器)及节奏机。
图1中所说明的各种组件是解释本发明的方面所需的组件。然而,在一些实施方案 中,可能存在其它组件且可能不包括所说明的组件中的一些。举例来说,如果音频装置 4是无线电话,则可包括天线、发射器、接收器及调制解调器(调制器-解调器)以促进 音频文件的无线传送。
如图l的实例中所说明,音频装置4包括存储MIDI文件的音频存储单元6。音频 存储单元6可包含任何易失性或非易失性存储器或存储装置。举例来说,音频存储单元 6可为硬盘驱动器、快闪存储器单元、压縮光盘、软盘、数字化通用光盘、只读存储器 单元、随机存取存储器或信息存储媒体。音频存储单元6可存储乐器装置接口 (MIDI) 文件及其它类型的数据。举例来说,如果音频装置4是移动电话,则音频存储单元6可 存储包含个人联系人列表、相片及其它类型的数据的数据。
音频装置4也包括可从音频存储单元6读取数据及向音频存储单元6写入数据的处 理器8。此外,处理器8可从随机存取存储器(RAM)单元10读取数据及向随机存取 存储器(RAM)单元10写入数据。举例来说,处理器8可从音频存储模块6读取MIDI 文件的一部分且将MIDI文件的所述部分写入到RAM单元10。处理器8可包含通用微 处理器,例如英特尔奔腾"Intel Pentium 4)处理器、遵照ARM控股公司(ARM Holdings of Cherry Hinton, UK)的ARM架构的嵌入式微处理器或其它类型的通用处理器。RAM 单元10可包含一个或一个以上静态或动态RAM单元。
在处理器8读取MIDI文件之后,处理器8可剖析MIDI文件且对与MIDI文件相关 联的MIDI事件进行调度。举例来说,对于每一MIDI帧,处理器8可读取一个或一个 以上MIDI文件且可从MIDI文件提取MIDI事件。基于MIDI指令,处理器8可对MIDI 事件进行调度以用于由DSP 12加以处理。在对MIDI事件进行调度之后,处理器8可将 调度提供到RAM单元10或DSP 12以使得DSP 12可处理所述事件。或者,处理器8 可通过以时间同步方式向DSP 12分派MIDI事件而执行调度。DSP 12可如MIDI文件中 的时序参数所指定而以同步方式来服务于经调度事件。MIDI事件可包括用以发送音乐 演奏信息的通道语音消息。通道语音消息可包括用以打开或关闭特定MIDI语音的指令、 改变复调键压力、通道压力、音高折曲改变、控制改变消息、触后效果、呼吸控制效果、 程序改变、音高折曲效果、左右摇动、延音踏板、主音量、持续乐段及其它通道语音消息。另外,MIDI事件可包括影响MIDI装置响应于MIDI数据的方式的通道模式消息。 此外,MIDI事件可包括系统消息,例如意图用于MIDI系统中的所有接收器的系统共同 消息、用于在基于时钟的MIDI组件之间进行同步的系统实时消息及其它系统相关消息。 MIDI事件也可为MIDI表演控制消息(例如,灯光效果提示、幻灯片投影提示、机械效 果提示、烟火提示及其它效果提示)。
当DSP 12从处理器8接收到MIDI指令时,DSP 12可处理MIDI指令以产生连续脉 冲编码调制(PCM)信号。PCM信号为模拟信号的数字表示,其中由存在规则间隔的 数字样本表示波形。DSP 12可将此PCM信号输出到数/模转换器(DAC) 14。 DAC 14 可将此数字波形转换为模拟信号。驱动电路18可使用模拟信号来驱动扬声器19A及19B 以用于向用户输出物理声音。本发明将扬声器19A及19B统称为"扬声器19"。音频装 置4可包括一个或一个以上额外组件(未图示),包括滤波器、预放大器、放大器及准 备模拟信号以用于由扬声器19最后输出的其它类型的组件。以此方式,音频装置4可 根据MIDI文件而产生声音。
为了产生数字波形,DSP 12可使用产生个别MIDI帧的数字波形的MIDI硬件单元 18。每一MIDI帧可对应于10毫秒或另一时间间隔。当MIDI帧对应于10毫秒且以48 kHz 对数字波形进行取样(亦即,每秒48,000个样本)时,在每一 MIDI帧中存在480个样 本。MIDI硬件单元18可作为音频装置4的硬件组件而实施。举例来说,MIDI硬件单 元18可为嵌入到音频装置4的电路板中的芯片组。为了使用MIDI硬件单元18, DSP 12 可首先确定MIDI硬件单元18是否闲置。MIDI硬件单元18可在MIDI硬件单元18结 束产生MIDI帧的数字波形之后闲置。DSP 12可接着产生指示MIDI帧中存在的MIDI 语音的语音指示符的列表。在DSP12产生语音指示符的列表之后,DSP 12可设置MIDI 硬件单元18中的一个或一个以上寄存器。DSP12可使用直接存储器交换(DME)来设 置这些寄存器。DME是在处理器正执行其它操作的同时将数据从一个存储器单元转移 到另一存储器单元的程序。在DSP 12设置寄存器之后,DSP 12可指令MIDI硬件单元 18开始产生MIDI帧的数字波形。如下文所详细解释,MIDI硬件单元18可通过针对语 音指示符的列表中的每一 MIDI语音产生数字波形且将这些数字波形聚集为MIDI语音 的波形而产生MIDI帧的数字波形。当MIDI硬件单元18结束产生MIDI帧的数字波形 时,MIDI硬件单元18可向DSP12发送中断。在从MIDI硬件单元18接收到中断之后, DSP 12可向MIDI硬件单元18发送对数字波形的DME请求。当MIDI硬件单元18接 收到请求时,MIDI硬件单元18可向DSP 12发送数字波形。
为了产生指示MIDI帧中存在的MIDI语音的语音指示符的列表,DSP 12可确定MIDI语音中的哪一者在MIDI帧中具有至少最小声学显著性水平。MIDI语音在MIDI 帧中的声学显著性水平可随着所述MIDI语音对于MIDI帧的人类听者所感知的整体声 音的重要性而变化。
为了产生MIDI语音的数字波形,MIDI硬件单元18可存取界定MIDI语音的语音 参数集合中的至少一些语音参数。语音参数集合可通过指定对于产生MIDI语音的数字 波形而言必要的信息及/或通过指定可将所述信息定位于何处而界定MIDI语音。举例来 说,MIDI语音参数集合可指定谐振级、音高混响、音量及其它声学特征。另外,MIDI 语音参数集合包括指向RAM单元10中含有语音的基本波形的位置的地址的指针。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从DSP 12接收到开始产生MIDI帧的数字信号的指 令时,协调模块32可将由DSP 12产生的语音指示符的列表从RAM单元IO加载到MIDI 硬件单元18中的链接列表存储器单元42中。列表中的每一语音指示符指示在当前MIDI 帧期间具有声学显著性的MIDI语音。语音指示符的列表中的每一语音指示符可指定 RAM单元10中存储界定MIDI语音的语音参数集合的存储器位置。举例来说,每一语 音指示符可包括特定语音参数集合的存储器地址或一索引值,协调模块32可根据所述 索引值导出特定语音参数集合的存储器地址。
在协调模块32将语音指示符的列表加载到链接列表存储器单元42中之后,协调模 块32可识别处理元件34A到34N中的一者,以产生由存储于链接列表存储器42中的 语音指示符的列表中的语音指示符所指示的MIDI语音中的一者的数字波形。处理元件34A到34N在本文中统称为"处理元件34"。处理元件34可彼此并行地产生MIDI语音的数字波形。
处理元件34中的每一者可与语音参数集合(VPS) RAM单元46A到46N中的一者相关联。本发明可将VPS RAM单元46A到46N统称为"VPS RAM单元46"。 VPS RAM单元46可为存储由处理元件34使用的语音参数的寄存器。当协调模块32识别处理元件34中的一者以产生MIDI语音的数字波形时,协调模块32可将MIDI语音的语音参数集合的语音参数存储到与所识别的处理元件相关联的VPS RAM单元46中的一者中。另外,协调模块32可将语音参数集合的语音参数存储到波形获取单元/低频振荡器(WFU/LFO)存储器单元39中。
在将语音参数加载到VPS RAM单元及WFU/LFO存储器单元39中之后,协调模块32可指令处理元件开始产生MIDI语音的数字波形。处理元件34中的每一者可与程序存储器单元44A到44N (统称为"程序存储器单元44")中的一者相关联。程序存储器单元44中的每一者存储程序指令集合。为了产生MIDI语音的数字波形,处理元件可执行存储于与处理元件相关联的程序存储器单元44中的一者中的程序指令集合。这些程序指令可使得处理元件从与处理元件相关联的VPS存储器单元46中的一者检索语音参数集合。另外,程序指令可使得处理元件向波形获取单元(WFU) 36发送对在语音参数中由指向语音的基本波形样本的指针所指定的波形的请求。处理元件34中的每一者可使用WFU36。响应于来自处理元件34中的一者的请求,WFU36可向请求处理元件返回一个或一个以上波形样本。因为波形可在样本内相移(例如,高达一个波形循环),所以WFU36可返回两个样本以便使用内插而补偿相移。此外,因为立体声信号由两个单独的波形组成,所以WFU36可返回高达四个样本。由WFU36返回的最后样本可为可用于内插的分数相位。WFU 36可使用高速缓冲存储器48来较快速地获取基本波形。
在WFU 36将音频样本返回到处理元件34中的一者之后,相应处理元件可执行额外程序指令。所述额外指令可包括从MIDI硬件单元18中的低频振荡器(LFO) 38请求不对称三角形波形的样本。通过使WFU 36返回的波形乘以LFO 38返回的三角波,处理元件可操纵波形的各种声学特征。举例来说,使波形乘以三角波可产生听起来较像所要器具的波形。其它指令可使得处理元件使波形循环特定次数、调整波形的振幅、添加混响、添加颤音效果或提供其它声学效果。以此方式,处理元件可产生持续一个MIDI帧的语音的波形。最后,处理元件可能会遇到退出指令。当处理元件遇到退出指令时,处理元件可向求和缓冲器40提供所产生的波形。或者,处理元件可在处理元件产生所述样本时将所产生的数字波形的每一样本存储到求和缓冲器40中。当求和缓冲器40从处理元件34中的一者接收到波形时,求和缓冲器将波形聚集为MIDI帧的整体波形。举例来说,求和缓冲器40可最初存储平顶波(亦即,所有数字样本均为零的波形)。当求和缓冲器40从处理元件34中的一者接收到波形时,求和缓冲器40可将所述波形的每一数字样本添加到存储于求和缓冲器40中的波形的相应样本。以此方式,求和缓冲器40产生并存储MIDI帧的整体波形。
最后,协调模块32可确定处理元件34已完成产生链接列表存储器42中的列表中所指示的所有语音的数字波形,且已将那些数字波形提供到求和缓冲器40。在此点,求和缓冲器40可含有整个当前MIDI帧的完整数字波形。当协调模块32作出此确定时,协调模块32可向DSP 12发送中断。响应于所述中断,DSP 12可经由直接存储器交换(DME)发送请求以接收求和缓冲器40的内容。
图3是说明音频装置4的实例操作的流程图。最初,处理器8遇到将MIDI文件从音频存储模块6加载到RAM单元10中的程序指令(50)。举例来说,如果音频装置4是移动电话,则当音频装置4接收到传入的电话呼叫且MIDI文件描述铃声时处理器8可遇到将MIDI文件从持久存储模块6加载到RAM单元10中的程序指令。
在将MIDI文件加载到RAM单元IO中之后,处理器8可剖析来自RAM单元10中的MIDI文件的MIDI指令(52)。处理器8接着可对MIDI事件进行调度且根据此调度将MIDI事件传递到DSP 12 (54)。响应于MIDI事件,DSP 12与MIDI硬件单元18协作可实时输出连续数字波形(56)。亦即,由DSP 12输出的数字波形不被分段成离散MIDI帧。DSP 12向DAC 14提供连续数字波形(58)。 DAC 14将数字波形中的个别数字样本转换为电压(60)。可使用多种不同数/模转换技术来实施DAC 14。举例来说,DAC 14可作为脉冲宽度调制器、超取样DAC、加权二进制DAC、 R-2R梯形DAC、温度计编码DAC、分段式DAC或另一类型的数/模转换器而实施。
在DAC 14将数字波形转换为模拟音频信号之后,DAC 14可将模拟音频信号提供到驱动电路16 (62)。驱动电路16可使用模拟信号来驱动扬声器19 (64)。扬声器19可为将电模拟信号转换为物理声音的电机换能器。当扬声器19产生声音时,音频装置4的用户可听到声音且适当地作出响应。举例来说,如果音频装置4为移动电话,则用户可在扬声器19产生铃声声音时接听电话呼叫。
图4是说明音频装置4中的DSP12的实例操作的流程图。最初,DSP12从处理器8接收MIDI事件(70)。在接收到MIDI事件之后,DSP 12确定MIDI事件是否为更新MIDI语音的参数的指令(72)。举例来说,DSP12可接收MIDI事件以针对钢琴的中音C语音增大语音参数集合中的左侧通道参数的增益。以此方式,钢琴的中音C语音可能听起来如同音符正来自左侧。如果DSP 12确定MIDI事件是更新MIDI语音的参数的指令(72为"是"),则DSP12可更新RAM单元10中的参数(74)。
另一方面,如果DSP 12确定MIDI事件不是更新MIDI语音的参数的指令(72为"否"),则DSP 12可产生语音指示符的列表(75)。链接列表中的语音指示符中的每一者通过指定RAM单元10中存储界定MIDI语音的语音参数集合的存储器位置而指示MIDI帧的MIDI语音。因为MIDI硬件单元18可产生受到有限时间限制的MIDI语音的数字波形,所以对于MIDI硬件单元18而言可能会不能产生由MIDI指令针对MIDI帧指定的所有MIDI语音的数字波形。因此,链接列表中的语音指示符所指示的MIDI语音是那些在MIDI帧期间具有最大声学显著性的MIDI语音。语音指示符的列表可为链接列表。亦即,除了列表中的最后一个语音指示符之外,列表中的每一语音指示符均可与指向列表中的下一语音指示符的存储器地址的指针相关联。
为了确保MIDI硬件单元18仅产生最显著MIDI语音的数字波形,DSP 12可使用一个或一个以上试探算法(heuristic algorithm)来识别在声学上最为显著的语音。举例来说,DSP12可识别具有最高平均音量的那些语音、形成必要谐调的那些语音或其它声学特征。DSP 12可产生语音指示符的列表以使得在声学上最为显著的语音是列表中的第一个语音、在声学上第二显著的语音是列表中的第二个语音等等。另外,DSP12可从列表移除在MIDI帧中不活动的任何语音。
在产生语音指示符的列表之后,DSP12可确定MIDI硬件单元18是否闲置(76)。MIDI硬件单元18可在产生MIDI文件的第一 MIDI帧的数字波形之前或在完成MIDI帧的数字波形的产生之后闲置。如果MIDI硬件单元18不是闲置的(76为"否"),则DSP 12可等待一个或一个以上时钟循环且接着再次确定MIDI硬件单元18是否闲置(76)。
如果MIDI硬件单元18闲置(76为"是"),则DSP 12可将指令集合加载到MIDI硬件单元18中的程序RAM单元44中(78)。举例来说,DSP 12可确定是否已将指令加载到程序RAM单元44中。如果尚未将指令加载到程序RAM单元44中,则DSP 12可使用直接存储器交换(DME)将所述指令转移到程序RAM单元44中。或者,如果已将指令加载到程序RAM单元44中,则DSP 12可跳过此步骤。
在DSP 12己将程序指令加载到程序RAM单元44中之后,DSP 12可激活MIDI硬件单元18(80)。举例来说,DSP 12可通过更新MIDI硬件单元18中的寄存器或通过向MIDI硬件单元18发送控制信号而激活MIDI硬件单元18。在激活MIDI硬件单元18之后,DSP 12可等待直到DSP 12从MIDI硬件单元18接收到中断(82)。在等待中断的同时,DSP 12可处理并输出先前MIDI帧的数字波形。另外,DSP 12也可产生下一MIDI帧的语音指示符的列表。在接收到中断之后,DSP 12中的中断服务寄存器可设置从MIDI硬件单元18中的求和缓冲器40传递MIDI帧的数字波形的DME请求(84)。为了在正传递求和缓冲器40中的数字波形时避免长期硬件闲置,直接存储器交换请求可在三十二个32位字块中从求和缓冲器40传递数字波形。可通过求和缓冲器40中的防止处理元件34在求和缓冲器40中盖写数据的锁定机构来保持数字波形的数据完整性。因为可逐块地释放此锁定机构,所以直接存储器交换传递可与硬件执行并行进行。
在DSP 12从MIDI硬件单元18接收到MIDI帧的音频样本之后,DSP 12可缓冲数字波形直到DSP 12已向DAC 14完全输出在从MIDI硬件单元18接收的MIDI帧的数字波形之前的MIDI帧的数位波形(86)。在DSP 12已完全输出先前MIDI帧的数字波形之后,DSP 12可输出从MIDI硬件单元18接收的当前MIDI帧的数字波形(88)。
图5是说明音频装置4的MIDI硬件单元18中的协调模块32的实例操作的流程图。最初,协调模块32可从DSP 12接收开始产生MIDI帧的数字波形的指令(100)。在从DSP 12接收到所述指令之后,协调模块32可清除求和缓冲器40的内容(102)。举例来说,协调模块32可指令求和缓冲器40将求和缓冲器40中的数字波形全部设置为零。在协调模块32清除求和缓冲器40的内容之后,协调模块32可将DSP 12所产生的语音识别符的列表从RAM单元10加载到链接列表存储器42中(104)。
在加载语音指示符的链接列表之后,协调模块32可确定协调模块32是否已从处理元件34中的一者接收到指示处理元件已结束产生MIDI语音的数字波形的信号(106)。当协调模块32尚未从处理元件34中的一者接收到指示处理元件已结束产生MIDI语音的数字波形的信号时(106为"否"),处理元件34可返回且等待所述信号(106)。当协调模块32从处理元件34中的一者接收到指示处理元件已结束产生MIDI语音的数字波形的信号时(106为"是"),协调模块32可向RAM单元10写入存储于与处理元件相关联的VPS RAM单元46中的一者中及WFU/LFO存储器39中的可能已由处理元件、波形获取单元36或LF0 38改变的语音参数集合的一个或一个以上参数(108)。举例来说,在产生MIDI语音的波形的同时,处理元件34A可改变VPS存储器46A中的语音参数集合的特定参数。在此情况下,例如,处理元件34A可更新语音的语音参数以指示MIDI帧的末尾的语音的音量水平。通过将经更新的语音参数写回到RAM单元10,给定处理元件可开始产生下一 MIDI帧中处于与当前MIDI帧所终止于的音量水平相同的音量水平的MIDI语音的数字波形。其它可写入参数可包括左右平衡、整体相移、由LFO38产生的三角形波形的相移或其它声学特征。在协调模块将参数写回到RAM单元10之后,协调模块32可确定处理元件34是否已产生由列表中的语音指示符所指示的每一 MIDI语音的数字波形(110)。举例来说,协调模块32可维持指示语音指示符的链接列表中的当前语音指示符的指针。最初,此指针可指示链接列表中的第一语音指示符。如果处理元件34已针对列表中所指示的MIDI语音中的每一者产生数字波形(110为"是"),则协调模块32可向DSP12断言中断以指示MIDI帧的整体数字波形是完整的(112)。
另一方面,如果处理元件34尚未针对列表中的语音指示符所指示的MIDI语音中的每一者产生数字波形(IIO为"否"),则协调模块32可识别处理元件34中闲置的一者(114)。如果所有处理元件34均不闲置(亦即,繁忙),则协调模块32可等待直到处理元件34中的一者闲置。在识别处理元件34中闲置的一者之后,协调模块32可将当前语音指示符所指示的语音参数集合的参数加载到VPS RAM单元44中与闲置处理元件相关联的一者中(112)。协调模块32可能仅将语音参数集合的与处理元件相关的那些参数加载到VPS RAM单元中。另外,协调模块32可将语音参数集合的与WFU 36及LFO38相关的参数加载到WFU/LFO RAM单元39中(118)。协调模块32接着可使闲置处理元件能够开始产生MIDI语音的数字波形(120)。接下来,协调模块32可将当前语音指示符更新为列表中的下一语音指示符且返回以再次确定协调模块32是否已接收到指示处理元件34中的一者已完成产生MIDI语音的数字波形的信号(106)。
图6是说明使用指定存储器地址的语音指示符的列表的实例DSP 12的框图。如图6的实例中所说明,DSP12包括存储列表基础指针140的寄存器。列表基础指针140可指定链接列表存储器42中的语音指示符的列表142中的第一语音指示符的存储器地址。如果在列表142中不存在语音指示符(如在MIDI文件开始处可能的情形),则列表基础指针140的值可为空值地址(null address)。另外,DSP 12包括存储语音指示符数目寄存器144中的值的寄存器。语音指示符数目寄存器144中的值指定列表142中的语音指示符的数目的计数(tally)。在图6中所说明的实例数据结构中,列表142中的每一语音指示符可包含RAM单元10中的语音参数集合的存储器地址及链接列表存储器42中的下一语音指示符的存储器地址。列表142中的最后一个语音指示符可为列表142中的下一语音指示符的地址指定空值地址。
RAM单元10可含有语音参数集合146的集合。RAM单元10中的每一语音参数集合可为指定语音参数集合中的语音参数的值的邻接存储器位置的块。第一语音参数的存储器位置的存储器地址可充当语音参数集合的存储器地址。
在DSP 12接收到MIDI文件的第一 MIDI事件之前,列表142可能不含有任何语音
20指示符。为了反映列表142不含有任何语音指示符的事实,列表基础指针140的值可为 空值存储器地址,且语音指示符数目寄存器144中的值可指定数目零。在MIDI文件的 第一 MIDI帧开始处,处理器8可向协调模块32提供在MIDI帧期间发生的MIDI事件 的集合。举例来说,处理器8可向DSP 12提供打开语音的MIDI事件、关闭语音的MIDI 事件、与触后效果相关联的MIDI事件及产生其它所述效果的MIDI事件。为了处理MIDI 事件,DSP 12中的列表产生器模块156可在链接列表存储器42中产生链接列表142。 一般而言,列表产生器模块156在每一 MIDI帧期间不完全产生列表142。实情是,列 表产生器模块156可再使用列表142中已存在的语音指示符。
为了产生链接列表142,列表产生器模块156可确定列表142是否已包括指定DSP 12 所提供的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接着可使用所获得的存储器地址来将语音参数集合 中的至少一些语音参数存储于VPS RAM单元46中与闲置处理元件相关联的一者中。在 将语音参数集合存储于所述VPS RAM单元中之后,协调模块32可向处理元件发送开始 产生语音的波形的信号。协调模块32可继续此操作,直到处理元件34已针对列表142 中的语音指示符所指示的每一语音产生波形。
DSP 12及协调模块32对语音指示符的链接列表的使用可呈现若千优势。举例来说, 因为DSP 12对指示语音参数集合的语音指示符的链接列表进行分类及重新排列,所以 不必对RAM单元10中的实际语音参数集合进行分类及重新排列。语音指示符可显著小 于语音参数集合。因此,DSP 12向RAM单元IO及从RAM单元IO移动(亦即,写入 及读取)较少数据。因此,与DSP 12对语音参数集合进行了分类及重新排列的情况相 比,DSP 12可需要从协调模块32到RAM单元10的总线上的较少带宽。此外,因为 DSP 12向RAM单元IO及从RAM单元IO移动较少数据,所以与DSP 12移动了实际语 音参数集合的情况相比,DSP12可消耗较少功率。又,对语音指示符的链接列表的使用 可准许DSP 12以任意次序向处理元件34提供语音参数集合。以任意次序向处理元件34 提供语音参数集合在特定类型的音频处理中可能是有用的。
另外,对指示符的链接列表的使用在不同于MIDI语音集合参数的识别符的环境中 可具有适用性。举例来说,指示符可指示经预编程的数字滤波器而非MIDI语音参数集 合。每一经预编程的数字滤波器可为双二次滤波器提供五个系数。双二次滤波器是滤出 较远离极的频率的双极双零数字滤波器。双二次滤波器可用以对音频均衡器进行编程。 与MIDI语音一样,第一数字滤波器与第二数字滤波器相比可较显著或较不显著。因此, 应用数字滤波器的模块可使用对于数字滤波器参数的指示符的经分类链接列表以有效 地应用一组数字滤波器。举例来说,音频装置4的模块可在DSP 12产生数字波形之后 对数字波形应用滤波器。
图7是说明当DSP 12从处理器8接收MIDI事件的集合时DSP 12的示范性操作的 流程图。最初,DSP 12可从处理器8接收MIDI事件的集合(160)。在DSP 12接收到 MIDI事件的集合之后,列表产生器模块156可确定MIDI事件的集合是否为空(162)。 如果MIDI事件的集合为空(162为"是"),则列表产生器模块156可向协调模块32提 供列表基础指针140的值(164)。
另一方面,如果MIDI事件的集合不为空(162为"否"),则列表产生器模块156 可从MIDI事件的集合移除一事件(166)。在本文中将所述经移除事件称为"当前事件", 且在本文中将与当前事件相关联的MIDI语音称为"当前语音"。在列表产生器模块156
23从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是说明当DSP 12将语音指示符插入到语音指示符的列表142中时DSP 12的实 例操作的流程图。确切地说,图8中的实例说明一操作,其中DSP 12中的列表产生器 模块156从列表142移除当前语音的语音指示符或产生当前语音的新的语音指示符以使 得随后可将语音指示符插入于列表142中的合适位置处。在图8、图9、图10及图11 中,将术语"语音指示符"縮写为"V.I.",且将术语"语音参数集合"縮写为"V.P.S."。 图8的实例中所说明的流程图在标记为"A"且对应于图7的实例中的以圆标记的"A" 的圆圈处开始。
最初,列表产生器模块156可将当前语音指示符指针148的值设置为列表基础指针 140的值(180)。接着,列表产生器模块156可将先前语音指示符指针152的值设置为 空值(182)。在将先前语音指示符指针152的值设置为空值之后,列表产生器模块156 可确定当前语音指示符(亦即,具有等于当前语音指示符指针148中的存储器地址的存 储器地址的语音指示符)的语音参数指针是否等于当前事件的语音的语音参数集合的存 储器地址(184)。
如果列表产生器模块156确定当前语音指示符的语音参数指针等于语音参数集合的 存储器地址(184为"是"),则列表产生器模块156可确定先前语音指示符指针152的 值是否为空值地址(186)。如果列表产生器模块156确定先前语音指示符指针152的值不为空值地址(186为"否"),则列表产生器模块156可将先前语音指示符(亦即,具 有等于先前语音指示符指针152中的存储器地址的存储器地址的指示符)的下一语音指 示符指针设置为当前语音指示符的下一语音指示符指针的值(188)。在设置先前语音指 示符的下一语音指示符指针之后,列表产生器模块156可将事件语音指示符指针150的 值设置为当前语音指示符指针148的值(l卯)。列表产生器模块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的值设置为当前语音指示符中的下一语音指 示符指针的值(198)。以此方式,列表产生器模块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中时DSP 12的示范性操作的流程 图。图9的实例中所说明的流程图在标记为"B"且对应于图8的实例中的以圆标记的 "B"的圆圈处开始。
最初,DSP 12中的列表产生器模块156可从RAM单元IO检索由事件语音指示符 指示的语音参数集合(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语音显著(2M为"否"),则列表产生器模块156可确定当前语音指示符中的下一 语音指示符指针的值是否为空值(224)。如果下一语音指示符指针的值为空值,则当前 语音指示符为列表142中的最后语音指示符。如果当前语音指示符中的下一语音指示符 指针的值为空值(224为"是"),则列表产生器模块156可将当前语音指示符中的下一 语音指示符指针的值设置为事件语音指示符指针150的值(226)。以此方式,列表产生 器模块156可在由事件语音指示符所指示的语音为列表142中最不显著的语音时将事件 语音指示符添加到列表142的末尾。
然而,如果当前语音指示符中的下一语音指示符指针不为空值(224为"否"),则 当前语音指示符不为列表142中的最后语音指示符。出于此原因,列表产生器模块156 可将先前语音指示符152的值设置为当前语音指示符指针148的值(228)。接着,列表产生器模块156可将当前语音指示符指针148的值设置为当前语音指示符中的下一语音 指示符指针的值(230)。在设置当前语音指示符指针148的值之后,列表产生器模块156 可返回以再次检索由当前语音指示符所指示的语音参数集合(212)。
图IO是说明当DSP在列表142中的语音指示符的数目超过语音指示符的最大数目 时从列表142移除语音指示符时DSP12的示范性操作的流程图。举例来说,DSP12可 将列表142中的语音指示符的最大数目限制为十。在此实例中,MIDI硬件单元18将仅 产生MIDI帧中的十个在声学上最为显著的MIDI语音的数字波形。DSP 12可设置列表 142中的语音指示符的最大数目,因为在无语音的受限数目的情况下,MIDI硬件单元 18可能不能够在MIDI帧所准许的时间内处理列表142中的所有语音。另外,DSP 12 可设置列表142中的语音指示符的最大数目以保留链接列表存储器42中的空间。另外, 列表142的语音指示符的最大数目可对将新语音指示符插入到列表142中所需的计算的 数目设置上限。对计算的数目设置上限可为实时产生MIDI帧的数字波形的要求。
最初,DSP 12中的列表产生器模块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将链接
27列表存储器42中用于当前语音指示符的存储器解除分配(256)。协调模块32接着可使 语音指示符数目寄存器144中的值递减(258)。在使语音指示符数目寄存器144中的值 递减之后,列表产生器模块156可返回以再次确定语音指示符数目寄存器144中的值是 否大于语音指示符的最大允许数目(240)。
图11是说明使用指定可根据其导出存储器地址的索引值的语音指示符的列表的实 例DSP 12的框图。在图12的实例中,列表142中的每一语音指示符包括一包括四个语 音参数集合(VPS)索引值的32位字及列表142中的下一语音指示符的存储器地址。块 260中的每一VPS索引值可指定与语音参数集合的块262中的语音参数集合相关联的号 码。举例来说,第一VPS索引值可指定号码"2"来指示语音参数集合的块262中的第 二语音参数集合。此外,块260中的每一 VPS索引值可以RAM单元10中的四字节字 中的一个字节(亦即,八个位)表示。因为VPS索引值是以一个字节表示,所以单个 VPS索引值可指示256 (亦即,28=256)个语音参数集合中的一者。
另外,在图11的实例中,RAM单元10将每一语音参数集合存储于存储器位置的 邻接块262中。因为RAM单元IO将每一语音参数集合存储于邻接块中,所以一个语音 参数集合在紧随先前语音参数集合的存储器位置中开始。
当DSP 12或协调模块32需要存取语音参数集合的块262中的语音参数集合时,DSP 12或协调模块32可首先使块260中的语音参数集合的索引值乘以集合大小寄存器268 中所含有的值。集合大小寄存器268中所含有的值可等于单个语音参数集合在RAM单 元10中占据的可寻址位置的数目。DSP 12或协调模块32接着可添加集合基础指针寄存 器266的值。集合基础指针寄存器266中所含有的值可等于块262中的第一语音参数集 合的存储器地址。因此,通过使语音参数集合的索引乘以语音指针集合的大小且接着添 加第一语音参数集合的存储器地址,DSP 12或协调模块32可导出块262中的语音参数 集合的第一存储器地址。
DSP 12可在很大程度上以与图8到图10中协调模块32控制列表142中的语音指示 符相同的方式来控制图11的列表142中的语音指示符。然而,在使用此示范性数据结 构时,DSP 12可对语音指示符内的VPS索引值进行分类。
图11中所说明的实例数据结构可具有优于图6中所说明的实例数据结构的优势, 因为图11中所说明的数据结构可能需要链接列表存储器42中的较少存储器位置来存储 指向语音参数集合的相同数目的指针。然而,图11中所说明的数据结构可能需要DSP 12 及协调模块32执行额外计算。
图12是说明示范性处理元件34A的细节的框图。虽然图12的实例说明处理元件34A的细节,但这些细节可适用于处理元件34中的其它者。
如图12的实例中所说明,处理元件34A可包含若干组件。这些组件可包括(但不 限于)控制单元280、算术逻辑单元(ALU) 282、多路复用器284及一组寄存器286。 另外,处理元件34A可包括用于VPSRAM单元46A的读取接口先入先出(FIFO) 292、 用于VPS RAM单元46A的写入接口 FIFO、用于LFO 38的接口 FIFO 296、用于WFU 36 的接口 FIFO 298、用于求和缓冲器40的接口 FIFO 300及用于求和缓冲器40中的RAM 的接口 FIFO 302。
控制单元280可包含读取指令且基于所述指令输出控制处理元件34A的控制信号的 一组电路。控制单元280可包括存储当前指令的存储器地址的程序计数器290、存储由 处理元件34执行的第一程序循环的计数的第一循环计数器304及存储由处理元件34执 行的第二程序循环的计数的第二循环计数器306。 ALU 282可包含对存储于寄存器286 中的各者中的值执行各种算术运算的电路。ALU 282可经特殊化以执行对于产生MIDI 语音的数字波形具有特殊效用的算术运算。寄存器286可为可保持带符号或无符号值的 一组八个32位寄存器。多路复用器284基于由控制单元280输出的控制信号可将来自 ALU 282、接口读取FIFO 292、接口 FIFO 296、接口 FIFO 298及接口 FIFO 302的输出 引导到寄存器286中的特定者。
处理元件34A可使用经特殊化以产生MIDI语音的数字波形的程序指令集合。换句 话说,处理元件34A中所使用的程序指令集合可包括在例如精简指令集计算机(RISC) 指令集或例如x86指令集等复杂指令集架构指令集的通用指令集中不存在的程序指令。 此外,处理元件34A中所使用的程序指令集合可排除在通用指令集中存在的一些程序指 令。
可将处理元件34A所使用的程序指令分类为算术逻辑单元(ALU)指令、加载/存 储指令及控制指令。处理元件34A所使用的每一类别的程序指令可为不同长度。举例来 说,ALU指令可为二十位长,加载/存储指令可为十八位长,且控制指令可为十六位长。
ALU指令为使得控制单元280将控制信号输出到ALU 282的指令。在一种示范性 格式中,每一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输出指令ALU 282执行寄存器Rx与Ry中的带符号值的乘 法的控制信号,且接着使乘积向左移位由"移位量"指定的量。在使乘积移位之后,ALU 282从乘积提取由ACC指定的位。ALU 282接着输出这些位。如果ACC=0,则ALU 282 提取乘积的较低32个位。如果ACC=1,则ALU 282提取乘积的中间32个位。如果 AC02,则ALU 282提取乘积的较高32个位。此指令还使得控制单元280向多路复用 器284输出控制信号以将来自ALU 282的输出引导到寄存器286中的Rz。
MULTSU:
语法MULTSU Rx、 Ry、移位量、Rz、 ACC
功能使得控制单元280输出指令ALU 282执行Rx中的带符号值与Ry中的无符号 值的乘法的控制信号,且接着使乘积向左移位由"移位量"指定的量。在使乘积移位之 后,ALU 282从乘积提取由ACC指定的位。ALU 282接着输出这些位。如果ACOO, 则ALU 282提取乘积的较低32个位。如果ACC4,则ALU 282提取乘积的中间32个 位。如果ACC=2,则ALU 282提取乘积的较高32个位。此指令还使得控制单元280向 多路复用器284输出控制信号以将来自ALU 282的输出引导到寄存器286中的Rz。
MULTUU:
语法MULTUU Rx、 Ry、移位量、Rz、 ACC
功能使得控制单元280输出指令ALU 282执行寄存器Rx与Ry中的无符号值的乘 法的控制信号,且接着使乘积向左移位由"移位量"指定的量。在使乘积移位之后,ALU 282从乘积提取由ACC指定的位。ALU 282接着输出这些位。如果ACC=0,则ALU 282 提取乘积的较低32个位且将这32个位存储于Rz中。如果ACC4,则ALU 282提取乘 积的中间32个位。如果ACX^2,则ALU 282提取乘积的较高32个位。此指令还使得 控制单元280向多路复用器284输出控制信号以将来自ALU 282的输出引导到寄存器 286中的Rz。
MACSS:
语法MACSSRX、 Ry、移位量、Rz、 ACC
功能使得控制单元280输出指令ALU 282执行寄存器Rx与Ry中的带符号值的乘 法的控制信号,且接着使乘积向左移位由"移位量"指定的量。在使乘积移位之后,ALU 282从乘积提取由ACC指定的32个位且接着将这32个位添加到Rz中的值且输出所得
30位。如果ACC=0,则ALU 282提取乘积的较低32个位。如果ACOl ,则ALU 282提 取乘积的中间32个位。如果ACX^2,则ALU 282提取乘积的较高32个位。此指令还 使得控制单元280向多路复用器284输出控制信号以将来自ALU 282的输出引导到寄存 器286中的Rz。 MACSU
语法MACSU Rx、 Ry、移位量、Rz、 ACC
功能使得控制单元280输出指令ALU 282执行Rx中的带符号值与Ry中的无符号 值的乘法的控制信号,且接着使乘积向左移位由"移位量"指定的量。在使乘积移位之 后,ALU 282从乘积提取由ACC指定的32个位。ALU 282接着将这32个位添加到Rz 中的值且输出所得位。如果ACC=0,则ALU 282提取乘积的较低32个位。如果ACC=1, 则ALU 282提取乘积的中间32个位。如果AC02,则ALU 282提取乘积的较高32个 位。此指令还使得控制单元280向多路复用器284输出控制信号以将来自ALU 282的输 出引导到寄存器286中的Rz。
MACUU
语法MACUU Rx、 Ry、移位量、Rz、 ACC
功能使得控制单元280输出指令ALU 282执行寄存器Rx与Ry中的无符号值的乘 法的控制信号,且接着使乘积向左移位由"移位量"指定的量。在使乘积移位之后,ALU 282从乘积提取由ACC指定的32个位且接着将这32个位添加到Rz中的值。ALU 282 接着输出所得位。如果ACC贝IJALU 282提取乘积的较低32个位。如果ACC-l, 则ALU 282提取乘积的中间32个位。如果ACC=2,则ALU 282提取乘积的较高32个 位。此指令还使得控制单元280向多路复用器284输出控制信号以将来自ALU 282的输 出引导到寄存器286中的Rz。
MULTUUMIN
语法MULTUUMIN Rx、 Ry、移位量、Rz、 ACC
功能使得控制单元280输出指令ALU 282执行寄存器Rx与Ry中的无符号值的乘 法的控制信号,且接着使乘积向左移位由"移位量"指定的量。ALU 282接着从乘积提 取由ACC指定的位且确定这些位是否表示小于存储于Rz中的数目的数目。如果这些位 表示小于存储于Rz中的数目的数目,则ALU 282输出这些位。如果ACC=0,则ALU 282 提取乘积的较低32个位。如果ACC=1,则ALU 282提取乘积的中间32个位。如果 ACC=2,则ALU282提取乘积的较高32个位。此指令还使得控制单元280向多路复用 器284输出控制信号以将来自ALU 282的输出引导到寄存器286中的R,。MACSSD
语法MACSSD Rx、 Ry、移位量、Rz、 ACC
功能使得控制单元280输出指令ALU 282执行寄存器Rx与Ry中的带符号值的乘 法的控制信号,且接着使乘积向左移位由"移位量"指定的量。ALU 282接着从乘积提 取由ACC指定的32个位。在从乘积提取这些位之后,ALU 282将这32个位添加到存 储于Rz之后的寄存器(亦即,Rz+1)中的值。在添加这些值之后,ALU282输出总和。 如果ACC-0,则ALU 282提取乘积的较低32个位。如果ACC4,则ALU 282提取乘 积的中间32个位。如果ACX^2,则ALU 282提取乘积的较高32个位。此指令还使得 控制单元280向多路复用器284输出控制信号以将来自ALU 282的输出引导到寄存器 286中的Rz。
MACSUD
语法MACSSD Rx、 Ry、移位量、Rz、 ACC
功能使得控制单元280输出指令ALU 282执行寄存器Rx中的带符号值与寄存器 Ry中的无符号值的乘法的控制信号,且接着使乘积向左移位由"移位量"指定的量。ALU 282接着从乘积提取由ACC指定的32个位。在从乘积提取这些位之后,ALU 282将这 32个位添加到存储于Rz之后的寄存器(亦即,Rz+1)中的值。在添加这些值之后,ALU 282输出总和。如果ACC=0,则ALU 282提取乘积的较低32个位。如果ACC=1,则 ALU 282提取乘积的中间32个位。如果ACC=2,则ALU 282提取乘积的较高32个位。 此指令还使得控制单元280向多路复用器284输出控制信号以将来自ALU 282的输出引 导到寄存器286中的Rz。
MACUUD
语法MACSSD Rx、 Ry、移位量、Rz、 ACC
功能使得控制单元280输出指令ALU282执行寄存器Rx与Ry中的无符号值的乘 法的控制信号,且接着使乘积向左移位由"移位量"指定的量。ALU 282接着从乘积提 取由ACC指定的32个位。在从乘积提取这些位之后,ALU 282将这32个位添加到存 储于Rz之后的寄存器(亦即,Rz+1)中的值。在添加这些值之后,ALU 282输出总和。 如果ACOO,则ALU 282提取乘积的较低32个位。如果ACOl,则ALU 282提取乘 积的中间32个位。如果ACC二2,则ALU 282提取乘积的较高32个位。此指令还使得 控制单元280向多路复用器284输出控制信号以将来自ALU 282的输出引导到寄存器 286中的Rz。
MASSS语法MASSSRx、 Ry、移位量、Rz、 ACC
功能使得控制单元280输出指令ALU 282执行寄存器Rx与Ry中的带符号值的乘 法的控制信号,且接着使乘积向左移位由"移位量"指定的量。ALU 282接着从乘积提 取由ACC指定的32个位。在提取位之后,ALU 282从Rz中的值减去这些位且输出所 得位。如果ACOO,贝UALU 282提取乘积的较低32个位。如果ACC4,则ALU 282 提取乘积的中间32个位。如果ACC-2,则ALU 282提取乘积的较高32个位。此指令 还使得控制单元280向多路复用器284输出控制信号以将来自ALU 282的输出引导到寄 存器286中的Rz。
MASSU
语法MASSSRx、 Ry、移位量、Rz、 ACC
功能使得控制单元280输出指令ALU 282执行寄存器Rx中的带符号值与寄存器 Ry中的无符号值的乘法的控制信号,且接着使乘积向左移位由"移位量"指定的量。ALU 282接着从乘积提取由ACC指定的32个位。在提取位之后,ALU 282从Rz中的值减去 这些位且输出所得位。如果ACC-O,则ALU 282提取乘积的较低32个位。如果ACC-1, 则ALU 282提取乘积的中间32个位。如果ACC=2,则ALU 282提取乘积的较高32个 位。此指令还使得控制单元280向多路复用器284输出控制信号以将来自ALU 282的输 出引导到寄存器286中的Rz。
MASUU
语法MASUU Rx、 Ry、移位量、Rz、 ACC
功能使得控制单元280输出指令ALU 282执行寄存器Rx与Ry中的无符号值的乘 法的控制信号,且接着使乘积向左移位由"移位量"指定的量。控制信号还使得ALU282 从乘积提取由ACC指定的32个位。在提取位之后,ALU 282从Rz中的值减去这些位 且输出所得值。如果ACC=0,则ALU 282提取乘积的较低32个位。如果ACC-1,则 ALU 282提取乘积的中间32个位。如果ACC=2,则ALU 282提取乘积的较高32个位。 此指令还使得控制单元280向多路复用器284输出控制信号以将来自ALU 282的输出引 导到寄存器286中的Rz。
EGCOMP
语法EGCOMP Rx、 Ry、移位量、Rz、 ACC
功能使得控制单元280基于界定处理元件34A当前正处理的MIDI语音的语音参 数集合的控制字而选择一操作。EGCOMP指令还使得控制单元280输出指令ALU 282 执行选定操作的控制信号。在第一模式中,ALU 282使Rx中的值与Ry中的值相加且输出所得总和。在第二模式中,ALU 282执行Rx中的值与Ry中的值的无符号乘法,使乘 积向左移位移位量中所指定的量,且接着输出经移位的乘积的最高有效的三十二 (32) 个位。在第三模式中,ALU 282输出Rx中的值。在第四模式中,ALU 282输出Ry的值。 在EGCOMP指令的环境中,为零的ACC值可使得控制单元280输出控制信号以指令 ALU 282计算当前MIDI语音的音量包络的新值。为一的ACC值可使得控制单元280 输出控制信号以指令ALU 282计算当前MIDI语音的新的调制包络。EGCOMP指令还 使得控制单元280向多路复用器284输出控制信号以将来自ALU 282的输出引导到寄存 器286中的Rz。
在执行EGCOMP指令中与一模式相关联的操作之前,ALU 282首先计算所述模式。 举例来说,ALU 282可使用以下等式来计算模式
模式-vps.ControlWord((ACC承8+second—loop—counter(l:0)*2+l): (ACC*8+second_loop—counter(l:0)*2))
换句话说,"模式"的值等于当前语音参数集合的控制字中的两个位。可通过执行 以下步骤来确定那两个位中较高有效的一者的索引-
(1) 通过使ACC的值乘以八(亦即,使ACC的值的按位表示向左移位三个位置) 而产生第一乘积。
(2) 通过使第二循环计数器的两个最低有效位乘以二 (亦即,使ACC的值的按位 表示向左移位一个位置)而产生第二乘积。
(3) 使第一乘积、第二乘积及数字一相加。
可通过执行相同步骤(除了在第三步骤中不添加数字一)而确定控制字的两个位中 较低有效的一者的索引。举例来说,控制字可等于0x0000807 (亦即,ObOOOO 0000 0000 0000 0100 0000 0111)。此外,ACC的值可为0b0001,且第二循环计数器的值可为0b0001。 在此实例中,控制字中较高有效位的索引为0b0皿011 (亦即,十进制的数字十一), 且控制字中较低有效位的索引为0b0皿010 (亦即,十进制的数字十)。在先前语句中, 索引值的加下划线的位表示来自ACC的位,且索引值的斜体的位表示来自第二循环计 数器的位。因此,模式为Ol (亦即,十进制的数字一),因为值O及1分别处于控制字 的位置11及10处。因为模式为01,所以ALU 282执行Rx中的值与Ry中的值的无符号 乘法,使乘积向左移位移位量中指定的量,且接着输出经移位的乘积的最高有效的三十 二 (32)个位。
包络产生是一种为个别音符的音量或调制质量建模的方法。每一音符可具有若干阶 段。举例来说,音符可具有延迟阶段、起声阶段(attack phase)、保持阶段、衰退阶段、
34持续阶段及释放阶段。延迟阶段可界定在起声阶段开始之前的时间的量。在起声阶段期 间,音量或调制水平增大到峰值水平。在保持阶段期间,音量或调制水平维持于峰值水 平。在衰退阶段期间,音量或调制水平下降到持续水平。在持续水平期间,音量或调制 水平维持于持续水平。在释放阶段期间,音量或调制水平下降到零。此外,音量或调制 水平的改变可为线性或指数的。可以子帧为单位来界定包络产生阶段的长度。术语"子 帧"可指代MIDI帧的四分之一。举例来说,如果MIDI帧为IO毫秒,则子帧为2.5毫 秒。举例来说,MIDI语音的起声阶段可持续一个子帧,MIDI语音的衰退阶段可持续一 个子帧,且MIDI语音的持续阶段可持续两个子帧。
EGCOMP指令执行操作以执行包络产生。举例来说,添加操作(亦即,模式00) 可对应于音量或调制水平在子帧期间的线性斜坡上升(例如,在起声阶段期间)或斜坡 下降(亦即,在衰退或释放阶段期间)。乘法操作(亦即,模式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及I^处的值。如果地址为奇数,则分别在(地址-l)及地址处存储Ry及Rz处的值。
LOADSUM
语法LOADSUM Rx、 Ry。
功能向寄存器Ry及Rz中加载求和缓冲器40中由样本计数指示的值。LOADSUM指令中所使用的样本计数为使用下文描述的STORESUM指令的相同计数。LOADFIFO
语法LOADFIFO fifo—low—high、 fifo—signed—unsigned、 Rx。
功能从WFU接口 FIFO 298的顶部(head)移除一值且将所述值存储于Rx中。寄存器286中加载所述值的一者及如何将所述值加载到所述寄存器中取决于fifo—low—high旗标及fifo—signed—unsigned旗标。如果fifo—low—high为0,则将值加载到Rx的较低的16个位中。如果fifo_low_high为1,则将值加载到Rx的较高的16个位中。如果fifo—signed—unsigned为0,则将值存储为无符号数字。如果fifo—signed—unsigned为1,则将值存储为带符号数字且使值带符号扩展为32位。然而,如果将fifo—low一high旗标设置为1,则fifo_signed—unsigned旗标不具有作用。
STOREWFU
语法STOREWFU Rx。
功能将Rx中的值发送到WFU36。
STORESUM
语法STORESUM acc_sat—mode、 Rx、 Ry。
功能将寄存器Rx及Ry中的值存储到求和缓冲器40。另外,此指令发送隐含地取决于第一及第二循环计数器的样本计数器。样本计数器描述数字波形的哪一样本当前正由处理元件34A处理。当控制单元280从协调模块32接收到复位命令时,控制单元280将所述值初始化为零。随后,控制单元280在每次控制单元280遇到STORESUM指令时使样本计数器递增一。控制单元280可将样本计数器作为控制信号输出到求和缓冲器40。 acc_sat_m0de参数可界定求和缓冲器40是否使样本的值饱和化。饱和化可在样本的值上升到针对样本可存储的最大数目以上或下降到针对样本可存储的最小数目以下时发生。如果启用饱和化,则求和缓冲器40可在使Rx及Ry的值相加会使得样本的值上
36升到针对样本可表示的最大数目以上或下降到针对样本可表示的最小数目以下时将值维持于最大数目或最小数目。如果未启用饱和化,则求和缓冲器40可在使Rx及Ry的值相加时使样本的数目上滚。另外,acc—Sat_mode参数可确定求和缓冲器40是用寄存器Rx及Ry中的值替代样本的值还是将寄存器Rx及Ry中的值添加到求和缓冲器40中的样本的值。以下图表可说明acc sat mode参数的示范性操作-
Acc—Sat_Mode(2个位)功能
00无累加;无饱和化
01无累加;使输入及存储饱和化。
10将输入与求和缓冲器ram中的现有元素累加。不对经累加的输出执 行饱和化。
11将输入与求和缓冲器mm中的现有元素累加。输出在其被存储回到 求和缓冲器40之前经饱和化。
LOADLFO
语法LOADLFO lfo—id、 lfo—update、 Rx
其中
{lfo—id^待读取的LFO的类型2位00: modLfo ^音高01: modLfo ^增益
10: modLfo->频率拐角(frequency corner)
11: vibLfo"^音高(lfo一updateh在当前输出之后更新哪一参数2位
00:无更新
01:仅更新LFO值
10:仅更新LFO相位
11:更新LFO值及相位两者。功能从具有由"lfo—id"指定的识别符的LFO 38载入一值到Rx。另外,此指令指令LFO 38在将值加载Rx之后更新哪一参数。
如上文所论述,LFO 38可产生一个或一个以上精确的三角形数字波形。对于处理元件34中的每一者,LF0 38可提供四个输出值调制音高值、调制增益值、调制频率拐角值及颤音音高值。这些输出值中的每一者可表示三角形数字波形上的一变化。当控制单元280读取LOADLFO指令时,控制单元280可向LFO38输出表示"lfo—id"参数的控制信号。表示"lfojd"参数的控制信号可指令LF0 38将输出值中的一者中的值发送到处理元件34A中的接口 FIFO 296。举例来说,如果控制单元280发送表示"lfojd"的值Ol的控制信号,则LF0 38可发送调制增益输出值的值。另外,控制单元280可向多路复用器284输出控制信号以将来自接口 FIFO 296的输出引导到寄存器286中的寄存器Rz。
另外,当控制单元280读取LOADLFO指令时,控制单元280可向LFO 38输出表示"lfo一叩date"参数的控制信号。表示"lfo_update"参数的控制信号指令LFO 38如何更新输出值。当LFO 38接收到表示"lfo一update"参数的控制信号时,LFO 38可基于处理元件34A当前正处理的MIDI语音的语音参数集合而选择一操作来执行。举例来说,LFO 38可使用语音参数集合的控制字来确定LFO 38是处于"延迟"状态还是处于"产生"状态中。
为了确定LF0 38是处于"延迟"状态还是处于"产生"状态中,LFO 38可存取存储于VPS RAM 46A中的语音参数集合的控制字的位。举例来说,控制字的位23:16可确定LFO是处于"产生"模式还是处于"延迟"状态中。在"产生"状态中,LFO 38可使音高的参数倍增。在"延迟"状态中,LF0 38不使音高的参数倍增。举例来说,控制字的位16可指示LFO 38的调制模式对于当前MIDI帧的第一子帧是处于延迟状态还是处于产生状态中;位17可指示LF0 38的调制模式对于当前MIDI帧的第二子帧是处于延迟状态还是处于产生状态中;位18可指示LFO 38的调制模式对于当前MIDI帧的第三子帧是处于延迟状态还是处于产生状态中;位19可指示LF0 38的调制模式对于当前MIDI帧的第四子帧是处于延迟状态还是处于产生状态中。
另外,控制字的位20可指示LFO 38的颤音模式对于当前MIDI帧的第一子帧是处于延迟状态还是处于产生状态中;控制字的位21可指示LFO 38的颤音模式对于当前MIDI帧的第二子帧是处于延迟状态还是处于产生状态中;控制字的位22可指示LFO 38的颤音模式对于当前MIDI帧的第三子帧是处于延迟状态还是处于产生状态中;且控制字的位23可指示LFO 38的颤音模式对于当前MIDI帧的第四子帧是处于延迟状态还是处于产生状态中。
在选择操作(亦即,是在"延迟"模式还是在"产生"模式中执行)之后,LFO 38可执行选定操作。如果LFO 38处于延迟状态中,则LFO 38可针对所述模式将由"lfo一id"参数识别的LFO的模式的偏差值存储到LF0 38的输出寄存器中。另一方面,如果LFO38处于产生状态中,则LF0 38可首先确定"lfo_update"参数的值是否等于2或3。如果"lfo—update"的值等于2或3,则LFO 38可更新LFO相位或更新LFO值及相位。如果"lfo_update"参数的值等于2或3,则LFO 38可通过向LFO的当前相位添加LFO比而更新LFO的相位。接下来,LFO 38可确定"lfo_update"参数的值是否等于1或3。如果"lfo—update"的值等于1或3,则LFO 38可通过使LFO 38中的当前样本乘以增益且添加偏差值而计算由"lfo_ki"参数识别的LFO输出寄存器的更新值。以下实例伪码可概括LOADLFO指令的操作
Rx=peLfoOut[lfoID];Switch(lfo State) {
Case DELAY:
PeLfoOut[lfoID]=bias[lfoID];break;
Case GENERATE:
if(lfoUpdate==2 || lfoUpdate==3) {lfoCur=lfoCur+lfoRatio;
if(lfoUpdate==l || lfoUpdate==3) {
〃 upper 16-bits of lfoCurlfoSample=lfoCur[31:16];
if(lfoSample>0) {
lfoGain=positiveSideGain[lfoID];
else {
lfoGain=negativeSideGain[lfoID];peLfoOut[lfoID]=bias[lfoID]+lfoSample承lfoGain;break;
此实例伪码不意图表示由处理元件34A及LF0 38执行的软件指令。实情是,此伪码可描述在处理元件34A及LFO 38的硬件中执行的操作。
控制指令是用以控制控制单元280的行为的指令。在一种示范性格式中,每一控制指令为十六位长。举例来说,位15:13含有控制指令识别符,位12:4含有存储器地址,且位3:0含有用于控制的掩码。
由处理元件34A使用的控制指令集合可包括以下指令
JUMPD
语法JUMPD地址、掩码。
功能指令使得控制单元280在对[掩码]及VPS RAM单元46A中的控制字的位27:24的按位AND运算评估为非零值的情况下在程序计数器290中加载[地址]的值。控制字的位27可指示波形是否循环。控制字的位26可指示波形是八位还是十六位宽。控制字的位25可指示波形是否为立体的。控制字的位24可指示是否启用滤波器。因为控制单元280可能已加载JUMPD指令之后的指令,所以对程序计数器290的值的更新遵循JUMPD
指令之后的指令可变得有效。JUMPND
语法JUMPND地址、掩码
功能指令使得控制单元280在对[掩码]及VPS RAM单元46A中的控制字的位27:24的按位AND运算评估为零值的情况下在程序计数器2卯中加载[地址]的值。按位AND运算的结果在结果不含有1时评估为假。因为控制单元280可能已加载JUMPND指令之后的指令,所以对程序计数器290的值的更新遵循JUMPND指令之后的指令可变得有效。
LOOP 1 BEGIN语法L00P1BEGIN计数
功能起始第一循环的开始。控制单元280在控制单元280遇到LOOP1ENDD指令 时将程序计数器2卯的值设置为L00P1BEGIN指令之后的指令的存储器地址[计数]加一 的次数。另外,控制单元280将第一循环计数器304的值设置为等于[计数]。举例来说, 当控制单元280遇到指令"L00P1BEGIN 119"时,控制单元280将程序计数器290的 值设置为L00P1BEGIN指令之后的指令的存储器地址120次。
L00P1ENDD
语法L00P1ENDD
功能L00P1ENDD之后的指令为第一循环中的最后指令。控制单元280确定第一 循环计数器304的值是否大于零。如果第一循环计数器304的值大于零,则控制单元280 使第一循环计数器304的值递减且将程序计数器2卯的值设置为L00P1BEGIN指令之 后的指令的存储器地址。否则,如果第一循环计数器304的值不大于零,则控制单元280 仅使程序计数器290的值递增。
L00P2BEGIN
语法LOOP2BEGIN计数。
功能起始第二循环的开始。控制单元280在控制单元280遇到LOOP2ENDD指令 时将程序计数器290的值设置为LOOP2BEGIN指令之后的指令的存储器地址[计数]加一 的次数。另外,控制单元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发送信号以将程序
41计数器290的值复位为初始值(例如,复位为零)。
在处理元件34A开始产生MIDI语音的数字波形之前,协调模块32可向控制单元 280发送复位信号。当控制单元280从协调模块32接收到复位信号时,控制单元280可 将第一循环计数器304、第二循环计数器306及程序计数器290的值复位为其初始值。 举例来说,控制单元280可将第一循环计数器304、第二循环计数器306及程序计数器 2卯的值设置为零。
随后,协调模块32可向控制单元280发送启用信号以指令处理元件34A开始产生 VPS RAM单元46A中所描述的MIDI语音的数字波形。当控制单元280接收到启用信 号时,处理元件34可开始执行存储于程序RAM单元44A中的连续存储器位置中的一 系列程序指令(亦即,程序)。程序RAM单元44A中的程序指令中的每一者可为上文 描述的指令集合中的指令的实例。
一般而言,由处理元件34A执行的程序可由第一循环及嵌套于第一循环内的第二循 环组成。在第一循环的每一循环期间,处理元件34A可执行整个第二循环直到第二循环 终止。当第二循环终止时,处理元件34A可能已导出MIDI语音的波形的一个样本的符 号。当第一循环终止时,处理元件34A已导出整个MIDI帧的MIDI语音的波形的每一 样本的每一符号。举例来说,以上实例指令集中的以下系列的指令可概述由处理元件34A 执行的程序的基本结构-
LOOP 1 BEGIN /z'威,固w^
LOOP2BEGIN se函必oo; Cow她r /脸f/ve s戸Z o//or a sa,/e
LOOP2ENDD CTRL—NOP
IX)OPIENDD CTRL—NOP
/^ er/or附of(sW"/o"a/ prace肌'wgEXIT
在此实例系列的指令中,双前向斜杠之后的词语表示用以执行所描述的操作的一个 或一个以上指令。此外,在此实例中,CTRL_NOP操作跟在LOOPIENDD及LOOP2ENDD 指令之后,因为控制单元280可能在控制单元280使用程序计数器290中经更新的存储 器地址以存取程序RAM 34A中含有相应LOOP1BEGIN或LOOP2BEGIN指令的位置之 前已开始执行LOOPIENDD或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的实例操作的流程
44图。虽然参看处理元件34A来解释图13的实例,但处理器34中的每一者可同时执行此 操作。
最初,处理元件34A中的控制单元280可从协调模块32接收控制信号以使内部寄 存器的值复位以便准备产生MIDI语音的新的数字波形(320)。当控制单元280接收到 复位信号时,控制单元280可将第一循环计数器304、第二循环计数器306、程序计数 器2卯及寄存器286的值复位为零。
接下来,控制单元280可从协调模块32接收开始产生具有VPS RAM单元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)。
在一个或一个以上示范性实施例中,所描述的功能可实施于硬件、软件、固件或其 任何组合中。如果实施于软件中,则可将功能存储为计算机可读媒体上的一个或一个以 上指令或代码。计算机可读媒体包括计算机存储媒体及通信媒体两者。存储媒体可为可 由计算机存取的任何可用媒体。经由实例且非限制,所述计算机可读媒体可包含RAM、 ROM、 EEPROM、 CD-ROM或其它光盘存储装置、磁盘存储装置或其它磁性存储装置, 或可用以载运或存储呈指令或数据结构的形式的所要程序代码且可由计算机存取的任 何其它媒体。在用于本文中时,磁盘(disk)及光盘(disc)包括压縮光盘(CD)、激光 光盘、光学盘片、数字化通用光盘(DVD)、软盘及蓝光光盘,其中磁盘通常以磁性方 式重现数据,而光盘通过激光以光学方式重现数据。以上的组合也应包括于计算机可读 媒体的范围内。
已描述各种实例。这些及其它实例属于随附权利要求书的范围内。
权利要求
1.一种方法,其包含使用处理元件并行执行机器代码指令集合以产生乐器数字接口(MIDI)帧中存在的MIDI语音的数字波形,其中所述机器代码指令集合中的机器代码指令是在经特殊化以用于产生MIDI语音的数字波形的指令集中界定的机器代码指令的实例;聚集所述MIDI语音的所述数字波形以产生所述MIDI帧的整体数字波形;以及输出所述整体数字波形。
2. 根据权利要求1所述的方法,其中执行机器代码指令集合包含在所述处理元件中的 一者内从存储器单元检索字,其中所述字含有多个机器代码指令。
3. 根据权利要求2所述的方法,其中执行机器代码指令集合进一步包含使用所述处理 元件中的所述一者并行执行所述字中的所述机器代码指令。
4. 根据权利要求1所述的方法,其中执行机器代码指令集合包含使用所述处理元件中 的控制单元向波形获取单元输出控制信号以获得MIDI语音的基本波形。
5. 根据权利要求1所述的方法,其中执行机器代码指令集合包含使用所述处理元件中 的控制单元向求和缓冲器输出控制信号,以将值存储到所述求和缓冲器中以与其它 值聚集来产生所述MIDI帧的所述整体数字波形。
6. 根据权利要求1所述的方法,其中执行机器代码指令集合包含使用所述处理元件中的控制单元向所述处理元件中的算术逻辑单元(ALU)输出 控制信号以指令所述ALU执行算术运算,其中所述ALU经特殊化以执行对于产生MIDI语音的数字波形具有特殊效用的 算术运算。
7. 根据权利要求6所述的方法,其中输出控制信号包含输出控制信号以致使所述 ALU通过使一组寄存器中的寄存器中的无符号值与所述组寄存器中的寄存器中的 无符号值相乘而计算乘积;使所述乘积移位以产生经移位的乘积;提取所述经移位 的乘积的位中的一些位;以及确定所述所提取的位是否表示比存储于所述组寄存器中的寄存器中的数目小的数目。
8. 根据权利要求1所述的方法,其中执行机器代码指令集合包含在因对掩码参数及界 定MIDI语音的语音参数集合中的参数中的位集合进行按位AND运算而产生非零 值时给所述处理元件中的一者的程序计数器加载机器代码指令的地址值,所述处理 元件正针对所述MIDI语音产生数字波形。
9. 根据权利要求1所述的方法,其中执行机器代码指令集合包含使用所述处理元件中 的一者中的控制单元向协调模块输出控制信号,以向所述协调模块指示所述处理元 件己结束产生MIDI语音的数字波形。
10. 根据权利要求1所述的方法,其中所述方法进一步包含使用数字信号处理器(DSP) 将所述机器代码指令集合加载到所述处理元件的程序存储器单元中。
11. 根据权利要求1所述的方法,其中所述方法进一步包含使用所述DSP输出包括所述MIDI帧的所述整体数字波形的连续数字波形;且其中基于所述MIDI帧的所述数字波形输出声音包含基于由所述DSP输出的所述连续数字波形输出声音。
12. 根据权利要求1所述的方法,其中所述方法进一步包含使用通用处理器剖析MIDI文件且对与所述MIDI文件相关联的MIDI事件进行 调度;以及使用数字信号处理器(DSP)处理所述MIDI事件以输出连续数字波形; 其中硬件单元执行所述机器代码指令集合。
13. 根据权利要求1所述的方法,其中基于所述数字波形输出声音包含将所述整体数字波形转换为模拟输出;以及 将所述模拟输出作为声音而输出。
14. 根据权利要求1所述的方法,其中所述方法进一步包含产生语音指示符的链接列表,其中所述链接列表中的所 述语音指示符中的每一者通过指定存储界定MIDI帧的MIDI语音的语音参数集合 的存储器位置而指示所述MIDI语音,其中由所述链接列表中的所述语音指示符指 示的所述MIDI语音是在所述MIDI帧期间具有最大声学显著性的那些MIDI语音; 且其中所述链接列表包括指示当前MIDI语音的语音指示符。
15. 根据权利要求l所述的方法,其中执行机器代码指令集合包含执行所述机器代码指令集合中的一者中的机器代码指令, 其中执行所述机器代码指令包含-使用控制单元读取所述机器代码指令;基于界定所述当前MIDI语音的语音参数集合选择操作;以及 输出控制信号以致使执行所述选定操作。
16. 根据权利要求15所述的方法,其中选择操作包含识别所述语音参数集合中的控制 参数中的位的值。
17. 根据权利要求15所述的方法,其中选择操作包含选择包络产生操作。
18. 根据权利要求17所述的方法,其中执行所述机器代码指令进一步包含向模块提供参数值;且 其中所述模块选择所述操作且执行所述选定操作。
19. 根据权利要求18所述的方法,其中向模块提供参数值包含向低频振荡器(LFO)模块提供所述参数值,且 其中执行所述指令进一步包含将来自所述LFO模块中的寄存器的值存储到本地寄存器;以及更新所述LFO模块中的所述寄存器中的值。
20. —种装置,其包含一组程序存储器单元,其存储机器代码指令集合,其中所述机器代码指令集合中的机器代码指令是在经特殊化以用于产生MIDI语音的数字波形的指令集中界定的 机器代码指令的实例;一组处理元件,其并行执行所述机器代码指令集合以产生MIDI帧中的MIDI语 音的数字波形;求和缓冲器,其聚集所述MIDI语音的所述数字波形以产生所述MIDI帧的整体 数字波形。
21. 根据权利要求20所述的装置,其中所述处理元件包含通过读取字而从所述程序存 储器单元读取指令的控制单元,其中所述字中的每一者包括多个指令。
22. 根据权利要求21所述的装置,其中所述处理元件中的一者并行执行所述字中的一 者中包括的所述指令。
23. 根据权利要求20所述的装置,其中所述装置进一步包含存储器单元,其含有MIDI语音的一组基本波形;以及波形获取单元,其从所述存储器单元获得所述基本波形中的各者;且其中所述处理元件中的每一者包含控制单元,其在所述控制单元遇到所述指令中的一者时向所述波形获取单元输出控制信号以获得MIDI语音的基本波形。
24. 根据权利要求20所述的装置,其中所述处理元件中的每一者包含控制单元',其向所述求和缓冲器输出控制信号 以将值存储到所述求和缓冲器中,其中所述求和缓冲器聚集所述值以产生所述MIDI帧的所述整体数字波形。
25. 根据权利要求20所述的装置,其中所述处理元件中的每一者包含经特殊化的算术逻辑单元(ALU),其执行对于产生MIDI语音的数字波形具有 特殊效用的算术运算;以及控制单元,其向所述ALU输出控制信号以指令所述ALU执行算术运算。
26. 根据权利要求25所述的装置,其中所述处理元件中的每一者进一步包含一组寄存器;且其中所述控制单元输出控制信号以致使所述ALU通过使所述寄存器中的一者中 的无符号值与所述寄存器中的一者中的无符号值相乘而计算乘积,使所述乘积移位 以产生经移位的乘积,提取所述经移位的乘积的位中的一些位,且接着确定所述所 提取的位是否表示比存储于所述寄存器中的一者中的数目小的数目。
27. 根据权利要求20所述的装置,其中所述处理元件中的每一者进一步包含程序计数器,其含有所述程序存储器单元中的一者中的下一指令的存储器地址; 以及控制单元,其在因对掩码参数及界定MIDI语音的语音参数集合的参数中的位集 合进行按位AND运算而产生非零值时给所述程序计数器加载机器代码指令的地址 值,所述处理元件正针对所述MIDI语音产生数字波形。
28. 根据权利要求20所述的装置,其中所述装置迸一步包含协调模块,其将所述MIDI 帧中的所述MIDI语音指派给所述处理元件中的各者;且其中所述处理元件中的每一者进一步包含控制单元,其向所述协调模块输出控制 信号以向所述协调模块指示所述处理元件已结束产生MIDI语音的数字波形。
29. 根据权利要求20所述的装置,其中所述装置进一步包含数字信号处理器(DSP), 其将所述机器代码指令集合加载到所述程序存储器单元中。
30. 根据权利要求29所述的装置,其中所述DSP输出包括所述MIDI帧的所述整体数 字波形的连续数字波形;且其中扬声器基于所述连续数字波形输出声音。
31. 根据权利要求20所述的装置,其中所述装置进一步包含MIDI硬件单元,其产生MIDI帧中的MIDI语音集合的数字波形,其中所述处理 元件是所述MIDI硬件单元的组件;通用处理器,其剖析MIDI文件且对与所述MIDI文件相关联的MIDI事件进行 调度;以及DSP,其处理所述MIDI事件以便基于所述MIDI事件输出连续数字波形。
32. 根据权利要求31所述的装置,其中所述装置进一步包含数/模转换器,其将所述连续数字波形转换为模拟音频信号;以及 驱动电路,其使用所述模拟音频信号以驱动所述扬声器输出所述声音。
33. 根据权利要求32所述的装置,其中所述DSP包含列表产生器模块,其产生语音指示符的链接列表,其中所述链接列表中的所述语 音指示符中的每一者通过指定存储界定MIDI帧的MIDI语音的语音参数集合的存 储器位置而指示所述MIDI语音,其中由所述链接列表中的所述语音指示符指示的所述MIDI语音是在所述MIDI 帧期间具有最大声学显著性的那些MIDI语音;且其中所述链接列表包括指示当前MIDI语音的语音指示符,其中所述处理元件产生由所述链接列表中的所述语音指示符指示的MIDI语音的 数字波形。
34. 根据权利要求20所述的装置,其中所述处理元件中的每一者包含控制单元;且其中所述指令中的至少一者致使所述控制单元输出控制信号以基于界定所述当 前MIDI语音的语音参数集合选择操作且输出信号以致使执行所述选定操作。
35. 根据权利要求34所述的装置,其中所述处理元件进一步包含执行数学运算的算术 逻辑单元(ALU);其中所述控制单元选择所述操作;且其中所述控制单元向所述ALU输出指令所述ALU执行所述选定操作的控制信 号。
36. 根据权利要求35所述的装置,其中所述控制单元在所述控制单元读取包络产生计 算指令时选择所述操作。
37. 根据权利要求34所述的装置,其中所述装置进一步包含产生三角形数字波形的低 频振荡器(LFO);其中所述LFO选择所述操作;且 其中所述LFO执行所述选定操作。
38. 根据权利要求37所述的装置,其中所述处理元件包含一组寄存器;且其中所述控制单元向所述LFO输出控制信号以将所述三角形波形的样本存储到所述寄存器中的一者且更新由所述LFO产生的所述三角形波形。
39. 根据权利要求20所述的装置,其中所述装置进一步包含一个或一个以上扬声器,其基于所述数字波形输出声音。
40. —种包含指令的计算机可读媒体,所述指令致使可编程处理器致使一组处理元件使用处理元件并行执行机器代码指令集合以产生MIDI帧中存在的MIDI语音的数字波形,其中所述机器代码指令集合中的机器代码指令是在经特殊化以用于产生MIDI语音的数字波形的指令集中界定的机器代码指令的实例;致使求和缓冲器聚集所述MIDI语音的所述数字波形以产生所述MIDI帧的整体数字波形;且致使所述求和缓冲器输出所述整体数字波形。
41. 根据权利要求40所述的计算机可读媒体,其中所述致使所述可编程处理器致使一组处理元件并行执行机器代码指令集合的指令致使所述可编程处理器致使所述处理元件中的控制单元向波形获取单元输出控制信号以获得MIDI语音的基本波形。
42. 根据权利要求40所述的计算机可读媒体,其中所述致使所述可编程处理器致使一组处理元件并行执行机器代码指令集合的指令致使所述可编程处理器致使所述处理元件中的控制单元向所述处理元件中的算术逻辑单元(ALU)输出控制信号以指令所述ALU执行算术运算,其中所述ALU经特殊化以执行对于产生MIDI语音的数字波形具有特殊效用的算术运算。
43. —种装置,其包含用于存储机器代码指令集合的装置,其中所述机器代码指令集合中的机器代码指令是经特殊化以用于产生MIDI语音的数字波形的指令集中的机器代码指令的实例;用于并行执行所述机器代码指令集合以产生MIDI语音的数字波形的装置;用于聚集所述MIDI语音的所述数字波形以产生MIDI帧的整体数字波形的装置;以及用于输出所述整体数字波形的装置。
44. 根据权利要求43所述的装置,其中所述装置进一步包含用于含有MIDI语音的一组基本波形的装置;以及用于从所述用于含有所述组基本波形的装置获得所述基本波形中的各者的装置;且其中所述处理元件中的每一者包含在控制单元遇到所述指令中的一者时向所述装置输出控制信号以获得所述基本波形中的各者以便获得MIDI语音的基本波形的装置。
45. 根据权利要求43所述的装置,其中所述用于执行所述机器代码指令集合的装置包含用于执行对于产生MIDI语音的数字波形具有特殊效用的算术运算的装置;以及用于向所述用于执行算术运算的装置输出控制信号以指令所述用于执行算术运算的装置执行算术运算的装置。
全文摘要
本发明使用经特殊化以用于产生乐器数字接口(MIDI)语音的数字波形的机器代码指令集合来产生MIDI语音的数字波形。举例来说,处理器可执行产生MIDI语音的数字波形的软件程序。所述软件程序的指令可为来自经特殊化以用于产生MIDI语音的数字波形的指令集的机器代码指令。
文档编号G10H7/00GK101641732SQ200880008804
公开日2010年2月3日 申请日期2008年3月17日 优先权日2007年3月22日
发明者尼迪什·拉马钱德拉·卡马特, 普拉加克特·V·库尔卡尼, 苏雷什·德瓦拉帕里 申请人:高通股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1