# @tonaljs/range

> Create (musical) note ranges

Latest version **4.9.4** (published 2026-10-14) · MIT license · 0 weekly downloads

## Install

```sh
npm install @tonaljs/range
pnpm add @tonaljs/range
yarn add @tonaljs/range
bun add @tonaljs/range
```

## Health

**Score 65/100 (B)** — status: active.

Positive: has types; esm support; no vulnerabilities; recently updated; high maintenance score.

Warnings: low downloads.

## Facts

| | |
|---|---|
| Version | 4.9.4 |
| Published | 2026-10-14 |
| First published | 2019-09-10 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 2 |
| Unpacked size | 15.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | danigb@gmail.com |
| Maintainers | danigb |
| Keywords | range, music, theory, music-theory |

## Links

- npm: https://www.npmjs.com/package/@tonaljs/range
- npm.io page: https://npm.io/package/@tonaljs/range

## Dependencies (2)

- [@tonaljs/midi](https://npm.io/package/@tonaljs/midi.md) 4.10.4
- [@tonaljs/collection](https://npm.io/package/@tonaljs/collection.md) 4.9.1

## Recent versions

- 4.9.4 (latest) — 2026-10-14
- 4.9.3 — 2026-09-28
- 4.9.2 — 2025-06-04
- 4.9.1 — 2025-01-03
- 4.9.0 — 2024-07-23
- 4.8.4 — 2024-02-03
- 4.8.3 — 2024-02-03
- 4.8.2 — 2024-01-04
- 4.8.1 — 2023-01-20
- 4.8.0 — 2022-11-29
- 4.7.3 — 2022-11-29
- 4.7.2 — 2022-11-29
- 4.7.1 — 2022-11-29
- 4.7.0 — 2022-11-28
- 4.6.10 — 2022-11-18
- … 13 more at https://npm.io/package/@tonaljs/range/versions

## README

# @tonaljs/range ![tonal](https://img.shields.io/badge/@tonaljs-range-yellow.svg?style=flat-square) [![npm version](https://img.shields.io/npm/v/@tonaljs/range.svg?style=flat-square)](https://www.npmjs.com/package/@tonaljs/range)

`@tonaljs/range` is a collection of functions to create note ranges

## Usage

ES6:

```js
import { Range } from "tonal";
```

nodejs:

```js
const { Range } = require("tonal");
```

Single module:

```js
import Range from "@tonaljs/range";
```

## API

### `Range.numeric(notes: Array<string|number>) => number[]`

Create a numeric (midi) range. You supply a list of notes or numbers (peaks and valleys) and they will be connected to create complex ranges.

Arguments can be note names or midi numbers, ranges can be ascending or descending.

```js
Range.numeric([10, 5]); // => [ 10, 9, 8, 7, 6, 5 ]
Range.numeric([-5, 5]); // => [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]
Range.numeric(["C5", "C4"]); // => [ 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60 ]
Range.numeric(["C4", "E4", "Bb3"]); // => [60, 61, 62, 63, 64, 63, 62, 61, 60, 59, 58]
```

### `Range.chromatic(notes: Array<string|number>, options) => string[]`

Create a range of chromatic notes. The same as `numeric` but the result will be note names instead of midi numbers.

The optional `options` object defines how note names are built:

- sharps: if `true` sharps will be used in altered notes. Default is `false`
- pitchClass: if `true` octaves are omitted. Default is `false`

```js
Range.chromatic(["C2", "E2", "D2"]);
// => ["C2", "Db2", "D2", "Eb2", "E2", "Eb2", "D2"]
Range.chromatic(["C2", "C3"], { sharps: true });
// => [ "C2", "C#2", "D2", "D#2", "E2", "F2", "F#2", "G2", "G#2", "A2", "A#2", "B2", "C3" ]
```

---
_Source: https://npm.io/package/@tonaljs/range · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
