# Multi-strand scales

HTML: [altophp.com/scale/scales/multi-strand](https://altophp.com/scale/scales/multi-strand/)

A multi-strand scale interleaves several positive bases that share one modular
ratio. Use it when two or more families of values must grow together without
collapsing into one progression.

```php
use Alto\Scale\Ratio;
use Alto\Scale\Scale;

$scale = Scale::strands(
    bases: [12, 16],
    ratio: Ratio::PerfectFifth,
);

$scale->range(0, 5);
// [12.0, 16.0, 18.0, 24.0, 27.0, 36.0]
```

The bases are filtered to positive values, deduplicated, and sorted before
steps are assigned. Their original array order is therefore not significant.

```php
$scale->stepOf(25); // 3
$scale->snap(25);   // 24.0
```

The ratio must be greater than `1.0`, and at least one positive base must
remain. Invalid input raises `ScaleException`.

---

Previous: [Fibonacci scales](https://altophp.com/scale/scales/fibonacci.md)
Next: [Guessing a scale](https://altophp.com/scale/guessing.md)

---

ALTO\SCALE: [altophp.com/scale](https://altophp.com/scale/)
ALTO(PHP): [altophp.com](https://altophp.com/)
