Apart from playing the recorder flute in primary school and keyboard with my father-in-law, I pretty much never had the chance to make music or even, to create new music. That did not bother me in the past, but when I married into a very musical and creative family I realized I was the only one without musical education or skill in playing an instrument. The family has (ir)regular jam sessions and sometimes arranges (mostly private but) quite high-quality classical music performances.
But, I had other hobbies, Slackware being one of them of course, and reading books while listening to my own music collection (which almost has no overlap with my wife’s by the way). And I was glad when I saw that my son has inherited my wife’s genes and has a knack for languages and music. He is exploring digital music making, has a keyboard or two and installed Ableton Live on his computer. I could never convince him that Slackware was the better alternative to Windows, all his friends are on Windows and what the group does is important for a teen. And furthermore, there’s a slew on tutorial and instruction video’s out there, all expecting you to use Ableton.
I looked at Ableton for its possibilities, and I had several discussions with one of my colleague/friends who is also a DJ/producer and uses Ableton a his primary driver. Seems to be a real nice program… but it costs hundreds of euros. So purchasing a license for Windows 10 and another one for Ableton, just to be able to converse with my son was not an option. I’ll introduce him to my friend and we’ll visit his studio to get inspiration. Then he can implement what he learnt, using tools he is familiar with.
During the past two years, I made some purchases just to have fun with creating sounds and rhythms, buying a couple of Pocket Operators from Teenage Engineering. I had one of these PO’s in my car, plugged into the car stereo and let my son create loops and sounds while on trips. Lots of fun and not too expensive. I also have an external USB soundcard,a FocusRite Scarlett 2i4. and a MIDI keyboard and bass guitar in the attic. But life’s too short and lots of stuff asks for attention – I never spent much productive time with my gear.
But these recent discussions about how to create digital music from scratch, and my wish toe be able to record the live performances of my in-laws, triggered a desire to have a better look at electronic music production and music recording, but then on Slackware Linux of course.
What would be needed for that? I would need software to create sounds (i.e. synthesizers), manipulate audio, create drum tracks, sequence the music, record and mix it. Also my USB sound card needs to be supported and I want my use midi keyboard to enter the notes that I play into the system. I obviously need low-latency real-time performance of my Digital Audio Workstation (DAW).
I guess that for many Linux musicians, the Debian-based AVLinux is a first choice when looking for pre-packaged, pre-configured Digital Audio Workstation (DAW) solutions and supporting software. But we Slackers already have Studioware – a Slackware expansion set which gives you a great toolkit with audio- and video manipulation software. My liveslak project even supports Studioware directly, and is able to create a Studioware Live ISO. You should try that out – it has a ton of software, not just for audio but also for video recording, manipulation and recording.
But… again… and that’s just me… I think that there’s no fun in using other people’s ready-made stuff. Here I am thinking again as the software packaging geek who wants to create possibilities for other people while not necessarily using those myself.
Anyway, I decided not to look too closely at what others had already done, and research a decent set of software products that I want to try out, and on Slackware-current too. Studioware is running on Slackware 14.2 and I tend to develop new stuff on our development platform.
And after a couple of weeks spent on reading, compiling, testing and scratching my head at my lack of knowledge, I came up with this list of software that I think is a nice start for venturing into DAW country. All of this is free and open source:
- Music recording/mixing/manipulating:
- ardour: the professional-grade Digital Audio Workstation (DAW).
- Sound editing:
- audacity: a graphical sound editor with a GTK3 based UI.
- Synthesizers:
- amsynth: an analog modelling synthesizer.
- helm: a polyphonic synth with lots of modulation also works as a LV2 plugin.
- zynaddsubfx: a software synthesizer and also a LV2 plugin.
- Drum machine:
- hydrogen: an advanced drum machine with Qt5 based GUI.
- MIDI input:
- vmpk: Virtual MIDI Piano Keyboard is a MIDI events generator and receiver which can be used to drive a MIDI synthesizer.
- Audio manipulation plugins (not counting the standalone applications mentioned above that will also run as an Ardour plugin):
- avldrums.lv2: a LV2 plugin wrapping the AVLinux Drumkits.
- calf: Calf Studio Gear is a LV2/DSSI plugin collection but it also works as a standalone JACK-host.
- eq10q: equalizer (and more) as LV2-plugins.
- vamp-aubio-plugins: a small collection of audio feature extraction plugins.
- System tools:
- jack-audio-connection-kit (jack2): to provide low-latency real-time audio routing.
- alsa-plugins-jack: part of alsa-plugins but not included in Slackware, allows audio to be routed to and from ALSA applications that are not JACK-aware.
- qjackctl: a Qt5 application to control the JACK sound server.
- Support libraries for implementing a DAW:
- aubio: a system to extract annotations from audio signals.
- ladspa_sdk: SDK for sound plugins adhering to the Linux Audio Developer’s Simple Plugin API (LADSPA).
- liblo: implementation of the Open Sound Control (OSC), a protocol for communication among multimedia devices.
- lv2: the LV2 open standard for audio plugins.
- rubberband: a library for audio time-stretching and pitch-shifting.
- vamp-plugin-sdk: an audio processing plugin system (you still need to install actual plugins).
- wxGTK3: GTK+3 implementation of the cross-platform wxWidgets API
- Further dependencies for the above (not part of Slackware) that I had to create as packages to get it all working:
- drumstick: MIDI libraries for Qt5. This is also part of my ‘ktown‘ Plasma5 desktop package set.
- liblrdf: library to access LADSPA plugin metadata.
- lilv: a library for using LV2 plugins in applications.
- mxml: library to read and write XML and XML-like data files.
- serd: RDF syntax library.
- sord: library for storing RDF data in memory.
- sratom: library for serialising LV2 atoms to and from RDF.
- suil: library for loading and wrapping LV2 plugin UIs.
- System libraries that I already had in my repositories and which you may already have installed and which are now all available in Slackware’s core distro:
- qt5: the toolkit for creating graphical interfaces
- libxkbcommon: support library for Qt5, handling keyboard descriptions.
- OpenAL: support library for Qt5, implementing a 3D audio API.
- SDL_sound: support library for Qt5 handling the decoding of various sound file formats.
Update 15-march-2019
Additions to the above set resulting from the discussion in the comments area below the main article:
- Music notation:
- Live Coding:
- supercollider: a platform for audio synthesis and algorithmic composition
- Plugins:
- lsp-plugins: Linux Studio Plugins supporting LV2, LADSPA and Jack.
- Support libraries:
- portaudio: a cross platform audio I/O library.
- portmidi: a platform independent library for MIDI I/O.
- Front-ends:
- qsynth: a Qt5 GUI Interface for FluidSynth.
Update 20-january-2020
- System tools:
- Support libraries:
- dssi: an API for audio processing plugins.
- libgig: a library for loading, modifying and creating gigasampler files.
- liblscp: the LinuxSampler Control Protocol library.
- Synthesizers:
- Front-ends:
- qsampler: a LinuxSampler Qt5-based user interface.
Update 27-january-2020
- Support libraries:
- Audio file analysis:
- Synthesizers:
- zyn-fusion: this is the zynaddsubfx realtime synthesizer (see above), but now with a new GUI based on ruby-zest.
Install either the zynaddsubfx package (with the ntk GUI) or the zyn-fusion package (with the zest GUI) but not both.
Update 2-february-2020
- Support libraries:
- OpenBLAS: an optimized BLAS library. The package contains BLAS, CBLAS, LAPACK and LAPACKE support.
- python-numpy: a python module for scientific computing.
- python-pathlib2: a backport of pathlib to fully support stdlib Python API.
- python-pyo: a Python module for digital signal processing.
- wxpython: a cross-platform GUI toolkit.
- Synthesizers:
- cecilia5: an audio signal processing tool for sound designers.
Update 10-june-2020
- Support libraries:
- libsass: the C/C++ implementation of a Sass compiler.
- sassc: the C implementation of Sass CSS preprocessor.
- Music recording/mixing/manipulating:
- non-daw: ‘Non’ DAW studio, with low hardware needs and responsive enough to be used live.
- guitarix: a virtual guitar amplifier and effects rack.
Update 28-june-2020
- Support libraries:
- System tools:
- cadence tools: JACK toolbox for audio production, an alternative to qjackctl.
- jack_capture: a program for recording sound files with JACK.
- meterbridge: meters for the JACK audio server.
- zita-ajbridge: a JACK client to use additional ALSA devices.
Update 29-june-2020
- Support libraries:
- chromaprint: an audio fingerprint library.
- faad2: ISO AAC decoder library.
- hidapi: a library to communicate with USB & Bluetooth HID devices.
- libmodplug: a MOD playing library.
- libmp4v2: a library to read, create, and modify mp4 files.
- protobuf: Google’s data interchange format.
- qtkeychain: Qt API to store passwords and other secret data securely.
- DJ Software:
- mixxx: powerful DJ and performance software.
Update 30-june-2020
- Support libraries:
- System tools:
- carla: a fully-featured audio plugin host.
Update 23-july-2020
- Live Coding:
- sonic-pi: a popular live-coding music performance tool.
Update 04-august-2020
- Audio manipulation plugins:
- gxplugins.lv2: a set of additional LV2 plugins for Guitarix.
- x42-plugins: a set of LV2 plugins with standalone JACK applications.
- Support libraries:
- libltc: a Linear/Longitudinal Time Code (LTC) library.
- zita-convolver: a real-time convolution matrix for up to 64 audio inputs and outputs.
Update 01-september-2020
- Music recording/mixing/manipulating:
- jamulus: internet jam session software (client & server).
Update 06-september-2020
- Music recording/mixing/manipulating:
- muse: a midi and audio sequencer.
- Support libraries:
- rtaudio: provides a common API for realtime
audio I/O.
- rtmidi: provides a common API for realtime
MIDI I/O.
Update 20-september-2020
- Music recording/mixing/manipulating:
- qmidiarp: a MIDI arpeggiator, sequencer and LFO.
- qtractor: an audio/MIDI multitrack sequencer.
Update 11-october-2020
- Music recording/mixing/manipulating:
- giada: a minimalist and hardcore music production tool.
Update 16-december-2020
- Music recording/mixing/manipulating:
- zrythm: a highly automated and intuitive digital audio workstation.
Update 20-december-2020
- Support libraries:
- libmicrohttpd: a small C library to make it easy to run a HTTP server as part of another application.
- System tools:
- faust: a functional programming language for real-time sound synthesis and audio processing.
Update 25-december-2020
- Support libraries:
- glfw: a portable framework for GUI development.
- jq: a lightweight JSON processor.
- Synthesizers:
Update 16-june-2021
- Support libraries:
- dblatex: DocBook to LaTeX/ConTeXt Publishing.
- guile1.8: an interpreter for Scheme language.
- Audio manipulation plugins:
- Music notation:
- Music recording/mixing/manipulating:
- rosegarden: MIDI/audio sequencer and notation editor.
Update 26-june-2021
- Support libraries:
- Music notation:
Update 10-july-2021
- Support libraries:
- libsmf: a standard MIDI fileformat library.
- Drum kit:
- dgedit: the drumgizmo drumkit editor.
- drumgizmo: multichannel, multilayered drum plugin and stand-alone application.
Update 03-september-2021
- Synthesizers:
- VCV Rack modules: countmodula, mental, mindmeldmodular, modularfungi, packone, studiosixplusone, squinkyvcv, valley.
Update 03-september-2022
Update 15-june-2023
- Synthesizer:
- surge-xt: a powerful subtractive hybrid synthesizer.
Looking back, that is a big list! Actually when I started with my shortlist as mentioned above I did not anticipate that my ideas would require this many tools to support it. However I think that in order to do some serious audio production work on your computer, this is actually the minimum of applications that you require. There may be more, and I am very curious to hear from you if there is Open Source Software not on the above list, which you think is invaluable to your work as a musician or music producer and should be added here.
The ‘big boy’ in this collection, and the center of any DAW activities on Linux, is Ardour.
This is a complex program, but luckily the developers have an extensive manual online. And if you search on Youtube you will find a lot of videos on how to work in Ardour (most of them for older versions and most of them too obscure or too rambling to be educational). However, an Ardour channel on Youtube has just been created with the intention of releasing a new series of quality instruction videos, produced by Unfa who himself has a lot of nice videos on his own channel. Like I said, I have been scratching my head a lot lately, but my hair is still there and I will make progress and understand how to use this tool efficiently… eventually.
And I am glad to finally have Audacity in my repository, something I wanted/needed for quite a while.
All these packages are available in my regular repository, with one caveat (at least for now): I have built all of them for Slackware-current (both 32bit and 64bit). If you are running Slackware 14.2 then for now you need to have a good look at Studioware instead, or you can of course download the sources for my packages and compile them yourself.
The build order is roughly like this:
- jack2
- alsa-plugins-jack (depends on jack2)
- pulseaudio-jack (Depends on jack2)
- lv2
- vamp-plugin-sdk
- aubio (depends on jack2, and additionally on ffmpeg on Slackware 14.2)
- liblo
- ladspa_sdk
- liblrdf (depends on ladspa_sdk)
- rubberband (depends on ladspa_sdk and vamp-plugin-sdk)
- serd
- sord (depends on serd)
- sratom (depends on lv2 and sord)
- lilv (depends on sratom)
- suil (depends on lv2 and qt5)
- soundtouch
- ardour (depends on jack2 aubio lv2 vamp-plugin-sdk liblo liblrdf lilv rubberband and suil)
- mxml
- ntk
- portmidi (depends on openjre)
- portaudio (depends on jack2)
- zynaddsubfx (depends on jack2 liblo mxml ntk and portaudio)
- hydrogen (depends on jack2 ladspa_sdk liblo liblrdf rubberband and qt5)
- wxGTK3
- soxr
- audacity (depends on jack2 ladspa_sdk lilv soxr suil vamp-plugin-sdk and wxGTK3)
- qjackctl (depends on jack2 portaudio and qt5)
- calf (depends on jack2 and lv2, and for Slackware 14.2 additionally on fluidsynth)
- avldrums.lv2 (depends on lv2)
- helm (depends on jack2 and lv2)
- amsynth (depends on jack2 ladspa_sdk and liblo)
- eq10q (depends on lv2)
- vamp-aubio-plugins (depends on aubio and vamp-plugin-sdk)
- drumstick (depends on qt5)
- vmpk (depends on drumstick)
- musescore (depends on jack2 portaudio portmidi and qt5)
- qsynth (depends on qt5)
- lsp-plugins (depends on jack2 ladspa and lv2)
- supercollider (depends on jack2 and qt5)
- dssi (depends on jack2 liblo and ladspa_sdk)
- libgig
- liblscp
- linuxsampler (depends on dssi libgig jack2 ladspa_sdk and lv2)
- qsampler (depends on libgig liblscp linuxsampler and qt5)
- libfishsound
- capnproto
- sonic-visualiser (depends on capnproto libfishsound liblo liblrdf portaudio rubberband serd sord and qt5)
- zyn-fusion (depends on dssi jack2 liblo mxml and portaudio)
- OpenBLAS
- python-numpy (depends on OpenBLAS)
- python-pathlib2
- python-pyo (depends on portaudio portmidi liblo and jack2)
- wxpython (depends on python-pathlib2 and wxGTK3)
- cecilia5 (depends on python-numpy python-pyo and wxpython)
- libsass
- sassc (depends on libsass)
- guitarix (depends on faust jack2 ladspa_sdk liblrdf lilv lv2 and sassc)
- non-daw (depends on jack2 ladspa_sdk liblo liblrdf and ntk)
- meterbridge
- jack_capture (depends on jack2, liblo and meterbridge)
- zita-alsa-pcmi
- zita-alsa-pcmi
- zita-ajbridge (depends on jack2 zita-alsa-pcmi and zita-resampler)
- cadence (depends on a2jmidid jack2 jack_connect pulseaudio-jack and zita-ajbridge)
- chromaprint
- libmodplug
- libmp4v2
- faad2
- hidapi
- protobuf
- qtkeychain
- mixxx (depends on chromaprint faad2 hidapi libmodplug libmp4v2 lilv lv2 portmidi portaudio protobuf qtkeychain rubberband and vamp-plugin-sdk)
- python-pyliblo (depends on liblo)
- carla (depends on jack2 liblo and python-pyliblo)
- sonic-pi (build-time dependency on erlang-otp)
- libltc
- zita-convolver
- gxplugins.lv2 (depends on jack2 and lv2)
- x42-plugins (depends on jack2 liblo libltc lv2 and zita-convolver)
- jamulus (depends on jack2)
- rtaudio (depends on jack2)
- rtmidi (depends on jack2)
- muse (depends on dssi jack2 ladspa_sdk liblo liblrdf lilv lv2 rtaudio rubberband and sord)
- qtractor (depends on aubio dssi jack2 ladspa_sdk liblo lilv lv2 rubberband suil and vamp-plugin-sdk)
- qmidiarp (depends on jack2 liblo and lv2)
- giada (depends on fltk jack2 and rtmidi)
- libmicrohttpd
- faust (depends on libmicrohttpd portaudio rtaudio and supercollider)
- libsass
- sassc (depends on libsass)
- guitarix (depends on faust jack2 ladspa_sdk liblrdf lilv lv2 and sassc)
- glfw
- jq
- vcvrack (depends on glfw jack2 jq rtaudio and rtmidi)
- noise-repellent (depends on lv2)
- dblatex
- guile1.8
- lilypond (depends on dblatex guile1.8 (and build-time also on fontforge))
- rosegarden (depends on dssi jack2 ldaspa_sdk liblo liblrdf lilypond)
- python-ly
- python-poppler-qt5
- python-pygame (depends on portmidi)
- qpageview
- frescobaldi (depends on lilypond python-ly python-poppler-qt5 python-pygame qpageview)
- libsmf
- drumgizmo (depends on jack2, libsmf, lv2, zita-resampler)
- dgedit
- jack-example-tools (depends on jack2 zita-alsa-pcmi zita-resampler)
- surge-xt (depends on jack2 and lv2)
I hope to get some interesting feedback from you. I am also considering how all of this could be added to a function-focused liveslak variant, as small as possible so it may load completely into memory. Actually I would prefer to attempt such a Live ISO using a bare Plasma5, rather than XFCE or other light-weight desktop environments (everybody else is probably already using XFCE). The Plasma5 desktop framework is very powerful and fast, and it could benefit the user of a DAW if everything she plugs in just works.
Update 29-jun-2020:
I wrote an article on configuring your Slackware system for using it as a DAW, and also in that article I am presenting a new liveslak variant “DAW” which will generate an ISO of 2.7 GB in size which runs out of the box as a fully configured Slackware Plasma5 based DAW: https://alien.slackbook.org/blog/configuring-slackware-for-use-as-a-daw/
Easy installation
If you use the slackpkg+ extension for slackpkg to manage packages from 3rd-party repositories, then installing all these packages (or refreshing the collection after I add packages) becomes very easy. Slackpkg has a powerful feature called templates, and with slackpkg+ added, it is possible to create a template containing multiple packages from one or more repositories.
For my DAW package set I created a template and host it here: http://www.slackware.com/~alien/tools/templates/ with the name “daw.template”. Download this daw.template file and copy it into your local /etc/slackpkg/templates/ directory. Then, run:
# slackpkg install-template daw
…and slackpkg will prompt you with a list of all the packages from this template that you have not yet installed. For better readability in the example below I use the parameter “-dialog=off” so that the program outputs to the standard output instead of showing a ncurses dialog window:
# slackpkg -dialog=off install-template daw
NOTICE: pkglist is older than 24h; you are encouraged to re-run 'slackpkg update'
Looking for packages in "daw" template to install. Please wait...DONE
[ Repository ] [ Package ]
alienbob cecilia5-5.4.0-x86_64-1alien.tgz
Total package(s): 1
Do you wish to install-template selected packages (Y/n)?
In that sense, the “slackpkg install-template <templatename>” works similarly to the “slackpkg install <repositoryname>” command: it will install any package that is not already present on your computer.
After a “slackpkg install-template” action, you can fall back to your regular “slackpkg update && slackpkg install-new && slackpkg upgrade-all” routine of daily package management. You would have to run “slackpkg install-template daw” only after you read in my blog that I added a package, or if you had not yet installed the complete set and need (some of) the remaining packages.
Ideas? Enjoy! Eric
Recent comments