
Source (link to git-repo or to original if based on someone elses unmodified work): https://github.com/rncbc/qtractor
Qtractor is an audio/MIDI multi-track sequencer application written in C++ with the Qt framework. Target platform is Linux, where the Jack Audio Connection Kit (JACK) for audio and the Advanced Linux Sound Architecture (ALSA) for MIDI are the main infrastructures to evolve as a fairly-featured Linux desktop audio workstation GUI, specially dedicated to the personal home-studio.
Features:
- Multi-track audio and MIDI sequencing and recording.
- Developed on the Qt C++ application and UI framework.
- Uses JACK for audio and ALSA sequencer for MIDI as multimedia infrastructures.
- Traditional multi-track tape recorder control paradigm.
- Audio file formats support: OGG (via libvorbis), MP3 (via libmad, playback only), WAV, FLAC, AIFF and many, many more (via libsndfile).
- 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, paste-repeat, delete, split, merge).
- Unlimited undo/redo.
- Built-in mixer and monitor controls.
- Built-in connection patchbay control and persistence (a-la QjackCtl).
- LADSPA, DSSI, native VST(2), VST3 and LV2 plug-ins support.
- Unlimited number of plug-ins per track or bus.
- Plug-in presets, programs and chunk/configurations support, including native VST FXB/FXP file support.
- Unlimited audio/MIDI effect send/return inserts per track or bus.
- Loop-recording/takes.
- Audio/MIDI clip fade-in/out, cross-fade (linear, quadratic, cubic).
- Audio/MIDI clip gain/volume, normalize, export.
- Audio/MIDI track and plugin parameter automation (dynamic curves, sample&hold, linear and spline modes).
- Audio clip time-stretching (WSOLA-like or via librubberband),
pitch-shifting (via librubberband) and seamless sample-rate conversion (via libsamplerate).
- Audio/MIDI track export (mix-down, render, merge, freeze).
- Audio/MIDI metronome bar/beat clicks.
- Unlimited tempo/time-signature map.
- Unlimited location/bar markers.
- MIDI clip editor (matrix/piano roll).
- MIDI instrument definitions (a-la Cakewalk(tm) (*.ins)); SoundFont (*.sf2) and MIDI Names XML (*.midnam) files also supported.
- MIDI controller mapping/learn/assignment (mixer and plug-in parameters).
- MIDI system exclusive (SysEx) setups.
- JACK transport sync master/slave.
- JACK session support.
- NSM (Non/New Session Management) support.
- MMC control surface enabled.
- MIDI Clock, Song Position Pointer (SPP) support.
- Configurable PC-keyboard and MIDI controller shortcuts.
0.9.21 2021-03-18 An End-of-Winter'21 Release. 1 month ago
- Ignore snap while ALT key is pressed, on the main track-view and the MIDI clip editors (aka. piano-roll).
- Fixed a FTBFS when native LV2 UI GTK2 support is disabled.
- Fix IPlugView leaks for VST3 plugins.
0.9.21 2021-03-18 An End-of-Winter'21 Release. 1 month ago
- Ignore snap while ALT key is pressed, on the main track-view and the MIDI clip editors (aka. piano-roll).
- Fixed a FTBFS when native LV2 UI GTK2 support is disabled.
- Fix IPlugView leaks for VST3 plugins.
0.9.20 2021-02-12 A Winter'21 Release. 2 months ago
- Fixed and improved automation curve recording, whenever playback is rolling (and also when isn't:)).
- Fixed parsing/loading of large session bundle archive/zip files (.qtz > 2GB).
- Fixed LV2 plug-in UI X11 (native) resize.
- Make NSM state file names independent to session display names, keeping backward compatibility for old sessions.
- Exiting, quitting or closing the main window while under NSM, now promptly asks whether to save, discard or cancel as usual.
- Re-improved Mixer multi-row layout.
- Fix incorrect destruction order for VST3 modules.
0.9.19 2020-12-20 3 months ago
- Session directory auto-name option added to the session properties dialog, as convenience.
- Loading and saving a LV2 plugin's state has been vastly improved. IMPORTANT CAVEAT: From this moment onwards, when loading any newer saved sessions into older versions of the program, all LV2 plugins won't get their state restored correctly.
- Track colors saturation introduced as yet another eye-candy option (cf. View/Options.../Display/Track color saturation)
- Fixed VST3 number of channels query/report.
- Fixed immediate crash when loading untitled or unnamed Instrument Definitions files (*.ins): base file-name is now taken as default instrument definition name or title.
- Tempo (BPM) entry may now be specified with arbitrary precision, to at most 3 decimal positions in fractional part, while integer whole values are displayed with no decimal point.
- Added option to keep MIDI clip editor windows (aka. piano-roll) always on top of the main window (cf. View/Options.../General/Keep editor windows always on top).
- MIDI clip editor status-bar labels are not stretched to whole text size anymore, most specially for the current file complete path.
thebadapples
11 years ago
Report
dridk
12 years ago
You need now, to improve de design with nice icon and graphics! ( oxygen power!)
Look this : garageBand on mac Os for example:
http://www.farsipraise.net/blog/uploaded_images/garageband-723027.jpg
Report
rncbc
12 years ago
Cheers.
Report
tankaa
12 years ago
Report
dragonlord79
13 years ago
It was time that a cool audio sequencing application was developed !
To be honest I haven't tried it yet, but I'm following with pleasure your constant improvements and efforts. I am a hard user of Cubase SX and I would really love to definitely switch to Linux also for that purpose, and achieve 0 latency recording and mastering.
The key thing for these applications is a serious VST instruments support. Once you get it you're done ! Have you planned it at all for the future ?
Again, many congratulations !
Report
rncbc
13 years ago
Regarding VST support: it is in deed in the workings. On the workbench there's DSSI and native VSTi plug-in support. That's right, with DSSI-VST you will reach windows VSTs through wine, and with native VSTs you should have an open road to native linux VSTs (yes, there are some few out there;)
it's coming, but I can't really tell when it will be ready ;)
byee
Report
MiTcX
13 years ago
great app !
i would like to save the project but not in a media file, can we ? like the audacity .aup
Report
MiTcX
13 years ago
maybe the 2 windows when you want to save are unusual, for me
Report
rncbc
13 years ago
In qtractor, exporting is the process to produce a mix-down of one or several tracks resulting into a brand new media file; it's like rendering audio _or_ MIDI into a new media file (either audio file _or_ SMF, not both).
OTOH, regarding the "project" concept, IIUC, is here known and called as "session", as the program's "working session". This working session is rightly stored as a XML encoded file (.qtr file ext/suffix) as being the complete description of the arrangement, including all audio/MIDI tracks, clips, buses and the whole setup made while operating the application program. Have this noted, that a session file does NOT ever store or include any kind of media contents, rather just the file path references where it might get found in the local file system.
HTH
Cheers && Happy New Year
Report
mapi
13 years ago
http://mandriva.99k.org/
Report
vwinwv
13 years ago
make[1]: Entering directory `/tmp/qtractor-0.0.5.702'
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtXml -I/usr/include/qt4/QtXml -I/usr/include/qt4 -Isrc -I/usr/include/qt4 -I/usr/include/qt4 -I/usr/local/include -I/usr/include -I/usr/include/qt4 -I. -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtXml -I/usr/include/qt4/QtXml -I/usr/include/qt4 -Isrc -I/usr/include/qt4 -I/usr/include/qt4 -I/usr/local/include -I/usr/include -I/usr/include/qt4 -I. -I. -o qtractorMainForm.o src/qtractorMainForm.cpp
src/qtractorMainForm.cpp: In constructor ‘qtractorMainForm::qtractorMainForm(QWidget*, Qt::WindowFlags)’:
src/qtractorMainForm.cpp:232: error: ‘class QDoubleSpinBox’ has no member named ‘setKeyboardTracking’
make[1]: *** [qtractorMainForm.o] Error 1
make[1]: Leaving directory `/tmp/qtractor-0.0.5.702'
make: *** [qtractor] Error 2
i did get the ./configure to work...i install qt4-kdecopycat-{core,dev,gui,sql}
libasound2 and dev
ladsps-sdk
but,when i go to make i get this error...i tried the cd/ win32 qmake && make but i get the same thing...any thoughts?
Report
rncbc
13 years ago
Please, edit src/qtractorMainForm.cpp and change line 232, or around where it reads:
#if QT_VERSION >= x040300
m_pTempoSpinBox->setKeyboardTracking(false);
#endif
change it to:
#if QT_VERSION >= 0x040301
m_pTempoSpinBox->setKeyboardTracking(false);
#endif
or, just get rid of the #if/endif block if you like; it's only usable on >= Qt4.3.1 anyway ;)
--
rncbc aka Rui Nuno Capela
Report
andreak
13 years ago
Apparently Kubuntu only provides the JACK application and not the devel-libs. Or am I wrong? Anybody who can point me to the .debs for "jackd-devel"?
Report
rncbc
13 years ago
guess its in ubuntu's universe repository but who am i to tell that for sure :)
cheers.
Report
andreak
13 years ago
Report
burundukkedbl
14 years ago
src/qtractorFileListView.cpp: In member function ‘void qtractorFileListView::itemClickedSlot(QTreeWidgetItem*)’:
src/qtractorFileListView.cpp:594: error: ‘class qtractorFileGroupItem’ has no member named ‘setExpanded’
src/qtractorFileListView.cpp:594: error: ‘class qtractorFileGroupItem’ has no member named ‘isExpanded’
Mandriva Linux 2007 qt 4.1.4
Report
rncbc
14 years ago
As quick workaround you may edit the offending file, src/qtractorFileListView.cpp, line 594, and where you read:
pGroupItem->setExpanded(!pGroupItem->isExpanded());
substitute it exactly by:
setItemExpanded(pGroupItem, !isItemExpanded(pGroupItem));
or you can wait and I will fix that on CVS in a few minutes :)
Cheers.
Report
burundukkedbl
14 years ago
qtractorMidiClip.o: In function `qtractorMidiClip::seek(unsigned long)':
qtractorMidiClip.cpp:(.text+0xd1): undefined reference to `qtractorMidiCursor::seek(qtractorMidiSequence*, unsigned long)'
qtractorMidiClip.o: In function `qtractorMidiClip::reset(bool)':
qtractorMidiClip.cpp:(.text+0x279): undefined reference to `qtractorMidiCursor::reset(qtractorMidiSequence*, unsigned long)'
qtractorMidiClip.o: In function `qtractorMidiClip::process(unsigned long, unsigned long)':
qtractorMidiClip.cpp:(.text+0x4d7): undefined reference to `qtractorMidiCursor::seek(qtractorMidiSequence*, unsigned long)'
qtractorMidiClip.o: In function `qtractorMidiClip::drawClip(QPainter*, QRect const&, unsigned long)':
qtractorMidiClip.cpp:(.text+0x742): undefined reference to `qtractorMidiCursor::reset(qtractorMidiSequence*, unsigned long)'
qtractorMidiClip.o: In function `qtractorMidiClip::qtractorMidiClip(qtractorTrack*)':
qtractorMidiClip.cpp:(.text+0x9ae): undefined reference to `qtractorMidiCursor::qtractorMidiCursor()'
qtractorMidiClip.cpp:(.text+0x9bc): undefined reference to `qtractorMidiCursor::qtractorMidiCursor()'
qtractorMidiClip.o: In function `qtractorMidiClip::qtractorMidiClip(qtractorTrack*)':
qtractorMidiClip.cpp:(.text+0xaae): undefined reference to `qtractorMidiCursor::qtractorMidiCursor()'
qtractorMidiClip.cpp:(.text+0xabc): undefined reference to `qtractorMidiCursor::qtractorMidiCursor()'
qtractorMidiClip.o: In function `qtractorMidiClip::openMidiFile(qtractorMidiFile*, int)':
qtractorMidiClip.cpp:(.text+0xc8a): undefined reference to `qtractorMidiCursor::reset(qtractorMidiSequence*, unsigned long)'
qtractorMidiClip.cpp:(.text+0xca7): undefined reference to `qtractorMidiCursor::reset(qtractorMidiSequence*, unsigned long)'
qtractorMidiClip.o: In function `qtractorMidiClip::qtractorMidiClip(qtractorMidiClip const&)':
qtractorMidiClip.cpp:(.text+0xf10): undefined reference to `qtractorMidiCursor::qtractorMidiCursor()'
qtractorMidiClip.cpp:(.text+0xf1e): undefined reference to `qtractorMidiCursor::qtractorMidiCursor()'
qtractorMidiClip.o: In function `qtractorMidiClip::qtractorMidiClip(qtractorMidiClip const&)':
qtractorMidiClip.cpp:(.text+0x1020): undefined reference to `qtractorMidiCursor::qtractorMidiCursor()'
qtractorMidiClip.cpp:(.text+0x102e): undefined reference to `qtractorMidiCursor::qtractorMidiCursor()'
collect2: ld returned 1 exit status
Report
rncbc
14 years ago
Remember, when checking out from CVS you must do the `make -f Makefile.cvs` all over gain.
Seeya.
Report
burundukkedbl
14 years ago
Report
montoya
14 years ago
Report
rncbc
14 years ago
But you can bounce your session into a new track. Just add a new empty audio track, connect the outputs of all other tracks to the input of this new one, arm it for recording and start record+play. There you go, you'll be recording (in real time, though) what would be the result of a future export operation.
Depending on your current audio capture option (see menu View/Options.../Audio/Capture) the captured file might be in the Ogg Vorbis format.
There is no current nor future plans for MP3 encoding support, so that's a definite NO for the last half of your question. Remember that MP3 is only supported on playback. It has nasty technical drawbacks and its not a very wise choice for audio recording altogether. Choose OGG instead, or better yet, FLAC. That's only my opinion, of course.
Cheers.
Report
montoya
14 years ago
Make sure the JACK audio server (jackd) and/or
the ALSA Sequencer kernel module (snd-seq-midi)
are up and running and then restart the session."
I install all librearies (also jackd) but playlist not run :(
Report
rncbc
14 years ago
But, if its the very first time you are dealing with jackd, please be prepared that things might get harsh before you have a full top-notch audio system under you rig :)
In summary you'll have to make sure you, as a user, have realtime scheduler privileges.
Check your /etc/security/limits.conf file for some entries like this ones:
@audio - rtprio 90
@audio - nice -10
@audio - memlock 4000000
Then you have to add yourself (the username) part of the audio group. For the fast track, and most promiscuous too, just replace '@audio' by '*' in the above lines.
After those modifications, which should be carried on by root anyway, you must relogin as your regular user and then start jackd. If you're lacking QjackCtl GUI friendliness, you can start it from the command line, like this:
$ jackd -R -dalsa -dhw:0 -r44100 -p1024 -n2
Another issue could be that the ALSA sequencer kernel module might not be currently loaded. You can get the head-start by doing it as root:
# modprobe snd-seq-midi
From now on you can hit qtractor and start playing around. I hope you get the picture all right.
Cheers.
Report
montoya
14 years ago
fra@debian:~/Desktop/qtractor-0.0.1.582$ make
make[1]: Entering directory `/home/fra/Desktop/qtractor-0.0.1.582'
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtXml -I/usr/include/qt4/QtXml -I/usr/include/qt4 -Isrc -I/usr/local/include -I/usr/include -I/usr/include/qt4 -I. -I. -o qtractorConnections.o src/qtractorConnections.cpp
src/qtractorConnections.cpp: In constructor 'qtractorConnections::qtractorConnections(QWidget*)':
src/qtractorConnections.cpp:51: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:53: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:58: error: 'QHBoxLayout' was not declared in this scope
src/qtractorConnections.cpp:58: error: 'pLayout' was not declared in this scope
src/qtractorConnections.cpp:58: error: expected type-specifier before 'QHBoxLayout'
src/qtractorConnections.cpp:58: error: expected `;' before 'QHBoxLayout'
src/qtractorConnections.cpp:85: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:87: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp: In destructor 'virtual qtractorConnections::~qtractorConnections()':
src/qtractorConnections.cpp:102: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:104: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:109: warning: possible problem detected in invocation of delete operator:
src/qtractorConnections.cpp:109: warning: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: warning: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:109: note: neither the destructor nor the class-specific operator delete will be called, even if they are declared when the class is defined.
src/qtractorConnections.cpp: In member function 'void qtractorConnections::showBus(qtractorBus*, qtractorBus::BusMode)':
src/qtractorConnections.cpp:188: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:190: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:191: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:192: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:194: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:197: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:198: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:200: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:202: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:204: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:213: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:215: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:216: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:217: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:220: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:224: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:225: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:228: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:231: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp:233: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp: In member function 'void qtractorConnections::refresh()':
src/qtractorConnections.cpp:253: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
src/qtractorConnections.cpp: In member function 'void qtractorConnections::clear()':
src/qtractorConnections.cpp:260: error: invalid use of undefined type 'struct qtractorConnectForm'
src/qtractorConnections.h:31: error: forward declaration of 'struct qtractorConnectForm'
make[1]: *** [qtractorConnections.o] Error 1
make[1]: Leaving directory `/home/fra/Desktop/qtractor-0.0.1.582'
make: *** [qtractor] Error 2
Report