You are here

The Frolic Demoiselle


Qtractor is an audio/MIDI multi-track sequencer application written in C++ with the Qt4 framework [1]. Target platform is Linux, where the a Jack Audio Connection Kit (JACK) for audio [2] and the Advanced Linux Sound Architecture (ALSA) for MIDI [3] are the main infrastructures to evolve as a fairly-featured Linux desktop audio workstation GUI, specially dedicated to the personal home-studio.

Qtractor is free open-source software, distributed under the GNU General Public License (GPL) [15].

Website:

http://qtractor.sourceforge.net

Project page:

http://sourceforge.net/projects/qtractor

Download:

http://downloads.sourceforge.net/qtractor/qtractor-0.2.0.tar.gz

Executive summary:

  • Multi-track audio and MIDI sequencing and recording.
  • Developed on pure Qt4 C++ application framework [1] (no Qt3 nor KDE dependency).
  • Uses JACK [2] for audio and ALSA [3] sequencer for MIDI as infrastructure.
  • Traditional multi-track tape recorder control paradigm.
  • Audio file formats support: OGG (via libvorbis [6]), MP3 (via libmad [7], playback only), WAV, FLAC, AIFF and many, many more (via libsndfile [4]).
  • Standard MIDI files support (format 0 and 1).
  • Non-destructive, non-linear editing.
  • Unlimited number of tracks per session/project.
  • Unlimited number of overlapping clips per track.
  • XML encoded session/project description files (SDI).
  • Point-and-click, multi-select, drag-and-drop interaction (drag, move, drop, cut, copy, paste, delete, split)
  • Unlimited undo/redo.
  • Built-in mixer and monitor controls.
  • Buil-in connection patchbay control and persistence (a-la QjackCtl [13]).
  • LADSPA [5], DSSI [11] and native VSTi [12] plug-in support.
  • Unlimited number of plug-ins per track or bus.
  • Plug-in presets, programs and chunk/configurations support.
  • Audio/MIDI clip fade-in/out (linear, quadratic, cubic).
  • Audio clip time-stretching (WSOLA-like or via librubberband [9]), pitch-shifting (via librubberband [9]) and samplerate conversion (via libsamplerate [8]).
  • Audio/MIDI track export (mix-down, merge).
  • Audio/MIDI metronome bar/beat clicks.
  • MIDI clip editor (piano roll).
  • MIDI instrument definitions (a-la Cakewalk(tm) [15])
  • JACK transport sync master.
  • MMC control surface enabled.
  • Configurable keyboard shortcuts.

Requirements:

Mandatory: libqt4 [1], libjack [2], libasound [3], libsndfile [4], LADSPA [5]. Optional: libvorbis [6], libmad [7], libsamplerate [8], librubberband [9], liblo [10], DSSI [11], VST-SDK [12].

Disclaimer:

Qtractor is still in some alpha stage of development, although already functional it surely has a plenty of lurking bugs. It also lacks some features that some might find critical in the application field. All is not lost, as the following are among the ones planned to be worked on in the times to come (not in any particular order):

  • Automation and MIDI controller mapping.
  • Session/project templates.
  • Punch-in/out and loop recording (takes).
  • Audio clip cross-fading.
  • Audio effect send/return aux. inserts.
  • Clip locking, muting, normalize (gain).
  • LV2 plug-in support.
  • JACK MIDI support.
  • Tempo and key signature map.
  • Paste-repeat command.
  • MIDI SysEx manager.
  • MIDI event list editor.
  • MIDI editor (piano roll) draw mode.
  • MIDI groove/swing quantize.
  • OSC interface.
  • Scripting.
  • Etc. etc.

Change-log:

  • MIDI clip filename revision logic is now introduced, thus avoiding the proliferation of several numbered SMF's on each edit/save; some lurking bugs were exposed in the MIDI clip externalization method but promptly squashed.
  • Fixed a mouse release event glitch while in drag-and-drop items in the Files tree list widget.
  • A dummy plugin type option has been devised, just to bear with some troubled behavior of the lovely JUCETICE plugins (View/Options.../Plugins/Experimental/Dummy VST plugin scan). Bad news are that all, yes all as in every native VST plugins, are indistinguishable from being just pure audio effects, either mono or stereo, whatever, and thus all being considered full-blown stereo VSTi instruments (which are the vast mainstream and rather interesting majority, nevertheless:).
  • The plugin selection dialog (Add Plugin...) now features the option whether the selected plugins should be activated on insert.
  • Mixer strip titles now have distinguishable type icons, either for audio or MIDI, and shown on all buses and track strips.
  • Major optimization breakthrough: muted audio tracks aren't streamed any longer, saving precious CPU cycles from decoding, resampling, pitch-shifting, time-stretching, plugin effects, whatever.
  • Incredible as it might be, audio/MIDI track record monitoring is now mixed (or merged) with rolling playback content, thus not as mutually exclusive between record and playback states anymore; also, track mute/solo states doesn't apply to recording material anymore.
  • Main form timer slot gets corrected and now independent of current process buffer-size in regard to JACK transport synchronization.
  • All file references in session state file are now stored as relative paths to main session directory.
  • DSSI/VSTi plugin presets can now be explicitly recalled from file (ie. Open/load preset) through this new tool button whether visible while in the generic plugin form.
  • Due to some trouble with newer Qt >= 4.4 applications regarding font size configuration, a new global user option is now available to the rescue: View/Options... /Display/Base font size (default is no-op).
  • Logarithmic scale is now taken into effect by control parameter sliders, in the generic plugin editor dialog as provided by LADSPA and DSSI plugin types.
  • MIDI track bank/program does not default to zero (PC#0) anymore.
  • Second attempt for Qt4.4 build support, regarding the bundled atomic primitives, now corrected and way more seriously :).
  • Long due DSSI/VSTi plugin host implementation has taken shape for MIDI instruments (eg. soft-synth plugins); DSSI reached its full host implementation and VSTi is already kicking as well (HIGHLY EXPERIMENTAL).
  • DSSI/VSTi plugin presets may now be stored to external XML files, which should include all parameter values and configuration data chunks, taken as proper state snapshot and subject for recall.
  • Dedicated audio output bus option is now also accessible for all MIDI instrument plugins, either set globally as a default mode in View/Options.../Plugins/Instruments or in the plugin context menu for MIDI tracks, as an undoable command.
  • Fixed a potential crash-exception due to freeing a null-pointer, raised on some ever stringent platforms and while adding tracks to empty sessions, which is the same to say this was crashing more than always:).
  • Loop turn-around is now taken care of, as this has been found missing and causing noticeable gapping when un-muting or changing MIDI track events while in playback.
  • An off-by-one bug was fixed while inside MIDI cursor backward seek method, which was missing all other events that have the same exact onset timing.
  • Attempt to load Qt's own translation support and get rid of the ever warning startup message, unless built in debug mode. (transaction by Guido Scholz, while on qsynth-devel, thanks).
  • Only one application instance is now allowed to be up and running, with immediate but graceful termination upon startup iif an already running instance is detected, which will see its main widget shown up automatically (Qt/X11 platform only).
  • Clip fades have now a slight transparency.
  • Avoid loop read-ahead on initial audio clip loading.
  • Messages file logging makes its first long overdue appearance, with user configurable settings in View/Options.../Logging; options dialog was slightly rearranged and moved the Plugins section into a new tab page.
  • Audio/MIDI drifting correction was missing its own correct and due (re)initialization whenever playback is (re)started; also, MIDI metering synchronization has been fixed once again.
  • Fixed session cursor backward seeking, specially applicable when playback passes the end of overlapped clips.
  • Fixed potential crash when opening bogus audio files.
  • Time-stretch FIFO buffer implementation is now made generic, as template, fixing a destructor memory leak in the process.
  • Include legacy headers, stdlib.h and string.h, where necessary to build with stricter gcc/g++ >= 4.3.
  • References:

    Cheers && Enjoy.

Comments

really informative post.thanks for sharing this in your post with us.waiting for your next post like this.

Thanks for informing us about Qtractor and also for the link.Really informative post.Waiting for your next post like this.
Just want to say ,thank you.

Qtractor is a good and efficient software.You discussed about it so nicely.Many many thanks for the link given by you in your informative post.Keep it up.

Hi Rui, first of all , thank you very much for yout great work.

I've got a problem compiling Qtractor 0.2.1 on Debian Etch. All the others version , untill 0.2.0 , went fine and work very well.

src/qtractorAudioClip.cpp: In member function ‘virtual void qtractorAudioClip::drawClip(QPainter*, const QRect&, long unsigned int)’:
src/qtractorAudioClip.cpp:361: error: ‘const class QColor’ has no member named ‘lighter’
src/qtractorAudioClip.cpp:365: error: ‘const class QColor’ has no member named ‘lighter’
src/qtractorAudioClip.cpp:396: error: ‘const class QColor’ has no member named ‘lighter’
make[1]: *** [qtractorAudioClip.o] Error 1
make[1]: se sale del directorio `/tmp/qtractor-0.2.1'
make: *** [qtractor] Error 2

Thanks for any help.

Cheers.

rncbc's picture

Ah, that's because you've an ancient Qt4 version to work with.

You can choose one of two routes:
1) upgrade your Qt installation to Qt4 >= 4.3 (eg. debian testing / lenny)
2) add this lines at the start of every source file where you find the same compilation error:

#if QT_VERSION < 0x040300
#define lighter light
#endif

hope you can make it. i'll try to stuff this last one in CVS and ready for next release, real soon now ;)

Hi Rui , thank you very much for your fast response.
It has another error :

src/qtractorClip.cpp: In member function ‘virtual void qtractorClip::drawClip(QPainter*, const QRect&, long unsigned int)’:
src/qtractorClip.cpp:437: error: ‘const class QColor’ has no member named ‘darker’
src/qtractorClip.cpp:441: error: ‘const class QColor’ has no member named ‘darker’
src/qtractorClip.cpp:499: error: ‘class QColor’ has no member named ‘darker’
src/qtractorClip.cpp:501: error: ‘class QColor’ has no member named ‘darker’
make[2]: *** [qtractorClip.o] Error 1
make[2]: se sale del directorio `/tmp/qtractor-0.2.1'
make[1]: *** [qtractor] Error 2
make[1]: se sale del directorio `/tmp/qtractor-0.2.1'
make: *** [build-stamp] Error 2

I sopose to make the same but

#if QT_VERSION < 0x040300
#define darker dark
#endif

Instead of

#if QT_VERSION < 0x040300
#define lighter light
#endif

It's ok?

Ok , I did as showed before , and now the error changed:

In file included from src/qtractorTrackForm.h:25,
from src/qtractorTracks.cpp:45:
./ui_qtractorTrackForm.h:56:36: error: qtractorpluginlistview.h: No existe el fichero o el directorio
make[2]: *** [qtractorTracks.o] Error 1
make[2]: se sale del directorio `/tmp/qtractor-0.2.1'
make[1]: *** [qtractor] Error 2
make[1]: se sale del directorio `/tmp/qtractor-0.2.1'
make: *** [build-stamp] Error 2

Thank you very much.

rncbc's picture

the fixes for lighter and darker issues are already committed. would it be too much asking you to try from current CVS HEAD (qtractor 0.2.1.1094+) ? instructions here.

byee

Ok , I did it from CVS , but still got :

In file included from src/qtractorBusForm.h:25,
from src/qtractorMixer.cpp:44:
./ui_qtractorBusForm.h:57:36: error: qtractorpluginlistview.h: No existe el fichero o el directorio
make[1]: *** [qtractorMixer.o] Error 1
make[1]: se sale del directorio `/tmp/qtractor'
make: *** [qtractor] Error 2

Thanks again .

rncbc's picture

now you're stuck :( what Qt4 version is this anyway? i believe it's pretty old and decrepit :)

i guess your only chance now is going to the upgrade route i first suggested. try to source the debian testing repositories and try bringing libqt4 up to date.

meanwhile i'll have to make more stringent checks on configure, maybe Qt4 >= 4.2 is the only way to go now.

[UPDATE:] you can try this hack: try sym-linking the allegedly missing file to the correct existing one, like this under the src subdirectory:

ln -s qtractorPluginListView.h qtractorpluginlistview.h

good luck :)

Touché!! :-) , Up an running.

Thank you very very much Rui. Qtractor begin to be very atractive and functional.
My rock solid Debian Etch can live some more time :)

All the best.

Add new comment