web based music sheet viewer (go, pdfjs) as a single binary

Overview

Digital Music Stand

Build Status

A simple cross-platform browser-based pdfjs-based viewer to display and search music sheets.

  • A single binary including all assets.
  • Usage is similar to SublimeText. Press P and perform a fuzzy search.
  • Not database required
  • Shortcuts 1,2 to scroll to previous/next page using a programmable foot pedal.
  • Unobtrusive design
  • Upload PDF when enabled
  • Add sheets via simple file naming
  • Use a YAML format to add whole songbooks and complex sheets

DEMO

See http://demo-digitalmusicstand.patwie.com/ for a subset of the Mutopia Project which are released under Creative Commons Attribution-ShareAlike.

Handling

Press p and then type monlgiht3 (with typos). You can use the arrow keys (up/down) to navigate. But for now select Sonata No. 14 Moonlight (3rd Movement: Presto Agitato) and press the enter key. To scroll to the next page use the right arrow key (or the key 2).

Shortcuts

h
opens help dialog
p
opens prompt for a query
u
opens dialog to upload pdf (when enabled)
enter
loads select sheet
esc
closes all modal dialogs
arrow key down
selects next entry in result list
arrow key up
selects previous entry in result list
arrow key right or key '2'
scrolls to next page
arrow key left or key '1'
scrolls to previous page

The short cuts 1 and 2 are for a programmable foot pedal

Get it

Download from the release page. The single binary contains all files.

Or build it yourself

Or build it yourself:

git clone https://github.com/PatWie/digitalmusicstand.git
cd digitalmusicstand
./release.sh

Usage

./digitalmusicstand --sheets /path/to/pdfs --listen :3000

The files in the sheet directoy need to follow the convention interpret_title.pdf. Whitespaces should be replaced by '-'.

Point your browser to http://localhost:3000

Add Songbooks

Alternatively, the YAML format can be used to add songbooks or complex sheets.

Example 1 (Songbook):

# content of The_Big_Book_of_Jazz.yml
path: The_Big_Book_of_Jazz.pdf
artist: Various Artists
title: The Big Book of Jazz
songs:
    - artist: Artist 1
      title: Song 1
      pages: [2, 3]
    - artist: Artist 2
      title: Song 2
      pages: [4, 5, 6, 5, 6]
    - title: The Big Book of Jazz (Full book)

Example 2 (single sheet):

# content of Let_it_be.yml
path: Let_it_be.pdf
artist: The Beatles
title: Let It Be
  • Each song is added to the sheet list with its artist name and title. (see Example 1)
  • The page numbers define the used pages of the PDF and their ordering. (see Song 1 and Song 2)
  • If no page information for a song is provided, the complete pdf is used. (see Example 1)
  • If no artist name for a song is provided, the artist name of the head is used. (useful for single artist songbooks)
  • If no songs are provided, the head (artist anme and title) is used for a single sheet. (see Example 2)
  • Subfolders are allowed in path.

To activate this functionality use the --parse-yaml flag:

./digitalmusicstand --parse-yaml --sheets /path/to/pdfs --listen :3000
Issues
  • Handle Songbooks (#2)

    Handle Songbooks (#2)

    The changes were much easier than expected. Therefore, here is the PR for #2.

    Example 1 (Songbook):

    # content of The_Big_Book_of_Jazz.yml
    path: The_Big_Book_of_Jazz.pdf
    artist: Various Artists
    title: The Big Book of Jazz
    songs:
        - artist: Artist 1
          title: Song 1
          pages: [2, 3]
        - artist: Artist 2
          title: Song 2
          pages: [4, 5, 6, 5, 6]
        - artist: Various Artists
          title: The Big Book of Jazz (Full book)
    

    Example 2 (single sheet):

    # content of Let_it_be.yml
    path: Let_it_be.pdf
    artist: The Beatles
    title: Let It Be
    

    Here is how it works currently:

    • Each mentioned song is added to the Sheet list. (Example 1)
    • If no song information is provided, the head (artist and title) is used for the sheet. (Example 2)
    • If no page information is used, the complete pdf is used. (Example 1: Song 3, Example 2)

    The new functionality can be activated with the parameter --parse-yaml. The precious functionality (parsing PDF files) can be activated with the parameter --parse-pdf. Both functionalities can be used at the same time. (Maybe it's better to have a parameter to deactivate PDF parsing, instead of activating it. Then this implementation is completely backwards compatible.)

    What is currently not working:

    • Uploading of yaml files
    • Good error handling (e.g. incorrect page numbers)
    • Do not parse pdf files twice (as raw pdf and in yaml file)
    • The book title and book artist is currently not used. But I think about displaying it and including it into the search.

    What do you think?

    opened by gorgobacka 10
  • List all sheets

    List all sheets

    It would be nice, if there would be a way to display all available sheets.

    E.g. on your demo, it's difficult so check what's available, if the user needs explicitly search for something.

    opened by gorgobacka 7
  • How to improve the image quality?

    How to improve the image quality?

    I'm having problems with many pdfs that the quality of the rendered images is really bad. The images are not readable. The pdf looks fine.

    Here is an example (the black bar is an irregularity from the screenshot and can be ignored): example

    Do you have any ideas how this can be improved?

    I read that the quality can be improved, if the image is rendered with a higher scale value and is reduced with CSS to the final size.

    But I have no idea how to modify the code to archive this, because currently the scale depends on the height of the pdf-viewer element.

    opened by gorgobacka 7
  • Handle Songbooks

    Handle Songbooks

    This is an really cool project. It's simple and very lightweight. I'm plan to use it on a RPi together with my piano.

    However, most of my scanned sheet music is arranged in complete songbooks. And I don't want to cut them.

    Do you have some ideas how to deal with those?

    One idea that came to my mind is to provide a small text file with the same filename as the pdf that includes the annotations (one song per line). Something like:

    Line 1: artist<tab>title<tab>start_page<tab>end_page
    Line 2: ...
    

    And then only convert those pages on the fly.

    But I don't know if this is possible.

    opened by gorgobacka 4
  • Improved search

    Improved search

    If a user want to select a Sonata from Telemann, the user would user something like "telemann sonate". But it reveals nothing. Does the search only uses the title or the artist, but not both fields together?

    And maybe a tailing space in the search input should be removed, because it doesn't add any value but reduces the results.

    opened by gorgobacka 3
  • handle different versions of same sheet

    handle different versions of same sheet

    interpret_title[_version].pdf

    opened by PatWie 0
  • Fix Readme: specify the port

    Fix Readme: specify the port

    It seems that the command line has changed.

    Now it's --listen :3000 instead of --port 3000.

    opened by gorgobacka 0
Releases(1.4.1)
Music typeset with the Lilypond system

Intro (from long ago) This repo contains sheet music typeset with the Lilypond typesetter. The music chosen is in favour of cello music (mostly chambe

Enthusiastic about  the Cello 95 Sep 24, 2021
A beautiful cross platform Desktop Player for Google Play Music

Google Play Music™ Desktop Player Windows: MacOS / Linux: Run "Google Play Music" as a standalone desktop app. Never again will you have to hunt throu

Samuel Attard 8.5k Sep 12, 2021
🎵 Music notation engraving library for MEI with MusicXML and Humdrum support and various toolkits (JavaScript, Python)

Verovio is a fast, portable and lightweight library for engraving Music Encoding Initiative (MEI) digital scores into SVG images. Verovio also contain

RISM Digital Center 426 Sep 22, 2021
Typographic Beat-Oriented Notation for music

tbon Typographic Beat-Oriented Notation for music Tbon aims to be the fastest way to enter pitches, rhythms, meter and dynamic levels from a computer

null 11 Jan 23, 2020
网易云音乐第三方

ieaseMusic Elegant NeteaseMusic desktop app, Rock with NeteaseMusic ?? Built by Electron, React, MobX, JSS API 由 Binaryify/NeteaseCloudMusicApi 提供。 Pr

null 8.6k Sep 22, 2021
Collaborative Programmable Music

888 888 _ooooooooo._ 888 ,o888PP""""PP88

Overtone 5.2k Sep 11, 2021
A language for music notation

Lydown is a language and compiler for creating music scores, parts and snippets. The lydown code is compiled to lilypond code and then compiled to PDF

Sharon Rosner 21 Apr 8, 2021
Split flac/ape/wv/wav + cue sheet into separate tracks

See unflac as a better replacement of this project. split2flac split2flac splits one big APE/FLAC/TTA/WV/WAV audio image (or a collection of such file

Sigrid Solveig Haflínudóttir 248 Jun 22, 2021
A music programming language for musicians. :notes:

Installation | Docs | Changelog | Contributing composers chatting Alda is a text-based programming language for music composition. It allows you to co

Alda 4.7k Sep 25, 2021
Open source sheet music

The Mutopia Project The Mutopia Project offers sheet music based on editions in the public domain. All sheet music is written in LilyPond by volunteer

null 187 Sep 3, 2021
Music player for deepin desktop environment.

deepin-music Deepin music is a local music player with beautiful design and simple functions developed by Deepin Technology. Dependencies Build depend

Wuhan Deepin Technology Co.,Ltd. 155 Sep 16, 2021
Frescobaldi LilyPond Editor

README for Frescobaldi Homepage: http://www.frescobaldi.org/ Main author: Wilbert Berendsen Frescobaldi is a LilyPond sheet music text editor. It aims

Frescobaldi 501 Sep 21, 2021
A Music programming language. Translates source code into MIDI. Includes a player. Supports MIDI-Karaoke. Includes a MIDI analyzer.

Get Started | Features | Screenshots | Programming | CLI | Contribute | License Midica is an interpreter for a Music Programming Language. It translat

Jan Trukenmüller 47 Sep 17, 2021
Mopidy is an extensible music server written in Python

Mopidy Mopidy is an extensible music server written in Python. Mopidy plays music from local disk, Spotify, SoundCloud, Google Play Music, and more. Y

Mopidy 7.2k Sep 17, 2021
music library manager and MusicBrainz tagger

beets Beets is the media library management system for obsessive music geeks. The purpose of beets is to get your music collection right once and for

beetbox 10.4k Sep 15, 2021
Streaming music player that finds free music for you

Desktop music player focused on streaming from free sources Links Official website Mastodon Twitter Support channel (Matrix): #nuclear:matrix.org Disc

null 6.8k Sep 17, 2021
Lilypond music preprocessor

Ripple - DRY for Lilypond Ripple is a small program that helps you generate scores and parts without repeating yourself, performing complex includes o

Sharon Rosner 21 Mar 24, 2020
The git repository of the advanced drum machine

Hydrogen drum machine Hydrogen is an advanced drum machine for GNU/Linux, Mac and Windows. It's main goal is to bring professional yet simple and intu

Hydrogen 702 Sep 15, 2021
MuseScore is an open source and free music notation software. For support, contribution, bug reports, visit MuseScore.org. Fork and make pull requests!

Music notation and composition software MuseScore is an open source and free music notation software. For support, contribution, and bug reports visit

MuseScore 6.3k Sep 24, 2021