Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/stevekinney/octavian
Utilities for reasoning about musical notes, frequencies, and intervals
https://github.com/stevekinney/octavian
Last synced: 3 months ago
JSON representation
Utilities for reasoning about musical notes, frequencies, and intervals
- Host: GitHub
- URL: https://github.com/stevekinney/octavian
- Owner: stevekinney
- License: mit
- Created: 2015-04-27T22:17:33.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2022-01-22T02:13:19.000Z (almost 3 years ago)
- Last Synced: 2024-04-25T07:20:31.990Z (7 months ago)
- Language: JavaScript
- Homepage:
- Size: 67.4 KB
- Stars: 174
- Watchers: 5
- Forks: 19
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-javascript-audio - octavian - utilities for reasoning about musical notes, frequencies, and intervals (Sound creation / Instrument recordings)
README
# Octavian
Octavian is a little utility library for working with musical notes and their frequencies. Super cool, right?
## Installation
First things, first: how do I install this thing?
```js
npm install octavian
```Maybe you even throw a `--save` in there if you feel like keeping it around.
## Usage
So, we've got Octavian installed, how do we use it?
```js
var Octavian = require('octavian');var note = new Octavian.Note('A4');
```Or, if you're some kind of hipster…
```js
var Note = require('octavian').Note;var note = new Note('A4');
```### The Basics
A `Note` has a few properties that we can play around with.
```js
var note = new Note('A#4');note.letter; // 'A'
note.modifier; // '#'
note.octave; // 4
note.signature; // 'A#4'
note.pianoKey; // 50
note.frequency; // 466.164
```### Normalization
But, what if we toss in some bogus note? Something like `E#`, maybe? There is no `E#`, right?
```js
var note = new Note('E#5');note.signature; // 'F5'
```### Intervals
Music is all about intervals. We can move up by a semitone or some other interval.
```js
var note = new Note('C3');note.majorThird(); // returns a new Note('E3');
note.perfectFifth(); // returns a new Note('G3');
note.perfectOctave(); // returns a new Note('C4');
```You can do any of the following:
* `downOctave()`
* `minorSecond()`
* `majorSecond()`
* `minorThird()`
* `majorThird()`
* `perfectFourth()`
* `diminishedFifth()`
* `perfectFifth()`
* `minorSixth()`
* `majorSixth()`
* `minorSeventh()`
* `majorSeventh()`
* `perfectOctave()`There are also some extra methods that are aliased, if you'd prefer:
* `augmentedFourth()`
* `third()`
* `fifth()`### Chords
You can create chords with Octavian.
```js
const cMajorChord = new Octavian.Chord('C4', 'major');cMajorChord.notes; // returns [ { letter: 'C', modifier: null, octave: 4 },
// { letter: 'E', modifier: null, octave: 4 },
// { letter: 'G', modifier: null, octave: 4 } ]cMajorChord.signatures; // returns [ 'C4', 'E4', 'G4' ]
cMajorChord.frequencies; // returns [ 261.626, 329.628, 391.995 ]
cMajorChord.pianoKeys; // returns [ 40, 44, 47 ]
```You can create the following chords:
* `major`
* `majorSixth`
* `majorSeventh`
* `majorSeventhFlatFive`
* `majorSeventhSharpFive`
* `minor`
* `minorSixth`
* `minorSeventh`
* `minorMajor`
* `dominantSeventh`
* `diminished`
* `diminishedSeventh`
* `halfDimished`You're also more than welcome to use the following aliases for any of the above:
* `maj` is an alias for `major`
* `6` is an alias for `majorSixth`
* `maj6` is an alias for `majorSixth`
* `7` is an alias for `majorSeventh`
* `maj7` is an alias for `majorSeventh`
* `maj7b5` is an alias for `majorSeventhFlatFive`
* `maj7#5` is an alias for `majorSeventhSharpFive`
* `min` is an alias for `minor`
* `m` is an alias for `minor`
* `min6` is an alias for `minorSixth`
* `m6` is an alias for `minorSixth`
* `min7` is an alias for `minorSeventh`
* `m7` is an alias for `minorSeventh`
* `m#7` is an alias for `minorMajor`
* `min#7` is an alias for `minorMajor`
* `m(maj7)` is an alias for `minorMajor`
* `dom7` is an alias for `dominantSeventh`
* `dim` is an alias for `diminished`
* `dim7` is an alias for `diminishedSeventh`
* `m7b5` is an alias for `halfDiminshed`#### Adding Notes to a Chord
You can add notes to a chord manually, if that suits you:
```js
const chord = new Octavian.Chord('C4');chord.signatures; // returns ['C4']
chord.addInterval('majorThird');
chord.signatures; // returns ['C4', 'E4']chord.addInterval(7);
chord.signatures; // returns ['C4', 'E4', 'G4']
```#### Turning a Note into a Chord
You can turn any note into the basis for a chord:
```js
const note = new Octavian.Note('C4');
note.toChord(); // returns a new chord with only C4 in it.
note.toChord('major'); // returns a new chord with C4, E4, and G4 in it
```### Inverting a Chord
You can invert a chord. For a Triad, two inversions exist these can be created
by calling `inversion(1)` or `inversion(2)`.```js
const cMajorChord = new Octavian.Chord('C4', 'major');
cMajorChord.signatures; // returns [ 'C4', 'E4', 'G4' ]cMajorChord.inversion(2);
cMajorChord.signatures; // returns [ 'C5', 'E5', 'G4' ]
```It's also possible to have Octavian generate a random inversion:
```js
const cMajorChord = new Octavian.Chord('C4', 'major');
cMajorChord.randomInversion();
cMajorChord.signatures; // returns any one of the following:
// [ 'C4', 'E3', 'G3' ]
// [ 'C4', 'E4', 'G3' ]
// [ 'C4', 'E4', 'G4' ]
// [ 'C5', 'E4', 'G4' ]
// [ 'C5', 'E5', 'G4' ]
```