@millstones/mage
TypeScript icon, indicating that this package has built-in type declarations

0.0.16 • Public • Published

Mage

Making music, generated by JavaScript codes.

🧙 Mage is Web Audio API-based library for musical looping.

🚧This library is still under development🚧

💣 Breaking changes will occur without any notices.

Usage

npm install @millstones/mage
/* import modules */
import createMage, {
  createScale,
  NOTE_NUMBERS,
  INTERVALS,
} from "@millstones/mage";

/* Create mage object */
const mage = createMage({ tempo: 128, beatsPerCycle: 4, randomSeed: 1234 });

/* Mage provides some functions */
const { createSequence, createSynth, createSampler } = mage;

/* Declare chord progressions as array */
const chords = [
  createScale(NOTE_NUMBERS.C4, INTERVALS.maj, INTERVALS.maj7),
  createScale(NOTE_NUMBERS.B3, INTERVALS.min, INTERVALS.min7),
  createScale(NOTE_NUMBERS.E4, INTERVALS.min, INTERVALS.min7),
  createScale(NOTE_NUMBERS.D4, INTERVALS.min, INTERVALS.min7),
];

/* Sequence must be a function with the following arguments */
const sequence = ({ cycles, beats, loopCount }) => {
  const seq = createSequence(chords[loopCount % 4])(
    "{0123} .  .  .  .  . ",
    1,
    0.2
  );
  return seq;
};

/* Create synth with an array of oscillators */
const synth = createSynth([
  { type: "square", detune: 0, semitone: 0 },
  { type: "sawtooth", detune: 0, semitone: 0 },
]);

/* cast method will combine sound and sequence */
mage.cast("chord", {
  sound: ({ cycles, beats, loopCount }) => synth,
  sequence,
  duration: 4,
});

/* Declare sapmler with an array of urls */
const drumSampler = await createSampler([
  "https://yourhost/kick.mp3",
  "https://yourhost/clap.mp3",
  "https://yourhost/snare.mp3",
  "https://yourhost/hihat.mp3",
]);

const drumSeq = ({ cycles, beats, loopCount }) => {
  const seq = createSequence([0, 1, 2, 3])("0[3.]{01}[3?]", 1);
  return seq;
};

mage.cast("drums", {
  sound: ({ cycles, beats, loopCount }) => drumSampler,
  sequence: drumSeq,
  duration: 2,
});

/* Start scheduling notes */
mage.start();

/* Mage stops scheduling notes */
mage.stop();

Example

🔎 See at CodeSandbox

Documents

📖 TypeDoc

License

⚖️ MIT

Readme

Keywords

none

Package Sidebar

Install

npm i @millstones/mage

Weekly Downloads

2

Version

0.0.16

License

MIT

Unpacked Size

42 kB

Total Files

17

Last publish

Collaborators

  • millstones