Giter VIP home page Giter VIP logo

terpstrakeyboard's Introduction

terpstrakeyboard's People

Contributors

bruce965 avatar wcgbg avatar whatmusicreallyis avatar yashton avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

terpstrakeyboard's Issues

keyboard is not generated on iPad

When I load the keyboard on an iPad it doesn't generate the keyboard, either in Safari or on Firefox.

It does show the settings, but changing a setting doesn't trigger the keyboard to generate.

Setting to hide non-QWERTY mapped notes

While exploring QWERTY layouts I added a check in the hex drawing to bail if the hex coordinate didn't have a corresponding keybinding. This made it much easier to orient with what was on the physical keyboard. Add a setting to toggle this behavior.

Generate Scala file

When switching to the Scala import, generate based off the current settings. Include the value, label, and color for the current steps.

Scale octave is always white

When rendering against a white background, a key will show the label as black, but the octave is always white, rendering it invisible. Match the behavior of the label.

Unit tests for rendering code

The original code in keys.js for event handlers and canvas drawing was mostly untouched in the big settings/MIDI refactor, and doesn't have any unit tests.

Add transpose/panning

wcgbg#3 (comment)

One extreme useful feature would be the ability to pan the playing field, so that 1/1 can freely move in any direction (as opposed to being stuck in the center).
Ideally, panning would be visually controlled from the keyboard view. A button available under the "Back" arrow would disable the playing field and turn it into a pan anchor. Panning will be achieved by dragging the playing area from any location: with one finger on touch-screen devices, and by holding left mouse button while dragging on legacy devices.
Zooming, that is, controlling visually the "Hex Size (pixels)" setting, would be achieved from the same button but by pinching with 2 fingers on touch-screen devices, and by scrolling the mouse wheel while holding left button pressed on the others.
However, in the beginning, a horizontal+vertical double control on the Settings page (or just an url hack!) only for panning would make do. Moving units could be pixels, or hexagon units.
Programming steps:
implement panning feature
add visual control for pan & zoom

Explain in readme how to run the app

When I download the the current code and open keys.htm, I see a white screen. With Release v1.2, the menus work but there is no sound.

Please explain in the README how to run the app. The online websites work for me, but the local copy doesn't. Thanks!

Micro-tonal MIDI configuration

From wcgbg#2 (comment)

Web MIDI API: https://www.w3.org/TR/webmidi/

Ability to send real-time MIDI Tuning Standard System Exclusive messages.
A. Detailed example of multichannel MIDI mapping.

Background: use existing multichannel keyboard mapping implementation as reference.

Official support for the hardware Terpstra Keyboard includes the acclaimed physical modeling software engine Pianoteq. Their custom multichannel keyboard mapping for up to 16*128 notes implemented specifically for the Terpstra works like this:

Let's assume the simplest example with any N-tone scale and the reference frequency of 440 Hz.

Load your custom N-tone scale.
The Keymap menu has a new feature called "Extended layout for up to 16*128 notes". Tick the option "Multi-channel MIDI layout".
Play MIDI note 69 on channel 1, tone is 440 Hz. MIDI note 69+N gives 880 Hz, while 69-N 220.
Play MIDI note 69 on channel 2, tone is 880 Hz. MIDI note 69+N gives 1760 Hz, while 69-N 440.
Play MIDI note 69 on channel 16, tone is 220 Hz. MIDI note 69+N gives 440 Hz, while 69-N 110.
... and so on.

The reference frequency changes according to the scale's Interval of Equivalence (in this case 2/1) on the same MIDI note of every subsequent MIDI channel. The scale gets expanded according to its number of tones N in both directions. Other diapasons, as well as the MIDI note for scale's 1/1 can be controlled by loading an additional *.kbm mapping file.

This approach won't need pitch bending or anything fancy, just the ability to send MIDI note on/off messages across multiple MIDI channels. It will then be up to the user to load the *.scl tuning file from the WebApp in the external sound engine.
B. Send real-time MTS SysEx signals.

«MTS 3-byte single note tuning is the most accurate method.» (Scala Relay)

The MIDI Specification's "Single Note Tuning Change (real-time)" was designed for dynamic tuning.

«The MIDI Tuning Standard was ratified by the MIDI Manufacturers' Association in January 1992. Manufacturers have the option of supporting the tuning standard partially or in full.»
http://www.microtonal-synthesis.com/MIDItuning.html

For «an addition to the MIDI specification which allows the sharing of “microtunings” ... and the
switching of these tunings during real-time performance» see page 47 (pdf 79) of
The Complete MIDI 1.0 Detailed Specification v. 96.1 third edition

Load and play MIDI files in order to learn to play by watching

Please add the option to load and play MIDI files, i.e. highlight the respective keys while the notes play.

Using this feature to watch how to play any melodies will make the learning process much easier.

(Each note appears in several places on the keyboard. All those places can be lit up.)

Remove equivSteps from settings

Equivalent interval is either specified in the Scala import, or implicit from the number of scale steps. There's no reason to have a user editable value.

Edit number and order of scale steps

The only way to edit the size of the scale is to import a new Scala file. Add a button to create a new scale degree and some mechanism to reorder (up/down arrows, drag and drop)

Additional tiling of the plane

Hexagons aren't the only tilings available: squares, rectangles, parallelograms and rhombuses in the quadrilaterals Hexagons can also be stretched. This would maintain the isomorphism with maybe providing interesting options or better ergonomics.

Up and down are wrong in the settings

In the settings, the value labeled “Up/Right Facing Steps” is actually for down/right facing steps. So the resulting layout is mirrored from what it's supposed to be. The presets expect that it's for up/right facing steps, so they also have rotation wrong.

Please, fix the value labeled “Up/Right Facing Steps”, which solves vertical mirroring and wrong rotation of presets.

An image of the keyboard in 31EDO with settings visible

This shows the preset for 31EDO, which is supposed to have notes an octave apart in the same height. E to F is 3 steps, E to E♯ is 2 steps.

Add tooltips or help

In the application, add some tooltips or help of some kind.

Document the additional behavior of the parser with regards to color and label.

Basis vector preview

The current layout configuration uses "Right" and "Upper Right". This is confusing, particularly given that "Upper Right" is towards the bottom right of the screen. There are a wide variety of basis vector notations used in the literature and by different groups.

Create a new input which shows all six directions and allows each direction to be changed. Show a preview of the interval name based off the scale . Allow changing orientation from vertical (i.e. a flat side of the hexagon is parallel to the y-axis) or horizontal (i.e. a flat side of the hexagon is parallel to the x-axis). Allow rotating the orientation of the basic vector relative to the coordinate space.

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.