CN101641730B - 乐器数字接口硬件装置和方法 - Google Patents
乐器数字接口硬件装置和方法 Download PDFInfo
- Publication number
- CN101641730B CN101641730B CN2008800092858A CN200880009285A CN101641730B CN 101641730 B CN101641730 B CN 101641730B CN 2008800092858 A CN2008800092858 A CN 2008800092858A CN 200880009285 A CN200880009285 A CN 200880009285A CN 101641730 B CN101641730 B CN 101641730B
- Authority
- CN
- China
- Prior art keywords
- midi
- voice
- value
- instruction
- machine code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 60
- 230000015654 memory Effects 0.000 claims description 67
- 238000004364 calculation method Methods 0.000 claims 4
- 238000004088 simulation Methods 0.000 claims 2
- 238000000605 extraction Methods 0.000 description 35
- 230000006870 function Effects 0.000 description 33
- 238000010586 diagram Methods 0.000 description 28
- 230000008569 process Effects 0.000 description 23
- 239000000284 extract Substances 0.000 description 21
- 230000004087 circulation Effects 0.000 description 15
- 238000005516 engineering process Methods 0.000 description 12
- 230000007423 decrease Effects 0.000 description 10
- 230000000694 effects Effects 0.000 description 9
- 238000006073 displacement reaction Methods 0.000 description 8
- 230000008901 benefit Effects 0.000 description 6
- 230000008859 change Effects 0.000 description 6
- 230000004044 response Effects 0.000 description 5
- 230000000712 assembly Effects 0.000 description 4
- 238000000429 assembly Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- 238000009434 installation Methods 0.000 description 4
- 230000002045 lasting effect Effects 0.000 description 4
- 230000010363 phase shift Effects 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 230000006399 behavior Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000006855 networking Effects 0.000 description 2
- 230000033764 rhythmic process Effects 0.000 description 2
- 230000005236 sound signal Effects 0.000 description 2
- 230000002459 sustained effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- LHMQDVIHBXWNII-UHFFFAOYSA-N 3-amino-4-methoxy-n-phenylbenzamide Chemical compound C1=C(N)C(OC)=CC=C1C(=O)NC1=CC=CC=C1 LHMQDVIHBXWNII-UHFFFAOYSA-N 0.000 description 1
- 241001536374 Indicator indicator Species 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000003213 activating effect Effects 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 239000012141 concentrate Substances 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000009795 derivation Methods 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 230000005291 magnetic effect Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000001537 neural effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000001151 other effect Effects 0.000 description 1
- 230000008447 perception Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000008672 reprogramming Effects 0.000 description 1
- 230000029058 respiratory gaseous exchange Effects 0.000 description 1
- 239000011435 rock Substances 0.000 description 1
- 230000013707 sensory perception of sound Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G10—MUSICAL INSTRUMENTS; ACOUSTICS
- G10H—ELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
- G10H1/00—Details of electrophonic musical instruments
-
- G—PHYSICS
- G10—MUSICAL INSTRUMENTS; ACOUSTICS
- G10H—ELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
- G10H1/00—Details of electrophonic musical instruments
- G10H1/0033—Recording/reproducing or transmission of music for electrophonic musical instruments
- G10H1/0041—Recording/reproducing or transmission of music for electrophonic musical instruments in coded form
- G10H1/0058—Transmission between separate instruments or between individual components of a musical system
- G10H1/0066—Transmission between separate instruments or between individual components of a musical system using a MIDI interface
-
- G—PHYSICS
- G10—MUSICAL INSTRUMENTS; ACOUSTICS
- G10H—ELECTROPHONIC MUSICAL INSTRUMENTS; INSTRUMENTS IN WHICH THE TONES ARE GENERATED BY ELECTROMECHANICAL MEANS OR ELECTRONIC GENERATORS, OR IN WHICH THE TONES ARE SYNTHESISED FROM A DATA STORE
- G10H7/00—Instruments in which the tones are synthesised from a data store, e.g. computer organs
- G10H7/002—Instruments in which the tones are synthesised from a data store, e.g. computer organs using a common processing for different operations or calculations, and a set of microinstructions (programme) to control the sequence thereof
-
- G—PHYSICS
- G10—MUSICAL INSTRUMENTS; ACOUSTICS
- G10K—SOUND-PRODUCING DEVICES; METHODS OR DEVICES FOR PROTECTING AGAINST, OR FOR DAMPING, NOISE OR OTHER ACOUSTIC WAVES IN GENERAL; ACOUSTICS NOT OTHERWISE PROVIDED FOR
- G10K15/00—Acoustics not otherwise provided for
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Acoustics & Sound (AREA)
- Multimedia (AREA)
- General Engineering & Computer Science (AREA)
- Electrophonic Musical Instruments (AREA)
Abstract
本发明描述使用经特殊化以用于产生乐器数字接口(MIDI)语音的数字波形的机器代码指令集合来产生MIDI语音的数字波形的技术。举例来说,处理器可执行产生MIDI语音的数字波形的软件程序。所述软件程序的指令可为来自经特殊化以用于产生MIDI语音的数字波形的指令集的机器代码指令。确切地说,所述指令中的一者的执行可涉及基于界定MIDI语音的参数集合而选择操作及执行所述选定操作。
Description
根据35U.S.C.§119主张优先权
本专利申请案主张2007年3月22日所申请的标题为“乐器数字接口硬件指令(″MUSICAL INSTRUMENT DIGITAL INTERFACE HARDWARE FNSTRUCTIONS″)”的第60/896,450号临时申请案的优先权,所述临时申请案转让给本案受让人且在此以引用的方式明确地并入本文中。
技术领域
本发明涉及电子装置,且具体来说涉及产生音频的电子装置。
背景技术
乐器数字接口(MIDI)是用于产生、传送及回放例如音乐、话音、音调、警报及其类似物的音频声音的格式。支持MIDI格式的装置可存储可用以产生各种“语音”的音频信息集合。每一语音可对应于特定声音,例如由特定器具产生的音符。举例来说,第一语音可对应于如由钢琴演奏的中音C,第二语音可对应于如由长号演奏的中音C,且第三语音可对应于如由长号演奏的D#音等等。为了复制不同器具演奏的声音,符合MIDI的装置可包括指定与声音相关联的各种音频特征(例如低频振荡器的行为、例如颤音等效果及可影响对声音的感知的许多其它音频特征)的语音信息集合。可界定、在MIDI文件中输送及由支持MIDI格式的装置重现几乎任何声音。
支持MIDI格式的装置可在指示装置应开始产生音符的事件发生时产生音符(或其它声音)。类似地,装置在指示装置应停止产生音符的事件发生时停止产生音符。可通过指定指示特定语音何时应开始及停止的事件及对语音的各种影响而根据MIDI格式对整个音乐作品进行编码。以此方式,可以根据MIDI格式的紧凑文件格式来存储及传输音乐作品。
多种装置中支持MIDI格式。举例来说,例如无线电话等无线通信装置可支持MIDI文件以用于可下载声音,例如铃声或其它音频输出。例如苹果计算机有限公司(Apple Computer,Inc)售卖的“iPod”装置及微软公司(Microsoft Corp.)售卖的“Zune”装置等数字音乐播放器也可支持MIDI文件格式。其它支持MIDI格式的装置可包括各种音乐合成器,例如键盘、音序器、语音编码器(音码器)及节奏机。另外,多种装置也可支持MIDI文件或音轨的回放,包括无线移动装置、直接双向通信装置(有时称为对讲机)、网络电话、个人计算机、桌上型及膝上型计算机、工作站、卫星无线电装置、内部通信装置、无线电广播装置、手持型游戏装置、安装于装置中的电路板、信息查询站(informationkiosk)、视频游戏控制台、各种儿童计算机化玩具、用于汽车、船只及飞机中的机载计算机及多种其它装置。
发明内容
大体而言,描述使用经特殊化以用于产生乐器数字接口(MIDI)语音的数字波形的机器代码指令集合来产生MIDI语音的数字波形的技术。举例来说,处理器可执行产生MIDI语音的数字波形的软件程序。软件程序的指令可为来自经特殊化以用于产生MIDI语音的数字波形的指令集的机器代码指令。确切地说,所述指令中的一者的执行可涉及基于界定MIDI语音的参数集合而选择操作及执行选定操作。
在一方面中,一种方法包含执行产生MIDI语音的数字波形的软件程序中的机器代码指令。执行软件程序中的指令包含基于界定MIDI语音的语音参数集合选择操作,及输出控制信号以致使选定操作被执行。所述方法还包含输出数字波形。
在另一方面中,一种装置包含存储界定MIDI语音的语音参数集合的存储器单元。所述装置还包含处理元件,其执行软件程序中的机器代码指令以产生MIDI语音的数字波形。完成机器代码指令的执行涉及基于语音参数集合而选择操作及执行选定操作。
在另一方面中,一种计算机可读媒体包含指令。所述指令致使一个或一个以上处理器执行产生MIDI语音的数字波形的软件程序中的机器代码指令。执行软件程序中的指令包含基于界定MIDI语音的语音参数集合选择操作,及输出控制信号以致使选定操作被执行。计算机可读媒体还包含致使所述一个或一个以上处理器输出数字波形的指令。
在另一方面中,一种装置包含用于存储界定MIDI语音的语音参数集合的装置。所述装置还包含用于执行软件程序中的机器代码指令以产生MIDI语音的数字波形的装置。完成机器代码指令的执行涉及基于语音参数集合而选择操作及执行选定操作。
在另一方面中,一种电路可经配置以执行产生MIDI语音的数字波形的软件程序的机器代码指令,其中所述电路经配置以基于界定MIDI语音的语音参数集合而选择操作且输出控制信号以致使选定操作被执行,且输出数字波形。
在随附图式及以下描述中阐述细节。其它特征、目标及优势将根据描述及图式且根据权利要求书而显而易见。
附图说明
图1是说明包括产生声音的音频装置的示范性系统的框图。
图2是说明音频装置的示范性乐器装置接口(MIDI)硬件单元的框图。
图3是说明音频装置的实例操作的流程图。
图4是说明音频装置中的数字信号处理器(DSP)的实例操作的流程图。
图5是说明音频装置的MIDI硬件单元中的协调模块的实例操作的流程图。
图6是说明使用指定存储器地址的语音指示符的列表的实例DSP的框图。
图7是说明当DSP从处理器接收MIDI事件的集合时DSP的示范性操作的流程图。
图8是说明当DSP在语音指示符的列表中插入语音指示符时DSP的实例操作的流程图。
图9是说明当DSP在所述列表中插入语音指示符时DSP的示范性操作的流程图。
图10是说明当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是无线电话,则可包括天线、发射器、接收器及调制解调器(调制器-解调器)以促进音频文件的无线传送。
如图1的实例中所说明,音频装置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可包含通用微处理器,例如英特尔奔腾4(Intel Pentium 4)处理器、遵照ARM控股公司(ARM Holdings of CherryHinton,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毫秒且以48kHz对数字波形进行取样(亦即,每秒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语音的语音指示符的列表。在DSP 12产生语音指示符的列表之后,DSP 12可设置MIDI硬件单元18中的一个或一个以上寄存器。DSP 12可使用直接存储器交换(DME)来设置这些寄存器。DME是在处理器正执行其它操作的同时将数据从一个存储器单元转移到另一存储器单元的程序。在DSP 12设置寄存器之后,DSP 12可指令MIDI硬件单元18开始产生MIDI帧的数字波形。如下文所详细解释,MIDI硬件单元18可通过针对语音指示符的列表中的每一MIDI语音产生数字波形且将这些数字波形聚集为MIDI语音的波形而产生MIDI帧的数字波形。当MIDI硬件单元18结束产生MIDI帧的数字波形时,MIDI硬件单元18可向DSP 12发送中断。在从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单元10加载到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中的每一者可使用WFU 36。响应于来自处理元件34中的一者的请求,WFU 36可向请求处理元件返回一个或一个以上波形样本。因为波形可在样本内相移(例如,高达一个波形循环),所以WFU 36可返回两个样本以便使用内插而补偿相移。此外,因为立体声信号由两个单独的波形组成,所以WFU 36可返回高达四个样本。由WFU 36返回的最后样本可为可用于内插的分数相位。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的内容。或者,DSP10也可经预编程以执行DME。或者,DSP 12也可经预编程以执行DME。
图3是说明音频装置4的实例操作的流程图。最初,处理器8遇到将MIDI文件从音频存储模块6加载到RAM单元10中的程序指令(50)。举例来说,如果音频装置4是移动电话,则当音频装置4接收到传入的电话呼叫且MIDI文件描述铃声时处理器8可遇到将MIDI文件从持久存储模块6加载到RAM单元10中的程序指令。
在将MIDI文件加载到RAM单元10中之后,处理器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中的DSP 12的实例操作的流程图。最初,DSP 12从处理器8接收MIDI事件(70)。在接收到MIDI事件之后,DSP 12确定MIDI事件是否为更新MIDI语音的参数的指令(72)。举例来说,DSP 12可接收MIDI事件以针对钢琴的中音C语音增大语音参数集合中的左侧通道参数的增益。以此方式,钢琴的中音C语音可能听起来如同音符正来自左侧。如果DSP 12确定MIDI事件是更新MIDI语音的参数的指令(72 为“是”),则DSP 12可更新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)来识别在声学上最为显著的语音。举例来说,DSP 12可识别具有最高平均音量的那些语音、形成必要谐调的那些语音或其它声学特征。DSP 12可产生语音指示符的列表以使得在声学上最为显著的语音是列表中的第一个语音、在声学上第二显著的语音是列表中的第二个语音等等。另外,DSP 12可从列表移除在MIDI帧中不活动的任何语音。
在产生语音指示符的列表之后,DSP 12可确定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之后,DSP12可等待直到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写入存储于与处理元件相关联的VPSRAM单元46中的一者中及WFU/LFO存储器39中的可能已由处理元件、波形获取单元36或LFO 38改变的语音参数集合的一个或一个以上参数(108)。举例来说,在产生MIDI语音的波形的同时,处理元件34A可改变VPS存储器46A中的语音参数集合的特定参数。在此情况下,例如,处理元件34A可更新语音的语音参数以指示MIDI帧的末尾的语音的音量水平。通过将经更新的语音参数写回到RAM单元10,给定处理元件可开始产生下一MIDI帧中处于与当前MIDI帧所终止于的音量水平相同的音量水平的MIDI语音的数字波形。其它可写入参数可包括左右平衡、整体相移、由LFO 38产生的三角形波形的相移或其它声学特征。
在协调模块将参数写回到RAM单元10之后,协调模块32可确定处理元件34是否已产生由列表中的语音指示符所指示的每一MIDI语音的数字波形(110)。举例来说,协 调模块32可维持指示语音指示符的链接列表中的当前语音指示符的指针。最初,此指针可指示链接列表中的第一语音指示符。如果处理元件34已针对列表中所指示的MIDI语音中的每一者产生数字波形(110为“是”),则协调模块32可向DSP 12断言中断以指示MIDI帧的整体数字波形是完整的(112)。
另一方面,如果处理元件34尚未针对列表中的语音指示符所指示的MIDI语音中的每一者产生数字波形(110为“否”),则协调模块32可识别处理元件34中闲置的一者(114)。如果所有处理元件34均不闲置(亦即,繁忙),则协调模块32可等待直到处理元件34中的一者闲置。在识别处理元件34中闲置的一者之后,协调模块32可将当前语音指示符所指示的语音参数集合的参数加载到VPS RAM单元44中与闲置处理元件相关联的一者中(112)。协调模块32可能仅将语音参数集合的与处理元件相关的那些参数加载到VPSRAM单元中。另外,协调模块32可将语音参数集合的与WFU 36及LFO 38相关的参数加载到WFU/LFO RAM单元39中(118)。协调模块32接着可使闲置处理元件能够开始产生MIDI语音的数字波形(120)。接下来,协调模块32可将当前语音指示符更新为列表中的下一语音指示符且返回以再次确定协调模块32是否已接收到指示处理元件34中的一者已完成产生MIDI语音的数字波形的信号(106)。
图6是说明使用指定存储器地址的语音指示符的列表的实例DSP 12的框图。如图6的实例中所说明,DSP 12包括存储列表基础指针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可能不含有任何语音指示符。为了反映列表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的实例中,DSP 12包括在产生列表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单元10及从RAM单元10移动(亦即,写入及读取)较少数据。因此,与DSP 12对语音参数集合进行了分类及重新排列的情况相比,DSP12可需要从协调模块32到RAM单元10的总线上的较少带宽。此外,因为DSP 12向RAM单元10及从RAM单元10移动较少数据,所以与DSP 12移动了实际语音参数集合的情况相比,DSP 12可消耗较少功率。又,对语音指示符的链接列表的使用可准许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从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的值(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的值设置为当前语音指示符中的下一语音指示符指针的值(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单元10检索由事件语音指示符指示的语音参数集合(210)。列表产生器模块156接着可从RAM单元10检索由当前语音指示符指示的语音参数集合(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移除语音指示符时DSP 12的示范性操作的流程图。举例来说,DSP 12可将列表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将链接列表存储器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单元10将每一语音参数集合存储于邻接块中,所以一个语音参数集合在紧随先前语音参数集合的存储器位置中开始。
当DSP 12或协调模块32需要存取语音参数集合的块262中的语音参数集合时,DSP12或协调模块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可包括用于VPS RAM单元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:
语法:MULTSS Rx、Ry、移位量、Rz、ACC
功能:使得控制单元280输出指令ALU 282执行寄存器Rx与Ry中的带符号值的乘法 的控制信号,且接着使乘积向左移位由“移位量”指定的量。在使乘积移位之后,ALU 282从乘积提取由ACC指定的位。ALU 282接着输出这些位。如果ACC=0,则ALU 282提取乘积的较低32个位。如果ACC=1,则ALU 282提取乘积的中间32个位。如果ACC=2,则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接着输出这些位。如果ACC=0,则ALU282提取乘积的较低32个位。如果ACC=1,则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中。如果ACC=1,则ALU 282提取乘积的中间32个位。如果ACC=2,则ALU 282提取乘积的较高32个位。此指令还使得控制单元280向多路复用器284输出控制信号以将来自ALU 282的输出引导到寄存器286中的Rz。
MACSS:
语法:MACSS Rx、Ry、移位量、Rz、ACC
功能:使得控制单元280输出指令ALU 282执行寄存器Rx与Ry中的带符号值的乘法的控制信号,且接着使乘积向左移位由“移位量”指定的量。在使乘积移位之后,ALU 282从乘积提取由ACC指定的32个位且接着将这32个位添加到Rz中的值且输出所得位。如果ACC=0,则ALU 282提取乘积的较低32个位。如果ACC=1,则ALU 282提取乘积的中间32个位。如果ACC=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,则ALU282提取乘积的中间32个位。如果ACC=2,则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=0,则ALU 282提取乘积的较低32个位。如果ACC=1,则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,则ALU 282提取乘积的较高32个位。此指令还使得控制单元280向多路复用器284输出控制信号以将来自ALU 282的输出引导到寄存器286中的Rz。
MACSSD
语法: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。
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输出指令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。
MASSS
语法:MASSS Rx、Ry、移位量、Rz、ACC
功能:使得控制单元280输出指令ALU 282执行寄存器Rx与Ry中的带符号值的乘法的控制信号,且接着使乘积向左移位由“移位量”指定的量。ALU 282接着从乘积提取由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。
MASSU
语法:MASSS Rx、Ry、移位量、Rz、ACC
功能:使得控制单元280输出指令ALU 282执行寄存器Rx中的带符号值与寄存器Ry中的无符号值的乘法的控制信号,且接着使乘积向左移位由“移位量”指定的量。ALU 282接着从乘积提取由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。
MASUU
语法:MASUU Rx、Ry、移位量、Rz、ACC
功能:使得控制单元280输出指令ALU 282执行寄存器Rx与Ry中的无符号值的乘法的控制信号,且接着使乘积向左移位由“移位量”指定的量。控制信号还使得ALU 282从乘积提取由ACC指定的32个位。在提取位之后,ALU 282从Rz中的值减去这些位且输出所得值。如果ACC=0,则ALU 282提取乘积的较低32个位。如果ACC=1,则ALU282提取乘积的中间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(1:0)*2+1):(ACC*8+second_loop_counter(1:0)*2))
换句话说,“模式”的值等于当前语音参数集合的控制字中的两个位。可通过执行以下步骤来确定那两个位中较高有效的一者的索引:
(1)通过使ACC的值乘以八(亦即,使ACC的值的按位表示向左移位三个位置)而产生第一乘积。
(2)通过使第二循环计数器的两个最低有效位乘以二(亦即,使ACC的值的按位表示向左移位一个位置)而产生第二乘积。
(3)使第一乘积、第二乘积及数字一相加。
可通过执行相同步骤(除了在第三步骤中不添加数字一)而确定控制字的两个位中较低有效的一者的索引。举例来说,控制字可等于0x0000807(亦即,0b0000 0000 0000 00000100 0000 0111)。此外,ACC的值可为0b0001,且第二循环计数器的值可为0b0001。在此实例中,控制字中较高有效位的索引为0b00001011(亦即,十进制的数字十一),且控制字中较低有效位的索引为0b00001010(亦即,十进制的数字十)。在先前语句中,索引值的加下划线的位表示来自ACC的位,且索引值的斜体的位表示来自第二循环计数器的位。因此,模式为01(亦即,十进制的数字一),因为值0及1分别处于控制字的位置11及10处。因为模式为01,所以ALU 282执行Rx中的值与Ry中的值的无符号乘法,使乘积向左移位移位量中指定的量,且接着输出经移位的乘积的最高有效的三十二(32)个位。
包络产生是一种为个别音符的音量或调制质量建模的方法。每一音符可具有若干阶段。举例来说,音符可具有延迟阶段、起声阶段(attack phase)、保持阶段、衰退阶段、持续阶段及释放阶段。延迟阶段可界定在起声阶段开始之前的时间的量。在起声阶段期间,音量或调制水平增大到峰值水平。在保持阶段期间,音量或调制水平维持于峰值水平。在衰退阶段期间,音量或调制水平下降到持续水平。在持续水平期间,音量或调制水平维持于持续水平。在释放阶段期间,音量或调制水平下降到零。此外,音量或调制水平的改变可为线性或指数的。可以子帧为单位来界定包络产生阶段的长度。术语“子帧”可指代MIDI帧的四分之一。举例来说,如果MIDI帧为10毫秒,则子帧为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中加载地址及(地址+1)处的值。如果地址为奇数,则分别在Ry及Rz中加载(地址-1)及地址处的值。
STOREDATA
语法:STOREDATA地址、Ry、Rz。
功能:如果Ry等于Rz,则将Ry的值存储到地址。如果地址为偶数,则分别在地址及(地址+1)处存储Ry及Rz处的值。如果地址为奇数,则分别在(地址-1)及地址处存储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中的值发送到WFU 36。
STORESUM
语法:STORESUM acc_sat_mode、Rx、Ry。
功能:将寄存器Rx及Ry中的值存储到求和缓冲器40。另外,此指令发送隐含地取决于第一及第二循环计数器的样本计数器。样本计数器描述数字波形的哪一样本当前正由处理元件34A处理。当控制单元280从协调模块32接收到复位命令时,控制单元280将所述值初始化为零。随后,控制单元280在每次控制单元280遇到STORESUM指令时使样本计数器递增一。控制单元280可将样本计数器作为控制信号输出到求和缓冲器40。acc_sat_mode参数可界定求和缓冲器40是否使样本的值饱和化。饱和化可在样本的值上升到针对样本可存储的最大数目以上或下降到针对样本可存储的最小数目以下时发生。如果启用饱和化,则求和缓冲器40可在使Rx及Ry的值相加会使得样本的值上升到针对样本可表示的最大数目以上或下降到针对样本可表示的最小数目以下时将值维持于最大数目或最小数目。如果未启用饱和化,则求和缓冲器40可在使Rx及Ry的值相加时使样本的数目上滚。另外,acc_sat_mode参数可确定求和缓冲器40是用寄存器Rx及Ry中的值替代样本的值还是将寄存器Rx及Ry中的值添加到求和缓冲器40中的样本的值。以下图表可说明acc_sat_mode参数的示范性操作:
Acc_Sat_Mode(2个位) | 功能 |
00 | 无累加;无饱和化 |
01 | 无累加;使输入及存储饱和化。 |
[0172]
10 | 将输入与求和缓冲器ram中的现有元素累加。不对经累加的输出执行饱和化。 |
11 | 将输入与求和缓冲器ram中的现有元素累加。输出在其被存储回到求和缓冲器40之前经饱和化。 |
LOADLFO
语法:LOADLFO lfo_id、lfo_update、Rx
其中
{lfo_id}=待读取的LFO的类型:2位
00:modLfo→音高
01:modLfo→增益
10:modLfo→频率拐角(frequency corner)
11:vibLfo→音高
{lfo_update}=在当前输出之后更新哪一参数:2位
00:无更新
01:仅更新LFO值
10:仅更新LFO相位
11:更新LFO值及相位两者。
功能:从具有由“lfo_id”指定的识别符的LFO 38载入一值到Rx。另外,此
指令指令LFO 38在将值加载Rx之后更新哪一参数。
如上文所论述,LFO 38可产生一个或一个以上精确的三角形数字波形。对于处理元件34中的每一者,LFO 38可提供四个输出值:调制音高值、调制增益值、调制频率拐角值及颤音音高值。这些输出值中的每一者可表示三角形数字波形上的一变化。
当控制单元280读取LOADLFO指令时,控制单元280可向LFO 38输出表示“lfo_id”参数的控制信号。表示“lfo_id”参数的控制信号可指令LFO 38将输出值中的一者中的值发送到处理元件34A中的接口FIFO 296。举例来说,如果控制单元280发送表示“lfo_id”的值01的控制信号,则LFO 38可发送调制增益输出值的值。另外,控制单元280可向多路复用器284输出控制信号以将来自接口FIFO 296的输出引导到寄存器286中的寄存器Rz。
另外,当控制单元280读取LOADLFO指令时,控制单元280可向LFO 38输出表示“lfo_update”参数的控制信号。表示“lfo_update”参数的控制信号指令LFO 38如何更新 输出值。当LFO 38接收到表示“lfo_update”参数的控制信号时,LFO 38可基于处理元件34A当前正处理的MIDI语音的语音参数集合而选择一操作来执行。举例来说,LFO 38可使用语音参数集合的控制字来确定LFO 38是处于“延迟”状态还是处于“产生”状态中。
为了确定LFO 38是处于“延迟”状态还是处于“产生”状态中,LFO 38可存取存储于VPS RAM 46A中的语音参数集合的控制字的位。举例来说,控制字的位23:16可确定LFO是处于“产生”模式还是处于“延迟”状态中。在“产生”状态中,LFO 38可使音高的参数倍增。在“延迟”状态中,LFO 38不使音高的参数倍增。举例来说,控制字的位16可指示LFO 38的调制模式对于当前MIDI帧的第一子帧是处于延迟状态还是处于产生状态中;位17可指示LFO 38的调制模式对于当前MIDI帧的第二子帧是处于延迟状态还是处于产生状态中;位18可指示LFO 38的调制模式对于当前MIDI帧的第三子帧是处于延迟状态还是处于产生状态中;位19可指示LFO 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的模式的偏差值存储到LFO 38的输出寄存器中。另一方面,如果LFO 38处于产生状态中,则LFO 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_id”参数识别的LFO输出寄存器的更新值。
以下实例伪码可概括LOADLFO指令的操作:
Rx=peLfoOut[lfoID];
Switch(lfoState){
Case DELAY:
peLfoOut[lfoID]=bias[lfoID];
break;
Case GENERATE:
if(lfoUpdate==2||lfoUpdate==3){
lfoCur=lfoCur+lfoRatio;
}
if(lfoUpdate==1||lfoUpdate==3){
//upper 16-bits of lfoCur
lfoSample=lfoCur[31:16];
if(lfoSample>0){
lfoGain=positiveSideGain[lfoID];
}
else{
lfoGain=negativeSideGain[lfoID];
}
peLfoOut[lfoID]=bias[lfoID]+
lfoSample*lfoGain;
break;
}
}
此实例伪码不意图表示由处理元件34A及LFO 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运算评估为零值的情况下在程序计数器290中加载[地址]的值。按位AND运算的结果在结果不含有1时评估为假。因为控制单元280可能已加载JUMPND指令之后的指令,所以对程序计数器290的值的更新遵循JUMPND指令之后的指令可变得有效。
LOOP1BEGIN
语法:LOOP1BEGIN计数
功能:起始第一循环的开始。控制单元280在控制单元280遇到LOOP1ENDD指令时将程序计数器290的值设置为LOOP1BEGIN指令之后的指令的存储器地址[计数]加一的次数。另外,控制单元280将第一循环计数器304的值设置为等于[计数]。举例来说,当控制单元280遇到指令“LOOP1BEGIN 119”时,控制单元280将程序计数器290的值设置为LOOP1BEGIN指令之后的指令的存储器地址120次。
LOOP1ENDD
语法:LOOP1ENDD
功能:LOOP1ENDD之后的指令为第一循环中的最后指令。控制单元280确定第一循环计数器304的值是否大于零。如果第一循环计数器304的值大于零,则控制单元280使第一循环计数器304的值递减且将程序计数器290的值设置为LOOP1BEGIN指令之后的指令的存储器地址。否则,如果第一循环计数器304的值不大于零,则控制单元280仅使程序计数器290的值递增。
LOOP2BEGIN
语法: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发送信号以将程序计数器290的值复位为初始值(例如,复位为零)。
在处理元件34A开始产生MIDI语音的数字波形之前,协调模块32可向控制单元280发送复位信号。当控制单元280从协调模块32接收到复位信号时,控制单元280可将第一循环计数器304、第二循环计数器306及程序计数器290的值复位为其初始值。举例来说,控制单元280可将第一循环计数器304、第二循环计数器306及程序计数器290的值设置为零。
随后,协调模块32可向控制单元280发送启用信号以指令处理元件34A开始产生VPS RAM单元46A中所描述的MIDI语音的数字波形。当控制单元280接收到启用信号时,处理元件34可开始执行存储于程序RAM单元44A中的连续存储器位置中的一系列程序指令(亦即,程序)。程序RAM单元44A中的程序指令中的每一者可为上文描述的指令集合中的指令的实例。
一般而言,由处理元件34A执行的程序可由第一循环及嵌套于第一循环内的第二循环组成。在第一循环的每一循环期间,处理元件34A可执行整个第二循环直到第二循环终止。当第二循环终止时,处理元件34A可能已导出MIDI语音的波形的一个样本的符号。当第一循环终止时,处理元件34A已导出整个MIDI帧的MIDI语音的波形的每一样本的每一符号。举例来说,以上实例指令集中的以下系列的指令可概述由处理元件34A执行的程序的基本结构:
LOOP1BEGIN firstLoopcounter
…
LOOP2BEGIN secondLoopCounter
//derive symbol for a sample
…
LOOP2ENDD
CTRL_NOP
//perform additional processing
…
LOOP1ENDD
CTRL_NOP
//perform additional processing
…
EXIT
在此实例系列的指令中,双前向斜杠之后的词语表示用以执行所描述的操作的一个或一个以上指令。此外,在此实例中,CTRL_NOP操作跟在LOOP1ENDD及LOOP2ENDD指令之后,因为控制单元280可能在控制单元280使用程序计数器290中经更新的存储器地址以存取程序RAM 34A中含有相应LOOP1BEGIN或LOOP2BEGIN指令的位置之前已开始执行LOOP1ENDD或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接收开始产生具有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)。
已描述各种实例。本文中描述的技术的一个或一个以上方面可在硬件、软件、固件或其组合中实施。描述为模块或组件的任何特征可一起实施在集成逻辑装置中,或单独地实 施为离散但可交互操作的逻辑装置。如果在软件中实施,则所述技术的一个或一个以上方面可至少部分地由包含指令的计算机可读媒体实现,所述指令在被执行时执行上文所述的方法中的一者或一者以上。计算机可读数据存储媒体可形成可包括封装材料的计算机程序产品的部分。计算机可读媒体可包含例如同步动态随机存取存储器(SDRAM)等随机存取存储器(RAM)、只读存储器(ROM)、非易失性随机存取存储器(NVRAM)、电可擦除可编程只读存储器(EEPROM)、快闪存储器、磁性或光学数据存储媒体及其类似物。另外或替代地,所述技术可至少部分地由计算机可读通信媒体来实现,所述计算机可读通信媒体以指令或数据结构的形式来载运或传送代码,且可由计算机来存取、读取及/或执行。
可由例如一个或一个以上数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其它等效集成或离散逻辑电路等一个或一个以上处理器来执行所述指令。因此,在本文中使用时,术语“处理器”可指代上述结构中的任一者或适于实施本文中描述的技术的任何其它结构。另外,在一些方面中,本文中描述的功能性可提供于经配置或适于执行本发明的技术的专用软件模块或硬件模块内。
如果在硬件中实施,则本发明的一个或一个以上方面可针对经配置或适于执行本文中描述的技术中的一者或一者以上的例如集成电路、芯片组、ASIC、FPGA、逻辑或其各种组合等电路。电路可包括集成电路或芯片组中的处理器及一个或一个以上硬件单元(如本文中所描述)。
也应注意,所属领域的技术人员将认识到电路可实施上文描述的功能中的一些或全部。可能存在实施所有功能的一个电路,或者也可能存在实施功能的电路的多个区段。在当前移动平台技术的情况下,集成电路可包含至少一个DSP及至少一个高级精简指令集计算机(RISC)机器(ARM)处理器以控制及/或通信到DSP。另外,电路可设计或实施于若干区段中,且在一些情况下,可再使用区段以执行本发明中所描述的不同功能。
已描述各种实例。这些及其它实例属于随附权利要求书的范围内。
Claims (40)
1.一种产生音频的方法,其包含:
解析乐器数字接口(MIDI)语音文件且对与MIDI文件相关联的MIDI事件进行调度;
处理所述MIDI事件以输出语音参数的集合及机器代码指令,其中所述语音参数中的至少一个是控制参数,且所述机器代码指令取决于所述控制参数;
由一个或多个硬件单元执行所述机器代码指令以产生针对MIDI语音的数字波形,其中执行取决于所述控制参数的所述机器代码指令包含:基于所述控制参数选择将由所述机器代码指令在所述语音参数上执行的操作,及输出控制信号到所述一个或多个硬件单元以致使所选择的操作被所述一个或多个硬件单元执行;以及
输出所述数字波形。
2.根据权利要求1所述的方法,其中所述方法进一步包含从存储器单元检索字,其中所述字含有多个所述机器代码指令。
3.根据权利要求1所述的方法,其中所述机器代码指令包含加载指令,存储指令、算术指令及控制指令。
4.根据权利要求1所述的方法,其中所述机器代码指令为固定长度机器代码指令。
5.根据权利要求1所述的方法,其中所述方法进一步包含执行所述机器代码指令的一个以将所述数字波形的样本添加到第二数字波形的时间等效样本以产生MIDI帧的整体数字波形的整体样本。
6.根据权利要求1所述的方法,其中所述方法进一步包含:
使用通用处理器解析所述MIDI文件且对与所述MIDI文件相关联的所述MIDI事件进行调度;以及
使用数字信号处理器(DSP)处理所述MIDI事件。
7.根据权利要求1所述的方法,其中所述方法进一步包含:
将所述数字波形转换为模拟输出;以及
将所述模拟输出作为声音而输出。
8.根据权利要求1所述的方法,
其中所述方法进一步包含产生语音指示符的链接列表,其中所述链接列表中的所述语音指示符中的每一者通过指定存储界定MIDI帧的特别MIDI语音的特别语音参数集合的存储器位置而指示所述特别MIDI语音,其中由所述链接列表中的所述语音指示符所指示的所述MIDI语音的集合为在所述MIDI帧期间具有最大声学显著性的那些MIDI语音,其中所述声学显著性界定是基于所述MIDI语音的一个或多个声学特性;且
其中所述链接列表包括指示当前MIDI语音的特定语音指示符。
9.根据权利要求8所述的方法,其中产生链接列表包含:
将由第一语音指示符所指示的MIDI语音的声学显著性与由第二语音指示符所指示的MIDI语音的声学显著性进行比较;以及
在由所述第一语音指示符所指示的所述MIDI语音的所述声学显著性大于由所述第二语音指示符所指示的所述MIDI语音的所述声学显著性时将所述第一语音指示符插入到所述链接列表中所述第二语音指示符之前。
10.根据权利要求1所述的方法,其中选择操作包含识别所述控制参数中的位的值。
11.根据权利要求1所述的方法,其中选择操作包含选择包络产生操作,其中所述包络产生操作取决于所述控制参数。
12.根据权利要求11所述的方法,其中执行所述所选择的操作包含基于所述控制参数计算包络产生调制的电平。
13.根据权利要求11所述的方法,其中执行所述所选择的操作包含基于所述控制参数计算包络产生振幅的电平。
14.根据权利要求1所述的方法,
其中执行指令进一步包含向模块提供与所述控制参数相关联的参数值;且
其中所述模块选择所述操作且执行所述所选择的操作。
15.根据权利要求14所述的方法,
其中向模块提供参数值包含向低频振荡器(LFO)模块提供所述参数值,且
其中执行所述机器代码指令进一步包含:
将来自所述LFO模块中的寄存器的值存储到本地寄存器;以及
更新所述LFO模块中的所述寄存器中的值。
16.根据权利要求15所述的方法,其中更新所述LFO模块中的所述寄存器中的值包含更新所述LFO模块中的指示基于所述控制参数由所述LFO模块输出的三角形波形的相位的值。
17.根据权利要求15所述的方法,其中更新所述LFO模块中的所述寄存器中的值包含基于所述控制参数更新由所述LFO模块输出的三角形波形的增益。
18.根据权利要求1所述的方法,其中所述操作包含包络产生操作,其中包络产生调制的电平与包络产生幅度的电平中的至少一个取决于所述控制参数。
19.根据权利要求1所述的方法,其中执行取决于所述控制参数的所述机器代码指令中的至少一个包含由一低频振荡器(LFO)模块产生一个三角形波形,其中所述三角形波形的相位与所述三角形波形的增益中的至少一个基于所述控制参数。
20.一种产生音频的装置,其包含:
通用处理器,其解析乐器数字接口(MIDI)语音文件且对与MIDI文件相关联的MIDI事件进行调度;
数字信号处理器,其处理所述MIDI事件以输出语音参数的集合及机器代码指令,其中所述语音参数中的至少一个是控制参数,且所述机器代码指令取决于所述控制参数;
一个或多个硬件单元,其执行所述机器代码指令以产生针对MIDI语音的数字波形,其中在执行取决于所述控制参数的所述机器代码指令时,所述一个或多个硬件单元基于所述控制参数为所述语音参数选择将由所述机器代码指令执行的操作,及执行所选择的操作,其中所述一个或多个硬件单元输出所述数字波形。
21.根据权利要求20所述的装置,其进一步包含存储单元,其中所述一个或多个硬件执行从所述存储单元读出字,其中所述字包含多个所述机器代码指令。
22.根据权利要求20所述的装置,其中所述机器代码指令包含加载指令,存储指令、算术指令及控制指令。
23.根据权利要求20所述的装置,其中所述机器代码指令为固定长度机器代码指令。
24.根据权利要求20所述的装置,其中所述一个或多个硬件单元执行所述机器代码指令的一个以将所述数字波形的样本添加到第二数字波形的时间等效样本以产生MIDI帧的整体数字波形的整体样本。
25.根据权利要求20所述的装置,其进一步包含存储语音指示符的链接列表的存储器,其中所述链接列表中的所述语音指示符中的每一者通过指定存储界定MIDI帧的特别MIDI语音的特别语音参数集合的存储器位置而指示所述特别MIDI语音,其中由所述链接列表中的所述语音指示符所指示的所述MIDI语音的集合为在所述MIDI帧期间具有最大声学显著性的那些MIDI语音,其中所述声学显著性界定是基于所述MIDI语音的一个或多个声学特性,且其中所述链接列表包括指示当前MIDI语音的特定语音指示符。
26.根据权利要求20所述的装置,其中基于所述控制参数中的位的值选择针对所述语音参数的所述机器代码指令中的至少一个的所述操作。
27.根据权利要求20所述的装置,其中所述操作包含选择包络产生操作,其中所述包络产生操作取决于所述控制参数。
28.根据权利要求27所述的装置,其中所述一个或多个硬件单元基于所述控制参数计算包络产生调制的电平。
29.根据权利要求27所述的装置,其中所述一个或多个硬件单元基于所述控制参数计算包包络产生幅度的电平。
30.根据权利要求20所述的装置,其中所述一个或多个硬件单元包含低频振荡器(LFO)模块,其中在执行所述机器代码指令中,所述一个或多个硬件单元:
将来自所述LFO模块中的寄存器的值存储到本地寄存器;以及
更新所述LFO模块中的所述寄存器中的值。
31.根据权利要求30所述的装置,其中更新所述LFO模块中的所述寄存器中的值包含更新所述LFO模块中的指示基于所述控制参数由所述LFO模块输出的三角形波形的相位的值。
32.根据权利要求30所述的装置,其中更新所述LFO模块中的所述寄存器中的值包含基于所述控制参数更新由所述LFO模块输出的三角形波形的增益。
33.根据权利要求20所述的装置,其中所述操作包含包络产生操作,其中包络产生调制的电平与包络产生幅度的电平中的至少一个取决于所述控制参数。
34.根据权利要求20所述的装置,其中执行取决于所述控制参数的所述机器代码指令中的至少一个包含由一低频振荡器(LFO)模块产生一个三角形波形,其中所述三角形波形的相位与所述三角形波形的增益中的至少一个基于所述控制参数。
35.一种产生音频的装置,其包含:
用于解析乐器数字接口(MIDI)语音文件且对与MIDI文件相关联的MIDI事件进行调度的装置;
用于处理所述MIDI事件以输出语音参数的集合及机器代码指令的装置,其中所述语音参数中的至少一个是控制参数,且所述机器代码指令取决于所述控制参数;
用于由一个或多个硬件单元执行所述机器代码指令以产生针对MIDI语音的数字波形的装置,其中用于执行取决于所述控制参数的所述机器代码指令的装置包含:用于基于所述控制参数选择将由所述机器代码指令在所述语音参数上执行的操作的装置,及用于输出控制信号到所述一个或多个硬件单元以致使所选择的操作被所述一个或多个硬件单元执行的装置;以及用于输出所述数字波形的装置。
36.根据权利要求35所述的装置,其中所述操作包含包络产生操作,其中包络产生调制的电平与包络产生幅度的电平中的至少一个取决于所述控制参数。
37.根据权利要求36所述的装置,其中执行取决于所述控制参数的所述机器代码指令中的至少一个的装置包含由一低频振荡器(LFO)模块产生一个三角形波形的装置,其中所述三角形波形的相位与所述三角形波形的增益中的至少一个基于所述控制参数。
38.一种产生音频的电路,其经配置以:
解析乐器数字接口(MIDI)语音文件且对与MIDI文件相关联的MIDI事件进行调度;
处理所述MIDI事件以输出语音参数的集合及机器代码指令,其中所述语音参数中的至少一个是控制参数,且所述机器代码指令取决于所述控制参数;
由一个或多个硬件单元执行所述机器代码指令以产生针对一MIDI语音的数字波形,其中执行取决于所述控制参数的所述机器代码指令包含:基于所述控制参数选择将由所述机器代码指令在所述语音参数上执行的操作,及输出控制信号到所述一个或多个硬件单元以致使所选择的操作被所述一个或多个硬件单元执行;以及
输出所述数字波形。
39.根据权利要求38所述的电路,其中所述操作包含包络产生操作,其中包络产生调制的电平与包络产生幅度的电平中的至少一个取决于所述控制参数。
40.根据权利要求38所述的装置,其中执行取决于所述控制参数的所述机器代码指令中的至少一个包含由一低频振荡器(LFO)模块产生一个三角形波形,其中所述三角形波形的相位与所述三角形波形的增益中的至少一个基于所述控制参数。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US89645007P | 2007-03-22 | 2007-03-22 | |
US60/896,450 | 2007-03-22 | ||
US12/042,146 | 2008-03-04 | ||
US12/042,146 US7678986B2 (en) | 2007-03-22 | 2008-03-04 | Musical instrument digital interface hardware instructions |
PCT/US2008/057251 WO2008118674A1 (en) | 2007-03-22 | 2008-03-17 | Musical instrument digital interface hardware instructions |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101641730A CN101641730A (zh) | 2010-02-03 |
CN101641730B true CN101641730B (zh) | 2013-08-07 |
Family
ID=39773423
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008800092858A Expired - Fee Related CN101641730B (zh) | 2007-03-22 | 2008-03-17 | 乐器数字接口硬件装置和方法 |
Country Status (7)
Country | Link |
---|---|
US (1) | US7678986B2 (zh) |
EP (1) | EP2126890A1 (zh) |
JP (1) | JP5134078B2 (zh) |
KR (1) | KR101166735B1 (zh) |
CN (1) | CN101641730B (zh) |
TW (1) | TW200903446A (zh) |
WO (1) | WO2008118674A1 (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102576524A (zh) | 2009-06-01 | 2012-07-11 | 音乐策划公司 | 接收、分析并编辑音频来创建音乐作品的系统和方法 |
US9310959B2 (en) | 2009-06-01 | 2016-04-12 | Zya, Inc. | System and method for enhancing audio |
US9251776B2 (en) | 2009-06-01 | 2016-02-02 | Zya, Inc. | System and method creating harmonizing tracks for an audio input |
US8785760B2 (en) | 2009-06-01 | 2014-07-22 | Music Mastermind, Inc. | System and method for applying a chain of effects to a musical composition |
US8779268B2 (en) | 2009-06-01 | 2014-07-15 | Music Mastermind, Inc. | System and method for producing a more harmonious musical accompaniment |
US9177540B2 (en) | 2009-06-01 | 2015-11-03 | Music Mastermind, Inc. | System and method for conforming an audio input to a musical key |
US9257053B2 (en) | 2009-06-01 | 2016-02-09 | Zya, Inc. | System and method for providing audio for a requested note using a render cache |
US8183452B2 (en) * | 2010-03-23 | 2012-05-22 | Yamaha Corporation | Tone generation apparatus |
US10536553B1 (en) * | 2015-09-04 | 2020-01-14 | Cadence Design Systems, Inc. | Method and system to transfer data between components of an emulation system |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1591564A (zh) * | 1995-06-19 | 2005-03-09 | 雅马哈株式会社 | 形成乐音波形的方法和装置 |
Family Cites Families (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3809788A (en) * | 1972-10-17 | 1974-05-07 | Nippon Musical Instruments Mfg | Computor organ using parallel processing |
JPS5441497B2 (zh) * | 1974-11-14 | 1979-12-08 | ||
US4915007A (en) * | 1986-02-13 | 1990-04-10 | Yamaha Corporation | Parameter setting system for electronic musical instrument |
US5091951A (en) * | 1989-06-26 | 1992-02-25 | Pioneer Electronic Corporation | Audio signal data processing system |
JP2630651B2 (ja) * | 1989-07-26 | 1997-07-16 | ヤマハ株式会社 | フェーダ装置 |
US5109419A (en) * | 1990-05-18 | 1992-04-28 | Lexicon, Inc. | Electroacoustic system |
US5584034A (en) * | 1990-06-29 | 1996-12-10 | Casio Computer Co., Ltd. | Apparatus for executing respective portions of a process by main and sub CPUS |
US5526431A (en) * | 1992-06-25 | 1996-06-11 | Kabushiki Kaisha Kawai Gakki Seisakusho | Sound effect-creating device for creating ensemble effect |
US5635658A (en) * | 1993-06-01 | 1997-06-03 | Yamaha Corporation | Sound control system for controlling an effect, tone volume and/or tone color |
US5541354A (en) * | 1994-06-30 | 1996-07-30 | International Business Machines Corporation | Micromanipulation of waveforms in a sampling music synthesizer |
JP2746157B2 (ja) * | 1994-11-16 | 1998-04-28 | ヤマハ株式会社 | 電子楽器 |
US5744741A (en) * | 1995-01-13 | 1998-04-28 | Yamaha Corporation | Digital signal processing device for sound signal processing |
JP2962217B2 (ja) * | 1995-11-22 | 1999-10-12 | ヤマハ株式会社 | 楽音生成装置及び方法 |
US5596159A (en) * | 1995-11-22 | 1997-01-21 | Invision Interactive, Inc. | Software sound synthesis system |
JP2904088B2 (ja) * | 1995-12-21 | 1999-06-14 | ヤマハ株式会社 | 楽音生成方法および装置 |
DE69704996T2 (de) * | 1996-08-05 | 2002-04-04 | Yamaha Corp | Software-Tonerzeuger |
US5763807A (en) * | 1996-09-12 | 1998-06-09 | Clynes; Manfred | Electronic music system producing vibrato and tremolo effects |
US5917917A (en) * | 1996-09-13 | 1999-06-29 | Crystal Semiconductor Corporation | Reduced-memory reverberation simulator in a sound synthesizer |
US5734119A (en) | 1996-12-19 | 1998-03-31 | Invision Interactive, Inc. | Method for streaming transmission of compressed music |
JP3535957B2 (ja) * | 1997-07-29 | 2004-06-07 | パイオニア株式会社 | 雑音低減装置及び雑音低減方法 |
JP3620264B2 (ja) * | 1998-02-09 | 2005-02-16 | カシオ計算機株式会社 | 効果付加装置 |
JP3539188B2 (ja) * | 1998-02-20 | 2004-07-07 | 日本ビクター株式会社 | Midiデータ処理装置 |
US6610917B2 (en) * | 1998-05-15 | 2003-08-26 | Lester F. Ludwig | Activity indication, external source, and processing loop provisions for driven vibrating-element environments |
AU5009399A (en) * | 1998-09-24 | 2000-05-04 | Sony Corporation | Impulse response collecting method, sound effect adding apparatus, and recording medium |
AU1687400A (en) * | 1998-12-17 | 2000-07-03 | Sony Computer Entertainment Inc. | Apparatus and method for generating music data |
JP3614061B2 (ja) * | 1999-12-06 | 2005-01-26 | ヤマハ株式会社 | 自動演奏装置及び自動演奏プログラムを記録したコンピュータ読取り可能な記録媒体 |
US6738479B1 (en) * | 2000-11-13 | 2004-05-18 | Creative Technology Ltd. | Method of audio signal processing for a loudspeaker located close to an ear |
US7065380B2 (en) | 2001-07-19 | 2006-06-20 | Texas Instruments Incorporated | Software partition of MIDI synthesizer for HOST/DSP (OMAP) architecture |
JP2003330464A (ja) | 2002-05-14 | 2003-11-19 | Casio Comput Co Ltd | 自動演奏装置および自動演奏方法 |
JP4124343B2 (ja) * | 2003-04-11 | 2008-07-23 | ローランド株式会社 | 電子打楽器 |
KR101315075B1 (ko) * | 2005-02-10 | 2013-10-08 | 코닌클리케 필립스 일렉트로닉스 엔.브이. | 사운드 합성 |
JP4821532B2 (ja) * | 2006-09-21 | 2011-11-24 | ヤマハ株式会社 | アルペジオ演奏装置及びプログラム |
-
2008
- 2008-03-04 US US12/042,146 patent/US7678986B2/en not_active Expired - Fee Related
- 2008-03-17 EP EP08714251A patent/EP2126890A1/en not_active Withdrawn
- 2008-03-17 TW TW097109340A patent/TW200903446A/zh unknown
- 2008-03-17 KR KR1020097022040A patent/KR101166735B1/ko not_active IP Right Cessation
- 2008-03-17 CN CN2008800092858A patent/CN101641730B/zh not_active Expired - Fee Related
- 2008-03-17 WO PCT/US2008/057251 patent/WO2008118674A1/en active Application Filing
- 2008-03-17 JP JP2010501076A patent/JP5134078B2/ja not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1591564A (zh) * | 1995-06-19 | 2005-03-09 | 雅马哈株式会社 | 形成乐音波形的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
US20080229917A1 (en) | 2008-09-25 |
JP5134078B2 (ja) | 2013-01-30 |
CN101641730A (zh) | 2010-02-03 |
JP2010522363A (ja) | 2010-07-01 |
KR101166735B1 (ko) | 2012-07-19 |
WO2008118674A1 (en) | 2008-10-02 |
EP2126890A1 (en) | 2009-12-02 |
US7678986B2 (en) | 2010-03-16 |
KR20090130865A (ko) | 2009-12-24 |
TW200903446A (en) | 2009-01-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101641730B (zh) | 乐器数字接口硬件装置和方法 | |
CN1934646B (zh) | 使音频处理模块同步的方法和系统 | |
CN101641732B (zh) | 乐器数字接口硬件指令集 | |
US7718882B2 (en) | Efficient identification of sets of audio parameters | |
CN101636779B (zh) | 用于处理音频文件的波形获取单元 | |
CN101641731B (zh) | 用于在音频装置中检索参考波形的带宽控制 | |
CN2552132Y (zh) | 共享频道间参数的音调发生器设备 | |
CN101636780A (zh) | 用于处理乐器数字接口(midi)文件的管线技术 | |
US7893343B2 (en) | Musical instrument digital interface parameter storage | |
CN101636782A (zh) | 用于产生三角波的方法和装置 | |
JP3027831B2 (ja) | 楽音波形発生装置 | |
CN101636781A (zh) | 用于处理音频文件的共享缓冲器管理 | |
Yim et al. | A real-time MIDI music synthesis system using sinusoidal modeling on a TI TMS320C32 digital signal processor | |
JPH0584534B2 (zh) | ||
JPH07210158A (ja) | 電子楽器 | |
JPH0230036B2 (zh) | ||
JPS6240494A (ja) | D/a変換器の振り分け装置 | |
JPH0230030B2 (zh) | ||
JPH023199B2 (zh) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20130807 Termination date: 20170317 |
|
CF01 | Termination of patent right due to non-payment of annual fee |