Giter VIP home page Giter VIP logo

hexiano's Introduction

Hexiano

Hexiano logo   Example of Hexiano running

Description

Hexiano is an Open-source isomorphic musical keyboard, and technically a sample-based synthesizer.

Isomorphic means that all intervals, chords, and scales have identical patterns, regardless of the key in which one plays.

Isomorphic keyboards are an old concept, and some layouts are more than a century old (Janko, Wicki-Hayden).

Hexiano not only aims to deliver the isomorphic keyboard concept to the Android platform, but it is also committed to give you ergonomic tools to get the most out of these amazing keyboards, with all the options you need to customize your own Hexiano experience.

See http://www.altkeyboards.com/ for more information about these instruments.

Build and install

Via commandline

$ cd ~/src/hexiano/Hexiano

$ # Only needed first time:
$ android list targets # I build against API level 10.
$ android update project --name Hexiano --target 1 --path ./
$ git checkout build.xml # Update, not replace. Bad android update!

$ # Everytime:
$ ant filter-package && ant debug && adb -d install -r build/bin/Hexiano-debug.apk

Via Eclipse ADT

In Eclipse ADT, select File > Import and then select Android > Existing Android Code Into Workspace. Then select the hexiano/Hexiano directory (where src is contained), and import that. It should work right away. As an alternative: use the build.gradle file.

Via Android Studio

Not tested, but you can try to use the build.gradle file to import the project.

Project architecture

To quick-start your contributions, here is a short description of how the project is architectured, by somewhat chronological order of calling in the program flow:

  • Play.java is the entry point of the app, launching the board setup (HexKeyboard) and managing the menu call and what happens on exiting. Since multi-instruments was implemented, it also manages the sound manager (SoundPool) as a singleton shared all across the app, and the array of Instrument (that is then used by HexKeyboard and HexKey).

  • HexKeyboard.java is the main program, where the keyboard is setup. It defines the screen dimensions and the number of rows/columns of keys, it creates the keys (HexKey, SonomeKey, etc.), draws them and manages the touch event (when you press on the screen), and redirect these events to the correct key. This is also where most of the SharedPreferences are managed (loaded in static variables used across the app).

  • HexKey.java is the prototype of each keys you see on the screen. It is an abstract class that must be implemented by other keys. It manages the play() and stop() events for each keys (and calls the sound in Instrument), draws the color, defines the disposition and coordinates (eg: vertical or horizontal orientation of hexagons), and a few other stuffs. This is probably the most important part of the app with HexKeyboard.java

    • SonomeKey.java defines one sonome key. It is the first key implemented in the system, thus you can clearly see that it inspired the others types of keys.
    • JankoKey.java defines the janko keys.
    • JammerKey.java defines the jammer keys.
    • ModifierKey.java is an abstract class which defines modifier keys (modifying the functionnalities or sending CC messages instead of producing a Note sound).
    • SustainKey.java defines the sustain modifier key. It can be used as an example for other modifier keys, which are keys that does not produce sound but modify the behaviour of other keys.
  • Note.java manages the name of the keys (with octave) and correspondance between MIDI number and the note in different paradigms (eg: English, DoReMi, Deutsch, etc.).

  • CC.java manages the CC messages number correspondance with their name and print the label on ModifierKeys.

  • Instrument.java manages the sound, it plays the notes you hear when you press a key. It also extrapolates missing notes sounds by modulating existing sounds playback rate (=frequency), and the velocity effect. It is an abstract class that must be implemented by other instruments.

    • Piano.java is the standard (and only for now) piano instrument. It simply plays the ogg files in res/raw/
    • GenericInstrument.java is a generic instrument which provides a neat facility to automatically discover and load external instruments by using soundbanks from your SD Card.
  • Point.java simply defines a geometric point. It is primarily used to define the center of each HexKey.

  • Prefer.java extends the Menu by adding dynamically generated submenus (eg: loading external instruments via GenericInstrument, generate multi-instruments and multi-panels configs, etc.).

  • AboutDialog.java manage the AboutDialog with UI parts that couldn't fit in XML.

Feedback

If you have found any bug or have a suggestion for an amazing new feature you would like to see in Hexiano, feel free to post a request in the github issue tracker:

https://github.com/lrq3000/hexiano/issues

License

Licensed under the terms of the General Public License v3 (GPLv3).

Copyleft @ 2013 by Stephen Larroque, Copyright © 2012 by James Haigh, Copyright © 2011, 2012 by David Randolph. Hexiano™ and the Hexiano logo are trademarks of James Haigh.

Latest project at: https://github.com/lrq3000/hexiano

Original project by James Haigh at: https://gitorious.org/hexiano

From the sourcecode of the opensourced version (under GPLv3) of Isokeys by David Randolph: http://isokeys.sourceforge.net/

Piano instrument uses sounds from http://zenvoid.org/audio.html under CC BY.

hexiano's People

Contributors

lrq3000 avatar rndlph avatar

Stargazers

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

Watchers

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

hexiano's Issues

New Name and Logo

As discussed in Issue #1, "Hexiano" and the Hexiano Logo are trademarked. To prevent any issues with IP infringement when publishing, the program needs a new name and logo (for the second time).

Let's discuss proposals for names and Logos here in this issue.

Update README to explain that this is actually a fork

Hi @lrq3000

First of all, THANKS a lot for this ! This fork solved for me the problem of repeating keys that doesn't works.

It took me some time to understand that this project is actually a fork of the original Hexiano (I think I'm not wrong).

As releases are named "Hexiano Extended", why not updating README.md with this name ? And explain that this isn't deployed on f-droid for now for logo and name copyrights problems, with links to the logo issue ?

Thanks a lot for this ! I'm happy to play open-source Janko keyboard again 🤩

Playing a key a second time does not work

For me now, playing a key two times in a row does not give a sound at the second (and all following) strokes. If I play a different key, the "locked" key works again, but only once.
Hexiano worked fine for me, but after some update I cannot pin down this occured. Reinstall did not change the behaviour.

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.