ianZiPu is a way to write notation for Guqin (古琴) music.

Related tags

AudioJianZiPu
Overview

JianZiPu Font

JianZiPu is a way to write notation for Guqin (古琴) music. This document will cover how to use this font, and how to contribute to its design.

Demo: https://neuralfirings.github.io/jianzipu/

Guqin Shorthand for JianZiPu entry

The core of this font is a series of components (think, letters in word) that overlaps to form characters. These letters are represented by unicode characters. To determine which unicode characters to use, we will need to compile a shorthand developed for this font. The compiler looks at:

  • Strings: represented by numbers outside of parentheses.
  • Hui position: represented by numbers inside parentheses, since huis are round and parentheses are round, like (7) or (6.7). Use (0) for open string.
  • Left hand positions: represented by the following: s,d,f,v since that's where the left hand fingers are on a (US-based) keyboard
  • Right hand positions: reprented by: njkl for plucks towards the player, huio away from the player
  • Chords (cuo): representedy by H (cuo), U (fan cuo), I (da cuo), O (da+fan cuo).
  • Li: represented by U

So a string like 6ks(9) would produce a character that represents...

  • 6 -- 6th string
  • k -- gou (pluck inward with the right middle finger)
  • s -- press the string with left hand 4th finger on...
  • (9) -- hui position 9

Now, if you just type this in the font you'll get a string of components, not the actual characters. To produce the actual character, you'll need a special compiler. It just so happens, I have included one in this package in the form of a webpage. If you clone this package and open the index.html file, you should get a text area for inputting the shorthand.

You can also find this compiler here: https://neuralfirings.github.io/jianzipu/

Usage on Websites

If you want to embed JianZiPu in your website, you can copy/paste the three files in the /dist folder and include them in your header.

">


   

Or, you can use the GitHub.io as CDN.

">


   

To render JianZiPu on your website:

  • jzp class: anything embedded in [[double brackets]] will be in JianZiPu string using the JZP font; anything in [[[triple brackets]]] will be converted to a JianZiPu charater using the JZP font
  • jzp-font class: anything here will be use the JianZiPu font

Example of a String:

[[6ks(9)]]
">

  
[[6ks(9)]]

Example of a Character:

[[[6ks(9)]]]
">

  
[[[6ks(9)]]]

Example of Using the Raw Font:


">

  


Usage as a Font

To use the font, install /dist/JianZiPu.otf file. You will still need a converter since the font itself uses unicodes in the 58000 range (per its html entity)

You can access the converter here: https://neuralfirings.github.io/jianzipu/

You type in the string (e.g., 3ks(7)), and then copy/paste the compiled characters.

You can also use the unicodes themselves, but this might get a bit unweildy.

Font Mechanics

This is the part where we go into the nitty gritty of how this font works, and how you can contribute in this project.

There are three main components to the font.

1. Character component graphics SVGs

These are the raw graphics (SVGs) that make up individual components in a JianZiPu character. These are stored in the /components folder. I use /font/JianZiPuComponents.sketch to organize my workspace and generate SVGf files in bulk.

2. Character map (charMap) JSON

This represents a "map" of how various components can be laid out in the character. The map is a JSON object with different areas. Each area has:

  • x: x coordinate of where the area starts relative to the top/left corner of the character
  • y: y coordinate of where the area starts relative to the top/left corner of the character
  • w: the width of the area
  • h: the height of the area
  • components: an array of components that can go into the area. Each component is an object with...
    • key: this represents what the compiler looks up. For example, the key 1 represents a component representing 1. The key k represents a gou component.
    • filename: this is the filename (SVG) for the component
    • unicode: this is the unicode to assign to the component
    • width: this is the width of the component. Most components have 0 as width, so the componenets can layer and stack on top of one another.
    • scale (optional): this is how we want to scale the component to fit its area. By default, it will scale horizontally and vertically to fit the area. There's also the option of using lockRatio so the component's ratio remains the same.

This map is present in /dist/jianzipu.js and /font/fontForgeScript.py.

3. Character rules (charRules) JSON

This map represents the rules used to compile the font from shorthand. It's a series of RegEx expressions which matches a particular string (e.g., if a hui position exists), and assigns which areas to the matching string.

The compiler then executes the areas in order. For example { regex: /[0-9]/, area: 'strFull'} is the first rule, which looks for the existance of numbers to assign it to the strFull area. Later rules will assign any numbers as areas specific to huis (if parentheses exists) or smaller areas in the component if things like left hand keys exists.

Font Compiling Instructions

These are the steps I use.

  1. Edit components
    • Open /font/JianZiPuComponents.sketch: select all / export as SVG (transparent background)
  2. Modify charMap variable in the /font/fontForgeScript.py file and the /dist/jianzipu.js file.
    • Make sure unicodes are unique and something in the 58000 range
    • To do this in Sublime (with Text Pastry plugin): highlight "unicode": > Ctrl+Cmd+G to select all > Scroll over to the unicodes and replace with > Package: Text Pastry Command Line, \i(58000,1)
  3. Modify charRules variable in the /dist/jianzipu.js file if rules need to be modified. Get comfy with RegEx.
  4. Create the font
    • Open JianZiPu.template.sfd, save as new version (ex: JianZiPu.v10.sfd) (also update the font version Edit > Font Info)
    • Modify /font/fontForgeScript.py so that it's pointing to the right directories for SVGs, and the right FontForge file
    • Open Python console (Ctrl + .) > copy/paste in fontForgeScript.py > run
    • Generate Font > select Open Type, save as .otf file (make sure Options > Open Type is checked)

Example of Shorthand

梧叶舞秋风

Here are the first few lines of my favorite Guqin piece to play, 梧叶舞秋风.

3fk(7) 4k 6vu(7) 3sk(9) 6vk(7) f(7)U7,6 5k 6vu(7) 3fk(7) 7vu(7) 6u 3s(9)k  
6vu(7) 3fk(7) 4k 5juv(7) 3fk(7) 5vu(7) 5juf(7) 3kf(7) 5vu(7) 4u 1kd(9)
4vk(7) 6vu(7) 3sk(9) 6vu(7) 4,3Uv(7) 4,3Uv(7) 2fk(7) 4vu(7) 3k 4sk(7.6)
7juv(6.2) \7jv(7) \7u sc(7.6) 6us(10.9) 
6V(7) 4kf(7) 5uv(7) 4uv(7.6) 2fk(7.6) \3v(7.9)k 4vk(7.6) 5u? sc(8.5) 3k(0) 5v(8.5)u 
4v(9)k 5v(8.5)u 4uv(9) sc(10) 3sk(10.8) 4vu(10) 2kf(10)? 3sk(10.8)

This generates

To Do

Should probably move this to use the Issues tracker in Github.

  • slides in cuo
  • Shuang1 Tan3 (in the Leaves)
  • insert random text in vertical order
  • Fix styling in the hui decimal

Credits/License

Code is licensed under The MIT License.

Font is licensed under Open Font License.

Font is adapted from the beautiful Ma Shan Zheng font.

Expressive Digital Signal Processing (DSP) package for Python

AudioLazy Development Last release PyPI status Real-Time Expressive Digital Signal Processing (DSP) Package for Python! Laziness and object representa

Danilo de Jesus da Silva Bellini 642 Dec 26, 2022
Just-Music - Spotify API Driven Music Web app, that allows to listen and control and share songs

Just Music... Just Music Is A Web APP That Allows Users To Play Song Using Spoti

Ayush Mishra 3 May 01, 2022
Omniscient Mozart, being able to transcribe everything in the music, including vocal, drum, chord, beat, instruments, and more.

OMNIZART Omnizart is a Python library that aims for democratizing automatic music transcription. Given polyphonic music, it is able to transcribe pitc

MCTLab 1.3k Jan 08, 2023
DCL - An easy to use diacritic library used for diacritic and accent manipulation.

Diacritics Library This library is used for adding, and removing diacritics from strings. Getting started Start by importing the module: import dcl DC

Kreus Amredes 6 Jun 03, 2022
Deep learning transformer model that generates unique music sequences.

music-ai Deep learning transformer model that generates unique music sequences. Abstract In 2017, a new state-of-the-art was published for natural lan

xacer 6 Nov 19, 2022
Improved Python UI to convert Youtube URL to .mp3 file.

YT-MP3 Improved Python UI to convert Youtube URL to .mp3 file. How to use? Just run python3 main.py Enter the URL of the video Enter the PATH of where

8 Jun 19, 2022
Okaeri-Music is a telegram music bot project, allow you to play music on voice chat group telegram.

Okaeri-Music is a telegram bot project that's allow you to play music on telegram voice chat group

Wahyusaputra 1 Dec 22, 2021
Neural building blocks for speaker diarization: speech activity detection, speaker change detection, overlapped speech detection, speaker embedding

⚠️ Checkout develop branch to see what is coming in pyannote.audio 2.0: a much smaller and cleaner codebase Python-first API (the good old pyannote-au

pyannote 2.1k Dec 31, 2022
A GUI-based audio player with support for a large variety of formats

Miza-Player A GUI-based audio player with support for a large variety of formats, able to play from web-hosted media platforms such as YouTube, includ

Thomas Xin 3 Dec 14, 2022
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 11.3k Dec 31, 2022
A voice assistant which can be used to interact with your computer and controls your pc operations

Introduction 👨‍💻 It is a voice assistant which can be used to interact with your computer and also you have been seeing it in Iron man movies, but t

Sujith 84 Dec 22, 2022
convert-to-opus-cli is a Python CLI program for converting audio files to opus audio format.

convert-to-opus-cli convert-to-opus-cli is a Python CLI program for converting audio files to opus audio format. Installation Must have installed ffmp

4 Dec 21, 2022
Mentos Music Bot With Python

Mentos Music Bot For Any Query Join Our Support Group 👥 Special Thanks - @OfficialYukki Hey Welcome To Here 💫 💫 You Can Make Your Own Music Bot Fo

Cyber Toxic 13 Oct 21, 2022
Scalable audio processing framework written in Python with a RESTful API

TimeSide : scalable audio processing framework and server written in Python TimeSide is a python framework enabling low and high level audio analysis,

Parisson 340 Jan 04, 2023
This is an AI that runs in the terminal. It is a voice assistant that can do common activities and can also help in your coding doubts like

This is an AI that runs in the terminal. It is a voice assistant that can do common activities and can also help in your coding doubts like

OneBit 1 Nov 05, 2021
Enhanced Audio Player for Discord

Discodo is an enhanced audio player for discord

Mary 42 Oct 05, 2022
A Youtube audio player for your terminal

AudioLine A lightweight Youtube audio player for your terminal Explore the docs » View Demo · Report Bug · Request Feature · Send a Pull Request About

Haseeb Khalid 26 Jan 04, 2023
🎵 A music bot for discord servers!

music bot A music bot for Discord Servers Features Play songs in your discord server Get the lyrics without going on a web explorer Commands Command P

1 Jul 25, 2022
Music Streaming Platform based on full implementation of DBSM

Symphony Music Streaming Platform based on full implementation of DBSM List of Commands Insert User (INSERT) Function to implement input in USER Get a

Parth Maradia 1 Nov 12, 2021
Music player and music library manager for Linux, Windows, and macOS

Ex Falso / Quod Libet - A Music Library / Editor / Player Quod Libet is a music management program. It provides several different ways to view your au

Quod Libet 1.2k Jan 07, 2023