用于声复制的补偿系统和方法

文档序号:7602305阅读:1021来源:国知局

专利名称::用于声复制的补偿系统和方法
技术领域
:本发明一般涉及一种用在声传输和复制系统中的补偿方法和系统,并且更具体地说,涉及一种使用参数值借助于象用在传输或复制系统中的器件或元件之类的性质或响应控制或调节具有转换或模型的过程的补偿方法和系统。大多数声频复制系统使用机电扬声器声学地复制声频信号。扬声器的电气;机械、及声学性质常常比理想的差,引起失真、响应异常、及声的其他着色。多种技术用来补偿扬声器的特性,以便提高接收的感觉声频质量。扬声器的功能或性能模型用在实际中,并且在文献中发现产生这样的补偿。模型和模型化过程如何工作的一个良好例子在“扬声器的有源等效”,SpeakerBuilder,1997年2月中描述。模型强化技术语言,并且通常打算模仿或模拟来自电刺激的扬声器系统的声学响应。模型产生或合成从形成集体表示或性能象扬声器的全部或部分的元件的功能组频繁地开始。线圈和磁铁部分成为由电阻器、电感器、电容器、反EMF(电动势)发生器及其他转换部分表示的电机。诸如空气体积、运动质量、声学加载、磁性制动、及机械损失之类的因素的组合可以分析,并且简化成LCR谐振器网络或电路。最经常的是,把在模型中表示的转换机电、声学、及机械表示进一步简化或减小到较少元件。模型仍象扬声器响应,但形成模型的部分已没有对于形成扬声器的部分的准确性能等效。因此,当改变扬声器部分时,传统模型既不打算也不能够参数寻址的零相位补偿。人们能特征化和颠倒良好设想模型的频率响应以及其他性质,并且实现扬声器的线性相位校正。该技术的确逐渐变得流行,但其依靠传统模型的专用、不灵活电路或特殊过程限制其用于一种单扬声器设计。一些建造成在多个驱动器中划分信号频谱的高质量分频网络可能具有象这样的某种共轭响应校正。低频谐振放大打算为多数扬声器而设计。常常是,使传统模型表示可量化和可预计声学性能以及影响低音响应的其它扬声器设计因素。机械构造和空气的性质确定频率、谐振损失及对于来自扬声器的声学输出的结构影响。能以这种方式设计和实施对于零相位共轭的良好近似或用于较宽频率的相同量级校正。需要几个器件匹配谐振性能,但当对于类似概念和设计的不同扬声器进行调节时都彼此相互作用。因此,操作不会严格地参数控制,因为必须由模型重新计算调节以产生最小相位或关于新扬声器最逼真所需要的准确匹配。当添加较多校正时,相互作用问题变得难以克服。每当进行调节时,必须经验地调谐或模型分析系统。因此,用于响应平化的集总模型过程固有地为特定扬声器而设计。对于其它扬声器必须重新设计该过程。传统曲线拟合方法可能需要建立的几百个数据点和对应调节及匹配需要频率响应的多个器件或较多处理功率。模拟方法是不实际的,而数字过程需要较多计算和实现这点的扩展构造。两者没有扬声器和其操作的知识都不能提供相位准确响应或以后描述的隐藏校正。没有一个模型,由测量响应把振幅、时间和相位校正结合在一起的努力成为困难的。扬声器的最重要性能的一些(关于声学感觉效应)由传统方法不能模型化或实施。这样的性能包括驻波干扰、形式分散、及耦合谐振以及来自这样的潜在相互作用声学和机械性能的非线性后果。反生产随机运动或分散可能发生。即使当平均响应保持扁平或者与复制的其它频率相同时,能量在信号刺激期间也能积累而当信号变化或停止时也能释放。另外,与运动部分的刚性和用于远离驱动音圈的运动的高频去耦有关的其它空间因素需要考虑。这些任一个能产生源运动、延迟能量释放、及对于双耳听觉的相位误差。常常是,这样的破坏响应可能是不可见的,或者由传统麦克风和频谱分析器校准方法非常难以解释。例如,由节点和驻波性能产生的多余响应影响扬声器的稳定时间、方向性能及辐射输出。常常是,这些响应引起对于信息信号的感觉变化,可是由响应线图不可能见到或识别。具有大存储能量的机械运动在换能器不同部分处可能异相。声学输出可能显得是平的,但人双耳听觉能把性能定位到其源,并且改变的感觉能使立体成象变坏。经常是,机械干扰是可听见的,可是由使用频率扫描和麦克风进行的响应测量是不可见的或难以解释。辐射表面的部分能以对于其他部分的不同相位关系振动,从而其辅助声学输出与在换能器内的运动和涉及的能量存储相比较低。当在节点频率处的信号变化并且突然停止时,存储能量的释放能与在不同频率处的其他信号相互作用。在两个频率之间的生成差拍声能是可听到的并且非常令人讨厌。具有在干扰频率范围中的频谱的声音可能显得较响和是粒状的。人双耳听觉能把干扰定位到驱动器或从其方向波瓣可能回波的表面,由此进一步损害来自多扬声器立体声复制的舞台幻觉。对于这种情形,必须足够地衰减产生机械干扰的频率,以防止结果响应的未掩蔽复制。经验已经表明,实现这点需要的尖锐深切口除去校正频率周围的足够能量以产生鼻声。如果修改这种不适当校正以实现平响应,那么机械声音与潜在多余平衡象差一道保持。多个小扬声器用换能器、外壳、及扩展低音响应的谐振装置,如端口或无源辐射器,建造。通常,这些部分设计成实现在效率、频率响应精度、低音扩展、及可接收失真之间的实际和经济平衡。便宜、低功率系统的设计者一般选择较高效率,以便与电源和包装的有关成本一道减小放大器要求。平衡情形暴露多个有害的性能方面。大多数传统扬声器校正方法应用振幅均衡的某种变化以平化和扩展来自扬声器的响应。调节有时通过耳朵实现。为了成为定量的,人们必须获得有关数据。实现这点的大多数普通技术使用来自噪声刺激的频谱分析。然后,响应图线或显示器指示均衡器如何调节。基于延迟接收或抽样窗口的较成熟技术能测量来自扬声器的第一到达响应,并且能除去高频室内干扰以产生无回声数据。目的是捕获与室内听众或与其中通常离扬声器一米指定和放置一个试验麦克风的标准测量实践有关的信息。这样的技术对于单点试验麦克风产生可以发声平衡的响应。一种或多种已知系统通过调节路径长度、或时间延迟把多个扬声器对准一个收听位置稍微胜过这种技术。其他技术在一个事件之后提供频谱图线的瞬态响应波形、瀑布或连续。获得群延迟和时间有关的信息。这样的数据需要解释,并且对于频率响应水准测量作业具有有限用途。能识别一些性能响应,但必须知道关于扬声器的更多信息。为此需要诸如加速度计、微分声探针、以及麦克风之类的测量器件。检测仪器可以靠近一个怀疑性能场合放置,并且运动以探测响应如何随位置变化。能调谐加权切口或缓慢地扫过怀疑频率,同时主观地观察噪声产生。需要关于零件尺寸、收听位置、以及地板、书架、可能的计算机监视器、或可能是收听环境部分的其他介入物体的更多信息。需要其他说明或表示以完成能够实现时间相位准确校正的共轭模型。操作员通过调节图象均衡器、相互调谐一个参量滤波器、或改变对于一个交叉器件的设置能承担对准角色。工业模拟元件实现这些功能,但他们有限制。图象均衡器具有高达31个频带或谐振器,参量器件包括几个可调节滤波器,并且少数个具有可变交叉和搁置功能。需要更多个滤波器。图象和参量均衡器的组合不能够提供足够大数量的点,也不能提供有效地补偿来自扬声器的复杂性能的准确相位和响应。校正不会匹配特定频率,由此产生相位误差,或者滤波器的数量不适于处理稳定时间和驻波问题。群延迟失真、时间相位误差、不完整校正及其他缺点可能胜过其他改进。DSP滤波器能创建比实际来自模拟电路多的多个滤波器部分。对于产生室内响应水准测量的特别控制发生软件,已经使用了用参量控制部分组成的图象均匀器。这样的过程难以建立,因为房间与重要性能指示器的辨别相干扰。没有其输入,共轭响应校正就是不可能的。驻波和节点失真校正能由这样一种系统形成。然而,参量运动补偿切口需要的笨拙编辑和处理是困难的。最可能,单点响应拾波和FFT已经用于输入到系统的数据。这样的方法不能响应或提供创建对于扬声器的真实共轭响应需要的时间相位信息。分析系统,如MLSSA,能从测量除去房间干扰,并且能产生来自一个扬声器系统的频率、瞬态和稳定响应数据。然而,必须译码来自这些测量的大量数据。多频带图象均衡器不是建立校正的一种良好选择。DSP系统能经济地创建多个参量滤波器和用模拟电路不能实现的有关过程。传统大规模DSP系统几乎没有由其他测量异常辨别和选出扬声器性能的装置。它们的频域响应可能添加相位误差和忽视延迟稳定能量。对于一个收听位置声音可能改进,但对于所其它位置声音将变坏。更可能的是,复制声音将变化而没有决定性的改进。所以,与声音复制有关的那些人已经认识到,需要一种模型化声音复制器件的完整性能的系统和方法,从而可以创建对于声音复制器件响应的共轭响应。也已经认识到对一种采用可改进共轭响应的系统和方法的需要。另外,也已经认识到对补偿独立于其中要收听声音的环境的声音复制的系统和方法的需要。本发明满足这些需要和其他需要。简短和一般地说,本发明提供一种用来模型化声音复制器件的各个响应特性的系统和方法,以创建一种用来改进器件的频率、时间、相位及振幅性能的共轭模型、和提供改进的声平衡、声音清晰性、减小失真及改进的立体成象。在第一方面,本发明涉及一种用来修改输入到一个其特征在于多个个别响应的声复制器件的电气声频信号的设备。器件的个别响应结合以定义一个整体响应。每个个别响应包括频率、时间、相位或瞬态响应的一个或多个。该设备包括多个修改滤波器,这些滤波器具有模拟声复制器件的多个个别响应的修改响应。修改滤波器接收电气声频信号,修改电气声频信号,及把电气声频信号提供到声复制器件。该设备进一步包括多个可调节参数。调节参数的每一个与修改滤波器的至少一个有关。可调节参数允许对于修改滤波器的响应的调节。调节创建多个个别共轭响应。每个个别共轭响应与多个个别响应的至少一个有关。通过创建具有模型化复制器件的个别响应的响应的多个滤波器或网络和提供用来调节滤波器或网络响应的参数,系统允许把特定相对或校正响应提供给复制器件的响应的共轭响应的创建。在本发明的详细方面,声复制器件的多个个别响应与声复制器件的机械、声学及电磁性能的至少一个有关。在本发明的另一个详细方面,多个修改响应结合以形成与声复制器件的整体响应共轭的整体响应。在本发明的又一个详细方面,修改滤波器的至少一个包括一个截止滤波器,并且用来调节截止滤波器的频率响应的参数包括波峰频率、振幅及Q参数。在本发明的再一个方面,修改滤波器的至少一个包括一个恒定斜率均衡器,并且用来调节恒定斜率均衡器的频率响应的参数包括交叉频率和提升搁置参数。在本发明的其它详细方面,修改滤波器的至少一个包括一个参量切口滤波器,并且用来调节参量切口滤波器的频率响应的参数包括切口频率、振幅和Q参数,而修改滤波器的至少一个包括一个参量切口提升滤波器,并且用来调节参量切口提升滤波器的频率响应的参数包括切口频率、振幅和Q参数。在第二方面,本发明涉及一种用来改变输入到具有有关性能特性的声复制器件的电气声频信号的声音补偿系统。该系统包括声复制器件的一种模型。该模型包括模拟声复制器件的性能特性的至少一个的多个滤波器或过程。每个滤波器具有结合以定义对于该模型的整体响应的有关响应。每个个别响应包括频率、时间、相位或瞬态响应的一个或多个。系统也包括一个修改多个滤波器每一个的响应以把该滤波器转换成一个共轭滤波器的控制器。每个共轭滤波器具有与滤波器或过程的原始响应共轭的响应。在本发明的一个详细方面,性能特性由声复制器件的分立元件的单个或组定义。通过模型化复制器件的分立元件和那些元件或元件组的特性,能创建和参量操纵对于这些特性的个别补偿。因此,这些相同的补偿能应用于具有类似元件或特性的辅助系统。在本发明的其它详细方面,滤波器由数字信号过程或由模拟电路定义,并且控制器包括一个计算机或可调节电路元件。在本发明的其它详细方面,声复制器件包括一个扬声器,并且多个滤波器的至少一个包括至少一个有关可调节参数,并且根据从一个标准扬声器模型导出的或使用标准试验测量经验确定的扬器物理特性计算参数的值。在本发明的又一个详细方面,这样配置控制器,从而在一个参数设置中的调节调制至少一个其它参数的设置。在本发明的再一个详细方面,控制器监视在声复制器件处的程序条件,并且根据程序条件设置参数值的至少一个。在第三方面,本发明涉及一种声音系统。该声音系统包括一个具有有关机械、声学及电磁性能特性的声复制器件。该声音系统也包括一个用来把一个电气声频信号输出到声复制器件的一个模型的源。该模型包括模拟声复制器件的机械、声学和电磁性能特性的至少一个的多个滤波器。每个滤波器具有包括频率、时间、相位或瞬态响应的至少一个的有关响应。该模型把电气声频信号输出到声复制器件。该声音系统进一步包括一个控制器,它修改滤波器的响应,以把该模型转换成一个具有带有包括与该滤波器的原始响应共轭的响应的多个滤波器的共轭模型。在第四方面,本发明涉及一种用来修改输入到一个声复制器件的电气声频信号的方法,该声复制器件的特征在于结合定义对于声复制器件的整体频率响应的多个个别响应。每个个别响应包括频率、时间、相位或瞬态响应的一个或多个。该方法包括步骤用多个滤波器模拟多个个别响应;和调节多个滤波器的响应,从而对于每个滤波器,调节响应包括与个别响应之一共轭的响应。该方法进一步包括把电气声频信号输入到滤波器的步骤。在本发明的一个详细方面,滤波器的至少一个包括一个截止滤波器,并且调节截止滤波器的频率响应的步骤包括设置波峰频率、振幅及Q的至少一个的步骤。在本发明的另一个详细方面,滤波器的至少一个包括一个恒定斜率均衡器,并且调节恒定斜率均衡器的频率响应的步骤包括设置交叉频率和提升搁置的至少一个的步骤。在本发明的又一个详细方面,滤波器的至少一个包括一个参量切口滤波器,并且调节参量切口滤波器的频率响应的步骤包括设置切口频率、振幅和Q的至少一个的步骤。在本发明的再一个方面,滤波器的至少一个包括一个参量切口提升滤波器,并且调节参量切口提升滤波器的频率响应的步骤包括设置切口频率、振幅和Q的至少一个的步骤。在第五方面,本发明涉及一种改变输入到一个具有有关性能特性的声复制器件的电气声频信号的方法。该方法包括用多个滤波器模拟声复制器件的性能特性的至少一个的步骤。滤波器的每一个具有包括频率、时间、相位或瞬态响应的至少一个的有关响应。该方法进一步包括步骤对于滤波器的每一个,修改滤波器的响应,以把滤波器转换成具有一种包括与该滤波器的原始响应共轭的响应的共轭滤波器。在本发明的详细方面,声复制器件包括一个扬声器,多个滤波器的至少一个具有至少一个有关可调节参数,并且修改滤波器的响应的步骤包括如下步骤对的一个或多个根据扬声器的物理特性计算可调节参数值的值和把参数设置到计算值,由一个标准扬声器模型导出可调节参数和把参数设置到导出值,及使用标准试验测量经验地确定可调节参数;和把参数设置到确定值。在本发明的又一个详细方面,该方法进一步包括步骤响应另一个参数的设置调制至少一个参数的设置。在另一个详细方面,该方法进一步包括步骤监视在声复制器件处的至少一个程序条件,和根据程序条件设置参数值的至少一个。保持声中性的这些特征和能力使得一种补偿系统和方法能够复合、动态地改变能用简化、直觉控制特性控制和调节的响应校正。与传统响应水准测量方法相比较,补偿方法和系统要求较小的处理复杂性,并且能容易地应用于不同的声音复制系统。补偿方法和系统,作为整体或片部分,能接通或断开,从一步骤运动到另一个,或者由简单、直觉命令改变。由如下详细描述,当结合通过例子表明本发明最佳实施例的附图时,将明白本发明的这些和其它方面及优点。图1是包括一种按照本发明的补偿系统的声复制系统的方块图;图2是具有多个修改滤波器的补偿系统的方块图,每个具有用来修改滤波器的频率、时间及相位响应的一个或多个的多个可调节参数;图3a-3c描绘用于扬声器的多个响应元件;图3f描绘当结合图3a-3e的个别响应时形成的整体响应;图4a-4e描述用于补偿系统的多个可调节响应,每个响应是可调节的以形成对于图3a-3e的响应元件的共轭响应;图5是曲线图,描绘对于产生一个有功声输出的圆锥的运动;图6描绘用于两个小扬声器驱动器的频率响应;图7描绘其中在右边的箭头表示增大时间轴的瀑布线图8a-8f描绘用来调节参量控制以便修改修改滤波器的响应的一系列图形用户接口;图9是低通/高通波峰滤波器的示意图,其中所有的C必须变化以运动频率;图10是提升并且具有近参量独立的有源RC或恒定斜率均衡器的示意图,其中Cc和Rc都非常大以偏置opamp;图11是频率可运动切口的示意图;图12是频率可运动切口的一种可选择结构的示意图;图13包括一个加权切口滤波器的和用于提升的响应的示意图、及使用滤波器可得到的切口元件和组合响应;图14包括一个多重谐振加权切口滤波器的和用于提升的响应的示意图、及使用滤波器可得到的切口元件和组合响应;图15描绘对于一个切口滤波器的频率、和相位响应;图16是显示干扰模拟器/补偿器的示意图,其中CW等于与干扰相同的响应,CCW等于共轭校正及RC等于用于较高频率的减小补偿;及图17是全通或相移网络的示意图。如下描述集中在本发明对于扬声器的应用上。然而,本发明不限于这样的用途,并且可以应用于其他声传输和复制器件,如在说明书未尾叙述的那些。现在参照附图,其中类似标号在所有图中指示类似或相应部分,并且具体地对于图1,表示有一种包括本发明的系统10。系统10包括一个信号源12,用来提供电气声频信号。信号源可以是例如一个CD唱机。来自信号源12的输出14输入到一个采用本发明的详细特征和方面的补偿系统16。输出14由补偿系统16处理,以产生一个供给到一个功率放大器19和一个扬声器20的补偿电气声频信号18。参照图2,补偿系统18采用多个滤波器24,滤波器24或者个别地或者组合地呈现模拟由扬声器的各种机械、声学和电磁元件呈现的频率、时间和相位响应的个别补偿响应。与滤波器24的每一个,并因而与补偿响应的每一个,相联系的是一个或多个可调节参数22。使用DSP或模拟电路创建滤波器24。数字信号处理是最佳实施,因为扬声器性能的分析模型容易转换到用于设计数字系统的数学综合技术。模拟电路具有建立在级联结构中的失真。因此,仅当模拟设计者知道在性能响应是隔离和无相互作用时使用并联连接电路元件时,补偿系统18的实际模拟实施才是可能的。一些参数22调节与补偿系统的一个或多个部分相互作用。一种数字实施提供利用可能设置的编辑或按需要计算这些关系的能力。当由计算机控制补偿系统时,建立调节显得简单和直观。这些计算和可调节补偿响应的每一个能定标到尤其与尺寸、运动性质或声学辐射性能有关的参量变量、特征、或设计方面。能调节扬声器的时间延迟、最大漂移极限、波长关系、节点和驻波频率、边界反射及类似性质,并且由补偿系统使用。代替编辑或减小扬声器元件以创建一个集总响应系统,补偿系统使用最小相位均衡和无相互作用滤波器串。对于小扬声器的典型整体响应表示在图3f中。在图4的顶部处重复相同的响应。图3a-3e表示与结合产生整体响应曲线的扬声器元件有关的多个个别响应。图4a-4e表示经多个可调节参数,例如LS、HS、LX、HX等,调节以产生多个共轭响应的多个个别补偿响应。下面详细描述参数的性质。如图4f中所示,个别共轭响应组合以产生或一个整体共轭响应。整体扬声器响应(图3f)和共轭响应(图4f)的组合产生一个平稳响应。由图3a和4a,对于高和低频的第一和第二截止反射是显然的。在曲线上的这些点确定用于LX、LS、HX、和HS的频率。当音圈长度和运动互补能力已知时,那么类似于图5中表示的一种的计算或图表能帮助确定用于LP的合理频率和振幅。以类似的方式处理HP。有关的反射、截止、和频率表示在图3b和4b中。LP和HP的振幅设置具有主观功率处理和加权补偿问题。在其外壳体中操作的驱动器的自谐振能测量或计算以产生W0。由传统模型能试验地测量和计算有关的Q0和|A|0设置,条件是已经除去声学耦合因数。图3d和4d表示这种低音补偿。在常规模型中很少使用机械谐振的表示,象W1。图3d和4d的高频部分表示,来自W1的声学响应误差和着色能由设置|A|1除去。注意周围谐振,并且能选择预置或缺省Q,以补偿象征着涉及的扬声器材料的谐振性能模型。节点和干扰性能在图3e中是显然的。在图6中的其他例子揭示节点跳跃、干扰、及因为粗糙、污染声音的常常叫做“锥叫(conecry)”的相关问题。与表示在图7中的那些类似的瀑布或MLSSA能表示象征这样的高能量运动干扰的频率和延迟分散结果。图4e中的隐藏补偿切口WCC1和WCC2除去这些频率和能量存储问题。添加斜坡或倾斜EQ以实现最好的听众喜好。图3c和4c表示性能和校正。为了主观平衡可以添加辅助向下倾斜。如能看到的那样,每个横跨少到8位分辨率的近似12至16次调节能进行非常良好的共轭校正。来自两个扬声器驱动器单元的代表性频率响应表示在图6中。注意,如由在低端处的响应曲线的滑离指示的那样,与LP有关的W0和第二反射响应丢失,因为驱动器在非常大的壳体中操作。除此之外,其它的参量相关特征是显然的,并且由这些曲线能算出调节。如下参数允许扬声器的复合频率、相位、及时间响应的创建、模拟或与其共轭。这些可调节参数22和其操作能近似零相位响应,扩展低音输出,及从扬声器除去机械声音(能以类似方式使用其他参数)。使用有源或无源模拟电路,如RC电路、模拟谐振器、或象状态变量滤波器或双石英片之类的全参量电路,能数字地进行个别补偿。在8与32参数调节之间的某处可以用来编程补偿系统和操作一个适当的补偿过程。由于参数与专用物理和性能方面有关,所以对于调节范围和精度的数据要求远小于覆盖人类感觉所需要的。八位分辨率对于这些的多数是适当的,从而一个1-5k位的单次数据流特征化来自模型的一个非常复杂的响应。以上参数的描述如下。低交叉(LX)或声学耦合-低频输出取决于辐射表面的尺寸。来自这种关系的每八度6dB损失由增大的锥运动固有地补偿,条件是来自电机结构的反电压与驱动信号相比较小。如果柔性是无限的并且电机产生力而没有速度限制,则这种理想化的配置具有平响应。具有空气体积、机械刚度、及速度极限的真实系统具有两个实际交叉点,其中响应从平的中止,并且会聚到6dB/八度和然后到12dB/八度低音损失。通常,第二反射靠近扬声器的最低有用响应,并且常常成为不实际地补偿。用于这种补偿的控制参数是单位为Hz的频率,并且共轭响应(特定补偿)对于减小频率是+6dB/八度提升。这种提升在来自扬声器的第一响应反射处开始。用于该参数的值能通过向扬声器施加一个试验信号,例如正弦波,和测量响应而测量。根据扬声器的物理特性,如锥和线圈质量,也可以计算该值。由扬声器模型,如一般由扬声器制造商提供的标准Theil/Small模型,也可以导出该值。高交叉(HS)或质量柔性因数-高频输出取决于辐射表面的尺寸和速度。通常,用于靠近截止的频率的感兴趣波长与创建输出的扬声器的运动相比较小。锥材料的刚度和阻尼性质影响以较低频率来自整个表面的辐射的这种过渡。频率辐射越高,越靠近音圈。运动质量最终借助于增大频率创建运动的6dB/八度减小。来自电机组件的漏电感把另外的柔性添加到系统上,以在最高实际频率下创建进行12dB/八度下降的第二反射。这些损失与减小的辐射面积相结合,创建声学输出的减小。在较低频率下,能熟练地平衡两种关系以产生平声学响应。用于这种补偿的控制参数是单位为Hz的频率,并且共轭响应是具有增大频率的6dB/八度提升。以与对于低交叉在以上描述的相类似的方式能测量或计算用于该参数的值。低提升搁置(LS)-来自LS的最大提升限制到来自放大器功率、锥运动、音圈长度、壳体尺寸、及打算低音扩展的实际最大极限。这些要求矛盾和相互作用,例如音圈要求越长,放大器和悬挂部分越大。例如,一个延长的线圈能提供较大的线性漂移和低音输出潜力,但效率减小,除非增大来自磁铁的磁通能量。增大漂移要求较大的周围场,并且必须增大锥直径以保持相同的辐射面积和低音输出。低音谐振越低,而扬声器必须物理上越大,并且增大的运动质量进一步减小效率。如果限制放大器功率,则壳体变得较大。LX、W0(下面描述)和LS参数的操纵使有效或扩展响应扬声器设计具有小得多的折衷。另外,能使LS参数改变或跟踪不同的音量控制设置和程序动态,从而扬声器系统能靠近其最大能力在宽范围条件下操作。LS参数受设计和结构因数的影响,这些因数包括辐射面积、柔性、及驱动电机的力因数。模型化参数能以非常小的相互作用能跟踪变化至这些因数。LS参数是+/-dB。LS参数设置能经试验测量通过具有折衷权衡的试验确定。高提升搁置(HS)-扬声器的实际最大性能和功率处理能力限制最大高频率提升。在某些用途中,可以把HS参数设置成减小来自源的感觉失真代之以来自扬声器。关于LS,通过命令能使内部操作设置变化。当系统的其它部分,包括程序材料,按压成在其最大线性功率能力上方操作时,这种特征能帮助覆盖增大失真。HS参数是+/-dB。其设置最好经试验测量试验地确定。低波峰(WL)-谐振低音截止常常是希望的。为此平衡记录,并且把大多数扬声器设计成具有自谐振低音增强。一般,较大扬声器具有较低谐振频率,并且听众把值联系到这种关系上。WL参数提供在扬声器本身的自然自谐振(W0)下面的低频谐振提升。当低QL补偿响应下降除去W0效应时,扬声器系统就象它较大那样电气和声学地动作。它不会具有平衡小扬声器的隆隆或箱声音。为了防止过分失真和功率抽取,在WL下面的信号迅速衰减,并且涉及的高通滤波器跟踪WL参数设置。这种作用具有与加权补偿类似的主观因数,因为在截止下面的频率可能弱小,但当不由在人类听觉的WL临界频带中的其他声音掩蔽时仍能听到。一般,调节和设置WL波峰,以便对于最大回放条件控制功率和失真。对于其他条件,能关闭高通或次低音滤波器,并且运动或改变低通滤波器的(LP)的部分而没有明显的主观结果。如描述的那样,能动态地调制WL参数以扩展低音或减小失真。低通滤波器的响应的调节包括波峰频率(WL)和单位为dB的振幅|AL|。意味着缺省QL设置。高波峰(WH)-谐振截止可能是希望的以补偿第二截止反射,或者它能用来限制复制带宽。第一用途能扩展响应和减小群延迟失真。带宽限制可能是需要的以使失真程序声音较好。波峰谐振器跟踪高通滤波器(HP)以与低频波峰系统相类似的方式操作。高通滤波器能排列成创建加权响应限制和提供在临时设计实践中最佳的波峰截止响应。高通滤波器调节包括单位为Hz的波峰频率(WH)和单位为dB的振幅(|AH|)。意味着缺省QH设置。电机(BL)磁铁结构和音圈的性质统一到传统表示。音圈直径、绕组长度、间隙磁通、磁极尺寸等是创建电机和发电机当量的传统扬声器模型的部分。关于电流和机械运动、以及其他与机械性质有关的因数的力和反EMF关系得到简化表示。有时包括漏电感和机械质量关系。这些元件由各种装置测量、计算或导出,以创建能影响扬声器多个性能方面的一组电机相关参数。对于补偿系统和其处理的可调节参数取决于BL。因此,如果需要,模型能具有建立的关系,从而BL变化能调制参数设置。例如,BL特性能用来跟踪或重新调节用于具有不同磁铁重量、音圈长度、或其它机电因数的类似扬声器的其它参数。可调节BL参数能是磁通x长度、电压x速度、波峰漂移长度、及电阻/电感或时间常数。低音谐振(WO)或自谐振-这是扬声器的自然低音谐振频率。其值由空气体积、机械柔性、辐射面积、阻尼、运动质量、电机特性、及扬声器的其他设计特征确定。不象传统低音模型,声学耦合因数不是W0响应的部分,因为它在补偿系统的LX参数中已经描述。这种布置防止在调节参数之间的相互作用,并且对于机械性能的等效转换到机械性能的LCR谐振器等效。频率W0、Q0和耦合能量或振幅|A0|的用户命令语言能规定对于机械谐振性能的共轭响应。因为用于系统的扬声器性能和校正响应具有相同的量极、但相反的振幅,所以群延迟性能能非常良好。调节是单位为Hz的W0,Q0作为一个数,及单位为dB的|A0|。这些调节值能由非常近范围设备、位置检测换能器;或由计算试验地确定。端口调谐(WB)-多个扬声器设计成提供一种打算扩展频率响应或改进功率处理的第二低音谐振。这样作的物理结构包括端口、管、无源谐振器、迷宫、其它低音喇叭等。许多文献已经致力于模型化和调谐这些系统,通常实现最平的可能频率响应。这样的模型与补偿系统相结合,有潜力扩展低音、改进过渡响应、及改进效率而不增加扬声器的成本。能结构设计较大功率处理和扩展低音能力,并且通过共轭校正能除去由使用这种策略生成的频率响应奇异性和端带失真折衷。当进行这种选择时,端口能较大并且调谐较低、使壳体较小、以及改进低音的其他变化。粗响应和次低音过载的生成结果由补偿系统颠倒。标志或开关能是控制操作的部分,这种控制操作辨别程序条件或在扬声器处的响应状态。来自样本或试验的极限状态确定用于该前馈/反馈型系统的开关状态。然后,从开关或状态输入选择参数系数。以这种方式,补偿系统能借助于模糊逻辑控制或其它方法操作,以防止对于参数值的不必要肘动(toggling)或变化。例如,不同的音量控制设置、程序水平、或低音内容能改变参数系数和排列,以实现较高功率或较平响应优化。开关操作可能是可听的,但控制磁滞提供较不明显或客观的策略变化。便宜设备是希望的,并且可能过载或超越合理线性操作推动。以适当控制逻辑操作的补偿系统能致动柔和及响亮的操作状态,每种状态具有最优排列,而不创建其之间的失真连续。机械谐振(W1、W2、至Wn)-扬声器系统的多个部分和动作象谐振器起作用。不象W0,这些的大多数是无意的,并且他们通常添加到扬声器的声学输出上。这些尤其包括圆顶、锥、及周围场的弯曲和质量性能、以及机箱共振。等效LCR性能参量化成无相互作用的个别校正或与用于W0的那些相类似的调节。谐振调节是单位为Hz的W1、W2、至Wn;单位的Q1、Q2、至Qn(下面描述);及单位为+/-dB的|A1|、|A2|至|An|(下面描述)。显得类似于房间响应的小、低Q谐振常常具有声冲击。不象用于传3统响应水准测量的试验麦克风,听众能四处运动,并且及时地能检测和知道消失于宽带谐振的信号衰减。共轭校正消除该困难,并且有助于改进来自辅助平衡系统的结果。稳定谐振(WCC1、WCC2至WCCn)-使用多谐振器切口和加权侧能量增强的隐藏补偿过程按频率放置,并且由这些控制参数调节。减小或除去来自延迟节点谐振和驻波干扰的声结果。耦合和损失因数(|A|0、|A|1至|A|n及O1、Q2、至Qn)-用于某些频率的Q参数能估计为材料、设计、及对于扬声器普通的结构材料尽力的缺省值。由于几乎不可能由响应线图或简单测量偶然确定Q,所以固定值是实际的,并且缺省值选择简化和减小调节的数量。波干扰(Td)-扬声器壳体的有限尺寸能创建在辐射表面后的波相关干扰压力。通常因为校正响应的复杂性忽略该问题。昂贵扬声器用具有紧密磁耦合的大电机组件建造,以战胜回波干扰。这些系统常常具有内隔板、不同类型呼收材料的层、专门成形的腔、或传输线管,以便有助于除去干扰。典型扬声器呈现来自其简单箱型壳体的建设性/破坏性波干扰,这些壳体最终引起随频率增大出现的响应波纹。关于短接效应、和来自BL的阻尼的奇异性变坏由较小磁铁、还原钢和其它经济因素减小。校正由来自一个延迟和反馈环路过程的共轭相反响应进行。尽管模拟实施是可能的,但DSP方法更经济,并且通过其本性进行对于要固定的物理性能和问题进行良好平衡。类似校正能减小来自地板、台面、墙壁等的反射干扰。倾斜(dB)-大多数同辈听众喜爱响应随增大频率稍微降低的扬声器。当使扬声器便宜时,其响应往往升高。补偿系统校正由减小磁铁重量发生的多个问题和变化,改进效率及扩展高频响应。然而,由这些共轭校正创建的平声学平衡与当代音调标准相比可能听起来模糊或贫瘠。倾斜创建一个补偿响应斜率。倾斜参数象一种音调控制操作,并且用来实现希望的低音-高音平衡。LX和HX的内部操纵、以及传统响应水准测量方法或过程能创建该响应。延迟或全通-该参数及时除去信号以补偿从不同地方辐射高和低频率的换能器。调节能减小群延迟失真,改进与次低音喇叭的相位匹配,及对准过渡响应。使用物理或电气测量能进行调节。图8a至8f表示控制板显示和用来调节参数的菜单。测量数据、设计表示、及响应曲线提供有用的信息以对于扬声器调节或调谐系统。系统产生对于扬声器那些的共轭响应,并且静静地除去延迟或长稳定机械声音。经验已经表明与更复杂常规水准测量实践相比用于许多收听位置的较好性能。对于这些功能的实施能利用普通数字过程。示范已知的数字过程在附录A中表示。可选择的已知数字实施能用来实现完全类似的结果。使用模拟电路也可以实施补偿系统。然而,多谐振器或耦合功能的部分不可能跟踪宽调节范围,除非他们是复杂的。所以对于其功能性和与熟知较好DSP平衡的相似性表示模拟电路。这些电路具有可调节参数控制,但他们要求元件变化以模拟关于数字系统固有的参量对准精度。如下例子是具半参量调节能力和产生象描述的那些共轭响应的传统电路。截止滤波器-Sallen和Key电路能形成具有可调节波峰响应的有源高通和低通滤波器。图9表示配置成一个单opamp的两个滤波器。中带响应是平的,并且截止斜率是+和-18dB每八度。LP和HP的波峰振幅是可调节的,并且与图4b相对应。然而,对于该电路必须预置频率。对于该例子,两部分因为其宽频率分离不相互作用。恒定斜率均衡器-在有源反馈电路中改变RC时间常数以创建象图4a的响应曲线。表示在图10中的电路是成熟参量音调控制的提升半。对于在搁置与交叉之间的良好参量独立限制其调节范围。参量切口-图11和12表示具有宽调谐范围的简单模拟切口电路。切口深度保持恒定,但Q随频率设置增大。能选择元件值以对于实际调节范围向Q0、Q1至Qn提供合理近似。加权补偿切口-一个合成滤波器元件由一个或多个尖锐切口组成,每个切口使能量添加到抑制频率的一侧或两侧。当认真选择其抑制和提升能量和带宽时,滤波器系统能借助于对于声平衡的很小折衷或改变除去多余能量。用于此目的的抑制切口是尖锐的,具有高衰减及一般是高Q。侧带补偿或恢复最好由在抑制两侧处的提升响应进行。然而,单侧补偿可能更好地为具有组合响应滑离和干扰能量问题的扬声器工作。不对称提升有助于弄平频率响应。其它方面是相同的。补偿能非常小,具有低Q,及当过程是通或断时,在集中到校正的一半到一个八度带中的平均粉红噪声能量是恒定的。来自声音的衰减感觉移动到低Q侧带频率。因此,用于较好立即过渡响应稳定的双调谐对准希望是一种单侧或单调谐提升方法。能认真调谐和定比例生成合成滤波器,从而它能静静地在有用频率范围上调谐。没有加权,在校正任一侧的小响应损失影响鼻音。着色可能是微妙的,但当使用较多校正时,损失能克服任何优点。如果仅使响应是平的则这特别真实,因为它可能具有标准实际平衡。加权消除折衰,并且允许多重校正更有效而没有声相互作用,及当无意校正应用于具有不同性能性质的扬声器时,也消除损失。对于任一种实施,适中加权响应切口能由添加到信号上的谐振和反谐振响应组成。参照图13,校正元件可能包括单高Q切口,其频率集中在性能模式上。一个低Q提升响应放置在相同频率处以提供补偿等重量能量。图13的电路部分表示在反馈路径中有源电路切口和无源LRC提升谐振器的实际结合。两部分都创建加权响应切口。然而,限制调谐范围,并且低Q提升可能是可听的,因为人类听觉能分辨衰减到低Q谐振的过渡声音。一个更好的选择例是使用两个低Q谐振提升响应,每个调谐并且放置在高Q切口的一侧或两侧处。图14表示由四个可调谐双象限(bi-quad)谐振器或状态可变滤波器组成的例子。滤波器的两个创建封闭隔开的高Q切口,而其它两个提供在外部高和低侧处的提升低Q能量。这些状态可变滤波器容易用DSP处理器创建,并且它们在宽调谐范围上保持恒定的Q和切口深度。创建图15中表示的响应的模拟系统具有在单轴上联接的八个精度可变电阻器,以调谐WCC1或加权切口参数。图13表示用于四部分之一的一个电路。图15表示用于两个不同Q设置的响应曲线,并且这些与图4d中的那些相关。能对准双调谐提升以对于过渡产生较快和较小的设置响应。象来自图的那样的双调谐切口提供类似的优点,并且也提供死带或带抑制能力,以容纳从一个扬声器到另一个的制造公差。仍然需要侧频率提升,并且最好使用双调谐谐振器。当相邻性能模式具有类似性能时能进行其它变化和简化,就象对于大多数扬声器可能的那样。两个或多个抑制切口能分享Q和振幅设置以及补偿提升。组合包括具有三次提升的两个切口、具有两次非对称提升的两个切口、具有两次的三个切口等。能使用在两个切口之间有频率减半(halfway)的单低Q提升。具有频率在下面、在上面和在其之间的三次低Q提升是一种较好的变化。对于所有这些实施,切口深度常常较大,并且侧频率提升通常较小。通常,使对于关于补偿区域平均的随机噪声的整体能量响应相同或稍高于没有校正。延迟干扰或全通-一个混合模数CCD设备能创建一个较小、便利的可调谐延迟。尽管性能可能较差,但它们能象图16中的例子那样连接或配置,以提供干扰状性能。该电路能创建对于来自墙壁、桌子及扬声器壳体内部或者传输路径或系统的其它部分的波长有关反射和传输性能的近似共轭响应。电路能设置成创建一个倒相梳状滤波器或辅助干扰状响应,该响应在时间、相位及振幅方面与来自反射表面的下层干扰损失相反。校正提升消除干扰的地方。该电路也能调节成具有象响应的梳状滤波器以抵消来自扬声器壳体内的反射的辅助能量。由DSP过程能形成较好时间延迟干扰滤波器或梳状滤波器状响应。模拟和DSP都能配置成与物理反射模型相关,并且校正系统的类似其它部分由与物理性能相关的参量调节控制。延迟干扰路径滤波器具有关于尺寸、表面吸收、及需要的干扰校正量的控制。参照图16,Td与在从扬声器到听众的直接路径与也从扬声器到听众的较长跳回路径之间的差有关。Td也与在扬声器与壳体内的相反表面之间的出去和返回路径有关。同样能特征化在扬声器后面的壁。较大Td给出较大距离。RC与表面粗糙度或在高频下的吸收有关。RC乘积越大,上部频率梳状滤波器响应和校正的损失越大或衰减越快。控制R1调节响应或校正的数值。CW方向增大下层响应,同时靠近至opamp的+输入的CCW位置给出最大辅助响应。该电路产生一个其振幅随频率减小的干扰响应。这匹配或模拟实际扬声器吸收材料的损失。对于显得更容易由补偿系统处理的物体,能试验地改变来自小扬声器的不规则响应的大部。通常,实现这点的延迟设置匹配从扬声器壳体期望的后到达波关系。当它做时,这样一个可调节等于常规响应水准测量过程的一个数值。图17是一个全通或相位移动网络。其频率响应是平的,然而其输出在高频下同相而在低频下异相。电路改变过渡响应而不改变频率响应。可变控制增大过渡频率,因为它转向CW。该元件是有用的以校正群延迟或其它过渡相关响应。如上所述,由扬声器产生的机械干扰常常是可听的、而是不可见的或者仅以由使用频率扫描和麦克风进行的响应测量难以译码。使用深切口的传统补偿方法通常导致鼻音或有害平衡象差。本发明的加权补偿切口滤波器解决该问题,并且也产生一些其它优点。当两个驱动器(低音喇叭和高音喇叭)仅由一个电容器或由重叠频率的电路横穿时,一个或两个驱动器能具有干扰补偿而没有对于其它的感觉损失。同样适用于不同的收听位置。能补偿具有坏响应的一个位置而不折衷用于其它收听位置的声音。校正由加权侧能量隐藏。由于良好的收听位置不会由校正折衷,所以宽范围的收听位置能具有良好声学。这种特征对于用于剧场声音的喇叭形扬声器特别有用,其中从一种安装到另一种需要稍微不同的校正。通过对于一类扬声器或建造特征使用缺省优化,参量控制和调节是简单和直观的。扬声器最重要性能的一些(相对于声学可感觉效应)不能由传统方法模型化或实施。这样的性能包括干扰和谐振耦合、以及来自这样的性能的非线性结果。另外,需要考虑与运动部分的刚度和用于远离驱动音圈的运动的高频去耦有关的其它空间因素。任何这些能创建源运动、延迟能量释放和对于双耳听觉的相位误差。常常是,这样的破坏性响应可能是不可见的,或者非常难以由传统麦克风和频谱分析仪校准方法解释。参量寻址对于特定物理效应的补偿的一个例子是对于在大全范围扬声器中机械去耦的补偿。这样的扬声器通常设计成在低频下具有全部锥运动。在高频下,只有驱动器的内部是主要有源辐射器。锥的其余部分是有意去耦以衰减其节点分散。这种设计选择改变一个等效辐射源的位置。及时向前运动高频辐射的一种线性校正使用混通滤波器以创建较低频率的频带限制延迟。然后,当频率增大时,潜在延迟减小,由此保持对于扬声器的响应级的相位匹配。这样能除去一些群延迟失真。来自扬声器的物理尺寸以及锥的衰减和声速性质能产生规定来自专用滤波器过程的校正的信息。然而,能试验确定延迟效应和去耦频率以产生参数值。如果扬声器部分的一些改变尺寸或衰减性质,则能外推新的值。难以或不可能使用传统方法补偿的一种参量寻址补偿的一个例子是在小扬声器中对Doppler调制的补偿。计算机和多通道声音系统需要小扬声器奏得非常响亮。快速、高位移锥运动的生成组合能把辅助或减缩速度传给复制的声音。扬声器锥的低频运动通过运动有效高频辐射区域传递Doppler调制效应。该效果十分烦人,并且创建象征着小扬声器努力奏得响亮的声音。当辐射区域、频率、及声学功率输出已知时,能进行生成锥运动和Doppler辐射因数的合理准确计算(见图5)。为了校正扬声器响应创建一种相反交替时间延迟。这种倍增或非线性过程能使等效辐射源更稳定,从而减小非线性失真。扬声器的一个良好性能模型和一个单尺寸参数能规定校正。任何这样的开环或前向非线性校正非常难以实现。模型化时间延迟调制在它提供准确的共轭响应校正时要好得多。例子包括在这里,因为来自低音驱动器的锥运动由模型合理地预测,并且来自DSP方法的瞬时校正将及时变得更实际。通过使用由电压控制振荡器时钟操作的CMOS型模拟延迟进行试验。一条路径补偿来自两个“斗链式”器件的等待时间,而另一条接收可变时钟以产生延迟调制。对于节点弯曲、波干扰及非线性运动情形,通过使用加权切口过程的性能响应的除去或衰减是一种良好的折衷。加权补偿能参量运动到需要它的地方。如果需要,则能调制其严重性,以最好地匹配程序动力学、来自扬声器的失真、及人类临界频带听觉。当声频信号的动力学被探测和用来改变参数或隐藏补偿时,辅助低音输出能力和响应扩展可能较差。这种技术能为由改进方法操作的任何扬声器系统工作。然而,如果把扬声器的部分设计成要求动态补偿,则辅助性能特征是可能的。目的在于特定系统的调节列表或位图能具有与一般目的系统相同的参数和调节,即控制具有共同的特征。因而带有补偿系统的电子系统能够接收指令,以补偿和优化能附加到其上的各种扬声器模型和产品,两种通用扬声器和专为具有补偿系统的用途设计的那些。当需要时,系统能改进清晰度、成象、及低音扩展而不改变声平衡,即保持生产线的声印记。参数创建的调节效应由包括在上述表格中的符号或缩写词描述或表示。以这种方式,数学命题、电路、扬声器设计特征和其它特定语言统一到程序员或用户能直观解释的列表。然后,响应曲线、性能特征、波长关系、以及对于人类感觉重要的其它东西,变得与用于扬声器系统的设计和/或补偿的过程模型有关。简化补偿,因为在设计和性能变化与基基本关系之间的相互作用是有意义的和直观的。稳定和节点补偿参数调节包括单位为Hz的频率、作为一个数的Q、及单位为dB的抑制。由于多阶节点性能是可能的,所以Q和抑制调节对于多于一个的补偿频率更可能具有类似值。能链接控制,从而单位为Hz的两个或多个频率能规定对于共同共享机械或干扰性质的节点性能的校正。用于扬声器锥的钟形模式补偿提供一个良好例子。几种方法能确定这些频率。使用正弦波激励和光学干涉测量法能观察多节点或波相关干扰。能解释来自图7中所示的MLSSA型刺激、或微分麦克风探针的瀑布图线,以揭示来自分散的稳定能量。这些性能是可听的,并且在频率中能人工或缓慢地扫描隐藏补偿过程,以揭示在粉红色噪声复制期间的声变化。试验方法需要小心和经验,因为室内回声能模拟机械声音。在三种技术之间的相关是良好的,并且当确定来自类似原因的几个频率时,类似Q和共享提升参数的合成加权切口简化校正。以上参数和其调节改变用于扬声器特定性能的配置补偿。一些过程固有地限制到一个窄频率范围,其中特定种类的性能最可能从扬声器系统发生。影响时间和响应斜率的其它覆盖一个宽频谱。这些专用操作彼此足够隔离,从而在他们之间的相互作用较小。能改变选择参数而不影响其它。另外,数据要求对于有用的调节分辨率是合适的。如在以上扬声器例子中描述的那样,调节补偿系统的控制与扬声器的物理部分和声学性质有关。以相同方式能改进类似、但不准确设计或构造的其它扬声器。这样做的控制或规格信息具有相同简单、直观的语言。一个较小便宜扬声器能借助于16次参数调节和几个缺省设置显著改进。为了匹配来自该系统的复杂响应,传统多频带或图形均衡器需要远超过100频带、和多得多的控制信息。补偿系统使用斜率、交叉、和其它数学函数创建对于扬声器特性的预计校正。这些操作由系数或点、和由过程命令控制,代替来自对于线性线图的证明和计算响应。由于每个过程具有一个特定本性,所以频率范围、振幅、Q等把参数范围限制到一个控制空间的较小部分。一个三字+代码能创建一个精确放置的谐振器或复杂加权的响应切口子系统。在8位代码字的情况下,该图或信息序列给出用于一个对数频率十进制的128个点、在用于振幅的1/2dB步长中的+/-20dB、及16个Q设置、以及用于过程命令和控制格式化的空间。对于该例子,在声频带中的384个点或频率适用于设置尖锐抑制切口和加权补偿。用于其它参量控制和过程命令的位图可能要求较小分辨率,因而提供甚至更大的经济性。这种紧凑规格特征能用于校正特定扬声器设计的补偿系统的条码安装,或用于来自在诸如用在HDCD系统中之类的数据流中隐藏的代码的过程的动态控制。如下面详细描述的那样,当减小处理信息范围时,诸如助听器和通信系统之类的可携带设备受益。对于多种用途,对于在包括十个基本操作,即搁置、切口、补偿、截止滤波器、延迟等的成功过程可以选择在声频带中的384个点或频率。过程规模随分辨率非常迅速地增大抑制切口可能是尖锐的并且需要准确调谐,干扰补偿固有地复杂,及来自传统测量实施的扬声器响应揭示简化处理的很少有用信息。如果不把补偿系统设计成识别和处理来自曲线的子系统或模型化响应,就必须在一点一点的基础上进行校正。即使进行良好的响应校正,这种方式也要求显著的过程功率。当考虑时间、相位及稳定问题时,常规处理的范围加宽。对于这种情形,分辨在三维栅格(如瀑布线图)中的任何地方的有用校正响应需要的滤波器或过程的数量可能是不实际的。当把滤波器或处理功率分配到要求较高分辨率和较多校正活动的栅格的那些部分时,一些经济性是可能的。即使这些努力没能实现,隐藏或补偿校正也有利于补偿系统。这种困难的一个良好例子由图6是显然的。补偿系统具有8个切口、用于切点校正的一个加权切口、及低频提升交叉和搁置。高频降低把交叉提供给高音喇叭。显然,画出点创建响应合成的困难是显然的。补偿系统由24次调节(LX、LS、LP、W0、Q0、|A|0、W1至W7、|A|1至|A|7、WCC1、及一个缺省Q设置)创建这种共轭。与补偿带中信号去除类似的策略能用于最高和最低频率。例如,由来自低音能量的过分锥运动引起的失真通过减小至扬声器的输入可能是有害的。实现这点的一种方法是把低频响应限制到一个实际值。十分可能的是,扬声器已经能够进行在截止下面的弱低音复制,条件是程序材料不会掩蔽较低的低音信号。宽动态范围程序材料能强迫扬声器在这些频率下产生可感觉输出。不幸的是,生成弱输出频繁地由在人听觉的相同感觉频带中的其它声音覆盖。所以,多半时间来自扬声器的扩展响应是无用的,并且仅添加失真和消耗放大器功率。补偿系统的加权响应校正能应用于低或高频宽带或者截止抑制或滤波器的可听侧。如果认真地做,则感觉响应显得未改变,并且能使扩展声音象它在滤波之前那样。打算复制大功率、次可听或次声能量的大系统需要一种不同的方法,尽管相同的方法适用。补偿系统把一个扬声器模型与共轭过程组合,创建一个其声学输出具有低群延迟失真的零相位位滤波器。对于这种用途,波峰响应不仅遵守标准实践,而且用在对准中以帮助改进群延迟,并且成为允许频带限制特征接通或断开的隐藏补偿的部分。当象选择上述那样的中性时,能使补偿系统改变其截止深度和具有最小听力的补偿能量。这种特征允许补偿系统由音量的变化跟踪或调制控制设置、功率级、或竞争感觉频带的程序条件。以这种方式,在失真插入之前,带宽限制能迫使较多功率到扬声器。由于现在定量可听能量,所以较小放大器能产生相同的重放音量。这些因数具有经济重要性。扬声器具有这样设计的部分,从而系统能从补偿系统受益。它们具有较短音圈和较小重量的锥以从放大器产生较高声学输出。效率较高,但机械性能常常折衷,并且来自这样一种设计的声学输出往往随频率升高。没有校正,扬声器听起来刺耳和尖叫,并因此必须补偿。然而,一旦这些变化由补偿系统校正,扬声器就奏得更响亮,能更小,并且能使用更低功率的放大器。如果选择虚拟低音扩展,则在频率中借助于认真制订的策略运动波峰或补偿响应。在频带边缘处的过程设置和有关声学波峰频率变得取决于程序材料的低音含量、放大器的功率保存、及扬声器的运动能力。当重放级较高,并且低频能量较强时,波峰响应在频率中向上运动,以保持合理的锥运动和失真性能。大多数娱乐系统带有均衡器、音调控制、及其它用户操作或启动的特征。需要声学可见性。补偿系统最好与这些级联工作,并且能改进其性能。一旦扬声器系统具有由补偿系统提供的更理想化辐射性能,各种响应水准测量系统就不必分类或推测从麦克风取出的测量响应的哪部分源于扬声器或源于室内。补偿系统能更有效地从可能损坏相位响应或不适于其它听众位置的这些响应水准测量程序,消除不适当的均衡。级联操作也保证除去由传统方法不可辨别的响应引起的扰乱机械声音。人双耳听觉擅长感觉、识别、及定位这些声音。一旦除去它们,传统均衡方法就能提升没有刺耳声的高频、和没有箱隆隆声或最小构造的模糊声音特性的低频。对于补偿系统,特定模拟功能块电路能形成简单的实用系统。用于其可调节部分的响应范围能由共轭模型预计,从而平行信号路径和多个共享功能是可能的。在单条路径中需要少得多的有源设备,由此减小成本和失真。一些时间有关校正由全通滤波器是可能的,而其它延迟操作是不实际的。在扬声器上下文中的补偿系统的示范模拟和DSP实施分别提供在附录B和C中。补偿系统的其它用途的描述如下。通信系统-通信系统可能经受多余的窄带噪声或在固定或变化频率下的音调。十分经常的是,一些时间等待适用于允许子系统辨别和跟踪这样的音调。当创建除去干扰的异相信号不实际或不可能时,补偿系统实现一种有效结果。常常是,有可能用参量可运动加权响应切口跟踪干扰。如果不是信息信号具有与受抑制的相同的频率,则校正将是有效的而不降低或改变声音。常常是,通信系统具有换能器,如作为声音复制系统部分的麦克风、耳机和扬声器。这些元件能具有能作为一个系统个别或集体补偿的多余响应。一个或多个处理器能放置在信号链中的任何处。它们能控制或编程成补偿许多元件部分混合物,如换能器、信号路径、人听觉要求等。为了建立这样一种系统,控制参数信息可以由在信号路径中的隐藏代码辨别或估计。辅助通道、以及其他装置,能用来传送该信息。由于补偿系统有效地使用该信息创建非常复杂的响应,所以校正过程能建立在多个系统中。例子包括计算机扬声器、用于听力损伤的电话系统、及移动通信。对于这些系统,处理器能在外部或不是未端用户器具的部分。所以,补偿系统能编程为器具的一种具体模型,并且外部致动。处理器的部分、全部能随器具存在或不随其存在。助听器-许多听力困难产生于对听觉神经内茸毛细胞的损坏。常常人们受耳鸣或头晕(headringing)之害,并且具有理解在拥挤嘈杂房间中的对话的困难。有时与一个窄频带相对应的一个封闭空间群细胞已经有机械损伤,引起对高强度刺激的过分神经响应。这种作用常常听起来不和谐和疼痛。它可能引起至和来自大脑的听觉反馈路径的中断,从而启动过早保护功能,由此加重不愉快感觉。由于引起机械运动的刺激是在由医学试验例行程序容易定义的频率范围中,所以能容易地把参量加权切口滤波器调谐到相同频率,以阻塞刺激这些细胞的声音传输。如果对于个人适当地建立辅助加权,则减小对于其它声音的感觉损失。在一种典型情况下,切口必须具有可能必须随声音压力级变宽的带抑制特性。补偿侧能量跟踪这些变化以对于其它声音减小清晰度损失。设计成进行这种校正的系统能更有效,并且其特定处理可能吸收比通用响应造型方法少的电池功率。水印辨别-一种记录能借助于由一个尖锐切口除去的已知频率形成。如果相同记录需要以后辨别,则能使系统查寻已知的丢失频率。人们能期望颤动、噪声、及未预计时钟速率,以便移动死频带和创建多种困难。记录可以使用音乐信号定义操作频率和编码安全切口的计时。减小时钟依赖性,并且使用数码键防止某人找到这些频率和改变目的。在重放期间,程序的键辨别部分启动用于确认的译码参数。象上述的通信系统那样,记录切口应该尽可能好地安静或隐藏,并且可能从一个频率跳到另一个。参量控制加权补偿方法对于这种用途是理想的,并且键入频率跳跃和隐藏的组合为一种有效安全系统提供。从声音系统消除反馈-涉及声音的同时获得和复制的较大声音增强设施、电话、和其它系统经受反馈。通常,一个麦克风拾波复制声学信号的某一部分,并且添加到引起振荡的信号上。扬声器电话的成熟DSP部分能分类房间回声和串音的相位关系,以使声音传输清晰并且消除反馈。频移器随机化反馈相位以防止嗥鸣或高Q松散耦合振荡的缓慢建立。有时,来自这些方法的潜伏与级性能或同步干扰。能把可调谐加权切口设置到灵敏频率以消除振荡而没有对于声音的显著损失。双或多调谐样式彼此没有什么相互作用,并且固有死带使调出反馈容易得多。CD唱机-一种以数字或模拟域(或两者)操作的典型电子系统可以组合有意用户调节和补偿系统。部分描述、数学模型、测量数据、及人类喜好信息可以组合,并且并入其设计中。一旦定义参数,并且确定其系数值,一个组织群数码就能编程电气或数学系统,以对于扬声器的不同形状和尺寸进行特定校正响应。参数列表、和甚至个别校正模型能下载到在CD唱机或其它设备中的一个数字信号处理器。这种操作能在任何时间进行,从而它提供可编程升级。它能由条码、远程控制致动,从计算机下载,或安装到专用唱机/扬声器组合上。尽管已经表明和描述了本发明的几种具体形式,但显然,能进行各种修改而不脱离本发明的精神和范围。附录A图A1、A2和A3表示用于低通滤波器(LP)和高通滤波器(HP)截止滤波器的可能实施。这些具体滤波器的量级保持得较小以支持低MIPS实施。图A4表示用于高和低搁置均衡器的可能实施。这些均衡器用于LS和HS。图A5表示可用于提升或切口实施的参量均衡器实施。这样的均衡器的组合能结合,如图A6和A7中所示,以建立补偿切口效应。定义传递函数(第一列是在传递函数中的分子系数,而第二列是在传递函数中的分母系数),所以该滤波器是一个二阶IIR。D:=B1B-(2-F&CenterDot;Q-F2)0(1-F&CenterDot;Q)]]>D=1.41111.4110.99100.832]]>画出滤波器的频率和相位响应x=0,.001...5G(x)=|gain(D,x)|图A1定义传递函数(第一列是在传递函数中的分子系数,而第二列是在传递函数中的分母系数)。所以该滤波器是一个二阶IIR。D:=11-2-2(2-F&CenterDot;Q-F2)1(1-F&CenterDot;Q)]]>D=11-2-1.77710.858]]>计算增益补偿PK:=4(4-2&CenterDot;F&CenterDot;Q-F2)]]>K:=1PK]]>K=0.909画出滤波器的频率和相位响应x=0,.001...5G(x)=K|gain(D,x)|图A2定义传递函数(第一列是在传递函数中的分子系数,而第二列是在传递函数中的分母系数)。所以该滤波器是一个二阶IIR。D:=01B-(2-F&CenterDot;Q-F2)0(1-F&CenterDot;Q)]]>D=010.04-1.89100.972]]>画出滤波器的频率和相位响应x=0,.001...5G(x)=|gain(D,x)|图A3定义传递函数(第一列是在传递函数中的分子系数,而第二列是在传递函数中的分母系数)。所以该滤波器是一个一阶IIR。在DSP实施中,按以上信号流程计算滤波器输出。下面我们通过必要地变换全通部分的分子计算以上系统的整体传递函数。图4A(第1页,共2页)图4A(第2页,共2页)图5A(第1页,共2页)图5A(第2页,共2页)加权切口#1数字实施包括使用在“基于全通部分的切口/参量EQ部分”中描述的程序设计的3参量EQ部分2低Q增益部分围绕临界频率切口对于补偿部分#1和#2(分别为D1和D2)Q是2而k是1.5,导致下面的传递函数。生成滤波器是两个2阶IIR滤波器,其中列0表示分子,而列1表示分母。D1:=1.0761-1.283-1.2830.6190.695]]>D2:=1.0891-1.079-1.0790.5540.643]]>对于临界频率部分#3(下面的D3)Q是10而k是0。生成滤波器是一个二阶IIR滤波器,其中列0表示分子,n0而而列1表示分母。D3:=0.9621-1.363-1.3630.9620.925]]>级联的3IIR滤波器的整体频率响应的线图x=0,.001_0.5G1(x)=|gain(D1,x)|G2(x)=|gain(D2,x)|G3(x)=|gain(D3,x)|H(x)=20-log(G1(x)·G2(x)·G3(x))图A6加权切口#2的数字实施包括使用在“基于全通部分的切口/参量EQ部分”中描述的程序设计的3参量EQ部分一个中Q增益补偿绕两个切口对中对于补偿部分#1(下面的D1)Q是2而k是的4,导致下面的传递函数。生成滤波器是两个2阶IIR滤波器,其中列0表示分子,而列1表示分母。D1:=1.2681-1.29-1.290.5530.821]]>对于临界频率切口部分#2和#3(下面分别是D2和D3)Q是10而k是0。生成滤波器是一个二阶IIR滤波器,其中列0表示分子,而而列1表示分母。D2:=0.9631-1.383-1.3830.9630.926]]>D3:=0.9621-1.343-1.3430.9620.923]]>级联的3IIR滤波器的整体频率响应的线图x=0,.0001_0.5G1(x)=|gain(D1,x)|G2(x)=|gain(D2,x)|G3(x)=|gain(D3,x)|H(x)=20·log(G1(x)·G2(x)·G3(x))(级联响应)图A7附录B图B1是用来补偿一个带有5英寸低音驱动器和3英寸高音喇叭的小书架扬声器的补偿系统的方块图。扬声器的特征如下低音唔喇叭圆顶=4.33k(带有LC的切口)锥=4.9k(仅有补偿切口)锥的边缘=2.8k(有源切口)高音唔喇叭圆顶=15.1k(没有补偿)锥cr=11.6k(有源切口)锥cr=9.32k/9.45k(阻尼复合)W0=1.38k(LCR切口)提供十四种调节。图B2表示用来创建LX、HX、LS、HS、LP、和HP滤波器和参量调节的电路。添加较低频率截止波峰,以创建一个8英寸书架系统的响应特征。对于该电路,Q和波峰振幅由方框标记的元件设置。图B3和B4表示W0切口部分和用于扬声器的代表性调谐。dB为单位的W0…和|A|是可调节的,而一个电阻器设置Q。这些的两组进行四种调节。图B5表示一个单低Q提升。用于提升和频率的调节由opamp部分提供。图B6是用于时间校正的全通均衡器。全通均衡器组合来自六个有源过程电路的输出。图B1调节的斜率EQ和带通滤波器WL=65Hz,44Hz(平行引出头)WH=17kHzWLX=400Hz-&gt;20HzWHX=3kHz-&gt;25kHz图B2图B30.0015=3.2-3.6k(2.5k-&gt;6.8k)0.0033=1.4-&gt;1.7k(1.2k-&gt;3.3k)0.0047≌900-1.2k(800-&gt;2.2k)0.15=120(80-220)LOWQR|A|=47k||33kRQ=68k||100kVOUT=10VppMAX(+6dB)图B4图B50.033=270-&gt;1.4k0.0068700Hzopt@3/4maxW0附录C使用一个标准PC和一个MotorolaEVM56362DSP估计板实施一个计算机调节DSP补偿器。源代码和应用提示如下。扬声器调谐应用程序提示扬声器调谐应用程序写作使用目标取向MFC应用程序框架的WindowsOS32位应用程序(请参照对于MicrosoftVisualC++开发环境包括的MFC的文件编制)。该应用程序带有一个对话接口。主对话类,CTabDialog,是MFCCDialog类的一个子类。CTabDialog类实现一个“标记”对话接口。在对话中的每个标签是MFCCPropertypage类的子类。每个标签表示扬声器校正算法的不同方面。如下是标签类的列表●CMainpage,尤其实施用于前和后音量控制的UI●CShelvpage,实施用于低和高搁置均衡滤波器的UI控制●CCutoffpage,实施用于低和高波峰截止滤波器的UI控制●CNotchpage1和CNotchpage2,实施用于多个切口滤波器的UI控制(为了例如限制在扬声器中的谐振)●CStWaveRijecetpage,实施用于能限制在扬声器箱中的驻波的一组滤波器的UI控制●CDBNotch,实施用于双调谐切口滤波器的UI控制●CAllpasspage,实施用于二阶全通滤波器的UI在每个标签页上的每个可调节参数由CSlider类的实例表示。每个UI滑动器具有4096个分立值的范围。当用户操纵UI滑动器时,把一条消息从标签页送到CDSP56Manager类的实例。在该类中,适当的计算发生以把线性输入值转换成计算由用户设置表示的传递函数必需的一个或多个值。使用一个I2C串行连接把这些计算值传输到DSP。DSP执行对于上述传递函数的实时实施必需的计算。DSP能够实时地计算一系列滤波器计算,以允许实现所有扬声器校正滤波器的总级联传递函数。DSP能接收模拟或数字数据,并且传输处理的模拟或数字输出数据。<prelisting-type="program-listing"><![CDATA[//COMPortChooser.cppimplementationfile//#include"stdafx.h"#include"sa.h"#include"COMPortChooser.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CCOMPortChooserdialogCCOMPortChooserCCOMPortChooser(CWnd*pParent/*=NULL*/)CDialog(CCOMPortChooserIDD.pParent){//{{AFX_DATA_INIT(CCOMPortChooser)//NOTEtheClasWizardwilladdmemberinitializationhere//}}AFX_DATA_INIT}voidCCOMPortChooserDoDataExchange(CDataExchange*pDX){CDialogDoDataExchange(pDX);//{{AFX_DATA_MAP(CCOMPortChooser)//NOTEtheClassWizardwilladdDDXandDDVcallshere//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CCOMPortChooser,CDialog)//{{AFX_MSG_MAP(CCOMPortChooser)ON_BN_CLICKED(IDC_RADIO1,OnRadio1)ON_BN_CLICKED(IDC_RADIO2,OnRadio2)ON_BN_CLICKED(IDC_RADIO3,OnRadio3)ON_BN_CLICKED(IDC_RADIO4,OnRadio4)//})AFX_MSG_MAPEND_MESSAGE_NAP()///////////////////////////////////////////////////////////////////////////////CCOMPortChoosermessagehandlersvoidCCOMPortChooserOnRadio1(){//TODOAddyourcontrolnotificationhandlercodeherewhich_port=1;}voidCCOMPortChooserOnRadio2(){//TODOAddyourcontrolnotificationhandlercodeherewhich_port=2;}voidCCOMPortChooserOnRadio3()//TODOAddyourcontrolnotificationhandlercodeherewhich_port=3;}voidCCOMPortChooserOnRadio4()//TODOAddyourcontrolnotificationhandlercodeherewhich_port=4;}BOOLCCOMPortChooserOnInitDialog(){CDialogOnInitDialog();//TODOAddextrainitializationherewhich_port=3;returnTRUE;//returnTRUEunlessyousetthefocustoacontrol//EXCEPTIONOCXPropertyPagesshouldreturnFALSE}//CutoffPage.cppimplementationfile//#include"stdafx.h"#include"sa.h"#include"CutoffPage.h"#include"DSP56kManager.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CCutoffPagepropertypageIMPLEMENT_DYNCREATE(CCutoffPage,CPropertyPage)CCutoffPageCCutoffPage()CPropertyPage(CCutoffPageIDD){//{{AFX_DATA_INIT(CCutoffPage)//}}AFX_DATA_INIT}CCutoffPage-CCutoffPage(){}voidCCutoffPageDoDataExchange(CDataExchange*pDX){CPropertyPageDoDataExchange(pDX);//{{AFX_DATA_MAP(CCutoffPage)  DDX_Control(pDX,IDC_CHECK6,m_BypassSecondButton);  DDX_Control(pDX,IDC_CHECK5,m_BypassFirstButton);  DDX_Control(pDX,IDC_SLIDER6,m_HiBoostSlider);  DDX_Control(pDX,IDC_SLIDER5,m_HiQSlider);  DDX_Control(pDX,IDC_SLIDER4,m_HiFreqSlider);  DDX_Control(pDX,IDC_SLIDER3,m_LoBoostSlider);  DDX_Control(pDX,IDC_SLIDER2,m_LoQSlider);  DDX_Control(pDX,IDC_SLIDER1,m_LoFreqSlider);  //})AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CCutoffPage,CPropertyPage)//{{AFX_MSG_MAP(CCutoffPage)ON_WM_VSCROLL()ON_BN_CLICKED(IDC_CHECK5,OnBypassFirst)ON_BN_CLICKED(IDC_CHECK6,OnBypassSecond)//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CCutoffPagemessagehandlersBOOLCCutoffPageOnInitDialog(){  CPropertyPageOnInitDialog();  //TODOAddextrainitializationhere  m_LoFreqSlider.SetRange(0,CONTROL_RANGE);  m_LoFreqSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch6Freq));  m_LoFreqSlider.SetTicFreq((CONTROL_RANGE+1)/16);  m_LoQSlider.SetRange(0,CONTROL_RANGE);  m_LoQSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch6Q));  m_LoQSlider.SetTicFreq((CONTROL_RANGE+1)/16);  m_LoBoostSlider.SetRange(0,CONTROL_RANGE);  m_LoBoostSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch6Boost));  m_LoBoostSlider.SetTicFreq((CONTROL_RANGE+1)/16);  m_HiFreqSlider.SetRange(0,CONTROL_RANGE);  m_HiFreqSlider.SetPos(CONTROL_RANGE-g_DSPManger->GetParamValue(kNotch7Freq));m_HiFreqSlider.SetTicFreq((CONTROL_RANGE+1)/16);  m_HiQSlider.SetRange(0,CONTROL_RANGE);  m_HiQSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch7Q));  m_HiQSlider.SetTicFreq((CONTROL_RANGE+1)/16);  m_HiBoostSlider.SetRange(0,CONTROL_RANGE);  m_HiBoostSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch7Boost));  m_HiBoostSlider.SetTicFreq((CONTROL_RANGE+1)/16);//g_DSPManager->SetCutoff1Freq(CONTROL_RANGE-m_LoFreqSlider.GetPos());//g_DSPManager->SetCutoff1Q(CONTROL_RANGE-m_LoQSlider.GetPos());//g_DSPManager->SetCutoff1Boost(CONTROL_RANGE-m_LoBoostSlider.GetPos());//g_DSPManager->SetCutoff2Freq(CONTROL_RANGE-m_HiFreqSlider.GetPos());//g_DSPManager->SetCutoff2Q(CONTROL_RANGE-m_HiQSlider.GetPos());//g_DSPManager->SetCutoff2Boost(CONTROL_RANGE-m_HiBoostSlider.GetPos());  returnTRUE;//returnTRUEunlessyousetthefocustoacontrol  //EXCEPTIONOCXPropertyPagesshouldreturnFALSE}voidCCutoffPageOnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar){  //TODOAddyourmessagehandlercodehereand/orcalldefault  CPropertyPageOnVScroll(nSBCode,nPos,pScrollBar);  Sleep(50);  if((CSliderCtrl*)pScrollBar==&amp;m_LoFreqSlider)  g_DSPManager->SetCutoff1Freq(CONTROL_RANGE-m_LoFreqSlider.GetPos());  elseif((CSliderCtrl*)pScrollBar==&amp;m_LoQSlider)  g_DSPManager->SetCutoff1Q(CONTROL_RANGE-m_LoQSlider.GetPos());  elseif((CSliderCtrl*)pScrollBar==&amp;m_LoBoostSlider)  g_DSPManager->SetCutoff1Boost(CONTROL_RANGE-m_LoBoostSlider.GetPos());  elseif((CSliderCtrl*)pScrollBar==&amp;m_HiFreqSlider)  g_DSPManager->SetCutoff2Freq(CONTROL_RANGE-m_HiFreqSlider.GetPos());  elseif((CSliderCtrl*)pScrollBar==&amp;m_HiQSlider)  g_DSPManager->SetCutoff2Q(CONTROL_RANGE-m_HiQSlider.GetPos());  elseif((CSliderCtrl*)pScrollBar==&amp;m_HiBoostSlider)  g_DSPManager->SetCutoff2Boost(CONTROL_RANGE-m_HiBoostSlider.GetPos());)voidCCutoffPageOnBypassFirst(){//TODOAddyourcontrolnotificationhandlercodehereintstate=m_BypaasFirstButton.GetState()&amp;0x3;g_DSPManager->SetBypassSection(state,kBypassHipass);}voidCCutoffPageOnBypassSecond(){//TODOAddyourcontrolnotificationhandlercodehereintstate=m_BypassSecondButton.GetState()&amp;0x3;g_DSPManager->SetBypassSection(state,kBypassLopass);}#if!defined(AFX_COMPORTCHOOSER_H__BSD510E7_F7D5_11D2_96EE_006097CDB9E2_INCLUDED_)#defineAFX_COMPORTCHOOSER_H__BSD510E7_F7D5_11D2_96EE_006097CDB9E2__INCLUDED#if_MSC_VER>=1000#pragmaonce#endif//_MSC_VER>=1000//COMPortChooser.hheaderfile/////////////////////////////////////////////////////////////////////////////////CCOMPortChooserdialogclassCCOMPortChooserpublicCDialog{//Constructionpublic  CCOMPortChooser(CWnd*pParent=NULL);//standardconstructor  intwhich_port;//DialogData  //{{AFX_DATA(CCOMPortChooser)  enum{IDD=IDD_DIALOG3};  //NOTEtheClassWizardwilladddatamembershere//}}AFX_DATA//Overrides  //ClassWizardgeneratedvirtualfunctionoverrides  //{{AFX_VIRTUAL(CCOMPortChooser)  protected  virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport  //))AFX_VIRTUAL//Implementationprotected//Generatedmessagemapfunctions//{{AFX_MSG(CCOMPortChooser)afx_msgvoidOnRadio1();afx_msgvoidOnRadio2();afx_msgvoidOnRadio3();afx_msgvoidOnRadio4();virtualBOOLOnInitDialog();//})AFX_NSGDECLARE_MESSAGE_MAP()};//{{AFX_IMSERT_LOCATION}}//MicrosoftDeveloperStudiowillinsertadditionaldeclarationsimmediatelybeforethepreviousline.#endif//!defined(AFX_COMPORTCHOOSER_H__B5D510E7_F7D5_11D2_96EE_006097CDB9E2_INCLUDED_)#if!defined(AFX_CUTOFFPAGE_H__6F151625_D84D_11D2_96EE_006097CDB9E2_INCLUDED_)#defineAFX_CUTOFFPAGE_H__6F151625_D84D_11D2_96EE_006097CDB9E2__INCLVDED_#if_MSC_VER>=1000#pragmaonce#endif//_MSC_VER>=1000//CutoffPage.hheaderfile/////////////////////////////////////////////////////////////////////////////////CCutoffPagedialogclassCCutoffPagepublicCPropertyPage{DECLARE_DYNCREATE(CCutoffPage)//ConstructionpublicCCutoffPage();-CCutoffPage();//DialogData//((AFX_DATA(CCutoffPage)enum{IDD=IDD_PP7};CButtonm_BypassSecondButton;CButtonm_BypassFirstButton;CSliderCtrlm_HiBoostSlider;CSliderCtrlm_HiQSlider;CSliderCtrlm_HiFreqSlider;CSliderCtrlm_LoBoostSlider;CSliderCtrlm_LoQSlider;CSliderCtrlm_LoFreqSlider;//})AFX_DATA//Overrides  //Classwizardgeneratevirtualfunctionoverrides  //{{AFX_VIRTUAL(CCutoffPage)  protected  virtualvoidDoDataExchange(CDataExchange*pDX;//DDX/DDVsupport  //})AFX_VIRTUAL//Implementationprotected  //Generatedmessagemapfunctions  //{{AFX_MSG(CCutoffPage)  virtualBOOLOnInitDialog();  afx_msgvoidOnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar);  afx_msgvoidOnBypassFirst();  afx_msgvoidOnBypassSecond();  //}}AFX_MSG  DECLARE_MESSAGE_MAP()};//{{AFX_INSERT_LOCATION}}//MicrosoftDeveloperStudiowillinsertadditionaldeclarationsimmediatelybeforethepreviousline.#endif//!defined(AFX_CUTOFFPAGE_H_6F151625_D84D_11D2_96EE_006097CDB9E2_INCLUDED_)#if!defined(AFX_ALLPASSPAGE_H_F4767B24_11B3_11D3_96EE_006097CDB9E2__INCLUDED_)#defineAFX_ALLPASSPAGE_H_F4767B24_11B3_11D3_96EE_006097CDB9E2_INCLUDED_#if_MSC_VER>=1000#pragmaonce#endif//_MSC_VER>=1000//AllpassPage.hheaderfile/////////////////////////////////////////////////////////////////////////////////CAllpassPagedialogclassCTabDialog;classCAllpassPagepublicCPropertyPage{DECLARE_DYNCREATE(CAllpassPage)//ConstructionpublicCAllpassPage();-CAllpassPage();//DialogData//{{AFX_DATA(CAllpassPage)enum{IDD=IDD_PP10};CDuttonm_BypassButton;CSliderCtrlm_QSlider;CSliderCtrlm_FrequencySlider;//}}AFX_DATA//Overrides//ClassWizardgeneratevirtualfunctionoverrides//{{AFX_VIRTUAL(CAllpassPage)protectedvirtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport//}}AFX_VIRTUAL//rmplementationprotected//Generatedmessagemapfunctions//{{AFX_MSG(CAllpassPage)afx_msgvoidOnBypass();virtualBOOLOnInitDialog();afx_msgvoidOnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar);afx_msgvoidOnPaint();//})AFX_MSGDECLARE_MESSAGE_MAP()CTabDialog*m_ParentWindow;voidSendStringToUI(intwhich);};//{{AFX_INSERT_LOCATION}}//MicrosoftDeveloperStudiowillinsertadditionaldeclarationsimmediatelybeforethepreviousline.#endif//!defined(AFX_ALLPASSPAGE_H__F4767B24_11B3_11D3_96EE_006097CDB9E2__INCLUDED_)//AllpassPage.cppimplementationfile//#include"stdafx.h"#include"sa.h"#include"AllpassPage.h"#include"TabDialog.h"#include"DSP56kManager.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CAllpassPagepropertypageIMPLEMENTDYNCREATE(CAllpassPage,CPropertyPage)CAllpassPageCAllpassPage()CPropertyPage(CAllpassPageIDD){  //{{AFX_DATA_INIT(CAllpassPage)  //})AFX_DATA_INIT}CAllpassPage-CAllpassPage(){}voidCAllpassPageDoDataExchange(CDataExchange"pDX){  CPropertyPageDoDataExchange(pDX);  //{{AFX_DATA_MAP(CAllpassPage)  DDX_Control(pDX,IDC_CHECK1,m_BypassButton);  DDX_Control(pDX,IDC_SLIDER3,m_QSlider);  DDX_Control(pDX,IDC_SLIDER1,m_FrequencySlider);  //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAllpassPage,CPropertyPage)//{{AFX_MSG_MAP(CAllpassPage)ON_BN_CLICED(IDC_CHECK1,OnBypass)ON_WM_VSCROLL()ON_WM_PAINT()//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CAllpassPagemessagehandlersvoidCAllpassPageOnBypass(){  //TODOAddyourcontrolnotificationhandlercodehere  intstate=m_BypassButton.GetState()&amp;0x3;  g_DSPManager->SetBypassSection(state,kBypassAllpass);}BOOLCAllpassPageOnInitDialog(){  CPropertyPageOnInitDialog();  //TODOAddextrainitializationhere  m_FrequencySlider.SetRange(0,CONTROL_RANGE);  m_FrequencySlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kAllpassFreq));  m_FrequencySlider.SetTicFreq((CONTROL_RANGE+1)/16);  m_QSlider.SetRange(0,CONTROL_RANGE);  m_QSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kAllpassQ));  m_QSlider.SetTicFreq((CONTROL_RANGE+1)/16);m_ParentWindow=(CTabDialog*)GetParent()->GetParent();returnTRUE;//returnTRUEunlessyousetthefocustoacontrol  //EXCEPTIONOCXPropertyPagesshouldreturnFALSE}voidCAllpassPageOnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar){//TODOAddyourmessagehandlercodehereand/orcalldefaultCSliderCtrl*slider=(CSliderCtrl*)pScrollBar;ihtwhich;CPropertyPageOnVScroll(nSBCode,nPos,pScrollBar);Sleep(50);if(slider==&amp;m_FrequencySlider)  which=kAllpassFreq;elseif(slider==&amp;mQSlider)  which=kAllpassQ;else  return;g_DSPManager->SetParamValue(CONTROLRANGE-slider->GetPos(),which);SendStringToUI(which);}voidCAllpassPageSendStringToUI(intwhich){  CStringstr;  g_DSPManager->GetStringValue(which,str);  m_ParentWindow->SetStatusString(0,str);}voidCAllpassPageOnPaint(){CPaintDCdc(this);//devicecontextforpainting//TODOAddyourmessagehandlercodeherem_FrequencySlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kAllpassFreq));m_QSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kAllpassQ));m_BypasaButton.SetCheck(g_DSPManager->GetBypassSection(kBypassAllpass));//DonotcallCPropertyPageOnPaint()forpaintingmessages}//DSPComm.hinterfacefortheDSPCommclass.////////////////////////////////////////////////////////////////////////#if!defined(AFX_DSPCOM_H__33F9EF05_F6EF_11D2_96EE_006097CDB9E2_INCLUDED_)#defineAFX_DSPCOMM_H_33F9EF05_F6EF_11D2_96EE_006097CDB9E2__INCLUDED_#if_MSC_VER>=1000#pragmaonce#endif//_MSC_VER>=1000classDSPComm{public  virtualBOOLIsTransmitting();  virtuallongGetDetectState(void);  virtualBOOLCheckState(void);  virtuallongSendDSPMemory(char*,long);  virtuallongSendDSPWord(long);  DSPComm();  virtual-DSPComm();};#endif//!defined(AFX_DSPCOMM_H__33F9EF05_F6EF_11D2_96EE_006097CDB9E2_INCLUDED_)//DSPComm.cppimplementationoftheDSPCommclass.////////////////////////////////////////////////////////////////////////#include"stdafx.h"#include"sa.h"#include"DSPComm.h"#ifdef_DEBUG#undefTHIS_FILEstaticcharTHIS_FILE[]=_FILE_;#definenewDEBUG_NEW#endif////////////////////////////////////////////////////////////////////////Construction/Destruction//////////////////////////////////////////////////////////////////////{}DSPComm-DSPComm(){}longDSPCommSendDSPWord(long){return(0L);}longDSPCommSendDSPMemory(char*data,longlen){return(0L);}BOOLDSPCommCheckState(){return(true);}longDSPCommGetDetectState(){return(0L);}BOOLDSPCommIsTransmitting(){return(false);}//DSP56kManager.hinterfacefortheCDSP56kManagerclass.////////////////////////////////////////////////////////////////////////#if!defined(AFX_DSP56KMANAGER_H_0CF7E204_D790_11D2_96EE_006097CDB9E2__INCLUDED_)#defineAFX_DSP56KMANAGER_H__0CF7E204_D790_11D2_96EE_006097CDB9E2__INCLUDED_#if_MSC_VER>=1000#pragmaonCe#endif//_MSC_VER>=1000#include"DSP56Equates.h"#include"DSPComm.h"#defineCONTROL_RANGE_L212#defineCONTROL_RAGE((1L<<CONTROL_RANGE_L2)-1)#definePG_CONTROL_AMT(CONTROL_RANGE/64)#defineCONTROL_RANGE_SC(23-CONTROL_RANGE_L2)#defineDSP_CONTROL_MAX8388608.classCDSP56kManager{longm_DSPReturn;longm_Raw2DSPVals[kUIArraySize);longm_RawVals[kUIArraySize);longm_DSPVals[kDSPArraySize);doublem_pi;DSPComm*m_Comm;publicvoidGetPureStringValue(intwhich,CString&amp;str);voidGetFilterBlob(CStringArray&amp;array);virtualBOOLGetBypassSection(intwhich);virtualvoidSetBypassSection(BOOLvalue,intwhich);virtualBOOLIsBusy();virtualvoidGetStringValue(intwhich,CString&amp;str);virtualBOOLIsReady(void);virtualvoidSetAnalogInput(long);virtualintGetHDCDMode(void);virtualvoidResetAll(void);virtualvoidSetHDCDGainScale(long);virtualvoidSetHDCDBypass(long);virtualvoidSetDDXCompBypass(long);virtualvoidSetBypass(longvalue);virtualvoidGetDSPSettings(CStringArray&amp;array);virtualvoidSetDSPSettings(CStringArray&amp;array);virtualvoidSetParamValue(longvalue,longwhich);virtuallongGetParamValue(longwhich);voidDownloadDSPCode(void);CDSP56kManager(HWNDp);virtual-CDSP56kManager();privatevoidSetNotchQ(longvalue,longwhich,longfreqwhich);voidSetNotchFreq(longvalue,longwhich);voidSetShelvFreq(longvalue,longwhich);voidSetBoostCut(longvalue,longwhich);voidSetRawValue(longvalue,longwhich);doubleDoConvertFreqRange(doublein,doubletop,doublebottom);doubleConvertFreqRange(intwhich);doubleConvertQRange(longval);doubleConvertBoostCutRange(longval);virtualvoidSendDSPValue(longwhich);intChecksumSREC(char*lineptr,intN);voidGetSRecordAddressRange(char"s,long"start,long*end,char**data);protectedvirtualvoidSetDelay(longvalue);voidSetLoCutoff(void);voidSetHiCutoff(void);voidSetHiCutoff2(void);virtualvoidSetHiCutoff2Q(longvalue);virtualvoidSetHiCutoff2Freq(longvalue);virtualvoidSetHiCutoffQ(longvalue);virtualvoidSetHiCutoffFreq(longvalue);virtualvoidSetLoCutoffQ(longvalue);virtualvoidSetLoCutoffFreq(longvalue);virtualvoidSetPreVolume(longvalue);virtualvoidSetAnalogVolume(longvalue);//virtualvoidSetCutoff1Freq(longvalue);//virtualvoidSetCutoff1Q(longvalue);//virtualvoidSetCutoff1Boost(longvalue);//virtualvoidSetCutoff2Freq(longvalue);//virtualvoidSetCutoff2Q(longvalue);//virtualvoidSetCutoff2Boost(longvalue);virtualvoidSetShelv1Freq(longvalue);virtualvoidSetShelv1Boost(longvalue);virtualvoidSetShelv2Freq(longvalue);virtualvoidSetShelv2Boost(longvalue);virtualvoidSetNotch1Cut(longvalue);virtualvoidSetNotch1Q(longvalue);virtualvoidSetNotch1Freq(longvalue);virtualvoidSetNotch2Cut(longvalue);virtualvoidSetNotch2Q(longvalue);virtualvoidSetNotch2Freq(longvalue);virtualvoidSetNotch3Cut(longvalue);virtualvoidSetNotch3Q(longvalue);virtualvoidSetNotch3Freq(longvalue);virtualvoidSetNotch4Cut(longvalue);virtualvoidSetNotch4Q(longvalue);virtualvoidSetNotch4Freq(longvalue);virtualvoidSetNotch5Q(longvalue);virtualvoidSetNotch5Boost(longvalue);virtualvoidSetNotch6Cut(longvalue);virtualvoidSetNotch6Q(longvalue);virtualvoidSetNotch6Freq(longvalue);virtualvoidSetNotch7Cut(longvalue);virtualvoidSetNotch7Q(longvalue);virtualvoidSetNotch7Freq(longvalue);virtualvoidSetNotch9Freq(longvalue);virtualvoidSetMainVolume(longvalue);};externCDSP56kManager*g_DSPManager;#endif//!defined(AFX_DSP56KMANAGER_H__0CF7E204_D790_11D2_96EE_006097CDB9E2__INCLUDED_)//DSP56kManager.cppimplementationoftheCDSP56kManangerclass.////////////////////////////////////////////////////////////////////////#include"stdafx.h"#include"sa.h"#include"DSP56kManager.h"#include<math.h>#include<stdlib.h>#include<stringh>#if0#include"unit_ppi.h"#include"functs.h"#endif#ifdefSPI#include"SPIPEMicroComm.h"#endif#include"I2CIPortComm.h"#include"sapmem.h"#include"SSTParams.h"#ifdef_DEBUG#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#defienenewDEBUG_NEW#endif#if0staticintcmd_delay=1000;staticintio_delay=50;#endif#defineFILE_VERSION2//fileversion#defineGAIN_SCALE8.//volume#defineVOLTOP1.#defineVOLBOT3.909e-6#defineVOLRANGE(VOLTOP-VOLBOT)//hiandlocutoffandshelvingranges#defineFLCTOPRANGE0.149//1000/22050#defineFLCBOTRANGE0.001769//10/22050#defineFLCRANGE(FLCTOPRANGE-FLCBOTRANGE)#defineFHCTOPRANGE1//22050/22050#defineFHCBOTRANGE0.63//8000/22050#defineFNCBOTRANGE20.42//4000/22050#defineFHCRANGE(FHCTOPRANGE-FHCBOTRANGE)#defineFHCRANGE2(FHCTOPRANGE-FHCBOTRANGE2)#defineQLCTOPRANGE1.0//1#defineQLCBOTRANGE0.003891//0.001#defineQLCRANGE(QLCTOPRANGE-(QLCBOTRANGE))#defineSAMPLING_FREQ44100#defineDELAY_LENGTH128.//convsrtsfrequencyrangetologscale#defineFTOPRANGE1.#defineFBOTRANGE0.134#defineFRANGE(FTOPRANGE-FBOTRANGE)#defineFTOPRANGE20.585//about2205top.#defineFBDTRANGE23.531E-3//newrangesusingactualfrequencies#defineFTOPRANGE34.431//3000Hz#defineFBOTRANGE32.433//30Hz//hicutofffilterranges#defineQHC2BOT0.74#defineQHC2TOP2.258#defineFHC2BOT3.954//1000Hz#defineFHC2TOP5.255//20kHz#defineFHCTOPRANGE35.13//15000#defineFHCBOTRANGE3FHC2BOTstaticchar"m_ParamNames[kUIArraySize}={"MainVolume",  "LoShelfFreq",  "LoShelfGain",  "HiShelfFreq",  "HiShelfGain",  "Notch1Freq",  "Notch1Q",  "Notch1Cut",  "Notch2Freq",  "Notch2Q",  "Notch2Cut",  "Notch3Freq",  "Notch3Q",  "Notch3Cut",  "Notch4Freq",  "Notch4Q",  "Notch4Cut",  "Notch5freq",  "Notch5Q",  "Notch5Cut",  "PreVolume",  "Bypass",  "LoCutoffFreq",  "LoCutoffQ",  "HiCutoffFreq",  "HiCutoffQ",  "HDCDBypass",  "HDCDGainScaleOff",  "DDXCompBypass",  "Notch6Freq",  "Notch6Q",  "Notch6Cut",  "Notch7Freq",  "Notch7Q",  "Notch7Cut",  "AnalogIn",  "AnalogVolume",  "Delay",  "AllpassFreq",  "AllpassQ",  "BypassMask",  "HiCutoff2Freq",  "HiCutoff2Q",  "Notch8Freq",  "Notch8Q",  "Notch8Cut",  "Notch9Freq",  "Notch9Q",  "Notch9Cut",  "NotchAFreq",  "NotchAQ",  "NotchACut",  "DBNotchWidth"};////////////////////////////////////////////////////////////////////////SRECcode//////////////////////////////////////////////////////////////////////intCDSP56kManagerChecksumSREC(char*lineptr,intN){  unsignedcharcurbyte,sum=0xff;  for(intx=2;x<N-2;x+=2)  {  sscanf(lineptr+x,"%2x",&amp;curbyte);  sum-=curbyte;  }  //lastoneischecksum  sscanf(lineptr+x,"%2x",&amp;curbyte);  return(curbyte==sum);}voidCDSP56kManagerGetSRecordAddressRange(char*s,long"start,long"end,char"*data){  longaddress,count,soffset;  *start=-1L;  *end=-1L;  if(*s!=′S′)//notasrec  return;  //Let′scheckthechecksumforthisline  ASSERT(ChecksumSREC(s,strlen(s)));  switch(s[1])  {  case′1′  soffset=8;  sscanf(&amp;(s(4)),"%4x",&amp;address);  break;  case′2′  soffset=10;  sscanf(&amp;(s[4]),"%6x",&amp;address);  break;  case′3′  soffset=12;  sscanf(&amp;(s[4]),"%8x",&amp;address);  break;  default  return;  break;  }  count=strlen(s)-soffset-2;  *start=address;  "end=address+(count/6);//eachwordis6characters  *data=s+soffset;}voidCDSP56kManagerDownloadDSPCode(){  char**r=pmem;  intcount=PRECORDS;  longstart,end;  longts,te;  char**recs;  char*srecdata,"td;  char*data,"dptr,*rdata,c;  longsize,bsize;  longtaddress,recstart,recend;  longvalue;//getstartingandendingaddressesstart=0x7FFFFFFFL;end=0;recs=r;for(inti=0;i<count;i++){GetSRecordAddressRange(*recs++,&amp;ts,&amp;te,&amp;srecdata);if(ts<0L)continue;start=min(start,ts);end=max(end,te);}size=end-start;bsize=size*3;rdata=(char*)malloc(bsize+6);//3bytesperwordpluslengthandaddressASSERT(data!=NULL);data=rdata+6;dptr=data;for(i=0;i<bsize;i++)//clearmemory*dptr++=0;taddress=start;while(taddress<end){  recstart=0x7FFFFFFFL;  recs=r;  for(inti=0;i<count;i++)//searchfornextaddress  {  GetSRecordAddressRange(*recs,&amp;ts,&amp;te,&amp;td);  if(ts>=0L)  {  if(ts>=taddress)  {  if(ts<recstart)  {  recstart=ts;  recend=te;  srecdata=td;  }  }  }  recs++;}ASSERT(recstart<=end);//copyrecorddptr=data+((recstart-start)*3);while(recstart!=recend){  sscanf(srecdata,"%2x",&amp;value);  *dptr++=(char)value;  srecdata+=2;  sscanf(srecdata,"%2x",&amp;value);  *dptr++=(char)value;  srecdata+=2;  sscanf(srecdata,"%2x",&amp;value);  *dptr++=(char)value;  srecdata+=2;  recstart++;}taddress=recend;}//copysizeandaddressdptr=rdata;c=(size>>16)&amp;0xFF;*dptr++=c;c=(size>>8)&amp;0xFF;*dptr++=c;c=size&amp;0xFF;*dptr++=c;c=(start>>16)&amp;0xFF;*optr++=c;  c=(start>>8)&amp;0xFF;  *dptr++=c;  c=start&amp;0xFF;  *dptr++=c;  //senddatatoDSP  //m_Comm->SendDSPWord(size);  //m_Comm->SendDSPWord(start);  m_Comm->SendDSPMemory(rdata,bsize+6);  free(rdata);}////////////////////////////////////////////////////////////////////////Construction/Destruction//////////////////////////////////////////////////////////////////////CDSP56kManagsr[]CDSP56kManager(HWNDp){#if0  if(load_dll()==false)  {  MessageBox(NULL,"UNIT_PPInotfoundinthesystemdirectory.Fixthisandrectartapplication  WillRobinson",MB_OK|MB_ICONSTOP);}else{  init_port_spi(1);  set_cmd_delay_cnt_value(cmd_delay);  set_io_delay_cnt_value(io_delay);}#endifm_pi-acos(-1.);m_Comm-newI2CIPortCommm(p);//DownloadDSPCode();inti;for(i=0;i<kUIArraySize;i++){  m_Raw2DSFVals(i)=i;}m_Raw2DSPVals[kNotch6Freq]=kDSPNotch6Freq;m_Raw2DSPVal=[kNotch6Q]=kDSPNotch6Q;m_Raw2DSPVal=[kNotch7Cut]=kDSPNotch6Cut;m_Raw2DSPVal=[kNotch7Freq]=kDSPNotch6Freq;m_Raw2DSPVal=[kNotch7Q]=kDSPNotch7Q;m_Raw2DSPVal=[kNotch7Cut]=kDSPNotch7Cut;m_Raw2DSPVal=[kDelay]=kDSPDelay;m_Raw2DSPVal=[kAllpassFreq]=kDSPAllpassFreq;m_Raw2DSPVal=[kAllpassQ]=kDSPAllpassQ;m_Raw2DSPVal=[kNotch8Freq]=kDSPNotch8Freq;m_Raw2DSPVal=[kNotch8Q]=kDSPNotch8Q;m_Raw2DSPVal=[kNotch8Cut]=kDSPNotch8Cut;m_Raw2DSPVal=[kNotch9Freq]=kDSPNotch9Freq;m_Raw2DSPVal=[kNotch9Q]=kDSPNotch9Q;m_Raw2DSPVal=[kNotch9Cut]=kDSPNotch9Cut;m_Raw2DSPVal=[kNotchAFreq]=kDSPNotchAFreq;m_Raw2DSPVal=[kNotchAQ]=kDSPNotchAQ;m_Raw2DSPVal=[kNotchACut]=kDSPNotchACut;ResetAll();CDSP56kManager-CDSP56kManager(){if(m_Comm)  deletem_Comm;}voidCDSP56kManagerSetMainVolume(longvalue){doublefvalue;if(value>=0)  SetRawValue(value,kMainVolume);if(m_RawVals[kMainVolume]==DSP_CONTROL_MAX)  m_DSPVals(kDSPMainVolume]=-m_RawVals(kMainVolume];elseif(m_RawVals(kMainVolume]==0)  m_DSPVals[kDSPMainVolume]=0;else  {  fvalue=m_RawVals[kMainVolume};  fvalue/=DSP_CONROL_MAX;//normalize  fvalue*=VOLRANGE;  fvalue+=VOLBOT;  fvalue=(pow(10.,fvalue)-1.}/(10.-1.);  fvalue*=DSP_CONTROL_MAX;  m_DSPVals[kDSPMainVolume]=(long)-fvalue;  }SendDSPValue(kDSPMainVolume);}voidCDSP56kManagerSendDSPValue(longwhich){longvalue=m_DSPVals[which];#if0//transmittedvaluehasparametervalueintop16bitsandparameteridentifierin8LSBsvalue=(value&amp;0xFFFF00)|(which&amp;0xFF);//m_DSPReturn=spi_xchng24(value);  m_DSPReturn=mComm->SendDSPWord(value);#endif  //changedprotocolaroundtosendindexfollowedbydata  charbuffer[6];  buffer=(which>>16)&amp;0xFF;  buffer[1]=(which>>8)&amp;0xFF;  buffer[2]=which&amp;0xFF;  buffer[3]=(value>>16)&amp;0xFF;  buffer[4]=(value>>8)&amp;0xFF;  buffer[5]=value&amp;0xFF;  m_DSPReturn=m_Comm->SendDSPMemory(buffer,6);}voidCDSP56kManagerSetNotchFreq(longivalue,longwhich){doublevalue;intdspindex=m_Raw2DSPVals[which];  if(ivalue>=0)  SetRawValue(ivalue,which);  value=ConvertFreqRange(which);  value=-cos(m_pi*value);  value*=DSP_CONTROL_MAX;  m_DSPVals(dspindex)=(long)value;SendDSPValue(dspindex);  SetNotchQ(-1L,which+1,which);}#ifdefLEGACYvoidCDSP56kManagerSetShelvFreq(longivalue,longwhich){  doublevalue,wc;  intdspindex=m_Raw2DSPVals[which];  if(ivalue>=0)  SetRawValue(ivalue,which);  value=ConvertFreqRange(which);  wc=m_pi*value;  value=(tan(wc/2)-1)/(tan(wc/2)+1);  value*=DSP_CONTROL_MAX;  m_DSPVals[dspindex]=(long)value;  SendDSPValue(dspindex);}#endifvoidCDSP56kManagerSetNotchQ(longivalue,longwhich,longrawfreq){doublebeta,tbeta,q,wc;intdspindex=m_Raw2DSPVals[which];if(ivalue>=0)SetRawValue(ivalue,wich);wc=ConvertFreqRange(rawfreq);wc=m_pi*wc;q=ConvertQRange(m_RawVals[which]);tbeta=wc/(2*q);if(tbeta>m_pi/4)tbeta=m_pi/4;beta=(1.-tan(tbeta))/(1.+tan(tbeta));beta*=DSP_CONTROL_MAX;m_DSPVals[dspindex]=(long)beta;SendDSPValue(dspindex);}voidCDSP56kManagerSetBoostCut(longivalue,longwhich){doublevalue;intdspindex=m_Raw2DSPVals[which];if(ivalue>=0)SetRawValue(ivalue,which);value=ConvertBoostCutRange(m_RawVals[which]);value=pow(10.,value);value/=GAIN_SCALE;value*=DSP_CONTROL_MAX;m_DSPVals[dspindex]=(long)value;SendDSPValue(dspindex);}voidCDSP56kManagerSetShelv1Freq(longivalue){//SetShelvFreq(value,kLoShelfFreq);doublevalue,wc;if(ivalue>=0)SetRawValue(ivalue,kLoShelfFreq);value=m_RawVals[kLoShelfFreq);value/=DSP_CONTROL_MAX;//normalizevalue*=FLCRANGE;value+=FLCBOTRANGE;value=(pow(10.,value)-1.)/(10.-1.);wc=m_pi*value;value=(tan(wc/2)-1)/(tan(wc/2)+1);value*=DSP_CONTROL_MAX;m_DSPVals[kLoShelfFreq]=(long)value;SendDSPValue(kLoShelfFreq);}voidCDSP56kManagerSetShelv1Boost(longvalue){SetBoostCut(value,kLoShelfGain);}voidCDSP56kManagerSetShelv2Freq(longivalue){//SetShelvFreq(value,kHiShelfFreq);doublevalue,wc;if(ivalue>=0)  SetRaValue(ivalue,kHiShelfFreq);value=m_RawVals[kHiShelfFreq];value/=DSP_CONTROL_MAX;//normalizevalue*=FHCRANGE2;value+=FHCBOTRANGE2;value=(pow(10.,value)-1.)/(10.-1.);wc=m_pi*value;value=(tan(wc/2)-1)/(tan(wc/2)+1);value*=DSP_CONTROL_MAX;m_DSPVals[kHiShelfFreq)=(long)value;SendDSPValue(kHiShelfFreq);}voidCDSP56kManagerSetShelv2Boost(longvalue){SetBoostCut(value,kHiShelfGain);}voidCDSP56kManagerSetNotchlFreq(longvalue){SetNotchFreq(value,kNotch1Freq);}voidCDSP56kManagerSetNotch1Q(longvalue){SetNotchQ(value,kNotch1Q,kNotch1Freq);}voidCDSP56kManagerSetNotch1Cut(longvalue){SetBoostCut(value,kNotch1Cut);}voidCDSP56kManagerSetNotch2Freq(longvalue){SetNotchFreq(value,kNotch2Freq);voidCDSP56kManagerSetNotch2Q(longvalue){SetNotchQ(value,Notch2Q,kNotch2Freq);}voidCDSP56kManagerSetNotch2Cut(longvalue){SetBoostCut(value,kNotch2Cut);}voidCDSP56kManagerSetNotch9Freq(longvalue){doubleq,f,nf;SetNotchFreq(Value,kNotch9Freq);f=ConvertFreqRange(kNotch9Freq);q=ConvertQRange(m_RawVals[kNotch9Q]);nf=f-(f/(5,*q));if(nf<0,)nf=0,;nf=pow(nf,0.5);nf=log10((nf*(10.-1.))+1.);nf-=FBOTRANGE;nf/=(FTOPRANGE-FBOTRANGE);nf*=DSP_CONTROL_MAX;//normalizem_RawVals[kNotch8Freq]=(long)nf;nf=f+(f/(5.*q));if(nf>1.)  nf=1.;nf=pow(nf,0.5);nf=log10((nf*(10.-1.))+1.);nf-=FBOTRANGE;nf/=(FTOPRANGE-FBOTANGE);nf*=DSP_CONTROL_MAX;//normalizem_RawVals(kNotchAFreq]=(long)nf;SetNotchFreq(-1L,kNotch8Freq);SetNotchFreq(-1L,kNotchAFreq);}voidCDSP56kManagerSetNotch3Freq(longvalue){SetNotchFreq(value,kNotch3Freq);m_RawVals[kNotch5Freq]=(m_RawVals[kNotch4Freq]+m_RawVals[kNotch3Freq)/2;SetNotchFreq(-1L,kNotch5Freq);}voidCDSP56kManagerSetNotch3Q(longvalue){SetNotchQ(value,kNotch3Q,kNotch3Freq);}voidCDSP56kManagerSetNotch3Cut(longvalue){SetBoostCut(value,kNotch3Cut);}voidCDSP56kManaqerSetNotch4Freq(longvalue){SetNotchFreq(value,kNotch4Freq);m_RawVals[kNotch5Freq]=(m_RawVals[kNotch4Freq]+m_RawVals[kNotch3Freg])/2;SetNotchFreq(-1L,kNotch5Freq);}voidCDSP56kManagerSetNotth4Q(longvalue){SetNotchQ(value,kNotch4Q,kNotch4Freq);}voidCDSP56kManagerSetNotch4Cut(longvalue){SetBoostCut(value,kNotch4Cut);}voidCDSP56kManagerSetNotchSQ(longvalue){SetNotchQ(value,kNotch5Q,kNotch5Freq);}voidCDSP56kManager[]SotNotch5Booat(longvalue){SetBoostCut(value,kNotch5Cut);}doubleCDSP56kManagerDoConvertFreqRange(doubleval,doublstop,doublebottom){val/=DSP_CONTROL_MAX;//normalizeval*=top-bottom;val+=bottom;val=[pow(10.,val)-1.)/(10.-1.);return(val);}doubleCDSP56kManagerConvertFreqRange(intwhich){doublefval;switch(which)  {  casekNotch1Freq  casekNotch2Freq  fval=DoConvertFreqRange(m_RawVals[which].FTOPRANGE3,FBORANGE3);//topfrequencyis0.1*Nyquist  fval/-SAMPLIG_FREQ/2;  break;  default;  fval=DoConvertFreqRange(m_RawVals[which],FTOPRANGE.FBOTRANGE];  //squarelogscale  fval=fval*fval;  break  }return(fval);}//convertsQrangetologscale#defineQTOPRANGE2.258#defineQBOTRANGE0.037#defineQRANGE(QTOPRANGE-QBOTRANGE)doubleCDSP56kManagerConvertQRange(longival){doubleval;val=ival;val/=DSP_CONTROL_MAX;//normalizeval*=QRANGE;val+=QBOTRANGE;val=(pow(10.,val)-1.)/(10.-1.);return(val);}//convertsinputvaluetologgainvalue//#defineLOG80.9031#defineLOGGAINSCALE(log10(GAIN_SCALE))doubleCDSP56kManagerConvertBoostCutRange(longival){doubleval;val=ival;val/=DSP_CONTROL_MAX;//normalizeval=(2.*val*LOGGAINSCALE)-LOGGAINSCALE;return(val);}voidCDSP56kManagerSetRawValue(longvalue,longwhich){if(value)value+=1;value<<=CONTROL_RANGE_SC;m_RawVals[which]=value;}longCDSP56kManagerGetParamValue(longwhich){longvalue;if(which>=kUIArraySize)value=0x400000L>>CONTROL_RANGE_SC;elsevalue=m_RawVals[which]>>CONTROL_RANGE_SC;value--;if(value<0)  value=0;return(value);}voidCDSP56kManagerSetParamValue(longvalue,longwhich){  switch(which)  {  casekHiCutoff2Freq  SetHiCutoff2Freq(value);  break;  casekHiCutoff2Q  SetHiCutoff2Q(value);  break;  casekHiCutoffFreqSetHiCutoffFreq(value);break;casekHiCutoffQSetHiCutoffQ(value);break;casekLoCutoffFreqSetLoCutoffFreq(value);break;casekLoCutoffQSetLoCutoffQ(value);break;casekBypassSetBypass(value);break;casekDDXCompBypassSetDDXCompBypass(value);break;casekHDCDBypassSetHDCDBypass(value);break;casekHDCDGainScaleQffSetHDCDGainScale(value);break;casekAnalogVolumeSetAnalogVolume(value);break;casekMainVolumeSetMainVolume(value);break;casekPreVolumeSetPreVolume(value);break;casekLoShelfFreqSetShelvlFreq(value);break;casekHiShelfFreqSetShelv2Freq(value);break;casekNotch8CutSetBoostCut(value,which);SetBoostCu(value,kNotchCut);//samevalueforbothnotchesbreak;casekNotch1Cut;casekNotch2CutcasekNotch3CutcasekNotch4CutcasekNotch5CutcasekNotch6CutcasekNotch7CutcasekLoShelfGaincasekHiShelfGain:SetBoostCut(value,which);break;casekNotch9Cutm_DSPVals[kDSPNotch9Cut]=0;//fixednotchSendDSPValue(kDSPNotch9Cut);break;casekNotch3FreqSetNotch3Freq(value);break;casekNotch4FreqSetNotch4Freq(value);break;casekNotch9FreqSetNotch9Freq(value);break;casekNotch1FreqcasekNotch2FreqcasekNotch5FreqcasekNotch6FreqcasekNotch7FreqcasekAllpaseFreqSetNotchFreq(value,which);  break;casekNotch8Q  SetNotchQ(value.which,which-1);  SetNotchQ(value,kNotchAQ,kNotchAQ-1);//samevalueforbothnotches  break;casekNotch9Q  SetNotchQ(value,which,which-1);  SetNotch9Freq(-1);  break;casekNotch1QcasekNotch2QcasekNotch3QcasekNotch4QcasekNotch5QcasekNotch6QcasekNotch7QcasekAllpassQ  SetNotchQ(value,which,which-1);  break;casekDelay  SetDelay(value);  break;//casekDBNotchWidth//SetDelay(value);  break;casekNotch8FreqcasekNotchAFreqcasekNotchACutcasekNotchAQ  break;  }}voidCDSP56kManagerSetDSPSettings(CStringArray&amp;array){inti;CStringstring;intindex;longvalue;intfileversion=0intj=0;doublefvalue;constchar*sptr;//resetallparametersResetAll();//firstcheckforcommentatheadstring=array.GetAt(0);sptr=string;if(strcmp(sptr,"#VERSION")==0){  string=array.GetAt(1);  sptr=string;  sscanf(sptr,"%d",&amp;fileversion);  j=2;  }for(i=j;i<array.GetSize();i++)  {  string=array.GetAt(i);  sptr=string;  if(sptr==′#′)continue;//skipcomments  sscanf(sptr,"%d\t0x%x",&amp;index,&amp;value);  if(index>=kUIArraySize)continue;  //Addanyspecialtreatmentofparametershere  if(fileversion==0L)   {  switch(index){casekNotch1FreqcasekNotch2Freqfvalue=DoConvertFreqRange(value,FTOPRANGE,FBOTRANGE);fvalue=fvalue*fvalue;fvalue*=SAMPLING_FREQ/2;fvalue=log10((fvalue*(10.-1.))+1.);fvalue-=FBOTRANGE3;fvalue/=(FTOPRANGE3-FBOTRANGE3);if(fvalue>1.0)  fvalue=1.0;fvalue*=DSP_CONTROL_MAX;//normalizevalue=(long)fvalue;break;//increasedlowfrcquencycasekHiShelfFreqfvalue=DoConvertFreqRange(value,FHCTOPRANGE,FHCBOTRANGE);fvalue=log10((fvalue*(10.-1.))+1.);fvalue-=FHCBOTRANGE2;fvalue/=(FHCTOPRANGE-FHCBOTRANGE2);if(fvalue>1.0)  fvalue=1.0;fvalue*=DSP_CONTROL_MAX//normalizevalue=(long)fvalue;break;casekHiCutoffFreqfvalue=DoConvertFreqRange(value,FHCTOPRANGE,FHCBOTRANGE);fvalue*=SAMPLING_FREQ/2;fvalue=log10((fvalue*(10.-1.))+1.);fvalue-=FHCBOTRANGE3;fvalue/=(FHCTOPRANGE3-FHCBOTRANGE3);if(fvalue>1.0)  fvalue=1.0;fvalue*=DSP_CONTROL_MAX;//normalizevalue=(long)fvalue;break;}}elseif(fileversion==1L){switch(index){casekNotch1FreqcasekNotch2Freq  fvalue=DoConvertFreqRange(value,FTOPRANGE2,FBOTRANGE2);  fvalue*=SAMPLING_FREQ/2;  fvalue=log10((fvalue*(10.-1.))+1.);  fvalue-=FBOTRANGE3;  fvalue/=(FTOPRANGE3-FBOTRANGE3);  if(fvalue>1.0)  fvalue=1.0;  fvalue*=DSP_CONTROL_MAX;//normalize  value=(long)fvalue;  break;casekLoCutoffFreq  fvalue=DoConvertFreqRange(value,FLCTOPRANGE,FLCBOTRANGE);  fvalue*=SAMPLING_FREQ/2;  fvalue=log10((fvalue*(10.-1.))+1.);  fvalue-=FLCBOTRANGE2;  fvalue/=(FLCTOPRANGE2-FLCBOTRANGE2);  if(fvalue>1.0)  fvalue=1.0;  fvalue*=DSP_CONTROL_MAX;//normalize  value=(long)fvalue;  break;casekHiCutoff2Freq  fvalue=DoConvertFreqRange(value,FTOPRANGE,FBOTRANGE);  fvalue*=SAMPLING_FREQ/2;  fvalue=log10((fvalue*(10.-1.))+1.);  fvalue*=FHC2BOT;  fvalue/=(FHC2TOP-FHC2BOT);  if(fvalue>1.0)fvalue=1.0;  fvalue*=DSP_CONTROL_MAX;//normalize  value=(long)fvalue;  break;  casekHiCutoffFreq  fvalue=DoConvertFreqRange(value,FHCTOPRANGE,FHCBOTRANGE2);  fvalue*=SAMPLING_FREQ/2;  fvalue=log10((fvalue*(10.-1.))+1.);  fvalue-=FHCBOTRANGE3;  fvalue/=(FHCTOPRANGE3-FHCBOTRANGE3)  if(fvalue>1.0)  fvalue=1.0;  fvalue*=DSP_CONTROL_MAX;//normalize  value=(long)fvalue;  break;  }}m_RawVals(index)=value}//tellDSPofchangesfor(i=0;i<kUIArraySize;i++){SetParamValue(-1,i);;}m_DSPVals[kDSPBypassMakl=m_RawVals[kBypassMask];SendDSPValue(DSPBypassMask);}voidCDSP56kManagerGetDSPSettings(CStringArray&amp;array){chars{1000};inti,index;intj=0;CStringcstr;//writeheader(sofaronlyversionnumber)cstr="#VERSION";array.SetAtGrow(j++,cstr);sprintf(s,"%d",FILE_VERSION);array.SetAtGrow(j++,s);cstr="#DATA";array.SetAtGrow(j++,cstr);for(i=0;i<kUIArraySize;i++)  {  index=kUIArraySize-1-i;  if(index==kBypass)continue;  if(index==kHDCDBypass)continue;  if(index==kHDCDGainScaleOff)continue;  if(index==kAnalogIn)continue;  //MM7/14/99Addedvalueinhumanreadableformascomment  GetStringValue(index,cstr);  sprintf(s,"#%s%s",m_ParamNames[index],cstr);  array.SetAtGrow(j++,s);  sprintf(s,"%d\t0x%x",index,m_RawVals[index));  array.SetAtGrow(j++,s);  }}voidCDSP56kManaqerGetFilterBlob(CStringArray&amp;array){chars;intparam;intj=0;CStringcstr;floatv;//writeversionnumber//cstr="#VERSION";//array.SetAtGrow(j++.cstr);sprintf(s,"%d".BLOB_FILE_VERSION);array.SetAtGrow(j++,s);//outputdelayparam=kDelay;GetPureStringValue(param,cstr);sscanf(cstr,"%f",&amp;v);if(v!=0.){//cstr=m_ParamNames(param);//array.SetAtGrow(j++,cstr);  sprintf(s,"%d",BLOCK_DELAY);  array.SetAtGrow(j++,s);  cstr="1";  array.SetAtGrow(j++.cstr);  GetPureStringValue(param.cstr);  array.SettGrow(j++,cstr);}//outputpre-gainparam=kPreVolume;//cstr=m_ParamNames[param];//array.SetAtGrow(j++,cstr);sprintf(s,"%d",BLOCK_GAIN);array.SetAtGrow(j++,s);cstr="1";array.SetAtGrow(j++,cstr);GetPureStringValueparam,cstr);array.SetAtGrow(j++,cstr);//lo-shelfif(!GetBypassSection(kBypassLoshelf)){//cstr="Low-Shelf";//array.SetAtGrow(j++,cstr);  sprintf(s,"%d",BLOCK_LS);  array.SetAtGrow(j++,s);  cstr="2";  array.SetAtGrow(j++,cstr);  GetPureStringValue(kLoShelfFreq,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kLoShelfGain,cstr);  array.SetAtGrow(j++,cstr);}//hi-shelfif(!GetBypassSection(BypassHiShelf)){//cstr="High-Shelf*;//array.SetAtGrow(j++,cstr);  sprintf(s,"%d",BLOCK_HS);  array.SetAtGrow(j++,s);  cstr="2";  array.SetAtGrow(j++,cstr);  GetPureStringValue(kHiShelfFreq,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kHiShelfGain,cstr);  array.SetAtGrow(j++,cstr);}//lowpeakingcutoffif(!GetBypassSection(kBypassHipae)){//cstr="LowCutoff";//array.SetAtGrow(j++,cstr);  sprintf(s,"%d",BLOCK_HP);  array.SetAtGrow(j++,s);  cstr="2"  array.SetAtGrow(j++,cstr);  GetPureStringValue(kLoCutoffFrcq,cstr);array.SetAtGrow(j++,cstr);  GetPureStringValue(kLoCutoffQ,cstr);  array.SetAtGrow(j++,cstr);}//highpcakingcutoff#1if(!GetBypassSection(kBypassLopass)){//cstr="HighCutoff";//array.SetAtGrow(j++,cstr);  sprintf(s,"%d",BLOCK_LP);  array.SetAtGrow(j++,s);  cstr="2";  array.SetAtGrow(j++,cstr);  GetPureStringValue(kHiCutoffFreq,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kHiCutoffQ,cstr);  array.SetAtGrow(j++,cstr);}//highpeakingcutoff#2if(!GetBypassSection(kBypassNLopass)){//cstr="HighCutoff#2";//array.SetAtGrow(j++,cstr);  sprintf(s,"%d",BLOCK_LP2);  array.SetAtGrow(j++,s);  cstr="2";  array.SetAtGrow(j++,cstr);  GetPureStringValue(kHiCutoff2Freq,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kHiCutoff2Q,cstr);  array.SetAtGrow(j++,cstr);}//resonancecomp#1if(!GetBypassSection(kBypassNotch1)){//cstr="ParametricEQ";//array.SetAtGrow(j++,cstr);  sprintf(s,"%d",BLOCK_PEQ);  array.SetAtGrow(j++,s);  cstr="3";  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch1Freq,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch1Q,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch1Cut,cstr);  array.SetAtGrow(j++,cstr);}//resonancecomp#2if(!GetBypassSection(kBypassNotch2)){//cstr="ParametricEQ";//array.SetAtGrow(j++,cstr);  sprintf(s,"%d",BLOCK_PEQ);  array.SetAtGrow(j++,s);  cstr="3";  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch2Freq,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch2Q,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch2Cut,cstr);  array.SetAtGrow(j++,cstr);}//resonancecomp#3if(!GetBypassSection(kBypassNotch3)){//cstr="ParametricEQ";//array.SetAtGrow(j++,cstr);  sprintf(s,"%d",BLOCK_PEQ);  array.SetAtGrow(j++,s);  cstr="3";  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch6Freq,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch6Q,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch6Cut,cstr);  array.SetAtGrow(j++,cstr);}//resonancecomp#4if(!GetBypassSection(kBypassNotch4)){//cstr="ParametricEQ";//array.SetAtGrow(j++,cstr);  sprintf(s,"%d",BLOCK_PEQ);  array.SetAtGrow(j++,s);  cstr="3";  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch7Freq,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch7Q,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch7Cut,cstr);  array.SetAtGrow(j++,cstr);}//conecryif(!GetBypassSection(kBypassConecry)){//cstr="ParametricEQ";//array.SetAtGrow(j++,cstr);  sprintf(s,"%d",BLOC_PEQ);  array.SetAtGrow(j++,s);  cstr="3";  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch3Freq,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch3Q,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch3Cut,cstr);  array.SetAtGrow(j++,cstr);//cstr="ParametricEQ";//array.SetAtGrow(j++,cstr);  printf(s,"%d",BLOCK_PEQ);  array.SettGrow(j++,s);  cstr="3";  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch4Freq,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch4Q,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch4Cut,cstr);  array.SetAtGrow(j++,cstr);//cstr="ParametricEQ";//array.SetAtGrow(j++,cstr);  sprintf(s,"%d",BLOCK_PEQ);  array.SetAtGrow(j++,s);  cstr="3";  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch5Freq,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch5Q,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch5Cut,cstr);  array.SetAtGrow(j++,cstr);}//allpassif(!GetBypassSection(kBypassAllpass)){//cstr="ParametricEQ";//array.SetAtGrow(j++,cstr);  sprintf(s,"%d",BLOCK_AP);  array.SetAtGrow(j++,s);  cstr="2";  array.SetAtGrow(j++,cstr);  GetPureStringValue(AllpassFreq.cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kAllpassQ,cstr);  array.SetAtGrow(j++,cstr);}//double-tunednotchif(!GetBypassSection(BypassDBNotch)){//cstr="ParametricEQ";//array.SetAtGrow(j++,cstr);  sprintf(s,"%d",BLOCK_PEQ);  array.SetAtGrow(j++,s);  cstr="3";  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch8Freq,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch8Q,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch8Cut,cstr);  array.SetAtGrow(j++,cstr);//cstr="ParametricEQ";//array.SetAtGrow(j++,cstr);  sprintf(s,"%d",BLOCK_PEQ);  array.SetAtGrow(j++,s);  cstr="3";  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch9Freq,cstr);  array.SettGrow(j++,cstr);  GetPureStringValue(kNotch9Q,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotch9Cut,cstr);  array.SetAtGrow(j++,cstr);//cstr="ParametricEQ";//array.SetGrow(j++,cstr);  sprintf(s,"%d",BLOCK_PEQ);  array.SetAtGrow(j++,s);  cstr="3";  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotchAFreq,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotchAQ,cstr);  array.SetAtGrow(j++,cstr);  GetPureStringValue(kNotchACut,cstr);  array.SetAtGrow(j++,cstr);}//outputpost-gainparam=kMainVolume;//cstr=m_ParamNames[param];//array.SetAtGrow(j++,cstr);  sprintf(s,"%d",BLOCK_GAIN);  array.SetAtGrow(j++,s);  cstr="1";  array.SetAtGrow(j++,cstr);  GetPureStringValue(param,cstr);  array.SetAtGrow(j++,cstr);}voidCDSP56kManagerSetPreVolume(longvalue){  doublefvalue;  if(value>=0)  SetRawValue(value,kPreVolume);  if(m_RawVals[kPreVolume]==DSP_CONTROL_MAX)  m_DSPVals[kDSPPreVolume]=-m_RawVals[kPreVolume];  elseif(m_RawVals[kPreVolume]==0)  m_DSPVals[kDSPPreVolume]=0;  else  {  fvalue=m_RawVals[kPreVolume];  fvalue/=DSP_CONTROL_MAX;//normalize  fvalue*=VOLRANGE;  fvalue+=VOLBOT;  fvalue=(pow(10.,fvalue)-1.)/(10.-1.);  fvalue*=DSP_CONTROL_MAX;  m_DSPVals[kDSPPIeVolume]=(long)-fvalue;  }SendDSPValue(kDSPPreVolume);}voidCDSP56kManagerSetAnalogVolume(longvalue){  doublefvalue;  if(value>=0)  SetRawValue(value,kAnalogVolume);  if(m_RawVals[kAnalogVolume]==DSP_CONTROL_MAX)  m_DSPVals[kDSPAnalogVol)=-m_RawVals[kAnalogVolume];  elseif(m_RawVals[kAnalogVolume]==0)  m_DSPVals[kDSPAnalogVol]=0;  else  {  fvalue=m_RawVals[kAnalogVolume];  fvalue/=DSP_CONTROL_MAX;//normalize  fvalue*=VOLRANGE;  fvalue+=VOLBOT;  fvalue=(pow(10.,fvalue)-1.)/(10.-1.);  fvalue*=DSP_CONTROL_MAX;  m_DSPVals[kDSPAnalogVol]=(long)-fvalue;  }  SendDSPValue(kDSPAnalogVol);}voidCDSP56kManagerSetBypass(longvalue){if(value>=0)  SetRawValue(value,kBypass);if(m_RawVals[kBypass])  m_DSPVals[kDSPBypass]=0x7FFFFF;else  m_DSPVals[kDSPBypass)=0;SendDSPValue(kDSPBypass);}voidCDSP56kManagerSetLoCutoffFreq(longvalue){if(value>=0)SetRawValue(value,kLoCutoffFreq);SetLoCutoff()}voidCDSP56kManagerSetLoCutoffQ(longvalue){if(value>=0)  SetRawValue(value,kLoCutoffQ);SetLoCutoff();}voidCDSP56kManagerSetHiCutoffFreq(longvalue){if(value>=0)  SetRawValue(value,kHiCutoffFreq);SetHiCutoff();}voidCDSP56kManagerSetHiCutoffQ(longvalue){if(value>=0)  SetRawValue(value,kHiCutoffQ);SetHiCutoff();}voidCDSP56kManagerSetHiCutoff2Freq(longvalue){if(value>=0)  SetRawValue(value,kHiCutoff2Freq);SetHiCutoff2();}voidCDSP56kManagerSetHiCutoff2Q(longvalue){if(value>=0)  SetRawValue(value,kHiCutoff2Q);SetHiCutoff2();}voidCDSP56kManagerSetHiCutoff(){doublef,q;doublea1,a2,b0;q=m_RawVals[kHiCutoffQ];q/=DSP_CONTROL_MAX;//normalizeq*=QLCRANGE;q+=QLCBOTRANGE;q=(pow(10..q)-1.)/(10.-1.);if(q>=1.)  q=0.99999;/*f=m_RawVals[kHiCutoffFreq];f/=DSP_CONTROL_MAX;//normalizef*=FHCRANGE2;f+=FHCBOTRANGE2;f=(pow[10..f)-1.)/(10.-1.);*/f=DoConvertFreqRange(m_RawVals[kHiCutoffFreq],FHCTOPRANGE3,FHCBOTRANGE3);f/=SAMPLING_FREQ/2;f=2.*sin(f*m_pi/2.);a2=1.-f*q;if(a2>=2.)  a2=1.99999;elseif(a2<=-2.)  a2=-1.99999;a1=-(2.-f*q-f*f);if(a1>=2.)  a1=1.99999;elseif(al<=-2.)  a1=-1.99999;b0=f*f/2.;if(b0>=8.)  b0=7.99999;elseif(b0<=-8.)  b0=-7.99999;m_DSPVals[kDSPHiCutoffA2]=(long)(a2*DSP_CONTROL_MAX/2.);SendDSPValue(kDSPHiCutoffA2);m_DSPVals[kDSPHiCutoffA1]=(long)(a1*DSP_CONTROL_MAX/2.);SendDSPValue(kDSPHiCutoffA1);m_DSPVals[kDSPHiCutoffScale]=(long)(b0*DSP_CONTROL_MAX/16.);SendDSPValue(kDSPHiCutoffScale);}voidCDSP56kManagerSetHiCutoff2(){doublef,q;doublea1,a2,b0;doublegamma,beta,lambda,alpha;q=DSP_CONTROL_MAX-m_RawVals[kHiCutoff2Q];//invertscaleq/=DSP_CONTROL_MAX//normalizeq*=(QHC2TOP-QHC2BOT);q+=QHC2BOT;q=(pow(10.,q)-1.)/(10.-1.);//f=ConvertFreqRange(kHiCutoff2Freq);f=DoConvertFreqRange(m_RawVals[kHiCutoff2Freq],FHC2TOP,FHC2BOT);f/=SAMPLING_FREQ/2;gamma=-cos(f*m_pi);beta=(1.-sin(f*m_pi/(2*q)))/(1.+sin(f*m_pi/(2*q)));if(beta>2.0)  beta=2.0;lambda=4.*beta*(gamma/(1.+beta));if(lambda>2.0)  lambda=2.0;alpha=1.+beta+lambda;a2=beta;a1=lambda;b0=alpha/4.;if(b0>=8.)  b0=7.99999;elseif(b0<=-8.)  b0=-7.99999;m_DSPVals(kDSP2HiCutoffA2]=(long)(a2*DSP_CONTROL_MAX/2.);SendDSPValue(kDSP2HiCutoffA2);m_DSPVals[kDSP2HiCutoffA1]=(long)(a1*DSP_CONTROL_MAX/2.);SendDSPValue(kDSP2HiCutoffA1);m_DSPVals(kDSP2HiCutoffScale)=(long)(b0*DSP_CONTROL_MAX/16.);SendDSPValue(kDSP2HiCutoffScale);}voidCDSP56ManagerSetLoCutoff(){doublef.q,scale_factor;q=m_RawVals(kLoCutoffQ];q/=DSP_CONTROL_MAX;//nomalizeq*=QLCRANGE;q*=QLCBOTRANGE;q=(pow(10.,q)-1.)/(10.-1.);if(q>=1.)  q=0.99999;f=m_RawVals[kLoCutoffFreq);f/*DSP_CONTROL_MAX;//normalizef*=(FLCTOPRANGE2-FLCBOTRANGE2);f+=FLCBOTRANGE2;f=(pow)10.,f)-1.)/(10.-1.);f/=SAMPLING_FREQ/2;f=2.*sin(f*m_pi/2.);if(f>=1.)  f=0.99999;scale_factor=(4.-2.*f*q-f*f)/4.;m_DSPVals[kDSPLoCutoffFc]=(long)(f*DSP_ONTROL_MAX);SendDSPValue(kDSPLoCutoffFc);m_DSPVals[kDSPLCutoffQc]=(long)(q*DSP_CONTROL_MAX);SendDSPValue(kDSPLoCutoffQc);m_DSPVals[kDSPLoCutoffffScale]=(long)(-0.5*scale_factor*DSP_CONTOROL_MAX);SendDSPValue(kDSPLoCutoffScale);}voidCDSP56kManagerSetDDXCompBypass(longvalue){if(value>=0)  SetRawValue(value,kDDXCompBypass);if(m_RawVals[kDDXCompBypass])  m_DSPVals[kDSPDDXCompBypass]=0x7FFFFF;else  m_DSPVals[kDSPDDXCompBypass]=0;SendDSPValue[kDSPDDXCompBypass];}voidCDSP56kManagerSetHDCDBypass(longvalue){if(value>=0)  SetRawValue(value,kHDCDBypass);if(m_RawVals[kHDCDBypass])  m_DSPVals[kDSPHDCDBypass]=0x7FFFFF;else  m_DSPVals[kDSPHDCDBypass]=0;SendDSPValue[kDSPHDCDBypass);}voidCDSP56kManagerSetHDCDGainScale(longvalue){if(value>=0)  SetRawValue(value,kHDCDGainScaleOff);if(m_RawVals[kHDCDGainScaleOff])  m_DSPVals[kDSPHDCDGainScaleOff]=0x7FFFFF;else  m_DSPVals[kDSPHDCDGainScaleOff]=0;SendDSPValue(kDSPHDCDGainScaleOff);}voidCDSP56kManagerResetAll(){inti;  for(i=0;i<kUIArraySizei++)  {  m_RawVals[i]=0x400000L;  }  for(i=0;i<kDSPArraySize;i++)  {  m_DSPVals[i]=0;  }  m_RawVals[kAnalogVolume]=0x800000L;  m_RawVals[kMainVolume]=0x800000L;  m_RawVals[kPreVolume]=0x800000L;  m_RawVals[kBypass]=0x000000L;  m_RawVals[kHDCDBypass]=0x000000L;  m_RawVals[kDDXComPBypass]=0x000000L;  m_RawVals[kHDCDGainScaleOff]=0x000000L;  m_RawVals[kAnalogIn]=0x000000L;  m_RawVals(kDelay]=0x000000L;  m_RawVals[kHiCutoff2Freq]=0x600000L;  m_RawVals[kHiCutoff2Q]=0x200000L;  m_RawVals[kHiCutoffFreq]=0x600000L;  m_RawVals[kHiCutoffQ]=0x200000L;  m_RawVals[kLoCutoffFreq]=0x40000L;  m_RawVals[kLoCutoffQ]=0x200000L;  m_DSPReturn=0;  for(i=0;i<kUIArraySize;i++)  {  SetParamValue(-1,i);  }  m_DSPVals[kDSPBypassMask]=m_RawVals(kBypasMask]=0L;  SendDSPValue(kDSPBypassMask);}voidCDSP56kManagerSetNotch6Freq(longvalue){SetNotchFreq(value,kNotch6Freq);}voidCDSP56kManagerSetNotch6Q(longvalue){SetNotchQ(value,kNotch6Q,kNotch6Freq);}voidCDSP56kManagerSetNotch6Cut(longvalue){SetBoostCut(value,kNotch6Cut);}voidCDSP56kManagerSetNotch7Freq(longvalue){SetNotchFreq(value,kNotch7Freq);}voidCDSP56kManager;SetNotch7Q(longvalue){SetNotchQ(value,kNotch7Q,kNotch7Freq)}voidCDSP56kManagerSetNotch7Cut(longvalue){SetBoostCut(value,kNotch7Cut);}intCDSP56kManagerGetHDCDMode(){//SetParumValue(-1,kMainVolume);//return(m_DSPReturn);return(m_Comm->GetDetectState());}voidCDSP56kManagerSetAnalogInput(longvalue){if(value>=0)  SetRawValue(value,kAnalogIn);if(m_Rawvals[knalogIn])  m_DSPVals[kDSPAnalogIn]=0x7FFFFF;  else  m_DSPVals[kDSPAnalogIn]=0;  SendDSPValue(kDSPAnalogIn);}BOOLCDSP56kManagerIsReady(){return(m_Comm->CheckState());}voidCDSP56kManagerGetPureStringValue(intwhich,CString&amp;str){  intcount;  GetStringValue(which,str);  str,TrimLeft();  count=str.Find(′′);  if(count>=0)  str=str.Left(count);}voidCDSP56kManagerGetStringValue(intwhich,CString&amp;str){  doublevalue;  chars[100];  switch(which)  {  casekAnalogVolume  casekMainVolume  casekPreVolume  value=m_RawVals[which];  value/=DSP_CONTROL_MAX;  value=20*log10(value);  sprintf(s,"%10.2fdB",value);  str=s;  break;casekHiCutoffFreq  /*value=m_RawVls[which];  value/=DSP_CONTROL_MAX;//normalize  value*=FHCRANGE2;value+=FHCBOTRANGE2;value=(pow(10.,value)-1.)/(10.-1.);value*=SAMPLING_FREQ/2;*/value=DoConvertFreqRange(m_RawVals(kHiCutoffFreq),FHCTOPRANGE3,FHCBOTRANGE3);sprintf(s,"%10.2fHz",value);str=s;break;casekHiCutoff2Qvalue=DSP_CONTROL_MAX-m_RawVals[kHiCutoff2Q);value/=DSP_CONTROL_MAX;//normalizevalue*=QHC2TOP-QHC2BOT;value+=QHC2BOT;value=(pow(10.,value)-1.)/(10.-1.);sprintf(s,"%10.2f",value);str=s;break;casekHiCutoffQ  value=m_RawVals[kHiCutoffQ];  value/=DSP_CONTROL_MAX;//normalize  value*=QLCRANGE;  value+=QLCBOTRANGE;  value=(pow(10.,value)-1.)/(10.-1.);  if(value>=1.)  value=0.99999;  sprintf(s,"%10.2f",value);  str=s;  break;casekLoCutoffFreq  value=mRawVals[kLoCutoffFreq];  value/=DSP_CONTROL_MAX;//normalize  value*=(FLCTOPRANGE2-FLCBOTRANGE2);  value+=FLCBOTRANGE2;  value=(pow(10.,value)-1.)/(10.-1.);  sprintf(s,"%10.2fHz",value);  str=s;  break;casekLoCutoffQ  value=m_RawVals[kLoCutoffQ];  value/=DSP_CONTROL_MAX;//normalize  value+=QLCRANGE;  value+=QLCBOTRANGE;  value=(pow(10.,value)-1.)/(10.-1.);  if(value>=1.)  value=0.99999;  sprintf(s,"%10.2f",value);  str=s;  break;casekLoShelfFreq  value=m_RawVals[kLoShelfFreq];  value/=DSP_CONTROL_MAX;//normalize  value*=FLCRANGE;  value+=FLCBOTRANGE;  value=(pow(10.,value)-1.)/(10.-1.);  value*=SAMPLING_FREQ/2;  sprintf(s,"%10.2fHz",value);  str=s;  break;casekHiShelfFreq  value=m_RawVals[kHiShelfFreq];  value/=DSP_CONTROL_MAX;//normalize  value*=FHCRANGE2;  value+=FHCBOTRANGE2;  value=(pow(10.,value)-1.)/(10.-1.)  value*=SAMPLING_FREQ/2;  sprintf(s."%10.2fHz",value);  str=s;  break;casekNotch1CutcasekNotch2CutcasekNotch3CutcasekNotch4CutcasekNotch5CutcasekNotch6CutcasekNotch7CutcasekNotch8CutcasekNotch9CutcasekNotchACutcasekLoShelfGaincasekHiShelfGainvalue=20*ConvertBoostCutRange(m_RawVals[which]);  sprintf(s,"%10.2fdB",value);  str=s;  break;casekNotch1FreqcasekNotch2FreqcasekNotch3FreqcasekNotch4FreqcasekNotch5FreqcasekNotch6FreqcasekNotch7FreqcasekNotch8FreqcasekNotch9FreqcasekNotchAFreqcasekAllpassFreqvalue=ConvertFreqRange(which);value*=SAMPLING_FREQ/2;sprintf(s,"%10.2fHz",value);str=s;break;casekHiCutoff2Freqvalue=DoConvertFreqRange(m_RawVals[kHiCutoff2Freq),FHC2TOP,FHC2BOT);sprintf(s,"%10.2fHz".value);str=s;break;casekNotch1QcasekNotch2QcasekNotch3QcasekNotch4QcasekNotchSQcasekNotch6QcasekNotch7QcasekNotch8QcasekNotch9QcasekNotchAQcasekAllpassQvalue=ConvertQRange(m_RawVals[which]);sprintf(s,"%10.2f",value);str=sbreakcasekDelayvalue=m_RawVals[which];value/=DSP_CONTROL_MAX;value*=DELAY_LENGTH;value/=SAMPLING_FREQ;  value*=1000.;  sprintf(s,"%10.2fmS",value);  str=s  break;default  str="fixed";  break;}}BOOLCDSP56kManagerIsBusy(){  return(m_Comm->IsTransmitting());}voidCDSP56kManagerSetBypassSection(BOOLvalue,intwhich){longmask=1L<<which;if(value)  {  m_RawVals[kBypassMask]|=mask;  }else  {  mask=-mask;  m_RawVals[kBypassMask]&amp;=mask;  }m_DSPVals[kDSPBypassMask]=m_RawVals[kBypassMask];SendDSPValue(kDSPBypassMask);}BOOLCDSP56kManagerGetBypassSection(intwhich){longmask=1L<<which;return((m_RawVals[kBypassMask]&amp;mask)!=0);}voidCDSP56kManagerSetDelay(longvalue){if{value>=0)  SetRawValue(value,kDelay);  m_DSPVals[kDSPDelay]=m_Rawvals[kDelay];  SendDSPValue(kDSPDelay);}//UIIDsenum{  kMainVolume,  kLoShelfFreq,  kLoShelfGain,  kHiShelfFreq,  kHiShelfGain,  kNotch1Freq,  kNotch1Q,  kNotch1Cut,  kNotch2Freq,  kNotch2Q,  kNotch2Cut,  kNotch3Freq,  kNotch3Q,  kNotch3Cut,  kNotch4Freq,  kNotch4Q,  kNotch4Cut,  kNotch5Freq,  kNotch5Q,  kNotch5Cut,  kPreVolume,  kBypass,  kLoCutoffFreq,  kLoCutoffQ,  kHiCutoffFreq,  kHiCutoffQ,  kHDCDBypass,  kHDCDGainScaleOff,  kDDXCompBypass,  kNotch6Freq,  kNotch6Q,  kNotch6Cut,  kNotch7Freq,  kNotch7Q,  kNotch7Cut,  kAnalogIn,  kAnalogVolume,  kDelay,  kAllpassFreq,  kAllpassQ,  kBypassMask,  kHiCutoff2Freq,  kHiCutoff2Q,  kNotch8Freq,  kNotch8Q,  kNotch8Cut,  kNotch9Freq,  kNotch9Q,  kNotch9Cut,  kNotchAFreq,  kNotchAQ,  kNotchACut,  kDBNotchWidth};#definekUIArraySize(kDBNotchWidth+1)//orphanedcontrolIDs/*#definekNotch6Freq(10000+20)#definekNotch6Q(10000+21)#definekNotch6Boost(10000+22)#definekNotch7Freq(10000+23)#definekNotch7Q(10000+24)#definekNotch7Boost(10000+25)#definekLoShelf2Freq(10000+26)#definekLoShelf2Boost(10000+27)#definekHiShelf2Freq(10000+28)#definekHiShelf2Boost(10000+29)*///DSPIDsenum{  kDSPMainVolume,  kDSPLoShelfFreq,  kDSPLoShelfGain,  kDSPHiShelfFreq,  kDSPHiShelfGain,  kDSPNotch1Freq,  kDSPNotch1Q,  kDSPNotch1Cut,  kDSPNotch2Freq,  kDSPNotch2Q,  kDSPNotch2Cut,  kDSPNotch3Freq,  kDSPNotch3Q,  kDSPNotch3Cut,  kDSPNotch4Freq,  kDSPNotch4Q,  kDSPNotch4Cut,  kDSPNotch5Freq,  DSPNotch5Q,  kDSPNotch5Cut,  kDSPPreVolume,  kDSPBypass,  kDSPLoCutoffScale,  kDSPLoCutoffFc,  kDSPLoCutoffQc,  kDSPHiCutoffScale,  kDSPHiCutoffA2,  kDSPHiCutoffA1,  kDSPHDCDBypass,  kDSPHDCDGainScaleOff,  kDSPDDXCompBypass,  kDSPNotch6Freq,  kDSPNotcb6Q,  kDSPNotch6Cut,  kDSPNotch7Freq,  kDSPNotch7Q,  kDSPNotch7Cut,  kDSPAnalogIn,  kDSPAnalogVol,  kDSPBypassMask,  kDPDelay,  kDSPAllpassFreq,  kDSPAllpassQ,  kDSP2HiCutoffScale  kDSP2HiCutoffA2,  kDSP2HiCutoffA1,  kDSPNotch8Freq,  kDSPNotch8Q,  kDSPNotch8Cut,  kDSPNotch9Freq,  kDSPNotch9Q,  kDSPNotch9Cut,  kDSPNotchAFreq,  kDSPNotchAQ,  kDSPNotchACut};#definekDSPArraySize(kDSPNotchACut+1)//bitdefinitionsforkDSPBypassMaskaboveenum{  kBypassNotch1,  kBypassNotch2,  kBypassNotch3,  kBypassNotch4,  kBypassHipass,  kBypassLpass,  kBypassLoshelf,kBypassHiShelf,  kBypassConecry,  kBypassAllpass,  kBypassDBNotch,  kBypassNLopass};#if!defined(AFX_DBNOTCH_H__241CC3C5_14D9_11D3_96EE_006097CDB9E2__INCLUDED_)#defineAFX_DBNOTCH_H__241CC3C5_14D9_11D3_96EE_006097CDB9E2__INCLUDED_#if_MSC_VER>=1000#pragmaonce#endif//_MSC_VER>=1000//DBNotch.hheaderfile//classCTabDialog;///////////////////////////////////////////////////////////////////////////////CDBNotchdialogclassCDBNotchpublicCPropertyPage{  DECLARE_DYNCREATE(CDBNotch)//Constructionpublic  CDBNotch();  -CDBNotch();//DialogData  //{{AFX_DATA(CDBNotch)  enum{IDD=IDD_PP11};  CButtonm_Bypass;  CSliderCtrlm_CompGainSlider;  CSliderCtrlm_CompQSlider;  CSliderCtrlm_QSlider;  CSliderCtrlm_FreqSlider;  //}}AFX_DATA//Overrides  //ClassWizardgeneratevirtualfunctionoverrides  //{{AFX_VIRTUAL(CDBNotch).  Protected  virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport  //}}AFX_VIRTUAL//Implementationprotected  //Generatedmessagemapfunctions  //{{AFX_MSG(CDBNotch)  afx_msgvoidOnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar);  afx_msgvoidOnPaint();  virtualBOOLOnInitDialog();  afx_msgvoidOnBypass();  //}}AFX_MSG  DECLARE_MESSAGE_MAP()  CTabDialog*m_ParentWindow;  voidSendStringToUI(intwhich);};//{{AFX_INSERT_LOCATION}}//MicrosoftDeveloperStudiowillinsertadditionaldeClarationsimmediatelybeforethepreviousline.#endif//!defined(AFX_DBNOTCH_H__241CC3C5_14D9_11D3_96EE_006097CDB9E2__INCLUDED_)//DBNotch.cppimplementationfile//#include"stdafx.h"#include"sa.h"#include"DBNotch.h"#include"TabDialog.h"#include"DSP56kManager.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CDBNotchpropertypageIMPLEMENT_DYNCREATE(CDBNotch,CPropertyPage)CDBNotchCDBNotch()CPropertyPage(CDBNotch;IDD){//{{AFX_DATA_INIT(CDBNotch)  //NOTEtheClassWizardwilladdmemberinitializationhere//}}AFX_DATA_INIT}CDBNotch-CDBNotch(){}voidCDBNotchDoDataExchange(CDataExchange*pDX){  CPropertyPageDoDataExchange(pDX);  //{{AAX_DATA_MAP(CDBNotch)  DDX_Control(pDX,IDC_CHECK5,m_Bypass);  DDX_Control(pDX,IDC_SLIDER6,m_CompGainSlider);  DDX_Control(pDX,IDC_SLIDER5,m_CompQSlider);  DDX_Control(pDX,IDC_SLIDER2,m_QSlider);  DDX_Control(pDX,IDC_SLIDER1,m_FreqSlider);  //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CDBNotch,CPropertyPage)//{{AFX_MSG_MAP(CDBNotch)ON_WM_VSCROLL()ON_WM_PAINT()ON_BN_CLICKED(IDC_CHECKS,OnBypass)//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CDBNotchmessagehandlersvoidCDBNotchOnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar){//TODOAddyourmessagehandlercodehereand/orcalldefaultCSliderCtrl*slider=(CSliderCtrl*)pScrollBar;  intwhich;  CPropertyPageOnVScroll(nSBCode,nPos,pScrollBar);  Sleep(50);  if(slider==&amp;m_FreqSlider)  which=kNotch9Freq;  elseif(slider==&amp;m_QSlider)  which=Notch9Q;  elseif(slider==&amp;m_CompQSlider)  which=kNotch8Q;  elseif(slider==&amp;m_CompGainSlider)  which=kNotch8Cut;else  return;  g_DSPManager->SetParamValue(CONTRoL_RANGE-slider->GetPos(),which);  SendStringToUI(which);}voidCDBNotchOnPaint(){CPaintDCdc(this);//devicecontextforpainting//TODOAddyourmessagehandlercodeherem_FreqSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch9Freq));m_QSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch9Q));m_CompQSlider.SetPosCONTROL_RANGE-g_DSPManager->GetParamValue(kNotch8Q));m_CompGainSlider.SetPos(CONTrOL_RANGE-g_DSPManager->GetParamValue(kNotch8Cut))m_Bypass.SetCheck(g_DSPManager->GetBypassSection(kBypassDBNotch));//DonotcallCPropertyPageOnPaint()forpaintingmessages}BOOLCDBNotchOnInitDialog(){CPropertyPageOnInitDialog();//TODOAddextrainitializationherem_FreqSlider.SetRange(0,CONTROL_RANGE);m_FreqSlider.SetPos(CONTROL_RANGe-g_DSPManager->GetParamValue(kNotch9Freq));m_FreqSlider.SetTicFreq((CONTROL_RANGE+1)/16);m_QSlider.SetRange(0,CONTROL_RANGE);m_QSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch9Q));m_QSlider.SetTicFreq((CONTROL_RANGE+1)/16);m_CompQSlider.SetRange(0,CONTROL_RANGE);m_CompQSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch8Q));m_CompQSlider.SetTicFreq((CONTROL_RANGE+1)/16);m_CompGainslider.SetRange(0,CONTROL_RANGE);m_CompGainSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch8Cut));m_CompGainSlider.SetTicFreq((CONTROL_RANGE+1)/16);m_ParentWindow=(CTabDialog*)GetParent()->GetParent();returnRUE;//returnTRUEunlessyousetthefocustoacontrol  //EXCEPTIONOCXPropertyPagesshouldreturnFALSE}voidCDBNotchSendStringToUI(intwhich){  CStringstr;  g_DSPManager->GetStringValue(which,str);  m_ParentWindow->SetStatusString(0,str);}voidCDBNotchOnBypass(){//TODOAddyourcontrolnotificationhandlercodehereintstate=m_Bypass.GetState()&amp;0x3;g_DSPManager->SetBypassSection(state,kBypassDBNotch);}//MainPage.cppimplementationfile#include"TabDialog.h"#include"DSP56kManager.h"#include<stdlib.h>#ifdef_DEBUG#definenewDEBUG_NEW#undef7HIS_FILEstaticcharTHIS_FILE[]=__FILE__;///////////////////////////////////////////////////////////////////////////////CMainPagepropertypageIMPLEMENT_DYNCREATE(CMainPage,CPropertyPage)CMainPageCMainPage()CPropertyPage(CMainPageIDD){//{{AFX_DATA_INIT(CMainPage)m_ypassCheckBox=FALSE;m_HDCDBypass=FALSE;m_GainScaleBypass=FALSE;m_AnalogInput=FALSE;//}}AFX_DATA_INIT}CMainPage-CMainPage(){}voidCMainPageDoDataExchange(CDataExchange*pDX){CPropertyPageDoDataExchange(pDX);//{{AFX_DATA_MAP(CMainPage)DDX_Control(pDX,IDC_SLIDER8,m_Delay);DDX_Control(pDX,IDC_SLIDER7,m_AnalogVol);DDX_Control(pDX,IDC_BUTTON1,m_ResetAll);DDX_Control(pDX,IDC_SLIDER3,m_PreVolumeSlider);DDX_Control(pDX,IDC_SLIDER1,m_VolumeSlider);DDX_Check(pDX,IDC_CHECK1,m_BypassCheckBox);DDX_Check(pDX,IDC_CHECK2,m_HDCDBypass);DDX_Check(pDX,IDC_CHECK3,m_GainScaleBypass);DDX_Check(pDX,IDC_CHECK4,m_AnalogInput);//}}AFX_DATA_MAP}BEGIN_MESSAGEMAP(CMainPage,CPropertyPage)//{{AFX_MSG_MAP(CMainPage)ON_WM_VSCROLL()ON_WM_SHOWWINDOW()ON_BN_CLICKED(IDC_CHECK1,OnBypassButton)ON_WM_PAINT()ON_BN_CLICKED(IDC_CHECK2,OnHDCDBypass)ON_BN_CLICKED(IDC_CHECK3,OnGainScaleBypass)ON_BN_CLICKED(IDC_BUTTON1,OnResetAll)ON_BN_CLICKED(IDC_CHECK4,OnAnalogInput)//}}AFx_MSG_MAPEND_MESSAG_MAP()///////////////////////////////////////////////////////////////////////////////CMainPagemessagehandlersvoidCMainPageOnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar){//TODOAddyourmessagehandlercodehereand/orcalldefaultCSliderCtrl*slider=(CSliderCtrl*)pScrollBar;intwhich;CPropertyPageOnVScroll(nSBCode,nPos,pScrollBar);Sleep(50);if(slider==&amp;m_VolumeSlider)  which=kMainVolume;elseif(slider==&amp;m_PreVolumeSlider)  which=kPreVolume;elseif(slider==&amp;m_AnalogVol)  which=kAnalogVolume;elseif(slider==&amp;m_Delay)  which=kDelay;else  return;g_DSPManager->SetParamValue(CONTROL_RANGE-slider->GetPos(),which);SendStringToUI(which);}BOOLCMainPageOnInitDialog(){CPropertyPageOnInitDialog();//TODOAddextrainitializationherem_VolumeSlider.SetRange(0,CONTROL_RANGE);m_VolumeSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kMainVolume));m_VolumeSlider.SetTicFreq((CONTROL_RANGE+1)/16);m_VolumeSlider.SetPageSize(PG_CONTROL_AMT);m_PreVolumeSlider.SetRange(0,CONTROL_RANGE);m_PreVolumeSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kPreVolume));m_PreVolumeSlider.SetTicFreq((CONTROLRANGE+1)/16);m_PreVolumeSlider.SetPageSize(PG_CONTROL_AMT);m_AnalogVol.SetRange(0,CONTROL_RANGE);m_AnalogVol.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kAnalogVolume));m_AnalogVol.SetTicFreq((CONTROL_RANGE+1)/16);m_AnalogVol.SetPageSize(PG_CONTROL_AMT);m_Delay.SetRange(0,CONTROL_RANGE);m_Delay.SetPos(CONTROL_RANGE-g_DSPMnager->GetParamValue(kAnalogVolume));m_Delay.SetTicFreq((CONTROL_RANGE+1)/16);m_Delay.SetPageSize(PG_CONTROL_AMT);m_BypassCheckBox=false;m_ParentWindow=(CTabDialog*)GetParent()->GetParent();returnTRUE//returnTRUEunlessyousetthefocustoacontrol  //EXCEPTIONOCXPropertyPagesshouldreturnFALSE}voidCMainPageOnShowWindow(BOOLbShow,UINTnStatus){CPropertyPageOnShowWindow(bShow,nStatus);//TODOAddyourmessagehandlercodehere}voidCMainPageOnBypassButton(){//TODOAddyourcontrolnotificationhandlercodeherem_BypassCheckBox=!m_BypassCheckBox;g_DSPManager->SetBypass(m_BypassCheckBox);}voidCMainPageOnPaint(){CPaintDcdc(this);//devicecontextforpainting//TODOAddyourmessagehandlercodeherem_VolumeSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetFaramValue(kMainVolume));m_PreVolumeSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kPreVolume));m_AnalogVol.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kAnalogVolue));m_Delay.SetPos(CONTROL_RaNCE-g_DSPManager-GetParamValuc(kDelay));//DonotcallCPropertyPageOnPaint()forpaintingmessages}voidCMainPageOnRDCDBypass(){//TODOAddyourcontrolnotificationhandlercodeherem_HDCDBypass=!m_HDCDBypass;g_DSPManager->SetHDCDBypass(m_HDCDBypass);}voidCMainPageOnGainScaleBypass(){//TODOAddyourcontrolnotificationhandlercodeherem_GainScaleDypass=!m_GainScaleBypass;g_DSPManager->SetHDCDGainScale(m_GainScaleBypass);}voidCMainPageOnResetAll(){//TODOAddyourcontrolnotificationhandlercodehere//MM8/3/99Addedextradialogwarning.if(MessageBox("Areyousureyouwanttoresetallparameters?","WARNING*,MB_YESNO)!=IDYES)  return;g_DSPManager->ResetAll();m_VolumeSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kMainVolume));m_PreVolumeSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kPreVolume));m_AnalogVol.SetPos[CONTROL_RANGE-g_DSPManager->GetParamValue(kAnalogVolume));m_Delay.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kDelay));}voidCMainPageOnAnalogInput(){  //TODO;Addyourcontrolnotificationhandlercodehere  m_AnalogInput=!m_AnalogInput;  g_DSPManager->SetAnalogInput(m_AnalogInpit);}voidCMainPageSendStringToUI(intwhich){  CStringstr;  g_DSPManager->GetStringValue(which,str);  m_ParentWindow->SetStatusString(0,str);}#if!defined(AFX_MAINPAGE_H_90463DA4_D52E_11D2_96EE_006097CDB9E2__INCLUDED_)#defineAFX_MAINPAGE_H_90463DA4_D52E_11D2_96EE_006097CDB9E2__INCLUDED_#if_MSC_VER>=1000#pragmaonce#endif//_MSC_VER>=1000//MainPage.hheaderfile//classCTabDialog;///////////////////////////////////////////////////////////////////////////////CMainPagedialogclassCMainPagepublicCPropertyPage{DECLARE_DYNCREATE(CMainPage)//ConstructionpublicCMainPage();-CMainPage();//DialogData//{{AFX_DATA(CMainPage)enum{IDD=IDD_PP2};CSliderCtrlm_Delay;CSliderCtrlm_AnalogVol;CButtonm_ResetAll;CSliderCtrlm_PreVolumeSlider;CSliderCtrlm_VolumeSlider;BOOLm_BypassCheckBox;BOOLm_HDCDBypass;BOOLm_GainScaleBypass;BOOLm_AualogInput;//}}AFX_DATA//Overrides//ClassWizardgeneratevirtualfunctionoverrides//{{AFX_VIRTUAL(CMainPage)protectedvirtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport//}}AFX_VIRTUAL//Implementationprotected//Generatedmessagemapfunctions//{{AFX_MSG(CMainPage)afx_msgvoidOnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar);virtualBOOLOnInitDialog();afx_msgvoidOnShowWindow(BOOLbShow,UINTnStatus);afx_msgvoidOnBypassButton();afx_msgvoidOnPaint();afx_msgvoidOnHDCDBypass();afx_msgvoidOnGainScaleBypass();afx_msgvoidOnResetAll();afx_msgvoidOnAnalogInput();//}}AFX_MSGDECLARE_MESSAGE_MAP()CTabDialog*m_ParentWindow;voidSendStringToUI(intwhich);private};//{{AFX_INSERT_LOCATION}}//MicrosoftDeveloperStudiowillinsertadditionaldeclarationsimmediatelybeforethepreviousline.#endif//!defined(AFX_MAINPAGE_H_90463DA4_D52E_11D2_96EE_006097CDB9E2__INCLUDED_)//I2CIPortComm.h;interfacefortheI2CIPortCommclass.////////////////////////////////////////////////////////////////////////#if!defined(AFX_I2CIPORTCOMM_H__33F9EF07_F6EF_11D2_96EE_006097CDB9E2__INCLUDED_)#defineAFX_I2CIPORTCOMM_H__33F9EF07_F6EF_11D2_96EE_006097CDB9E2__INCLUDED_#if_MSC_VER>=1000#pragmaonce#endif//_MSC_VER>=1000#include"DSPComm.h"enum{  MI2C_STATE_CLOSED,  MI2C_STATE_PENDING_OPEN,  MI2C_STATE_OPEN,  MI2C_STATE_PENDING_TX,  MI2C_STATE_PENDING_RX};#defineMI2_BUFFER_SIZE(3*3000)//shouldbemultipleof3classI2CIPortCommpublicDSPComm{intm_state;intm_error_code;longm_TxReq;charm_tx_buffer[MI2_BUFFER_SIZE];longm_tx_write,m_tx_read;longm_detect;BOOLm_get_detect;longm_retryCount;BOOLm_initialTry;HWNDm_HWnd;publicvirtualBOOLIsTransmitting(void);virtuallongGetDetectState(void);virtualvoidMessageHandler(WPARAMiPortEventCode);virtualBOOLCheckState(void);I2CIPortComm(HWNDp);virtual-I2CIPortComm();virtuallongSendDSPWord(long);virtuallongSendDSPMemory(char*,long);};#endif//!defined(AFX_I2CIPORTCOMM_H__33F9EF07_F6EF_11D2_96EE_006097CDB9E2__INCLUDED_)//I2CIPortComm.cppimplementationoftheI2CIPortCommclass.////////////////////////////////////////////////////////////////////////#include"stdafx.h"#include"sa.h"#include"I2CIPortComm.h"#include"COMPortChooser.h"#include"i2c200.h"staticstructI2C_PROPi2c;staticI2CIPortComm*g_I2CComm=NULL;#defineI2C_SLAVE_ADDRESS0xs0#defineI2C_MAX_AMOUNT(5*3)//don′tsendmorethanthisinone-shot#defineI2C_RETrY_COUNT0#ifdef_DEBUG#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#definenewDEBUG_NEW#endif//staticintcb_message;voidiPortMsgHandler(WPARAMiPortEventCode){if(g_I2CComm)  g_I2CComm->MessageHandler(iPortEventCode);}////////////////////////////////////////////////////////////////////////Construction/Destruction///////////////////////////////////////////////////////////////////////*staticBOOLwait_for_message(void){longcount;while(cb_message==-1){  Sleep(100);  count++;  if(count>20)  return(false);  }  return(true);}*/I2CIPortCommI2CIPortComm(HWNDp){  intr;  CCOMPortChooserdlg;  dlg.DoModal();  m_error_code=0;  m_state=MI2C_STATE_CLOSED;  m_TxReq=0;  m_txwrite=m_tx_read=0;  m_detect=0;  m_get_detect=false;  m_initialTry=false;  m_HWnd=p;  i2c.comport=dlg.which_port;i2c.WmMsgNo=0;  i2c.pfCBF=iPortMsgHandler;#ifdefNDEBUG  i2c.pcLogFileName=NULL;#else  i2c.pcLogFileName="log.txt";#endif  i2c.LogFileLevel=1;  i2c.LogFileSize=1000;  i2c.HostSlaveAddr=0x6E;  i2c.BusTimeOut=1000;  i2c.MasterBitRate=2;//100kHz  i2c.MasterRxBufSize=512;  i2c.MasterTxBufSize=MI2_BUFFER_SIZE;  i2c.MasterArbRetry=0;  i2c.SlaveRxGCEnable=1;  i2c.SlaveRxBufSize=512;  i2c.SlaveTxBufSize=512;  r=I2COpen(m_HWnd,AfxGetInstanceHandle(),&amp;i2c);  if(r)  m_error_code=0x1000;  m_state=MI2C_STATE_PENDING_OPEN;  g_I2CComm=this;}I2CIPortComm-I2CIPortComm(){I2CClose();g_I2CComm=NULL;}longI2CIPortCommSendDSPWord(longvalue){charbuffer[3];if(m_state<MI2C_STATE_OPEN)return(0L);buffer=(value>>16)&amp;0xFF;buffer[1]=(value>>8)&amp;0xFF;buffer[2]=value&amp;0xFF;return(SendDSPMemory(buffer,3));}longI2CIPortCommSendDSPMemory(char"data,longlen){//makesurethelinkisvalidif(m_state<MI2C_STATE_OPEN)  return(0L);  longrval=0L;  longb;  longtocopy,amount,freespace;  //copydataintothetxbuffer  if(data)  {  freespace=m_tx_read-m_tx_write;  if(freespace<=0)  freespace+=MI2_BUFFER_SIZE;  ASSERT((len+3)<=freespace);//notenoughspaceinthebuffer  for(tocopy=len;tocopy>0;tocopy-=amount){  if(m_tx_write>=m_tx_read)  {amount=MI2_BUFFER_SIZE-m_tx_write;  }  else  {  amount=m_tx_read-m_tx_write;  }  amount=min(amount.tocopy);  memcpy(m_tx_buffer+m_tx_write.data.amount);  data+=amount;  m_tx_write+=amount;  m_tx_write%=MI2_BUFFER_SIZE;  }}//attempttosenditif(m_state==MI2C_STATE_OPEN){  amount=m_tx_write-m_tx_read;//ASSERT(amount==((amount/3)*3));  if(amount<0)  amount=MI2_BUFFER_SIZE-m_tx_read;//amount=(amount/3)*3;//SendcompleteDSPWords.  amount=min(amount.I2C_MAX_AMOUNT);//throttle  b=I2CMasterTx(I2C_SLAVE_ADDRESS.(unsignedchar*)m_tx_buffer+m_t_read.amount,1);  if(b==0)  {  m_state=MI2C_STATE_PENDING_TX;  m_TxReq=amount;  if((im_initialTry)  {  m_retryCount=0;  m_initialTry=true;  }  }  else  {  if(m_error_code==0)  m_error_code=b;  ASSERT(b==0);  }}return(rval);}voidI2CIPortCommMessageHandler(WPARAMiPortEventCode){  structI2C_PROPsi2c;intr;  longtx_count;  longval;  unsignedcharbuffer[10];  switch(m_state)  {  caseMI2C_STATE_PENDING_OPEN  if(iPortEventCode==I2C_OPEN_SUCCESSFUL)  {  m_state=MI2C_STATE_OPEN;  if(m_tx_read!=m_tx_write)  SendDSPMemory(NULL.0L);  }  else  m_error_code=iPortEventCode;  break;  caseMI2C_STATE_PENDING_RX  if(iPortEventCode==I2C_MRX_COMPLETE)  {  r=I2CGctMasterRxMsg(3.buffer);  if(r==3)val=buffer&amp;0xFF;  val<<8;  val=val|(buffer[1]&amp;0xFF);  val<<8;  val=val|(buffer[2]&amp;0xFF);  m_detect=val;  }  }  //else  //m_error_code=iPortEventCode;  m_state=MI2C_STATE_OPEN;  if(m_tx_read!=m_tx_write)  SendDSPMemory(NULL.0L);  break;caseMI2C_STATE_PENDING_TX  if(iPortEventCode==I2C_MTX_COMPLETE)  {  //MM5/20/99Don′tcallstatushere.//r=I2CGetStatus(&amp;si2c);//tx_count=si2c.MasterTxByteCount;  tx_count=m_TxReq;  m_initialTry=false;  }  else  {  m_retryCount++;  if(m_retryCount>I2C_RETRY_COUNT)  (  m_initialTry=false;  if(m_error_code==0)  m_error_code=iPortEventCode;  //ASSERT(m_retryCount<=I2C_RETRY_COUNT);  I2CClose();  r=I2COpen(m_HWnd.AfxGetInstanceHandle(),&amp;i2c);  ASSERT(r==0);  m_state=MI2C_STATE_PENDING_OPEN;  return;  }  tx_count=0;  }  m_state=MI2C_STATE_OPEN;  m_tx_read+=tx_count;  m_tx_read%=MI2_BUFFER_SIZE;  if(m_get_detect)  {  m_get_detect=false;  r=I2CMasterRxExt(I2C_SLAVE_ADDRESS,3.1.1);  if(r)  {  if(m_error_code==0)  m_error_code=r;  }  else  m_state=MI2C_STATE_PENDING_RX;  }  elseif(m_tx_read!=m_tx_write)  SendDSPMemory(NULL.0L);  break;/*caseMI2C_STATE_PENDING_TX;  if(iPortEventCode==I2C_MTX_COMPLETE)  {  r=I2CGetStatus(&amp;si2c);  if(m_TxReq==si2c.MasterTxByteCount)  {  m_state=MI2C_STATE_OPEN;  m_tx_read+=m_TxReq;  m_tx_read%=MI2_BUFFER_SIZE;  if(m_tx_read!=m_tx_write)  SendDSPMemory(NULL.0L);}  }  else  {  m_error_code=iPortEventCode;  ;m_tx_read=m_tx_write=0;  m_state=MI2C_STATE_OPEN;  if(m_tx_read!=m_tx_write)  SendDSPMemory(NULL.0L);  }  break;*/}}BOOLI2CIPortCommCheckState(){return(m_state==MI2C_STATE_OPEN);}longI2CIPortCommGetDetectState(){longr.rval=0;if(m_error_code){  rval=-m_error_code;  m_error_code=0;}else{  rval=(m_detect)?10;}/*if(m_state==MI2C_STATE_PENDING_TX)  m_get_detect=true;  elseif(m_state==MI2C_STATE_OPEN)  {  r=I2CMasterRxExt(I2C_SLAVE_ADDRESS,3,1,1);  if(r)  m_error_code=r;  else  m_state=MI2C_STATE_PENDING_RX;  }*/  return(rval);}BOOLI2CIPortComm;IsTransmitting(){return(m_tx_write!=m_tx_read);}#if!defined(AFX_I2CDIALOG_H__B5D510E6_F7D5_11D2_96EE_006097CDB9E2__INCLUDED_)#defineAFX_I2CDIALOG_H__B5D510E6_F7D5_11D2_96EE_006097CDB9E2_INCLUDED_#if_MSC_VER>=1000#pragmaonce#endif//_MSC_VER>=1000//I2CDialog.hheaderfile/////////////////////////////////////////////////////////////////////////////////CI2CDialogdialogclassCI2CDialogpublicCDialog{  UINTm_timerID;  intm_state;//ConstructionpublicCI2CDialog(CWnd*pParent=NULL);//standardconstructor//DialogData//{{AFX_DATA(CI2CDialog)enum(IDD=IDD_DIALOG2);  //NOTEtheClassWizardwilladddatamembershere//}}AFX_DATA//Overrides//ClassWizardgeneratedvirtualfunctionoverrides//{{AFX_VIRTUAL(CI2CDialog)publicvirtualBOOLOnCmdMsg(UINTnID,intnCode,void*pExtra,AFX_CMDHANDLERINFO*pHandlerInfo);protectedvirtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport//}}AFX_VIRTUAL//Implementationprotected//Generatedmessagemapfunctions//{{AFX_MSG(CI2CDialog)virtualBOOLOnInitDialog();afx_msgvoidOnTimer(UINTnIDEvent);afx_msgvoidOnClose();//)}AFX_MSGDECLARE_MESSAGE_MAP()};//{{AFX_INSERT_LOCATION}}//MicrosoftDeveloperStudiowillinsertadditionaldeclarationsimmediatelybeforetheprovlousline.#endif//!defined(AFX_I2CDIALOG_H__B5D510E6_F7D5_11D2_96EE_006097CDB9E2__INCLUDED_)//I2CDialog.cppimplementationfile//#include"stdafx.h"#include"sa.h"#include"I2CDialog.h"#include"DSP56kManager.h"#defineTIMERID55#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__#endif///////////////////////////////////////////////////////////////////////////////CI2CDialogdialogCI2CDialogCI2CDialog(CWnd*pParent/*=NULL*/)  CDialog(CI2CDialogIDD,pParent){  //{{AFX_DATA_INIT(CI2CDialog)  //NOTEtheClassWizardwilladdmemberinitializationhere  //}}AFX_DATA_INIT}voidCI2CDialogDoDataExchange(CDataExchange*pDX){CDialogDoDataExchange(pDX);//{{AFX_DATA_MAP(CI2CDialog)  //NOTEtheClassWizardwilladdDDXandDDVcallshere//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CI2CDialog,CDialog)//{{AFX_MSG_MAP(CI2CDialog)ON_WM_TIMER()ON_WM_CLOSE()//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CI2CDialogmessagehandlersBOOLCI2CDialogOnInitDialog(){CDialogOnInitDialog();//TODOAddextrainitializationhereg_DSPManager=newCDSP56kManager(this->m_hWnd);m_timerID=0;m_timerID=SetTimer(TIMERID,50,NULL);m_state=0;returnTRUE//returnTRUEunlessyousetthefocustoacontrol  //EXCEPTIONOCXPropertyPagesshouldreturnFALSE}voidCI2CDialogOnTimer(UINTnIDEvent){//TODOAddyourmessagehandlercodehereand/orcalldefaultif(nIDEvent==TIMERID)  {  if(g_DSPManager->IsReady())  {  switch(m_state)`  case0  g_DSPManager->DownloadDSPCode();  m_state++;  break  case1  g_DSPManager->ResetAll();  EndDialog(IDOK);  break;  default  EndDialog(IDOK);  break;  }  }  elseif(g_DSPMananager->GetHDCDMode()<0)  EndDialog(IDABORT);  }else  {  CDialogOnTimer(nIDEvent);  }}BOOLCI2CDialogOnCmdMsg(UINTnID,intnCode,void*pExtra,AFX_CMDHANDLERINFO*pHandlerInfo)//TODOAddyourspecializedcodehereand/orcallthebaseclassreturnCDialogOnCmdMsg(nID,nCode,pExtra,pHandlerInfo);}voidCI2CDialogOnClose(){//TODOAddyourmessagehandlercodehereand/orcalldefaultif(m_timerID)  KillTimer(m_timrID);CDialogOnClose();.}#if!defined(AFX_I2CCOMMERRORDIALOG_H__76C389E8_F889_11D2_96EE_006097CDB9E2__INCLUDED_)#defineAFX_I2CCOMMERRORDIALOG_H__76C389E8_F889_11D2_96EE_006097CDB9E2_INCLUDED_#if_MSC_VER>=1000#pragmaonce#endif//_MSC_VER>=1000//I2CCommErrorDialog.hheaderfile/////////////////////////////////////////////////////////////////////////////////CI2CCommErrorDialogdialogclassCI2CCommErrorDialogpublicCDialog{//ConstructionpublicCI2CCommErrorDialog[CWnd*pParent=NULL);//standardconstructor//DialogData//{{AFX_DATA(CI2CCommErrorDialog)enum{IDD=IDD_DIALOG4};CStringm_ErrorCode;//}}AFX_DATA//Overrides//ClaseWizardgeneratedvirtualfunctionoverrides//((AFX_VIRTUAL(CI2CCommErrorDialog)protectedvirtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport//}}AFX_VIRTUAL//Implementationprotected//Generatedmessagemapfunctions//{{AFX_MSG(CI2CCommErrorDialog)afx_msgvoidOnButton1();//}}AFX_MSGDECLARE_MESSAGE_MAP()};//[{AFX_INSERT_LOCATION}}//MicrosoftDeveloperStudiowillinsertadditionaldeclarationsimmediatelybeforethepreviousline.#endif//!defined(AFX_I2CCOMMERRORDIALOG_H_76C389E8_F889_11D2_96EE_006097CDE9E2__INCLUDED_)//I2CCommErrorDialog.cppimplementationfile//#include"stdafx.h"#include"sa.h"#include"I2CCommErrorDialog.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CI2CCommErrorDialogdialogCI2CCommErrorDialogCI2CCommErrorDialog(CWnd*pParent/*=NULL*/)CDialog(CI2CCommErrorDialogIDD,pParent){//{{AFX_DATA_INIT(CI2CCommErrorDialog)m_ErrorCode=_T("");//}}AFX_DATA_INIT}voidCI2CCommErrorDialogDoDataExchange(CDataExchange*pDX){CDialogDoDataExchange(pDX);//{{AFX_DATA_MAP(CI2CCommErrorDialog)DDX_Text(pDX,IDC_EDITl,m_ErrorCode);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CI2CCommErrorDialog,CDialog)//{{AFX_MSG_MAP(CI2CCommErrorDialog)ON_BN_CLICKED(IDC_BUTTON1,onButton1)//}},AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CI2CCommErrorDialogmessagehandlersvoidCI2CCommErrorDialogOnButton1(){//TODOAddyourcontrolnotificationhandlercodehereEndDialog(IDCANCEL);}//PEQParam.hinterfacefortheCPEQParamclass.////////////////////////////////////////////////////////////////////////#if!defined(AFX_PEQPARAM_H__733FB7AB_4A49_11D3_96EE_006097CDB9E2__INCLUDED_)#defineAFX_PEQPARM_H_733FB7AB_4A49_11D3_96EE_006097CDB9E2__INCLUDED_#if_MSC_VER>=1000#pragmaonce#endif//_MSC_VER>=1000typedefstruct_biquadcoef{floatc[6];//b0,b1,b2,a0,a1,a2}biquadcoef;classCPEQParam{floatm_Gain;//indB(+or-)floatm_Q;//inQunits  floatm_Frequency;//inHz  floatm_SampleRate;//inHz  doublem_pi;public  voidGetCoef(biquadcoef*);  voidGetAllpassCoef(biquadcoef*);  voidSetQ(floatv){m_Q=v;}  voidSetQ(CString&amp;str);  voidSetGain(floatv){m_Gain=v;}  voidSetGain(CString&amp;str);  voidSetFreq(floatv){m_Frequency=v;}  voidSetFreq(CString&amp;str);  CPEQParam();  virtual_CPEQParam();};#endif//!defined(AFXPEQPARAM_H__733FB7AB_4A49_11D3_96EE_0006097CDB9E2_INCLUDED_)//PEQParam.cppimplementationoftheCPEQParamclass.////////////////////////////////////////////////////////////////////////#include"stdafx.h"#include"sa.h"#include"PEQParam.h"#include<stdio.h>#include<math.h>#ifdef_DEBUG#undefTHIS_FILEstaticcharTHIS_FILE[]=_FILE_;#definenewDEBUG_NEW#endif////////////////////////////////////////////////////////////////////////Construction/Destruction//////////////////////////////////////////////////////////////////////CPEQParamCPEQParam()m_Frequency(0.5),m_Gain(0.0),m_Q(1.0),m_SampleRate(44100.){  m_pi=acos(-1.);}CPEQParam-CPEQParam(){}voidCPEQParamSetGain(CString&amp;str){  floatv;  sscanf(str,"%f",&amp;v);  m_Gain=v;}voidCPEQParamSetFreq(CString&amp;str){  floatv;  sscanf(str,"%f",&amp;v);  m_Frequency=v;}voidCPEQParamSetQ(CString&amp;str){  floatv;  sscanf(str,"%f",&amp;v);  m_Q=v;}voidCPEQParamGetAllpassCoef(biquadcoef*f){doublegamma,beta,wc,tbeta;doublenormFreq=m_Frequency/m_SampleRate;wc=m_pi*normFreq;gamma=-cos(wc);tbeta=wc/(2*m_Q);if(tbeta>m_pi/4)  tbeta=m_pi/4;beta=(1.-tan(tbeta))/(1.+tan(tbeta));f->c=(float)beta;//b0f->c[1]=(float)(gamma*(1+beta));//b1  f->c[2]=1.;//b2  f->c[3]=1.;//a0  f->c[4]=f->c[1];//a1  f->c[5]=(float)beta;//a2}voidCPEQParamGetCoef(biquadcoef*f){doubleM,L;biquadcoefaf;doublegain=(float)pow[10.,m_Gain/20.);GetAllpassCoef(&amp;af);M=(1.-gain)/2.;L=(1.+gain)/2.;f->c=(float)(af.c*M+L);//b0f->c[1]=(float)(af.c[1]*M+af.c[4]*L);//b1f->c[2]=[float)(af.c[2]*M+af.c[5]*L);//b2f->c[3]=af.c[3];f->c[4]=af.c[4];f->c[5]=af.c[5];}#if!defined(AFX_NOTCHPAGE2_H__5C8994C7_E2A4_11D2_96EE_006097CDB9E2__INCLUDED_)#defineAFX_NOTCHPAGE2_H__5C8994C7_E2A4_11D2_96EE_006097CDB9E2_INCLUDED_#if_MSC_VER>=1000#pragmaonce#endif//_MSC_VER>=1000//NotchPage2.hheaderfile//classCTabDialog;///////////////////////////////////////////////////////////////////////////////CNotchPage2dialogclassCNotchPage2publicCPropertyPage{DECLARE_DYNCREATE(CNotchPage2)//ConstructionpublicCNotchPage2();-CNotchPage2();//DialogData//{{AFX_DATA(CNotchPage2)enum{IDD=IDD_PP9};CButtonm_BypassSecondButton;CButtonm_BypassFirstButton;CSliderCtrlm_SliderCut4;CSliderCtrlm_SliderQ4;CSliderCtrlm_SliderFrequency4;CSliderCtrlm_SliderCut3;CSliderCtrlm_SliderQ3;CSliderCtrlm_SliderFrequency3;//}}AFX_DATA//Overrides//ClassWizardgeneratevirtualfunctionoverrides//{{AFX_VIRTUAL(CNotchPage2)protectedvirtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport//}}AFX_VIRTUAL//Implementationprotected//Generatedmessagemapfunctions//{{AFX_MSG(CNotchPage2)afx_msgvoidOnPaint();virtualBOOLOnInitDialog();afx_msgvoidOnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar);afx_msgvoidOnBypassFirst();afx_msgvoidOnBypassSecond();//}}AFX_MSGDECLARE_MESSAGE_MAP()CTabDialog*m_ParentWindow;voidSendStringToUI(intwhich);};//{{AFX_INSERT_LOCATION}}//MicrosoftDeveloperStudiowillinsertadditionaldeclarationsimmediatelybeforethepreviousline.#endif//!defined(AFX_OTCHPAGE2_H__5C8994C7_E2A4_11D2_96EE_006097CDB9E2__INCLUDED_)//NotchPage2.cppimplementationfile//#include"stdafx.h"#include"sa.h"#include"NotchPage2.h"#include"TabDialog.h"#include"DSP56kManager.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CNotchPage2propertypageIMPLEMENT_DYNCREATE(CNotchPage2,CPropertyPage)CNotchPage2CNotchPage2()CPropertyPage(CNotchPage2IDD){//{{AFX_DATA_INIT(CNotchPage2)//}}AFX_DATA_INIT}CNotchPage2-CNotchPage2(){}voidCNotchPage2DoDataExchange(CDataExchange*pDX){CPropertyPageDoDataExchange(pDX);//{{AFX_DATA_MAP(CNotchPage2)DDX_Control(pDX,IDC_CHECK6,m_BypassSecondButton);DDX_Control(pDX,IDC_CHECK5,m_BypassFirstButton);DDX_Control(pDX,IDC_SLIDER6,m_SliderCut4);DDX_Control(pDX,IDC_SLIDER5,m_SliderQ4);DDX_Control(pDX,IDC_SLIDER4,m_SliderFrequency4);DDX_Control(pDX,IDC_SLIDER3,m_SliderCut3);DDX_Control(pDX,IDC_SLIDER2,m_SliderQ3);DDX_Control(pDX,IDC_SLIDER1,m_SliderFrequency3);//}}AFX_DATA_MAP}BEGIN_NESSAGE_MAP(CNotchPage2,CPropertyPage)//{{AFX_MSG_MAP(CNotchPage2)ON_WM_PAINT()ON_WM_VSCROLL()ON_BN_CLICKED(IDC_CHECKs,OnBypassFirst)ON_BN_CLICKED(IDC_CHECK6,OnBypassSecond)//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CNotchPage2messagehandlersvoidCNotchPage2OnPaint(){CPaintDCdc(this);//devicecontextforpainting//TODOAddyourmessagehandlercodeherem_SliderFrequency3.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch6Freq));m_SliderQ3.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch6Q));m_SliderCut3.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch6Cut));m_SliderFrequency4.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch7Freq));m_SliderQ4.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch7Q));m_SliderCut4.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch7Cut));m_BypassFirstButton.SetCheck(g_DSPManager->GetBypassSection(kBypassNotch3));m_BypassSecondButton.SetCheck(g_DSPManager->GetBypassSection(kBypassNotch4));//DonotcallCPropertyPageOnPaint()forpaintingmessages}BOOLCNotchPage2OnInitDialog(){CPropertyPageOnInitDialog();//TODOAddextrainitializationherem_SliderFrequency3.SetRange(0,CONTROL_RANGE);m_SliderFrequency3.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch6Freq));m_SliderFrequency3.SetTicFreq((CONTROL_RANGE+1)/16);m_SliderFrequency3.SetPageSize(PG_CONTROL_AMT);m_SliderQ3.SetRange(0,CONTROL_RANGE);m_SliderQ3.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch6Q));m_SliderQ3.SetTicFreq((CONTROL_RANGE+1)/16);m_SliderQ3.SetPageSize(PG_CONTROL_AMT);m_SliderCut3.SetRange(0,CONTROL_RANGE);m_SliderCut3.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch6Cut));m_SliderCut3.SetTicFreq((CONTROL_RANGE+1)/16);m_SliderCut3.SetPageSize(PG_CONTROL_AMT);m_SliderFrequency4.SetRange(0,CONTROL_RANGE);m_SliderFrequency4.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch7Freq));m_SliderFrequency4.SetTicFreq((CONTROL_RANGE+1)/16);m_SliderFrequency4.SetPageSize(PG_CONTROL_AMT);m_SliderQ4.SetRange(0,CONTROL_RANGE);m_SliderQ4.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch7Q));m_SliderQ4.SetTicFreq((CONTROL_RANGE+1)/16);m_SliderQ4.SetPageSize(PG_CONTROL_AMT);m_SliderCut4.SetRange(0,CONTROL_RANGE);m_SliderCu4.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch7Cut));m_SliderCut4.SetTicFreq((CONTROL_RANGE+1)/16);m_SliderCut4.SetPageSize(PG_CONTROL_AMT);m_ParentWindow=(CTabDialog*)GetParent()->GetParent();returnTRUE;//returnTRUEunlessyousetthefocustoacontrol  //EXCEPTIONOCXPropertyPagesshouldreturnFALSE}voidCNotchPage2OnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar){//TODOAddyourmessagehandlercodehereand/orcalldefaultCSliderCtrl*slider=(CSliderCtrl*)pScrollBar;intwhich;CPropertyPageOnVScroll(nSBCode,nPos,pScrollBar);Sleep(50);if(slider==&amp;m_SliderFrequency3)  which=kNotch6Freq;elseif(slider==&amp;m_SliderQ3)  which=kNotch6Q;elseif(slider==&amp;m_SliderCut3)  which=kNotch6Cut;elseif(slider==&amp;m_SliderFrequency4)  which=kNotch7Freq;elseif(slider==&amp;m_SliderQ4)  which=kNotch7Q;elseif(slider==&amp;m_SliderCut4)  which=kNotch7Cut;else  return;g_DSPManager->SetParamValue(CONTROL_RANGE-slider->GetPos(),which);SendStringToUI(which);}voidCNotchPage2SendStringToUI(intwhich){  CStringstr;  g_DSPManager->GetStringValue(which,Str);  m_ParentWindow>SetStatusString(0,str);}voidCNotchPage2OnBypassFirst(){//TODOAddyourcontrolnotificationhandlercodehereintstate=m_BypassFirstButton.GetState()&amp;0x3;g_DSPManager->SetBypassSection(state,kBypassNotch3);}voidCNotchPage2OnBypassSecond(){//TODOAddyourcontrolnotificationhandlercodehereintstate=m_BypassSecondButton.GetState()&amp;0x3;g_DSPManager->SetBypassSection(state,kBypassNotch4);}#if!defined(AFX_NOTCHPAGE1_H__0CF7E208_D790_11D2_96EE_006097CDB9E2__INCLUDED_)#defineAFX_NOTCHPAGE1_H__0CF7E208_D790_11D2_96EE_006097CDB9E2_INCLUDED_#if_MSC_VER>=1000#pragmaonce#endif//_MSC_VER>=1000//NotchPage1.hheaderfile/////////////////////////////////////////////////////////////////////////////////CNotchPage1dialogclassCTabDialogclassCNotchPage1publicCPropertyPage{  DECLARE_DYNCREATE(CNotchPage1)//Constructionpublic  CNotchPage1();  -CNotchPage1();//DialogData  //{{AFX_DATA(CNotchPage1)  enum{IDD=IDD_PP4};  CButtonm_BypassSecondButton;  CButtonm_BypassFirstButton;  CSliderCtrlm_SliderCut2;  CSliderCtrlm_SliderQ2;  CSliderCtrlm_SliderFrequency2;  CSliderCtrlm_SliderCut1;  CSliderCtrlm_SliderQ1;  CSliderCtrlm_SliderFrequency1;  //}}AFX_DATA  //Overrides  //ClassWizardgeneratevirtualfunctionoverrides  //{{AFX_VIRTUAL(CNotchPage1)  protected  virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport  //}}AFX_VIRTUAL  //Implementation  protected  //Generatedmessagemapfunctions  //{{AFX_MSG(CNotchPage1)  virtualBOOLOnInitDialog();  afx_msgvoidOnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar);  afx_msgvoidOnShowWindow(BOOLbShow,UINTnStatus);  afx_msgvoidOnPaint();  afx_msgvoidOnBypassFirst();  afx_msgvoidOnBypassSecond();  //}}AFX_MSG  DECLARE_MESSAGE_MAP()  CTabDialog*m_ParentWindow;  voidSendStringToUI(intwhich);};//{{AFX_INSERT_LOCATION}}//MicrosoftDeveloperStudiowillinsertadditionaldeclarationsimmediatelybeforethepreviousline#endif//!defined(AFX_NOTCHPAGE1_H__0CF7E208_D790_11D2_96EE_006097CDB9E2__INCLUDED_)//NotchPage1.cppimplementationfile//#include"stdafx.h"#include"sa.h"#include"NotchPage1.h"#include"TabDialog.h"#include"DSP56kManager.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CNotchPage1propertypageIMPLEMENT_DYNCREATE(CNotchPage1,CPropertyPage)CNotchPage1CNotchPage1()CPropertyPage(CNotchPage1IDD){//{{AFX_DATA_INIT(CNotchPage1)//}}AFX_DATA_INIT}CNotchPage1-CNotchPage1(){}voidCNotchPage1DoDataExchange(CDataExchange*pDX){CPropertyPageDoDataExchange(pDX);//{{AFX_DATA_MAP(CNotchPage1)DDX_Control(pDX,IDC_CHECK6,m_BypassSecondButton);DDX_Control(pDX,IDC_CHECK5,m_BypassFirstButton);DDX_Control(pDX,IDC_SLIDER6,m_SliderCut2);DDX_Control(pDX,IDC_SLIDER5,m_SliderQ2);DDX_Control(pDX,IDC_SLIDER4,m_SliderFrequency2);DDX_Control(pDX,IDC_SLIDER3,m_SliderCut1);DDX_Control(pDX,IDC_SLIDER2,m_SliderQ1);DDX_Control(pDX,IDC_SLIDER1,m_SliderFrequency1);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CNotchPage1,CPropertyPage)//{{AFX_MSG_MAP(CNotchPage1)ON_WM_VSCROLL()ON_WM_SHOWWINDOW()ON_WM_PAINT()ON_BN_CLICKED(IDC_CHECK5,OnBypassFirst)ON_BN_CLICKED(IDC_CHECK6,OnBypassSecond)//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CNotchPage1messagehandlersBOOLCNotchPage1OnInitDialog(){CPropertyPageOnInitDialog();//TODOAddextrainitializationherem_SliderFrequency1.SetRange(0,CONTROL_RANGE);m_SliderFrequency1.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch1Freq));m_SliderFrequency1.SetTicFreq((CONTROL_RANGE+1)/16);m_SliderFrequency1.SetPageSize(PG_CONTROL_AMT);m_SliderQ1.SetRange(0,CONTROL_RANGE);m_SliderQ1.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch1Q));m_SliderQ1.SetTicFreq((CONTROL_RANGE+1)/16);m_SliderQ1.SetPageSize(PG_CONTROL_AMT);  m_SliderCut1.SetRange(0,CONTROL_RANGE);  m_SliderCut1.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch1Cut));  m_SliderCut1.SetTicFreq((CONTROL_RANGE+1)/16);  m_SliderCut1.SetPageSize(PG_CONTROL_AMT);  m_SliderFrequency2.SetRange(0,CONTROL_RANGE);  m_SliderFrequency2.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch2Freq));  m_SliderFrequency2.SetTicFreq((CONTROL_RANGE+1)/16);  m_SliderFrequency2.SetPageSize(PG_CONTROL_AMT);  m_SliderQ2.SetRange(0,CONTROL_RANGE);  m_SliderQ2.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch2Q));  m_SliderQ2.SetTicFreq((CONTROL_RANGE+1)/16);  m_SliderQ2.SetPageSize(PG_CONTROL_AMT);  m_SliderCut2.SetRange(0,CONTROL_RANGE);  m_SliderCut2.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch2Cut));  m_SliderCut2.SetTicFreq((CONTROLRANGE+1)/16);  m_SliderCut2.SetPageSize(PG_CONTROL_AMT);  m_ParentWindow=(CTabDialog*)GetParent()->GetParent();  returnTRUE;//returnTRUEunlessyousetthefocustoacontrol  //EXCEPTIONOCXPropertyPagesshouldreturnFALSE}voidCNotchPage1OnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar){//TODOAddyourmessagehandlercodehereand/orcalldefaultCSliderCtrl*slider=(CSliderCTrl*)pScrollBar;intwhich;CPropertyPageOnVScroll(nSBCode,nPos,pScrollBar);Sleep(50);if(slider==&amp;m_SliderFrequency1)  which=kNotch1Freq;elseif(slider==&amp;m_SliderQ1)  which=kNotch1Q;elseif(slider==&amp;m_SliderCut1)  which=kNotch1Cut;elseif(slider==&amp;m_SliderFrequency2)  which=kNotch2Freq;elseif(slider==&amp;m_SliderQ2)  which=kNotch2Q;elseif(slider==&amp;m_SliderCut2)  which=kNotch2Cut;else  return;g_DSPManager->SetParamValue(CONTROL_RANGE-slider->GetPos(),which);SendStringToUI(which);}voidCNotchPage1OnShowWindow(BOOLbShow,UINTnStatus){CPropertyPageOnShowWindow(bShow,nStatus);//TODOAddyourmessagehandlercodehere}voidCNotchPage1OnPaint(){CPaintDCdc(this);//devicecontextforpainting//TODOAddyourmessagehandlercodeherem_SliderFrequency1.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch1Freq));m_SliderQ1.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch1Q));m_SliderCut1.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch1Cut));m_SliderFrequency2.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch2Freq));  m_SliderQ2.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch2Q));  m_SliderCut2.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch2Cut));  m_BypassFirstButton.SetCheck(g_DSPManager->GetBypassSection(kBypassNotch1));  m_BypassSecondButton.SetCheck(g_DSPManager->GetBypassSection(kBypassNotch2));  //DonotcallCPropertyPageOnPaint()forpaintingmessages}voidCNotchPage1SendStringToUI(intwhich){  CStringstr;  g_DSPManager->GetStringValue(which,str);  m_Parentwindow->SetStatusString(0,str);}voidCNotchPage1OnBypassFirst(){//TODOAddyourcontrolnotificationhandlercodehereintstate=m_BypassFirstButton.GetState()&amp;0x3;g_DSPManager->SetBypassSection(state,kBypassNotch1);}voidCNotchPage1OnBypassSecond(){//TODOAddyourcontrolnotificationhandlercodehereintstate=m_BypassSecondButton.GetState()&amp;0x3;g_DSPManager->SetBypassSection(state,kBypassNotch2);}#if!defined(AFX_NEWCUTOFFPAGE_H_E2728226_E026_11D2_96EE_006097CDB9E2__INCLUDED_)#defineAFX_NEWCUTOFFPAGE_H__E2728226_E026_11D2_96EE_006097CDB9E2__INCLUDED_#if_MSC_VER>=1000#pragmaonce#endif//_MSC_VER>=1000//NewCutoffPage.hheaderfile//classCTabDialog;///////////////////////////////////////////////////////////////////////////////CNewCutoffPagedialogclassCNewCutoffPagepublicCPropertyPage{DECLAREDYNCREATE(CNewCutoffPage)//ConstructionpublicCNewCutoffPage();-CNewCutoffPage();//DialogData//{{AFX_DATA(CNewCutoffPage)enum{IDD=IDD_PP8};CButtonmBypassNLopassButton;CSliderCtrlm_NewHiQSlider;CSliderCtrlm_NewHiFreqSlider;CButtonm_BypassLopassButton;CButtonm_BypassHipassButton;CSliderCtrlm_HiQSlider;CSliderCtrlm_HiFreqSlider;CSliderCtrlm_LoQSlider;CSliderCtrlm_LoFreqSlider;//}}AFX_DATA//Overrides  //ClassWizardgeneratevirtualfunctionoverrides  //{{AFX_VIRTUAL(CNewCutoffPage)  public  virtualBOOLOnSetActive();  protected  virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport  //}}AFX_VIRTUAL//Implementationprotected;//Generatedmessagemapfunctions//{{AFX_MSG(CNewCutoffPage)afx_msgvoidOnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar);virtualBOOLOnInitDialog();afx_msgvoidOnShowWindow(BOOLbShow,UINTnStatus);afx_msgvoidOnPaint();afx_msgvoidOnBypassHipass();afx_msgvoidOnBypassLopass();afx_msgvoidOmypassNewLopass();//}}AFX_MSGDECLARE_MESSAGEMAP()CTabDialog*m_ParentWindow;voidSendStringToUI(intwhich);};//{{AFX_INSERT_LOCATION}}//MicrosoftDeveloperStudiowillinsertadditionaldeclarationsimmediatelybeforethepreviousline.#endif//!defined(AFX_NEWCUTOFFPAGE_H_E2728226_E026_11D2_96EE_006097CDB9E2__INCLUDED_)//NewCutoffPage.cppimplementationfile//#include"stdafx.h"#include"sa.h"#include"NewCutoffPage.h*#include"TabDialog.h"#include"DSP56kManager.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CNewCutoffPagepropertypageIMPLEMENT_DYNCREATE(CNewCutoffPage,CPropertyPage)CNewCutoffPageCNewCutoffPage()CPropertyPage(CNewCutoffPageIDD){//{{AFX_DATA_INIT(CNewCutoffPage)//}}AFX_DATA_INIT}CNewCutoffPage-CNeWCutoffPage(){}voidCNewCutoffPageDoDataExchange(CDataExchange*pDX){CPropertyPageDoDataExchange(pDX);//{{AFX_DATA_MAP(CNewCutoffPage)DDX_Control(pDX,IDC_CHECK7,m_BypassNLopassButton);DDX_Control(pDX,IDC_SLIDER9,m_NewHiQSlider);DDX_Control(pDX,IDC_SLIDER8,m_NewHiFreqSlider);DDX_Control(pDX,IDC_CHECK5,m_BypassLopassButton);DDX_Control(pDX,IDC_CHECK4,m_BypassHipassButton);DDX_Control(pDX,IDC_SLIDER5,m_HiQSlider);DDX_Control(pDX,IDC_SLIDER4,m_HiFreqSlider);DDX_Control(pDX,IDC_SLIDER2,m_LoQSlider);DDX_Control(pDX,IDC_SLIDER1,m_LoFreqSlider);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CNewCutoffPage,CPropertyPage)//{{AFX_MSG_MAP(CNewCutoffPage)ON_WM_VSCROLL()ON_WM_SHOWWINDOW()ON_WM_PAINT()ON_BN_CLICKED(IDC_CHECK4,OnBypassHipass)ON_BN_CLICKED(IDC_CHECK5,OnBypassLopass)ON_BN_CLICKED(IDC_CECK7,OnBypassNewLopass)//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CNewCutoffPagemessagehandlersvoidCNewCutoffPageOnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar){//TODOAddyourmessagehandlercodehereand/orcalldefaultCSliderCtrl*slider=(CSliderCtrl*)pScrollBar;intwhich;CPropertyPageOnVScroll(nSBCode,nPos,pScrollBar);Sleep(50);if(slider==&amp;m_LoFreqSlider)which=kLoCutoffFreq;elseif(slider==&amp;m_LoQSlider)  which=kLoCutoffQ;  elseif(slider==&amp;m_HiFreqSlider)  which=kHiCutoffFreq;  elseif(slider==&amp;m_HiQSlider)  which=kHiCutoffQ;  elseif(slider==&amp;mNewHiFreqSlider)  which=kHiCutoff2Freq;  elseif(slider==&amp;mNewHiQSlider)  which=kHiCutoff2Q;  else  return;  g_DSPManager->SetParamValue(CONTROL_RANGE-slider->GetPos(),which);  SendStringToUI(which);}voidCNewCutoffPageSendStringToUI(intwhich){  CStringstr;  g_DSPManager->GetStringValue(which,str);  m_ParentWindow->SetStatusString(0,str);}BOOLCNewCutoffPageOnInitDialog(){CPropertyPageOnInitDialog();//TODOAddextrainitializationherem_LoFreqSlider.SetRange(0,CONTROL_RANGE);m_LoFreqSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kLoCutoffFreq));m_LoFreqSlider.SetTicFreq((CONTROL_RANGE+1)/16);m_LoFreqSlider.SetPageSize(PG_CONTROL_AMT);m_LoQSlider.SetRange(0,CONTROL_RANGE);m_LoQSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kLoCutoffQ));m_LoQSlider.SetTicFreq((CONTROL_RANGE+1)/16);m_LoQSlider.SetPageSize(PG_CONTROL_AMT);m_HiFreqSlider.SetRange(0,CONTROL_RANGE);m_HiFreqSlider.SetPos(CONTROL_RANGE-g_DSPMamager->GetParamValue(kHiCutoffFreq));m_HiFreqSlider.SetTicFreq((CONTROL_RANGE+1)/16);m_HiFreqSlider.SetPageSize(PG_CONTROL_AMT);m_HiQSlider.SetRamge(0,CONTROL_RANGE);m_HiQSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kHiCutoffQ));m_HiQSlider.SetTicFreq((CONTROL_RANGE+1)/16);m_HiQSlider.SetPageSize(PG_CONTROL_AMT);m_NewHiFreqSlider.SetRange(0,CONTROL_RANGE);m_NewHiFreqSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(HiCutofft2Freq));m_NewHiFreqSlider.SetTicFreq((CONTROL_RANGE+1)/16);m_NewHiFreqSlider.SetPageSize(PG_CONTROL_AMM);m_NewHiQSlider.SetRange(0,CONTROL_RANGE);m_NewHiQSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kHiCutoff2Q));m_NewHiQSlider.SetTicFreq((CONTROL_RANGE+1)/16);m_NewHiQSlider.SetPageSize(PG_CONTROL_AMT);m_ParentWindow=(CTabDialog*)GetParent()->GetParent();returnTRUE;//returnTRUEunlessyousetthefocustoacontrol  //EXCEPTIONOCXPropertyPagesshouldreturnFALSE}voidCNewCutoffPageOnShowWindow(BOOLbShow,UINTnStatus){CPropertyPageOnShowWindow(bShow,nStatus);//TODOAddyourmessagehandlercodehere}BOOLCNewCutoffPageOnSetActive(){//TODOAddyourspecializedcodehereand/orcallthebaseclassreturnCPropertyPageOnSetActive();}voidCNewCutoffPageOnPaint(){CPaintDCdc(this);//devicecontextforpainting//TODOAddyourmessagehandlercodeherem_LoFreqSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kLoCutoffFreq));m_LoQSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kLoCutoffQ));m_HiFreqSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kHiCutoffFreq));m_HiQSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kHiCutoffQ));m_NewHiFreqSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kHiCutoff2Freq));m_NewHiQSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kHiCutoff2Q));m_BypassHipassButton.SetCheck(g_DSPManager->GetBypassSection(kBypassHipass));m_BypassLopassButton.SetCheck(g_DSPManager->GetBypassSection(kBypassLopass));m_BypassNLopassButton.SetCheck(g_DSPManager->GetBypassSection(kBypassNLopass));//DonotcallCPropertyPageOnPaint()forpaintingmessages}voidCNewCutoffPageOnBypassHipass(){//TODOAddyourcontrolnotificationhandlercodehereintstate=m_BypassHipassButton.GetState()&amp;0x3;g_DSPManager->SetBypassSection(state,kBypassHipass);}voidCNewCutoffPageOnBypassLopass(){//TODOAddyourcontrolnotificationhandlercodehereintstate=m_BypassLopassButton.GetState()&amp;0x3;g_DSPManager->SetBypassSection(state,kBypassLopass);}voidCNewCutoffPageOnBypassNewLopass(){//TODOAddyourcontrolnotificationhandlercodehereintstate=m_BypassNLopassButton.GetState()&amp;0x3;g_DSPManager->SetBypassSection(state,kBypassNLopass);}//ShelfEQParam.hinterfacefortheCShelfEQParamclass.////////////////////////////////////////////////////////////////////////#if!defined(AFX_ShelfEQPARAM_H__733FB7AB_4A49_11D3_96EE_006097CDB9E2__INCLUDED_)#defineAFX_ShelfEQPARAM_H__733FB7AB_4A49_11D3_96EE_006097CDB9E2__INCLUDED_#if_MSC_VER>=1000#pragmaonce#endif//_MSC_VER>=1000typedefstruct_biquadcoef{floatc(6];//b0,b1,b2,a0,a1,a2}biquadcoef;classCShelfEQParam{floatm_Gain;//indB(+or-)float m_Frequency;//inHzfloatm_SampleRate;//inHzdoublem_Pi;boolm_HiShelf;publicvoidGetCoef(biquadcoef*);voidGetAllpassCoef(biquadcoef*);voidSetGain(floatv){m_Gain=v;}voidSetGain(CString&amp;str)voidSetFreq(floatv){m_Frequency=v;}voidSetFreq(CString&amp;str);CShelfEQParam(boolhi);virtual-CShelfEQParam();};#endif//!defined(AFX_ShelfEQPARAM_H_733FB7AB_4A49_11D3_96EE_006097CDB9E2_INCLUDED_)//ShelfEQParam.cppimplementationoftheCShelfEQParamclass.////////////////////////////////////////////////////////////////////////#include"stdafx.h"#include"sa.h"#include"ShelfEQParam.h"#include<stdio.h>#include<math.h>#ifde_DEBUG#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#definenewDEBUG_NEW#endif////////////////////////////////////////////////////////////////////////Construction/Destruction//////////////////////////////////////////////////////////////////////CShelfEQParamCShelfEQParam(boolhi)m_Frequency(0.5),m_Gain(0.0),m_SampleRate(44100.),m_HiShelf(hi){  m_Pi=acos(-1.);}CShelfEQParam-CShelfEQParam(){}voidCShelfEQParamSetGain(CString&amp;str){  floatv;  sscanf(str,"%f",&amp;v);  m_Gain=v;}voidCShelfEQParamSetFreq(CString&amp;str){  floatv;  sscanf(str,"%f",&amp;v);  m_Frequency=v;}voidCShelfEQParamGetAllpassCoef(biquadcoef*f){doublegamma,wc;doublenormFreq=m_Frequency/m_SampleRate/2;wc=m_pi*normFreq;gamma=(tan(wc/2)-1)/(tan(wc/2)+1);if(mHiShelf){  f->c=(float)gamma;//b0  f->c[1]=1.0;//b1}else{  f->c=(float)-gamma;//b0  f->c[1]=-1.0;//b1}f->c[2]=0;//b2f->c[3]=1.;//a0f->c[4]=(float)gamma;//a1f->c[5]=0;//a2}voidCShelfEQParamGetCoef(biquadcoef*f){doubleM.L;biquadcoefaf;doublegain=(float)pow(10.,m_Gain/20.);GetAllpassCoef(&amp;af);M=(1.-gain)/2.;L=(1.+gain)/2.;f->c=(float)(af.c*M+L);//b0f->c[1]=(float)(af.c[1]*M+af.c[4]*L);//b1f->c[2]=(float)(af.c[2]*M+af.c[5]*L);//b2f->c[3]=af.c[3];f->c[4]=af.c[4];f->c[5]=af.c[5];}//saDlg.hheaderfile//#if!defined(AFX_SADLG_H_33D93B0B_D0B8_11D2_96EE_006097CDB9E2_INCLUDED_)#defineAFX_SADLG_H_33D93B0B_D0B8_11D2_96EE_006097CDB9E2_INCLUDED_#if_MSC_VER>=1000#pragmaonce#endif//_MSC_VER>=1000///////////////////////////////////////////////////////////////////////////////CSaDlgdialogclassCSaDlgpublicCDialog{//ConstructionpublicCSaDlg(CWnd*pParent=NULL);//standardconstructor//DialogData//{{AFX_DATA(CSaDlg)enum{IDD=IDD_SA_DIALOG};  //NOTE;theClassWizardwilladddatamembershere//}}AFX_DATA//ClassWizardgeneratedvirtualfunctionoverrides//({AFX_VIRTUAL(CSaDlg)protectedvirtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport//}}AFX_VIRTUAL//ImplementationprotectedHICONm_hIcon;//Generatedmessagemapfunctions//{{AFX_MSG(CSaDlg)virtualBOOLOnInitDialog();afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);afx_msgvoidOnPaint();afx_msgHCURSOROnQueryDragIcon();afx_msgvoidOnButton1();afx_msgvoidOnButton2();//}}AFX_MSGDECLARE_MESSAGE_MAP()};//{{AFX_INSERT_LOCATION}}//MicrosoftDeveloperStudiowillinsertadditionaldeclarationsimmediatelybeforethepreviousline.#endif//!defined(AFX_SADLG_H_33D93B0B_D0B8_11D2_96EE_006097CDB9E2__INCLUDED_)//saDlg.cppimplementationfile//#include"stdafx.h"#include"sa.h"#include"saDlg.h"#include"unit_ppi.h"#include"functs.h"#include"TabDialog.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endifstaticintcmd_delay=1000;staticintio_delay=50;///////////////////////////////////////////////////////////////////////////////CAboutDlgdialogusedforAppAboutclassCAboutDlgpublicCDialog{publicCAboutDlg();//DialogData//{{AFX_DATA(CAboutDlg)enum{IDD=IDD_ABOUTBOX};//}}AFX_DATA//ClassWizardgeneratedvirtualfunctionoverrides//{{AFX_VIRTUAL(CAboutDlg)protectedvirtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport//}}AFX_VIRTUAL//Implementationprotected//{{AFX_MSG(CAboutDlg)//}}AFX_MSGDECLARE_MESSAGE_MAP()};CAboutDlgCAboutDlg()CDialog(CAboutDlgIDD){//{{AFX_DATA_INIT(CAboutDlg)//}}AFX_DATA_INIT}voidCAboutDlgDoDataExchange(CDataExchange*pDX){CDialogDoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)//{{AFX_MSG_MAP(CAboutDlg)//Nomessagehandlers//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CSaDlgdialogCSaDlgCSaDlg(CWnd*pParent/*=NULL*/)CDialog(CSaDlgIDD,pParent)//{{AFX_DATA_INIT(CSaDlg)  //NOTEtheClassWizardwilladdmemberinitializationhere//)}AFX_DATA_INIT//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinwinJIm_hIcon=AfxGetApp()->LoadIcon(IDR_MINFRAME);}voidCSaDlgDoDataExchange(CDataExchange*pDX){CoialogDoDataExchange(pDX);//{{AFX_DATA_MAP(CSaDlg)//NOTEtheClassWizardWilladdDDXandDDVcallshere//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CSaDlg.CDialog)//{{AFX_MSG_MAP(CSaDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1,OnButton1)ON_BN_CLICKED(IDC_BUTTON2,OnButton2)//}}AFX_MSG_MAPEND_ESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CSaDlgmessagehandlersBOOLCSaDlgOnInitDialog(){CDialogOnInitDialog();//Add"About..."menuitemtosystemmenu.//IDM_ABOUTBOXmustbeinthesystemcommandrangeASSERT((IDM_ABOUTBOX&amp;0xFFF0)==IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX<0xF000);CMenu*pSysMenu=GetSystemMenu(FALSE);if(pSysMenu!=NULL){  CStringstrAboutMenu;  strAboutMenu.LoadString(IDS_ABOUTBOX);  if(!strAboutMenu.IsEmpty())  {  pSysMenu->AppendMenu(MF_SEPARATOR);  pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strADDucmenu);  }}//Settheiconforthisdialog.theframeworkdoesthisautomatically//whentheapplication′smainwindowisnotadialogSetIcon(mhIcon,TRUE);//SetbigiconSetIcon(mhIcon,FALSE)//Setsmallicon//TODOAddextrainitializationhereif(load_dll()==false){  MessageBox("UNIT_PPInotfoundinthesystemdirectory.Fixthisandrestartapplication.");  returnfalse;}init_Port_spi(1);set_cmd_delay_cnt_value(cmd_delay);set_io_delay_cnt_value(io_delay);returnTRUE//returnTRUEunlessyousetthefocustoacontrol}voidCSaDlgOnSysCommand(UINTnID,LPARAM(Param){if((nID&amp;0xFFF0)==IDMABOUTBOX){  CAboutDlgdlgAbout;  dlgAbout.DoModal();}else{  CDialogOnSysCommand(nID,lParam);}}//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,//thisisautomaticallydoneforyoubytheframework.voidCSaDlgOnPaint(){if(IsIconic()){  CPaintDCdc(this);//devicecontextforpainting  SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);  //Centericoninclientrectangle  intcxIcon=GetSystemMetrics(SM_CXICON);  intcyIcon=GetSystemMetrics(SM_CYICON);  CRectrect;  GetClientRect(&amp;rect);  intx=(rect,Width()-cxIcon+1)/2;  inty=(rect,Height()-cyIcon+1)/2;  //Drawtheicon  dc.DrawIcon(x,y,m_hIcon);}else{  CDialogOnPaint();}}//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags//theminimizedwindow.HCURSORCSaDlgOnQueryDragIcon(){return(HCURSOR)m_hIcon;}voidCSaDlgOnButton1(){longtlong;tlong=spi_xchng24(0xAA55AA);tlong=spi_xchng24(0x0);}voidCSaDlgOnButton2(){//longtlong;////tlong=spi_xchng24(0x654321);//tlong=spi_xchng24(0x0);  CTabDialogdlg;  dlgDoModal();}//sa.hmainheaderfilefortheSAapplication//#if!definned(AFX_SA_H__33D93B09_D0B8_11D2_96EE_006097CDB9E2__INCLUDED_)#defineAFX_SA_H_33D93B09_D0B8_11D2_96EE_006097CDB9E2_INCLUDED_#if_MSC_VER>=1000#pragmaonce#endif//_MSC_VER>=1000#ifndef__AFXWIN_H__  #errorinclud′estdafx.h′beforeincludingthisfileforPCH#endif#include"resource.h"//mainsymbols///////////////////////////////////////////////////////////////////////////////CSaApp;//Seesa.cppfortheimplementationofthisclass//classCSaApppublicCWinApp{publicCSaApp();//Overrides//ClassWizardgeneratedvirtualfunctionoverrides//{{AFX_VIRTUAL(CSaApp)publicvirtualBOOLInitInstance();//}}AFX_VIRTUAL//Implementation//{{AFX_MSG(CSaApp)  //NOTE-theClassWizardwilladdandremovememberfunctionshere.  //DONOTEDITwhatyouseeintheseblocksofgeneratedcode!//}}AFX_MSGDECLARE_MESSAGE_MAP()};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}//MicrosoftDeveloperStudiowillinsertadditionaldeclarationsimmediatelybeforethepreviousline.#endif//!defined(AFX_SA_H__33D93B09_D0B8_11D2_96EE_006097CDB9E2_INCLUDED_)//sa.cppDefinestheclassbehaviorsfortheapplication.//#include"stdafx.h"#include"sa.h"#include"saDlg.h"#include"TabDialog.h"#include"I2CDialog.h"#include"DSP56kManager.h"CDSP56kManager*g_DSPManager;#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE{}=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CSaAppBEGIN_MESSAGE_MAP(CSaApp,CWinApp)//{{AFX_MSG_MAP(CSaApp)  //NOTE-theClassWizardwilladdandremovemappingmacroshere.  //DONOTEDITwhatyouseeintheseblocksofgeneratedcode!//}}AFX_MSGON_COMMAND(ID_HELP,CWinAppOnHelp)END_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CSaAppconstructionCSaAppCSaApp(){//TODOaddconstructioncodehere,//PlaceallsignificantinitializationinInitInstance}///////////////////////////////////////////////////////////////////////////////TheoneandonlyCSaAppobjectCSaApptheApp///////////////////////////////////////////////////////////////////////////////CSaAppinitializationBOOLCSaAppInitInstance(){AfxEnableControlContainer();//Standardinitialization//Ifyouarenotusingthesefeaturesandwishtoreducethesize//ofyourfinalexecutable,youshouldremovefromthefollowing//thespecificinitializationroutinesyoudonotneed.#ifdef_AFXDLLEnable3dControls();//CallthiswhenusingMFCinasharedDLL#elseEnable3dControlsStatic();//CallthiswhenlinkingtoMFCstatically#endif//Setdialogbackgroundcolortoblack//SetDialogBkColor(RGB(0,0,0),RGB(255,255,255));intresponse;CI2CDialogidlg;try{  if((response=idlg.DoModal())!=IDOK)  {if(response==IDABORT)  {  AfxMessageBox("Troubleinitializing");  Sleep(1000);  }//returnFALSE;  }}catch(CException"e){//printf("Troubleinitializing\n");//Sleep(1000);  returnFALSE;}//CSaDlgdlg;CTabDialogdlg;m_pMainWnd=&amp;dlg;intnResponse=dlg.DoModal();if(nResponse==IDOK){  //TODOPlacecodeheretohandlewhenthedialogis  //dismissedwithOK}elseif(nResponse==IDCANCEL)(  //TODOPlacecodeheretohandlewhenthedialogis  //dismissedwithCancel}//Sincethedialoghasbeenclosed,returnFALSEsothatweexitthe//application,ratherthanstarttheapplication"smessagepump.returnFALSE;}//{{NO_DEPENDENCIES}}//MicrosoftDeveloperStudiogeneratedincludefile.//Usedbysa.rc//#defineIDM_ABOUTBOX0x0010#defineIDD_ABOUTBOX100#defineIDS_ABOUTBOX101#defineIDD_SA_DIALOG102#defineIDR_MAINFRAME128#defineIDD_DIALOG1129#defineIDD_PP1130#defineIDR_MENU1130#defineIDD_PP2131#defineIDD_PP3132#defineIDD_PP4133#defineIDD_PP5134#defineIDD_PP6135#defineIDD_PP7136#defineIDD_PP8137#defineIDD_PP9138#defineIDD_DIALOG2139#defineIDD_DIALOG3140#defineIDD_DIALOG4141#defineIDD_PP10142#defineIDD_PP11143#defineIDC_BUTTON11001#defineIDC_BUTTON21002#defineIDC_SLIDER11004#defineIDC_CHECK11005#defineIDC_SLIDER21005#defineIDC_SLIDER31006#defineIDC_RADIO11006#defineIDC_SLIDER41007#defineIDC_CHECK21007#defineIDC_RADIO21007#defineIDC_EDIT11007#defineIDC_SLIDER51008#defineIDC_CHECK31008#defineIDC_RADlO31008#defineIDC_SLIDER61009#defineIDC_CHECK41009#defineIDC_RADlO41009#defineIDC_SLIDER71010#defineIDC_CHECK51010#defineIDC_SLIDER81011#defineIDC_CHECK61011#defineIDC_SLIDER91012#defineIDC_CHECK71013#defineID_MENUITEM3277132771#defineID_MENUITEM3277232772#defineID_FILE_EXPORTPARAMFILE32773//Nextdefaultvaluesfornewobjects//#ifdefAPSTUDIO_INVOKED#ifndefAPSTUDIO_READONLY_SYMBOLS#define_APS_NEXT_RESOURCE_VALUE142#define_APS_NEXT_COMMAND_VALUE32774#define_APS_NEXT_CONTROL_VALUE1011#define_APS_NEXT_SYMED_VALUE103#endif#endif#if!defined(AFX_TABDIALOG_H_5CB3DF04_D20F_11D2_96EE_006097CDB9E2__INCLUDED_)#defineAFX_TABDIALOG_H__5CB3DF04_D20F_11D2_96EE_006097CDB9E2__INCLUDED_#if_MSC_VER>=1000#pragmaonce#endif//_MSC_VER>=1000//TabDialog.hheaderfile//#include"Page1.h"#include"MainPage.h"#include"DDX.h"#include"NotchPage1.h"#include"NotchPage2.h"#include"StWaveRejPage.h"#include"ShelvPage.h"#include"NewCutoffPage.h"#include"AllpassPage.h"#include"DBNotch.h"///////////////////////////////////////////////////////////////////////////////CTabDialogdialogclassCTabDialogpublicCDialog{//ConstructionpublicvoidDisplayI2CState(lomgerror);virtualvoidSetStatusString(intwhich,CString&amp;s);CTabDialog(CWnd*pParent=NULL)//standardconstructor//DialogData//{{AFX_DATA(CTabDialog)enum{IDD=IDD_DIALOG1};  //NOTEtheClassWizardwilladddatamembershere//}}AFX_DATA//Overrides//ClassWizardgeneratedvirtualfunctionoverrides//{{AFX_VIRTUAL(CTabDialog)protectedvirtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport//}}AFX_VIRTUAL//ImplementationprotectedvirtualvoidDisplayMode(int);CStatusBarm_StatusBar;CPropertySheetm_dlgPropSheet;HICONm_hIcon;//CPage1 m_Page1;CMainPage  m_MainPage;CDDXm_DDXPage;CNotchPage1m_Notch1Page;CNotchPage2m_Notch2PageCStWaveRejPagem_StWaveRejPage;CShelvPagem_ShelvPage;//CCutoffPagem_CutoffPage;CNewCutoffPagem_CutoffPage;CAllpassPagem_AllpassPage;CDBNotchm_DBNotch;CBrushm_brush;UINT   m_timerID;BOOLm_HDCDDisplay;intm_AIdx,m_ICnt;intm_ErrorCounter;//Generatedmessagemapfunctions//{{AFX_MSG(CTabDialog)virtualBOOLOnInitDialog();  afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);  afx_msgvoidOnPaint();  afx_msgHCURSOROnQueryDragIcon();  afx_msgvoidOnClose();  afx_msgvoisOnMove(intx,inty);  afx_msgHBRUSHOnCtlColor(CDC*pDC,CWnd"pWnd,UINTnCtlColor);  afx_msgvoidOnOpenMenu();  afx_msgvoidOnSaveMenu();  afx_msgvoidOnTimer(UINTnIDEvent);  afx_msgvoidOnFileExportparamfile();  //}}AFX_MSG  DECLARE_MESSAGE_MAP()};//{{AFX_INSERT_LOCATION}}//MicrosoftDeveloperStudiowillinsertadditionaldeclarationsimmediatelybeforethepreviousline.#endif//!defined(AFX_TABDIALOG_H__5CB3DF04_D20F_11D2_96EE_006097CDB9E2__INCLUDED_)//TabDialog.cppimplementationfile//#include"stdafx.h"#include"sa.h"#include"TabDialog.h"#include"DSP56kManager.h"#include"I2CCommErrorDialog.h"#include<afxdlgs.h>#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif#defineTIMERID1#defineID_HDCD_DETECT56000#defineID_ERROR_DISPLAY(ID_HDCD_DETECT+1)staticUINTauIDStatusBar[]={ID_SEPARATOR,ID_HDCD_DETECT,ID_SEPARATOR,ID_ERROR_DISPLAY};#defineAARRAYSIZE16staticchar*Detect_Array[AARRAYSIZE]={"HDCD","HDCD","HDCD","HDCD","HDCD","HDCD","HDCD","HDCD","HDCD","HDCD","HDCD","HDCD","HDCD","DCDH","CDHD","DHDC"};///////////////////////////////////////////////////////////////////////////////CTabAboutDlgdialogusedforAppAboutclassCTabAboutDlgpublicCDialog{publicCTabAboutDlg();//DialogData//{{AFX_DATA(CTabAboutDlg)enum{IDD=IDD_ABOUTBOX};//}}AFX_DATA//ClassWizardgeneratedvirtualfunctionoverrides//{{AFX_VIRTUAL(CTabAboutDlg)protectedvirtualvoidDoDataExchange(CDataExchange"pDX);//DDX/DDVsupport//}}AFX_VIRTUAL//Implementationprotected//{{AFX_MSG(CTabAboutDlg)//}}AFX_MSGDECLARE_MESSAGE_MAP()};CTabAboutDlgCTabAboutDlg()CDialog(CTabAboutDlgIDD){//{{AFX_DATA_INIT(CTabAboutDlg)//}}AFX_DATA_INIT}voidCTabAboutDlgDoDataExchange(CDataExchange*pDX){CDialogDoDataExchange(pDX);//{{AFX_DATA_MAP(CTabAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CTabAboutDlg,CDialog)//{{AFX_MSG_MAP(CTabAboutDlg)  //Nomessagehandlers//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CTabDialogdialogCTabDialogCTabDialog(CWnd*pParent/*=NULL*/)CDialog(CTabDialogIDD,pParent){//{{AFX_DATA_INIT(CTabDialog)  //NOTEtheClassWizardwilladdmemberinitializationhere//}}AFX_DATA_INITm_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);}voidCTabDialogDoDataExchange(CDataExchange*pDX){CDialogDoDataExchange(pDX);//{{AFX_DATA_MAP(CTabDialog)  //NOTEtheClassWizardwilladdDDXandDDVcallshere//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CTabDialog,CDialog)//{{AFX_MSG_MAP(CTabDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_WM_CLOSE()ON_WM_MOVE()ON_WM_CTLCOLOR()ON_COMMAND(IDMENUITEM32771,OnOpenMenu)ON_COMMAND(ID_MENUITEM32772,OnSaveMenu)ON_WM_TIMER()ON_COMMAND(ID_FILE_EXPORTPARAMFILE,OnFileExportparamfile)//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CTabDialogmessagehandlers#definePS_WIDTH222#definePS_HEIGHT215BOOLCTabDialogOnInitDialog(){intpartsList[]=(50,100,150,-1};CDialogOnInitDialog();//Add"About..."menuitemtosystemmenu.//IDM_ABOuTBOXmustbeinthesystemcommandrange.ASSERT((IDM_ABOUTBOX&amp;0xFFF0)==IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX<0xF000);CMenu*pSysMenu=GetSystemMenu(FALSE);if(pSyaMenu!=NULL){CStringstrAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if((strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBDX,strAboutMenu);}}//Settheiconforthisdialog,Theframewokdoesthisautomatically//whentheapplication′smainwindowisnotadialogSetIcon(m_hIcon,TRUE);//SetbigiconSetIcon(m_hIcon,FALSE);//Setsmallicon//buildbrushm_brush.CreateSolidBrush(RGB(0,0,0));//buildpropsheetm_dlgPropSheet.AddPage(&amp;m_MainPage);m_dlgPropSheet.AddPage(&amp;m_DDXPage);m_dlgPropSheet.AddPage(&amp;m_ShelvPage);m_dlgpropSheet.AddPage(&amp;m_CutoffPage);m_dlgpropSheet.AddPage(&amp;m_Notch1Page);m_dlgPropSheet.AddPage(&amp;m_Notch2Page);m_dlgPropSheet.AddPage(&amp;m_StWaveRejPage);m_dlgPropSheet.AddPage(&amp;m_AllpassPage);m_dlgPropSheet.AddPage(&amp;m_DBNotch);m_dlgPropSheet.Create(this,WS_CHILD|WS_VISIBLE,0);m_dIgPropSheet.ModifyStyleEx(0,WS_EX_CONTROLPARENT);m_dlgPropSheet.ModifyStyle(0,WS_TASBTOP);m_dlgPropSheet.SetWindowPos(NULL,0,0,PS_WIDTH,PS_HEIGHT,SWP_NOZORDER|SWP_NOSIZE|SWP_NOACTIVATE);//resizedialogtofitpropsheetexactlyRECTrect;m_dlgPropSheet.GetWindowRect(&amp;rect);//rect.bottom+=14;//rectrioht+=14;SetWindowPos(&amp;wndBottom,rect.left,rect.top,rect.right,rect.bottom,SWP_NOZORDER|SWP_NOMOVE);//AddstatusbarRECTsizerect;sizerect.top=PS_HEIGHT;sizerect.bottom=sizerect.top+20;sizerect.left=0;sizerect.right=PS_WIDTH;//m_StatusBar.Create(WS_CHILD|WS_VISIBLE|CCS_BOTTOM,sizerect,this,AFX_IDW_STATUS_BAR);//m_StatusBar.ShowWindow(SW_SHOWNA);//m_StatusBar.SetSimple();//m_StatusBar.SetText("Helloworld".255.0);m_StatuaBar.Create(this);//m_StatusBar.SetIndicators(auIDStatusBar,sizeof(auIDStatusBar)/sizeof(UINT));//m_StatusBar.SetPaneInfo(0,m_StatusBar.GetItemID(0),SBPS_STRETCH,NULL);//m_StatusBar.GetStatusBarCtrl().SetText("Helloworld!",0,0);CRectrcClientStart;CRectrcClientNow;GetClientRect(rcClientStart);RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,  0,reposQuery,rcClientNow);  //Nowmoveallthecontrolssotheyareinthesamerelative  //positionwithintheremainingclientareaastheywouldbe  //withnocontrolbars./*CPointptOffset(rcClientNow.left-rcClientStart.left,  rcClientNow.top-rcClientStart.top);  CRectrcChild;  CWnd*pwndChild=GetWindow(GW_CHILD);  while(pwndChild)  {  pwndChild->GetWindowRect(rcChild);  ScreenToClient(rcChild);  rcChild.OffsetRect(ptOffset);  pwndChild->MoveWindow(rcChild,FALSE);  pwndChild=pwndChild->GetNextWindow();  }*/  //Adjustthedialogwindowdimensions  CRectrcWindow;  GetWindowRect(rcWindow);  rcWindow.right+=rcClientStart.Width()-rcClientNow.Width();  rcWindow.bottom+=rcClientStart.Height()-rcClientNow.Height();  rcWindow.bottom+=5;  MoveWindow(rcWindow,FALSE);  //Andpositionthecontrolbars  RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);  m_timerID=0;  m_timerID=SetTimer(TIMERID,50,NULL);  m_ErrorCounter=0;  m_HDCDDisplay=false;  DisplayMode(1);  SetWindowText("Untitled");  partsList=rcClientNow.Width()/4;  partsList[1]=partsList+(rcClientNow.Width()/4);  partsList[2]=partsList[1]+(rcClientNow.Width()/4);  partsList[3]=-1;  m_StatusBar.GetStatusBarCtrl().SetParts(sizeof(partsList)/sizeof(int),partsList);  returnTRUE;//returnTRUEunlessyousetthefocustoacontrol  //EXCEPTIONOCXPropertyPagesshouldreturnFALSE}voidCTabDialogOnClose(){//if(m_Page1)//deletem_Page1;//if(m_Page2)//deletem_Page2;//if(m_Page3)//deletem_Page3;if(m_timerID)  KillTimer(m_timerID);deleteg_DSPManager;CDialogOnClose();}voidCTabDialogOnSysCommand(UINTnID,LPARAMlParam){if((nID&amp;0xFFF0)==IDM_ABOUTBOX){  CTabAboutDlgdlgAbout;dlgAbout.DoModal();}else{  CDialogOnSysCommand(nID,lParam);}}voidCTabDialogOnPaint(){//CPaintDCdc(this);//devicecontextforpainting  //TODOAddyourmessagehandlercodehere  //DonotcallCDialogOnPaint()forpaintingmessages  if(IsIconic())  {  CPaintDCdc(this);//devicecontextforpainting  SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);  //Centericoninclientrectangle  intcxIcon=GetSystemMetrics(SM_CXICON);  intCyIcon=GetSystemMetrics(SM_CYICON);  CRectrect;  GetCliencRect(&amp;rect);  intx=(rect.Width()-cxIcon+1)/2;  inty=(rect.Height()-cyIcon+1)/2;  //Drawtheicon  dc.DrawIcon(x,y,m_hIcon);  }  else  {  //m_StatusBar.RedrawWindow();  CDialogOnPaint();  }}voidCTabDialogOnMove(intx,inty){  CDialogOnMove(x,y);  //TODOAddyourmessagehandlercodehere}//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags//theminimizedwindow.HCURSORCTabDialogOnQueryDragIcon(){  return(HCURSOR)m_hIcon;}HBRUSHCTabDialogOnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor){HBRUSHhbr=CDialogOnCtlColor(pDC,pWnd,nCtlColor);//TODOChangeanyattributesoftheDChere//TODOReturnadifferentbrushifthedefaultisnotdesiredreturnhbr;#if0returnm_brush;#endif}voidCTabDialogOnOpeMenu(){//TODO;Addyourcommandhandlercodehere//charBASED_CODEszFilter()="TextFilrs(*.txt)|*.txt||";//CFileDialogfileDlg(TRUE,NULL,NULL,0L,szFilter,NULL);//CFileOialogfileDlg(TRUE);CFileDialogfikDlg(TRUE,"txt",NULL,OFN_HIDEREADONLY,"TextFiles(".txt)|*.txt|All  Files((*.*||*.*,this)if(fileDlg.DoModal()==IDOK)  {  intarray_size=0;  CStringstring;  CStringArrayarray;  CStdioFilefile(fileDlg.GetPathName().CFilemodeRead|CFiletypeText);  while(file.ReadString(string))  {  array.SetAtGrow(array_size.string);  array_size++;  }  g_DSPManager->SetDSPSettings(array);  SetWindowText(fileDlg.GetFileName());  //MM5/13/99Invalidatethewindowsothatwindowisredrawn  Invalidate(false);  }}voidCTabDialogOnSaveMenu(){//TODOAddyourcommandhandlercodehereCFileDialogfileDlg(FALSE,"txt",NULL,OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY,"Text  Files(*.txt)|*.txt||",this);if(fileDlg.DoModal()==IDOK)  {  intarray_index=0;  CStringstring.  CStringArrayarray;  g_DSPManager->GetDSPSettings(array);  CStdioFilefile(fileDlg,GetPathName(),CFilemodeCreate|CFilemodeWrite|CFiletypeText);  while(array_index<array.GetSize())  {  string=array.GetAt(array_index);  file.WriteString(string);  file.WriteString("\n");  array_index++;  }  }}voidCTabDialogOnFileExportparamfile(){CFileDialoqfileDlq(FALSE,"prm",NULL,CFN_OVERWRITEPROMPT|OFN_HIDEREADONLY,"ParameterFiles(*.prm)|*.prm||*,this);if(fileDlg.DoModal()==IDOK)  {  intarray_index=0;  CStringstring;  CStringArrayarray;  g_DSPManager->GetFilterBlob(array);  CStdioFilefile(fileDlg.GetPathName().CFilemodeCreate|CFilemodeWrite|CFiletyPeBinary)  while(array_index<array.GetSize())  {  string=array.GetAt(array_index);  file.WriteString(string);  file.WriteString("\n");  array_index++;}voidCTabDialogOnTimer(UINTnIDEvent){//TODOAddyourmessagehandlercodehereand/orcalldefaultif(nIDEvent==TIMERID)  {  DisplayMode(g_DSPManager->GetHDCDMode());  DisplayI2CState(0L);  }else  {  CDialogOnTimer(nIDEvent);  }}voidCTabDialogDisplayMode(intvalue){if(value<0)  {  DisplayI2CState(-value);  /*chars[100]  sprintf(s,"0x%x",-value);  m_StatusBar.GetStatusBarCtrl().SetText(s,3,0);*/  /*if(m_timerID)  KillTimer(m_timerID);  CI2CCommErrorDialogdlg;  chars[100];  sprintf(s,"0x%x",-value);  dlg.m_ErrorCode=s;  if(dlg.DoModal()==IDCANCEL)  EndDialog(IDCANCEL);  else  m_timerID=SetTimer(TIMERID,50,NULL);*/  }elseif(value)  {  if((m_HDCDDisplay)  {  m_ICnt=0;  m_AIdx=0;  m_StatusBar,GetStatusBarCtrl(),SetText(Detect_Array[m_AIdx++],1,0);  //SetWindowText(Detect_Array[m_AIdx++]);  }  else  {  m_ICnt++;  if(mICnt>5)  {  m_ICnt=0;  m_StatusBar.GetStatusBarCtrl().SetText(Detect_Array[m_AIdx++],1,0);  //SetWindowText(Detect_Array[m_AIdx++]);  if(m_AIdx>=AARRAYSIZE)  m_AIdx=0;  }  }  m_HDCDDisplay=true;}else{  if(m_HDCDDisplay)  m_StatusBar.GetStatusBarCtrl|).SetText("BADCD..NODONUT",1,0);  //SetwindowText("BADCD..NODONUT");  m_HDCDDisplay=false;}voidCTabDialogSetStatusString(intwhich,CString&amp;s){m_StatusBar.GetStatusBarCtrl()SetText(s,0,0);}voidCTabDialogDisplayI2CState(longerror){if(error){  chars[100];  sprintf(s,"0x%x",error);  m_StatusBar.GetStatusBarCtrl().SetText(s,3,0);  m_ErrorCounter=100;//5seconds}else{  if(m_ErrorCounter)  {  m_ErrorCounter--;  if(m_ErrorCounter>0)  return;  }if(g_DSPManager->IsBusy())  {  m_StatusBar.GetStatusBarCtrl().SetText("Transmitting..",3,0);  }  else  {  m_StatusBar.GetStatusBarCtrl().SetText(""3,0);  }}}#if!defined(AFX_STWAVEREJPACE_H_0CF7E209_D790_11D2_96EE_006097CDB9E2__INCLUDED_)#defineAFX_STWAVEREJPAGE_H__0CF7E209_D790_11D2_96EE_006097CDB9E2_INCLUDED_#if_MSC_VER>=1000#pragmaonce#endif//_MSC_VER>=1000//StWaveRejPage.hheaderfile/////////////////////////////////////////////////////////////////////////////////CStWaveRejPagedialogclassCTabDialog;classCStWaveRejPage;publicCPropertyPage{DECLARE_DYNCREATE(CStWaveRejPage)//ConstructionpublicCStWaveRejPagc();-CStWaveRejPage();//DialogData//{{AFX_DATA(CStWaveRejPage)enum{IDD=IDD_PP5};CButtonm_BypassButton;CSliderCtrlm_Notch3BoostSlider;CSliderCtrlm_Notch3QSlider;CSliderCtrlm_Notch2CutSlider;CSliderCtrlm_Notch2QSlider;CSliderCtrlm_Notch2FreqSlider;CSliderCtrlm_Notch1CutSlider;CSliderCtrlm_Notch1QSlider;CSliderCtrlm_Notch1FreqSlider;//}}AFX_DATA//Overrides//ClassWizardgeneratevirtualfunctionoverrides//{{AFX_VIRTUAL(CStWaveRejPage)protectedvirtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport//}}AFX_VIRTUAL//Implementationprotected//Generatedmessagemapfunctions//{{AFX_MSG(CStWaveRejPage)virtualBOOLOnInitDialog();afx_msgvoidOnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar);afx_msgvoidOnShowWindow(BOOLbShow.UINTnStatus);afx_msgvoidOnPaint();afx_msgvoidOnBypass();//}}AFX_MSGDECLARE_MESSAGE_MAP()CTabDialog*m_ParentWindow;voidSendStringToUI(intwhich);};//{{AFX_INSERT_LOCATION}}//MicrosoftDeveloperStudiowillinsertadditionaldeclarationsimmediatelybeforethepreviousline.#endif//!defined(AFX_STWAVEREJPAGE_H_0CF7E209_D790_11D2_96EE_006097CDB9E2_INCLUDED_)//StWaveRejPage.cppimplementationfile//#include"stdafx.h"#include"sa.h"#include"StWaveRejPage.h"#include"TabDialog.h"#include"DSP56kManager.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CStWaveRejPagepropertypageIMPLEMENT_DYNCREATE(CStWaveRejPage,CPropertyPage)CStWaveRejPageCStWaveRejPage()CPropertyPage(CStWaveRejPageIDD){//{{AFX_DATA_INIT(CStWaveRejPage)//}}AFX_DATA_INIT}CStWaveRejPage-CStWaveRejPage(){}voidCStWaveRejPageDoDataExchange(CDataExchange*pDX){CPropertyPageDoDataExchange(pDX);//{{AFX_DATA_MAP(CStWaveRejPage)DDX_Control(pDX,IDC_CHECK5,m_BypassButton);DDX_Control(pDX,IDC_SLIDER9,m_Notch3BoostSlider);DDX_Control(pDX,IDC_SLIDER8,m_Notch3QSlider);DDXControl(pDX,IDC_SLIDER6,m_Notch2CutSlider);DDX_Control(pDX,IDC_SLIDER5,m_Notch2QSlider);DDX_Control(pDX,IDC_SLIDER4,m_Notch2FreqSlider);DDX_Control(pDX,IDC_SLIDER3,m_Notch1CutSlider);DDX_Control(pDX,IDC_SLIDER2,m_Notch1QSlider);DDXControl(pDX,IDC_SLIDER1,mNotch1FreqSlider);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CStWaveRejPage,CPropertyPage)//{{AFX_MSG_MAP(CStWaveRejPage)ON_WM_VSCROLL()ON_WM_SHOWWINDOW()ON_WM_PAINT()ON_BNCLICKED(IDC_CHECK5,OnBypass)//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CStWaveRejPagemessagehandler8BOOLCStWaveRejPageOnInitDialog(){CPropertyPageOnInitDialog();//TODOAddextrainitializationherem_Notch1FreqSlider.SetRange(0,CONTROL_RANGE);m_Notch1FreqSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch3Freq));m_Notch1FreqSlider.SetTicFreq((CONTROL_RANGE+1)/16);m_Notch1FreqSlider.SetPageSize(PG_CONTROL_AMT);m_Notch1QSlider.SetRange(0,CONTROL_RANGE);m_Notch1QSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch3Q));m_Notch1QSlider.SetTicFreq((CONTROL_RANGE+1}/16);m_Notch1QSlider.SetPageSize(PG_CONTROL_AMT);  m_Notch1CutSlider.SetRange(0.CONTROL_RANGE);  m_Notch1CutSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch3Cut));  m_Notch1CutSlider.SetTicFreq((CONTROL_RANGE+1)/16);  m_Notch1CutSider.SetPageSize(PG_CONTROL_AMT);  m_Notch2FreqSlider.SetRange(0,CONTROL_RANGE);  m_Notch2FreqSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch4Freq));  m_Notch2FreqSlider.SetTicFreq((CONTROL_RANGE+1)/16);  m_Notch2FreqSlider.SetPageSize(PG_CONTROL_AMT);  m_Notch2QSlider.SetRange(0,CONTROL_RANGE);  m_Notch2QSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch4Q));  m_Notch2QSlider.SetTicFreq((CONTROL_RANGE+1)/16);  m_Notch2QSlider.SetPageSize(PG_CONTROL_AMT);  m_Notch2CutSlider.SetRange(0,CONTROL_RANGE);  m_Notch2CutSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch4Cut));  m_Notch2CutSlider.SetTicFreq((CONTROL_RANGE+1)/16);  m_Notch2CutSlider.SetPageSize(PG_CONTROL_AMT);  m_Notch3QSlider.SetRange(0,CONTROL_RANGE);  m_Notch3QSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamvalue(kNotchSQ));  m_Notch3QSlider.SetTicFreq((CONTROL_RANGE+1)/16);  m_Notch3QSlider.SetPageSize(PG_CONTROL_AMT);  m_Notch3BoostSlider.SetRange(0,CONTROL_RANGE);  m_Notch3BoostSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch5Cut));  m_Notch3BoostSlider.SetTicFreq((CONTROL_RANGE+1)/16);  m_Notch3BoostSlider.SetPageSize(PG_CONTROL_AMT);  m_ParentWindow=(CTabDialog*)GetParent()->GetParent();  returnTRUE;//returnTRUEunlessyousetthefocustoacontrol  //EXCEPTIONOCXPropertyPagesshouldreturnFALSE}voidCStWaveRejPageSendStringToUI(intwhich){  CStringstr;  g_DSPManager->GetStringValue(which,str);  m_ParentWindow->SetStatusString(0,str);}voidCStWaveRejPageOnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar){//TODOAddyourmessagehandlercodehereand/orcalldefaultCSliderCtrl*slider=(CSliderCtrl*)pScrollBar;intwhich;CPropertyPageOnVScroll(nSBCode,nPos,pScrollBar);Sleep(50);if(slider==&amp;m_NotchlFreqSlider)  which=kNotch3Freqelseif(slider==&amp;m_Notch1QSlider)  which=kNotch3Q;elseif(slider==&amp;m_Notch1CutSlider)  which=kNotch3Cut;elseif(slider==&amp;m_Notch2FreqSlider)  which=kNotch4Freq;elseif(slider==&amp;m_Notch2QSlider)  which=kNotch4Q;elseif(slider==&amp;m_Notch2CutSlider)  which=kNotch4Cut;elseif(slider==&amp;m_Notch3QSlider)  which=kNotch5Q;elseif(slider==&amp;m_Notch3BoostSlloer)  which=kNotch5Cut;else  return;g_DSPManager->SetParamValue(CONTROL_RANGE-slioer->GetPos(),which);SendStringToU1(which);}voidCStWaveRejPageOnShowWindow(BOOLbShow,UINTnStatus){CPropertyPageOnShowWindow(bShow,nStatus);//TODOAddyourmessagehandlercodehere}voidCStWaveRejPageOnPaint(){CPaintDCdc(this);//devicecontextforpainting//TODOAddyourmessagehandlercodeherem_Notch1FreqSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch3Freq));m_Notch1QSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch3Q));m_otch1CutSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch3Cut));m_Notch2FreqSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch4Freq));m_Notch2QSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(Notch4Q));m_Notch2CutSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch4Cut));m_Notch3QSlider.SetPos(CONTRO_RANGE-g_DSPManager->GetParamValue(kNotch5Q));m_Notch3BoostSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kNotch5Cut));m_BypassButton.SetCheck(g_DSPManager->GetBypassSection(kBypassConecry));//DonotcallCPropertyPageOnPaint()forpaintingmessages}voidCStWaveRejPageOnBypass(){//TODOAddyourcontrolnotificationhandlercodehereintstate=m_BypassButton.GetState()&amp;0x3;g_DSPManager->SetBypassSection(state,kBypassConecry);}/*  Thereanumberofblocks(processingunits).  Thesignalflowislinenrcurrently.  Eachitemisanasciilineoftext  Thefileformatisasfollows  versionnumber  blocktype  numberofparamsforblock  blockparam#1  blockparam#2  blockparam#3  blockparam#n  blocktype  numberofparamsforblock  blockparam#1  blockparam#2  blockparam#3  blockparam#n*///fileversionnumber#defineBLOB_FILE_VERSION1//blocktypedescriptortypedefenum{  BLOCK_DELAY,  BLOCK_GAIN,  BLOC_PEQ,  BLOCK_AP,  BLOCK_LS,  BLOCK_HS,  BLOCK_HP,  BLOCK_LP,  BLOCK_LP2}ProcessType;//SPIPEMicroComm.hinterfacefortheSPIPEMicroCommclass.////////////////////////////////////////////////////////////////////////#if!defined(AFX_SPIPEMICROCOMM_H__33F9EF06_F6EF_11D2_96EE_006097CDB9E2__INCLUDED_)#defineAFX_SPIPEMICROCOMM_H__33F9EF06_F6EF_11D2_96EE_006097CDB9E2__INCLUDED_#if_MSC_VER>=1000#pragmaonce#endif//_MSC_VER>=1000#include"DSPComm.h"classSPIPEMicroCommpublicDSPComm{intcmd_delay;intio_delay;publicSPIPEMicroComm();virtual-SPIPEMicroComm();virtuallongSendDSPWord(long);virtuallongSendDSPMemory(char*,long);};#endif//!defined(AFX_SPIPEMICROCOMM_H__33F9EF06_F6EF_11D2_96EE_006097CDB9E2__INCLUDED_)//SPIPEMicroComm.cppimplementationoftheSPIPEMicroCommclass.////////////////////////////////////////////////////////////////////////#include"stdafr.h"#include"sa.h"#include"SPIPEMicroComm.h"#include"unit_ppi.h"#include"functs.h"#ifdef_DEBUG#undefTHIS_FILEstaticcharTHIS_FILE[]*__FILE__;#definenewDEBUG_NEW#endif////////////////////////////////////////////////////////////////////////Construction/Destruction//////////////////////////////////////////////////////////////////////SPIPEMicroCommSPIPEMicroComm(){cmd_delay=1000;io_delay=50;if(load_dll()==false){  MessageBox(NULL,"UNIT_PPInotfoundinthesystemdirectory.Fixthisandrestartapplication.  WillRobinson",MB_OK|MB_ICONSTOP);}else{  init_port_spi(1);  set_cmd_delay_cnt_value(cmd_delay)  set_io_delay_cnt_value(io_delay)}}SPIPEMicroComm-SPIPEMicroComm(){}longSPIPEMicroCocommSendDSPWord(longvalue){return(spi_xchng24(value));}longSPIPEMicIoCommSendDSPMemory(char"data,longlen){return(0L);  }#if!defined(AFX_SHELVPAGE_H__6F151624_D84D_11D2_96EE_006097CDB9E2__INCLUDED_)#defineAFX_SHELVPAGE_H__6F151624_D84D_11D2_96E_006097CDB9E2__INCLUDED_#ifMSCVER>=1000#pTagmaonce#endif//_MSC_VER>=1000//ShelvPage.hheaderfile/////////////////////////////////////////////////////////////////////////////////CShelvPagedialogclassCTabDialog;classCShelvPagepublicCPropertyPage{DECLARE_DYNCREATE(CShelvPage)//ConstructionpublicCShelvPage();-CShelvPage();//DialogData//{{AFX_DATA(CShelvPage)enum{IDD=IDD_PP6};CButtonm_BypassSecondButton;CButtonm_BypassFirstButton;CSliderCtrlm_HiBoostSlider;CSliderCtrlm_HiFreqSlider;CSliderCtrlm_LoBoostSlider;CSliderCtrlm_LoFreqSlider;//}}AFX_DATA//Overrides  //ClassWizardgeneratevirtualfunctionoverrides  //{{AFX_VIRTUAL(CShelvPage)  protected  virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport  //}}AFX_VIRTUAL//Implementationprotected//Generatedmessagemapfunctions//{{AFX_MSG(CShelvPage)virtualBOOLOnInitDialog();afx_msgvoidOnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar);afx_msgvoidOnShowWindow(BOOLbShow,UINTnStatus);afx_msgvoidOnPaint()afx_msgvoidOnBypassFirst();afx_msgvoidOnBypassSecond();//}}AFX_MSGDECLARE_MESSAGE_MAP()CTabDialog*m_ParentWindow;voidSendStringToUI(intwhich)};//{{AFX_INSERT_LOCATION}}//MicrosoftDeveloperStudiowillinsertadditionaldeclarationsimmediatelybeforethepreviousline.#endif//!defined(AFX_SHELVPAGE_H__6F151624_D84D_11D2_96EE_006097CDB9E2__INCLUDED_)//ShelvPage.cppimplementationfile//#include"stdafx.h"#include"sa.h"#include"ShelvPage.h"#include"TabDialog.h"#include"DSP56kManager.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CShelvPagepropertypageIMPLEMENT_DYNCREATE(CShelvPage,CPropertyPage)CShelvPageCShelvPage()CPropertyPage(CShelvPageIDD){//{{AFX_DATA_INIT(CShelvPage)//}}AFX_DATA_INIT}CShelvPage-CShelvPage(){}voidCShelvPageDoDataExchange(CDataExchange*pDX){CPropertyPageDoDataExchange(pDX);//{{AFX_DATA_MAP(CShelvPage)DDX_Control(pDX,IDC_CHECK3,m_BypassSecondButton);DDX_Control(pDX,IDC_CHECK1,m_BypassFirstButton);DDX_Control(pDX,IDC_SLIDER6,m_HiBoostSlider);DDX_Control(pDX,IDC_SLIDET5,m_HiFreqSlider);DDX_Control(pDX,IDC_SLIDER3,m_LoBoostSlider);DDX_Control(pDX,IDC_SLIDER1,m_LoFreqSlider);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CShelvPage,CPropertyPage)//{{AFX_MSG_MAP(CShelvPage)ON_WM_VSCROLL()ON_WM_SHOWWINDOW()ON_WM_PAINT()ON_BN_CLICKED(IDC_CHECK1,OnBypassFirst)ON_BN_CLICKED(IDC_CHECK3,OnBypassSecond)//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CShelvPagemessagehandlersBOOLCShelvPageOnInitDialog(){CPropertyPageOnInitDialog();//TODOAddextrainitializationherem_LoFreqSlider.SetRange(0,CONTROL_RANGE);m_LoFreqSlider.SetPos(CONTRO_RANGE-g_DSPManager->GetParamValue(kLoShelfFreq));m_LoFreqSlider.SetTicFreq((CONTROL_RANGE+1)/16);m_LoFreqSlider.SetPageSize(PG_CONTROL_AMT);m_LoBoostSlider.SetRange(0.CONTROL_RANGE);m_LoBoostSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kLoShelfGain));m_LoBoostSlider.SetTicFreq((CONTROL_RANGE+1)/16);m_LoBoostSlider.SetPageSize(PG_CONTROL_AMT);m_HiFreqSlider.SetRange(0,CONTROL_RANGE);  m_HiFreqSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kHiShelfFreq));  m_HiFreqSlider.SetTicFreq((CONTROL_RANGE+1)/16)  m_HiFreqSlider.SetPageSize(PG_CONTROL_AMT);  m_HiBoostSlider.SetRange(0,CONTROL_RANGE);  m_HiBoostSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kHiShelfGain));  m_HiBoostSlider.SetTicFreq((CONTROL_RANGE+1)/16);  m_HiBoostSlider.SetPageSize(PG_CONTROL_AMT);  m_ParentWindow=(CTabDialog*)GetParent()->GetParent();  returnTRUE;//returnTRUEunlessyousetthefocustoacontrol  //EXCEPTIONOCXPropertyPagesshouldreturnFALSE}voidCShelvPageOnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar){  //TODOAddyourmessagehandlercodehereand/orcalldefault  CSliderCtrl*slider=(CSliderCtrl*)pScrollBar;  intwhich;  CPropertyPageOnVScroll(nSBCode,nPos,pScrollBar);  Sleep(50);  if(slider==&amp;m_LoFreqSlider)  which=kLoShelfFreq;  elseif(slider==&amp;m_LoBoostSlider)  which=kLoShelfGain;  elseif(slider==&amp;mHiFreqSlider)  which=kHiShelfFreq;  elseif(slider==&amp;m_HiBoostSlider)  which=kHiShelfGain;  else  return;  g_DSPManager->SetParamValue(CONTROL_RANGE-slider->GetPos(),which);  SendStringToUI(which);}voidCShelvPageSendStringToUI(intwhich){  CStringstr;  g_DSPManager->GetStringValue(which,str);  m_ParentWindow->SetStatusString(0,str);}voidCShelvPageOnShowWindow(BOOLbShow,UINTnStatus){  CPropertyPageOnShowWindow(bShow,nStatus);  //TODOAddyourmessagehandlercodehere}voidCShelvPageOnPaint(){  CPaintDCdc(this);//devicecontextforpainting  //TODOAddyourmessagehandlercodehere  m_LoFreqSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kLoShelfFreq));  m_LoBoostSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kLoShelfGain));  m_HiFreqSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kHiShelfFreq));  m_HiBoostSlider.SetPos(CONTROL_RANGE-g_DSPManager->GetParamValue(kHiShelfGain));  m_BypassFirstButton.SetCheck(g_DSPManager->GetBypassSection(kBypassLoshelf));m_BypassSecondButton.SetCheck(g_DSPManager->GetBypassSection(kBypassHiShelf));  //DonoTcallCPropertyPageOnPaint()forpaintingmessages}voidCShelvPageOnBypassFirst(){//TODOAddyourcontrolnotificationhandlercodehereintstate=m_BypassFirstButton.GetState()&amp;0x3;g_DSPManager->SetByassSection(state,kBypassLoshelf);}voidCShelvPageOnBypassSecond(){//TODOAddyourcontrolnotificationhandlercodehereintstate=m_BypassSecondButton.GetState()&amp;0x3;g_DSPManager->SetBypassSection(state.kBypassHiShelf);}//MicrosoftDeveloperStudiogeneratedresourcescript//#include"resource.h"#defineAPSTUDIO_READONLY_SYMBOLS/////////////////////////////////////////////////////////////////////////////////GeneratedfromtheTEXTINCLUDE2resource.//#include"afxres.h"/////////////////////////////////////////////////////////////////////////////#undefAPSTUDIO_READONLY_SYMBOLS///////////////////////////////////////////////////////////////////////////////English(U.S.)resources#if!defined(AFX_RESOURCE_DLL)||defined(AFX_TARG_ENU)#ifdefWIN32LANGUAGELANGENGLISH,SURLANGENGLISHUS#pragmacode_page(1252)#endif//_WIN32#ifdefAPSTUDIO_INVOKED/////////////////////////////////////////////////////////////////////////////////TEXTINCLUDE//1TEXTINCLUDEDISCARDABLEBEGIN  "resource.h\0"END2TEXTINCLUDEDISCARDABLEBEGIN  "#include""afxres.h""\r\n"  "\0"END3TEXTINCLUDEDISCARDABLEBEGIN  "#define_AFX_NO_SPLITTER_RESOURCES\r\n"  "#define_AFX_NO_OLE_RESOURCES\r\n"  "#define_AFX_NO_TRACKER_RESOURCES\r\n"  "#define_AFX_NO_PROPERTY_RESOURCES\r\n"  "\r\n"  "#if!defined(AFX_RESOURCE_DLL)||defined(AFX_TARG_ENU)\r\n"  "#ifdef_WIN32\r\n"  "LANGUAGE9,1\r\n"  "#pragmacode_page(1252)\r\n"  "#endif\r\n"  "#include""res\\sa.rc2""//non-MicrosoftVisualC++editedresources\r\n"  "#include""afxres.rc""//Standardcomponents\r\n"  "#endif\0"END#endif//APSTUDIO_INVOKED/////////////////////////////////////////////////////////////////////////////////Icon////IconwithlowestIDvalueplacedfirsttoensureapplicationicon//remainsconsistentonallsystemsIDR_MAINFRAMEICONDISCARDABLE"res\\sa.ico"/////////////////////////////////////////////////////////////////////////////////Dialog//IDD_ABOUTBOXDrALOGDISCARDABLE0,0,259,55STYLEDS_MODALFRAME|WS_POPUP|WS_CAPTION|WS_SYSMENUCAPTION"AboutKOJ′sAmazingTownCrier"FONT8,"MSSansSerif"BEGIN  ICONIDR_MAINFRAME,IDC_STATIC,11,17,21,20  LTEXT"KOJ′sAmazingTownCrierVersion1.0",IDC_STATIC,40,10,  119,8,SS_NOPREFIX  LTEXT"Copyright(C)PMI1999",IDC_STATIC,40,25,119,8  DEFPUSHBUTTON"OK",IDOK,220,7,32,14,WS_GROUPENDIDD_SA_DIALOGDIALOGEX0,0,229,175STYLEDS_MODALFRAME|WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENUEXSTYLEWS_EX_APPWINDOWCAPTION"SuperAudio"FONT8,"MSSansSerif"BEGIN  DEFPUSHBUTTON"OK",IDOK,172,7,50,14  PUSHBUTTON"Cancel",IDCANCEL,172,23,50,14  PUSHBUTTON"PokeSequence#1",IDC_BUTTON1,35,83,109,25  PUSHBUTTON"PokeSequence#2",IDC_BUTTON2,33,123,115,28ENDIDD_DIALOG1DIALOGDISCARDABLE0,0,236,229STYLEDS_MODALFRAME|WS_POPUP|WS_CAPTION|WS_SYSMENUCAPTION"KOJ'sAmazingTownCrier"MENUIDR_MENU1FONT8,"MSSansSerif"BEGINENDIDD_PP1DIALOGDISCARDABLE0,0,195,127STYLEWS_CHILD|WS_DISABLED|WS_CAPTIONCAPTION"Test"FONT8,"MSSansSerif"BEGIN  PUSHBUTTON"SendSPISequence#1",IDC_BUTTON1,57,36,86,22  PUSHBUTTON"SendSPISequence#2",IDC_BUTTON2,55,81,93,31ENDIDD_PP2DIALOGDISCARDABLE0,0,288,146STYLEWS_CHILD|WS_DISABLED|WS_CAPTIONCAPTION"Main"FONT8,"MSSansSerif"BEGIN  CONTROL"Slider1",IDC_SLIDER1,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,58,25,22,86  LTEXT"Pre",IDC_STATIC,28,117,12,8  CONTROL"BypassProcessing",IDC_CHECK1,"Button",BS_AUTOCHECKBOX|  WS_TABSTOP,173,57,76,10  CONTROL"Slider1",IDC_SLIDER3,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,27,25,22,86  LTEXT"Post",IDC_STATIC,57,117,15,B  GROUPBOX"Volume",IDC_STATIC,19,15,135,118  CONTROL"BypasssHDCD",IDC_CHECK2,"Button",BS_AUTOCHECKBOX|  WS_TABSTOP,173,74,76,10  CONTROL"BypassHDCDGainScale",IDC_CHECK3,"Button",  BS_AUTOCHECKBOX|WS_TABSTOP,173,91,98,10  PUSHBUTTON"ResetAll",IDC_BUTTON1,173,31,50,14  CONTROL"AnalogInput",IDC_CHECK4,"Button",BS_AUTOCHECKBOX|  WS_TABSTOP,173,108,56,10  CONTROL"Slider1",IDC_SLIDER7,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,89,25,22,86  LTEXT"Analog",IDC_STATIC,85,117,23,8  CONTROL"Slider1",IDC_SLIDER8,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,119,25,22,86  LTEXT"Delay",IDC_STATIC,117,117,19,8ENDIDD_PP3DIALOGDISCARDABLE0,0,195,127STYLEWS_CHILD|WS_DISABLED|WS_CAPTIONCAPTION"Compression"FONT8,"MSSansSerif"BEGIN  CONTROL"BypassCompression",IDC_CHECK1,"Button",BS_AUTOCHECKBOX|  WS_TABSTOP,29,24,104,10ENDIDD_PP4DIALOGDISCARDABLE0,0,244,159STYLEWS_CHILD|WS_DISABLED|WS_CAPTIONCAPTION"ResonanceCompensation"FONT8,"MSSansSerif"BEGIN  CONTROL"Slider1",IDC_SLIDER1,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,20,24,20,85  CONTROL"Slider1",IDC_SLIDER2,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,48,24,21,85  CONTROL"Slider1",IDC_SLIDER3,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,76,24,20,85  LTEXT"Freq.",IDC_STATIC,17,113,20,11  LTEXT"Q",IDC_STATIC,51,113,8,11  LTEXT"Cut/Boost",IDC_STATIC,71,113,33,11  GROUPBOX"FirstNotch",IDC_STATIC,11,15,98,111  CONTROL"Slider1",IDC_SLIDER4,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,137,24,24,85  CONTROL"Slider1",IDC_SLIDER5,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,165,24,21,85  CONTROL"Slider1",IDC_SLIDER6,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,193,24,22,85  LTEXT"Freq.",IDC_STATIC,135,113,20,11  LTEXT"Q",IDC_STATIC,169,113,8,11  LTEXT"Cut/Boost",IDC_STATIC,189,113,32,11  GROUPBOX"SecondNotch",IDC_STATIC,129,15,98,111  CONTROL"Bypass",IDC_CHECK5,"Button",BS_AUTOCHECKBOX|  WS_TABSTOP,33,136,39,10  CONTROL"Bypass",IDC_CHECK6,"Button",BS_AUTOCHECKBOX|  WS_TABSTOP,153,136,39,10ENDIDD_PP5DIALOGDISCARDABLE0,0,339,162STYLEWS_CHILD|WS_DISABLED|WS_CAPTIONCAPTION"StandingWaveRejection"FONT8,"MSSansSerif"BEGIN  CONTROL"Slider1",IDC_SLIDER1;"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,20,24,20,85  CONTROL"Slider1",IDC_SLIDER2,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,48,24,21,85  CONTROL"Slider1",IDC_SLIDER3,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,76,24,20,85  LTEXT"Freq.",IDC_STATIC,17,113,20,11  LTEXT"Q",IDC_STATIC,51,113,8,11  LTEXT"Cut/Boost",IDC_STATIC,70,113,35,11  GROUPBOX"FirstNotch",IDC_STATIC,11,15,98,111  CONTROL"Slider1",IDC_SLIDER4,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,229,24,24,85  CONTROL"Slider1",IDC_SLIDER5,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,257,24,21,85  CONTROL"Slider1",IDC_SLIDER6,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,285,24,22,85  LTEXT"Freq.",IDC_STATIC,227,113,20,11  LTEXT"Q",IDC_STATIC,261,113,8,11  LTEXT"Cut/Boost",IDC_STATIC,280,113,34,11  GROUPBOX"SecondNotch",IDC_STATIC,221,15,98,111  CONTROL"Slider1",IDC_SLIDER8,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,140,25,21,85  CONTROL"Slider1",IDC_SLIDER9,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,168,25,22,85  LTEXT"Q",IDC_STATIC,144,114,8,11  LTEXT"Cut/Boost",IDC_STATIC,163,114,34,11  GROUPBOX"BoostCompensation",IDC_STATIC,125,15,77,111CONTROL"Bypass",IDC_CHECK5,"Button".BS_AUTOCHECKBOX|  WS_TABSTOP,146,137,41,10ENDIDD_PP6DIALOGDISCARDABLE0,0,187,162STYLEWS_CHILD|WS_DISABLED|WS_CAPTIONCAPTION"Smiley-Face"FONT8,"MSSansSerif"BEGIN  CONTROL"Slider1".IDC_SLIDER1,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,20,24,20,85  CONTROL"Slider1",IDC_SLIDER3,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,50,24,20,85  LTEXT"Freq.",-1,17,113,20,11  LTEXT"Cut/Boost",-1,43,113,34,11  GROUPBOX"Lo-Shelf",-1,11,15,70,111  CONTROL"Slider1",IDC_SLIDER4,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,108,24,24,85  CONTROL"Slider1",IDC_SLIDER6,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,139,24,22,85  LTEXT"Freq.",-1,106,113,20,11  LTEXT"Cut/Boost",-1,134,113,33,11  GROUPBOX"Hi-Shelf",-1,100,15,69,111  CONTROL"Bypass",IDC_CHECK1,"Button",BS_AUTOCHECKBOX|  WS_TABSTOP,25,136,37,12  CONTROL"Bypass",IDC_CHECK3,"Button",BS_AUTOCHECKBOX|  WS_TABSTOP,115,136,37,12ENDIDD_PP7DIALOGDISCARDABLE0,0,242,162STYLEWS_CHILD|WS_DISABLED|WS_CAPTIONCAPTION"CutoffResponse"FONT8,"MSSansSerif"BEGIN  CONTROL"Slider1",IDC_SLIDER1,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,20,24,20,85  CONTROL"Slider1",IDC_SLIDER2,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,48,24,21,85  CONTROL"Slider1",IDC_SLIDER3,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,76,24,20,85  LTEXT"Freq.",IDC_STATIC,17,113,20,11  LTEXT"Q",IDC_STATIC,51,113,8,11  LTEXT"Cut/Boost",IDC_STATIC,71,113,33,11  GROUPBOX"LowCutoff",IDC_STATIC,11,15,98,111  CONTROL"Slider1",IDC_SLIDER4,,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,137,24,24,85  CONTROL"Slider1",IDC_SLIDER5,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,165,24,21,85  CONTROL"Slider1",IDC_SLIDER6,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,193,24,22,85  LTEXT"Freq.",IDC_STATIC,135,113,20,11  LTEXT"Q",IDC_STATIC,169,113,8,11  LTEXT"Cut/Boost",IDC_STATIC,189,113,32,11  GROUPBOX"HighCutoff",IDC_STATIC,129,15,98,111  CONTROL"Bypass",IDC_CHECK5,"Button",BS_AUTOCHECKBOX|  WS_TABSTOP,39,139,41,12  CONTROL"Bypass",IDC_CHECK6,"Button",BS_AUTOCHECKBOX|  WS_TABSTOP,154,139,41,12ENDIDD_PP8DIALOGDISCARDABLE0,0,285,164STYLEWS_CHILD|WS_DISABLED|WS_CAPTIONCAPTION"CutoffResponse"FONT8,"MSSansSerif"BEGIN  CONTROL"Slider1",IDC_SLIDER1,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,20,24,20,85  CONTROL"Slider1",IDC_SLIDER2,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,48,24,21,85  LTEXT"Freq.",-1,17,113,20,11  LTEXT"Q",-1,51,113,8,11  GROUPBOX"LowCutoff",-1,11,15,71,111CONTROL"Slider1",IDC_SLIDER4,"mscttls_trackbar32",TBS_AUTOTICKS|  TBS_VERTTBS_VERT|WS_TABSTOP,112,24,24,85  CONTROL"Slider1",IDC_SLIDER5,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,140,24,21,85  LTEXT"Freq,",-1,110,113,20,11  LTEXT"Q",-1,144,113,8,11  GROUPBOX"HighCutoff",-1,104,15,69,111  CONTROL"Bypass",IDC_CHECK4,"Button",BS_AUTOCHECKBOX|  WS_TABSTOP,25,136,40,13  CONTROL"Bypass",IDC_CHECK5,"Button",BS_AUTOCHECKBOX|  WS_TABSTOP,116,136,40,13  CONTROL"Slider1",IDC_SLIDER8,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,203,25,24,85  CONTROL"Slider1",IDC_SLIDER9,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,231,25,21,85  LTEXT"Freq",-1,201,114,20,11  LTEXT"Q",-1,235,114,8,11  GROUPBOX"NewHighCutoff",-1,195,15,69,111  CONTROL"Bypass",IDC_CHECK7,"Button",BS_AUTOCHECKBOX|  WS_TABSTOP,207,137,40,13ENDIDD_PP9DIALOGDISCARDABLE0,0,244,164STYLEWS_CHILD|WS_DISABLED|WS_CAPTIONCAPTION"ResonanceCompensation#2"FONT8,"MSSansSerif"BEGIN  CONTROL"Slider1",IDC_SLIDER1,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,20,24,20,85  CONTROL"Slider1",IDC_SLIDER2,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,48,24,21,85  CONTROL"Slider1",IDC_SLIDER3,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,76,24,20,85  LTEXT"Freq.",IDC_STATIC,17,113,20,11  LTEXT"Q",IDC_STATIC,51,113,8,11  LTEXT"Cut/Boost",IDC_STATIC,71,113,33,11  GROUPBOX"ThirdNotch",IDC_STATIC,11,15,98,111  CONTROL"Slider1",IDC_SLIDER4,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,137,24,24,85  CONTROL"Slider1",IDC_SLIDER5,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,165,24,21,85  CONTROL"Slider1",IDC_SLIDER6,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,193,24,22,85  LTEXT"Freq.",IDC_STATIC,135,113,20,11  LTEXT"Q",IDC_STATIC,169,113,8,11  LTEXT"Cut/Boost",IDC_STATIC,189,113,32,11  GROUPBOX"FourthNotch",IDC_STATIC,129,15,98,111  CONTROL"Bypass",IDC_CHECK5,"Button",BS_AUTOCHECKBOX|  WS_TABSTOP,36,139,40,12  CONTROL"Bypass",IDC_CHECK6,"Button",BS_AUTOCHECKBOX|  WS_TABSTOP,155,139,40,12ENDIDD_DIALOG2DIAL,OGDISCARDABLE0,0,175,66STYLEDS_MODALFRAME|WS_POPUP|WS_CAPTION|WS_SYSMENUCAPTION"Dialog"FONT8,"MSSansSerif"BEGIN  PUSHBUTTON"Cancel",IDCANCEL,59,34,50,14  LTEXT"InitializingI2C.PleaseWait.....",IDC_STATIC,43,17,  98,8ENDIDD_DIALOG3DIALOGDISCARDABLE0,0,186,132STYLEDS_MODALFRAME|WS_POPUP|WS_CAPTION|WS_SYSMENUCAPTION"Dialog"FONT8,"MSSansSerif"BEGIN  DEFPUSHBUTTON"OK",IDOK,107,95,50,14  CONTROL"COM1",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,23,57,36,  10  CONTROL"COM2",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,23,70,36,10  CONTROL"COM3",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON,23,82,36,  10  CONTROL"COM4",IDC_RADIO4,"Button",BS_AUTORADIOBUTTON,23,95,36,  10  LTEXT"ChooseCOMportandresetDSPboard",IDC_STATIC,28,21,  125,8  GROUPBOX"COMPort",IDC_STATIC,15,45,68,69ENDIDD_DIALOG4DIALOGDISCARDABLE0,0,186,121STYLEDS_MODALFRAME|WS_POPUP|WS_CAPTION|WS_SYSMENUCAPTION"Dialog"FONT8,"MSSansSerif"BEGIN  DEFPUSHBUTTON"OK",IDOK,27,72,50,14  PUSHBUTTON"QuitApp",IDD_BUTTON1,101,72,48,14  LTEXT"I2Ccommunicationerror!",IDC_STATIC,49,25,79,8  EDITTEXTIDC_EDIT1,49,42,68,12,ES_AUTOHSCROLLENDIDD_PP10DIALOGDISCARDABLE0,0,187,162STYLEWS_CHILD|WS_DISABLED|WS_CAPTIONCAPTION"Allpass"FONT8,"MSSansSerif"BEGIN  CONTROL"Slider1",IDC_SLIDER1,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,20,24,20,85  CONTROL"Slider1",IDC_SLIDER3,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,50,24,20,85  LTEXT"Freq.",-1,17,113,20,11  LTEXT"Q",-1,53,113,8,8  GROUPBOX"Allpass",-1,11,15,70,111  CONTROL"Bypass",IDC_CHECK1,"Button",BS_AUTOCHECKBOX|  WS_TABSTOP,25,136,37,12ENDIDD_PP11DIALOGDISCARDABLE0,0,244,159STYLEWS_CHILD|WS_DISABLED|WS_CAPTIONCAPTION"Double-TunedNotch"FONT8,"MSSansSerif"BEGIN  CONTROL"Slider1",IDC_SLIDER1,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,20,24,20,85  CONTROL"Slider1",IDC_SLIDER2,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,48,24,21,85  LTEXT"Freq,",-1,17,113,20,11  LTEXT"Q",-1,51,113,8,11  GROUPBOX"Notch",-1,11,15,70,111  CONTROL"Slider1",IDC_SLIDER5,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,109,24,21,85  CONTROL"Slider1",IDC_SLIDER6,"msctls_trackbar32",TBS_AUTOTICKS|  TBS_VERT|WS_TABSTOP,137,24,22,85  LTEXT"Q",-1,113,113,8,11  LTEXT"Cut/Boost",-1,133,113,32,11  GROUPBOX"Compensation",-1,99,15,71,111  CONTROL"Bypass",IDC_CHECK5,"Button",BS_AUTOCHECKBOX|  WS_TABSTOP,73,136,39,10END#ifndef_MAC/////////////////////////////////////////////////////////////////////////////////Version//VS_VERSION_INFOVERSIONINFOFILEVERSION0,7,4,0PRODUCTVERSION0,7,4,0FILEFLAGSMASK0x3fL#ifdef_DEBUGFILEFLAGS,0x1L#elseFILEFLAGS0x0L#endifFILEOS0x4LFILETYPE0x1LFILESUBTYPE0x0LBEGIN  BLOCK"StringFileInfo"  BEGIN  BLOCK"040904b0"  BEGIN  VALUE"CompanyName","PacificMicrosonicsInc.\0"  VALUE"FileDescription","saMFCApplication\0"  VALUE"FileVersion","0,7,4,0\0"  VALUE"InternalName","sa\0"  VALUE"LegalCopyright","Copyright(C)PMI1999\0"  VALUE"OriginalFilename","sa.EXE\0"  VALUE"ProductName","saApplication\0"  VALUE"ProductVersion","0,7,4,0\0"  END  END  BLOCK"VarFileInfo"  BEGIN  VALUE"Translation",0x409,1200  ENDEND#endif//!_MAC/////////////////////////////////////////////////////////////////////////////////DESIGNINFO//#ifdefAPSTUDIO_INVOKEDGUIDELINESDESIGNINFODISCARDABLEBEGIN  IDD_ABOUTBOX,DIALOG  BEGIN  LEFTMARGIN,7  RIGHTMARGIN,252  TOPMARGIN,7  BOTTOMMARGIN,48  END  IDD_SA_DIALOG,DIALOG  BEGIN  LEFTMARGIN,7  RIGHTMARGIN,222  TOPMARGIN,7  BOTTOMMARGIN,168  END  IDDDIALOG1,DIALOG  BEGIN  LEFTMARGIN,7  RIGHTMARGIN,229  TOPMARGIN,7  BOTTOMMARGIN,222  END  IDDPP1,DIALOG  BEGIN  LEFTMARGIN,7  RIGHTMARGIN,188  TOPMARGIN,7  BOTTOMMARGIN,120  END  IDD_PP2,DIALOGBEGIN  LEFTMARGIN,7  RIGHTMARGIN,281  TOPMARGIN,7  BOTTOMMARGIN,139ENDIDD_PP3,DIALOGBEGIN  LEFTMARGIN,7  RIGHTMARGIN,188  TOPMARGIN,7  BOTTOMMARGIN,120ENDIDD_PP4,DIALOGBEGIN  LEFTMARGIN,7  RIGHTMARGIN,237  TOPMARGIN,7  BOTTOMMARGIN,152ENDIDD_PP5,DIALOGBEGIN  LEFTMARGIN,7  RIGHTMARGIN,332  TOPMARGIN,7  BOTTOMMARGIN,155ENDIDD_PP6,DIALOGBEGIN  LEFTMARGIN,7  RIGHTMARGIN,180  TOPMARGIN,7  BOTTOMMARGIN,155ENDIDD_PP7,DIALOGBEGIN  LEFTMARGIN,7  RIGHTMARGIN,235  TOPMARGIN,7  BOTTOMMARGIN,155ENDIDD_PP8,DIALOGBEGIN  LEFTMARGIN,7  RIGHTMARGIN,278  TOPMARGIN,7  BOTTOMMARGIN,157ENDIDD_PP9,DIALOGBEGIN  LEFTMARGIN,7  RIGHTMARGIN,237  TOPMARGIN,7  BOTTOMMARGIN,157ENDIDD_DIALOG2,DIALOGBEGIN  LEFTMARGIN,7  RIGHTMARGIN,168  TOPMARGIN,7  BOTTOMMARGIN,59ENDIDD_DIALOG3,DIALOGBEGIN  LEFTMARGIN,7  RIGHTMARGIN,179  TOPMARGIN,7  BOTTOMMARGIN.125  END  IDD_DIALOG4.DIALOG  BEGIN  LEFTMARGIN,7  RIGHTMARGIN,179  TOPMARGIN,7  BOTTOMMARGIN,114  END  IDD_PP10,DIALOG  BEGIN  LEFTMARGIN,7  RIGHTMARGIN,180  TOPMARGIN,7  BOTTOMMARGIN,155  END  IDD_PP11,DIALOG  BEGIN  LEFTMARGIN,7  RIGHTMARGIN,237  TOPMARGIN,7  BOTTOMMARGIN,152  ENDEND#endif//APSTUDIO_INVOKED/////////////////////////////////////////////////////////////////////////////////Menu//IDR_ENU1MENUDISCARDABLEBEGIN  POPUP"File"  BEGIN  MENUITEM"Open",ID_MENUITEM32771  MENUITEM"Save",ID_MENUITEM32772  MENUITEM"ExportParamFile",ID_FILE_EXPORTPARAMFILE  ENDEND/////////////////////////////////////////////////////////////////////////////////StringTable//STRINGTABLEDISCARDABLEBEGIN  IDS_ABOUTBOX"&amp;AboutKOJ′sAmazingTownCrier..."END#endif//English(U.S.)resources/////////////////////////////////////////////////////////////////////////////#ifndefAPSTUDIO_INVOKED/////////////////////////////////////////////////////////////////////////////////GeneratedfromtheTEXTINCLUDE3resource.//#define_AFX_NO_SPLITTER_RESOURCES#define_AFX_NO_OLE_RESOURCES#define_AFX_NO_TRACKER_RESOURCES#define_AFX_NO_PROPERTY_RESOURCES#if!defined(AFX_RESOURCE_DLL)||defined(AFX_TARG_ENU)#ifdef_WIN32LANGUAGE9,1#pragmacode_page(1252)#endif#include"res\sa.rc2"//non-MicrosoftVisualC++editedresources#include"afxres.rc"//Standardcomponents#endif/////////////////////////////////////////////////////////////////////////////#endif//notAPSTUDIO_INVOKEDoptcc,cex,cre,loc,so,mu,mex  DEFINEFAST′1′  DEFINEM56362′1′TABLE_COUNTEREQU10RUN_COUNTEREQU10INIT_COUNTEREQU10  orgy(10)$100  orgp(10)$980;**********************************************************;**********************************************************  SECTIONSUPER;**********************************************************;**********************************************************;------------------------------------------------------------;HDCDdetectandexpandcode;------------------------------------------------------------  include′detect,asm′  include′expgain,asm′;**************************************************************************;AdoptedfromMotorolasamplecode.;;**************************************************************************  page132,60  include′ioequ.asm′  include′vectors.asm′;include′mbiquad.asm′  include′mpeq.asm′  include′mshelv.asm′  include′mhipass.asm′  include′mlopass.asm′  include′allpass.asm′  listCONFIGURE_SPIMACRO;move#0,x0;movex0,xM_HSAR;clearI2Caddress  ;M_HCKR  ;bits1312HFM10noisefiltersetting(off)  ;bit1CPOL  ;bit0CPHA  ;  ;00xxxxxxxxxx01;move#1,x0;move#0,x0;movex0,X;M_HCKR;commentedoutcodeshouldyeildavalueot0rorM_HCKR.  ;M_HCSR  ;bit1312HCSRHRIE  ;bit11HCSRHTIE  ;bit10HCSRHBIE  ;bit9HCSRIdle(nocare)  ;bit87HRQEHost-requestenable(assertedifreadytoreceive)  ;bit6HMSTMastermode(disabled)  ;bit5HFIFOFIFOcontrol(disabled)  ;bit4HCKFRClockfreeze(off)  ;bit32HM1024bitmode  ;bit1HI2CEnablesI2Cmode  ;bit0HENEnableport;  ;xx010010000x1001  move#$1209,x0  movex0,XM_HCSR  ;Getcommandtoknownvalue  move#SPITXDEF,x0  movex0,xspixmit;movepxspixmit,xM_HTX  ENDMCONFIGURE_I2CMACRO  turnoffport  move#0,x0  movex0,XM_HCSR  ;leaveaddressalone;move#0,x0;movex0,XM_HSAR;clearI2Caddress;commentedoutcodeshouldyeildavalueof0forM_HCKR.  ;M_HCKR  ;bits1312HFM10noisefiltersettingon  ;  ;11xxxxxxxxxx00  move#>$3000,x0  movex0,X;M_HCKR  ;M_HCSR  ;bit1312HCSRHRIE  ;bit11HCSRHTIE  ;bit10HCSRHBIE  ;bit9HCSRIdle(nocare)  ;bit87HRQEMost-requestenable(assertedifreadytoreceive)  ;bit6HMSTMastermode(disabled)  ;bit5HFIFOFIFOcontrol(disabled)  ;bit4HCKFRClockfreeze(off)  ;bit32HM1024bitmode  ;bit1HI2CEnablesI2Cmode  ;bit0HENEnableport  ;  ;xx011100101x1010  move#$1CAA,x0  movex0,XM_HCSR  ;setcommandtoknownvalue  move#0,x0  movex0,xspixmit;movepxspixmit,xM_HTX  ENDM  XDEFfcontrol  XREFHDCD_DETECT_INIT,HDCD_DETECT,1sbcntl  XREF1temp,rtemp  XREFdcontrol  XREFHDCD_GAIN_INIT,HDCD_DYNAMICS  XREFdetect  XREFrmodel,bitcntlSPITXDEFequ$444444  orgxiDRX_BUFF_BASEds2ARX_BUFF_BASEds2TX_BUFF_BASEds4;unprocessedfollowedbyprocesseddata;RX_PTRds1TX_PTRds1flagsds1scntds1RightRecciveequ0SPIReceivcequ1SPIOverrunequ2SPIFIFOFullequ3SPIUnderrunequ4SPITransmitequ5SPIStateBitequ6spixmitds1spirecvds1shisaveA1ds1shisaveX0ds1shisaveR4ds1shisaveN4ds1NADAds1leftds1rightds1fcontrolds1indexDatads1dpleftds1dprightds1stackds20;interleaveddelayline;independentlylocated  prgx(20)$200DELAYLENEQU128;2.9mSdelaylinesdelayleftdsmDELAYLEN;leftsdelayrightdsmDELAYLEN;right  orgyiYNADAds1volumeds1prefaderds1bypassds1hdcdbpds1gainscalebpds1ddxcompbpds1analoginds1avolumeds1bypassmaskds1BYPASS_NOTCH1EQU0BYPASS_NOTCH2EQU1BYPASS_NOTCH3EQU2BYPASS_NOTCH4EQU3BYPASS_HIPASSEQU4BYPASS_LOPASSEQU5BYPASS_LOSHELVEQU6BYPASS_HISHELVEQU7BYPASS_CONECRYEQU8BYPASS_ALLPASSEQU9BYPASS_DBNOTCHEQU10BYPASS_NLOPASSEQU11delayvalds1;*********************************************;EQ/filterdeclarations;*********************************************;smileyfaceshelfEQ  ;leftchannel  DECLARE_LSH1L,1.,-0.867  DECLARE_HSH2L,1.,-0.867  ;rightchannel  DECLARE_LSH1R,1.,-0.867  DECLARE_HSH2R,1.,-0.867;resonancecompensationPEQ;leftchannel  DECLARE_PEQ1L,1.,-0.9510565,0.7265425  DECURE_PEQ2L,1.,-0.91,0.5  DECLARE_PEQ6L,1.,-0.9510565,0.7265425  DECLARE_PEQ7L,1,-0.91,0.5  ;riqhtchannel  DECLARE_PEQ1R,1.,-0.91,0.5  DECLARE_PEQ2R,1.,-0.91,0.5  DECLARE_PEQ6R,1.,-0.9510565,0.7265425  DECLARE_PEQ7R,1.,-0.91,0.5;standingwaverejectionPEQ  ;leftchannel  DECLARE_PEQ3L,1.,-0.9999803,0.9937365  DECLARE_PEQ4L,1,,-0.91,0.5  DECLARE_PEQ5L,1.,-0.91,0.5  ;rightchannel  DECLARE_PEQ3R,1.,-0.9999803,0.9937365  DECLARE_PEQ4R,1.,-0.91,0.5  DECLARE_PEQ5R,1.,-0.91,0.5;hiandlopassfilters  ;left  DECLARE_HPhpleft,0.0099733,0.25,0.9987285;70Hz  DECLARE_LPlpleft,1.1921856,0.6303886,1.4112871;14000Hz/q=0.22  ;right  DECLARE_HPhpright,0.0099733,0.25,0.9987285;70Hz  DECLARE_LPlpright,1.1921856,0.6303886,1.4112871;14000Hz  ;newlopass  ;left  DECLARE_LPlpleft2,1.,0.,0.  ;right  DECLARE_LPlpright2,1.,0.,0.;allpassfilters  DECLRE_APapleft,-0.91,0.5  DECLRE_APapright,-0.91,0.5;Keithnewnotchwith2gainaroundit.  DECURE_PEQNT1L,1.,-0.9999803,0.9937365  DECLARE_PEQNT2L,1.,-0.91,0.5  DECLARE_PEQNT3L,1.,-0.91,0.5  0ECLARE_PEQNT1R,1.,-0.9999803,0.9937365  DECLARE_PEQNT2R,1.,-0.91,0.5  DECLARE_PEQNT3R,1.,-0.91,0.5;**************************************************************************  orgp$100STARTmain  ori#$03,mr;maskinterrupts  movep#$05000B,XM_PCTL;  move#0,omr,  movec#0,sp;resethardwarestackpointer  movep#$000003,xM_IPRP;ESAIint′senabledandtopPriority  movep#$000007,xM_IPRP;SHI(1)andESAI(2)int′senabled  move#stack,r6;initializestackpointer  move#-1,m6;linearaddressing  move#0,x0  movex0,xDRX_BUFF_BASE  movex0,xDRX_BUFF_BASE+1  movex0,xARX_BUFF_BASEmovex0,xARX_BUFF_BASE+1  movex0,xTX_BUFF_BASE  movex0,xTX_BUFF_BASE+1  movex0,xTX_BUFF_BASE+2  movex0,xTX_BUFF_BASE+3  clra  movea,xflags  movea,x;scnt  ;HDCDdecoderinitialize  move#>1,x0  movex0,xfcontrol  move#>16,x0  movex0,xlsbcntl  jsrHDCD_DETECT_INIT  move#>1,x0  movex0,xdcontrol  jsrHDCD_GAIN_INIT  move#-1,m0  move#-1,m1  move#-1,m2  move#-1,m3  move#-1,m4  move#-1,m5  move#-1,m6  move#-1,m7  ;setupvolumeandbypassswitches  ;outputvolumeissettozerosothatfilterparameterscan  ;bedownloaded,followedbyvolumebeingset  move&amp;>$800000,x0  movex0,yvolume  movex0,yprefader  movex0,yavolume  move#>$7FFFFF,x0  movex0,ybypass  move#>$0,x0  movex0,yhdcdbp  movex0,ygainscalebp  movex0,yddxcompbp  movex0,yanalogin  movex0,ybypassmask  movex0,ydelayval  movex0,xindexData  move#>sdelayleft,x0  movex0,xdpleft  move#>sdelayright,x0  movex0,xdpright  ;initializeEQparams  INIT_PEQ_PARAM1L  INIT_PEQ_PARAM1R  INIT_PEQ_PARAM2L  INIT_PEQ_PARAM2R  INIT_PEQ_PARAM3L  INIT_PEQ_PARAM3R  INIT_PEQ_PARAM4L  INIT_PEQ_PARAM4R  INIT_PEQ_PARAM5L  INIT_PEQ_PARAM5R  INIT_PEQ_PARAM6L  INIT_PEQ_PARAM6R  INIT_PEQ_PARAM7L  INIT_PEQ_PARAM7R  INIT_PEQ_PARAMNT1L  INIT_PEQ_PARAMNT2L  INIT_PEQ_PARAMNT3LINIT_PEQ_PARAMNT1R  INIT_PEQ_PARAMNT2R  INIT_PEQ_PARAMNT3R  INIT_SH_PARAM1L  INIT_SH_PARAM1R  INIT_SH_PARAM2L  INIT_SH_PARAM2R  INIT_LP_PARAMlpleft  INIT_LP_PARAMlpright  INIT_LP2_PARAMlpleft2  INIT_LP2_PARAMlpright2  INIT_AP_PARAMapleft  INIT_AP_PARAMapright  ;hi-passdoesnotneedinitializingasallparamsaredownloaded  ;setupserialhostinterface  ;;CONFIGURE_SPI  CONFIGURE_I2C;------------------------------------------------------------;FST/FSRandSCKT/SCKRaregeneratedfromthePLD;andfedtotheDSP,A/DandD/Aconverters;------------------------------------------------------------;putesaiinresetstate.;IF@DEF(′ANALOGIN′)==0  movep#$000000,x;M_PCRC;MLS12/20/97  movep#$000000,x;M_PRRC;MLS12/20/97;ENDIF  movep#$0c0200.xM_TCCR  ;FSTisinput(bit22=0)  ;externalclocksourcedrivesSCKT(bit21=0)  ;negativeFSTpolarity(bit19=1)  ;data&amp;FSTclockedoutonrisingedge(bit18=1)  ;2wordsperframe(bit139=00001)  movep#$0C0200.xM_RCCR  ;FSRisinput(bit22=0)  ;externalclocksourcedrivesSCKR(bit21=0)  ;negativeFSRpolarity(bit19=1)  ;data&amp;FSRclockedinonrisingedge(bit18=0)BAK(121997)  ;2wordsperframe(bit139=00001)  movep#$000000,xM_SAICRmovep#Sd17D03,xM_RCR  ;Rx1,RX0enabled(bit10=11)  ;Rx2,RX3disabled(bit32=00)  ;reserved(bit54=00)  ;MSBshiftedfirst(bit6=0)  ;wordleft-aligned(bit7=0)  ;networkmode(bit98=01)  ;32-bitslotlength,24-bitwordlength(bit1410=11111)  ;word-lengthframesync(bit15=0)  ;framesyncoccurs1clockcycleearlier(bit16=1)  ;reserved(bit1917=000)  ;RLIE,RIE,REIEenabled(bit2320=0101)  ;bit23RLIE  ;bit22RIE  ;bit21REDIE  ;bit20REIE  movep#Sd13d00,xM_TCR;MLS12/20/97  ;TX0,TX1enabled(bit30=0011)  ;TX2,TX3,TX4,TX5disabled(bit54=00)  ;MSBshiftedfirst(bit6=0)  ;wordleft-aligned(bit7=0)  ;networkmode(bit98=01)  ;32-bitslotlength,24-bitwordlength(bit1410=11111)  ;wordlengthframesync(bit15=0)  ;framesyncoccurs1clockcycleearlier(bit16=0)  ;reserved(bit1917=000)  ;TLIE,TIE,TEIEenabled(bit2320=0101)  ;bit23TLIE.  ;bit22TIE  ;bit21TEDIE  ;bit20TEIE  movep#$000edb,xM_PCRC;MLS12/20/97  movep#$000edb,xM_PRRC;MLS12/20/97  movep#$ffffff,xM_RSMA;MLS12/20/97  movep#$ffffff,xM_RSMB;MLS12/20/97  movep#$000003,xM_TSMA  movep#$000003,xM_TSMB  movep#$000000,xM_TX0;zeroouttransmitter0  movep#$000000,xM_TX1;zeroouttransmitter1  movep#$000000,xM_TX2;zeroouttransmitter2  movep#$000000,xM_TX3;zeroouttransmitter3  bset#0,xM_TCR;nowenableTX0  bset#1,xM_TCR;nowenableTX1  bset#2,xM_TCR;nowenableTX2  bset#3,xM_TCR;nowenableTX3  bset#2,xM_RCR;RE2andTE3mustbesettoenable  ;TX3anddisableRX2  ;turnonserialhostinterface  bset#0,XM_HCSR  andi#$FC,mr;enableallinterruptlevels  ;clearscalingbits  bclr#RightReceive,Xflags;jclr#RightReceive,Xflags,*;bclr#RightReceive,Xflags;jclr#RightReceive,Xflags,*;move#>RX_BUFF_BASE,x0;movex0,xRX_PTR;move#>TX_BUFF_BASE,x0;movex0,xTX_PTR;------------------------------------------------------------;Mainloop;------------------------------------------------------------LOOPjclr#RightReceive,xflags,*bclr#RightReceive,xflagsbtst#22,yanalogin.IF<CC>  movexDRX_BUFF_BASE,x0;receiveleft  movexDRX_BUFF_BASE+1,x1;receiveright.ELSE  movexARX_BUFF_BASE,x0;receiveleft  movexARX_BUFF_BASE+1,x1;receiveright.ENDI;storeunprocessed(withvolume)outputfirstmoveyavolume,y0mpyry0,x0,ampyry0,x1,b;MM5/20/99Swappedchannelstfrx0,aa,xTX_BUFF_BASE+2;transmitlefttfrx1,bb,xTX_BUFF_BASE;transmitright;writeinputintodelaylinemove#DELAYLEN-1,m0move#DELAYLEN-1,m1movexdpleft,r0movexdpright,r1moveydelayval,y0move#>DELAYLEN,x0mpyx0,y0,aa,x(r0)-moveb,x(r1)-movea,n0movea,n1movex(r0+n0),amovex(r1+n1),bmove#-1,m0move#-1,m1mover0,xdpleftmover1,xdprightJSRSTEREO_PROCESS;MM5/20/99Swappedchannelsmoveb,xTX_BUFF_BASE+1;transmitleftmovea,xTX_BUFF_BASE+3;transmitrightmove#>1,x0movexscnt,aaddx0,amovea1,xscnt;don′tsaturatejmpLOOP;------------------------------------------------------------;Subroutines;------------------------------------------------------------STEREO_PROCESS  movea,xleft  moveb,xright  ;copyparametersfromleftchannelEQstorightchannelEQs  COPY_SH_PARAM1L,1R  COPY_SH_PARAM2L,2R  COPY_PEQ_PARAM1L,1R  COPY_PEQ_PARAM2L,2R  COPY_PEQ_PARAM3L,3R  COPY_PEQ_PARAM4L,4R  COPY_PEQ_PARAM5L,5R  COPY_PEQ_PARAM6L,6R  COPY_PEQ_PARAM7L,7RCOPY_PEQ_PARAMNT1L,NT1R  COPY_PEQ_PARAMNT2L,NT2R  COPY_PEQ_PARAMNT3L,NT3R  COPY_HP_PARAMhpleft,hpright  COPY_LP_PARAMlpleft,lpright  COPY_LP_PARAMlpleft2,lpright2  COPY_AP_PARAMapleft,apright  ;HDCDprocessing  jset#22,yhdcdbp,doeq  movexleft,a  movexright,b  movea,x;ltemp  moveb,xrtemp  clrb  move#>1,x0  moveygainscalebp,a  tsta  teqx0,b  moveb1,xdcontrol  jsrHDCD_DETECT  ;destroycode  move#>3,x0  movexrmodel,a  cmpx0,a  bneskip_code_dest  move#>8,x0  movexbitcntl,a  cmpx0,a  bneskip_code_dest  movexltemp,a  eor#>$000100,a  movea,xltemp  movea,xleftskip_code_dest  move#-1,m0  move#-1,m4  move#4,n4  jsrHDCD_DYNAMICS  movexltemp,a  movexrtemp,b  btst#22,yhdcdbp  .IF<CC>  movea,xleft  moveb,xright  movexdetect,x0  movex0,xspixmit  .ELSE  move#0,x0  movex0,xspixmit  .ENDI;jmpdoeq1;doeq;;move#0,x0;movex0,xspixmitdoeq1  jset#22,ybypass,dopostvol  movexleft,x1movexright,y1  moveyprefader,x0  mpyr-x0,x1,a  mpyr-x0,y1,b  tfra,bb,xright  ;smileyface  jset#BYPASS_LOSHELV,ybypassmask,_skiplsl  LSH1L_skiplsl  jset#BYPASS_HISHELV,ybypassmask,_skiphsl  HSH2L_skiphsl  ;cut-offresponse  jset#BYPASS_HIPASS,ybypassmask,_skiphpl  HPhpleft_skiphpl  jset#BYPASS_LOPASS,ybypassmask,_skiplp1  LPlpleft_skiplp1  jset#BYPASS_NLOPASS,ybypassmask,_skiplp2l  LPlpleft2_skiplp2l  ;resonanceEQ  jset#BYPASS_NOTCH1,ybypassmask,_skip1l  PEQ1L_skip1l_jset#BYPASS_NOTCH2,ybypassmask,_skip2l  PEQ2L_skip2l  jset#BYPASS_NOTCH3,ybypassmask,_skip3l  PEQ6L_skip3l  jset#BYPASS_NOTCH4,ybypassmask,_skip4l  PEQ7L_skip4l  ;cone-cry  jset#BYPASSCONECRY,ybypassmask,_skipccl  PEQ5L  PEQ3L  PEQ4L_skipccl  ;double-tunednotch  jset#BYPASS_DBNOTCH,ybypassmask,_skipdbnl  PEQNT1L  PEQNT2L  PEQNT3L_skipdbnl  ;all-pass  jset#BYPASS_ALLPASS,ybypassmask,_skipapl  APapleft_skipapl  moveb,xleft  movexright,b  ;smileyface  jset#BYPASS_LOSHELV,ybypassmask,_sklpisr  LSH1R_skiplsr  jset#BYPASS_HISHELV,ybypassmask,_skiphsr  HSH2R_skiphsr  ;cut-offresponse  jset#ByPASS_HIPASS,ybypassmask,_skiphpr  HPhpright_skiphpr  jset#BYPASS_LOPASS,ybypassmask,_skiplpr  LPlpright_skiplpr  jset#BYPASS_NLOPASS,ybypassmask,_skiplp2rLPlpright2_skiplp2r  ;resonanceEQ  jset#BYPASS_NOTCH1,ybypassmask,_skip1r  PEQ1R_skip1r  jset#BYPASS_NOTCH2,ybypassmask,_skip2r  PEQ2R_skip2r  jset#BYPASS_NOTCH3,ybypassmask,_skip3r  PEQ6R_skip3rjset#BYPASS_NOTCH4,ybypassmask,_skip4r  PEQ7R_skip4r  ;cone-cry  jset#BYPASS_CONECRY,ybypassmask,_skipccr  PEQ5R  PEQ3R  PEQ4R_skipccr;  ;double-tunednotch  jset#BYPASS_DBNOTCH,ybypassmask,_skipdbnr  PEQNT1R  PEQNT2R  PEQNT3R_skipdbnr  ;all-pass  jset#BYPASS_ALLPASS,ybypassmask,_skipapr  APapright_skipapr  moveb,xrightdopostvolplainvol  moveyvolume,y0  movexleft,x0  movexright,xl  mpyr-x0,y0,a  mpyr-x1,y0,b  rtsorgxiorgyiorgp;------------------------------------------------------------;SHIinterrupts-----------------------------------------------------------;;----SHI/I2CreceiveISRshi_rx_isr  movea1,xshisaveA1  movex0,xshisaveX0  mover4,xshisaveR4  moven4,xshisaveN4  movepxM_HRX,a1  jset#SPIStateBit,xflags,_gotData  ;gotindex  movea1,xindexData  bset#SPIStateBit,xflags  jmp_exitInt  ;gotdata_gotData  movexindexData.n4  move#pptrs.r4bclr#SPIstateBit.xflags  movemp(r4+n4),r4  movea1,y(r4)_exitInt  movexshisaveA1,a1  movexshisaveX0,x0  movexshisaveR4,r4  movexshisaveN4,n4  rti  ;----SHI/I2Creceiveoverrunerrorshi_rxe_isr  movepxM_HCSR,xNADA  movepxM_HRX,xNADA  bset#SPIOverrun,xflags  bclr#SPIStateBit,xflags  rtiSHIReceiveFIFOFullshi_rxf_isr  movepxM_HCSR,xNADA  movepxM_HRX,xNADA  bset#SPIFIFOFull,xflags  bclr#SPIStateBit,xflags  rti;SHITransmitDatashi_txu_isr;SHITransmitUnderrunError  bset#SPIUnderrun,xflags  movepxM_HCSR,xNADA  movepxspixmit,xM_HTX  bclr#SPIStateBit,xflags  rtishi_tx_isr  movepxspixmit,xM_HTX  bset#SPITransmit,xflags  rti  ;SHIBusErrorshi_bus_error;movepxM_HCSR,xNADA;bset#SPIReceive+4,xflags  ;resetshi  bclr#0,xM_HCSR  nop  nop  bset#0,xM_HCSR  bclr#SPIStateBit,xflags  nop  rti;------------------------------------------------------------;Subroutines;-----------------------------------------------------------;include′isr_dig.asm′;------------------------------------------------------------;InterruptServiceRoutines;------------------------------------------------------------esai_txe_isr;ESAITRANSMITISR  bclr#14,xM_SAISR;ReadSAISRtocleartransmit  ;underrunerrorflagesai_tx_isr  jset#13,xM_SAISR,TxLeftSlot  movepxTX_BUFF_BASE+2,xM_TX1;writeunprocesseddata  movepxTX_BUFF_BASE+3,xM_TX0  movepxTX_BUFF_BASE+3,xM_TX2movepxTX_BUFF_BASE+3,xM_TX3  rti  TxLeftSlot  movepxTX_BUFF_BASE,xM_TX1;writeunprocesseddata  movepxTX_BUFF_BASE+1,xM_TX0  movepxTX_BUFF_BASE+1,xM_TX2  movepxTX_BUFF_BASE+1,xM_TX3  rti  esai_txls_isr;ESAITRANSMITLASTSLOTISR  ;mover0,x(r6)+;Saver0tothestack  ;move#TX_BUFF_BASE,r0;Resetpointer  ;mover0,xTX_PTR;Resettxbufferpointerjustin  ;;caseitwascorrupted  ;movex-(r6),r0;Restorer0  rtiesai_rxe_isr;ESAIRECEIVEISR  bclr#7,xM_SAISR;ReadSAISRtoclearreceiveoverrunerrorflag  ;overrunerrorflagesai_rx_isr  jset#$6,xM_SAISR,LeftSlot  bset#RightReceive,xflags;ifrightchanneldatathensetflag  movepxM_RX0,xARX_BUFF_BASE+1  movepxM_RX1,xDRX_BUFF_BASE+1  rtiLeftSlot  movepxM_RX0,xARX_BUFF_BASE  movepxM_RX1,xDRX_BUFF_BASE  rtiesai_rxls_isr;ESAIRECEIVELASTSLOTISR;mover0,x;(r6)+;Saver0tothestack;move#RX_BUFF_BASE,r0;Resetrxbufferpointerjustin  ;caseitwascorrupted;mover0,x;RX_PTR;Updaterxbufferpointer;movex-(r6),r0;Restorer0  rti;variablelookuptablepptrs  dcvolume  dcsh_gamma_1L  dcsh_k_1L  dcsh_gamma_2L  dcsh_k_2L  dcpeq_gamma_1L  dcpeq_beta_1L  dcpeq_k_1L  dcpeq_gamma_2L  dcpeq_beta_2L  dcpeq_k_2L  dcpeq_gamma_3L  dcpeq_beta_3L  dcpeq_k_3L  dcpeq_gamma_4L  dcpeq_beta_4L  dcpeq_k_4L  dcpeq_gamma_5L  dcpeq_beta_5L  dcpeq_k_5L  dcprefader  dcbypass  dchp_scale_hpleft  dchp_fc_hpleft  dchp_qc_hpleftdclp_scale_lpleft  dclp_a2_lplefc  dclp_a1_lpleft  dchdcdbp  dcgainscalebp  dcddxcompbp  dcpeq_gamma_6L  dcpeq_beta_6L  dcpeq_k_6L  dcpeq_gamma_7L  dcpeq_beta_7L  dcpeq_k_7L  dcanalogin  dcavolume  dcbypassmask  dcdelayval  dcap_gamma_apleft  dcap_beta_apleft  dclp_scale_lpleft2  dclp_a2_lpleft2  dclp_a1_lpleft2;dclp_b2_lpleft2;dclp_b1_lpleft2  dcpeq_gamma_NT1L  dcpeq_beta_NT1L  dcpeq_k_NT1L  dcpeq_gamma_NT2L  dcpeq_beta_NT2L  dcpeq_k_NT2L  dcpeq_gamma_NT3L  dcpeq_beta_NT3L  dcpeq_k_NT3L  dcYNADA  dcYNADA  dcYNADA  ENDSEC  endSH_SCALE_FACTOREQU3SH_SCALE_DIVIDEEQU(1<<SH_SCALE_FACTOR);;kisgain;k=0=>lo/hipassfilter;0<k<1=>cut;k=1=>pass-thru;k>1=>boost;;gammadrivescriticalfrequency;;DECLARE_LSH_MACROname,k,gamma  orgxi;sh_x_\namedc0;x(n-1)sh_y_\namedc0;y(n-1)  orgyish_gamma_\namedcgammash_minus_one_\namedc-1,0sh_k\namedck/SH_SCALE_DIVIDEsh_1_\namedc1./SH_SCALE_DIVIDE  ENDMDECLARE_HSHMACROname,k,gamma  DECLARE_LSHname,k,gamma  ENDMCOPY_SH_PARAMMACROfrom,to  moveysh_gamma_\from,x0  movex0,ysh_gamma_\to  moveysh_k_\from,x0  movex0,ysh_k_\to  ENDMINIT_SH_PARAMMACROname  move#>(-1,0),x0  movex0,ysh_minus_one_\name  move#>(1./SH_SCALE_DIVIDE),x0  movex0,ysh_k_\name  movex0,ysh_1_\name  ENDM;;inputdataisinx0;inputisscaledby0.5topreventinternalclippingintheall-pass;;computesall-pass;;y(n)=-gamma*x(n)-x(n-1)-gamma*y(n-1)(lo-shelv);y(n)=gamma*x(n)+x(n-1)-gamma*y(n-1)(hi-shelv);;all-passoutputisscaledbygain;;output=((1+k)/2)*x(n)+((1-k)/2)*y(n);;assumes;m0,m4,m5=-1;;LSHMACROname  asrb#sh_gamma_\name,r4  rndb#shx\name,r0  moveb,x0y(r4)+,y0  ;computey(n)  mpy-x0,y0,bx(r0)+,x1y(r4)+,y1  macx1,y1,bx(r0)-,x1  macr-y0,x1,bx0,x(r0)+y(r4)+,y0  ;all-passoutputinb,nowscalebygain/cutfactor  mpyx0,y0,bb,x(r0)-b,y1  mac-y1,y0,by(r4)+,y0  macx0,y0,b  macy1,y0,b  ;nowscaleoutputtogetrealresult  asl#(SHSCALEFACTOR),b,b  rndb  ENDMHSHMACROname  asrb#sh_gamma_\name,r4  rndb#shx\name,r0  moveb,x0y(r4)+,y0  ;computey(n)  mpyx0,y0,bx(r0)+,x1y(r4)+,y1  mac-x1,y1,bx(r0)-,x1  macr-y0,x1,bx0,x(r0)+y(r4)+,y0  ;all-passoutputinb,nowscalebygain/cutfactor  mpyx0,y0,bb,x(r0)-b,y1  mac-y1,y0,by(r4)+,y0  macx0,y0,b  macy1,y0,b  ;nowscaleoutputtogetrealresult  asl#(SHSCALEFACTOR),b,b  rndb  ENDMPEQ_SCALE_FACTQREQU3PEQ_SCALE_DIVIDEEQU(1<<PEQ_SCALE_FACTOR);;kisgain;k=0=>notchfilter;0<k<1=>cut;k=1=>pass-thru;k>1=>boost;;gammadrivescriticalfrequency;;betadefinesQ;DECLARE_PEQMACROname,k,gamma,beta  orgxipeq_y_\namedc0  dc0pe_q_x_\namedc0  dc0  orgyipeq_gammma_\namedcgammapeq_beta_\namedcbetapeq_k_\namedck/PEQ_SCALE_DIVIDEpeq_1_\namedc1./PEQ_SCAE_DIVIDEpeq_v_\namedc0peq_w_\namedc0  ENDMCOPY_PEQ_PARAMMACROfrom,to  moveypeq_gamma_\from,x0  movex0,ypeq_gamma_\to  moveypeq_beta_\from,x0  movex0,ypeq_beta_\to  moveypeq_k_\from,x0  movex0,ypeq_k_\to  ENDMINIT_PEQ_PARAMMACROname  move#>(1./PEQ_SCALE_DIVIDE),x0  movex0,ypeq_k_\name  movex0,ypeq_1_\name  ENDM;inputdataisinb;inputisscaledby0.5topreventinternalclippingintheall-pass;;computesall-pass;v(n)=gamma*y(n-1)+y(n-2)-gamma*v(n-1);w(n)=gamma*x(n-1)+x(n-2)-gamma*w(n-1);y(n)=w(n)+beta*x(n)-beta*v(n);;all-passoutputisscaledbygain;;output=((1+k)/2)*x(n)+((1-k)/2)*y(n);assumes;m0,m4,m5=-1;;PEQMACROname  asrb#peq_y_\name,r0  move#peq_gamma_\name,r4  move#peq_v_\name,r5  moveb,x0  movex(r0)+,ay(r4)+,y0  movex(r0)+,x1y(r5)+,y1  ;computev(n)  macx1,y0,ax(r0)+,b  mac-y1,y0,ax(r0),x1y(r5),y1  ;computew(n),v(n)isnowina  macx1,y0,ba,x1a,y(r5)+  mac-y1,y0,bx(r0),ay(r4)+,y0  ;computey(n),w(n)isnowinb  mac-x1,y0,bx0,x(r0)-b,y(r5)-  macx0,y0,ba,x(r0)-y(r4)+,y0  ;all-passoutputinb,nowscalebygain/cutfactor  mpyx0,y0,bx(r0)-,ab,y1  mac-y1,y0,by(r4)+,y0  macx0,y0,ba,x(r0)+  macy1,y0,by1,x(r0)-  ;nowscaleoutputtogetrealresult  asl#(PEQ_SCALE_FACTOR),b,b  rndb  ENDMLP_SCALE_FACTOREQU6LP_SCALE_DIVIDEEQU(1<<LP_SCALE_FACTOR);;modifiedchamberlinlo-pass(bothx(n)andx(n-1));;qalsodefinesgain;inputisscaledtoavoidinternalclipping;;f=2*sin(w/2)fonlyvalidwhenlessthan1.;;0<q<1;;implementedasadirectformbiquadwithcoefficientsanddatascaled.;needsheadroomforgain;DECLARE_LPMACROname,ca1,ca2,cb  orgxilp_w_\nameds2  orgyilp_scale_\namedccb/16.lp_a2_\namedcca2/2.lp_a1_\namedcca1/2.lp_b2_\namedc0.0lp_b1_\namedc1.0/2.  ENDMCOPY_LP_PARAMMACROfrom,to  moveylp_scale_\from,x0  movex0,ylp_scale_\to  moveylp_a2_\from,x0  movex0,ylp_a2_\to  moveylp_a1_\from,x0  movex0,ylp_al_\to  moveylp_b2_\from,x0  movex0,ylp_b2_\to  moveylp_b1_\from,x0  movex0,ylp_b1_\to  ENDMINIT_LP_PARAMMACROname  move#0,x0  movex0,ylp_b2_\name  movex0,ylp_a2_\name  movex0,ylp_a1_\name  movex0,ylp_b1_\name  move#>(1./16.),x0  movex0,ylp_scale_\name  ENDMINIT_LP2_PARAMMACROname  move#0,x0  movex0,ylp_a2_\name  movex0,ylp_a1_\name  move#>0.5,x0  movex0,ylp_b2_\name  move#>1.,x0  movex0,ylp_b1_\namemove#>(025/16.),x0  movex0,y1p_scale_\name  ENDM;;assumes;m0,m4,m5=-1;;LPMACROname  moveb,x0  ori#8,mr  move#lp_scale_\name,r4  move#lp_w_\name,r0  movey(r4)+,y0;x0=x(n),y0=0.5  mpyx0,y0,bx(r0)+,x0y(r4)+,y0;x0=w(n-2),y0=a2  mac-x0,y0,bx(r0)-,x1y(r4)+,y0;x1=W(n-1),y0=a1  macr-x1,y0,bx1,x(r0)+y(r4)+,y0;w(n-2)=w(n-1),y0=b2  macx0,y0,bb,x(r0)-y(r4)+,y0;w(n-1)=a,y0=b1  macrx1,y0,b  andi#SF7,mr  asl#4,b,b  ENDMHP_SCALE_FACTOREQU6HP_SCALE_DIVIDEEQU(1<<HP_SCALE_FACTOR);;;chamberlinhi-pass(fromlopass);;qalsodefinesgain;inputisscaledtoavoidinternalclipping;;f=2*sin(w/2)fonlyvalidwhenlessthan1.;;0<q<1;;implementedasadirectformbiquadwithcoefficientsanddatascaled.;needsheadroomforgain;DECLARE_HPMACROname,fc,qc,scale  orgxihp_s2_\nameds1hp_y_\nameds1  orgyihp_scale_\namedc(-0.5*scale)hp_fc_\namedcfchp_qc_\namedcqc  ENDMCOPY_HP_PARAMMACROfrom,to  moveyhp_scale_\from,x0  movex0,yhp_scale_\to  moveyhp_fc_\from,x0  movex0,yhp_fc_\to  moveyhp_qc_\from,x0  movex0,yhp_qc_\to  ENDM;;assumes;m0,m4,m5=-1;;HPMACROname  move#hp_scale_\name,r4  move#hp_s2_\name,r0  moveb,x0y(r4)+,y0;y0=scale  ;a=x(n)*acale  mpy-y0,x0,ax(r0)+,x1y(r4)+,y0;y0=fc  ;b=s2(n-1)*fc  mpyrx1,y0,bx(r0),x0y(r4)+,y1;y1=qc  ;b=s2(n-1)*fc+y(n-1)  addx0,b  ;a=x(n)-s2(n-1)*fc-y(n-1)  subb,ab,x(r0)  ;a=s1(n)=x(n)-s2(n-1)*fc-y(n-1)-qc*s2(n-1)  macr-x1,y1,ax1,b  movea,x0  ;b=s2(n)=s2(n-1)+fc*s1(n)  macrx0,y0,bx(r0)-,x0IF@DEF(′LO′)tfrx0,bb,x(r0)EL5Etfra,bb,x(r0)ENDIFaslbENDMAP_SCALE_FACTOR_EQU3AP_SCALE_DIVIDEEQU(1<<AP_SCALE_FACTOR);;gammadrivescriticalfrequency;;betadefinesQ;DECLARE_APMACROname,gamma,betaorgxiap_y_\namedc0  dc0ap_x_\namedc0  dc0  orgyiap_gamma_\namedcgammaap_beta_\namedcbetaap_v_\namedc0ap_w_\namedc0ENDMCOPY_AP_PARAMMACROfrom,to  moveyap_gamma_\from,x0  movex0,yap_gamma_\to  moveyap_beta_\from,x0  movex0,yap_beta_\to  ENDMINIT_AP_PARAMMACROname  ENDM;;inputdataisinb;inputisscaledby0.5topreventinternalclippingintheall-pass;;computesall-pass;;v(n)=gamma*y(n-1)+y(n-2)-gamma*v(n-1);w(n)=gamma*x(n-1)+x(n-2)-gamma*w(n-1);y(n)=w(n)+beta*x(n)-beta*v(n);;assumes;m0,m4,m5=-1;;APMACROname  asrb#ap_y_\name,r0  move#ap_gamma_\name,r4  move#ap_v_\name,r5  moveb,x0  movex(r0)+,ay(r4)+,y0  movex(r0)+,x1y(r5)+,y1  computev(n)  macx1,y0,ax(r0)+,b  mac-y1,y0,ax(r0),x1y(r5)-,y1  ;computew(n),v(n)isnowina  macx1,y0,ba,x1a,y(r5)+  mac-y1,y0,bx(r0),ay(r4)+,y0  ;computey(n),w(n)isnowinb  mac-x1,y0,bx0,x(r0)-b,y(r5)-  macx0,y0,ba,x(r0)-aslb            x;(r0)-,a        b,y1  rndb            a,x(r0)+  move              y1,x(r0)-  ENDMinclude]]></pre>权利要求1.一种用来修改输入到一个其特征在于多个个别响应的声复制器件的电气声频信号的设备,这些个别响应结合起来定义用于声复制器件的一个整体响应,每个个别响应包括频率、时间、相位或瞬态响应的至少一个,所述设备包括多个修改滤波器,具有模拟多个个别响应的修改响应,修改滤波器用来接收电气声频信号,修改电气声频信号,及把电气声频信号提供到声复制器件;和多个可调节参数,每一个与修改滤波器的至少一个有关,允许对于修改滤波器的响应的调节;其中调节创建多个个别共轭响应,每个个别共轭响应与多个个别响应的至少一个有关。2.根据权利要求1所述的设备,其中声复制器件的多个个别响应与声复制器件的机械、声学及电磁性能的至少一个有关。3.根据权利要求1所述的设备,其中滤波器由数字信号过程定义。4.根据权利要求1所述的设备,其中滤波器由模拟电路定义。5.根据权利要求1所述的设备,其中多个修改滤波器非相互作用。6.根据权利要求1所述的设备,其中多个修改响应结合以形成与用于声复制器件的整体响应共轭的整体响应。7.根据权利要求1所述的设备,其中修改滤波器的至少一个包括一个截止滤波器,并且用来调节截止滤波器的频率响应的参数包括波峰频率、振幅及Q参数。8.根据权利要求7所述的设备,其中波峰频率、振幅及Q参数修改在低频和高频范围的至少一个中的截止滤波器的频率响应。9.根据权利要求1所述的设备,其中修改滤波器的至少一个包括一个恒定斜率均衡器,并且用来调节恒定斜率均衡器的频率响应的参数包括交叉频率和提升搁置参数。10.根据权利要求9所述的设备,其中交叉频率和提升搁置参数修改在低和高频范围的至少一个中的恒定斜率均衡器的频率响应。11.根据权利要求1所述的设备,其中修改滤波器的至少一个包括一个参量切口滤波器,并且用来调节参量切口滤波器的频率响应的参数包括切口频率、振幅和Q参数。12.根据权利要求1所述的设备,其中修改滤波器的至少一个包括一个参量切口提升滤波器,并且用来调节参量切口提升滤波器的频率响应的参数包括切口频率、振幅和Q参数。13.一种用来改变输入到具有有关性能特性的声复制器件的电气声频信号的声音补偿系统,所述系统包括声复制器件的一种模型,带有模拟声复制器件的性能特性的至少一个的多个滤波器,每个滤波器具有一个有关的响应,该响应结合以定义对于该模型的整体响应,每个响应包括频率、时间、相位或瞬态响应的至少一个;和一个控制器,修改多个滤波器每一个的响应以把该滤波器转换成一个共轭滤波器,该共轭滤波器具有与滤波器的原始响应共轭的响应。14.根据权利要求13所述的系统,其中性能特性由声复制器件的分立元件定义。15.根据权利要求13所述的系统,其中性能特性由声复制器件的分立元件的组定义。16.根据权利要求13所述的系统,其中滤波器由数字信号过程定义,并且控制器包括一个计算机。17.根据权利要求13所述的系统,其中滤波器由模拟电路定义,并且控制器包括可调节电路元件。18.根据权利要求13所述的系统,其中声复制器件包括一个扬声器,并且多个滤波器的至少一个包括至少一个有关可调节参数,并且根据扬声器的物理特性计算参数的值。19.根据权利要求18所述的系统,其中扬声器的物理特性包括锥和线圈质量、空气体积、机械柔性、辐射面积、阻尼、运动质量及电机特性的至少一个。20.根据权利要求13所述的系统,其中声复制器件包括一个扬声器,并且多个滤波器的至少一个包括至少一个有关可调节参数,及参数的值从一个标准扬声器模型导出。21.根据权利要求13所述的系统,其中多个滤波器的至少一个具有一个有关可调节参数,并且使用标准试验测量试验地确定参数的值。22.根据权利要求13所述的系统,其中控制器这样配置,从而在一个参数的设置中的调节调制至少一个其它参数的设置。23.根据权利要求22所述的系统,其中声复制器件包括一个扬声器,并且调制至少一个其它参数的一个参数与扬声器的磁铁结构和音圈有关。24.根据权利要求22所述的系统,其中控制器监视在声复制器件处的程序条件,并且根据程序条件设置参数值的至少一个。25.根据权利要求24所述的系统,其中程序条件包括音量控制设置、程序级和低音内容的至少一个。26.根据权利要求13所述的系统,其中滤波器的一个包括一个加权补偿切口滤波器。27.根据权利要求26所述的系统,其中滤波器包括一个单调谐加权补偿切口。28.根据权利要求26所述的系统,其中滤波器包括一个双调谐加权补偿切口。29.一种声音系统,包括一个声复制器件,具有有关机械、声学及电磁性能特性;一个源,用来把一个电气声频信号输出到声复制器件的一个模型,该模型具有模拟声复制器件的机械、声学和电磁性能特性的至少一个的多个滤波器,每个滤波器具有包括频率、时间、相位或瞬态响应的至少一个的有关响应,该模型把电气声频信号输出到声复制器件;及一个控制器,修改滤波器的响应,以把模型转换成一个具有带有包括与该滤波器的原始响应共轭的响应的多个滤波器的共轭模型。30.根据权利要求29所述的系统,其中滤波器由数字信号过程定义。31.根据权利要求29所述的系统,其中滤波器由模拟电路定义。32.根据权利要求29所述的系统,其中多个滤波器是非相互作用的。33.根据权利要求29所述的系统,其中滤波器的至少一个包括一个截止滤波器,并且对于截止滤波器的频率响应的修改包括对波峰频率、振幅及Q的调节。34.根据权利要求29所述的系统,其中滤波器的至少一个包括一个恒定斜率均衡器,并且对于恒定斜率均衡器的频率响应的修改包括对交叉频率和提升搁置的调节。35.根据权利要求29所述的系统,其中滤波器的至少一个包括一个参量切口滤波器,并且对于参量切口滤波器的频率响应的修改包括对切口频率、振幅及Q的调节。36.根据权利要求29所述的系统,其中滤波器的至少一个包括一个参量切口提升滤波器,并且对于参量切口提升滤波器的频率响应的修改包括对切口频率、振幅及Q的调节。37.一种用来修改输入到一个声复制器件的电气声频信号的方法,该声复制器件的特征在于多个个别响应结合起来定义对于声复制器件的整体频率响应。每个个别响应包括频率、时间、相位或瞬态响应的至少一个,所述方法包括步骤用多个滤波器模拟多个个别响应;调节多个滤波器的响应,从而对于每个滤波器,调节的响应包括与个别响应之一共轭的响应;把电气声频信号输入到滤波器。38.根据权利要求37所述的方法,其中声复制器件的多个个别响应与声复制器件的机械、声学及电磁性能的至少一个有关。39.根据权利要求37所述的方法,其中多个滤波器是非相互作用的。40.根据权利要求37所述的方法,其中多个调节的响应结合以形成与用于声复制器件的整体响应共轭的整体响应。41.根据权利要求37所述的方法,其中滤波器的至少一个包括一个截止滤波器,并且调节截止滤波器的频率响应的步骤包括设置波峰频率、振幅及Q的至少一个的步骤。42.根据权利要求37所述的方法,其中滤波器的至少一个包括一个恒定斜率均衡器,并且调节恒定斜率均衡器的频率响应的步骤包括设置交叉频率和提升搁置的至少一个的步骤。43.根据权利要求37所述的方法,其中滤波器的至少一个包括一个参量切口滤波器,并且调节参量切口滤波器的频率响应的步骤包括设置切口频率、振幅和Q的至少一个的步骤。44.根据权利要求37所述的方法,其中滤波器的至少一个包括一个参量切口提升滤波器,并且调节参量切口提升滤波器的频率响应的步骤包括设置切口频率、振幅和Q的至少一个的步骤。45.一种改变输入到一个具有有关性能特性的声复制器件的电气声频信号的方法,所述方法包括步骤用多个滤波器模拟声复制器件的性能特性的至少一个,每个滤波器具有包括频率、时间、相位或瞬态响应的至少一个的有关响应;和对于滤波器的每一个,修改滤波器的响应,以把滤波器转换成具有一种包括与该滤波器的原始响应共轭的响应的共轭滤波器。46.根据权利要求45所述的方法,其中性能特性由声复制器件的分立元件定义。47.根据权利要求45所述的方法,其中性能特性由声复制器件的分立元件的组定义。48.根据权利要求45所述的方法,其中声复制器件包括一个扬声器,并且多个滤波器的至少一个具有至少一个有关可调节参数,并且修改滤波器响应的步骤包括步骤根据扬声器的物理特性计算至少一个可调节参数值的值;和把参数设置到计算值。49.根据权利要求48所述的方法,其中扬声器的物理特性包括锥和线圈质量、空气体积、机械柔性、辐射面积、阻尼、运动质量及电机特性的至少一个。50.根据权利要求45所述的方法,其中声复制器件包括一个扬声器,+并且多个滤波器的至少一个具有一个有关可调节参数,及修改滤波器响应的步骤包括步骤由一个标准扬声器模型驱动至少一个可调节参数;和把参数设置到导出值。51.根据权利要求45所述的方法,其中多个滤波器的至少一个具有一个有关可调节参数,并且修改滤波器响应的步骤包括步骤使用标准试验测量试验确定至少一个可调节参数;和把参数设置到确定值。52.根据权利要求48、50或51所述的方法,进一步包括步骤响应另一个参数的设置调制至少一个参数的设置。53.根据权利要求48、50或51所述的方法,进一步包括步骤监视在声复制器件处的至少一个程序条件;和根据至少一个程序条件设置参数值的至少一个。54.根据权利要求53所述的模型,其中程序条件包括音量控制设置、程序级和低音内容的至少一个。全文摘要一种声音补偿系统,改变输入到一个具有有关性能特性的声复制器件的电气声频信号。器件的性能特性由声复制器件的分立元件的各个或组定义,并且包括机械、声学及电磁性能。模型包括模拟声复制器件的性能特性的至少一个的多个滤波器。滤波器由数字信号过程或由模拟电路定义,并且其特征在于有关频率、时间、相位及瞬态响应的一个或多个。这些响应结合以定义对于模型的整体响应。滤波器包括可调节参数,这些可调节参数用来改变滤波器响应,以产生与未改变滤波器的响应共轭并因而与声复制器件的响应共轭的响应。一个控制器修改参数。文档编号H04R5/04GK1369188SQ00811556公开日2002年9月11日申请日期2000年8月10日优先权日1999年8月11日发明者麦茨·米尔博格,亚历克斯·里姆伯里斯,蒂莫西·E·昂德斯,基思·O·约翰逊申请人:太平洋微超声公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1