Giter VIP home page Giter VIP logo

xen-fret's Introduction

Xen Fret

Xen Fret is a simple web app for generating SVG xenharmonic/microtonal scale diagrams for fretted string instruments. Specifically, for generating scale diagrams for equal temperaments.

Gettring started

Xen Fret is currently hosted here as a static page on github pages. In the future, we may add desktop and mobile versions.

Contributing

Default tuning for an EDO doesn't make sense? Default set of scales looking a bit sparse for your favorite temperament? Find an error in the data set of scales/tunings/temperaments? Either file an issue to let me know, or (if you have some techincal knowledge) contribute a fix yourself. The default dataset bundled with the app can be found here.

Interested in contributing to some more technical issues but don't know where to start? Feel free to reach out.

Building

Xen Fret is built with reflex-frp and nix, and can be deployed as a static webpage (with front-end Javascript). To build a static front-end with nix, simply run nix-build -A ghcjs.frontend.

Xen fret can also be built as a native executable thanks to jsaddle. To build Xen Fret this way, simply run:

nix-build -A ghc.frontend

to build with nix, or

cabal build frontend

to build with cabal.

Like this project?

If you use Xen Fret, or find it useful, consider supporting it's development efforts by buying me a coffee โ˜•, or a beer ๐Ÿบ!

Donate Donate with Ethereum

xen-fret's People

Contributors

sintrastes avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

xen-fret's Issues

Note names should follow note markers

Currently the note names are always aligned with the frets on the diagram.

However, when the note markers are displayed in-between frets, it probably makes the most sense to display the note markers next to where the note markers are.

Allow for note names to be displayed on top of fret diagrams

There are a lot of different ways of doing this. For Instance, just to name a few ideas:

  1. Just display the note names of the open strings on top of the diagram.
  2. Just display the note names inlaid within the dots for scale notes.
  3. Display the note names for each fret.

The data structure needed for this would be pretty simple (just map scale degrees to strings), but it might be useful to use something like xen-toolkit (once it is more developed) to auto-generate naming schemes based on specific regular temperaments (e.x. meantone).

To do this in general also means we probably need to figure out how to do things like e.x. display sagittal symbols, and display them in a diagram.

Allow the user to export multiple scales in a practice sheet pdf

In addition to exporting single SVG diagrams, the user should also be able to select multiple scales somehow, and to export those scales as a PDF document "practice sheet".

Perhaps on the main page we could have some kind of segmented control allowing the user to switch between "SVG export" mode, and "PDF export" mode.

Better emulate behavior of materialize text form validation

Materialize text entries with validation seem to have three states:

  1. Yet to be validated.
  2. Valid.
  3. Invalid

The color for the "yet to be validated" state is either gray, or the default accent color of the theme if focused.

The color of the "valid" state is green for the textbox itself always, whereas the label for the text field will change color (green/gray) depending on focus -- and the "invalid" state has a similar behavior.

It seems like this validation is being applied with some debounce, hence the distinction between the "yet to be validated" state, and the other states.

Allow temperaments to specify a default vertical spacing

The fact that (e.x.) 24-TET and 12-TET have the same vertical spacing of frets is pretty weird. I'd expect that higher EDOs would have smaller vertical spacing between frets to emulate what the actual instruments look like.

Allow for different styles of fretboard diagram

Looking at some fretboard diagrams online, there are a lot of different styles.

We should have the option for things like background colors, fretboard inlays, or even horizontal orientation to allow users to customize these diagrams to their needs.

Only one new temperament can be added at a time.

To reproduce:

  1. Go to the temperament page.
  2. Add a new temperament.
  3. Add another temperament without first refreshing the page.

Expected: Both of the temperaments have been added.

Actual: Only the second temperament is displayed in the temperament page.

Implement export to SVG.

Currently the user can only see an SVG preview on their browser.

When the user presses "save", they should be able to export their diagram as an SVG.

Add an option for the placement of dots

Currently, note dots are placed "on" the frets.

For most users, placing these dots instead "in-between" frets (where you'd actually place your fingers on a fretted instrument).

However, perhaps the current behavior would be useful for fretless instrument players, so we could keep it as a preference.

Allow the user to display offsets and transpositions

Currently the user can only display a fretboard diagram from the first fret (and open strings) downward. They should also have the option of being able to see only higher up on the fretboard.

Also, the user can currently only see scales based off the lowest note of the instrument. The user should also be able to specify a "transposition", or possibly "root note" so that scales at different degrees can be displayed.

Add the ability to add chord diagrams

This would probably require adding some sort of switch (a materialize css tab switcher might be nice for this) for switching between the entry of scale diagrams and chord diagrams.

Add validation for scales

The scale entry form should:

1. Not allow the user to enter a scale with duplicate name for the same temperament.
2. Validate that the list of intervals sums up to the period of the temperament.

Add validation for tuning form

The form shall have the following requirements:

  1. Instrument names should not be empty.
  2. Names of tunings should not be empty
  3. List of intervals should not be empty.
  4. Tunings should not have duplicate entries.

Note: Currently, the last property is characterized by a combination of the instrument, temperament, and tuning name -- as if any of these fields are distinct, it will be considered a separate tuning.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.