,      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                     !"#$%&'()*+NoneSafe    NoneN! !"#$%&'()*+,-./0123456789: !"#$%&'()*+,-./012345678! !:9"#$%&'()*+,-./012345678 !"#$%&'()*+,-./0123456789:Safe;FAn Event is a value that occurs during the period given by the first ArcF. The second one indicates the event's "domain of influence". These will often be the same, but many temporal transformations, such as rotation and scaling time, may result in arcs being split or truncated. In such cases, the first arc is preserved, but the second arc reflects the portion of the event which is relevant.< (s,e) :: Arc9 represents a time interval with a start and end value.  { t : s <= t && t < e } =Time is represented by a rational number. Each natural number represents both the start of the next rhythmic cycle, and the end of the previous one. Rational numbers are used so that subdivisions of each cycle can be accurately represented.>xThe starting point of the current cycle. A cycle occurs from each natural number to the next, so this is equivalent to floor.?IThe end point of the current cycle (and starting point of the next cycle)@@The position of a time value relative to the start of its cycle.AisIn a t is True iff t$ is inside the arc represented by a.BSplits the given Arc into a list of Arcs, at cycle boundaries.CSplits the given Arc into a list of ArcDs, at cycle boundaries, but wrapping the arcs within the same cycle.D subArc i j( is the arc that is the intersection of i and j.E3Map the given function over both the start and end Time values of the given Arc.F Similar to mapArcJ but time is relative to the cycle (i.e. the sam of the start of the arc)G!Returns the `mirror image' of an Arc , used by Sound.Tidal.Pattern.rev.HThe start time of the given EventI The original onset of the given EventJ!The original offset of the given EventKThe arc of the given EventLThe midpoint of an Arc;<=>?@ABCDEFGHIJKLMNOP;<=>?@ABCDEFGHIJKLMNOP=<;>?@ABCDEFGHIJKLMNOP;<=>?@ABCDEFGHIJKLMNOPNone+9Q-The pattern datatype, a function from a time Arc to Event values. For discrete patterns, this returns the events which are active during that time. For continuous patterns, events with values for the midpoint of the given Arc is returned.Xatom is a synonym for pure.Ysilence" returns a pattern with no events.ZwithQueryArc f p returns a new Pattern with function f applied to the Arc values passed to the original Pattern p.[withQueryTime f p returns a new Pattern with function f( applied to the both the start and end Time of the Arc passed to Pattern p.\withResultArc f p returns a new Pattern with function f applied to the Arc2 values in the events returned from the original Pattern p.]withResultTime f p returns a new Pattern with function f( applied to the both the start and end Time of the Arc2 values in the events returned from the original Pattern p.^overlay combines two Patternls into a new pattern, so that their events are combined over time. This is the same as the infix operator ,._stack combines a list of PatternCs into a new pattern, so that their events are combined over time.`append combines two patterns Patterns into a new pattern, so that the events of the second pattern are appended to those of the first pattern, within a single cycleaappend' does the same as appendN, but over two cycles, so that the cycles alternate between the two patterns.bcatz returns a new pattern which interlaces the cycles of the given patterns, within a single cycle. It's the equivalent of append, but with a list of patterns.dslowcat does the same as catR, but maintaining the duration of the original patterns. It is the equivalent of append', but with a list of patterns.e listToPatM turns the given list of values to a Pattern, which cycles through the list.fmaybeListToPat is similar to  listToPat., but allows values to be optional using the Maybe type, so that Nothing! results in gaps in the pattern.grun n8 returns a pattern representing a cycle of numbers from 0 to n-1.idensity@ returns the given pattern with density increased by the given Time factor. Therefore  density 2 p3 will return a pattern that is twice as fast, and density (1%3) p& will return one three times as slow.j densityGap is similar to density3 but maintains its cyclic alignment. For example, densityGap 2 p% would squash the events in pattern pK into the first half of each cycle (and the second halves would be empty).kslow does the opposite of density, i.e. slow 2 p/ will return a pattern that is half the speed.lThe <~Y operator shifts (or rotates) a pattern to the left (or counter-clockwise) by the given Time value. For example  (1%16) <~ pR will return a pattern with all the events moved one 16th of a cycle to the left.mThe ~> operator does the same as ~>H but shifts events to the right (or clockwise) rather than to the left.prev p returns p@ with the event positions in each cycle reversed (or mirrored).q palindrome p applies rev to pS every other cycle, so that the pattern alternates between forwards and backwards.r when test f p applies the function f to p4, but in a way which only affects cycles where the test/ function applied to the cycle number returns True.w every n f p applies the function f to p, but only affects every n cycles.xfoldEvery ns f p applies the function f to p$, and is applied for each cycle in ns.ysig f< takes a function from time to values, and turns it into a Pattern.zsinewave returns a Pattern of continuous DoubleV values following a sinewave with frequency of one cycle, and amplitude from -1 to 1.{sine is a synonym for @sinewave.|sinerat is equivalent to sinewave for Rational values, suitable for use as Time offsets.~ sinewave1 is equivalent to sinewave!, but with amplitude from 0 to 1.sine1 is a synonym for  sinewave1.sinerat1 is equivalent to sinerat!, but with amplitude from 0 to 1. sineAmp1 d returns  sinewave1 with its amplitude offset by d.sawwave is the equivalent of sinewave for sawtooth waves.saw is a synonym for sawwave.sawrat is the same as sawwave but returns Rational values suitable for use as Time offsets.triwave is the equivalent of sinewave for triangular waves.tri is a synonym for triwave.trirat is the same as triwave but returns Rational values suitable for use as Time offsets.envL is a Pattern of continuous Double values, representing a linear interpolation between 0 and 1 during the first cycle, then staying constant at 1 for all following cycles. Possibly only useful if you're using something like the retrig function defined in tidal.el. wedge t p p' combines patterns p and p' by squashing the p) into the portion of each cycle given by t, and p'" into the remainer of each cycle.splitQueries p wraps p to ensure that it does not get queries that span arcs. For example `arc p (0.5, 1.5)` would be turned into two queries, `(0.5,1)` and `(1,1.5)`, and the results combined. Being able to assume queries don't span cycles often makes transformations easier to specify.-prr rot (blen, vlen) beatPattern valuePattern: pattern rotate/replace.-prr rot (blen, vlen) beatPattern valuePattern: pattern rotate/replace."preplace (blen, plen) beats values combines the timing of beats with the values of values<. Other ways of saying this are: * sequential convolution * values quantized to beats. Examples: v d1 $ sound $ preplace (1,1) "x [~ x] x x" "bd sn" d1 $ sound $ preplace (1,1) "x(3,8)" "bd sn" d1 $ sound $ "x(3,8)"  ~C "bd sn" d1 $ sound "[jvbass jvbass:5]*3" |+| (shape $ "1 1 1 1 1"  ~ "0.2 0.9") It is assumed the pattern fits into a single cycle. This works well with pattern literals, but not always with patterns defined elsewhere. In those cases use prr@ and provide desired pattern lengths: @ let p = slow 2 $ "x x x"$d1 $ sound $ prr 0 (2,1) p "bd sn" @protate len rot p rotates pattern p by rot beats to the left. len.: length of the pattern, in cycles. Example: <d1 $ every 4 (protate 2 (-1)) $ slow 2 $ sound "bd hh hh hh"The <<~9 operator rotates a unit pattern to the left, similar to <~T, but by events rather than linear time. The timing of the pattern remains constant: Id1 $ (1 <<~) $ sound "bd ~ sn hh" -- will become d1 $ sound "sn ~ hh bd" pequal cycles p1 p2: quickly test if p1 and p2 are the same.discretise n p: samples the pattern p at a rate of nQ events per cycle. Useful for turning a continuous pattern into a discrete one. randcat ps : does a slowcat on the list of patterns ps4 but randomises the order in which they are played.toMIDI pZ: converts a pattern of human-readable pitch names into MIDI pitch numbers. For example, "cs4" will be rendered as "49"H. Omitting the octave number will create a pitch in the fifth octave ("cf" -> "cf5""). Pitches can be decorated using:s = Sharp, a half-step above ("gs4")f = Flat, a half-step below ("gf4")n = Natural, no decoration ("g4" and "gn4" are equivalent)'ss = Double sharp, a whole step above ("gss4")&ff = Double flat, a whole step below ("gff4")'This function also has a shorter alias tom.tom p : Alias for toMIDI. struct a b: structures pattern b in terms of a.mempty is a synonym for silence. | mappend is a synonym for overlay.pure a, returns a pattern with an event with value a>, which has a duration of one cycle, and repeats every cycle.show (p :: Pattern)i returns a text string representing the event values active during the first cycle of the given pattern.QRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~QRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~QRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~QRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None350     )     0     -     None35IN> !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRS; !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOP@/,-.$%(*&'&)&+SRQ !"#0123456789:;<=>?@ABCDEFGHIJKLMNOP+ !"#$ %(*&'&)&+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSGLMNONoneETUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ETUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ETUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ETUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ None None     None     None!  None#-./0123456789:;<=>?@ABCDEFGHIJ-./0123456789:;<=>?@ABCDEFGHIJNoneNoneKLMNOPQRSKLMNOPQRSNoneNoneNone(      !"#$%&'()*+(      !"#$%&'()*+(      !"#$%&'()*+(      !"#$%&'()*+NoneTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~,      !"#$%&'()*+,-./0123456789:;<=>?@ABCDE !"#$%&'()*+,-./012345678;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+F !"#$%&'()*+,-.//0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcddefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./01123456789:;<==>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                       3   U                           !"#$%&'()*+,-./0123456789: ; < = = > ? m @ A B  C D E F G  H I J K L M N O P Q R S TUVWXYGZ8[\8]^8]_8[`8[a8[b8[c8de8df8[g8[h8[i8jk8lm8ln8lo8lp8lq8lr8ls8lt8lu8lv8wx8wy8wz8w{8|}8|~8|8|888888888888888888888888888888888888888888888888888888888888888888888888888888888989898989898989898989898989898989898989898989898989898888888888888888888888888888888 8 8 8 8 8888888888888888888 8!8"8#8d$8d%8d&8'(8])8]*8]+8],8]-8].8]/8]08]18]28]38]48]58]68]78]88]98]:8];8]<8]=8]>8]?8]@8]A8]B8]C8]D8]E8]F8[G8[H8[I8[J8[K8[L8[M8[N8[O8[P8[Q8[R8[STtidal_A44l0u8fMmQ5PjNd755bsfSound.Tidal.MIDI.DeviceSound.Tidal.UtilsSound.Tidal.TempoSound.Tidal.TimeSound.Tidal.PatternSound.Tidal.ParseSound.Tidal.StreamSound.Tidal.ParamsSound.Tidal.OscStreamSound.Tidal.TransitionSound.Tidal.MIDI.ParamsSound.Tidal.MIDI.ControlSound.Tidal.MidiStreamSound.Tidal.SynthSound.Tidal.SerialStreamSound.Tidal.SuperColliderSound.Tidal.DirtSound.Tidal.StrategiesSound.Tidal.ContextdisplayOutputDevicesdisplayDevicesgetOutputDevicesgetIndexedDevices getDevicesgetIDForDeviceName enumeratemapFstmapFstsmapSndmapSndswordsBy maybeReadfst'snd'thd'mapFst'mapSnd'mapThd'mapFsts'mapSnds'mapThds'mapArcs getEnvDefault mergelists!!! ClientStateTempoatbeatcpspaused clockLatency getLatency getClockIp getServerPort readTempo logicalTime tempoMVarbeatNow clientAppsendCps connectClient runClientcpsUtilsbpsUtils cpsSetterclocked clockedTick updateTempo addClient removeClient broadcast startServer serverApp serverLoop $fShowTempo$fEqConnectionEventArcTimesamnextSamcyclePosisIn arcCycles arcCycles'subArcmapArcmapCycle mirrorArc eventStart eventOnset eventOffseteventArcmidPointhasOnset hasOffsetonsetInoffsetInPatternarcshowTimeshowArc showEventunwrapatomsilence withQueryArc withQueryTime withResultArcwithResultTimeoverlaystackappendappend'cat splitAtSamslowcat listToPatmaybeListToPatrunscandensity densityGapslow<~~>brakiterrev palindromewhenwhenTplayWhenplayForseqPevery foldEverysigsinewavesinesineratratsine sinewave1sine1sinerat1sineAmp1sawwavesawsawratsawwave1saw1sawrat1triwavetritrirattriwave1tri1trirat1 squarewave1square1 squarewavesquareenvLenvLRenvEqenvEqRfadeOutfadeOut'fadeIn'fadeInspread slowspreadspread' filterValues filterOnsetsfilterStartInRangefilterOnsetsInRangeseqToRelOnsetssegmentsegment'splitpoints groupByTimeifprand timeToRandirandchoose degradeBy unDegradeBy sometimesBy sometimesoftenrarely almostNever almostAlwaysdegradewedgewhenmod superimpose splitQueriestrunczoomcompresssliceArcwithinrevArcee'indexprrwprrpreplaceprep preplace1 preplaceWithprw preplaceWith1prw1<~>protateprotprot1<<~~>>pequal discretiserandcattoMIDItomfitpermstepstruct parseLMRule parseLMRule' lindenmayerunwrap'mask enclosingArcstretchfit'$fMonadPattern$fMonoidPattern$fApplicativePattern$fFunctorPattern $fShowPatternSignPositiveNegativeColourD ParseableplexerbracesbracketsparensanglessymbolnaturalintegerfloatnaturalOrFloat applySignsign intOrFloatr parseRhythm pSequenceN pSequencepSinglepPartpPolyInpPolyOutpStringpVocablepDoublepBoolpIntmidinotepColourpMultpRandpE pReplicatepRatio pRationalpDensity$fIsStringPattern$fParseableColour$fParseableRatio$fParseableInt$fParseableBool $fParseable[]$fParseableDouble ParamPatternParamMapValueVSsvalueVFfvalueVIivalueShapeparamslatencycpsStampParamSnamesDefaultFfDefaultIiDefaultBackend toMessage ToMessageFunc ticksPerCycle defaultValue hasDefault defaulted defaultMaprequired hasRequiredisSubsetdoAt logicalOnset' applyShape'startstatestreamstreamcallbackonTickonTick'makemakeSmakeFmakeIparammerge|=|# mergeWith mergeNumWith mergePlus|*||+||-||/|setter $fShowParam $fOrdParam $fEqParammake'grpsoundss_pnn_pnudgenudge_poffsetoffset_pbeginbegin_pendend_pspeedspeed_ppanpan_pvelocity velocity_pvowelvowel_pcutoffcutoff_p resonance resonance_p accelerate accelerate_pshapeshape_pkriolekriole_pgaingain_pcutcut_pdelaydelay_p delaytime delaytime_p delayfeedbackdelayfeedback_pcrushcrush_pcoarsecoarse_phcutoff hcutoff_p hresonance hresonance_pbandfbandf_pbandqbandq_punitunit_plooploop_pchannel channel_proomroom_psizesize_pdrydry_porbitorbit_pOscMapOscSlangpath timestamp namedParamspreamble TimeStamp BundleStamp MessageStampNoStamp toOscDatumtoOscMapsendmakeConnection transitionhistpan superwashwashwaitjumpIn'jumpInjumpjumpModmortaldurdur_pnotenote_pmodwheel modwheel_p expression expression_p sustainpedalsustainpedal_pControllerShapecontrols ControlChangeCCmidirangevdefaultscalefNRPNSysEx RangeMapFunctoShapepassThrumapRangemCCmNRPNmrNRPNtoParamsctrlNparamN midiDevices midiBackend midiStream midiState midiSetterssynthControllersynth serialDevices serialBackend blinkenStream blinkenStateblinkenSetterslightblinken supercolliderscSlang scBackendscStreamdirt dirtSlangsuperDirtSlangsuperDirtBackendsuperDirtState dirtBackend dirtStream dirtState dirtSetterssuperDirtSetters superDirts dirtstream dirtToColour showToColour datumToColourstringToColourpickstriatestriate'striateOstriateL striateL' metronomeclutchInclutchxfadeInxfadestutstut' anticipateIn anticipatestutterechotriplequaddoublejuxjuxcutjux'jux4juxBysmashsmash'samplessamples'spreadfspinsawwave4 sinewave4rand4 stackwithinsidescalechopgapchopArcenweaveweave' interlacestepstepsstep'offoffaddupghost''ghost'ghostslice randslicebase Data.Monoid<> MidiDeviceMapMidiMapOutputconnlockbuffer toMidiEvent toMidiMapmkSend connectedfailednotfound useOutput sendevents sendctrlssendnotesendmidi encodeChannelnoteOnnoteOffmakeCtrlmakeCCmakeNRPN outputDevice makeEvent sendEventSerialDeviceMap SerialMaptoSerialString toSerialMapsend'light_pGHC.Base++GHC.Listfilterzipmap<*>pure ApplicativeGHC.RealRatioRational<**> Alternative Data.RatioapproxRationalControl.ConcurrentthreadWaitWriteSTMthreadWaitReadSTMthreadWaitWritethreadWaitReadrunInUnboundThreadrunInBoundThreadisCurrentThreadBoundforkOS forkFinallyrtsSupportsBoundThreadsControl.Concurrent.QSemN signalQSemN waitQSemNnewQSemNQSemNControl.Concurrent.QSem signalQSemwaitQSemnewQSemQSemControl.Concurrent.ChanwriteList2ChangetChanContents isEmptyChan unGetChandupChanreadChan writeChannewChanChan Data.ListisSubsequenceOfData.Traversable mapAccumR mapAccumLControl.ApplicativeoptionalgetConstConst unwrapMonad WrapMonad WrappedMonad unwrapArrow WrapArrow WrappedArrow getZipListZipList GHC.Conc.IO threadDelayControl.Concurrent.MVar mkWeakMVaraddMVarFinalizermodifyMVarMaskedmodifyMVarMasked_ modifyMVar modifyMVar_withMVarMaskedwithMVarswapMVar GHC.Conc.SyncmkWeakThreadIdthreadCapabilityyield myThreadIdthrowTo killThreadsetNumCapabilitiesgetNumCapabilitiesforkOnWithUnmaskforkOnforkIOWithUnmaskforkIOThreadIdGHC.MVar isEmptyMVar tryReadMVar tryPutMVar tryTakeMVarputMVarreadMVartakeMVarnewMVar newEmptyMVarMVar Data.FoldablefindnotElem minimumBy maximumByallanyorand concatMapconcatproductsumminimummaximumelemlengthnullfoldl1foldr1foldl'foldlfoldrgetDualDualappEndoEndogetAllAllgetAnyAnygetSumSum getProductProductgetFirstFirstgetLastLastgetAltAlt Data.OldListunwordswordsunlineslinesunfoldrsortOnsortBysort permutations subsequencestailsinitsgroupBygroupdeleteFirstsByunzip7unzip6unzip5unzip4zipWith7zipWith6zipWith5zipWith4zip7zip6zip5zip4genericReplicate genericIndexgenericSplitAt genericDrop genericTake genericLengthinsertByinsert partition transpose intercalate intersperse intersectBy intersectunionByunion\\deleteBydeletenubBynub isInfixOf isSuffixOf isPrefixOf findIndices findIndex elemIndices elemIndex stripPrefix dropWhileEnd denominator numerator% Data.Functor<$>unzip3unzipzipWith3zipWithzip3!!lookupreversebreakspansplitAtdroptake dropWhile takeWhilecycle replicaterepeatiteratescanr1scanrscanl'scanl1scanlfoldl1'initlasttailunconsheadliftA3liftA2liftA<**>mconcatmappendmemptyMonoid<$manysome<|>empty