LAC2015@JGU-MainzLAC2015@JGU-Mainz

TenTen YearsYears ofof Qstuff*Qstuff* IsIs itit goodgood enoughenough alreadyalready ??

RuiRui NunoNuno CapelaCapela rncbc.orgrncbc.org

AprilApril 20152015 TenTen YearsYears ofof Qstuff*Qstuff* (1)(1)

GoodGood SoftwareSoftware TakesTakes TenTen Years.Years. GetGet UsedUsed ToTo it.it.

–– JoelJoel Spolsky,Spolsky, 20012001 http://www.joelonsoftware.com TenTen YearsYears ofof Qstuff*Qstuff* (2)(2)

writingwriting goodgood applicationsapplications isis hardhard.. writingwriting goodgood graphicalgraphical applicationsapplications isis harderharder.. writingwriting goodgood graphicalgraphical audioaudio applicationsapplications isis harderharder stillstill.. writingwriting goodgood graphicalgraphical audioaudio && MIDIMIDI applicationsapplications isis anan exerciseexercise inin masochismmasochism..

–– PaulPaul Davis,Davis, 20032003 “Some Things You May Not Have Thought About When Writing an Audio Application” LADC2003@ZKM-Karlsruhe 2003-20042003-2004 TheThe DawnDawn ofof Qstuff*Qstuff*

● QjackCtlQjackCtl qjackctl.sourceforge.netqjackctl.sourceforge.net jackaudio.orgjackaudio.org ● QsynthQsynth qsynth.sourceforge.netqsynth.sourceforge.net .orgfluidsynth.org ● QsamplerQsampler qsampler.sourceforge.netqsampler.sourceforge.net linuxsampler.orglinuxsampler.org

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 4 2005-20072005-2007 EnterEnter QtractorQtractor

OfficiallyOfficially presentedpresented toto thethe massesmasses onon LAC2007@TU-BerlinLAC2007@TU-Berlin Techno-boyTechno-boy bedroombedroom studiostudio,, anyoneanyone ?? (still(still afterafter aa decadedecade ?? :-)):-))

NotableNotable milestones:milestones: 20082008 DSSI,DSSI, nativenative VST,VST, Tempo-mapTempo-map 20092009 LV2LV2 20112011 TYOQATYOQA

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 5 2008-20112008-2011 SideworksSideworks

● QXGEditQXGEdit qxgedit.sourceforget.netqxgedit.sourceforget.net

● QmidiCtlQmidiCtl qmidictl.sourceforge.netqmidictl.sourceforge.net

● QmidiNetQmidiNet qmidinet.sourceforge.netqmidinet.sourceforge.net

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 6 2012-20152012-2015 Proto-toysProto-toys

a.k.a.a.k.a. TheThe Vee-OneVee-Oness

● synthv1synthv1 synthv1.sourceforge.netsynthv1.sourceforge.net

● samplv1samplv1 samplv1.sourceforge.netsamplv1.sourceforge.net

● drumkv1drumkv1 drumkv1.sourceforge.netdrumkv1.sourceforge.net

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 7 WhoWho isis behindbehind Qstuff*Qstuff* ??

HobbyHobby workwork ofof oneone lone-wolflone-wolf developerdeveloper me,me, rncbcrncbc a.k.a.a.k.a. RuiRui NunoNuno CapelaCapela aa giftgift economyeconomy playerplayer ;-);-)

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 8 ButBut whywhy ??

JustJust forfor funfun TheThe motivemotive ...... LongLong timetime enthusiasmenthusiasm onon electronicelectronic musicmusic TheThe skillskill ...... AA half-lifehalf-life onon programmingprogramming (20y+)(20y+) TheThe momentmoment ...... AnAn extraordinaryextraordinary alignmentalignment eventevent occurredoccurred inin thethe wholewhole UniverseUniverse ......

So,So, thatthat waswas itit !! (and(and stillstill isis ;-));-)) Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 9 BackBack toto Qtractor...Qtractor... qtractor.sourceforge.netqtractor.sourceforge.net

BetaBeta already!already! FullyFully functionalfunctional (no(no not-implemented-yetsnot-implemented-yets)) WhatWhat YouYou SeeSee IsIs WhatWhat IsIs WorkingWorking StillStill W.I.P.W.I.P. …… justjust notnot thatthat hardhard anymoreanymore ;);)

OpenOpen forfor BusinessBusiness (no(no moneymoney involved)involved) users,users, developers,developers, players,players, nurturersnurturers ......

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 10 FeaturitisFeaturitis (1)(1)

Multi-trackMulti-track audioaudio andand MIDIMIDI sequencingsequencing andand recording.recording. DevelopedDeveloped onon purepure Qt4Qt4 C++C++ applicationapplication frameworkframework (Qt5(Qt5 ready!).ready!). UsesUses JACKJACK forfor audioaudio andand ALSAALSA sequencersequencer forfor MIDI,MIDI, asas multimediamultimedia infrastructures.infrastructures. TraditionalTraditional multi-trackmulti-track tapetape recorderrecorder controlcontrol paradigm.paradigm.

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 11 FeaturitisFeaturitis (2)(2)

AudioAudio filefile formatsformats support:support: OGGOGG (libvorbis),(libvorbis), MP3MP3 (libmad,(libmad, playbackplayback only),only), WAV,WAV, FLAC,FLAC, AIFFAIFF andand many,many, manymany moremore (libsndfile).(libsndfile). StandardStandard MIDIMIDI filesfiles supportsupport (format(format 00 andand 1).1). Non-destructive,Non-destructive, non-linearnon-linear editing.editing. UnlimitedUnlimited numbernumber ofof trackstracks perper session/project.session/project. UnlimitedUnlimited numbernumber ofof overlappingoverlapping clipsclips perper track.track.

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 12 FeaturitisFeaturitis (3)(3)

XMLXML encodedencoded sessionsession // projectproject descriptiondescription filesfiles (SDI).(SDI). Point-and-click,Point-and-click, multi-select,multi-select, drag-and-dropdrag-and-drop interactioninteraction (drag,(drag, move,move, drop,drop, cut,cut, copy,copy, paste,paste, paste-repeat,paste-repeat, delete,delete, split,split, merge).merge). UnlimitedUnlimited undoundo // redo.redo. Built-inBuilt-in mixermixer andand monitormonitor controls.controls. Built-inBuilt-in connectionconnection patch-baypatch-bay controlcontrol andand persistencepersistence ((a-laa-la QjackCtlQjackCtl ;)).;)).

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 13 FeaturitisFeaturitis (4)(4)

LADSPA,LADSPA, DSSI,DSSI, nativenative VSTVST andand LV2LV2 plug-insplug-ins support.support. UnlimitedUnlimited numbernumber ofof plug-insplug-ins perper tracktrack oror bus.bus. Plug-inPlug-in presets,presets, programsprograms andand chunkchunk // configurationsconfigurations support.support. UnlimitedUnlimited audioaudio effecteffect sendsend // returnreturn insertsinserts perper tracktrack oror bus.bus. Loop-recordingLoop-recording // takes.takes.

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 14 FeaturitisFeaturitis (5)(5)

AudioAudio // MIDIMIDI clipclip fade-in/outfade-in/out (linear,(linear, quadratic,quadratic, cubic).cubic). AudioAudio // MIDIMIDI clipclip gaingain // volume,volume, normalize,normalize, export.export. AudioAudio // MIDIMIDI tracktrack andand pluginplugin parameterparameter automationautomation (dynamic(dynamic curves,curves, sample&hold,sample&hold, linearlinear andand splinespline modes).modes). AudioAudio clipclip time-stretchingtime-stretching (WSOLA-like,(WSOLA-like, librubberband).librubberband). AudioAudio clipclip pitch-shiftingpitch-shifting (librubberband).(librubberband).

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 15 FeaturitisFeaturitis (6)(6)

AudioAudio clipclip seamlessseamless sample-ratesample-rate conversionconversion (libsamplerate).(libsamplerate). AudioAudio // MIDIMIDI tracktrack exportexport (mix-down,(mix-down, merge).merge). AudioAudio // MIDIMIDI metronomemetronome barbar // beatbeat clicks.clicks. UnlimitedUnlimited tempotempo // time-signaturetime-signature map.map. UnlimitedUnlimited locationlocation // barbar markers.markers.

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 16 FeaturitisFeaturitis (7)(7)

MIDIMIDI clipclip editoreditor (matrix(matrix // pianopiano roll).roll). MIDIMIDI instrumentinstrument definitionsdefinitions ((a-laa-la (tm)Cakewalk(tm) (*.ins)),(*.ins)), SoundFontSoundFont (*.sf2)(*.sf2) andand MIDIMIDI NamesNames XMLXML (*.midnam)(*.midnam) filesfiles alsoalso supported.supported. MIDIMIDI controllercontroller mappingmapping // learnlearn // assignmentassignment (mixer(mixer andand plug-inplug-in parameters).parameters). MIDIMIDI systemsystem exclusiveexclusive (SysEx)(SysEx) setups.setups.

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 17 FeaturitisFeaturitis (8)(8)

JACKJACK transporttransport syncsync mastermaster // slave.slave. JACKJACK sessionsession support.support. NSMNSM (Non(Non SessionSession Management)Management) support.support. MMCMMC controlcontrol surfacesurface enabled.enabled. MIDIMIDI SongSong PositionPosition cueingcueing support.support. ConfigurableConfigurable keyboardkeyboard shortcuts.shortcuts.

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 18 ScreenshotScreenshot !!

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 19 EvilEvil FlowFlow DiagramDiagram (1)(1)

Input Output in monitor out Bus Bus

monitor Track R Clips M S

monitor = Volume / Pan Track Plug-ins R Clips M S R = ... M = Mute

monitor S = Solo Track R Clips M S ...

Input Output in monitor out Bus Bus

monitor Track R Clips M S

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 20 EvilEvil FlowFlow DiagramDiagram (2)(2)

Audio strip

vol pan plug-ins Audio in Audio out

meter

Plug-ins Audio fx Audio fx Audio fx Audio fx

Audio in Audio out

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 21 EvilEvil FlowFlow DiagramDiagram (3)(3)

MIDI strip

vol pan MIDI out MIDI in plug-ins Audio out

meter

plug-ins MIDI fx MIDI Audio fx Audio fx instrument MIDI in Audio out

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 22 SendSend // ReturnReturn InsertsInserts n r d u t n e e r s

Send Gain

Dry / Wet in out

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 23 Aux-SendAux-Send InsertsInserts

Output Bus 2 d n e s Aux Send

Send Gain Track / Bus 1

in out

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 24 What'sWhat's stillstill missingmissing ??

NotNot inin anyany particularparticular order:order:

● MIDIMIDI TimeTime CodeCode // SMPTESMPTE ● Auto-crossAuto-cross fadingfading ● JACK-MIDIJACK-MIDI ● OSCOSC InterfaceInterface ● IntegratedIntegrated scriptingscripting (angelscript(angelscript ?)?)

YourYour suggestion(s)suggestion(s) herehere !!

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 25 Shortcomings...Shortcomings...

InIn somesome particularparticular order:order: ● ConnectingConnecting audioaudio outputsoutputs toto ownown inputs.inputs. ● NoNo automationautomation forfor buses.buses. ● NoNo freezefreeze ofof MIDIMIDI // InstrumentInstrument tracks.tracks. ● NoNo post-faderpost-fader plug-inplug-in inserts.inserts. ● NoNo MIDIMIDI tracktrack aux-sends.aux-sends. ● NoNo MIDIMIDI controllercontroller shortcuts,shortcuts, butbut MMC,MMC, SPPSPP forfor transport.transport. YourYour complaint(s)complaint(s) herehere !!

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 26 QQ && AA TenTen YearsYears ofof Qstuff*Qstuff* IsIs itit goodgood enoughenough alreadyalready ??

All of Qstuff* are free / open-source software; you can redistribute it and / or modify it under the terms of the GNU General Public License version 2 or later. It is being possible through the knowledgeable, direct and / or indirect collaborative efforts of the Audio Developers and Users communities.

Thank you all.

Ten Years of Qstuff* - LAC2015@JGU-Mainz - rncbc.org April 2015 27