https://github.com/scribbletune/harmonics
https://github.com/scribbletune/harmonics
Last synced: about 1 year ago
JSON representation
- Host: GitHub
- URL: https://github.com/scribbletune/harmonics
- Owner: scribbletune
- License: mit
- Created: 2021-03-05T00:47:03.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2022-08-23T20:48:05.000Z (almost 4 years ago)
- Last Synced: 2024-10-28T22:38:14.283Z (over 1 year ago)
- Language: JavaScript
- Size: 505 KB
- Stars: 15
- Watchers: 5
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Harmonics
Tools and utilities for a generic representation of scales, chords, progressions etc. for use in music software, music related web & mobile apps, [scribbletune](https://scribbletune.com), [VCV Rack](https://vcvrack.com/) plugins and [Max for Live](https://www.ableton.com/en/live/max-for-live/) devices. Uses [tonal](https://github.com/tonaljs/tonal) for western classical and custom generators for other forms of music.
## Install
```bash
npm install harmonics
```
## Interface
Use `harmonics` in your project
```javascript
const harmonics = require('harmonics');
```
Get an `array` of all the scales available in harmonics (includes the one's from Tonal and the [Melakarta ragas](https://en.wikipedia.org/wiki/Melakarta)).
```javascript
harmonics.scales(); // ['ionian', 'dorian', 'lydian', '...', 'Kanakangi', 'Ratnangi', '...']
```
Get the notes of a scale as an `array`
```javascript
harmonics.scale('C4 major'); // ['C4', 'D4', 'E4', 'F4', 'G4', 'A4', 'B4']
```
Scales available from Tonal are lower cased while ragas have their first letter capitalized.
```javascript
harmonics.scale('C4 Kanakangi'); // ['C4', 'Db4', 'D4', 'F4', 'G4', 'Ab4', 'A4']
```
Get an `array` of all the available chords (with numeric chords such as `4`, `5`, `7` etc exposed as `4th`, `5th`, `7th`)
```javascript
harmonics.chords(); // ['M', 'm', 'maj7', '4th']
```
Get the notes of a chord as an `array` (defaults to the 4th octave)
```javascript
harmonics.chord('C4 M'); // ['C4', 'E4', 'G4']
```
Get the notes of a chord as an `array` for a specific octave
```javascript
harmonics.chord('C5 M'); // ['C5', 'E5', 'G5']
```
Get the notes of an "inline" chord such as CM or Cmaj7 or Dbsus4_6 (here 6 is the octave). This is used in Scribbletune where you can define a bunch of notes and use chords in between, e.g 'C4 E4 Csus2 G4' (here Csus2 is "inlined" with C4, E4 and G4)
```javascript
harmonics.inlineChord('CM'); // ['C4', 'E4', 'G4']
harmonics.inlineChord('CM_5'); // ['C5', 'E5', 'G5']
```
Get the indices of a scale/raga or bitmap
```javascript
harmonics.getIndicesFromScale('phrygian'); // [0, 1, 3, 5, 7, 8, 10, 12]
harmonics.inlineChord('110010110011'); // [0, 1, 3, 5, 7, 8, 10, 12]
```