PetesDSPMods9/12/03.kymKYM0KYMAӳ[d[emBINBOSS 980000 SoundCollectionPointiobjectRepresented:location:lastViewRectangle:lastIconStyle:SoundCollectionaname:sounds:SoundCollection6612OrderedCollectionabjSoundPointaobjectRepresented:location:AbstractedSoundClassmname:structureSound:icon:smallIcon:parameterSpecifications:classDescription:shouldExpandFirst:BLANKConstantSoundnname:value:Constant68`Depth1ImageahByteArraya````aaKymaMappedPaletteafWordArraya`l{~{~{~gygygyArraya`ddddfbaad=!`ppaa$ad-aParameterSpecificationuname:typeName:viewType:rectangle:helpString:name77RectangleabPointabaax m=aaThis class has no description.LOGIC GATES AND LATCHES ----------------=r z.2FatStringqstring:extraInformation:MATHS ------------------------FastIdentityDictionaryadaAssociationabsoundEditorLayout=wx.2 DELAYS ------------------------=z|.2FILTERS ---------------------= v|.3MultiTapDelayDSPProgramWithInputslname:inputs:initialValuesCodeString:programName:wavetable:tableAccess:tableStart:tableEnd:(MultiTapDelay ???-c14-bVariableSoundnname:Input`1soundEditorBoundingBox9=hx=r|1vcsLayoutSoundVCSLayoutofirstTime:windowOrigin:windowExtent:components:selectedPreset:look:name:selectedLayout:subLayouts:editorOrigin:addedSubLayouts:=ja=ck*`DefaultKymaLookunameOrNil:superLook:database: Waldo Classic-q1cursorLoopFwdBkwdPlayDown19BlockClosureacCompiledBlockbbb!h0!eCompiledMethodbcv!b4hDiDiDiDiD iD iD iD0iD2iD4iD6iD8iD:iDiD iD!"iD#$iD%&iD'(iD)*iD+,iD-.iD/0iD12iD34iD56iD78iD9:iD;iD?@iDABiDCDiDEFiDGHiDIJiDKLiDMNiDOPiDQRiDSTiDUViDWXiDYZiD[\iD]^iD_`iDabiDcdiDefiDghiDijiDkliDmniDopiDqriDstiDuviDwxiDyziD{|iD}~iDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDiDjDEEe!u"u1BasicLook%/b!h0!e3buttons\pauseUp19.gifreadGIF:tlPauseButtonUp19:/b!h0!e3buttons\pauseDown19.gif>tlPauseButtonDown19:/b!h0!e3buttons\playUp19.gif>tlPlayButtonUp19:/b!h0!e3buttons\playDown19.gif>tlPlayButtonDown19:/b!h0!e3buttons\prevMarkerUp19.gif>tlPrevMarkerUp19:/b!h0!e3buttons\prevMarkerDown19.gif>tlPrevMarkerDown19:/b!h0!e3buttons\nextMarkerUp19.gif>tlNextMarkerUp19:/b!h0!e3buttons\nextMarkerDown19.gif>tlNextMarkerDown19:/b!h0!e3buttons\prevTimeUp19.gif>tlPrevTimeUp19:/b!h0!e3buttons\prevTimeDown19.gif>tlPrevTimeDown19:/b!h0!e3buttons\nextTimeUp19.gif>tlNextTimeUp19:/b!h0!e3buttons\nextTimeDown19.gif>tlNextTimeDown19:/b!h0!e3buttons\newMarkerUp19.gif>tlNewMarkerUp19:/b!h0!e3buttons\newMarkerDown19.gif>tlNewMarkerDown19:/b!h0!e3buttons\newMarkersUp19.gif>tlNewMarkersUp19:/b!h0!e3buttons\newMarkersDown19.gif>tlNewMarkersDown19:/b!h0!e3buttons\anchorUp19.gif>tlAnchorUp19:/b!h0!e3buttons\anchorDown19.gif>tlAnchorDown19:/b!h0!e3buttons\blankUp19.gif>tlBlankUp19:/b!h0!e3buttons\blankDown19.gif>tlBlankDown19:/b!h0!e3misc\submix.gif>tlSubmixIcon:/b!h0!e3misc\outputs.gif>tlOutputsIcon:/b!h0!e3misc\sourceLocation.gif>tlSourceLocation:/b!h0!e3misc\microphones\microphone.gif>tlTrackMicrophone:/b!h0!e3misc\microphones\microphoneG.gif>tlTrackMicrophonePlay:/b!h0!e3misc\microphones\microphoneR.gif>tlTrackMicrophoneRecord:/b!h0!e3misc\speakers\trkSpeaker.gif>tlTrackSpeaker:/b!h0!e3misc\speakers\trkSpeakerSolo.gif>tlTrackSpeakerSolo:/b!h0!e3misc\speakers\trkSpeakerMute.gif>tlTrackSpeakerMute:/b!h0!e3buttons\diceUp.gif>diceUp:/b!h0!e3buttons\diceDown.gif>diceDown:/b!h0!e3buttons\cameraUp.gif>cameraUp:/b!h0!e3buttons\cameraDown.gif>cameraDown:/b!h0!e3buttons\dropDownUp17.gif>dropDownUp17:/b!h0!e3buttons\enterDown20.gif>enterDown20:/b!h0!e3buttons\enterUp20.gif>enterUp20:/b!h0!e3buttons\enterMicDown.gif>enterMicDown:/b!h0!e3buttons\enterMicUp.gif>enterMicUp:/b!h0!e3buttons\playDown20.gif>playDown20:/b!h0!e3buttons\playUp20.gif>playUp20:/b!h0!e3buttons\stopDown20.gif>stopDown20:/b!h0!e3buttons\stopUp20.gif>stopUp20:/b!h0!e3buttons\updateDown20.gif>updateDown20:/b!h0!e3buttons\updateUp20.gif>updateUp20:/b!h0!e3buttons\useInputDown20.gif>useInputDown20:/b!h0!e3buttons\useInputUp20.gif>useInputUp20:/b!h0!e3buttons\expandXDown14.gif>expandXDown14:/b!h0!e3buttons\expandXUp14.gif>expandXUp14:/b!h0!e3buttons\expandYDown14.gif>expandYDown14:/b!h0!e3buttons\expandYUp14.gif>expandYUp14:/b!h0!e3buttons\fitXDown14.gif>fitXDown14:/b!h0!e3buttons\fitXUp14.gif>fitXUp14:/b!h0!e3buttons\shrinkXDown14.gif>shrinkXDown14:/b!h0!e3buttons\shrinkXUp14.gif>shrinkXUp14:/b!h0!e3buttons\shrinkYDown14.gif>shrinkYDown14:/b!h0!e3buttons\shrinkYUp14.gif>shrinkYUp14:/b!h0!e3buttons\expandXDown15.gif>expandXDown15:/b!h0!e3buttons\expandXUp15.gif>expandXUp15:/b!h0!e3buttons\expandYDown15.gif>expandYDown15:/b!h0!e3buttons\expandYUp15.gif>expandYUp15:/b!h0!e3buttons\fitXDown15.gif>fitXDown15:/b!h0!e3buttons\fitXUp15.gif>fitXUp15:/b!h0!e3buttons\shrinkXDown15.gif>shrinkXDown15:/b!h0!e3buttons\shrinkXUp15.gif>shrinkXUp15:/b!h0!e3buttons\shrinkYDown15.gif>shrinkYDown15:/b!h0!e3buttons\shrinkYUp15.gif>shrinkYUp15:/b!h0!e3buttons\makeSelectionUp19.gif>makeSelectionUp19:/b!h0!e3buttons\editSelectionUp19.gif>editSelectionUp19:/b!h0!e3buttons\noSelectionUp19.gif>noSelectionUp19:/b!h0!e3buttons\warpSelectionUp19.gif>warpSelectionUp19:/b!h0!e3buttons\makeSelectionDown19.gif>makeSelectionDown19:/b!h0!e3buttons\editSelectionDown19.gif>editSelectionDown19:/b!h0!e3buttons\noSelectionDown19.gif>noSelectionDown19:/b!h0!e3buttons\warpSelectionDown19.gif>warpSelectionDown19:/b!h0!e3buttons\shapeRectangleUp19.gif>shapeRectangleUp19:/b!h0!e3buttons\shapeEllipseUp19.gif>shapeEllipseUp19:/b!h0!e3buttons\shapePolygonUp19.gif>shapePolygonUp19:/b!h0!e3buttons\shapeTrackUp19.gif>shapeTrackUp19:/b!h0!e3buttons\shapeRectangleDown19.gif>shapeRectangleDown19:/b!h0!e3buttons\shapeEllipseDown19.gif>shapeEllipseDown19:/b!h0!e3buttons\shapePolygonDown19.gif>shapePolygonDown19:/b!h0!e3buttons\shapeTrackDown19.gif>shapeTrackDown19:/b!h0!e3buttons\combinationSingleUp19.gif>combinationSingleUp19:/b!h0!e3buttons\combinationPlusUp19.gif>combinationPlusUp19:/b!h0!e3buttons\combinationTimesUp19.gif>combinationTimesUp19:/b!h0!e3buttons\combinationMinusUp19.gif>combinationMinusUp19:/b!h0!e3buttons\combinationSingleDown19.gif>combinationSingleDown19:/b!h0!e3buttons\combinationPlusDown19.gif>combinationPlusDown19:/b!h0!e3buttons\combinationTimesDown19.gif>combinationTimesDown19:/b!h0!e3buttons\combinationMinusDown19.gif>combinationMinusDown19:/b!h0!e3buttons\combinationFrontDown19.gif>combinationFrontDown19:/b!h0!e3buttons\combinationFrontUp19.gif>combinationFrontUp19:/b!h0!e3buttons\cursorLoopFwdBkwdPlayUp19.gif>cursorLoopFwdBkwdPlayUp19:/b!h0!e3buttons\cursorLoopSelPlayUp19.gif>cursorLoopSelPlayUp19:/b!h0!e3buttons\cursorLoopPlayUp19.gif>cursorLoopPlayUp19:/b!h0!e3buttons\cursorNormalPlayUp19.gif>cursorNormalPlayUp19:.cursorLoopFwdBkwdPlayDown19:/b!h0!e3buttons\cursorLoopSelPlayDown19.gif>cursorLoopSelPlayDown19:/b!h0!e3buttons\cursorLoopPlayDown19.gif>cursorLoopPlayDown19:/b!h0!e3buttons\cursorNormalPlayDown19.gif>cursorNormalPlayDown19:/b!h0!e3buttons\renderSOSUp19.gif>renderSOSUp19:/b!h0!e3buttons\renderGrainUp19.gif>renderGrainUp19:/b!h0!e3buttons\renderImpulseUp19.gif>renderImpulseUp19:/b!h0!e3buttons\renderFilterUp19.gif>renderFilterUp19:/b!h0!e3buttons\renderSamplesUp19.gif>renderSamplesUp19:/b!h0!e3buttons\createModuleUp19.gif>createModuleUp19:/b!h0!e3buttons\renderSOSDown19.gif>renderSOSDown19:/b!h0!e3buttons\renderGrainDown19.gif>renderGrainDown19:/b!h0!e3buttons\renderImpulseDown19.gif>renderImpulseDown19:/b!h0!e3buttons\renderFilterDown19.gif>renderFilterDown19:/b!h0!e3buttons\renderSamplesDown19.gif>renderSamplesDown19:/b!h0!e3buttons\createModuleDown19.gif>createModuleDown19:/b!h0!e3buttons\hearAllUp19.gif>hearAllUp19:/b!h0!e3buttons\hearSelUp19.gif>hearSelUp19:/b!h0!e3buttons\hearAllDown19.gif>hearAllDown19:/b!h0!e3buttons\hearSelDown19.gif>hearSelDown19:/b!h0!e3buttons\colorSetGrayScaleUp19.gif>colorSetGrayScaleUp19:/b!h0!e3buttons\colorSetInvGrayScaleUp19.gif>colorSetInvGrayScaleUp19:/b!h0!e3buttons\colorSetRainbowUp19.gif>colorSetRainbowUp19:/b!h0!e3buttons\colorSetGrayScaleDown19.gif>colorSetGrayScaleDown19:/b!h0!e3buttons\colorSetInvGrayScaleDown19.gif>colorSetInvGrayScaleDown19:/b!h0!e3buttons\colorSetRainbowDown19.gif>colorSetRainbowDown19:initializeMoreIconButtonsbuttons\cursorLoopFwdBkwdPlayDown19.gif> 1modifySpectFreqUp19+/b!h0!e4k! t4hDiDiDiDiD iD iD iD0iD2iD4iD6iD8iD:iDiD iD!"iD#$iD%&iD'(iD)*iD+,iD-.iD/0iD12iD34iD56iD78iD9:iD;iD?@iDABiDCDiDEFiDGHiDIJiDKLiDMNiDOPiDQRiDSTiDUViDWXiDYZiD[\iD]^iD_`iDabiDcdiDefjDghfijEe8 m9/b!h0!e(buttons\modifyAmpUp19.gif>modifyAmpUp19:/b!h0!e(buttons\modifyFreqUp19.gif>modifyFreqUp19:/b!h0!e(buttons\modifyFreqDown19.gif>modifyFreqDown19:/b!h0!e(buttons\modifyAmpDown19.gif>modifyAmpDown19:/b!h0!e(buttons\modifyScaleUp19.gif>modifyScaleUp19:/b!h0!e(buttons\modifyScaleDown19.gif>modifyScaleDown19:/b!h0!e(buttons\modifyOffsetUp19.gif>modifyOffsetUp19:/b!h0!e(buttons\modifyOffsetDown19.gif>modifyOffsetDown19:/b!h0!e(buttons\modifySetUp19.gif>modifySetUp19:/b!h0!e(buttons\modifySetDown19.gif>modifySetDown19:/b!h0!e(buttons\modifyRubberbandUp19.gif>modifyRubberbandUp19:/b!h0!e(buttons\modifyConstantUp19.gif>modifyConstantUp19:/b!h0!e(buttons\modifyConstantDown19.gif>modifyConstantDown19:/b!h0!e(buttons\modifyRubberbandDown19.gif>modifyRubberbandDown19:/b!h0!e(buttons\modifySpectAmpUp19.gif>modifySpectAmpUp19:/b!h0!e(buttons\modifySpectAmpDown19.gif>modifySpectAmpDown19:&modifySpectFreqUp19:/b!h0!e(buttons\modifySpectFreqDown19.gif>modifySpectFreqDown19:/b!h0!e(buttons\modifyWavetableXUp19.gif>modifyWavetableXUp19:/b!h0!e(buttons\modifyWavetableXDown19.gif>modifyWavetableXDown19:/b!h0!e(buttons\modifyWavetableYUp19.gif>modifyWavetableYUp19:/b!h0!e(buttons\modifyWavetableYDown19.gif>modifyWavetableYDown19:/b!h0!e(buttons\modifyRadialUp19.gif>modifyRadialUp19:/b!h0!e(buttons\modifyRadialDown19.gif>modifyRadialDown19:/b!h0!e(buttons\modifyLinearUp19.gif>modifyLinearUp19:/b!h0!e(buttons\modifyLinearDown19.gif>modifyLinearDown19:/b!h0!e(buttons\deSelectionUp19.gif>deSelectionUp19:/b!h0!e(buttons\deSelectionDown19.gif>deSelectionDown19:/b!h0!e(buttons\infoSelectionUp19.gif>infoSelectionUp19:/b!h0!e(buttons\infoSelectionDown19.gif>infoSelectionDown19:/b!h0!e(buttons\drawSelectionUp19.gif>drawSelectionUp19:/b!h0!e(buttons\drawSelectionDown19.gif>drawSelectionDown19:/b!h0!e(buttons\drawControlPointsUp19.gif>drawControlPointsUp19:/b!h0!e(buttons\drawControlPointsDown19.gif>drawControlPointsDown19:/b!h0!e(buttons\drawMultiUp19.gif>drawMultiUp19:/b!h0!e(buttons\drawMultiDown19.gif>drawMultiDown19:/b!h0!e(buttons\drawSprayPaintUp19.gif>drawSprayPaintUp19:/b!h0!e(buttons\drawSprayPaintDown19.gif>drawSprayPaintDown19:/b!h0!e(buttons\drawSelfSimilarUp19.gif>drawSelfSimilarUp19:/b!h0!e(buttons\drawSelfSimilarDown19.gif>drawSelfSimilarDown19:/b!h0!e(buttons\drawEraserUp19.gif>drawEraserUp19:/b!h0!e(buttons\drawEraserDown19.gif>drawEraserDown19:/b!h0!e(buttons\hiddenLogLinUp19.gif>hiddenLogLinUp19:/b!h0!e(buttons\hiddenLogLinDown19.gif>hiddenLogLinDown19:/b!h0!e(buttons\joinDotsUp19.gif>joinDotsUp19:/b!h0!e(buttons\joinDotsDown19.gif>joinDotsDown19:/b!h0!e(buttons\shapeFrameIntervalUp19.gif>shapeFrameIntervalUp19:/b!h0!e(buttons\shapeFrameIntervalDown19.gif>shapeFrameIntervalDown19:/b!h0!e(buttons\jitterLabel9.gif>jitterLabel9:/b!h0!e(buttons\recursionLabel9.gif>recursionLabel9:/b!h0!e(buttons\smoothingLabel9.gif>smoothingLabel9:/b!h0!e(buttons\scalingLabel9.gif>scalingLabel9:!zapCachebuttons\modifySpectFreqUp19.gif> 1tlTrackMicrophone+8 1hearAllDown19+! 1modifyRadialUp19+? 1recursionLabel9++ 1drawSprayPaintDown19+; 1tlPauseButtonDown19+  1tlBlankDown19+( 1shrinkXUp15+ 8 1renderGrainDown19+% 1shapePolygonDown19+< 1enterMicUp+ 0 1drawEraserUp19+' 1tlOutputsIcon+0 1infoSelectionDown19+; 1tlTrackSpeakerSolo+( 1modifyConstantDown19+: 1updateDown20+ $ 1combinationMinusUp19+0 1modifyRubberbandDown19+> 1cursorLoopFwdBkwdPlayUp19+, 1modifyWavetableXDown19+3 1hearAllUp19+9 1renderGrainUp19+- 1tlNextMarkerDown19+8 1updateUp20+ ( 1shapePolygonUp19+, 1tlTrackSpeaker+$ 1joinDotsUp19+7 1infoSelectionUp19+7 1modifyConstantUp19+6 1drawSelfSimilarUp19+? 1drawEraserDown19++ 1combinationPlusDown19+8 1modifyRubberbandUp19+2 1cursorLoopPlayDown19+! 1fitXDown15+ , 1modifyWavetableXUp19+/ 1hearSelDown19+% 1renderImpulseDown19+) 1expandXUp14+ 8 1shapeRectangleDown19+4 1stopDown20+ < 1modifyFreqDown19+2 1tlAnchorUp19+< 1tlSubmixIcon+, 1expandXUp15+  1combinationPlusUp19+( 1modifyScaleDown19+> 1cursorLoopPlayUp19+4 1shrinkYUp14+ 8 1modifyWavetableYDown19+; 1drawSelfSimilarDown19+# 1hearSelUp19+= 1cameraUp+8 1tlPrevMarkerUp19+, 1expandYDown14+ < 1renderImpulseUp19+1 1shrinkYDown15+ < 1drawControlPointsUp19+' 1joinDotsDown19+; 1shapeRectangleUp19+$ 1speaker+/b!h0!e4a!|DF!f4hiDi4"j4%E f( f h4i*DiDiDiDiDiDjDf fGEE Ee8a9inheritingFrom:&.4speaker:-j1family-cGenevaarial*1pixelSizen1leadinga1baselinej1lineGridm1italic1boldness`a1underline1color1alignment`synthesizeTextStyle:fileOrganizerListTextStyle:-k1<-cGenevaarial*1"l1$a1&i1(l1*1,aa1.1012`1fixedTabs`fileOrganizerTextStyle:initializeButtonIcons1KnownLooks-h1Champaign ,%-`1Wien 0%-`1LosAngeles 4%-`1&%1Albuquerque 9%-`1$#1NewYork >%-`1London "%-`.9createAlbuquerque,createChampaign"createLondon4createLosAngeles>createNewYork$createWaldo0createWien1ActiveLook#1LastInstalledOnWindowsallInstances+/d!~4pppkH5prM5prebb6superLook(nameOrNilchangeSuperLook:-`+/d!g4p pppppkHkH5prM5prebb65(678misc\speakers\speaker.gif> 1dropDownUp17+  1colorSetGrayScaleDown19+5 1modifyFreqUp19+. 1fitXUp14+ ( 1combinationSingleDown19+4 1tlBlankUp19+$ 1tlNewMarkersUp19+4 1modifyScaleUp19+: 1cursorLoopSelPlayDown19+= 1modifyWavetableYUp19+7 1tlTrackMicrophoneRecord+  1makeSelectionDown19+ 4 1tlPlayButtonUp19+$ 1renderSamplesDown19+1 1smoothingLabel9+/ 1enterUp20+ ( 1shapeTrackDown19+  1jitterLabel9+' 1drawMultiUp19+/ 1shrinkXDown14+ , 1drawControlPointsDown19++ 1colorSetGrayScaleUp19+) 1modifyLinearDown19++ 1cameraDown+< 1combinationSingleUp19+$ 1modifySetDown19+. 1cursorLoopSelPlayUp19+0 1fileOrganizerTextStyleKTextAttributesbjli````-allCharacterAttributesabIdentityDictionaryabk1serif+/bt4v!DLVV !V"#V$%V&'V()V*+VVVVe7ab `small/c!i4pqe!defaultFont"pixelSize:large/c!j5pqMKM$MMe!(")>?sansSerif+/bt!serif: `8normal+/c!i4hjHe!aaboldness:italic:8bold+/ct!x  s5 `8*+/bt!6 `8.+/bt!underline: `8strikeout+/bt!strikeout: `80+/bx!color: `8<+/bx!family: `80 `81121*++51.<1781*:1%+&510#1<&1-.1? FontDescriptionah7iuo1fitXUp15+ 0 1makeSelectionUp19+ $ 1renderSamplesUp19+9 1tlPrevMarkerDown19+0 1tlNextTimeDown19+( 1shapeTrackUp19+0 1tlPrevTimeUp19+< 1colorSetInvGrayScaleDown19+9 1modifyLinearUp19+' 1tlNewMarkerDown19+0 1shapeFrameIntervalUp19+? 1combinationTimesDown19+< 1expandYDown15+ $ 1diceDown+4 1modifySetUp19+* 1useInputUp20+ 0 1cursorNormalPlayDown19+% 1drawMultiDown19+3 1hiddenLogLinUp19+/ 1tlPauseButtonUp19+; 1noSelectionDown19+ < 1renderSOSDown19+! 1expandXDown14+ 4 1shrinkYUp15+  1warpSelectionDown19+  1combinationFrontUp19+( 1tlTrackSpeakerMute+, 1playDown20+ 4 1deSelectionDown19+3 1colorSetInvGrayScaleUp19+- 1modifyOffsetDown19+& 1tlSourceLocation+4 1enterMicDown+ , 1useInputDown20+ , 1combinationTimesUp19+, 1modifySpectAmpDown19+& 1cursorNormalPlayUp19+8 1tlAnchorDown19+  1shrinkYDown14+ 4 1noSelectionUp19+ , 1expandYUp14+  1tlNextMarkerUp19+4 1shrinkXDown15+ 4 1renderSOSUp19+) 1hiddenLogLinDown19+3 1shapeFrameIntervalDown19+# 1warpSelectionUp19+ 0 1stopUp20+  1deSelectionUp19+/ 1colorSetRainbowDown19+= 1modifyOffsetUp19+" 1createModuleDown19+5 1shrinkXUp14+ 0 1tlNewMarkersDown19+8 1combinationFrontDown19+$ 1editSelectionDown19+ 8 1modifySpectAmpUp19+" 1tlTrackMicrophonePlay+< 1fileOrganizerListTextStyle1mj````Intervalacxhxx6:k1>?1121*++.1.<1781*:1%+&.10#1<&1-.1? 6=jzo1renderFilterDown19+- 1shapeEllipseDown19+8 1drawSelectionDown19+# 1modifyAmpDown19+6 1scalingLabel9+3 1colorSetRainbowUp19+1 1modifyRadialDown19+# 1drawSprayPaintUp19+7 1createModuleUp19+= 1expandYUp15+ ( 1modifySpectFreqDown19++ 1editSelectionUp19+ ( 1renderFilterUp19+5 1tlPlayButtonDown19+( 1playUp20+ 8 1shapeEllipseUp19+( 1tlNextTimeUp19+$ 1drawSelectionUp19+? 1modifyAmpUp19+* 1tlPrevTimeDown19+  1fitXDown14+ $ 1combinationMinusDown19+  1enterDown20+ $ 1tlNewMarkerUp19+, 1diceUp+0 1expandXDown15+ < -m1verticalFaderKnob+/b!h0!e4d!l D4!LhiDiDii !j" #Ve8u98$./c!i0!re2backgrounds\stone\smoothDarkGray.gif>asPatternlookBackground:/c!i0!re2backgrounds\stone\smoothGray.gif>7dagBackground:īSimpleTrackĪColorValuewidth:color:faderBorder:0verticalFaderKnob:ĨKymaKnobfaders\rotaryTrack20.gif>convertToSystemPaletteredextent:knobImage:minimumAngle:maximumAngle:wedgeStart:wedgeEnd:wedgeAngle:wedgeInside:wedgeBorder:rotaryFaderKnob:faders\circularTrack20.gifcircularFaderKnob:/c!i0!re2backgrounds\stone\smoothBlue.gif>7vcsBackground:-c-b ac```c-b4``b-b4bvcsBorders:vcsScopeBackground:vcsScopeForeground:cyanvcsScopeInfoColor:-j1<-bcomic sans ms*1"p1$b1&j1(n1*1,`a1.1012`3vcsLabelTextStyle:-j1<-bcomic sans ms*1"p1$b1&j1(n1*1,aa1.1012`vcsTextStyle:faders\faderRightWaldo.gif> 1circularFaderKnob%al=b`OpaqueImageadDepth24Imageah!pttxxFixedPaletteafcks|=!p<8pp````````pp8<ttaaCoveragePaletteaaaad```acns c73-d=``=``=``81rotaryFaderKnob!=b`%)!pttxx-|=!p<8pp````````pp8<ttaa3adcacgcns c73-d=``=``=``%1vcsLabelTextStyle1nj````+xhxx6:k1>?1121*++,1.<1781*:1%+&,10#1<&1-.1? 6!lzo1lookBackground+4 1vcsScopeInfoColor4`1vcsTextStyle1nj````+xhxx6:k1>?1121*++&1.<1781*:1%+&&10#1<&1-.1? 60luo1vcsScopeBackground31faderBorder>abb31vcsBorders11dagBackground+9 1vcsBackground+- 1vcsScopeForeground7-`StepWriter-`=ua-`*a+KymaCodeString pstring:bindings:| maxAmp SR MaxSamp StartSamp Delays Levels NoOfTaps IntDelay FracDelay Levela Levelb TapLev TapDel IterDelay IterLevel FBDel FBLev | SR :=SignalProcessor sampleRate. "Samps:=(?Rate removeUnits*SignalProcessor sampleRate)." TapLev:= ?TapLevelScale. TapDel:=?TapDelayScale. Delays := ?Delays. "# ( {!Delay1 ms} {!Delay2 s} {!Delay3 s} {!Delay4 s} {!Delay5 s} {!Delay6 s} {!Delay7 s} {!Delay8 s} )." Levels := ?Levels. "#( {!Level1} {!Level2} {!Level3} {!Level4} {!Level5} {!Level6} {!Level7} {!Level8} )." NoOfTaps := ((Delays size) vmin: (Levels size)) vmin: 50. maxAmp := SignalProcessor maximumAmplitude. MaxSamp:= ((?MaxDelay s removeUnits)*SR) rounded. StartSamp:=self tableAddress. "ExtraSamp:=StartSamp+MaxSamp+0. DeadSamp:=StartSamp+MaxSamp+1." FBDel := ((?FBTapDelay s removeUnits) *SR)*TapDel. FBLev:= (MaxSamp gt: FBDel) true: (?FeedbackFBTap*maxAmp) false: 0. self initialValueAt: 0 xPut: MaxSamp yPut: 0. self initialValueAt: 1 xPut:StartSamp yPut: 0. self initialValueAt: 2 xPut: (?FeedbackLastSamp *maxAmp) yPut: (?FeedbackOutPut *maxAmp) . self initialValueAt: 3 xPut: FBLev yPut: NoOfTaps+1 . self initialValueAt: 5 xPut: 0 yPut: 0 . self initialValueAt: (((NoOfTaps+1)*2)+2) xPut: (MaxSamp-(FBDel+1)) yPut: 0 . self initialValueAt: (((NoOfTaps+1)*2)+4 ) xPut: 0 yPut: ?DryLevel*maxAmp . 1 to: NoOfTaps do: [ :i | IterDelay:= ( (Delays at:i) s removeUnits *SR) * TapDel . IterLevel := (Levels at:i). IterLevel := (MaxSamp gt: IterDelay) true: IterLevel false: 0 . IntDelay := IterDelay truncated. FracDelay:= IterDelay-IntDelay. Levela:=((( IterLevel )*maxAmp)*FracDelay)*TapLev. Levelb:=(( IterLevel)*maxAmp)*(1-FracDelay)*TapLev. self initialValueAt: (2+(i*2)) xPut: (MaxSamp-(IntDelay+1)) yPut: 0 . self initialValueAt: (5+(i*2)) xPut:Levela yPut: Levelb . ] BindingListad`MultiTapDelayLazyVariablea.WaveTablereadWrite`LazyMessageSendareceiver:message:====8MaxDelayMessageabs-`'samp-`'removeUnits-`'rounded-`'+-aa=!`O@F`I8 ?' & =0'""a > 3D&<0 GI@I@I@``aa$ad=!`@2gL+YsR>CW*Uppaa$ad-m47779=aax m=aaEnter a name for this Sound.4WaveTablewavetablefileName9=x m``=ay  sThis is the name of the wavetable that the module uses. It can be made the same as other ram dependant module such thay the same ram can be shared.4DelayshotArrayarray9=ymx s=aawm This is a list of the delay times for up to 50 taps. All the delays times here are multiplied internaly by the "TapDelayScale" value so that all the delays can be adjusted as a groop. The delays are interpolated but are not smoothed so changing these values will cause clicks at the output. Note: if any delay tap (after being adjusted by the "TapDelayScale") amounts to a delay of greater than "MaxDelay-1 sample", its output will be muted. 4Levels,-9=ym``=aay m This is a list of up to 50 levels one for each tap. They are all multi[plied by the "TapLevelScale" so that it can be used as a groop level control. It adjusts the level of the taps and not the level of the input. This means that the input can be recorded onto the ram at full scale and the "TapLevelScale" can be used to attenuate the taps outputs to avoid distortion or clipping. Note : a tap will be muted if its delay time is too long.4inputsound:9=````=ymw sOnly the left channel is used and the output is mono.4MaxDelaytimevalue9=x  s``=x my  s This determins the size of the ram that the delay uses. It must be at least one sample longer than any taps maximum delay duration. If you are using this module with other ram readers/writers that share the same ram , you will probably want to make this field contain the same size or duration.4TapDelayScalehotValue"9=aax s=w swmThis is a master tap delay control. If the value is 1 then all the delays will be as shown. This value can be greater or less than one but if it causes the resulting delay of any tap to be greater than "MaxDelay"- 1 sample , it will cause that tap to be muted. If zero is placed in this field , all the taps will have no delay and will be in sinc and will become additive. This will probably overload the output. If this module was used to produce the Early Reflections in a reveb, this value would control the rooms size.4DryLevel)"9=``w s=ymwmThis will control how much of the input signal gets routed to the output no delay.4FeedbackOutPut)"9=x mwm=x sxmThis controls the amount of output signal feedback into the input. Unlike feedback on a single delayline ,this will explode at a level much much lower than 1. This is because all the taps will add there own bit of amplification to the feedback loop. Miss use of this control will cause the module to output just DC and no signal at all. Even if it is set to a level below the point of explosion any adjustment of the tap levels, TapLevelScale or the other two feedback types, can take it over the top.4TapLevelScale)"9=aa``=w sy mThis is a master tap level control. If the value is 1 then all the levels will be as shown. This value can be greater or less than one but the maximum level any tap can produce is one. 4FeedbackLastSamp)"9=x mw s=x swm This controls how much signal is feedback to the input from the last sample (longest posiable delay). It is a fixed delay while the sound is playing and will not be influenced by the "TapDelayScale" value. Care should be taken if used at the same time as the modlues other two types of feedback as explotion is quite likely..4FeedbackFBTap)"9=x mx s=x sw s This adjusts the level of feedback of a special delay tap "FBTap" which is used for feedback only. Its delay can be adjusted by using the "FBTapDelay" field. The FBTap itself is not heard directly at the output but instead through the other tapsafter being feedback. The feedback level is not infuenced by the "TapLevelScale" control. Care must be taken when used with the modules two other types of feedback.4FBTapDelayhotTime"9=w sx s=bcwmThis is the delay time of a special independant delay tap called the"FBTap". It is there for feedback and nothing else as it doesn't have an output level. This delay time is influenced by the "TapDelayScale" control and will change proportionally. This module is a single cycleing delay ram with a maximum of 50 indepedantly adjustable Taps , and one extra adjustable tap for feedback only. The taps are interpolated such that delays of part samples should work but delay variations are not smoothed so that clicks will appear while the taps are being altered. This can be used to produce the Early Reflections in a reverb system. PeteJohnstonsDSPMods Ver 5(MultiTapDelay-b14-bGenericSourcenname:source:leftChannel:rightChannel:sample:autoloop:trigger:attackTime:releaseTime:scale:frequency:GenericSource Mono SampleRAMMSDOSaTimeInSamplesaaaTimeInSecondsaa{ m!INPUTFrequencyInHertzaa``168=kl=u|*tVCSEventSourceComponentamicrosound:layout:label:look:concreteEvent:displayType:presets:id:minimum:maximum:grid:taper:noDice:showNumber:isGenerated:LayoutFrameah````a`l`aTap1 #-`ConcreteEventdsaTap1`alinearafaderaaaTap1i-m````````````}aa`aFader-a1>aai`a`"37a```b`l`atap2;>atap2`a"a#aaatap2k-mllllllllllll}aa`a&-a1>aak`a`"37b``` d`l`atap3;>atap3`a"a#aaatap3m-mxxxxxxxxxxxx}aa`a&-a1>aam`a`"37 d``` e`l`atap4;>atap4`a"a#aaatap4o-mdddddddddddd }aa`a&-a1>aao`a`"37 e```f`l`atap5;>atap5`a"a#aaatap5q-mpppppppppppp }aa`a&-a1>aaq`a`"37f```g`l`atap6;>atap6`a"a#aaatap6s-m|||||||||||| }aa`a&-a1>aas`a`"37``l`a`x`bDel1;>bDel1`a"a#aabDel1g-mttttttttttttmaa`a&-a1>wgg`b`"37a`l`b`x`bDel2;>bDel2`a"a#aabDel2j-mffffffffffffsaa`a&-a1>vgj`b`"37b`l` d`x`bDel3;>bDel3`a"a#aabDel3l-mrrrrrrrrrrrrsaa`a&-a1>vgl`b`"37 d`l` e`x`bDel4;>bDel4`a"a#aabDel4n-m~~~~~~~~~~~~ saa`a&-a1>ugn`b`"37 e`l`f`x`bDel5;>bDel5`a"a#aabDel5p-mjjjjjjjjjjjj saa`a&-a1>w}p`b`"37f`l`g`x`bDel6;>bDel6`a"a#aabDel6r-mvvvvvvvvvvvv saa`a&-a1>v ur`b`"37``x`a` d`DrySignal;>DrySignal`a"a#aa DrySignalf-mnnnnnnnnnnnneaa`a&-a1>w {f`a`"37a`x`b` d`FeedbackDel;>FeedbackDel`a"a#aa FeedbackDeld-mbbbbbbbbbbbboaa`a&-a1>x sd`a`"37b`x` d` d`FeedbackLastSamp;>!`a"a#aaFeedbackLastSampa-mppppppppppppyaa`a&-a1>``a`a`"37 d`x` e` d`FeedbackOutPut;>5`a"a#aaFeedbackOutPutb-mvvvvvvvvvvvvaaa`a&-a1>``b`a`"37 e`x`f` d`FeedbackTap;>FeedbackTap`a"a#aa FeedbackTape-mhhhhhhhhhhhhuaa`a&-a1>``e`a`"37f`x`g` d`GroupDelay;>GroupDelay`a"a#aa GroupDelayc-m||||||||||||iaa`a&-a1>`ac`b`"37`` d`a`p`GroupLevel;>GroupLevel`a"a#aa GroupLevelh-mzzzzzzzzzzzzwaa`a&-a1>vah`a`"37a` d`b`p`Input;>Input`a"a#aaInputt-mbbbbbbbbbbbb |aa`a&-a1>x ct`a`">;MultiTapDelay-`=s{-`fredE#({!bDel1 s} {!bDel2 s} {!bDel3 s} {!bDel4 s} {!bDel5 s} {!bDel6 s} ),#(!aTap1 !atap2 !atap3 !atap4 !atap5 !atap6)9%b<1!FeedbackOutput%"3HotAndLazyMessageSenda?:'*-`=to.3RCLwithGain#(RCL48???-c14-b,Input`119=v b=~w168=sd=tl*a37``````ca`aGain #-`>Gain`a"a#aaGaind-mbbbbbbbbbbbbna`a&-b1Oscilatora1>adva``log!9RCLwithGain-`=od-`*a+.| maxAmp Rfactor Lfactor Cfactor LastV LastI IntGain FracGain | maxAmp := SignalProcessor maximumAmplitude. Rfactor := ((1/?Resistance)*maxAmp) rounded. Lfactor := ((1/(SignalProcessor sampleRate*?Inductance))*maxAmp) rounded. Cfactor := (1/(SignalProcessor sampleRate*?Capacitance)*maxAmp) rounded. LastV := 0. LastI := 0. IntGain := ?Gain truncated. FracGain := (?Gain-IntGain)*maxAmp. self initialValueAt: 0 xPut: Cfactor yPut: Rfactor. self initialValueAt: 1 xPut: LastV yPut: LastV. self initialValueAt: 2 xPut: Lfactor yPut: IntGain. self initialValueAt: 3 xPut: LastI yPut: LastI. self initialValueAt: 4 xPut: FracGain yPut: 0. 3`RCL48kym1none`=!`cN8"68 0`{@?@{q`{`g{g`{q?@{@@@@@88``aa$ad=!`D E0KCXK3ppaa$ad-f47779=aax m=aaRCL24<)"9=ba``=x sw{49::9=``ba=z mw s4Resistance)"9=aa`=axmThe value here is assumed to be in ohms. The minimum resistance is 1 ohm. Any thing lower will be treated as the minimum.4Inductance)"9=aawm=aw sThe value here is assumed to be in henrys. The minimum inductance is 28 micro henry's. Any thing lower will be treated as the minimum.4Capacitance)"9=aaxm=awmThe value here is assumed to be in farads. The minimum capasitance is 28 micro faradss. Any thing lower will be treated as the minimum. RCLwithGain is similar to the RCL module which is a resistor capacitor inductor network emulator. It is arranged as a series resistor followed by a parallel capacitor and inductor. It is more DSP hungry than the RCL as it uses 48 bit internal prossesing and has built in gain to take advantage of this. PeteJohnstonsDSPMods Ver 5(RCLwithGain-b14-b:GenericSource Mono Sample>MSDOSa!a%{ ma*``168=ja=ck*d37````g``Farads #-`>Farads`a"a#aaFaradsa-mppppppppppppvaa`a&-a1>x qaeia`#37g```m``89><`a"a#aa=d-mbbbbbbbbbbbbna`a&-b1!a1>`adah`#37m``` t``Henrys)>Henrys`a"a#aaHenrysc-m||||||||||||faa`a&-a1>waceib`#37 t``` {``Ohms)>Ohms`a"a#aaOhmsb-mvvvvvvvvvvvv~a`a&-a1>`aba p`#>)RCLwithGain-`=ua-`=;&!henrys-= wr.3ExclusiveOrGate#(ExOrGate ???-c14119=hx=as168=sd=tl*`!9MixerWithWrapAround-`=od-`8Inputs. | maxAmp LoVal HiVal | maxAmp := SignalProcessor maximumAmplitude. HiVal := maxAmp. LoVal := 0.0. LoVal :=?PlusAndMinusOne true: (maxAmp+1) false: 0. HiVal :=?Invert true: LoVal false: HiVal. LoVal :=?Invert true: maxAmp false: LoVal. self initialValueAt: 0 xPut: HiVal yPut:LoVal. self initialValueAt: 1 xPut:self subSounds size yPut: -10. 3`AndGatekym1.`=!` | `ln;3a1113an;l`  <``aa$ad=!`/  O `/ppaa$ad-d47779=aax m=aaExclusiveOrGate4PlusAndMinusOne)"9=bc``=w sy mWhen this value is greater than zero, the output goes from -1 to +1. If not the output goes from 0 to 1.4Invert)"9=xm``=x  sy mThis turns the module into an Exclusive NorGate . When this value is greater than zero the output is inverted as per logic values not analogue. i.e. 1 becomes 0 and 0 becomes 1 (assuming PlusAndMinusOne value is low).4InputssoundCollection %9=````=aax mMaximun 30 inputs Exclusive Or/Nor gate Assuming "PlusAndMinusOne" and "Invert" are both zero or below, the output will be zero if all the inputs are zero or less. The output will be one if an Odd number of inputs have a value of one or greater than zero, otherwise the output is zero. PeteJohnstonsDSPMods Ver 5(ExclusiveOrGate-c14-d:GenericSource Stereo Sample>flamingos sa!a%{ ma*``:GenericSource Mono Sample>MSDOSa!a%{ ma*``119=a `=iu168=lh=vq*`> #-`ExclusiveOrGate-`=jh-```-b 6 0=r s.3Set/Reset FlipFlop#(SRFlipFlop ???-c14-d,Reset`,Setp119=ol=wa168=sd=tl*b37 z`h` c` ``Reset9>MIDIController48`a"agateabResetq-mbbbbbbbbbbbbr``a&-b1!`1>aqaa`"37r`h` z` ``Set9>Set`a"a#aaSeta-mrrrrrrrrrrrrwaa`a&-b1!aa1>aaaaa`"!9AsLogic-`=hd-`*b 9 7. | maxAmp LoVal HiVal | maxAmp := SignalProcessor maximumAmplitude. HiVal := maxAmp. LoVal := 0.0. LoVal :=?PlusAndMinusOne true: (maxAmp+1) false: 0. HiVal :=?Invert true: LoVal false: HiVal. LoVal :=?Invert true: maxAmp false: LoVal. self initialValueAt: 0 xPut: 0 yPut: 0. self initialValueAt: 1 xPut: HiVal yPut:LoVal. 3`SRFlipFlopkym1.`=!`p_pp`;``p``;p?;;?p`;``}`p`;_pp``aa$ad=!` <$$? ppaa$ad-e47773ExclusiveOrGate4Reset::9=xm``=xmw sRight input is not used4 3::9=````=baw sRight input is not used48)"9=x m``=x sy mWhen this value is greater than zero, the output goes from -1 to +1. If not the output goes from 0 to 1.4>)"9=wm``=bcy mWhen this value is greater than zero the output is inverted as per logic values not analogue. i.e. 1 becomes 0 and 0 becomes 1 (assuming PlusAndMinusOne value is low).When both set and rest inputs are zero or below, the out put will be high if the Set was the last input to be high or low if the Reset input was the last to be high. The output will be low when the reset is high, regardless of the state that the the set input. The output will become high when the set input is made high only if the reset input is low. This is all asuming that the value in the "Invert" field is zero or less. If don't want the Reset to have priority over the Set input , you can use a "GateToTrigger" module on the reset input. In this mode the output will simply represent which input was the last to change from low to high. i.e the output will be high if Set changed last or low if Reset changed last. PeteJohnstonsDSPMods Ver 5(Set/Reset FlipFlop-b14-d8Set 4`8Reset!Reset `168=bd=vq*b37````}`e` &9> (`a"a )aa *q +a`a&-b1!`1>aqaa`"37}```z`e` 19> 3`a"a#aa 4a-mrrrrrrrrrrrr`aa`a&-b1!aa1>aaaaa`"> #-`Set/Reset FlipFlop-`=`d-` ' %``= t s.3TrackAndHold#(TrackAndHold???-b14-d,Input`,Gate`168=sd=tl*`! #-`TrackAndHold-`=od-`*b-/.self initialValueAt: 0 xPut: 1 yPut: 0. 3`TrackAndHoldkym1.`=!` 8 0`@`H@@A@D@@@@@@@``aa$ad=!`pXppaa$ad-c47779=aax m=aaEnter a name for this Sound.4Gate::9=ba``=x sx mWhen this signal is zero or below the input is passed to the output. When this signal rises above zero the output is frozen at the current value and remains there until this signal goes back to zero or below.49::9=```=z mx mThis class has no description. PeteJohnstonsDSPMods Ver 5TrackAndHold:GenericSource Mono Sample>MSDOSa!a%{ ma*`9=b r.3PulseFlusher2Differencelname:input:minusInput:(PulseFlusher2 ???-d14-p,Pulse 3TrackAndPreHold#(TrackAndPreHold???-b14-d,.`,0`168=sd=tl*`!68-`=od-`*b89.self initialValueAt: 0 xPut: 1 yPut: 0. 3`TrackAndPreHoldkym1.`=!`??À 8 0P`@`HB@A@D@@@? ``aa$ad=!`sXppaa$ad-c4777(Enter a name for this Sound.4-::.When this signal is zero or below the input is passed to the output. When this signal rises above zero the output is frozen at the current value and remains there until this signal goes back to zero or below.49::3This is similar to TrackAndHold exept that the input sample that preceeded the gates transition from 0 to 1, is the sample that will be held. This means that a "Sample and Hold" can be made by putting a GateToTrigger module(with invert set to one) into this modules gate input. If you tried to do the same with the standard TrackAndHold module, the held sample would be the sample that was presant at the input when the trigger returned to zero and not at the trigger point itself. PeteJohnstonsDSPMods Ver 5TrackAndPreHold3AsLogic#(AsLogic???-c14-b,Input`119={t=ci168=sd=tl*`! #-`AsLogic-`=od-`*a>. | maxAmp LoVal HiVal | maxAmp := SignalProcessor maximumAmplitude. HiVal := maxAmp. LoVal := 0.0. LoVal :=?PlusAndMinusOne true: (maxAmp+1) false: 0. HiVal :=?Invert true: LoVal false: HiVal. LoVal :=?Invert true: maxAmp false: LoVal. self initialValueAt: 0 xPut: HiVal yPut:LoVal. 3`AsLogickym1.`=!` } pl9``aa%)l{~{~{~gygygy-ddddfbaad=!` UVb pppaa7ad-d47779=aax m=aaEnter a name for this Sound.48)"9=y  s``=aay mWhen this value is greater than zero, the output goes from -1 to +1. If not the output goes from 0 to 1.49::9=``=xma4>)"9=xm``=x  sy mWhen this value is greater than zero the output is inverted as per logic values not analogue. i.e. 1 becomes 0 and 0 becomes 1 (assuming PlusAndMinusOne value is low).Converts a signal to a logic value. When the input is greater than zero the output is one otherwise the output is zero. This module can also be used as a NOT gate or logic inverter by putting one into the Invert field(invert-a168=fl=i{*`> #-`invert-`=wl-``-a,Signal`Mixeroname:inputs:left:right:retrograde:reverse:(Mixer16-b1replaceableInput3OneSampleDelay#(OneSampleDelay ???-b14-b,Input`168=fl=i{*`> #-`OneSampleDelay-`=wl-`*a4.self initialValueAt: 0 xPut: 0 yPut: 03`OneSampkym1.`=!`OLHJHINHHHHHO8 DPƄ@A9E9yDEDE"lEA(EA8EEAEAyA``aa%)l{{{{{{ffffff-ddddfbaad=!`:+**:..U((;+9ppaa)ad-b47779=aax m=aaEnter a name for this Sound.49::9=``=y mx mLeft Input is delayed and sent to the left output. Right input is delayed and sent to the right output.The input is delayed by one sample. This module is in full sterio(OneSampleDelay-a168=ll=i{*`> #-`OneSampleDelay-`=}l-`/168= yt=i{*`> #-`Mixer16-`=jt-`*a+8Percent4` `%(OneMinusInput2-a168=fl=i{*`> #-`OneMinusInput2-`=wl-`"/`6(AsLogic-a168=fl=i{*`> #-`AsLogic-`=wl-``6``5`+`1*%168+=i{*`> #-`PulseFlusher-`=wl-`119=jl=bx-%=!` A  A  A  @`  0T|80@@@?@ D|``aa$ad=!`$ $ IIIo:*ppaa$ad-d47779=aax m=aaEnter a name for this Sound.4Percent)"9=aa``=x  sxm4Signal::9=```=y  saa4Pulse::9=``aa=y  s`aThis class has no description. PeteJohnstonsDSPMods Ver 5(PulseFlusher2-b14-b:GenericSource Mono Sample>MSDOSa!a%{ ma*``119=` a=hvwm%%=ue.390DegShiftChannelJoinnname:left:right:(90degShift ???-d14-hFIRFilternname:input:coefficients:(Phase Shift by 90-a168=zm=ur*`> #-`Phase Shift by 90-`=wm-`,InputKymaParameterStringbstring:specials:units:bindings:"The following will give you the coefficients for a phase-shift-by-90 (windowed by a hamming window). The variable middle sets the overall delay (in samples) of the filter and the number of taps is 2 * middle + 1." {| middle pts twoPiN | middle := 525. pts := (1 to: 2 * middle + 1) collect: [ :x | | y | y := x - middle. y even ifTrue: [0] ifFalse: [y inverse]]. twoPiN := 2.0 * Float pi / pts size. 1 to: pts size do: [ :n | | window | window := (n - 1 * twoPiN) cos - 1 * -0.5 * -3 dB. pts at: n put: (pts at: n) * window]. pts}-``/AmplitudeScaledzname:input:left:right:(Attenuator5-b1*=168=ru=ic*`> #-`Attenuator5-`=cu-`=wcwc`DelayWithFeedbackname:type:input:scale:feedback:delay:delayScale:wavetable:prezero:interpolation:smoothDelayChanges:(delay by number of taps-b1*/168=qc=og*`> #-`delay by number of taps-`=hc-`comb/a` (525+1) sampaPrivate"`1*7168=qc=og*b37``````ca`aNoise #-`>Noise`a"a#aaNoised-mgccccccccccg`r g`a&-a1>aad`a`"37`ca```ba`asignal)>signal`a"a#aasignale-mmiiiiiiiiiiof``a&-a1>aae`a`">)DuplicateOf90DegShift-`=hc-`119=gb=ow7*=!`p 00000``aa$ad=!`^C@@`@ @0@@||D8DDppaa$ad-b47779=aax m=aaEnter a name for this Sound.49::9=``=y mx mThis class has no description. PeteJohnstonsDSPMods Ver 590DegShift:GenericSource Mono Sample>MSDOSa!a%{ ma*`=af.#(multipule RCLwithGain-c14-l#(=-a168=ja=ck*d37````g``()>,`a"a#aa-a-mppppppppppppxu`a&-a1>x qaeia`#37g```m``89><`a"a#aa=d-mbbbbbbbbbbbbwua`a&-b1!a1>`adah`#37m``` t``:)><`a"a#aa=c-m||||||||||||otg`a&-a1>waceib`#37 t``` {``#)>%`a"a#aa&b-mvvvvvvvvvvvvgx q`a&-a1>`aba p`#>)multipule RCLwithGain-`=ua-`=#(=-a168=ja=ck*d37````g``()>,`a"a#aa-a,xu`a&-a1>x qaeia`#37g```m``89><`a"a#aa=d2ua`a&-b1!a1>`adah`#37m``` t``:)><`a"a#aa=c9tg`a&-a1>waceib`#37 t``` {``#)>%`a"a#aa&b?x q`a&-a1>`aba p`#>)"-`=ua-`=#(Mixer16-a1*:GenericSource Mono Sample>MSDOSa!a%{ m!Signal*`*b,sname:initialState:type:frequency:centerValue:scale:Noise (pink)2x mpink*h`-+aa&!henrys-&!henrys-`#(=-a168=ja=ck*d37````g``()>,`a"a#aa-a,xu`a&-a1>x qaeia`#37g```m``89><`a"a#aa=d2ua`a&-b1!a1>`adah`#37m``` t``:)><`a"a#aa=c9tg`a&-a1>waceib`#37 t``` {``#)>%`a"a#aa&b?x q`a&-a1>`aba p`#>)"-`=ua-`=!&!henrys-`&`&`+`3`119=m=gb168=ja=ck*f37````g``()>,`a"a#aa-a,xu`a&-g1Jetxu1Singingvg1UpYourNosevg1rainxk1Glasswa1!x q1>x qaeia`#37g```m``89><`a"a#aa=d2ua`a&-g1*ua1,x1.x10x }12x{1!a1>`adah`#37m``` t``:)><`a"a#aa=c9tg`a&-g1*tg1,wa1.xs10s12x o1!wa1>waceib`#37 t``` {``#)>%`a"a#aa&b?x q`a&-g1*x q1,x w1.t 10xs12vw1!`a1>`aba p`#37 {```a` `Noise)>,`a"a#aa-e-mhhhhhhhhhhhh`xq`a&-g1*xq1,vy1.``10vy12vy1!aa1>aae`a`"37a```g` `signal)>5`a"a#aa6f-mnnnnnnnnnnnnq``a&-g1*``1,aa1.aa10``12aa1!aa1>aaf`a`"*)multipule RCLwithGain-`=ua-`=;&!henrys-=qr.#(multipule RCLwithGain In Hz Restricted-b119=c`=ku168=ja=ck*d37 {```a` `8)>,`a"a#aa-c-m````````````oxq`a&-e1singingaa1Rumble`a10xq1jetxq1>aac`a`"37a```g` `%)>5`a"a#aa6d-mffffffffffff```a&-e1*``1,``10``1/``1>aad`a`"37````f` `Hz)>Hz`a"a#aaHza-mttttttttttttzaa`a&-e1*s i1,sg10r y1/tq1>aaa` p`"37f```l` `Q)>Q`a"a#aaQb-mzzzzzzzzzzzzbba`a&-e1*wu1,va10va1/t {1>bab`j`"/)multipule RCLwithGain In Hz Restricted-`=ua-`-#(=-a168=ja=ck*`>)multipule RCLwithGain-`=ua-`-#(=-a168=ja=ck*`>)multipule RCLwithGain-`=ua-`-#(=-a168=ja=ck*`>)multipule RCLwithGain-`=ua-`-#((-a1*:,>-a./!Signal1*b46x m78`-!aa!Q*!Q1/(2*3.147*!Hz)1/(2*3.147*!Hz)!Q*!Q1/(2*3.147*!Hz)1/(2*3.147*!Hz)!Q*!Q1/(2*3.147*!Hz)1/(2*3.147*!Hz)!Q*!Q1/(2*3.147*!Hz)1/(2*3.147*!Hz)=ur.3RCL#(RCLexample3-c14-b,,`119=ma=uv168=xr=tl*`!9RCL-`=od-`*a<.| maxAmp Rfactor Lfactor Cfactor LastV LastI | maxAmp := SignalProcessor maximumAmplitude. Rfactor := ((1/?Resistance)*maxAmp) rounded. Lfactor := ((1/(SignalProcessor sampleRate*?Inductance))*maxAmp) rounded. Cfactor := (1/(SignalProcessor sampleRate*?Capacitance)*maxAmp) rounded. LastV := 0. LastI := 0. self initialValueAt: 0 xPut: Rfactor yPut: LastV. self initialValueAt: 1 xPut: Lfactor yPut: LastI. self initialValueAt: 2 xPut: Cfactor yPut: 0. 3`RCLkym1.`=!`cN8"68 0`{@@{{{{@{@@@@@88``aa$ad=!`D Eppaa$ad-e47775RCL24*)"+The value here is assumed to be in henrys. The minimum inductance is 28 micro henry's. Any thing lower will be treated as the minimum.4$)"%The value here is assumed to be in ohms. The minimum resistance is 1 ohm. Any thing lower will be treated as the minimum.49::?40)"1The value here is assumed to be in farads. The minimum capasitance is 28 micro faradss. Any thing lower will be treated as the minimum.RCL is a cheep (in terms of DSP) resistor capacitor inductor network emulator. It is arranged as a series resistor followed by a parallel capacitor and inductor. The output signal will need to be boosted to hear the band pass filter and ringing. PeteJohnstonsDSPMods Ver 5(RCL-c14-b:,>MSDOSa!a%{ ma*``119= t g=||168=xr=xp*c37````i`d`Farads #-`>,`a"a#aa-c-m||||||||||||dgo`a&-a1>vqcgoa`#37i```s`d`Henrys 6><`a"a#aa=b-mvvvvvvvvvvvv|w`a&-a1>wbgoa`#37s``` |`d`Ohms 6>%`a"a#aa&a-mppppppppppppta`a&-a1>`aaa p`#> 6RCL-`=xr-`!henrys& %-= q.3NumberToIndex8(NumberToIndex ???-c14119=py=xn168=xq=cz*`> #-`NumberToIndex-`=cq-`2| TrueSamp EvenSamp StepSize OffSet AddLog | AddLog:=1-(?AsAddition asLogicValue). TrueSamp:=?NoOfSamples rounded. EvenSamp:=2*(((TrueSamp+1)/2)truncated). StepSize :=2/EvenSamp. OffSet :=AddLog*(0-(1+(StepSize/2))). ((1+OffSet+(?Step*StepSize)) wrapTo02)-1-`=!`T|8lD8x D l98l 8p 0`|0P8|``aa$ad=!` @  "4dFD@@ppaa$ad-d47779=aax m=aaEnter a name for this Sound.4Step)"9=````=y mx  sThis number corrispond to the sample number when the output is fed into a memory reader or writers index. A value of 1 is the first sample as long as the "AsAddition" value is zero or less and the "NoOfSamples" matches the reader/writer.4AsAddition)"9=x s``=wmz m A value of zero or less in this field will make a step value of one, output something near minus one. This should be used if this is the only module feeding the index. A value of one or greater than zero in this field will cause a step value of zero to out put zero. This should be used if this signal is being mixed with another index. In this case the step number represents the number of sample that the other index is being offset by.4NoOfSamples)"9=bc``=x sxmThis value must be the same as the total number of samples in the memory reader or writer.This module will generate a dc value from the number placed in the step field . When the ourput is used as an index for a memory reader or writer , The sample being read or writen to corisponds to the number in the step field , as long as the NoOfSamples equels the total number of samples in the reader/writer. If the "AsAddition" value is logic one(>0) ,this module can also be used (with the help of a mixer) to add or subtract the sample steps to and from an already existing index. The Output is wrapped around so that step values which move upwards greater than "NoOfSamples" will generate an output starting from minus one again. PeteJohnstonsDSPMods Ver 5(NumberToIndex-b14119=dy=lna``=z.3MonostableInFreq#(MonostableInFreq ???-c14-f,Frequency`3GateToTrigger#(GateToTrigger???-c14-b,Input`119=f=nt168=sd=tl*`! #-`AsLogic-`=od-`*a&. | maxAmp LoVal HiVal | maxAmp := SignalProcessor maximumAmplitude. HiVal := maxAmp. LoVal := 0.0. LoVal :=?PlusAndMinusOne true: (maxAmp+1) false: 0. HiVal :=?Invert true: LoVal false: HiVal. LoVal :=?Invert true: maxAmp false: LoVal. self initialValueAt: 0 xPut: HiVal yPut:LoVal. self initialValueAt: 1 xPut: 0 yPut: 0. 3`GateToTriggerkym1.`=!`@D@D@D@D@D@D@D|``aa%)l{~{~{~gygygy-ddddfbaad=!`|yDIDIDI@A@A@A@Appaa?ad-d47779=aax m=aaEnter a name for this Sound.48)"9=y  s``=aay mWhen this value is greater than zero, the output goes from -1 to +1. If not the output goes from 0 to 1.49::9=``=xma4>)"9=xm``=x  sy mWhen this value is greater than zero the output is inverted as per logic values not analogue. i.e. 1 becomes 0 and 0 becomes 1 (assuming PlusAndMinusOne value is low).This module generates a one sample wide pulse every time the input goes from zero (orbelow) to anything above zero. It converts wide pulses to thin pulses. It can also be used as a one direction zero crossing detector(GateToTrigger-a168=sd=xp*`> #-`GateToTrigger-`=sd-``,Trigger``(`119=a=gv168=sd=tl*`!1Mixer20-`=od-`*b ; =.| maxAmp TrigPer Percent LoVal HiVal | maxAmp := SignalProcessor maximumAmplitude. Percent := ?DurationScale. TrigPer := (?TriggerMode rounded) of:#(0 ?DurationScale 1 ). HiVal := maxAmp. LoVal := 0.0. LoVal :=?PlusAndMinusOne true: (maxAmp+1) false: 0. HiVal :=?Invert true: LoVal false: HiVal. LoVal :=?Invert true: maxAmp false: LoVal. self initialValueAt: 0 xPut: TrigPer*maxAmp yPut: 0 . self initialValueAt: 1 xPut: Percent*maxAmp yPut: LoVal. self initialValueAt: 2 xPut: HiVal yPut:0. 3`PulseStretcherFreqkym1.`=!`       p8@``aa$ad=!`     ? (?+"D"Dppaa$ad-g4777&Enter a name for this Sound.4frequency::9=````=bax m This input controls the duration but is expressed as the period of the given frequency. A value of zero gives 0hz and a value of 1 gives a frequency of half the current kyma sample rate. This falls in line with Oscilator bank, Pitch tracker and other kyma Modules. The monostable time can be calculated by (1/Frequency)*DurationScale. Note that the Duration can only be as acurate as the nearest whole sample. Right chanel is ignored. 4TriggerMode)"9=xm``=x sbaThere are three trigger modes which are selected by placing value 0,1 or 2 in this field. FIRST MODE value 0. In this mode the rising edge of the Trigger input will make the output go hi for the Monostable duration wether the Trigger input remains hi for more or less than the Monostable duration. If a retrigger occurs during the Monostable time, the monostable time will start again and the output will remain Hi for the extra duration. SECOND MODE value 1 This is the same as the first mode exept that a retrigger happening during the Monostable time will be ignored. A retrigger will not be possable until the Monostable time is compleate and the output has returned to zero. THIRD MODE value 2 This is similar to the above except that a retrigger is not possiable untill the full unscaled duration has compleated. This means that the output may have returned to zero because the DurationScale is set to 0.5 but retrriger wil still not be possable until twice the duration time. i.e. Output will return to zero after (1/Frequency)*DurationScale. Retrigger will only be allowed after (1/Frequency). This mode is useful when the Monostable is being used to generate envelopes that need a decay time.4>)"9=x m``=x sy  sWhen this value is greater than zero the output is inverted as per logic values not analogue. i.e. 1 becomes 0 and 0 becomes 1 (assuming PlusAndMinusOne value is low).4trigger::9=xmba=x sx mThe Monostable is triggered when this input changes from Lo to Hi (zero or lower to one or greater than zero). The transition from Hi back to Lo will have no bearing on the Monostable operation. Right input is ignored.4DurationScale)"9=aaz m=x  sxmValue range from 0 to 1 . This value scales down the duration time set by the Frequency input. Monostable Duration is (1/Frequency)*ScaleDuration. If the value 1 is put in this field the Monostable time will be the period of the Frequency Input48)"9=x my m=x sbcWhen this value is greater than zero, the output goes from -1 to +1. If not the output goes from 0 to 1.This is a Monostable which can have it's duration changed and be triggered at sample rate speed. The duration is controlled by a value on its Frequency input whitch is the time that one cycle would take if it were an oscilator. The Frequency inputs value is set to fall in line with Oscilator bank, Pitch tracker and other kyma Modules. It is triggered by the Trigger input changing state from Lo to Hi and the pulse width of the signal at the Trigger input has no relivents. If you need to add time to an existing wide pulse (Pulse Stretch) you should look at an Astable module. PeteJohnstonsDSPMods Ver 5MonostableInFreq:GenericSource Mono Sample>MSDOSa!a%{ ma*```(a`=r p.3DisableGate#(DisableGate ???-c14-d,Input},Disable`119= qn=yc168=sd=tl*`!13-`=od-`*b9;. | maxAmp LoVal HiVal | maxAmp := SignalProcessor maximumAmplitude. HiVal := maxAmp. LoVal := 0.0. LoVal :=?PlusAndMinusOne true: (maxAmp+1) false: 0. HiVal :=?Invert true: LoVal false: HiVal. LoVal :=?Invert true: maxAmp false: LoVal. self initialValueAt: 0 xPut: LoVal yPut:HiVal. 3`DisableGatekym1.`=!``큀hhm`eglph`````aa$ad=!` Hu֒p`ppaa$ad-e4777&Enter a name for this Sound.4Disable::9=xm`=aawmThe output is forced to zero if this signal is 1 or greater than zero. Otherwise the output follows the inputs logic state. Right channel is ignored4>)"9=bc``=w sy  sWhen this value is greater than zero the output is inverted as per logic values not analogue. i.e. 1 becomes 0 and 0 becomes 1 (assuming PlusAndMinusOne value is low).49::9=| m`=bawmThe output will be 1 when this input is 1 (or greater than 0 ) and the output will be 0 when this input is 0 or below, as long as the disable input ic 0 or below. Right channel is ignored48)"9=bcy m=w sbcWhen this value is greater than zero, the output goes from -1 to +1. If not the output goes from 0 to 1. This is simply a two input and Gate with one of it's inputs inverted. It is a very useful gate as because when the disable Input (the inverted one) goes Hi the output is disabled in a lo state. If the disable input is Lo , the other input goes to the output (as logic) unaltered. PeteJohnstonsDSPMods Ver 5(DisableGate-b14-d8DisableDisablea8Input.h168=gd=ub*b37``````ca`aDisable #-`>7`a"a#aa3b-mvvvvvvvvvvvvfaa`a&-a1>aab`a`"37`ca```ba`aInput>>-`a"a#aa.a-mpppppppppppp}aa`a&-a1>aaa`a`">>DisableGate-`=dd-`1`4`= s.2MEMORY WRITERS AND INDEXING TOOLS-----------=`k.3MixerWithFlipOver#(Mxr with flip-c14119=g e=oz168=sd=tl*b37``````ca`aAmpLow6>AmpLow`a"a#aaAmpLowa-mpppppppppppp}|e`a&-b1!|e1>|ea`a`"37`ca```ba`aLogFreq6>LogFreq`a"a#aaLogFreqb-mvvvvvvvvvvvvjp`a&-b1!p1>pb``"!6MixerWithWrapAround-`=od-`&."maxAmp := SignalProcessor maximumAmplitude." self initialValueAt: 0 xPut: 0 yPut: self subSounds size. 3`MixerWithFlipkym1.`=!`!!@?!@ ( 9Μ9x<<x``aa$ad=!`pPPp@>>sppaa$ad-b47779=aax m=aaEnter a name for this Sound.4 $ % %9=``=aaaThis class has no description. PeteJohnstonsDSPMods Ver 5(MixerWithFlipOver-b14-j:GenericSource Mono Sample>MSDOSa!a%{ m!level*``:9>MSDOSa!a%{ m!level*``:9>:a;<!level>`:9>:a;<!level>`:9>MSDOSa!a%{ m!level*``168=x v=xp*a37``````ca`aLevel #-`>Level`a"a#aaLevela-mppppppppvvvrcaa`a&-a1>aaa`a`">7MixerWithFlipOver-`=x v-`*e?%)'8=zv.3StepWriter#(StepWriter???-b14-f,Write`,Index`,Input`168=ja=ck*`> #-`StepWriter-`=ua-`*c1/3.| "maxAmp" scale offset TrueSamp EvenSamp StartSamp ExtraSamp DeadSamp | "maxAmp := SignalProcessor maximumAmplitude." TrueSamp:=(?NoOfSamples+0.5)truncated. EvenSamp:=2*(((TrueSamp+1.1)/2)truncated). StartSamp:=self tableAddress. ExtraSamp:=StartSamp+TrueSamp+0. DeadSamp:=StartSamp+TrueSamp+1. offset := ((StartSamp) + (EvenSamp/2))truncated. scale :=( EvenSamp/2)truncated . self initialValueAt: 0 xPut: scale yPut: offset. self initialValueAt: 1 xPut: DeadSamp yPut: StartSamp+1. self initialValueAt: 2 xPut: ExtraSamp yPut: 0. 3`StepWriter7writeOnly`===8NoOfSamples'6-aaa'truncated-`'6-aa=!`BBBBBB <\4 `@  ``aa$ad=!`YiY `@@ ppaa$ad-f47779=aax m=aaEnter a name for this Sound.4#$%9=x  s``=x sw{Name of the ram table. should match a reader49::9=````=baw sOnly the left input is writen to ram but the output gets the sterio input un altered.4index::9=xm``=xmx sThis level tells the writer which sample to write to. -1 is the first sample and +1 is the last. The other samples are proprtionatly spaced between them. The input will only be writen to the ram when the"Write" level is greater than zero.4Write::9=xmx s=xmw sWriting will only happen when this signal is greater than one. No writing will take place if this signal is zero or less. A gate to trigger module can be used to ensure only one sample is stored at a time.4 """9=bcaa=w sx mThis is the total numder of samples in the wave table.This module lets you write to sample ram in a random order , one or more steps at a time. PeteJohnstonsDSPMods Ver 5(StepWriter-b14-f8IndexIndex`8InputValue`8WriteWrite`168=ja=du*c37````g`i`Index #-`>MIDIController21`a"a#ab?v-mbbbbbbbbbbbbtaa`a&-a1>aavaa`"37g```n`i`Value.>Value`a"a#aa"b-m~~~~~~~~~~~~gaa`a&-a1>aabaa`"37n``` t`i`Write.>-`a"a#aa%a-mxxxxxxxxxxxx~aa`aToggle-a1>aaa`a`">.StepWriter-`=va-`Table =#`=na.3Toggle#(Toggle ???-c14-b,Input`119=py=xn168=sd=tl*`default9 9-`=hd-`*a5. | maxAmp LoVal HiVal | maxAmp := SignalProcessor maximumAmplitude. HiVal := maxAmp. LoVal := 0.0. LoVal :=?PlusAndMinusOne true: (maxAmp+1) false: 0. HiVal :=?Invert true: LoVal false: HiVal. LoVal :=?Invert true: maxAmp false: LoVal. self initialValueAt: 0 xPut: 0 yPut:0. self initialValueAt: 1 xPut: HiVal yPut:LoVal. 3`Togglekym1.`=!```aa$ad=!`qQQQAAAAppaa$ad-d47773Enter a name for this Sound.4>)"9=xm``=x  sy mWhen this value is greater than zero the output is inverted as per logic values not analogue. i.e. 1 becomes 0 and 0 becomes 1 (assuming PlusAndMinusOne value is low).48)"9=y  s``=aay mWhen this value is greater than zero, the output goes from -1 to +1. If not the output goes from 0 to 1.49::9=``=xmaRight input channel ignored. Every time the input moves from zero (or less) to one ( or >0 ) the output changes its state, ether from zero to one or from one to zero. This means that if you put a square wave of 1 Khz into its input , you get another square wave of 500 hz at its output. This emulates the task that many JK Flipflops do, and is similar to the octave deviders you got in early electronic organs. PeteJohnstonsDSPMods Ver 5Toggle``:GenericSource Mono Sample>MSDOSa!a%{ ma*`=| t.3MonostableInTime#(MonostableIntime ???-c14-hMusicNoname:inputs:script:left:right:retrograde:reverse:Script1*b,Trigger >(Pulse-a168=sd=xp*`>"Script1-`=sd-``9`.?PulseStretch ifTrue:[Trigger start: 0s] ifFalse:[Pulse start: 0s].3`aa`;`,Duration`9`119=xh=xk168=sd=tl*`!13-`=od-`*b+3.| maxAmp SR RampInc TrigMo LoVal HiVal | SR :=SignalProcessor sampleRate. maxAmp := SignalProcessor maximumAmplitude. RampInc := maxAmp /(((?MaxDuration s)removeUnits)*SR). HiVal := maxAmp. LoVal := 0.0. TrigMo :=?TriggerMode true: -1 false: 0 . LoVal :=?PlusAndMinusOne true: (maxAmp+1) false: 0. HiVal :=?Invert true: LoVal false: HiVal. LoVal :=?Invert true: maxAmp false: LoVal. self initialValueAt: 0 xPut: RampInc yPut: maxAmp . self initialValueAt: 1 xPut: LoVal yPut: TrigMo . self initialValueAt: 2 xPut: HiVal yPut:0. 3`PulseStretcherTimekym1.`=!`????       p8@``aa$ad=!` <    <? (?+"D"Dppaa$ad-h4777&Enter a name for this Sound.48)""When this value is greater than zero, the output goes from -1 to +1. If not the output goes from 0 to 1.4MaxDuration."9=| m``=z mbaThis value is what the Monostables on time would be if the Duration input was given a value of 1.4>)"1When this value is greater than zero the output is inverted as per logic values not analogue. i.e. 1 becomes 0 and 0 becomes 1 (assuming PlusAndMinusOne value is low).4PulseStretchboolean29=x sxm=wmaa If this is deselected, the Trigger input acts as a trigger and the Monostable on time will start when the trigger goes from Lo to Hi. When this is selected The trigger input acts as a Gate and this input will be passed through to the output but with the extra Monostable on time added on the end . In other words the Monostable on time starts when this input goes to zero.4duration::9=| mba=z mx mThe Value at this input represents the monostables on time as a proportion of the MaxDuration value. This must be a positive value. Any negative value will force the output value Lo. Monostable on time is Duration value * MaxDuration.46::9=baba=y mx m The Monostable is triggered when this input changes from Lo to Hi (zero or lower to one or greater than zero). The transition from Hi back to Lo will have no bearing on the Monostable operation if the PulseStretch option is not selected. If the PulseStretch option is selected the Monostable On time will start only when this signal returns to a Lo state. Right input is ignored.4+)"9=ba``=y mbaThere are Two trigger modes FIRST MODE value 0 or below 0. In this mode the Monostable on time can freely be retriggered at any time. SECOND MODE value 1 or greater than 0. In this mode the Monostable can only be retriggered when the output is Lo (or the ontime has finnished).This module is a Monostable which can be triggered and time adjusted at sample rate. The value at the duration input is multiplied by the MaxDuration value to give the Monostable on time. PeteJohnstonsDSPMods Ver 5(MonostableInTime-b14-d8DurDuration`8Constant55Triggers168=gm=ub*`> #-`MonostableInTime-`=dm-``< MaxDuration'*-``-0 TriggerMode=m q.3AndGate#(AndGate ???-c14119=hx=as168=sd=tl*`!9"-`=od-`&. | maxAmp LoVal HiVal | maxAmp := SignalProcessor maximumAmplitude. HiVal := maxAmp. LoVal := 0.0. LoVal :=?PlusAndMinusOne true: (maxAmp+1) false: 0. HiVal :=?Invert true: LoVal false: HiVal. LoVal :=?Invert true: maxAmp false: LoVal. self initialValueAt: 0 xPut: HiVal yPut:LoVal. self initialValueAt: 1 xPut:self subSounds size yPut: 0. 3`AndGatekym1.`=!`|6""66a"A!!2c'<``aa$ad=!` H`ppaa$ad-d47773Enter a name for this Sound.4 $ % %9=````=aax mMaximun 30 inputs4>)"?This turns the module into a NandGate . When this value is greater than zero the output is inverted as per logic values not analogue. i.e. 1 becomes 0 and 0 becomes 1 (assuming PlusAndMinusOne value is low).48)"9When this value is greater than zero, the output goes from -1 to +1. If not the output goes from 0 to 1.And Gate or Nand Gate PeteJohnstonsDSPMods Ver 5AndGate-b:GenericSource Mono Sample>MSDOSa!a%{ ma*`:GenericSource Stereo Sample>flamingos sa!a%{ ma*```=n s.3GateToTrigger#(GateToTrigger???-c14-b,Input`119=f=nt168=sd=tl*`!9 9-`=od-`*a(. | maxAmp LoVal HiVal | maxAmp := SignalProcessor maximumAmplitude. HiVal := maxAmp. LoVal := 0.0. LoVal :=?PlusAndMinusOne true: (maxAmp+1) false: 0. HiVal :=?Invert true: LoVal false: HiVal. LoVal :=?Invert true: maxAmp false: LoVal. self initialValueAt: 0 xPut: HiVal yPut:LoVal. self initialValueAt: 1 xPut: 0 yPut: 0. 3`GateToTriggerkym1.`=!`@D@D@D@D@D@D@D|``aa$ad=!`|yDIDIDI@A@A@A@Appaa$ad-d47773Enter a name for this Sound.48)"7When this value is greater than zero, the output goes from -1 to +1. If not the output goes from 0 to 1.49::<4>)"2When this value is greater than zero the output is inverted as per logic values not analogue. i.e. 1 becomes 0 and 0 becomes 1 (assuming PlusAndMinusOne value is low).This module generates a one sample wide pulse every time the input goes from zero (orbelow) to anything above zero. It converts wide pulses to thin pulses. It can also be used as a one direction zero crossing detector PeteJohnstonsDSPMods Ver 5(GateToTrigger-c14-b:GenericSource Mono Sample>MSDOSa!a%{ ma*``119=ya=av168=sd=xp*`> #-`GateToTrigger-`=sd-``/`=c t.3OrGate#(OrGate ???-c14119=hx=as168=sd=tl*`!9"-`=od-`&. | maxAmp LoVal HiVal | maxAmp := SignalProcessor maximumAmplitude. HiVal := maxAmp. LoVal := 0.0. LoVal :=?PlusAndMinusOne true: (maxAmp+1) false: 0. HiVal :=?Invert true: LoVal false: HiVal. LoVal :=?Invert true: maxAmp false: LoVal. self initialValueAt: 0 xPut: HiVal yPut:LoVal. self initialValueAt: 1 xPut:self subSounds size yPut: 0. 3`OrGatekym1.`=!`|<``aa$ad=!` `ppaa$ad-d47773Enter a name for this Sound.4 $ % % &Maximun 30 inputs4>)"?This turns the module into a NorGate . When this value is greater than zero the output is inverted as per logic values not analogue. i.e. 1 becomes 0 and 0 becomes 1 (assuming PlusAndMinusOne value is low).48)"9When this value is greater than zero, the output goes from -1 to +1. If not the output goes from 0 to 1.Or Gate or Nor Gate PeteJohnstonsDSPMods Ver 5OrGate-b:2>3a45a6:8>9a:;a<``=` s.3RampGenerator in SamplesDSPProgramnname:initialValuesCodeString:programName:wavetable:tableAccess:tableStart:tableEnd:(Ramp3????-c14119=ah=i}168=eg=du*`> #-`RampGenerator in Samps-`=qg-`.| maxAmp MaxVal CountVal StartVal Gain TrueSamp errComp HiGain LoGain HalfESamp | maxAmp := SignalProcessor maximumAmplitude. TrueSamp:=?NoOfSamps rounded. HalfESamp:=((TrueSamp+1)/2)truncated. StartVal := 0-HalfESamp. MaxVal := ((TrueSamp/2)-1)truncated. CountVal := maxAmp. Gain:= (23-(HalfESamp twoLog)) twoExp. errComp:=(Gain/2)*(1-?OffSetHalfStep). HiGain := Gain truncated. LoGain := ((Gain-HiGain)*(maxAmp+1)). self initialValueAt: 0 xPut: MaxVal yPut: CountVal. self initialValueAt: 1 xPut: StartVal yPut: HiGain. self initialValueAt: 2 xPut: errComp yPut: LoGain. 3`Ramp3kym1.`=!`8q dٚ)`Z(9j, + E m 9 @   0@@ @@4@@d@@ @AAC0CF`FLLXXpp````aa$ad=!`[[UQS 0q4eppaa$ad-c47779=aax m=aaEnter a name for this Sound.4NoOfSamps)"9=````=y mwm4OffSetHalfStep)"9=x  s`=w sxmIn 99.9% of cases this value should be zero. If it is set to one ,the output is moved down by half a step. The only time this should be set to one is if it is feeding a Wave Shaper with interpolation switched on and and nothing else. And even then it is only needed if it is absolutly important that the wave shaper interpolates on the center of the sample. In all other cases if you use one in this field , readers and writers will try to write on the border between samples and buzzes will be heard.This is a repeating Ramp Generator optimized for use as an index for memory readers and writers. PeteJohnstonsDSPMods Ver 5RampGenerator in Samples``=lt.3AstableInFreq#(AstableInFreq ???-b14-d,Frequencyj,Gate`168=sd=tl*`!13-`=od-`*b 5 7.| maxAmp TrigPer Percent LoVal HiVal | maxAmp := SignalProcessor maximumAmplitude. Percent := ?PulseWidth. TrigPer := (?GateMode rounded) of:#( 1 0 ?PulseWidth ). HiVal := maxAmp. LoVal := 0.0. LoVal :=?PlusAndMinusOne true: (maxAmp+1) false: 0. HiVal :=?Invert true: LoVal false: HiVal. LoVal :=?Invert true: maxAmp false: LoVal. self initialValueAt: 0 xPut: TrigPer*maxAmp yPut: 0 . self initialValueAt: 1 xPut: Percent*maxAmp yPut: LoVal. self initialValueAt: 2 xPut: HiVal yPut:0. 3`PulseStretcherFreqkym1.`=!`@@@@@~~B BB BB BB BB BB BB BB BB BB BB BC?``aa$ad=!`{B B r F0Gppaa$ad-g4777&Enter a name for this Sound.4%::&This input controls the frequency. A value of zero gives 0hz and a value of 1 gives a frequency of half the sample rate. This falls in line with Oscilator bank, Pitch tracker and other kyma Modules. In non oscilator mode this controls the pulse stretch duration (1/Frequency). Note that the frequency is only acurate to the nearest whole sample. If you need better acuracy, a pulse wave could be derived from the RampInFreq model. Right chanel is ignored. 4>)"1When this value is greater than zero the output is inverted as per logic values not analogue. i.e. 1 becomes 0 and 0 becomes 1 (assuming PlusAndMinusOne value is low).4-::9=xmba=x sx m This input resets the modules timer when the signal is greater than zero and allows the time to clock when the signal is zero or less. When Gate mode is type zero, the reset action is inhibited during the timer period and allowed at other times, hence if a Hi value is maintained on this input, the timer will cycle.4GateMode)"9=xm``=x sbaThere are three GateModes which are sellected by the value placed in this field. The modules timer is reset when the Gate input is 1 (or greater than 0) and allowed to count when the Gate input is zero or less FIRST MODE Value 0 In this mode the gate input is disabled from reseting the modules timer while the timer is counting and so that if the gate input is set to one continuusly, the module will reset the timer when the timer has finished and allow the timer to count when the timer has been reset. hence the module will oscilate. The oscilation will start when the gate signal goes to one , and can be usefull for sync signals. SECOND MODE Value 1 In this mode the output will be held Hi when the gate is Hi and remain Hi (after the Gate has returned to zero) for the duration set by the frequency input and the PulseWidth value i.e. duration = PulseWidth*(1/Frequency). The gate going Hi at any time will reset the timer and make the output go Hi. THIRD MODE value 2 This is like the second mode exept that the timer reset will not be allowed during the first half (if PulseWidth is 0.5) of the timer duration. This is not so usefull as ther is no indication that the timer has been reset. This is because the output remains Hi when the gate is Hi wether or not the timer is being reset. 4PulseWidth)"9=aaz m=x  sxmThe value in this field divides the modules timer duration into two and causes the output to go Hi for the first part of the duration and Lo forthe second part. With a value of 1 the output will remain Hi for the whole of the timers duration and with a value of zero , the output will go Hi for just the first sample. A value of less than zero will cause no output for the duration of the timer. This would be like putting the gate inputs logic value strieght throught to the output. This fields value represents the Mark/Space value of the pulse wave when the GateMode has a value zero and the gate input is Hi.48)""When this value is greater than zero, the output goes from -1 to +1. If not the output goes from 0 to 1.This is a variable pulse width square wave generator. In most cases the pulse train module would be better suited. This module should be used if gating and frequency control has to be adjusted at sample rate. To make it oscilate, the Gate signal must be greater than zero, the Gate Mode must be set to zero and the PulseWidth value must be greter than zero and less than one. It can also be used as a pulse stretcher if the Gate Mode is set to 1 or 2. See GateMode for details. PeteJohnstonsDSPMods Ver 5(AstableInFreq-c14-b:)>*a+,a-`119=av=`f168=d|=ub*`> #-`AstableInFreq-`=a|-` +` +`aa`= a q.3SlewRateLimiter#(SlewRateLimiter??? with time-c14-b,Input`119=bz=vc168=sd=tl*`!9 9-`=od-`*a &.| maxAmp UpRate DownRate SR tUp tDown | SR := SignalProcessor sampleRate. maxAmp := SignalProcessor maximumAmplitude. tUp:=?UpRate s removeUnits *SR. tDown :=?DownRate s removeUnits*SR. tUp := (tUp gt: 1) true: tUp false: 1. tDown := (tDown gt: 1) true: tDown false: 1. UpRate := maxAmp/tUp . DownRate := maxAmp/tDown. UpRate := (UpRate gt: maxAmp) true: maxAmp false: UpRate. DownRate := (DownRate lt:0- maxAmp) true: maxAmp+1 false: DownRate. self initialValueAt: 0 xPut: 0.0 yPut:0.0. self initialValueAt: 1 xPut: DownRate yPut: UpRate. 3`SlewRateLimiterkym1.`=!`;  ! ##&,,80`0`?``aa%)l{{{{{{ffffff-ddddfbaad=!`; &0$,88,$07ppaa  #-`PulseTrain4-`=sd-`<<FreqLow'hz-`'inverse-`aaa`168=sd=ub*`> #-`SlewRateLimiter-`=pd-`!((!FreqLow inverse)*(!Dramp/2)) s!((!FreqLow inverse)*(!Uramp/2)) s>= zw.04:&>'a()a*)= n r.3OneSampleDelay#(OneSampleDelay ???-b14-b,Input`168=fl=i{*`> #-`OneSampleDelay-`=wl-`*a5.self initialValueAt: 0 xPut: 0 yPut: 03`OneSamp&.`=!`OLHJHINHHHHHO8 DPƄ@A9E9yDEDE"lEA(EA8EEAEAyA``aa$ad=!`:+**:..U((;+9ppaa$ad-b47779=aax m=aaEnter a name for this Sound.49::9=``=y mx mLeft Input is delayed and sent to the left output. Right input is delayed and sent to the right output.The input is delayed by one sample. This module is in full sterio PeteJohnstonsDSPMods Ver 5OneSampleDelay:GenericSource Mono Sample>MSDOSa!a%{ ma*`=do.3Switch#(Switch ???-c14-d,Gate`,Input`119={a=cv168=kr=cz*`> #-`Switch-`=hr-`*b)+.| maxAmp OffVal | maxAmp := SignalProcessor maximumAmplitude. OffVal := (maxAmp+1)* ?OffValue. self initialValueAt: 0xPut:0 yPut: OffVal. "self debug: self paramPtr."3`Switchkym1.`=!`?`??`AP@@@``aa$ad=!` /8@` ppaa$ad-d47779=aax m=aaEnter a name for this Sound.4-::9=xmz m=aawm49::9=````=bax m4OffValue)"9=x  s``=w sy mThis class has no description. PeteJohnstonsDSPMods Ver 5Switch:GenericSource Mono Sample>MSDOSa!a%{ ma*`>`=j r.3AsLogic#(AsLogic???-c14-b,)`119={t=ci168=sd=tl*`!9 9-`=od-`*a/. | maxAmp LoVal HiVal | maxAmp := SignalProcessor maximumAmplitude. HiVal := maxAmp. LoVal := 0.0. LoVal :=?PlusAndMinusOne true: (maxAmp+1) false: 0. HiVal :=?Invert true: LoVal false: HiVal. LoVal :=?Invert true: maxAmp false: LoVal. self initialValueAt: 0 xPut: HiVal yPut:LoVal. 3`AsLogickym1.`=!` } pl9``aa$ad=!` UVb pppaa$ad-d47773Enter a name for this Sound.48)"7When this value is greater than zero, the output goes from -1 to +1. If not the output goes from 0 to 1.49::<4>)"2When this value is greater than zero the output is inverted as per logic values not analogue. i.e. 1 becomes 0 and 0 becomes 1 (assuming PlusAndMinusOne value is low).Converts a signal to a logic value. When the input is greater than zero the output is one otherwise the output is zero. This module can also be used as a NOT gate or logic inverter by putting one into the Invert field PeteJohnstonsDSPMods Ver 5AsLogic`:0>1a23a4`=p t.3MixerWithWrapAround#(mxr with wrap???-b14168=sd=tl*`!6:-`=od-`&."maxAmp := SignalProcessor maximumAmplitude." self initialValueAt: 0 xPut: 0 yPut: self subSounds size. 3`MixerWithWrapkym1.`=!`!!@?!@ @( 9Μ9<x``aa$ad=!`pPPp@<tp0ppaa$ad-b47779=aax m=aaEnter a name for this Sound.4 $ % %9=``=aaaThis class has no description. PeteJohnstonsDSPMods Ver 5(MixerWithWrapAround-b14-dSuperOscillator}name:frequency:wavetable:modulation:modulator:maxMI:interpolation:envelope:pitchBend:reset:Oscillator8<<5'smoothed-`'nn-`Kyma Mac:Kyma:Waves:Control:fullramp.8Constant``.<+'&-````?Oscillator9<<5'&-`')-`Kyma Mac:Kyma:Waves:Control:fullramp.8-``.<+'&-````168= y y=xp*b37``````ca`a( #-`>*`a"a#aa+b-mvvvvvvvvvvvvh|e`a&-a1>|eb`a`"37`ca```ba`a2%>4`a"a#aa5a-mpppppppppppp{p`a&-a1>pa``">%MixerWithWrapAround-`=y y-`*b>1= g.3RampGenerator in Seconds7(Ramp3 in time????-c14119= fo=nd168=eg=du*a37g```n`i`NoOfSamps '> =`a"a#aa NoOfSampsa-mrrrrrrrrrrrraa`a&-a1>aaa```"> ' )-`=qg-`.| maxAmp MaxVal CountVal StartVal Gain TrueSamp errComp HiGain LoGain HalfESamp Samps | maxAmp := SignalProcessor maximumAmplitude. Samps:=(?Rate removeUnits*SignalProcessor sampleRate). TrueSamp:=Samps rounded. HalfESamp:=((TrueSamp+1)/2)truncated. StartVal := 0-HalfESamp. MaxVal := ((TrueSamp/2)-1)truncated. CountVal := maxAmp. Gain:= (23-(HalfESamp twoLog)) twoExp. errComp:=(Gain/2)*(1-?OffSetHalfStep). HiGain := Gain truncated. LoGain := ((Gain-HiGain)*(maxAmp+1)). self initialValueAt: 0 xPut: MaxVal yPut: CountVal. self initialValueAt: 1 xPut: StartVal yPut: HiGain. self initialValueAt: 2 xPut: errComp yPut: LoGain. 3`Ramp3kym1.`=!`? #-`RampGenerator in Seconds-`=cq-`%a`=by.3SetableRamp3MixerWithWrapAround#(mxr with wrap???-b14168=sd=tl*`!9"-`=od-`&."maxAmp := SignalProcessor maximumAmplitude." self initialValueAt: 0 xPut: 0 yPut: self subSounds size. 3`MixerWithWrapkym1.`=!`!!@?!@ @( 9Μ9<x``aa%)l{~{~{~gygygy-ddddfbaad=!`pPPp@<tp0ppaa;ad-b47779=aax m=aaEnter a name for this Sound.4 $ % %9=``=aaaThis class has no description.(SetableRamp ???-c14-n,MasterRampt,Trigger`,IndexPoint`'INVERT`3a`%(MixerWithWrapAround-a168= y y=xp*`> #-`MixerWithWrapAround-`=y y-`*b3Negate#(Negate ???-c14-b,Input`119=i y=qn168=kr=cz*a37````{`n`Value6>9`a"a#aa"a-mppppsppppppp{aa`a&-a1>aaaaa`">6Negate-`=vr-`*a2.self initialValueAt: 0xPut:0 yPut: 0. 3`Negatekym1.`=!`OH1HHO9H HH1O@!aG!@!G!@!@!``aa$ad=!`ppaa$ad-b47779=aax m=aaEnter a name for this Sound.49::9=``=xmx m This module inverts the Input Signal. In most cases it would be better to use a mixer with a level of 0-1 or some other method of inverting. This should only be used with wraparound type maths (ie when forming indexes) as minus one input makes minus one output. This is because true plus one doesn't exist in two's complement numbers. PeteJohnstonsDSPMods Ver 5(Negate-a168=om=cz*`> #-`Negate-`=hy-`15`3TrackAndHold#(TrackAndHold???-b14-d,Input`,Gate`168=sd=tl*`!9TrackAndHold-`=od-`*b57.self initialValueAt: 0 xPut: 1 yPut: 0. 3`TrackAndHoldkym1.`=!` 8 0`@`H@@A@D@@@@@@@``aa%)l{~{~{~gygygy-ddddfbaad=!`pXppaa*ad-c47779=aax m=aaEnter a name for this Sound.4-::9=ba``=x sx mWhen this signal is zero or below the input is passed to the output. When this signal rises above zero the output is frozen at the current value and remains there until this signal goes back to zero or below.49::9=```=z mx mThis class has no description.TrackAndHold79`)`119=p|=xq168=q|=xp*`>"SetableRamp-`=y y-`*b,1=!`???? 0`0 0`0 0`0 0`0 0`0@@@0@p@0p@A00G0 0N00080MSDOSa!a%{ ma*`22= ne.3SetableRamp2%(SetableRamp2 ???-c14-n,6`*(?-a168=om=cz*`>&(-`=hy-`,2`04'8`,4a%(;-a168= y y=xp*`>"$-`=y y-`*b$#`/t3`1`2`119=tg=||168=q|=xp*`>"*-`=y y-`*b0/=!`???? 0`0 0`0 0`0 0`0 0`0@@@0@p@0p@A00G0 0N000808:-`=cq-`>``8Index?`168=}o=ui*`> #-`SetableRamp2-`=zo-`"$/= bm.3Up/Down Counter#(CounterRamp ???-c14-f,CountUp`,CountDown`,Reset`119=jh=lk168=ak=vq*e37``q`}`e`CountDown #-`>CountDown`a"a#aa CountDownf-mttttttttttttxaa`a&-a1>aafaa`"37}`q`z`e`CountUp9>CountUp`a"a#aaCountUpe-mnnnnnnnnnnnnoaa`a&-a1>aae`a`"37z`q` w`e`NoOfStepsDownwards9>NoOfStepsDownwards`a"a#aaNoOfStepsDownwardsb-mxxxxxxxxxxxxlaa`a&-a1>aab`t`"37 w`q`t`e`NoOfStepsUpwards9>NoOfStepsUpwards`a"a#aaNoOfStepsUpwardsa-mrrrrrrrrrrrrdaa`a&-a1>aaa`t`"37````}`q`Reset9> (`a"a )aa *q-mhhhhhhhhhhhhe``aButton-a1>`q`a`">9Up/Down Counter-`=hf-`*c')+.| maxAmp MaxVal CountVal StartVal Gain TrueSamp errComp HiGain LoGain HalfESamp InStep DeStep ResToMax ResToMin | maxAmp := SignalProcessor maximumAmplitude. TrueSamp:=?NoOfSamps rounded. HalfESamp:=((TrueSamp+1)/2)truncated. StartVal := 0-HalfESamp. MaxVal := ((TrueSamp/2)-1)truncated. CountVal := maxAmp. Gain:= (23-(HalfESamp twoLog)) twoExp. errComp:=(Gain/2)*(1-?OffSetHalfStep). HiGain := Gain truncated. LoGain := ((Gain-HiGain)*(maxAmp+1)). InStep := ?NoOfStepsUpwards rounded. DeStep := (0-?NoOfStepsDownwards) rounded. StartVal := StartVal+(?FirstStepOffSet rounded). ResToMax := ?WrapAround true: MaxVal false: StartVal. ResToMin := ?WrapAround true: StartVal false: MaxVal. self initialValueAt: 0 xPut: InStep yPut: DeStep. self initialValueAt: 1 xPut: ResToMax yPut: MaxVal. self initialValueAt: 2 xPut: ResToMin yPut: CountVal. self initialValueAt: 3 xPut: StartVal yPut: HiGain. self initialValueAt: 4 xPut: errComp yPut: LoGain. 3`CounterRampkym1.`=!` p# qp0`` 0      @   !!!3``aa$ad=!`L C0A@ @p@ pPPppaa$ad-j4777 8Enter a name for this Sound.4WrapAround)"9=w sz m=bcaaIf this value is greater than zero the output will generate a repeating ramp, otherwise the output will stop changing value when it reaches plus or minus one.4 +::9=y m``=wmxmA value of greater than zero in this input will reset the output to minus one and hold it there until this value returns to zero or less. A gate to trigger module can be used on this input to alow the ramp to keep on moving at reset time.4FirstStepOffSet)"9=y mxm=wmwmIf this value is not zero , then a reset will not return the output to minus one. If say a value of five was in this field , then a reset would produce an output level that would address the fith memory sample when used as an index in a memory reader or writer.47)"9=``xm=z mwmThis should normaly be set to value one. if it is set to values over one, it will represent how many memory cells are skipped each sample cycle (asuming the output is being used as an index for memory readers or writers). This only has effect when the output is ramping upwards. 4<::9=z m``=y mxm When a value of zero or greater is applied to this input the output will start to ramp downwards from its current level as long as the reset signals is zero or less, and the NoOfStepsDownwards value is one or greater. Because this input overrides the CountUp input, this can be used as an up and down control if the CountUp input is kept high.4.)"9=z mxm=y mwmThis should normaly be set to value one. if it is set to values over one, it will represent how many memory cells are skipped each sample cycle (asuming the output is being used as an index for memory readers or writers). This only has effect when the output is ramping downwards.4%::9=````=z mxmWhen a value of zero or greater is applied to this input the output will start to ramp upwards from its current level as long as the CountDown and reset signals are both zero or less, and the NoOfStepsUpwards value is one or greater.4 #)"9=x my m=aw sIn 99.9% of cases this value should be zero. If it is set to one ,the output is moved down by half a step. The only time this should be set to one is if it is feeding a Wave Shaper with interpolation switched on and and nothing else. And even then it is only needed if it is absolutly important that the wave shaper interpolates on the center of the sample. In all other cases if you use one in this field , readers and writers will try to write on the border between samples and buzzes will be heard.4 =)"9=x m``=ay mThis value should match any memory readers or writers Total number of samples. This represents the total number of sample in time that it will take for the output to ramp from minus one to plus one , and also the total number of samples (memory cells) in a memory reader or writer. This is a Ramp Generator optimized for use as an index for memory readers and writers. When a logic value of one present at the "CountUp" input , the output starts to ramp up one step per sample cycle (as long as the "NoOfStepsUpwards" field has the value one). If a gate to trigger module is used in the CountUp input and the output is fed to the index of a "StepMemoryWriter" module, this can be used to write single words into ram at will (so long as the NoOfSamps values in the two modules match). PeteJohnstonsDSPMods Ver 5(Up/Down Counter-c14-f8CountUp&`8CountDown CountDowm`8Reset *`119=hx=pm168=cl=vq*h37}`g`z`q`CountDowm #-`>CountDowm`a"a#aa .g-mzzzzzzzzzzzzl``a"-a1>``g`a`"37g`g`}`q`# =>%`a"a#aa&f-mttttttttttttca`a"-a1>`af`a`"37z`q` w`e`FirstStepOffSet => !`a"a#aaFirstStepOffSete-mnnnnnnnnnnnn```a&-a1>``e`t`"37}`q`z`e`NoOfDownwardSteps =>NoOfDownwardSteps`a"a#aaNoOfDownwardStepsb-mxxxxxxxxxxxxlue`a&-a1>ueb`t`"37t`q`q`e`NoOfSamps => =`a"a#aa-d-mddddddddddddz``a&-a1>lad```"37``q`}`e`NoOfUpwardSteps =>NoOfUpwardSteps`a"a#aaNoOfUpwardStepsa-mrrrrrrrrrrrrdue`a&-a1>uea`t`"37z`g` q`q`> => (`a"a )aa *q ``a"-a1>``q`a`"37 `g`d`q`WrapAround =>6`a"a#aa WrapAroundc-m~~~~~~~~~~~~ta`a"-a1>`ac`a`"> =Up/Down Counter-`=al-` 4 / . ' , 7 *`-=x.3FreqControledRamp#(SRRamp ???-b14-d,Frequency`,WrapAround`168=sd=tl*`! #-`Mixer20-`=od-`*b ' ).| maxAmp | maxAmp := SignalProcessor maximumAmplitude. self initialValueAt: 0 xPut: 0 yPut:maxAmp+1. 3`SRRampkym1.`=!`@@@@@@ @@4@@d@@ @AAC0CF`FLLXXpp````aa$ad=!`{B B r F0G 0q4eppaa$ad-c47779=aax m=aaEnter a name for this Sound.4%::9=````=y  sw sWith a value of one in this input, the output freququency should be half the sample rate, and a value of zero will give an output of DC (Ohz) or (held at its current value). Minus values will give the same frequencys as thier positive counterparts but the output will be inverted.46::9=y m{ m=wmx mIf this input is greater than zero , the output will oscilate continuosly . When this input becomes zero or less, the output will continue to move in the same direction until it reaches plus one (if the frequency input is positve) or minus one (if the frequency input is negative).This is a ramp generater to be used when the ramp frequency adjustment has to be varied at sample rate and not controled by a hot paramitor. If the frequency input has a negative value the ramp is turned up side down. If the WrapAround input is greater than zero the ramp will continue to cycle , otherwise the output will ramp just once and rest at 1 or -1 depenant upon the polarity of the Frequency input. If the WrapAround input is fed via a "GateToTrigger' module and the output is sent through an "AsLogic" module (with value one in the invert field) , it can be used as a low function monostable. Although this module is not optimized for indexing , it could be used as an index for a wave table (Waveshaper) which needs to have true frequency modulation It shouldn't be to glitchy if the wavetable has an even number of samples and interpolation is switched on. PeteJohnstonsDSPMods Ver 5(FreqControledRamp-b14-d8Constant50Wrap`:GenericSource Mono Sample>MSDOSa!a%{ ma*`a168=d`=ub*`> #-`FreqControledRamp-`=a`-`96= x.3MixerAndGainWithWrapAround#(Mxr and gain with wrap???-c14119=zr=bg168=sd=tl*`!6:-`=od-`&.| maxAmp IntGain FracGain | maxAmp := SignalProcessor maximumAmplitude. IntGain := ?Gain truncated. FracGain := (?Gain-IntGain)*maxAmp. self initialValueAt: 0 xPut: FracGain yPut: IntGain. self initialValueAt: 1 xPut: 0 yPut: self subSounds size. 3`MixerAndGainWithWrapkym1.`=!`!8! Lxx?!@ ( 9Μ9<x9``aa$ad=!`sRDSp@<tp0ppaa$ad-c4777/Enter a name for this Sound.4 $ % %44<)"9=wm`=w sx  sThis class has no description. PeteJohnstonsDSPMods Ver 5MixerAndGainWithWrapAround-b:GenericSource Mono Sample>MSDOSa!a%{ ma*`:GenericSource Stereo Sample>flamingos sa!a%{ ma*`a=j.3MultiplyWithGain#(MultiplyWithGain???-b14-d,Input2`,Input1`168=sd=tl*`!6MultiplyWithGain-`=od-`*b/-.| maxAmp IntGain FracGain GainMaxed | maxAmp := SignalProcessor maximumAmplitude. GainMaxed := ?Gain. IntGain := GainMaxed truncated. FracGain := (GainMaxed-IntGain)*maxAmp. self initialValueAt: 0 xPut: IntGain yPut: FracGain . 3`MultiplyWithGainkym1.`=!`cw>80>0w1c10`8`1GqCACGqpv7@@``aa$ad=!`8 D@L D8;n+)mGq|ppaa$ad-d47779=aax m=aaEnter a name for this Sound.4Input1::9=````=bax m4<)"9=wm``=x saa4Input2::9=xm``=xmx mThis class has no description. PeteJohnstonsDSPMods Ver 5(MultiplyWithGain-c14-b:GenericSource Mono Sample>MSDOSa!a%{ ma*`v119=px=xm168=w}=a*`> #-`MultiplyWithGain-`=`}-`!a!=ej.3Divide#(Divide???-b14-d,Input`,DividedBy`168=sd=tl*`!9>-`=od-`*b!#.| maxAmp ScaleFact | maxAmp := SignalProcessor maximumAmplitude. ScaleFact := (maxAmp+1)/?FullScale. self initialValueAt: 0 xPut: 1 yPut: ScaleFact . 3`Dividekym1.`=!```aa$ad=!`ppaa$ad-d47779=aax m=aaEnter a name for this Sound.49::9=````=xma4DividedBy::9=y  saa=w sa4FullScale)"9=y  s``=w sy msee class name description.GapStringacThe "Input" signal is divided by the "DevideBy" signal. As the maximum output of a sound is plus and minus one, it would not be able to do any maths that had a value outside these limits. You can however choose our own imaginary scale. If you put 256 into the "FullScale" window it will treat full scale as 256, and therefore if a signal of 1/256 (which would be one in your imaginary scale) was fed to the "DividedBy"input, then any signal fed to "input" would go to the output with no attenuation. This would mean that the integer part of the number would takeup 8 of the 24 bits and the fractional part would use the last 16 bits. If you wanted a multiply (Product) module to work on this same imaginary scale you would have to add a gain module with 256 in its gain field. Better still the"MultyplyWithGain" module uses 48 bits internaly and has a better resolution than the two seperate modules. Adds and subtracts will work just the same as normal regardless of the imaginary scale. This module has been set up so that a division by zero will make the output fullscale plus if the input is positive, full scale minus if the input is negative , and zero if the input is zero. PeteJohnstonsDSPMods Ver 5d zero if the input is zero.{|Divide:GenericSource Mono Sample>MSDOSa!a%{ ma*`4a=ck.*(?-b14-b8Constant17"`168=om=cz*a37````{`n`?&>9`a"a#aa"a-mpppppppppppp|aa`a&-a1>aaaaa`">&(-`=hy-`!=cw=``9=n`=vvlargeIcon