Skip to content

Ability to specify notes which last longer than a quarter note. #75

Open

Description

@rain-sk

The string-based API for specifying rhythm and timing of notes is awesome, but the maximum unit of time being a quarter-note makes complex rhythms difficult to construct. I suggest adding additional characters and structures for note lengths greater than 1/4 notes.

Activity

  1. crazy4groovy commented on Oct 3, 2018

    @crazy4groovy

    I'm no expert! But I just noticed in the tidal.js example this

    pattern: '[xxx]'

    and [] makes it sound faster, maybe 1/8 notes? The docs don't mention this.

  2. rain-sk commented on Oct 3, 2018

    @rain-sk
    Author
  3. walmik commented on Oct 6, 2018

    @walmik
    Collaborator

    Thank you for the comments.

    The functionality to extend note lengths is a must have for the browser clip method of scribbletune. It already exists in the node module which exports MIDI files as outlined here https://scribbletune.com/documentation/core/clip Basically adding underscores to a x will increase its length. So if x is a quarter notes, a single underscore like this, x_ makes it as long as 2 quarter notes and 2 underscores x__ makes it as long as 3 quarter notes. One can even set the default duration of each x thus making it possible to extend those notes exponentially.

    However, for the browser we need to add this. I m open to PRs for this.. if no PR comes in I ll add it myself once I get some time.

  4. rain-sk commented on Oct 12, 2018

    @rain-sk
    Author

    Thanks for clarifying!

    This begs the question (for me at least): what about dotted notes (beats that last 1.5 times the specified note length)? Would it be something like this? [x__] aka one note lasting the length of three eighth notes?

    I've been messing around with some ways to make the clips editable in-browser, but understanding the notational restrictions will make it easier to design something that works!

  5. walmik commented on Oct 12, 2018

    @walmik
    Collaborator

    Hey HI @spencerudnick For those you can just mix and match.
    so something like x[xx] is a quarter note followed by 2 eighth notes. If you dont want play one of the eighth notes then simply x[-x] You can keep subdividing further if you like.. for instance something like this x[x[xx]]. Here we have one quarter note followed by another quarter note which is chopped up into a eighth notes followed by 2 sixteenth notes.

  6. rain-sk commented on Oct 12, 2018

    @rain-sk
    Author

    @walmik I believe you're still referring to methods of subdividing quarter notes. Check out this video for an example of what I'm referring to.

    Dotted notes instruct the instrument / musician to play a note which lasts for 1.5 times the length of the note specified. So a dotted quarter note lasts the length of a quarter note plus an eighth note.

    Specifying these types of notes is pretty imperative for creating a visual clip editor, otherwise users will be limited to a constrained visual grid.

    image

    This also begs the question of how to specify notes spanning beats (tied notes), so a quarter-note could begin one eighth-note length from the beginning of the measure.

  7. rain-sk commented on Oct 12, 2018

    @rain-sk
    Author

    Based on your syntax, I could see something like: 'x[_-]'

    Thoughts?

  8. walmik commented on Oct 13, 2018

    @walmik
    Collaborator

    I think this is definitely a new feature.

    A hacky, unwieldy way that can be explored at least as a POC in the node module version (not the browser js) is to use the HDR speed and construct 2 clips and concat them before exporting. Basically you'd need to add a prop here for the required HDR speed (comments here have the description of what is HDR) https://github.com/scribbletune/scribbletune/blob/master/src/clip.js#L30

    If that works out then we can put a new character in the pattern lingo for . Currently pattern only accepts

    • x
    • -
    • _
    • [
    • ]

    Some thought must be invested while developing this as it needs to also subsequently support the same in the browser along with Tone.js (which is a primary dependency for running Scribbletune in the browser)

    All in all i believe this a great feature to have.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions