How to use st - 10 common examples

To help you get started, we’ve selected a few st examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github leafo / sightreading.training / static / js / components / ear_training / melody_recognition_exercise.es6 View on Github external
request.onload = (e) => {
          let songText = request.responseText
          let song

          try {
            song = SongParser.load(songText)
          } catch (e) {
            console.log(e)
            return reject(`Failed to parse: ${name}`)
          }

          // transpose to middle c
          let root = parseNote(song[0].note)
          song = song.transpose(60 - root)

          resolve(song)
        }
github leafo / sightreading.training / static / spec / song_spec.es6 View on Github external
it("gets notes in time range", function() {
    let song = SongNoteList.newSong([
      ["C5", 0, 1],
      ["D5", 1, 1],
      ["E5", 3, 1],
      ["D5", 5, 1],

      ["F5", 1, 5], // overlap (1 - 6)
      ["F5", 1, 3], // overlap start (1 - 4)
      ["F5", 4, 2], // overlap end (4 - 6)
    ])

    let range = song.notesInRange(3,5)
    matchNotes(range, [
      new SongNote("E5", 3, 1),
      new SongNote("F5", 1, 5),
      new SongNote("F5", 1, 3),
      new SongNote("F5", 4, 2),
    ])
  })
})
github leafo / sightreading.training / static / spec / parser_spec.es6 View on Github external
it("loads notes with timing", function() {
    let song = SongParser.load(`
      dt
      m0 c5 c5 c5
      m0 g5 a5 g5
      ht
      m1 c6
    `)

    matchNotes(song, [
      // first measure
      new SongNote("C5", 0, 0.5),
      new SongNote("C5", 0.5, 0.5),
      new SongNote("C5", 1.0, 0.5),

      new SongNote("G5", 0, 0.5),
      new SongNote("A5", 0.5, 0.5),
      new SongNote("G5", 1.0, 0.5),

      // second measure
      new SongNote("C6", 4, 1),
    ])
  })
github leafo / sightreading.training / static / spec / music_spec.es6 View on Github external
it("gets notes in F MajorScale", function() {
    let scale = new MajorScale("F");
    // TODO: should be Bb5
    expect(scale.getRange(5)).toEqual([
      "F5", "G5", "A5", "Bb5", "C6", "D6", "E6", "F6"
    ]);
  });
github leafo / sightreading.training / static / spec / music_spec.es6 View on Github external
it("gets enharmonic spelling of notes for key", function() {
    let key = new KeySignature(-3) // b e a
    let notes = new MajorScale(key.name()).getRange(4).map((n) => key.enharmonic(n))

    expect(notes).toEqual([
      "Eb4", "F4", "G4", "Ab4", "Bb4", "C5", "D5", "Eb5"
    ])
  })
})
github leafo / sightreading.training / static / js / components / ear_training / melody_playback_exercise.es6 View on Github external
let generator
    if (this.state.continuousMelody && this.currentNotes) {
      // reuse the same generator so the melody is smooth
      generator = this.state.currentNotes.generator
      generator.notes = notes // replace notes with the new set generated
      generator.notesPerColumn = this.state.notesPerColumn
    } else {
      generator = new RandomNotes(notes, {
        smoothness: 6,
        notes: this.state.notesPerColumn,
        hands: 1,
      })
    }

    // create a test melody
    let list = new NoteList([], { generator })
    list.fillBuffer(this.state.notesPerMelody)

    if (this.state.melodyDirection == "asc") {
      console.warn("sorted asc")
      list.sort((rowA, rowB) => parseNote(rowA[0]) - parseNote(rowB[0]))
    }

    if (this.state.melodyDirection == "desc") {
      console.warn("sorted desc")
      list.sort((rowA, rowB) => parseNote(rowB[0]) - parseNote(rowA[0]))
    }

    this.props.midiOutput.playNoteList(list).then(() => {
      this.setState({ playing: false })
    })
github leafo / sightreading.training / static / spec / note_list_spec.es6 View on Github external
it("matches with singular notes, anyOctave", function () {
      const notes = new NoteList([
        "D5",
        "C5",
      ])

      expect(notes.matchesHead(["D5"], true)).toBe(true)
      expect(notes.matchesHead(["D6"], true)).toBe(true)
      expect(notes.matchesHead(["C5"], true)).toBe(false)

      // singular notes wrapped in array
      const notes2 = new NoteList([
        ["D5"],
        ["C5"],
      ])

      expect(notes2.matchesHead(["D5"], true)).toBe(true)
      expect(notes2.matchesHead(["D6"], true)).toBe(true)
      expect(notes2.matchesHead(["C5"], true)).toBe(false)
    })
github leafo / sightreading.training / static / spec / music_spec.es6 View on Github external
it("notesSame", function() {
    expect(notesSame("C5", "C6")).toBe(true);
    expect(notesSame("C5", "C5")).toBe(true);

    expect(notesSame("C5", "D5")).toBe(false);
    expect(notesSame("C#5", "C5")).toBe(false);
    expect(notesSame("Ab5", "A3")).toBe(false);

    expect(notesSame("Db5", "Db6")).toBe(true);
    expect(notesSame("G#5", "G#7")).toBe(true);

    // wrapping
    expect(notesSame("B#5", "C6")).toBe(true);
    expect(notesSame("B#5", "C7")).toBe(true);

    expect(notesSame("B3", "Cb5")).toBe(true);
    expect(notesSame("B5", "Cb3")).toBe(true);
  });
github leafo / sightreading.training / static / spec / music_spec.es6 View on Github external
it("notesSame", function() {
    expect(notesSame("C5", "C6")).toBe(true);
    expect(notesSame("C5", "C5")).toBe(true);

    expect(notesSame("C5", "D5")).toBe(false);
    expect(notesSame("C#5", "C5")).toBe(false);
    expect(notesSame("Ab5", "A3")).toBe(false);

    expect(notesSame("Db5", "Db6")).toBe(true);
    expect(notesSame("G#5", "G#7")).toBe(true);

    // wrapping
    expect(notesSame("B#5", "C6")).toBe(true);
    expect(notesSame("B#5", "C7")).toBe(true);

    expect(notesSame("B3", "Cb5")).toBe(true);
    expect(notesSame("B5", "Cb3")).toBe(true);
  });
github leafo / sightreading.training / static / spec / music_spec.es6 View on Github external
it("notesSame", function() {
    expect(notesSame("C5", "C6")).toBe(true);
    expect(notesSame("C5", "C5")).toBe(true);

    expect(notesSame("C5", "D5")).toBe(false);
    expect(notesSame("C#5", "C5")).toBe(false);
    expect(notesSame("Ab5", "A3")).toBe(false);

    expect(notesSame("Db5", "Db6")).toBe(true);
    expect(notesSame("G#5", "G#7")).toBe(true);

    // wrapping
    expect(notesSame("B#5", "C6")).toBe(true);
    expect(notesSame("B#5", "C7")).toBe(true);

    expect(notesSame("B3", "Cb5")).toBe(true);
    expect(notesSame("B5", "Cb3")).toBe(true);
  });