Movatterモバイル変換


[0]ホーム

URL:


tidal-1.9.5: Pattern language for improvised music
Safe HaskellNone
LanguageHaskell2010

Sound.Tidal.Core

Contents

Synopsis

Elemental patterns

sig :: (Time -> a) ->Pattern aSource#

Takes a function of time to values, and turns it into aPattern. Useful for creating continuous patterns such assine orperlin.

For example,saw is defined as

saw = sig $ \t -> mod' (fromRational t) 1

sine ::Fractional a =>Pattern aSource#

sine - unipolar sinewave. A pattern of continuous values following a sinewave with frequency of one cycle, and amplitude from 0 to 1.

sine2 ::Fractional a =>Pattern aSource#

sine2 - bipolar sinewave. A pattern of continuous values following a sinewave with frequency of one cycle, and amplitude from -1 to 1.

cosine ::Fractional a =>Pattern aSource#

cosine - unipolar cosine wave. A pattern of continuous values following a cosine with frequency of one cycle, and amplitude from 0 to 1. Equivalent to0.25 ~> sine.

cosine2 ::Fractional a =>Pattern aSource#

cosine2 - bipolar cosine wave. A pattern of continuous values following a cosine with frequency of one cycle, and amplitude from -1 to 1. Equivalent to0.25 ~> sine2.

saw :: (Fractional a,Real a) =>Pattern aSource#

saw - unipolar ascending sawtooth wave. A pattern of continuous values following a sawtooth with frequency of one cycle, and amplitude from 0 to 1.

saw2 :: (Fractional a,Real a) =>Pattern aSource#

saw2 - bipolar ascending sawtooth wave. A pattern of continuous values following a sawtooth with frequency of one cycle, and amplitude from -1 to 1.

isaw :: (Fractional a,Real a) =>Pattern aSource#

isaw likesaw, but a descending (inverse) sawtooth.

isaw2 :: (Fractional a,Real a) =>Pattern aSource#

isaw2 likesaw2, but a descending (inverse) sawtooth.

tri :: (Fractional a,Real a) =>Pattern aSource#

tri - unipolar triangle wave. A pattern of continuous values following a triangle wave with frequency of one cycle, and amplitude from 0 to 1.

tri2 :: (Fractional a,Real a) =>Pattern aSource#

tri2 - bipolar triangle wave. A pattern of continuous values following a triangle wave with frequency of one cycle, and amplitude from -1 to 1.

square ::Fractional a =>Pattern aSource#

square - unipolar square wave. A pattern of continuous values following a square wave with frequency of one cycle, and amplitude from 0 to 1. |square is likesine, for square waves.

square2 ::Fractional a =>Pattern aSource#

square2 - bipolar square wave. A pattern of continuous values following a square wave with frequency of one cycle, and amplitude from -1 to 1.

envL ::PatternDoubleSource#

envL is aPattern of continuousDouble 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.

envLR ::PatternDoubleSource#

likeenvL but reversed.

envEq ::PatternDoubleSource#

'Equal power' version ofenv, for gain-based transitions

envEqR ::PatternDoubleSource#

Equal power reversed

Pattern algebra

classUnionable awhereSource#

Methods

union :: a -> a -> aSource#

Instances

Instances details
UnionableValueMapSource# 
Instance details

Defined inSound.Tidal.Core

Unionable aSource# 
Instance details

Defined inSound.Tidal.Core

Methods

union :: a -> a -> aSource#

(|+|) :: (Applicative a,Num b) => a b -> a b -> a bSource#

(|+) ::Num a =>Pattern a ->Pattern a ->Pattern aSource#

(+|) ::Num a =>Pattern a ->Pattern a ->Pattern aSource#

(||+) ::Num a =>Pattern a ->Pattern a ->Pattern aSource#

(|++|) ::Applicative a => aString -> aString -> aStringSource#

(|++) ::PatternString ->PatternString ->PatternStringSource#

(++|) ::PatternString ->PatternString ->PatternStringSource#

(||++) ::PatternString ->PatternString ->PatternStringSource#

(|/|) :: (Applicative a,Fractional b) => a b -> a b -> a bSource#

(|/) ::Fractional a =>Pattern a ->Pattern a ->Pattern aSource#

(/|) ::Fractional a =>Pattern a ->Pattern a ->Pattern aSource#

(||/) ::Fractional a =>Pattern a ->Pattern a ->Pattern aSource#

(|*|) :: (Applicative a,Num b) => a b -> a b -> a bSource#

(|*) ::Num a =>Pattern a ->Pattern a ->Pattern aSource#

(*|) ::Num a =>Pattern a ->Pattern a ->Pattern aSource#

(||*) ::Num a =>Pattern a ->Pattern a ->Pattern aSource#

(|-|) :: (Applicative a,Num b) => a b -> a b -> a bSource#

(|-) ::Num a =>Pattern a ->Pattern a ->Pattern aSource#

(-|) ::Num a =>Pattern a ->Pattern a ->Pattern aSource#

(||-) ::Num a =>Pattern a ->Pattern a ->Pattern aSource#

(|%|) :: (Applicative a,Moddable b) => a b -> a b -> a bSource#

(|%) ::Moddable a =>Pattern a ->Pattern a ->Pattern aSource#

(%|) ::Moddable a =>Pattern a ->Pattern a ->Pattern aSource#

(||%) ::Moddable a =>Pattern a ->Pattern a ->Pattern aSource#

(|**|) :: (Applicative a,Floating b) => a b -> a b -> a bSource#

(|**) ::Floating a =>Pattern a ->Pattern a ->Pattern aSource#

(**|) ::Floating a =>Pattern a ->Pattern a ->Pattern aSource#

(||**) ::Floating a =>Pattern a ->Pattern a ->Pattern aSource#

(|>|) :: (Applicative a,Unionable b) => a b -> a b -> a bSource#

(|>) ::Unionable a =>Pattern a ->Pattern a ->Pattern aSource#

(>|) ::Unionable a =>Pattern a ->Pattern a ->Pattern aSource#

(||>) ::Unionable a =>Pattern a ->Pattern a ->Pattern aSource#

(|<|) :: (Applicative a,Unionable b) => a b -> a b -> a bSource#

(|<) ::Unionable a =>Pattern a ->Pattern a ->Pattern aSource#

(<|) ::Unionable a =>Pattern a ->Pattern a ->Pattern aSource#

(||<) ::Unionable a =>Pattern a ->Pattern a ->Pattern aSource#

(#) ::Unionable b =>Pattern b ->Pattern b ->Pattern bSource#

Constructing patterns

fromList :: [a] ->Pattern aSource#

Turns a list of values into a pattern, playing one of them per cycle. The following are equivalent:

d1 $ n (fromList [0, 1, 2]) # s "superpiano"d1 $ n "<0 1 2>" # s "superpiano"

fastFromList :: [a] ->Pattern aSource#

Turns a list of values into a pattern, playingall of them per cycle. The following are equivalent:

d1 $ n (fastFromList [0, 1, 2]) # s "superpiano"d1 $ n "[0 1 2]" # s "superpiano"

listToPat :: [a] ->Pattern aSource#

A synonym forfastFromList

fromMaybes :: [Maybe a] ->Pattern aSource#

'fromMaybes; is similar tofromList, but allows values to be optional using theMaybe type, so thatNothing results in gaps in the pattern. The following are equivalent: > d1 $ n (fromMaybes [Just 0, Nothing, Just 2]) # s "superpiano" > d1 $ n "0 ~ 2" # s "superpiano"

run :: (Enum a,Num a) =>Pattern a ->Pattern aSource#

A pattern of whole numbers from 0 to the given number, in a single cycle. Can be used used torun through a folder of samples in order:

d1 $ n (run 8) # sound "amencutup"

The first parameter to run can be given as a pattern:

d1 $ n (run "<4 8 4 6>") # sound "amencutup"

_run :: (Enum a,Num a) => a ->Pattern aSource#

scan :: (Enum a,Num a) =>Pattern a ->Pattern aSource#

Similar torun, but starts from1 for the first cycle, successively adds a number until it gets up ton. > d1 $ n (scan 8) # sound "amencutup"

_scan :: (Enum a,Num a) => a ->Pattern aSource#

Combining patterns

append ::Pattern a ->Pattern a ->Pattern aSource#

Alternate between cycles of the two given patterns > d1 $ append (sound "bd*2 sn") (sound "arpy jvbass*2")

cat :: [Pattern a] ->Pattern aSource#

Likeappend, but for a list of patterns. Interlaces them, playing the first cycle from each in turn, then the second cycle from each, and so on. It concatenates a list of patterns into a new pattern; each pattern in the list will maintain its original duration. For example:

d1 $ cat [sound "bd*2 sn", sound "arpy jvbass*2"]d1 $ cat [sound "bd*2 sn", sound "arpy jvbass*2", sound "drum*2"]d1 $ cat [sound "bd*2 sn", sound "jvbass*3", sound "drum*2", sound "ht mt"]

slowCat :: [Pattern a] ->Pattern aSource#

Alias forcat

slowcat :: [Pattern a] ->Pattern aSource#

slowAppend ::Pattern a ->Pattern a ->Pattern aSource#

Alias forappend

slowappend ::Pattern a ->Pattern a ->Pattern aSource#

fastAppend ::Pattern a ->Pattern a ->Pattern aSource#

Likeappend, but twice as fast > d1 $ fastAppend (sound "bd*2 sn") (sound "arpy jvbass*2")

fastappend ::Pattern a ->Pattern a ->Pattern aSource#

fastCat :: [Pattern a] ->Pattern aSource#

The same ascat, but speeds up the result by the number of patterns there are, so the cycles from each are squashed to fit a single cycle.

d1 $ fastcat [sound "bd*2 sn", sound "arpy jvbass*2"]d1 $ fastcat [sound "bd*2 sn", sound "arpy jvbass*2", sound "drum*2"]d1 $ fastcat [sound "bd*2 sn", sound "jvbass*3", sound "drum*2", sound "ht mt"]

fastcat :: [Pattern a] ->Pattern aSource#

Alias forfastCat

timeCat :: [(Time,Pattern a)] ->Pattern aSource#

Similar tofastCat, but each pattern is given a relative duration. You provide proportionate sizes of the patterns to each other for when they’re concatenated into one cycle. The larger the value in the list, the larger relative size the pattern takes in the final loop. If all values are equal then this is equivalent to fastcat (e.g. the following two code fragments are equivalent).

d1 $ fastcat [s "bd*4", s "hh27*8", s "superpiano" # n 0]
d1 $ timeCat [ (1, s "bd*4")             , (1, s "hh27*8")             , (1, s "superpiano" # n 0)             ]

timecat :: [(Time,Pattern a)] ->Pattern aSource#

Alias fortimeCat

overlay ::Pattern a ->Pattern a ->Pattern aSource#

overlay combines twoPatterns into a new pattern, so that their eventsare combined over time. For example, the following two lines are equivalent:

d1 $ sound (overlay "bd sn:2" "cp*3")d1 $ sound "[bd sn:2, cp*3]"

overlay is equal to<>,

(<>) :: Semigroup a => a -> a -> a

which can thus be used as an infix operator equivalent ofoverlay:

d1 $ sound ("bd sn:2" <> "cp*3")

stack :: [Pattern a] ->Pattern aSource#

stack combines a list ofPatterns into a new pattern, so that theirevents are combined over time, i.e., all of the patterns in the list are playedsimultaneously.

d1 $ stack [ sound "bd bd*2", sound "hh*2 [sn cp] cp future*4", sound "arpy" +| n "0 .. 15"]

This is particularly useful if you want to apply a function or synth controlpattern to multiple patterns at once:

d1 $ whenmod 5 3 (striate 3) $ stack [ sound "bd bd*2", sound "hh*2 [sn cp] cp future*4", sound "arpy" +| n "0 .. 15"] # speed "[[1 0.8], [1.5 2]*2]/3"

Manipulating time

(<~) ::PatternTime ->Pattern a ->Pattern aSource#

Shifts a pattern back in time by the given amount, expressed in cycles

(~>) ::PatternTime ->Pattern a ->Pattern aSource#

Shifts a pattern forward in time by the given amount, expressed in cycles

slowSqueeze ::PatternTime ->Pattern a ->Pattern aSource#

Slow down a pattern by the factors in the given time pattern, "squeezing" the pattern to fit the slot given in the time pattern. It is the slow analogue tofastSqueeze.

If the time pattern only has a single value in a cycle,slowSqueeze becomes equivalent to slow. These are equivalent:

d1 $ slow "<2 4>" $ s "bd*8"d1 $ slowSqueeze "<2 4>" $ s "bd*8"

When the time pattern has multiple values, however, the behavior is a little different. Instead, a slowed version of the pattern will be made for each value in the time pattern, and they’re all combined together in a cycle according to the structure of the time pattern. For example, these are equivalent:

d1 $ slowSqueeze "2 4 8 16" $ s "bd*8"d1 $ s "bd*4 bd*2 bd bd/2"

as are these:

d1 $ slowSqueeze "2 4 [8 16]" $ s "bd*8"d1 $ s "bd*4 bd*2 [bd bd/2]"

sparsity ::PatternTime ->Pattern a ->Pattern aSource#

An alias forslow

zoom :: (Time,Time) ->Pattern a ->Pattern aSource#

Plays a portion of a pattern, specified by a time arc (start and end time). The new resulting pattern is played over the time period of the original pattern.

d1 $ zoom (0.25, 0.75) $ sound "bd*2 hh*3 [sn bd]*2 drum"

In the pattern above,zoom is used with an arc from 25% to 75%. It is equivalent to:

d1 $ sound "hh*3 [sn bd]*2"

Here’s an example of it being used with a conditional:

d1 $ every 4 (zoom (0.25, 0.75)) $ sound "bd*2 hh*3 [sn bd]*2 drum"

zoomArc ::Arc ->Pattern a ->Pattern aSource#

fastGap ::PatternTime ->Pattern a ->Pattern aSource#

fastGap is similar tofast but maintains its cyclic alignment, i.e., rather than playing the pattern multiple times, it instead leaves a gap in the remaining space of the cycle. For example,fastGap 2 p would squash the events in patternp into the first half of each cycle (and the second halves would be empty). The factor should be at least 1.

densityGap ::PatternTime ->Pattern a ->Pattern aSource#

An alias forfastGap

compress :: (Time,Time) ->Pattern a ->Pattern aSource#

compress takes a pattern and squeezes it within the specified time span (i.e. the ‘arc’). The new resulting pattern is a sped up version of the original.

d1 $ compress (1/4, 3/4) $ s "[bd sn]!"

In the above example, the pattern will play in an arc spanning from 25% to 75% of the duration of a cycle. It is equivalent to:

d1 $ s "~ [bd sn]! ~"

Another example, where all events are different:

d1 $ compress (1/4, 3/4) $ n (run 4) # s "arpy"

It differs fromzoom in that it preserves the original pattern but it speeds up its events so to match with the new time period.

compressTo :: (Time,Time) ->Pattern a ->Pattern aSource#

repeatCycles ::PatternInt ->Pattern a ->Pattern aSource#

_repeatCycles ::Int ->Pattern a ->Pattern aSource#

fastRepeatCycles ::Int ->Pattern a ->Pattern aSource#

every ::PatternInt -> (Pattern a ->Pattern a) ->Pattern a ->Pattern aSource#

  • Higher order functions

Functions which work on other functions (higher order functions)

every n f p applies the functionf top, but only affects everyn cycles.

It takes three inputs: how often the function should be applied (e.g. 3 to apply it every 3 cycles), the function to be applied, and the pattern you are applying it to. For example: to reverse a pattern every three cycles (and for the other two play it normally)

d1 $ every 3 rev $ n "0 1 [~ 2] 3" # sound "arpy"

Note that if the function you’re applying requires additional parameters itself (such as fast 2 to make a pattern twice as fast), then you’ll need to wrap it in parenthesis, like so:

d1 $ every 3 (fast 2) $ n "0 1 [~ 2] 3" # sound "arpy"

Otherwise, the every function will think it is being passed too many parameters.

_every ::Int -> (Pattern a ->Pattern a) ->Pattern a ->Pattern aSource#

every' ::PatternInt ->PatternInt -> (Pattern a ->Pattern a) ->Pattern a ->Pattern aSource#

every' n o f p is likeevery n f p but with an offset ofo cycles.

For example,every' 3 0 (fast 2) will speed up the cycle on cycles 0,3,6,… whereasevery' 3 1 (fast 2) will transform the pattern on cycles 1,4,7,….

With this in mind, setting the second argument ofevery' to 0 gives the equivalent every function. For example, every 3 is equivalent to every' 3 0.

Theevery functions can be used to silence a full cycle or part of a cycle by using silent or mask "~". Mask provides additional flexibility to turn on/off individual steps.

d1 $ every 3 silent $ n "2 9 11 2" # s "hh27"d1 $ every 3 (mask "~") $ n "2 9 10 2" # s "hh27"d1 $ every 3 (mask "0 0 0 0") $ n "2 9 11 2" # s "hh27"

_every' ::Int ->Int -> (Pattern a ->Pattern a) ->Pattern a ->Pattern aSource#

foldEvery :: [Int] -> (Pattern a ->Pattern a) ->Pattern a ->Pattern aSource#

foldEvery ns f p applies the functionf top, and is applied for each cycle inns.

It is similar to chaining multipleevery functions together. It transforms a pattern with a function, once per any of the given number of cycles. If a particular cycle is the start of more than one of the given cycle periods, then it it applied more than once.

d1 $ foldEvery [5,3] (|+ n 1) $ s "moog" # legato 1

The first moog samples are tuned to C2, C3 and C4. Note how on cycles that are multiples of 3 or 5 the pitch is an octave higher, and on multiples of 15 the pitch is two octaves higher, as the transformation is applied twice.

when :: (Int ->Bool) -> (Pattern a ->Pattern a) ->Pattern a ->Pattern aSource#

The given pattern transformation is applied onlywhen the given test functionreturnsTrue. The test function will be called with the current cycle asa number.

d1 $ when (elem '4' . show)          (striate 4)   $ sound "hh hc"

The above will only applystriate 4 to the pattern if the currentcycle number contains the number 4. So the fourth cycle will bestriated and the fourteenth and so on. Expect lots of striates aftercycle number 399.

whenT :: (Time ->Bool) -> (Pattern a ->Pattern a) ->Pattern a ->Pattern aSource#

Likewhen, but works on continuous time values rather than cycle numbers. The following will apply# speed 2 only when the remainder of the currentTime divided by 2 is less than 0.5:

d1 $ whenT ((< 0.5) . (flip Data.Fixed.mod' 2))           (# speed 2)   $ sound "hh(4,8) hc(3,8)"

_getP_ :: (Value ->Maybe a) ->PatternValue ->Pattern aSource#

_getP :: a -> (Value ->Maybe a) ->PatternValue ->Pattern aSource#

_cX :: a -> (Value ->Maybe a) ->String ->Pattern aSource#

_cX_ :: (Value ->Maybe a) ->String ->Pattern aSource#

cF ::Double ->String ->PatternDoubleSource#

cF_ ::String ->PatternDoubleSource#

cF0 ::String ->PatternDoubleSource#

cN ::Note ->String ->PatternNoteSource#

cN_ ::String ->PatternNoteSource#

cN0 ::String ->PatternNoteSource#

cI ::Int ->String ->PatternIntSource#

cI_ ::String ->PatternIntSource#

cI0 ::String ->PatternIntSource#

cB ::Bool ->String ->PatternBoolSource#

cB_ ::String ->PatternBoolSource#

cB0 ::String ->PatternBoolSource#

cR ::Rational ->String ->PatternRationalSource#

cR_ ::String ->PatternRationalSource#

cR0 ::String ->PatternRationalSource#

cT ::Time ->String ->PatternTimeSource#

cT0 ::String ->PatternTimeSource#

cT_ ::String ->PatternTimeSource#

cS ::String ->String ->PatternStringSource#

cS_ ::String ->PatternStringSource#

cS0 ::String ->PatternStringSource#

in0 ::PatternDoubleSource#

in1 ::PatternDoubleSource#

in2 ::PatternDoubleSource#

in3 ::PatternDoubleSource#

in4 ::PatternDoubleSource#

in5 ::PatternDoubleSource#

in6 ::PatternDoubleSource#

in7 ::PatternDoubleSource#

in8 ::PatternDoubleSource#

in9 ::PatternDoubleSource#

in10 ::PatternDoubleSource#

in11 ::PatternDoubleSource#

in12 ::PatternDoubleSource#

in13 ::PatternDoubleSource#

in14 ::PatternDoubleSource#

in15 ::PatternDoubleSource#

in16 ::PatternDoubleSource#

in17 ::PatternDoubleSource#

in18 ::PatternDoubleSource#

in19 ::PatternDoubleSource#

in20 ::PatternDoubleSource#

in21 ::PatternDoubleSource#

in22 ::PatternDoubleSource#

in23 ::PatternDoubleSource#

in24 ::PatternDoubleSource#

in25 ::PatternDoubleSource#

in26 ::PatternDoubleSource#

in27 ::PatternDoubleSource#

in28 ::PatternDoubleSource#

in29 ::PatternDoubleSource#

in30 ::PatternDoubleSource#

in31 ::PatternDoubleSource#

in32 ::PatternDoubleSource#

in33 ::PatternDoubleSource#

in34 ::PatternDoubleSource#

in35 ::PatternDoubleSource#

in36 ::PatternDoubleSource#

in37 ::PatternDoubleSource#

in38 ::PatternDoubleSource#

in39 ::PatternDoubleSource#

in40 ::PatternDoubleSource#

in41 ::PatternDoubleSource#

in42 ::PatternDoubleSource#

in43 ::PatternDoubleSource#

in44 ::PatternDoubleSource#

in45 ::PatternDoubleSource#

in46 ::PatternDoubleSource#

in47 ::PatternDoubleSource#

in48 ::PatternDoubleSource#

in49 ::PatternDoubleSource#

in50 ::PatternDoubleSource#

in51 ::PatternDoubleSource#

in52 ::PatternDoubleSource#

in53 ::PatternDoubleSource#

in54 ::PatternDoubleSource#

in55 ::PatternDoubleSource#

in56 ::PatternDoubleSource#

in57 ::PatternDoubleSource#

in58 ::PatternDoubleSource#

in59 ::PatternDoubleSource#

in60 ::PatternDoubleSource#

in61 ::PatternDoubleSource#

in62 ::PatternDoubleSource#

in63 ::PatternDoubleSource#

in64 ::PatternDoubleSource#

in65 ::PatternDoubleSource#

in66 ::PatternDoubleSource#

in67 ::PatternDoubleSource#

in68 ::PatternDoubleSource#

in69 ::PatternDoubleSource#

in70 ::PatternDoubleSource#

in71 ::PatternDoubleSource#

in72 ::PatternDoubleSource#

in73 ::PatternDoubleSource#

in74 ::PatternDoubleSource#

in75 ::PatternDoubleSource#

in76 ::PatternDoubleSource#

in77 ::PatternDoubleSource#

in78 ::PatternDoubleSource#

in79 ::PatternDoubleSource#

in80 ::PatternDoubleSource#

in81 ::PatternDoubleSource#

in82 ::PatternDoubleSource#

in83 ::PatternDoubleSource#

in84 ::PatternDoubleSource#

in85 ::PatternDoubleSource#

in86 ::PatternDoubleSource#

in87 ::PatternDoubleSource#

in88 ::PatternDoubleSource#

in89 ::PatternDoubleSource#

in90 ::PatternDoubleSource#

in91 ::PatternDoubleSource#

in92 ::PatternDoubleSource#

in93 ::PatternDoubleSource#

in94 ::PatternDoubleSource#

in95 ::PatternDoubleSource#

in96 ::PatternDoubleSource#

in97 ::PatternDoubleSource#

in98 ::PatternDoubleSource#

in99 ::PatternDoubleSource#

in100 ::PatternDoubleSource#

in101 ::PatternDoubleSource#

in102 ::PatternDoubleSource#

in103 ::PatternDoubleSource#

in104 ::PatternDoubleSource#

in105 ::PatternDoubleSource#

in106 ::PatternDoubleSource#

in107 ::PatternDoubleSource#

in108 ::PatternDoubleSource#

in109 ::PatternDoubleSource#

in110 ::PatternDoubleSource#

in111 ::PatternDoubleSource#

in112 ::PatternDoubleSource#

in113 ::PatternDoubleSource#

in114 ::PatternDoubleSource#

in115 ::PatternDoubleSource#

in116 ::PatternDoubleSource#

in117 ::PatternDoubleSource#

in118 ::PatternDoubleSource#

in119 ::PatternDoubleSource#

in120 ::PatternDoubleSource#

in121 ::PatternDoubleSource#

in122 ::PatternDoubleSource#

in123 ::PatternDoubleSource#

in124 ::PatternDoubleSource#

in125 ::PatternDoubleSource#

in126 ::PatternDoubleSource#

in127 ::PatternDoubleSource#

Produced byHaddock version 2.30.0


[8]ページ先頭

©2009-2025 Movatter.jp