---
# System prepended metadata

title: Tidal Workshop | Transforming patterns
tags: [Tidalcycles]

---

---
title: Tidal Workshop | Transforming patterns
date: 2024-11-19 12:11:02
categories: ['Tidalcycles']
tags:
---

# Tidal Workshop | Transforming patterns

## [`Slow`, `fast` and `hurry`](https://tidalcycles.org/docs/patternlib/tutorials/workshop/#slow-fast-and-hurry)

可以利用 transforming 技巧產生更複雜的節奏。使用像 `slow` 或 `fast` ，現在可以開始使 pattern 超越（或壓縮）一個 cycle：

```haskell
d1 $ slow 2 $ sound "arpy arpy:1 arpy:2 arpy:3"

d1 $ fast 2 $ sound "arpy arpy:1 arpy:2 arpy:3"

-- `hurry` 與 `fast` 相似，但同時也會套用音調變化：
d1 $ hurry 2 $ sound "arpy arpy arpy:1 arpy:2"
```

參考 [Time](https://tidalcycles.org/docs/reference/time/) 章節了解更多變化。

---

## [重組節奏](https://tidalcycles.org/docs/patternlib/tutorials/workshop/#reorganise-patterns)

Tidal Cycles 提供了許多功能以不同方式改變節奏，本節將擇其中一些介紹，更多細節和功能可以參考以下章節 [Alteration](https://tidalcycles.org/docs/reference/alteration)、[Accumulation](https://tidalcycles.org/docs/reference/accumulation) 和 [Conditions](https://tidalcycles.org/docs/reference/conditions).

使用 `rev` 來反轉節奏：

```haskell
d1 $ rev $ sound "arpy arpy:1 arpy:2 arpy:3"
```

或者用 `palindrome` 正向播放再倒回來：

```haskell
d1 $ palindrome $ sound "arpy arpy:1 arpy:2 arpy:3"
```

`iter` 它會在每個週期的不同位置開始節奏，偏移指定的時值直到回到開始的位置：

> [!tip]  
> 有點像是整個 pattern 向左以指定的「分數」移動。  
> 舉例來說：`iter 4` 表示以 pattern 的 **1/4 為單位** 每 cycle 向左移動，如果剛好 pattern 中有 4 個 sample，則為一次 cycle 向左移動一格。
> ```haskell
> d1 $ iter 4 $ sound "arpy arpy:1 arpy:2 arpy:3"
> ```

使用 `every` 在不同的 cycle 中安排 transformations 或 effects。以下範例會以每四個 cycle 發生一次 `fast 2` 的方式播放：

```haskell
d1 $ every 4 (fast 2) $ sound "arpy arpy:1 arpy:2 arpy:3"

-- 或是也可以加入 effect
d1 $ every 4 (# vowel "a o") $ sound "arpy arpy:1 arpy:2 arpy:3"
```

`jux`（`juxtapose` 的縮寫）可讓節奏的變形或效果，在另一邊的聲道播放（原始的 pattern 則在另一邊）。

```haskell
d1 $ jux (rev) $ sound "arpy arpy:1 arpy:2 arpy:3"
d1 $ jux (hurry 2) $ sound "arpy arpy arpy:1 arpy:2"
```

> [!NOTE] 更多範例
> ```haskell
> d1 $ jux (iter 3) $ every 4 (hurry 3)$ n "0 1 9*3 [0 3]" # sound "arpy"
> ```
> 
> 至此，再回去複習一下前面的 effects 章節，就有很多花樣可以玩啦😎～

`chunk` 每次都會在 pattern 的不同部分套用變形或效果。舉例來說，

> [!tip]  
> 個人理解上跟 `iter` 類似，只是向後移動的部份從 pattern 改成 effects。
> ```haskell
> d1 $ chunk 4 (hurry 2) $ sound  "arpy arpy:1 arpy:2 arpy:3"
> ```

---

## [更多變化](https://tidalcycles.org/docs/patternlib/tutorials/workshop/#even-further-into-transformations)

可以使用 `.` 串接不只一種 pattern 的變形：

```haskell
d1 $ jux (rev . (slow 1.5)) $ sound "arpy arpy:1 arpy:2 arpy:3"
```

（幾乎）所有東西都是「pattern」，也可以將這些變形套用在效果上：

```haskell
d1 $ sound "jvbass [jvbass jvbass] jvbass ~" # note "1 [3 5] 7"
d1 $ sound "jvbass [jvbass jvbass] jvbass ~" # iter 3 (note "1 [3 5] 7")
```

可以使用 `fast` 或 `slow`、`range` 結合 `sine` 或 `saw` 等振盪器（[oscillators](https://tidalcycles.org/docs/reference/oscillators)），在任何參數上建立 LFO：

```haskell
d1 $ s "bd*8" # pan (slow 4 $ sine)
d1 $ s "moog*16" # n "<0 1 2>" # legato 1 # cutoff (range 200 2400 $ saw) # resonance 0.2
```

預設情況下，`sine`、`cosine` 或 `saw` 等 oscillators 會提供 `0` 至 `1` 的數值（unipolar），這對某些參數（例如 `pan`）來說沒什麼問題，但如果有其他應用情況可以使用 `range` 來將這些數值縮放到指定範圍。


> [!NOTE] 延伸閱讀
> [Control Busses | Tidal Cycles](https://tidalcycles.org/docs/reference/control_busses/)

---

[返回目錄](/pkjsPlfsQSaAbQfgv2v5fw)

上一篇：[Tidal Workshop | Effects](/u-r9XEJCSzGF8ha8F3I8tw)
下一篇：[Tidal Workshop | Different kind of patterns](/-IDcls_RQNmSxoMY3LphrA)

---

# References

- [Workshop | Tidal Cycles](https://tidalcycles.org/docs/patternlib/tutorials/workshop#distortion-reverb-delay-and-filters)