Giter Club home page Giter Club logo

zynthian-ui's Introduction

Zynthian User Interface

Zynthian is an Open Synth Platform based in Raspberry Pi, Linux (Raspbian) and Free Software Synthesizers (mostly).

The ZynthianOS SD-image includes all the software you need for building a ZynthianBox, including a good amount of sound libraries and presets. This repository contains the software for the Engine Manager & User Interface.

Image of Zynthian Box Design

The list of supported synth engines is quite long and includes, among others:

Image of Zynthian Software Architecture

A Zynthian Box is a hardware device that runs the zynthian's software stack. Although it's not a closed hardware specification, there is a (more or less) cannonical recomendation:

  • Raspberry Pi 3/4
  • Supported Soundcard (ZynADAC, HifiBerry, etc.)
  • Spported Display (Zynscreen, PiScreen, PiTFT, Waveshare, HDMI, etc.)
  • Zynthian controllers (4 rotary encoders + switches)
  • GPIO expander (MCP23017) => Highly recommended. You could need it because the RBPi GPIOs are busy
  • MIDI IN/THRU/OUT ports => It uses RBPi's UART (optional)

Image of Zynthian Hardware Architecture

You can learn more about the Zynthian Project in any of our sites:

You can buy official kits in the zynthian shop:

zynthian-ui's People

Contributors

bobamstadt avatar dcoredump avatar gitter-badger avatar hammyhavoc avatar hippich avatar jblinkenlights avatar jofemodo avatar jonnie-cache avatar josephfh avatar jwoillez avatar jypma avatar lguyome45 avatar mheidt avatar oscaracena avatar polluxsynth avatar riban-bw avatar samriccijr avatar schpion avatar smiths73v3 avatar steveb avatar vbretsch 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  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  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  avatar  avatar

zynthian-ui's Issues

Error in MIDI config when "custom" is selected for "Master Change Type" ...

@mheidt reports:

File “/zynthian/zynthian-ui/zyngui/zynthian_gui_config.py”, line 248, in set_midi_config
master_midi_bank_change_down_ccnum=int(master_midi_bank_change_down[2:4],16)
ValueError: invalid literal for int() with base 16: ‘’

The error is reproducible.
When you select Master change type to custom and leave the change up and down empty.

Feature request: Test Midi input

The admin screen has a feature to test midi which plays a midi file. It would be good to have a feature to test that midi input is working. Then it would be useful when connecting up keyboards & control surfaces.

It could identify usb midi devices with aconnect -i then show midi messages with aseqdump -p

It might be tricky to handle multiple interfaces, but it would make life easier :-)

Implement Pure Data Zyngine

Install PD in Zynthian and enable a2jmidid router:

apt-get update
apt-get -y install puredata
#apt-get -y install python3-yaml
pip3 install oyaml
systemctl enable a2jmidid
systemctl start a2jmidid

Launching a PD patch in Zynthian

cd /zynthian/zynthian-my-data/puredata/generative_relaxing

GUI

pd -jack -rt -alsamidi -mididev 1 ./main.pd

No-GUI

pd -nogui -jack -rt -alsamidi -mididev 1 ./main.pd

Zynthian Patch Integration File (zpif)

  • Engine => zpif files can allow integration of several sound engines: pd, csound, supercollider, ...
  • Main file => defaults to main.pd
  • Controller Mapping => list of (name, CC)
  • Other??

If not zpif file:

  • try to detect the engine by the file ext.
  • try to use some default (main.pd, index.pd, etc.) as main file name
  • parse ctlin (CC) from patch source code: grep ctlin *.pd

Snapshots doesn't work with MOD-UI engine

Snapshots are not correctly loaded with MOD-UI engine. The problem is related with the asynchronous nature of MOD-UI engine. The snapshot load process should wait for the pedalbaord loading is finished before trying to set the preset and controller values.

Route audio from standalone engines to MOD-UI, allowing to use it as FX processsor

Route audio from standalone engines to MOD-UI, allowing to use it as FX processsor.

  • mod-monitor can be used as an audio proxy for that
  • MOD-UI should be modified to add monitor audio inputs in the canvas.
  • Zynthian UI's layer options menu will allow to route/unroute any synth engine to MOD-UI, using mod-monitor or system output.
  • Snaphosts will save the monitor status for every active engine
  • When an engine is destroyed (no more layers using it), the monitor status will be reseted
  • Autoconnector should be modified to use and manage the monitored_engines list

Zynaddsubfx xmz parameter format

Hi, what about integrating ZASFX xmz parameter format ? xmz combines more layers and can manage complex patches in just one recall...

or maybe could be imported and "transformed" in zynthian patch, (assuming zynthian loads only one instance of ZASFX even for several layers) if wanting a totally ZASFX based patch, obiously... ;) _(ehm...This one is just a brainstorming garbage.. don't care about it __)

Pianoteq: Improve preset loading speed by using MIDI-Mappings

Improve preset loading speed by using MIDI-Mappings:

  • Analyze & understand Pianoteq MIDI Mappings file format.
  • Generate "Program Change" MIDI Mappings for every preset, splitting in several MIDI Mappings files is needed (only 128 PC!).
  • Integrate with Pianoteq Zynthian engine.

Problem using jalv on desktop

Hello,

I am using Zynthian on Ubuntu 16.04. I pulled the last changes implementing jalv (which I compiled from zynthian branch), but I came up with a strange error upon adding a new layer ERROR:root:Can't exec engine commandoo: \info_controls => an integer is required (got type NoneType). The stack trace, once enabled, gives more details:

Traceback (most recent call last):
  File "/home/path/to/zynthian/zynthian-ui/zyngine/zynthian_engine_jalv.py", line 205, in proc_cmd
    self.proc.sendline(cmd)
  File "/usr/lib/python3/dist-packages/pexpect/pty_spawn.py", line 524, in sendline
    n = self.send(s)
  File "/usr/lib/python3/dist-packages/pexpect/pty_spawn.py", line 509, in send
    time.sleep(self.delaybeforesend)
TypeError: an integer is required (got type NoneType)

There is an easy fix, either disabling line 181 in zynthian_engine_jalv.py, i.e. self.proc.delaybeforesend = None to keep default value, or setting it explicitly to 0 if the goal is to disable that. I don't know what are the side effects, if any, on my system everything seems to be fine with both solution, and I can finally enjoy my preferred synths with a simple interface that I can pilot with my midi keyboard with some more OSC-based hacks.

If this is of interest, I can give more details about my system and the versions of the various libs/soft installed.

Thanks a lot for this piece of software!

Pianoteq User Presets not as tuple

in get_user_presets there is

user_presets.append((preset_path,None,preset_title,None))

means, it is a tupel

but the preset list itself contains mainly arrays, which means that in
generate_presets_midimapping you get this

INFO:root:('My Presets/Steinway D Prelude (444)', None, 'MY/Prelude (444)', None)
DEBUG:root:None
ERROR:root:'tuple' object does not support item assignment
INFO:root:['Steinway D Prelude', None, 'Prelude', None]

We should fix this, when we have the new pianoteq api

File /etc/dbus-1/system-local.conf resets on update.

When a software update is run, the file /etc/dbus-1/system-local.conf is returned to a default state, but under certain USB input situations the default alsa device is NOT 0 but 1 (for instance Behringer UCA-222) where an entry in the file should be

# replace the line
allow own=“org.freedesktop.ReserveDevice1.Audio0”
 # with
allow own=“org.freedesktop.ReserveDevice1.Audio1”

thus the Zynth will not boot ( fails on jackd)

Could we add another magic flag for this in webconf and all stations in between so that the value persists across updates?

Improve Layer Audio-Routing

Allowing to connect engine's audio-outputs to any available audio-input, including "system", "mod-monitor", etc.

UI stucks after several program change from sequencer

Hi, as described to jose on zynthian forum, i experienced a UI freeze (or unresponsive) if there are several program changes messages over a multichannel snapshot.
Tried with 3 or 4 channels only.
This happens not immediately, but after a bunch of times. not always the same time. a bit difficult to reproduce with precision.. The fact is Zynthian continues to respond to midi messages from sequencer, but everything on UI is stuck. (hardware encoders included).
Now i'm trying to figure out if it's a fault of one of engines, (i used fluidsynth together with zynaddsubfx) or even sending CC changes makes the same freeze.

At this moment i'm avoiding to use setBFree (not yet midi channel separable) or MOD UI, which needs a separate setup with multichannel, built from web interface, and not in zynthian itself

Sound stops with program change (with midi rule: no PG)

When playing Linux Sampler and sending a program change from my midi keyboard, the sound would stop even though no progam change actually happened.
I am using this Midi filter rule: IGNORE CH#0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 PG

When I go to the main menue afterwards, remove all layers and try to get back to the sound Zynthian crashes in the midi channel selection screen.

INFO:root:Starting Engine LinuxSampler INFO:root:Connecting with LinuxSampler Server… ERROR:root:FAILED lscp_send_single(CREATE AUDIO_OUTPUT_DEVICE JACK ACTIVE=‘true’ CHANNELS=‘2’ NAME=‘LinuxSampler’ SAMPLERATE=‘44100’ ): timed out ERROR:root:FAILED lscp_send_single(SET AUDIO_OUTPUT_CHANNEL_PARAMETER None 0 NAME=‘Channel 1’ ): timed out ERROR:root:0 (ERR) DEBUG:root:ZCTRL ‘Channel’: 0 (0 -> 16), None, None INFO:root:Short Switch 3 WARNING:root:zynthian_gui.zyncoder_read() => 0 (ERR)

I can select other sound engines than Linux sampler still, but there is no sound coming out.

This is how it looks, when I was in another engine before and then went to linux sampler:
INFO:root:Getting Preset List for Dual DEBUG:root:PRESET LIST => [(’/zynthian/zynthian-ui/data/zynbanks/Dual/0001-Layered1.xiz’, [12, 0, 0], ‘Layered1’, ‘xiz’), (’/zynthian/zynthian-ui/data/zynbanks/Dual/0002-Layered2.xiz’, [12, 0, 1], ‘Layered2’, ‘xiz’), (’/zynthian/zynthian-ui/data/zynbanks/Dual/0005-Organ and Saw.xiz’, [12, 0, 4], ‘Organ and Saw’, ‘xiz’), (’/zynthian/zynthian-ui/data/zynbanks/Dual/0007-Organ Choir Pad1.xiz’, [12, 0, 6], ‘Organ Choir Pad1’, ‘xiz’), (’/zynthian/zynthian-ui/data/zynbanks/Dual/0008-Organ Choir Pad2.xiz’, [12, 0, 7], ‘Organ Choir Pad2’, ‘xiz’), (’/zynthian/zynthian-ui/data/zynbanks/Dual/0033-Rhodes Strings1.xiz’, [12, 0, 32], ‘Rhodes Strings1’, ‘xiz’), (’/zynthian/zynthian-ui/data/zynbanks/Dual/0034-Rhodes Strings2.xiz’, [12, 0, 33], ‘Rhodes Strings2’, ‘xiz’), (’/zynthian/zynthian-ui/data/zynbanks/Dual/0035-Rhodes Strings3.xiz’, [12, 0, 34], ‘Rhodes Strings3’, ‘xiz’), (’/zynthian/zynthian-ui/data/zynbanks/Dual/0036-Rhodes Strings4.xiz’, [12, 0, 35], ‘Rhodes Strings4’, ‘xiz’), (’/zynthian/zynthian-ui/data/zynbanks/Dual/0065-Dream of the Saw.xiz’, [12, 0, 64], ‘Dream of the Saw’, ‘xiz’)] DEBUG:root:ZCTRL ‘Preset’: 4 (0 -> 10), None, None INFO:root:Short Switch 1 DEBUG:root:BACK TO SCREEN => bank DEBUG:root:BANK INDEX => 12 DEBUG:root:BANK LIST => [(’/zynthian/zynthian-ui/my-data/zynbanks/XLZ’, 0, ‘MY/XLZ’, ‘MY’), (’/zynthian/zynthian-ui/my-data/zynbanks/XMZ’, 1, ‘MY/XMZ’, ‘MY’), (’/zynthian/zynthian-ui/my-data/zynbanks/XSZ’, 2, ‘MY/XSZ’, ‘MY’), (’/zynthian/zynthian-ui/data/zynbanks/Arpeggios’, 3, ‘Arpeggios’, ‘’), (’/zynthian/zynthian-ui/data/zynbanks/Bass’, 4, ‘Bass’, '’), (’/zynthian/zynthian-ui/data/zynbanks/Brass’, 5, ‘Brass’, ‘’), (’/zynthian/zynthian-ui/data/zynbanks/Choir and Voice’, 6, ‘Choir and Voice’, '’), (’/zynthian/zynthian-ui/data/zynbanks/Collection’, 7, ‘Collection’, ‘’), (’/zynthian/zynthian-ui/data/zynbanks/Companion’, 8, ‘Companion’, '’), (’/zynthian/zynthian-ui/data/zynbanks/Cormi_Noise’, 9, ‘Cormi Noise’, ‘’), (’/zynthian/zynthian-ui/data/zynbanks/Cormi_Sound’, 10, ‘Cormi Sound’, '’), (’/zynthian/zynthian-ui/data/zynbanks/Drums’, 11, ‘Drums’, ‘’), (’/zynthian/zynthian-ui/data/zynbanks/Dual’, 12, ‘Dual’, '’), (’/zynthian/zynthian-ui/data/zynbanks/Fantasy’, 13, ‘Fantasy’, ‘’), (’/zynthian/zynthian-ui/data/zynbanks/Guitar’, 14, ‘Guitar’, '’), (’/zynthian/zynthian-ui/data/zynbanks/Laba170bank’, 15, ‘Laba170bank’, ‘’), (’/zynthian/zynthian-ui/data/zynbanks/Misc’, 16, ‘Misc’, '’), (’/zynthian/zynthian-ui/data/zynbanks/Noises’, 17, ‘Noises’, ‘’), (’/zynthian/zynthian-ui/data/zynbanks/Organ’, 18, ‘Organ’, '’), (’/zynthian/zynthian-ui/data/zynbanks/Pads’, 19, ‘Pads’, ‘’), (’/zynthian/zynthian-ui/data/zynbanks/Plucked’, 20, ‘Plucked’, '’), (’/zynthian/zynthian-ui/data/zynbanks/Reed and Wind’, 21, ‘Reed and Wind’, ‘’), (’/zynthian/zynthian-ui/data/zynbanks/Rhodes’, 22, ‘Rhodes’, '’), (’/zynthian/zynthian-ui/data/zynbanks/Splitted’, 23, ‘Splitted’, ‘’), (’/zynthian/zynthian-ui/data/zynbanks/Strings’, 24, ‘Strings’, '’), (’/zynthian/zynthian-ui/data/zynbanks/Synth’, 25, ‘Synth’, ‘’), (’/zynthian/zynthian-ui/data/zynbanks/SynthPiano’, 26, ‘SynthPiano’, '’), (’/zynthian/zynthian-ui/data/zynbanks/net-wisdom’, 27, ‘net-wisdom’, ‘’), (’/zynthian/zynthian-ui/data/zynbanks/olivers-100’, 28, ‘olivers-100’, '’), (’/zynthian/zynthian-ui/data/zynbanks/olivers-other’, 29, ‘olivers-other’, ‘’), (’/zynthian/zynthian-ui/data/zynbanks/the_mysterious_bank’, 30, ‘the mysterious bank’, '’), (’/zynthian/zynthian-ui/data/zynbanks/the_mysterious_bank_2’, 31, ‘the mysterious bank 2’, ‘’), (’/zynthian/zynthian-ui/data/zynbanks/the_mysterious_bank_3’, 32, ‘the mysterious bank 3’, '’), (’/zynthian/zynthian-ui/data/zynbanks/the_mysterious_bank_4’, 33, ‘the mysterious bank 4’, ‘_’)] DEBUG:root:ZCTRL ‘Bank’: 12 (0 -> 34), None, None INFO:root:Short Switch 1 DEBUG:root:BACK TO SCREEN => layer DEBUG:root:ZCTRL ‘Layer’: 0 (0 -> 5), None, None INFO:root:Short Switch 3 DEBUG:root:ZCTRL ‘Layer’: 0 (0 -> 4), None, None INFO:root:Stoping Engine ZynAddSubFX INFO:root:Short Switch 3 DEBUG:root:ZCTRL ‘Engine’: 0 (0 -> 7), None, None INFO:root:Short Switch 3 INFO:root:Starting Engine LinuxSampler INFO:root:Connecting with LinuxSampler Server… ERROR:root:FAILED lscp_send_single(CREATE AUDIO_OUTPUT_DEVICE JACK ACTIVE=‘true’ CHANNELS=‘2’ NAME=‘LinuxSampler’ SAMPLERATE=‘44100’ ): timed out ERROR:root:FAILED lscp_send_single(SET AUDIO_OUTPUT_CHANNEL_PARAMETER None 0 NAME=‘Channel 1’ ): timed out ERROR:root:FAILED lscp_send_single(SET AUDIO_OUTPUT_CHANNEL_PARAMETER None 1 NAME=‘Channel 2’ ): timed out ERROR:root:FAILED lscp_send_single(SET AUDIO_OUTPUT_CHANNEL_PARAMETER None 0 JACK_BINDINGS=‘system:playback_1’ ): timed out ERROR:root:FAILED lscp_send_single(SET AUDIO_OUTPUT_CHANNEL_PARAMETER None 1 JACK_BINDINGS=‘system:playback_2’ ): timed out ERROR:root:FAILED lscp_send_single(CREATE MIDI_INPUT_DEVICE JACK ACTIVE=‘true’ NAME=‘LinuxSampler’ PORTS=‘1’ ): timed out ERROR:root:FAILED lscp_send_single(SET VOLUME 0.45 ): timed out DEBUG:root:ZCTRL ‘Channel’: 0 (0 -> 16), None, None INFO:root:Short Switch 3 WARNING:root:zynthian_gui.zyncoder_read() => 0 (ERR)

LOAD/SAVE snapshot pages are not syncronized

I load snapshot 001; if switching to save, selection isn’t the same.
could occour a wrong snapshot overwriting if i edit inside a snapshot and going quickly expect to update the last one, switching to save page

ZynthUI hangs after removing layer

@mheidt reports this bug:

I created a new LinuxSampler Layer, but didn't select a sound.
Only the bank.
Then I went back to the Layers and tried to remove it.
Zynthian-UI hangs forever.

DEBUG:root:ZCTRL 'Bank': 0 (0 -> 15), None, None
INFO:root:Bold Switch 0
DEBUG:root:ZCTRL 'Layer': 0 (0 -> 3), None, None
INFO:root:Short Switch 3
WARNING:root:zynthian_gui.zyncoder_read() => 0 (ERR)

Panic Switch behaviour.

The Panic switch wants to:

on short press
(Press>Release within short press window)
Send Notes off.

Once you get passed the short press time and hit the long press
(Press >>>> outside of short press window)
Send Sounds (all notes all channels) off.

Otherwise you press and hold it and it’s waiting for the release . . . .and you kind of deadlock.

Pianoteq missing new Steingraeber piano

Fixed via -
Add a "Steingraeber" between Steinway B and Grotrian (to match the input order of the presets list)
renumbering the subsequent bank numbers
deleting /zynthian/zynthian-ui/my-data/pianoteq6/presets_cache.json
restart ui

MIDI over network: implement

  • "Enable/Disable MIDI-Net" from Admin, taking current status from command "systemctl qmidinet status".
  • Autoconnect:
    • qmidinet => zyncoder
    • zyncoder port 2 (net-filtered) => qmidinet

No way to run as dummy

Hey,
I want a way to run and test zynthian-ui on a raspberrypi without a sound card.
The problem is that it will not start without jackd running, and there is no "dummy" option in the audio settings.

I tried setting jackd to:

-P 70 -t 2000 -s -d dummy -r 44100 -p 256 -n 2 -X raw

But I get:

root@zynthian:~# systemctl status zynthian.service -l 
● zynthian.service - Zynthian User Interface
   Loaded: loaded (/etc/systemd/system/zynthian.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2018-04-09 11:24:20 UTC; 29s ago
 Main PID: 451 (startx)
   CGroup: /system.slice/zynthian.service
           ├─451 /bin/sh /usr/bin/startx ./zynthian.sh -- :0 vt3
           ├─478 xinit ./zynthian.sh -- /usr/bin/X :0 vt3 -auth /tmp/serverauth.8J3FhTjDMN
           ├─479 /usr/lib/xorg/Xorg :0 vt3 -auth /tmp/serverauth.8J3FhTjDMN
           ├─499 /bin/bash ./zynthian.sh
           └─717 /usr/bin/python3 ./zynthian_gui.py

Apr 09 11:24:47 zynthian startx[451]: ALSA: Cannot open PCM device alsa_pcm for playback. Falling back to capture-only mode
Apr 09 11:24:47 zynthian startx[451]: JackTemporaryException : now quits...
Apr 09 11:24:47 zynthian startx[451]: Cannot initialize driver
Apr 09 11:24:47 zynthian startx[451]: JackServer::Open failed with -1
Apr 09 11:24:47 zynthian startx[451]: Failed to open server
Apr 09 11:24:48 zynthian startx[451]: Cannot connect to server socket err = No such file or directory
Apr 09 11:24:48 zynthian startx[451]: Cannot connect to server request channel
Apr 09 11:24:49 zynthian startx[451]: ERROR:zynautoconnect.zynthian_autoconnect:ERROR Autoconnecting: 'NoneType' object has no att
Apr 09 11:24:49 zynthian startx[451]: Cannot connect to server socket err = No such file or directory
Apr 09 11:24:49 zynthian startx[451]: Cannot connect to server request channel

Using net I can get a GUI running, but can't start stuff like pianoteq:

jackd -r -p 8 -d net -C 2 -P 0

But then I get:

Cannot write socket fd = 12 err = Broken pipe
CheckRes error
Could not write notification
ClientNotify fails name = Pianoteq61 notification = 18 val1 = 1 val2 = 0
Cannot write socket fd = 8 err = Broken pipe
CheckRes error

zynaddsubfx and Frames per period

I am using Audioinjector Ultra and changed sample rate from 48000 down to 32000 because pianoteq wasn't performing well.
But at 32000 Pianoteq suggests to change the frames per period (-p) from 256 to 192 or 288.
When I change that setting, zynaddsubfx doesn't start up because it needs the same frames per period.
I guess, it is hardcoded somewhere?
I ended up using a sample rate of 24000 and 256 again.
Hence a low prio bug

Possible Bug: Pianoteq Engine - Order of Execution

I've been trying to track down what I think is still a bug in the creation of the menu item for Pianoteq. It's tough because I still don't have a working ability to step through the code to see what happens when. I've just used logging to see if I can figure it out, but I feel like I'm stuck or at least need some direction. Hopefully someone can help point me in the right direction.

I believe there is a problem in the order of execution. In zynthian_gui_engine.py, line 61 is looking for the PIANOTEQ envs. But, I think that zynthian_engine_pianoteq.py lines 136 and 137 are set up before they are actually initialized by get_pianoteq_binary_info():.

Further, I think that line 60 in zynthian_gui_engine.py should be calling get_pianoteq_binary_info(): instead of check_pianoteq_binary().

If I'm understanding the code correctly, what happens is that zynthian_engine_pianoteq.py lines 136 and 137 are executed. But, PIANOTEQ_STAGE is initialized with a 1 even when it should be 0. I think that's because get_pianoteq_binary_info(): hasn't been called yet. So, the result is that the menu will always say "STAGE" on it when it shouldn't.

If I'm correct, I think I might have a fix for this. But hoping that someone else can at least validate that what I'm seeing is correct before I commit and submit a pull request. If that's the case, please assign me to this bug and I will verify my code a bit more, commit, and issue a pull request.

Adding mouse wheel control to modify parameter and list box items

Many mice have scroll wheels.

this provides a much more intuitive interface to parameter values than the present select up/down motion.

The wheel code also allow selection before press of menu items which at present require accurate selection of the item using mouse positioning and then press which can often lead to selection of the wrong option. The mouse wheel would move the highlighted selection to allow a more certain selection

Webconf fails because of missing file in my-data

That really made me headache. I could not start webconf with a new self-soldered zynthian box.
Till I found this:

Traceback (most recent call last): File "/usr/local/lib/python3.4/dist-packages/tornado/web.py", line 1323, in _execute result = self.prepare() File "/zynthian/zynthian-webconf/lib/zynthian_config_handler.py", line 46, in prepare zynconf.load_midi_config() File "/zynthian/zynthian-ui/zynconf/zynthian_config.py", line 94, in load_midi_config return load_config(set_env, fpath) File "/zynthian/zynthian-ui/zynconf/zynthian_config.py", line 56, in load_config with open(fpath) as f: FileNotFoundError: [Errno 2] No such file or directory: '/zynthian/zynthian-ui/my-data/midi-profiles/default.sh' ERROR:tornado.access:500 GET / (192.168.1.101) 44.13ms INFO:tornado.access:200 GET /favicon.ico (192.168.1.101) 16.82ms ^CTraceback (most recent call last): File "./zynthian_webconf.py", line 147, in <module> tornado.ioloop.IOLoop.current().start()

/midi-profiles/default.sh
is not in /zynthian/zynthian-ui/my-data/
it´s in /zynthian/zynthian-my-data/

Snapshot with FS engine Save breaks JSON

When a snapshot contains a FS engine, the save breaks the JSON file for the display in the webconf.

The "preset_info" contains a return character (backslash n)

A strip in zynthian_engine_fluidsynth fixes it

Do you really want to save snapshot

Add a "Do you really want to save snapshot" screen before saving a snapshot.

I would like to do it myself. Seems to be an easy task to learn about the architecture

Pressing of Mouse in Zynth Logo on Layer List Opens Load Snapshot

It would be useful to allow mouse users ( there are some) easy access to the Snapshot infrastructure from menus that have the zynthian logo displayed.by clicking in the zynthian logo.
This aligns from an interface perspective with the press on the Ls encoder.

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.