Code Monkey home page Code Monkey logo

zupfnoter's Introduction

zupfnoter

Free Web based editor for Tableharp notations based on abc notation. Please have a look on the credits below. Zupfnoter would not exist without inspiratio and help from others.

getting started

  • goto https://zupfnoter.weichel21.de
  • you should see the demo song
  • watch tunes showing up
  • click on render to update harp notes
  • click on play to listen to the tune
  • feel free to ask if there are questions (too many features to describe here)
  • have a drobox-account if you want to save your work

Key features

  • creates sheets for table harps (Veeh-Harfe®, Zauberharfe etc.)
  • draw notes, flowlines, subflowlines, synchlines, tuplets, annotations, lyrics ...
  • print flexible exctracts on A3, A4
  • full ABC support
  • MusicXml import
  • runs in Webbrowser
  • load and save to dropbox

Zupfnoter User Interface

Zupfnoter has a self explaning user interface. Few things are important to know:

Drag and Drop

  • You can drag the borders of the panes to adjust it to your needs

  • You can drag and drop the text annotations in the harpnote preview to reposition the same

  • You can drag some note bound annotations if the related note has a dragmark [r:id|

  • you can drag Files to Zupfnoter editor pane. The following formats are supported

    • abc
    • mxl (musescore Music XML files
    • xml (Music XML files)

Keyboard shortcuts

  • Ctrl / cmd - R : Render the tunes
  • ctrl / cmd - P : play (depending on the selection)
  • ctrl / cmd - K : open the Zupfnoter console to see more messages
  • ctrl / cmd - S : save

saving your work

You can save your work in

  • dropbox: you have to login and specify the path in your dropbox. You can also open files in dropbox with the menu open. Note the the numeric identifier in the file name must be unique.

    Files in dropbox are named as

    id_Title.abc ID following the conventions of X: line in ABC

  • download as abc

For more details please read the manual (sorry, it is in German) or watch the tutorial vidoes (via zupfnoter.de)

Credits

This software would not exist without the great support (mentioned in sequence of contact)

Licencse

This software is licensed under dual license GPL and Commercial

Contributing (needs update)

Your contributions are welcome. However, few things you need to know before contribution:

  • install Ruby 2.1.1 or higher with bundler
  • clone the repository
  • goto 30_Sources/SRC_Zupfnoter
  • run "bundle install"
  • goto 30_sources/SRC_Zupfnoter/src
  • run rake server
  • goto http://localhost:9292

Install the following node modules - the node setting is not yet done properly ...

  • blob
  • encoding
  • browserify
  • jspdf
  • uglify-js
  • ajv

Please check out latest code before changing anything. Please use Gitflow to prepare PRs

Contributors who need a Code of Conduct which goes beyond the basic social skills which usually are taught by parents or kindergarden might consider to stay away from here.

zupfnoter's People

Contributors

bwl21 avatar flvani avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

zupfnoter's Issues

refine config menu

Requst

Config menu get bigger and bigger. We need to improve usabliity

Approach

  1. rearrange config menu
  2. add hints to config menu

Add another class of Flowline for unsynched notes

Problem: In case a note has no synchline to another voice it is hard to read.

Request: Create a flowline to up to the most recent note in the current voice which has a synchline.
Call the thing a "subflowline"; make the subflowline selectable.
Make the subflowlines light grey (or dense dotted)

bugs in player

  • gives noise if song starts with rests
  • stops after the last note of last voice

Make rendition of triplets configurable

Request

Triplets somtimes look ugly, in particular if they are not monotoneous.

Approach

  1. Let user drag the triplet "3" and compute the Controlpoints of the Bezier-curve accordingly.
  2. Analyze all pitches of the triplet and optimize the rendition.
  3. use big curly braces for triplets instead of Bezier-Curves
  4. ...

Provide download for abc code

Request

Some users do not want to store in Dropbox. For those we should have the way to save locally as ZIP-Download.

Approach

Reactivate the code for this.

Feature: automatically create count notifications

Request

We should automatically create notes how to count:

screenshot_568

Solution approach

  1. Configuration can turn countnotes on/off per voice:
    countnotes [1,2,3]
  2. Inline-instruction to turn countnotes on/of within a sequence in the voice. Alternatively configure it with notebound-Annotations
  3. Use small anntoations for countnotes
  4. count in denominator of Q:
  5. count half of denominator with an 'e' e.g. 1 e 2 e; or 1 e u e 2 e u e
  6. compute the position of the annotation based on previous / next note

Jumpline end not correct in case of a full rest

Request

in testcase Rest.abc:

screenshot_634

note the configuration

      "layout"      : {
        "grid"         : false,
        "ELLIPSE_SIZE" : [4, 2],
        "REST_SIZE"    : [10, 5],
        "LINE_MEDIUM"  : 0.3,
        "LINE_THICK"   : 0.5,
        "Y_SCALE"      : 15
      }

Some questions

Hi, I am very impressed with your work on zupfnoter.
I understand that you use abc2svg for rendering your tunes.
What i don't understand completely is how you get the musical structure in your app, pitches times and positions in the score. I looked at abc2svg myself but I couldn find a way to get tune data, for example for playing it and animating notes. I would be very thankfull if you could give me some pointers!

Zupfnoter does not work on Microsoft Edge

Request

  • When starting Zupfnoter on MS-Edge it claims that 'uicontroller' is not defined.
  • after passing the controller directly to init_w2ui() instead of using a global variable it does not claim missing uicontroller. But it is not initialized properly.
  • it throws a lot of syntax errors
  • it does not render text with hyphens in SVG https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/5432639/

solution

  • use chrome :-)
  • raise a waring if running on edge
  • try to nail down all that stuff

Improve ace snippet for Configuration

Request

  1. Ace Snippet should provide a full blown working configuration covering 80% case
  2. This configuration shall be easy to adapt.

approach

  • Inject a snippet with a reasonable "0" - Configuration with proper positioning of legend and page title
  • provide a snippet with a full configuration

Simplify editing lyrics

The abc - editor should have a menu item "paste lyrics".

This would take the text in Clipborard and prepend it with "W" and insert it in a new line.

solution approach

  1. load the lyrics editor when activating the lyrics tab
  2. update the abc-editor on every change in the lyrics tab

automatically shift very left notes

When printing on A3 sheets the G, is cut because of the drawing area limitation of the printer.

We should add an option to shift these notes on A3.

uninsons should be connected to its highest note

request

up to now unisons are connected to their first not. When importing musicxml it is often the case that unisons are noted from low to high while the melody is often in the highest note an unison.

Solution

simple and pragmatic

let unisons be connected to their last note

complete solution

make it configuiable by by voices

uninson_proxy : first | last | highest | lowest

improve positioning of lyrics, annotations, legend

Request

we should have some support for positioning of lyrics etc.

  1. allow to move them on the harppreview
  2. report the new coordinates
  3. backannotate the coordinates to the abc source

Solution approach

  1. implement draggable in raphael-engine.rb (see http://wesleytodd.com/2013/4/drag-n-drop-in-raphael-js.html)
  2. reorganize configuration such that we no longer use arrays for lyrics and sheetnotes
  3. implement an on the fly migration of configuration
  4. backannotate the coordinates via confstack

Pitch of a rest at end of repetition shall be the previous note

Request

if a repeated section ends with a rest, the pitch of the rest shall not be the one of next note. This is because we do not continue to play at the next note but at the beginning of the repetition.

Therefore it is irritating to place the rest adjacent to the net note.

Solution

  1. set the pitch to the one of the previous note in case a repetition ends with a rest.
  2. investigate,
    • if the pitch of rests shall always be the one of the previous note.
    • behavior on variant endings
  3. refactor handling of pitch in rests, @previous_note, prev_pitch etc.

Status

  1. does not work if there are more than one rests at the end of the repeated section.
  2. does not work properly in case of variant ending

I guess the whole thing needs to be reworked. Even the code is hard to understand.

Create a desktop version

Request

Some users do not like the pure web based approach. They request a Desktop version.

Solution Approach

  • Create a desktop with electron.io

Status

rests have a side effect on pitches

X:1016
T:rest pitches
F:1016_restpiches
L:1/8
Q:1/4=55
M:4/4
K:Ab

C D =D E |
C D z =D E |

W: despite of the rest, both measures shall be the same

but they don't :-)

enhance countmarks by "lautsprache"

There is a way to express the the tempi of music by a special language for example:

1,2,3,4 => ta o a o
12 => ta o
1 => ta ta ta ta
1 2 u 3 u 4 u => ta ti ti ti ti ti

Synchlines should also include Chords

If a chord is entered, it has its own Synchline, but is not connected to the other voices.
Please connect the chord with a Synchline to the voice as well

Jumpline end not correct in case of a full rest

Request

in testcase Rest.abc:

screenshot_634

note the configuration

      "layout"      : {
        "grid"         : false,
        "ELLIPSE_SIZE" : [4, 2],
        "REST_SIZE"    : [10, 5],
        "LINE_MEDIUM"  : 0.3,
        "LINE_THICK"   : 0.5,
        "Y_SCALE"      : 15
      }

Localize Zupfnoter

Request

There are some people requesting a German version

Solution approach

  • use w2uitils.locale / w2utils.lang http://w2ui.com/web/docs/w2utils.lang
  • store the desired languate in systemstatus
  • detect language by `navigator.language``
  • do the translation in
    • logger
    • abc2svg - need help from Jef
  • mimic I18n.t("foo") for ruby strings

Status

  • Localization of w2ui based UI done
  • localization of abc2svg error messages done
  • localization of parameter help open

Improve Zupfnoter Demo Mode

Request

  • As of now Zupfnoter shows the demo tune only if

    • it is invoked the very first time or
    • user enters "demo" in console

    when Demo tune is loaded the content of localstore is desctroyed. User looses his tune if it was not saved before

  • There should be more Demos to be invoked from the Help menu

  • It should be possible to create a link which directly opens a tune in Zupfnoter similar to opalrb.org/try

Solution approach

  1. Provide URL-Parameters to load demos
    /?load=...&mode=demo
  2. if demos are loaded, make them readonly, at least do not store them in localstore
  3. provide a share button which crates a link with a compressed url

Defaults for positioning

As we now have multi-level configuration, we should provide proper defaults for the position.

  1. Modell Standard
    • top right
    • top left
    • bottom right
    • bottom left
  2. Modell Solo
    • top right
    • top left
    • bottom right
    • bottom left

Zupfnoter reports "BUG" if character encoding is not correct on windows.

Problem

We had the situation, that a piece was created on Mac, the copied to Windows and the user added German text with Umlauts on Windows. Zupfnoter then reported a "BUG".

As a pity, I cannot reproduce this on my machine.

Solution Approach

Investigate the character encoding of the abc text.

create a user manual

Request

There should be a user manual, in particular for German users as Zupfnoter UI is english

Provide an option to print the note names on top/bottom

Request

There should be an option allowing to print the note names on top/bottom.

Solution approach

  1. call it "scalebar"

  2. make it configurable

    "scalebar": {
                     "text":  "G G# A A# B C C# D D# E F F#",
                     "vpos":  [6, 290],
                     "style": "small"
                   }

Support decorations

Some Decorations should be supported:

  • Active in all voices - everything about speed, volume and sequence

    • !fermata!
    • statccato
    • !fine! all voices
    • !segno! 2 ornate s-like symbols separated by a diagonal line
    • !coda! a ring with a cross in it
    • !D.S.! the letters D.S. (=Da Segno)
    • !D.S.alcoda! the words "D.S. al coda"
    • !D.S.alfine! the words "D.S. al fine"
    • !D.C.! the letters D.C. (=either Da Coda or Da Capo)
    • !D.C.alcoda! the words "D.C. al coda"
    • !D.C.alfine!
    • !piano!
    • f, ff, fff, p, p, ppp
  • move to before note

    • the closing part of cresc and dmiini
  • others

  • !arpeggio!

Note that some decroations shall be active in all voices

implement alternative representation of repeats

Request

in some cases it is too complex to represent repetitions by jumplines. Please implement an alternative representation

Solution approach

  • represent repetitions by annotations |: resp :|
  • compute the default position by the pitch of the note before/after such that the flowline does not cross the repetition sign
  • make the marks such that the colons are on the note site (den Noten zugewandt)
  • make parts on repetition begin and repetition end
  • configure it like
        "repeatbars"   : {
          "voices" : [],
          "begin"  : {"pos": [-5, -3], "text": "|:", "style": "bold"},
          "end"    : {"pos": [3, -3], "text": ":|", "style": "bold"}
        }

restructure dragging of notebound annoations

Request

dragging of notebound anntoations is grown somehow, but we have to clanup strategy and implementation:

  • consistent configuration approach such that volatile keys are not repeated

    notebound.voice.note-id.class.pos
    

    With this approach

    • rearrangement of voices can be easily reconfigured by changing the "voice" key
    • If note-id occurs only once
  • limit to particular voice. Up to now the same note-id in different voices synchronized the result of the dragging. This is not practicable

Solution approach

  • apply the approach to annotations, partnotes, variant endings
  • countnotes are handled separately
    • ability to reset those in one shot
    • they are positioned based on time, not based on note-id
    • the annotations are computed in layout phase not in transformation phase

Proxy note of unisons is not consistent

jumpline still goes to the one specified in Synchpoints
all others are represetned by the one
specified in layout_accord

This is not dry

Furtheron, if a repretiion starts with a unison, we get an error because prev_pitch is not defined for Flowline

Provide a statusline

Request

provide a consistent way for feedback to user. Console was intended as such but is not accepted by users.

Solution approach

add a status line at the very bottom of the screen showing:

  1. Dropbox status (done)
  2. Cursor-Position in ace (done)
  3. ace token info 8done)
  4. information about the current element when hovering over it (done)
    • confkey
    • ...
  5. storage status
  6. demo mode

...

Improve play button behavior

Request

  1. Play-Button shall decide what to play:
    • if one note is selected - play_selction_ff
    • if more than one note is selected - play selection
    • if nothing is selected play from the beginning
  2. improve selection such that shift click on a not also selects the range

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.