Make visual music sheets for thatskygame (graphical representations of the Sky keyboard)

Overview

sky-python-music-sheet-maker

This program lets you make visual music sheets for Sky: Children of the Light. It will ask you a few questions, and does not require previous knowledge of the command line to run.

More details at the Sky-Music website.

Table of contents

Usage

Installation

The program requires Python >= 3.6 and the following packages:

  • PIL (preferably pillow)
  • import_resources (for Python < 3.8)
  • pyYaml
  • mido (optional: for generating midi output)
  • requests (optional: for generating a link to skymusic.herokuapp.com)

The program can be installed by simply unzipping the code on your computer, and running the main script file, or by installing it in your Python distribution with pip: pip install .

The program can be installed on a desktop computer, or a smartphone if a Python IDE is installed (such as Pythonista).

The program can also be installed in a virtualenv to mitigate possible dependency clashes with system site-packages.

git clone https://github.com/sky-music/sky-python-music-sheet-maker.git
cd sky-python-music-sheet-maker
python3 -m venv --clear venv
source venv/bin/activate
pip3 install -r requirements.txt

You can activate the virtual environment with source venv/bin/activate, to exit the virtual enviroment use the deactivate command. Note, it is possible some packages are distributed via bdist_wheel, hence the wheel package may be required.

See here for further details on how to download and install.


Plug-and-play versions

If you’re afraid of the command line, there is a website running this script. There is also a bot running an older version of the program, on thatskygame Discord server, that can be called by typing !song in a channel. Executable binaries are also available for download at https://sky-music.github.io.


Running the script

python 
   
    /sky-python-music-sheet-maker/src/skymusic/command_line_player.py

   

If you have installed the program by pip, just type: skymusic instead.

Flower Dance intro music sheet

As well as using QWERT ASDFG ZXCVB keys on the keyboard (like a piano), there are other supported notations for the notes you provide:

  • Sky column/row notation (A1 A2 A3 A4 A5, B1 B2 B3 B4 B5, C1 C2 C3 C4 C5)
  • English notation, followed by an optional number for octaves (C1, D1, E1, F1, G1, A1, B1)
  • Jianpu (1 2 3 4 5 6 7, followed by + or - for octaves)
  • French do ré mi + octave number
  • Japanese do ré mi + octave number

Note that for musical notations supporting octaves (such as English, Jianpu, and doremi), the starting octave is 1, by convention. Typing a note name without octave (e.g. F) implicitely assumes that it belongs to the starting octave (e.g. F1). However for notes belonging to the next octave (higher pitch), you will have to use the number 2 (C2, D2, E2, etc). So the full range of the piano write C1-C3. This convention is different from SkyStudio's which assumes that the instrument range is C4-C6 (this is true for the basic Sky piano, but not for other instruments such as the winter piano). If you're used to start the octave at 4 (C4, D4, E4...), then enter -3 when asked for an octave shift.

You can type these directly in the command line prompt, but you are strongly advised to save the notes first in a text file. Text files are looked for by the program in the 'test_songs' folder. if you installed the program with pip, this folder must be moved in the Documents folder of your user home directory.

The output will be HTML, SVG, or PNG, with small icons of the Sky keyboard. If you use Western notation or Jianpu notation, it will also convert to Sky notation (ABC1-5) in a text file.

After generating a sheet, you are encouraged to publish the file on https://sky-music.github.io

Configurations

Advanced usage

In contrast with the website or bot versions, the command-line version supports functions for faster processing of songs:

  • the default answer to any question can be put in the skymusic_preferences.yaml file. This way, you will no longer be asked this question (for instance the aspect ratio of the visual sheet). You can even put the notes in there!

  • songs can be processed in a batch by placing preference-like .yaml files in the batch_songs directory (see the example files in this folder to learn the right keywords) and passing the following flag to command_line_player.py:

      -b/--batch_mode
    
  • HTML visual sheets generated after July, 2020 1st can be read again by the program for further modification. These sheets can be recognized by the

    field they contain.

Customized configurations for default directory are supported via command line flags, flags that are not passed or are not valid will reference their default fallback values defined in command_line_player.py:

  • input/output directories where the module will read from/write to can be defined by passing the following flag with the desired directory to command_line_player.py respectively:

      --in_dir 
         
      --out_dir 
         
    
         
  • a custom batch directory for storing preference .yaml files can be defined by passing the following flag with the desired directory to command_line_player.py:

      --batch-dir 
         
    
         
  • the default preference .yaml file path where command_line_player.py reads from can be modified by passing the follow flag with the desired path:

      -p/--pref_file 
         
    
         
  • by default, conversion of the song to a music recording using JSON format is disabled. A link to hear the song being played on https://sky-music.herokuapp.com can be generated, to enable it setting the following flag with the website API key (this key will be given to trusted players):

      -u/--skyjson_url 
         
    
         

Note that to minimize strain to the server, the -u/--skyjson_url and -b/--batch_mode flags are mutually exclusive, meaning that only either one of them can be passed to the module but not both. Further help can be invoked via the -h/--help flag.

Note: json recording feature requires the requests library, which can be installed via the pip package manager by running:

pip install requests

Docker images

Since it might be a bit difficult to ensure that all client python3 installations are functional and reproducible, there is a Dockerfile and Compose file provided. The Dockerfile contains the instructions to assemble a base image to run skymusic, while the Compose file orchestrate the instructions to run the image.

The prebuilt containers have the base skymusic modules included. INPUT_DIR specifies where the container will look for song inputs. OUTPUT_DIR is where the container will output generated music sheets.

  1. Install Docker
  2. Install Docker Compose
  3. Run the skymusic module
INPUT_DIR=/path/to/dir/containing/test/songs \
OUTPUT_DIR=/path/to/output/dir/ \
docker-compose run skymusic

After running, the output will be placed in /tmp/output/, referring to the path inside the container. Your OUTPUT_DIR is bind mounted to /tmp/output.

The first time you execute the above command, Docker will pull the image from the Docker Registry and cache it. Any subsequent runs will utilize the cached image. Note this is a development image with all optional dependencies included.

Credits

Authors

Co-authors: Tracey L, jmmelko


Contributors

Assets:

SVG icons are thanks to madwurmz.

Codebase:

Various contributions from Specy-wot (html & js), Jurassimok (Setup.py), Skyventuree, heronwr (command-line arguments).

Docker images by heronwr aka lambdaw.

Re-use and branching:

This program is not being actively maintained by its original creator Tracey. Assistance is currently provided by jmmelko, but this may not last. Feel free to branch the code and build upon it.

Translators:

  • skyventuree, a.k.a. こじめ (Vietnamese)
  • jmmelko (French)
  • Kai00 (simplified chinese)
  • we are looking for a japanese translator

Info

License

MIT License

Copyright (c) 2020 Tracey

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Code of conduct

We use an adapted version of the Contributor Covenant Code of Conduct, please see CODE_OF_CONDUCT.md for more details.


Contributing

There are several domain-specific guidelines for contributions, largely dealing with the previously established structure of the repo. Please see CONTRIBUTING.md for more details.

PyPassword is a simple follow up to PyPassphrase

PyPassword PyPassword is a simple follow up to PyPassphrase. After finishing that project it occured to me that while some may wish to use that option

Scotty 2 Jan 22, 2022
Apache Superset is a Data Visualization and Data Exploration Platform

Superset A modern, enterprise-ready business intelligence web application. Why Superset? | Supported Databases | Installation and Configuration | Rele

The Apache Software Foundation 50k Jan 06, 2023
Focus on Algorithm Design, Not on Data Wrangling

The dataTap Python library is the primary interface for using dataTap's rich data management tools. Create datasets, stream annotations, and analyze model performance all with one library.

Zensors 37 Nov 25, 2022
A Python-based non-fungible token (NFT) generator built using Samilla and Matplotlib

PyNFT A Pythonic NF (non-fungible token) generator built using Samilla and Matplotlib Use python pynft.py [amount] The intention behind this generato

Ayush Gundawar 6 Feb 07, 2022
Blender addon that creates a temporary window of any type from the 3D View.

CreateTempWindow2.8 Blender addon that creates a temporary window of any type from the 3D View. Features Can the following window types: 3D View Graph

3 Nov 27, 2022
HM02: Visualizing Interesting Datasets

HM02: Visualizing Interesting Datasets This is a homework assignment for CSCI 40 class at Claremont McKenna College. Go to the project page to learn m

Qiaoling Chen 11 Oct 26, 2021
股票行情实时数据接口-A股,完全免费的沪深证券股票数据-中国股市,python最简封装的API接口

股票行情实时数据接口-A股,完全免费的沪深证券股票数据-中国股市,python最简封装的API接口,包含日线,历史K线,分时线,分钟线,全部实时采集,系统包括新浪腾讯双数据核心采集获取,自动故障切换,STOCK数据格式成DataFrame格式,可用来查询研究量化分析,股票程序自动化交易系统.为量化研究者在数据获取方面极大地减轻工作量,更加专注于策略和模型的研究与实现。

dev 572 Jan 08, 2023
Easily convert matplotlib plots from Python into interactive Leaflet web maps.

mplleaflet mplleaflet is a Python library that converts a matplotlib plot into a webpage containing a pannable, zoomable Leaflet map. It can also embe

Jacob Wasserman 502 Dec 28, 2022
Squidpy is a tool for the analysis and visualization of spatial molecular data.

Squidpy is a tool for the analysis and visualization of spatial molecular data. It builds on top of scanpy and anndata, from which it inherits modularity and scalability. It provides analysis tools t

Theis Lab 251 Dec 19, 2022
D-Analyst : High Performance Visualization Tool

D-Analyst : High Performance Visualization Tool D-Analyst is a high performance data visualization built with python and based on OpenGL. It allows to

4 Apr 14, 2022
VDLdraw - Batch plot the log files exported from VisualDL using Matplotlib

VDLdraw Batch plot the log files exported from VisualDL using Matplotlib. At pre

Yizhou Chen 5 Sep 26, 2022
GUI for visualization and interactive editing of SMPL-family body models ie. SMPL, SMPL-X, MANO, FLAME.

Body Model Visualizer Introduction This is a simple Open3D-based GUI for SMPL-family body models. This GUI lets you play with the shape, expression, a

Muhammed Kocabas 207 Jan 01, 2023
A TileDB backend for xarray.

TileDB-xarray This library provides a backend engine to xarray using the TileDB Storage Engine. Example usage: import xarray as xr dataset = xr.open_d

TileDB, Inc. 14 Jun 02, 2021
YOPO is an interactive dashboard which generates various standard plots.

YOPO is an interactive dashboard which generates various standard plots.you can create various graphs and charts with a click of a button. This tool uses Dash and Flask in backend.

ADARSH C 38 Dec 20, 2022
A small timeseries transformation API built on Flask and Pandas

#Mcflyin ###A timeseries transformation API built on Pandas and Flask This is a small demo of an API to do timeseries transformations built on Flask a

Rob Story 84 Mar 25, 2022
This is a sorting visualizer made with Tkinter.

Sorting-Visualizer This is a sorting visualizer made with Tkinter. Make sure you've installed tkinter in your system to use this visualizer pip instal

Vishal Choubey 7 Jul 06, 2022
The open-source tool for building high-quality datasets and computer vision models

The open-source tool for building high-quality datasets and computer vision models. Website • Docs • Try it Now • Tutorials • Examples • Blog • Commun

Voxel51 2.4k Jan 07, 2023
GDSHelpers is an open-source package for automatized pattern generation for nano-structuring.

GDSHelpers GDSHelpers in an open-source package for automatized pattern generation for nano-structuring. It allows exporting the pattern in the GDSII-

Helge Gehring 76 Dec 16, 2022
Visualise top-rated GitHub repositories in a barchart by keyword

This python script was written for simple purpose -- to visualise top-rated GitHub repositories in a barchart by keyword. Script generates html-page with barchart and information about repository own

Cur1iosity 2 Feb 07, 2022
Python Data Validation for Humans™.

validators Python data validation for Humans. Python has all kinds of data validation tools, but every one of them seems to require defining a schema

Konsta Vesterinen 670 Jan 09, 2023