What is Zynthian?

IMPORTANT: Comments are closed in this post, please, use the forum.

Zynthian is an Open Synth Platform based in Raspberry Pi, some Open Software Synthesizers and more.

I’m trying to integrate all the parts in a realiable case with a nice and ergonomic User Interface, so everybody can enjoy this wonderful synthesizers in any place without having to install or configure anything.

zynthian_box_retroblack_trans2

When it’s finished, i would like to make it available for everybody, as a toolkit or as a finished product, so you can use it for Live Playing, Music Production or any kind of experimentation.

Of course, all the specifications will be freely available, so you can build your own device if you prefer 😉

The Hardware:

  • RaspBerry Pi 2
  • HifiBerry DAC+
  • AdaFruit TFT 2.8 inch
  • 4 rotary encoders + switches
  • MIDI IN connector (using RBPi UART)
  • A Hard Rock Steel Case !!!

zynthian_hardware_scheme

First, I’m using HifiBerry DAC+ and i’m really satisfied with it. The sound is clear and warm. Really HiFi.

Surprisingly, the rotary controller part was really easy. Now i ve a beatiful printed PCB circuit for this part and a really functional and stable C library/driver that interface the controllers. With the actual configuration, every GPIO pin is used, and 2 of the switches can’t be connected, so i’m working in expand it using a I2C GPIO bridge. I hope it will be ready before christmas. By now, i’m working with 2 switches and is, more or less, enough.

In the other side, the MIDI IN connector was a nightmare. Really! I’ve spent a lot of hours trying to understand what happened. Even i tryed with an oscilloscope! Finally, i’ve realized that the kernel was not setting correctly the UART frecuency. Luckly, there are very good people in the Kernel side and i get a patch in couple of days. You can read the history:

https://www.raspberrypi.org/forums/viewtopic.php?p=798086#p798086

Now i have a fully working MIDI IN connector. I’ve dessigned a nice PCB, that includes the MIDI and GPIO/I2C expander. When i finish my tests, i will send to print some units.

The TFT screen is a resistive touch screen, but i’m not using the “touch part” by now. I’ve done an initial version of UI using it, but it gots clear that rotary controller are, by far, more ergonomic, so i decided to remove the touch part. In the future, i would like to use the touch screen as a bi-dimensional controller, ala “kaos pad”.

The Software:

Zynthian is a multi-engine architecture. By now, i’ve integrated 4 engines:

  • ZynAddSubFX
  • FluidSynth
  • setBfree (Hammond B3)
  • Linuxsampler

But i intend to implement some others in the near future:

  • Dexed (DX7)
  • Pure Data
  • ???

I would like to include some sequencer/arpeggiator  features. I’m doing some promising tests with “midish”, a very interesting command line sequencer.

zynthian_software_amidi_scheme

When the project was started, Jackd was not supported by HifiBerry sound cards, so i start using only ALSA. The first three engine integrations are ALSA-based for audio and MIDI.

Recently, these problems with HifiBerry and Jackd, related to the lack of MMAP support in Raspberry Pi, has been solved. Currently is possible to enable the MMAP support (see /boot/config.txt), so i can use Jackd with HifiBerry.

So, now there is a playable integration of setBfree, a Hammond Organ Emulator that sounds really fine. It includes a decent Leslie, percussion, vibrato, overdrive, etc.  and a good collection of popular Hammond presets. And you can connect 2 keyboards + pedals! You will enjoy playing it for sure.

In the near future I would like to integrate Dexed (DX7 emulator) and many other synthesizers.

Also, I would like to migrate to a Jackd-only architecture, but by now, ALSA is giving very good results, so the migration can wait a little more 😉

UPDATE: Currently Zynthian is completely “jackified”, and include basic integration with Carla Plugin Host, that allows to use Dexed and many other plugins (LV2, DSSI, VST, LADSPA)

I think i’ve achieved an aceptable latency, posibly under 20ms, perhaps even less than 10ms (total, including USB/MIDI delays). To achieve this, I’ve recompiled the kernel with a higher frecuency (1000Hz) and i’ve removed some daemons, etc. but i’ve not applied the RT patch. I’ve to to do it.

For ZynAddSubFX i’m using 48000 Hz, 16 bit and a buffer size of 256. It works fine for me with a lot of instruments, but it collapses the CPU when using some of it. For example, “Angel Piano” is completly unplayable. I’ve speaked with McCurry about improving the performance of ZynAddSubFX, but i’s a very complex question. I’m studing it.

I need to spend some time meassuring the latency and putting some real numbers to this question but it isn’t a priority task because Zynthian Box is working fine by now. The prototype is very playable and the latency is low enough so you can’t perceive it while playing.

Also, i’ve spent some time getting the system to boot up in a reasonable time: less than 5 seconds to get the Zynthian Logo Screen and less than 20 seconds to get the Zynthian GUI. I know that i can improve this and i know the way. I’ve done some tests with Jessie and systemd, but it’s an open task.

The Zynthian User Interface:

The Zynthian GUI is writen in Python, using Tkinter. I’m a newcomer to Python, but i really like this language, so i’m learning fast 😉

The actual UI structure is:

  • Engine Selection Screen
  • MIDI Channel Selection (normaly 1, but you can configure multichannel arrangements, and use more than 1 keyboard
  • Bank Selection
  • Instrument Selecion
  • Instrument Controller (you can play with the rotary controllers)
  • OSC Browser => Work in Progress …
  • Admin Screen => Update Software from GitHub, etc.

UPDATE: Currently, there is a more detailed scheme of the User Interface Workflow.

In the beggining, i’ve used an “only MIDI” approach to communicate with Synth Engines. I’have patched ZynAddSubFX to fix/add some features i needed to improve bank & program selection by MIDI. Mark McCurry have merged this changes in the main trunk:

https://github.com/fundamental/zynaddsubfx/commit/42927b5e9f1c42405c45c36409168ff361e2f634

Actually i’m changing to a mixed MIDI/OSC approach. It’ clear that MIDI is too limited. I’m implementing OSC using liblo. I’m trying to browse the OSC path tree (parameters) from zynthian UI, so you can select any parameter and assign it to a Zynthian Rotary Controller, play with it, etc.

Also, i’ve done some work for getting the “Synth Engine Native GUI” opened in a “big” computer, using the X11 protocol. I’ve tested in the three main platforms (Windows, MacOS and Linux) with success. Now it’s a question of “easy install and config”.

There is a lot more, but i think it’s a good description by now. If you want to take a look into the code, you can access the repository in github:

https://github.com/zynthian

Software references:

Facebooktwittergoogle_plusredditmail

34 thoughts on “What is Zynthian?”

  1. I’m curious why you decided to use ZynAddSubFX & FluidSynth, instead of using TiMidity.

  2. Timidity++ is a good wave-table synthesizer. I’ve used in the past for playing piano with my MIDI keyboard. But Timidity++ project is not currently maintained. The last revision (2.13.0) is from 2004-03-28, more than 12 years ago!
    FluidSynth is a live project, but not very active. Last revision (1.1.6) is from 2012-08-16 and his website was updated in 2014. Also, it only has support for SF2 file format and there is not plans to implement other formats.
    Currently Zynthian has basic integration with Linux Sampler, that is a modern wave-table synthesizer with lots of advanced features and support for SF2, SFZ and GIG file formats. Linux Sampler is actively developed. The last revision (2.0.0) is from 2015-07-18.
    In the near future, i would like to improve Zynthian integration with Linux Sampler, and i hope it will be the “default” soundfont synthesizer in Zynthian.
    ZynAddSubFX is a completly different kind of animal, so it has not sense to compare with Timidity++, FluidSynth or Linux Sampler.

    1. Are you trying to run the SD image inside QEMU?
      I’m very interested in your experience with this …
      You need to emulate the HifiBerry or another jack-compatible audio interface.
      Also, you will need to emulate the framebuffer (i think this is easy) or adjust the X configuration in the Zynthian boot up.
      Finally, you will need to emulate the rotary encoders with switch.
      Good luck! 😉

      1. Everytime i try to start in QEMU program try to restart and i tried several scripts 🙁

  3. Thank u, i wrote u a provate mail, for now qemu is rebooting on windows 7 x64, but i dont surrender 😉

  4. Its difficult for me to find encorders here in city, in ebay o found that:

    http://www.ebay.it/itm/5-Pin-Digital-Push-Button-Switch-Rotary-Encoder-Momentary-Push-Switch-/200834097586?var=&hash=item2ec2a521b2:m:m1fCsLJ4y4wzT5WwUDfoWAA,

    i need controller module kit and midi-in + GPIO-expander kit.
    Made me know for payment.
    For display, can i use that one tft 3.2″ ??

    http://www.ebay.it/itm/3-2-TFT-LCD-Modulo-Front-Display-Touch-Screen-Per-Raspberry-Pi-B-B-A-Board-/191714953082?hash=item2ca31a077a:g:1soAAOSw14xWHKa7

    1. Hi Paul!
      + I think this encoder will work perfectly for zynthian.
      + Same for the TFT, but perhaps you need to adjust the configuration in “boot/config.txt”.
      + Do you want the full kits or only the PCBs?

      You can do the payment by:

      – Paypal: txino@evolus.net
      – Bitcoin: 1NvfkbFPaV5axLtQSL3K4R7BZ7xiwEJsEH

      Don’t forget to add 8 € for shipping 😉

  5. just the kit, i will solder, do u have my adress, send me the total in pm, i will use paypal

      1. Of course, a bigger screen can be more convenient, depends of your priorities 😉
        As i commented before, it may work without problems, perhaps adjusting the “boot/config.txt”.

        1. I understand, i studied a little, its cos of pinout of 3.2″ display

        1. This sistem permits to have a free solution to choose any type of display from little to bigger ,inside or external…..and also permits less charge of cpu processing…..

          1. There is no problem with using any kind of display. You only have to make some minor adjustments in the boot system.
            Also, if your screen size is different of 320×240 pixels, you will need to change some geometric values in the “zynthian_gui.py” file to fit the GUI into the screen.

          2. ok thank you for the info….i am planning to realize a test Zynthian and i think to buy from you the full kit for the interfave and the encoders……..i ask you soon

    1. I ….this project is very interesting…..Paul i am from Italy too….i would like
      to realized a version to manage some test…..i am not a musician only a
      hobbyst ……

      1. Hi Fabrizio, i’m a musician and an Electronic engeneer, its Very interesting What José and his team have created, i live im Italy too, Nice to meet you.

  6. I can’t made it work with raspberry pi 3 model B and capacitive display, knobs seems died, with firmware zynthian_devel-2016-03-14.jessie, all is freezed

    1. my mistake, red line is pin n.1 in wiki i was seeing the connector, for that i was wrong, it work. Thank to Fabrizio

  7. Hi, how can i edit that file to configure wifi?? /etc/wpa_suppplicant/wpa_supplicant.conf
    it not allow me to copy or edit such file, i’m becoming crazy

    1. You have to edit as root, so you have to login by ssh, and after you can edit using vi or joe command line editors:
      $ sudo joe /etc/wpa_suppplicant/wpa_supplicant.conf
      Also, you can change the permissions of file, like this:
      $ sudo chmod a+rw /etc/wpa_suppplicant/wpa_supplicant.conf
      and after that, you can edit using ‘pi’ user.

      1. I try to use the root access……..from pi user i try to change the password with ( sudo passwd root) the operation seems ok but after the login as root and the new password not work….why???

        1. By default, root SSH access is disabled in Debian distributions (and many others). It’s a bad practice and it’s better if you don’t do it, but if you really think that your life will be easier with ssh root access enabled, you can enable by editing the sshd configuration file (/etc/ssh/sshd_config).

          BUT, I DON’T RECOMMEND YOU TO DO IT!

          If you are really convinced to do it, please read something about that subject before: https://linuxacademy.com/blog/linux/when-you-should-and-should-not-disable-root-login/

  8. I think it is possible to enable temporary for easy edit the configuration files and then disable again at the end of operation and for normal use…..what do you think about???

    1. I prefer to edit the config file from command line, but if you don’t feel comfortable with command line, then you can follow your way. Any way, you will have to edit the “sshd_config” file from CLI 😉

  9. Hola a todos. Felicitaciones por el proyecto.
    Después de montar el Zyntian sobre una Raspb3, ¿dónde encuentro información para convertirlo en un procesador de VST sin ordenador?
    Muchas gracias.

    Hi, everybody. Congrats for the project! After to assemble the Zyntian on a Raspb3 where may I look for info about VST processor/player without PC?
    Thanks in advance.

    1. Hi Juan! Zynthian runs completely standalone. It doesn’t needs a computer to run. If you want to use it as an effects proccesor, you have to use a different audio interface, because HifiBerry doesn’t have audio input. The easier is to use a generic USB audio interface.
      If you do so, you have to adjust some lines in the configuration files, and recompile the Carla software, to enable the audio inputs. Not very difficult. Tell me if you want to try!
      Also, i recommend you the ModDuo. Perhaps is best suited to you 😉

Comments are closed.