Skip to content

Benje06/dx7interface

Repository files navigation

🌐 Other Languages

English Français



Introduction

Dx7interface is a Complete GUI to drive the Yamaha Dx7 synthetizer and it's derivated such as Tx816 Tx216
as well as their emulators as Hexter or Dexed as long as they accept SysEx messaging.
It also allows you to manage sound banks.
It run on:

  • 32/64 bits PC under Windows, Linux
  • ARM under Linux

Dx7interface with a Tx216 under Manjaro By Jean-Michel:

Maiden Voyage (with a TX216 Yamaha) Test of Dx7interface on a TX216

Just for the pleasure Jean-Michel on a Dx7 ^^

Description

Dx7interface is a graphical interfaces to edit sounds banks and drive the Dx7 / Tx216 / Tx816 physical synth as well as their emulators.
It use SysEx messages and it's based on Alsa sequencer (for Linux) and RtMidi + loopMIDI (for Windows).
The interface is entirely driveable by Control Change (CC) and Program Change (PC).
It has a MIDI Learn function for this, with the load and save of the configuration from/to file.
ADSR and Pitch curves are editable by mouse controls.
You can start it with a specified color to quickly identify it.

It supports:

  • Controllers parameters:
    • Per sound in TF1 mode (Tx816/216)
    • Per bank in native mode of the Dx7.
  • 1, 32 and up to 128 sounds by bank.
  • editing sounds banks via menu functions (Insert/Replace/Delete).
  • loading and saving sound or bank from and to Raw (no sysex headers) or SysEx files,
    in Bulk 1 and Bulk 32 formats.
  • Comparing, Restoring sound/bank and Sending Bank.
    Sounds are done when you select a sound.
  • independant channels for the MIDI Input and Output.
  • an indicator on the list of sound for modified sounds.
  • a Midi panic function.
  • to log to a file and a console.

It is write on C++ using GLIB (glibmm-2.68) and GTK 4.0 (gtkmm-4.0)
with Cairo for the drawable (cairomm 1.16) and Pango for the font support (pangomm 2.68).
It can be customised as long as you preserving the object type and there name as it's build on:

  • an XML for the UI
  • a CSS file for the theme
  • and Custom font load support

As Dx7interface is a plugin/module (Glib::Gmodule) it rely on GxInterface as it's module loader.
It is a derivated from:

  • GxModule, which come from Gxinterface
  • Synth which hold all the Midi functions

GxInterface/Gxmodule provides the base functions such as:

  • Create/Load Modules
  • Present Dialogs/Windows for Load/Save/Messages
  • Read/Write by Bytes using DataStream
  • Gettings Ui widget
  • Setting Style (Font/Theme)
  • Command line options
  • Log Manager
  • Threads

Dx7interface provides:

  • the definition of the sysex format for the Dx7 and Tx816/Tx216
  • the definition of the messages
  • the definition of read parsing and write structures
  • the parsing itself
  • the link between the ui and functions using callback and events
  • the sounds bank management
  • the draw function (have to be moove somewhere else to be reusable)
  • the midi learn function (have to be mooved somewhere else to be reusable)

HOWTO

Windows

The windows version doesn't implement Midi driver, for this it rely on loopMidi by Tobias Erichsen.
After loopMidi is installed, start it and create 2 ports named Dx7interface_in and Dx7interface_out.
At start Dx7interface will automatically connect to these ports.
You'll have to set in advanced page, the maximum sysex size to 4104 kiloBytes at least, so banks of 32 sounds can be sent.
Once started any software that support Direct Music will see it.
For the start options, they are the same as under linux.
Log file is created under %LOCALAPPDATA%\gxinterface as gxinterface.log ( C:\Users\user_name\AppData\Local\gxinterface\gxinterface.log )

Windows 10 version download:

dx7interface with debug console

Linux

Supported Distribution:
It should work on any distribution as long as the specified versions are met.
It run on 64 bits PC and ARM
The tested distributions are:

Run:
Once installed you can run it by menu or start it from terminal as:

$ gxinterface -m /usr/share/dx7interface/1.0.0/dx7interface-1.0.0.so

Gxinterface / Dx7interface start options are:

  • Colorise section title
    Uses when you start multiple instance of the program.
    It colorise title section with the specified color to identify it visually.
    -c "color" where color is html color code.
$ gxinterface -c "red" -m /usr/share/dx7interface/1.0.0/dx7interface-1.0.0.so
$ gxinterface -c "#e15a46" -m /usr/share/dx7interface/1.0.0/dx7interface-1.0.0.so
  • Log level to specify le log level.
    -l [0|1|2]
    0=no log, 1=log to file, 2=log to file and console (default)
$ gxinterface -l 0 -m /usr/share/dx7interface/1.0.0/dx7interface-1.0.0.so
$ gxinterface -l 1 -m /usr/share/dx7interface/1.0.0/dx7interface-1.0.0.so
  • Load an element
    -m filename.[so|la|dll]
    -m *.so the common way to load a module, alternatively you can load the .la too
    -m *.dll same as .so for the Windows version

  • Load alternative main ui
    -i *.ui to load an xml file as main interface the attached code is that of gxinterface.
    So the ui need at least:

    • a Gtk::Window named "main_window"
    • a Gtk::Button named "module_select"
    • a Gtk::CheckButton named "checkbutton_standalone"
    • a Gtk::Notebook named "notebook_main"

Build it from Sources

You'll need:

  • DEV's Common:
    • base-devel (Arch: 1-2 , UCRT64: >=2024.11-1) or build-essential >= 12.9 ( gcc make ... )
      • Windows: + mingw-w64-ucrt-x86_64-toolchain
    • GNU autotool: autogen >= 5.18 / autoconf >= 2.71 / automake >= 1.16
      • Windows: + msys/autoconf-wrapper >= 20240607-1
      • Windows: + msys/automake-wrapper >= 20240607-1
    • intltool >= 0.51 and gettext >= 0.21
    • glib-gettextize => 2.74:
      • Archlinux: glib2 >= 2.82.4
      • Debian: libglib2.0-dev
      • Windows: ucrt64/mingw-w64-ucrt-x86_64-glib2
    • libtool >= 2.4.7
    • aclocal >= 1.16
      • Archlinux: include in automake
      • Debian: include in automake
    • m4 >= 1.4.19
    • gtkmm-4.0 >= 4.8.0 / glibmm-2.68 >= 2.68 (lib...-dev for Debian like)
    • cairomm-1.16 >= 1.16 / pangomm-2.48 >= 2.48 (lib...-dev for Debian like)
    • libsigc++-3.0 >= 3.4.0 (lib...-dev for Debian like)
    • pthread:
      • Windows ucrt64: ucrt64/mingw-w64-ucrt-x86_64-winpthreads-git >= 12.0.0.r679
      • Debian: included in glibc (optional: libpthread-stubs0-dev >= 0.4.1)
      • Archlinux: glibc >= 2.41
    • Packager:
      • Archlinux: makepkg git (optional: devtools)
      • Manjaro: manjaro-tools-base manjaro-tools-pkg
      • Debian/Ubuntu: checkinstall >= 1.6.2
      • Windows: NSIS mingw-w64-ucrt-x86_64-nsis >= 3.11.1
  • Dx7interface specifc:
    • gxinterface >= 1.0.0
    • MIDI:
      • Archlinux: alsa-lib >= 1.2.14
      • Debian/Ubuntu: libasound2-dev >= 1.2.8
      • Windows: RtMidi mingw-w64-ucrt-x86_64-rtmidi >= 6.0.0-3
  • Windows/UCRT64 specific:

Developement environments:

Kdevelop for Linux:

Files provides env variables (kdev4 global) and launchers (kdev4 specific)
for common actions those strating with D or DEBUG are flagged for debug with gdb inside kdevelop for both project gxinterface and dx7interface.
kdev4 global
You have to change path inside all .kdev4 files:

  • "file:///home/jerome/dev/git/gtk4" to your git clone directory
  • "/home/jerome/dev/build/" to your archlinux makepkg build directory
  • gxinterface: kdev4 specific
  • dx7interface: kdev4 specific

VS Code for windows build under ucrt64:

To build it under windows you need MSYS2/UCRT64
You can get the installer and documentation for MSYS2/UCRT64
And the UCRT64 package list to be installed in MSYS2/UCRT64.

After cloning the repo change path:

  • in files of .vscode directory:
    • "D:\crosscompile\msys2" to your msys2 install directory
    • "/d/gxinterface/package" to your packaging directory (where you want that make install put files for packaging)
  • in the NSIS script:
    • "d:\gxinterface\package" to your packaging directory

Load the root git clone directory in vscode.

BY HAND:

It is recommanded to go through makepkg or checkinstall
There is a PKGBUILD-gx and PKGBUILD-dx that use your local git directory to build

BUILDING IT

$ cd to_git_clone_directory/[gxinterface|dx7interface]/
RESET SOURCES
$ make clean || true
$ make disclean || true
AUTOGEN

Optimized build FLAGS
Add, to the autogen command line, with the simple quote and on the same line:
'CFLAGS=-O3 -std=c++17 -march=native -mtune=native -freciprocal-math -fstack-protector-strong -D_FORTIFY_SOURCE=2'
'CXXFLAGS=-O3 -std=c++17 -march=native -mtune=native -freciprocal-math -fstack-protector-strong -D_FORTIFY_SOURCE=2'

For Debug see dedicated section

Command

  • for gxinterface:
$ ./autogen.sh --prefix=/usr --enable-log=2 --enable-console=0 --enable-maintainer-mode
  • for dx7interface:
$ ./autogen.sh --prefix=/usr --enable-log=2 --enable-console=0 --enable-maintainer-mode --enable-alsa

--enable-console=1 enable for windows, the start of the application with a console, not used for linux.
--enable-log=2 set the error log detail:
0=no detail, 1=print function name, 2=function name + line + file.
"--enable-log" differt from the start command line -l, as it's just the details of log level not commons message to be logged and their location.
--enable-[alsa|rtmidi] use alsa for linux, rtmidi for windows. you dont need to specify --disable-alsa don't pass the flag, just omit it.
--[enable|disable]-maintainer-mode it an Automake maintainer mode macro enable the rebuild of some files like configure script.

MAKE
$ make -j3

or alterntively replace 3 with the number of cpu less 1 or under linux $(($(cat /proc/cpuinfo | grep -c ^processor) - 1))

INSTALL

By packager:
- Archlinux / Manjaro:
  • for gxinterface:
$ cd to_build_directory/
$ cp from_git_directory/gxinterface/PKGBUILD PKGBUILD-GX
$ makepkg -sfip PKGBUILD-GX
  • for dx7interface:
$ cd to_build_directory/
$ cp from_git_directory/dx7interface/PKGBUILD PKGBUILD-DX
$ makepkg -sfip PKGBUILD-DX
- Debian / Ubuntu:
  • for gxinterface:
$ cd to_git_clone_directory/gxinterface/
$ sudo checkinstall -D --fstrans=no --install=yes --pkgversion="1.0.0" -y
  • for Dx7interface:
$ cd cd to_git_clone_directory/dx7interface/
$ sudo checkinstall -D --fstrans=no --install=yes --pkgversion="1.0.0" -y
By Make install:

you can run both gxinterface and dx7interface without needing to install them, but dx7interface need libs and headers from gxinterface to build.

$ make install

RUN from sources

  • Gxinterface alone:
$ cd to_git_directory/gxinterface/src/
$ ./gxinterface
  • Dx7interface:
$ cd to_git_directory/dx7interface/src/
$ ../../gxinterface/src/gxinterface -l 2 -m src/.libs/dx7interface-0.0.1.so

or if gxinterface is installed

$ gxinterface -l 2 -m src/.libs/dx7interface-0.0.1.so

DEBUG

  • Add these FLAGS to the autogen script command line, keeping the simple quote and on same line, they'll be pass to configure script:
    'CFLAGS=-DGIOMM_DISABLE_DEPRECATED -DGLIBMM_DISABLE_DEPRECATED -DGDKMM_DISABLE_DEPRECATED -DGTKMM_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -ggdb3 -O0 -Wall -Wextra -Wno-unused-but-set-variable'
    'CXXFLAGS=-DGIOMM_DISABLE_DEPRECATED -DGLIBMM_DISABLE_DEPRECATED -DGDKMM_DISABLE_DEPRECATED -DGTKMM_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -ggdb3 -O0 -Wall -fno-inline -std=c++17 -Wno-unused-but-set-variable'
    'LDFLAGS=-ggdb3'

  • Add this to the environment variables or upstream of the command line of autogen and program (not sure if make needs it, it should be configure that passes them to it):
    G_DEBUG=all GTK_DEBUG=all GDK_DEBUG=all G_ENABLE_DEBUG=1 G_ENABLE_DIAGNOSTIC=1
    you can replace 'all' by a list of specifics elements to debug (ex: GTK_DEBUG=interactive,builder).
    Checks documentations links for more details.\

Docs:
GTK/GDK DEBUG
GLIB DEBUG
GLIB MACRO

  • Start gdb with signal:
gdb with_signal --args gxinterface -m /usr/share/dx7interface/1.0.0/dx7interface-0.0.1.so

History

This project was start in 2006, to made an interface for the configuration of Linux system.
Starting with the network, it was called GNetAdm and was made in C using glade and gtk2.
The first goal was to load modules with customisable interface for each kind of "services" to configure them.
Using C with multithreading, modules and interface, all this dynamically was painfull so i moove it to C++.
This core give birth of Gxinterface, the module loader.
In same time a musician friend Jean-Michel, user of a Dx7 Synth, pain to find how to simply edit the sound banks his synth.
So we go through the idea to made an interface for it using gnetadm. It give birth of Dx7interface.
We do it under c++ with gtk2 and glade. It end in 2011 with a working version and a non working version for standalone mode (start dx7interface detached from gxinterface), it was hosted on Savannah using bzr and was doing basic stuff such as drive the synth with the ui.
Hexter is the reference emulator for this synth but the editor inside was the retro mode version, so we decide as it accept SysEx to drive it and as it can write files that this would be enough for us to get something functional..
At the start of 2025, i reopen the code and try to run it, but gtk2 and all was so pretty deprecated, so i decided to upgrade it to gtk3, at first to see how painfull it could be, with the goal of gtk4.
Supprissingly it was not so, which made me thing the core and concept was robust enough.
So after mooving it to gtk3 (last bzr commit), we moove the repository to the git version and add a new branch gtk4.
We adding stuff step by step, like drawable, mouse editable, saving file, midi learn, compare, edit menu. In parallele we correct bugs, and update core, we moove generic function to the core, put the midi part in a separate class, trying to create more specialized classes, and detach UI stuff from functionnality as much as we can.
And finnaly moove all the code here. ^^
We hope you will enjoy this soft and his functionnality, to drive this mythics Synth from the 80's.

Thanks

A big thanks to:

References

Licenses

Gxinterface and Dx7interface

Copyright (C) 2010-2025 under GPL-v3
Except for font and images see below.

Images and Font

  • All Images (.png, .ico .svg) are under Creative Common CC-By-SA
    • by Jean-Michel Thiémonge and Jérome Benhaïm:
      • "icon_dx7interface.svg","dx7interface.png", "dx7interface.ico"
      • "32_algo_dx732_algo_dx7_150*105px.svg", "algo[1-32].png"
      • "lfo_wave_142*48px.svg", "SAW+.png", "SAW-.png", "SIN.png", "SQU.png", "S_HOLD.png", "TRI.png"
      • "PianoKeyboard.svg", "keyboard.png", "keyboard_background.png", touche_b.png", "touche_w.png"
  • Font:

Authors and Contributors

Authors:

THIÉMONGE Jean-Michel
BENHAÏM Jérome

Contributors:

ENNAIME Mirsal thanks for the help at start and the debug.h stuff
Termitor, thanks for the math computation ^^

About

Dx7 interface to drive the Yamaha Dx7 synthetizer it's derivated as Tx816 Tx216 and edit sound bank

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •