TME05 FMOL Architecture - ETIC UPFsjorda/TME2003-4/TME05_FMOL_Architecture.pdfFMOL (F@ust Music On...

57
FMOL Architecture FMOL Architecture Sergi Sergi Jord Jord à à [email protected] [email protected]

Transcript of TME05 FMOL Architecture - ETIC UPFsjorda/TME2003-4/TME05_FMOL_Architecture.pdfFMOL (F@ust Music On...

FMOL ArchitectureFMOL Architecture

Sergi Sergi JordJordàà

[email protected]@iua.upf.es

FMOL (FMOL (F@ustF@ust Music On Line) 1997Music On Line) 1997--20012001

?? Project for la Project for la FuraFura delsdels Baus, Baus, F@ustF@ust 3.03.0 show (show (based on Goethebased on Goethe’’ss))Given the important role symbolized by the Internet in our play Given the important role symbolized by the Internet in our play , we , we would like part of its music be composed by would like part of its music be composed by cybercomposerscybercomposers around around the worldthe world

?? Excerpts from the FMOL Decalogue (Excerpts from the FMOL Decalogue (S.JordS.Jordàà & & C.PadrissaC.Padrissa, 1997, 1997))§§ We donWe don’’t want MIDI musict want MIDI music§§ We donWe don’’t want notes, we want Soundt want notes, we want Sound§§ We donWe don’’t want Keyboardists, we want Sound Sculptorst want Keyboardists, we want Sound Sculptors§§ We wonWe won’’t demand composers more gear than a 50$ t demand composers more gear than a 50$

multimedia soundcard and an Internet connectionmultimedia soundcard and an Internet connection§§ Music will be composed in realMusic will be composed in real--time with the mousetime with the mouse§§ New composers will be able to modify, process or distort New composers will be able to modify, process or distort

previous compositions.previous compositions.§§ FMOL output will literally be FMOL output will literally be visual musicvisual music

Musical & Social ImplicationsMusical & Social Implications

?? FMOL 1.0 (18 Jan FMOL 1.0 (18 Jan –– 16 April 1998) : + 1.200 2016 April 1998) : + 1.200 20””--compositions from + 50 composerscompositions from + 50 composers§§ 50 compositions selected and included in 50 compositions selected and included in F@ustF@ust 3.0 3.0

soundtracksoundtrack§§ CD with CD with ““remixesremixes”” by 12 authors, late 1998by 12 authors, late 1998

?? FMOL 2.0 (1 Sept FMOL 2.0 (1 Sept –– 8 Oct 2000) : + 600 608 Oct 2000) : + 600 60””--compositionscompositions§§ Selected ones constitute the electronic parts of the Selected ones constitute the electronic parts of the

(otherwise orchestral) opera DQ (premiered at the (otherwise orchestral) opera DQ (premiered at the GranGranTeatreTeatre del del LiceuLiceu of Barcelona, Nov. 2000)of Barcelona, Nov. 2000)

FMOL (FMOL (F@ustF@ust Music On Line) 1997Music On Line) 1997--20012001

?? Primary goalsPrimary goals§§ Collective composition on the NetCollective composition on the Net§§ Introduce newcomers into experimental electronic musicIntroduce newcomers into experimental electronic music§§ ““CheapCheap”” (free) and available (no special hardware)(free) and available (no special hardware)§§ ““Sound over notesSound over notes”” priority (micro+macro control and priority (micro+macro control and NONO General General

MIDI !)MIDI !)§§ Attractive to both trained and nonAttractive to both trained and non--trained electronic musicians trained electronic musicians

(i.e. intuitive but intricate...)(i.e. intuitive but intricate...)

?? Technical solutionsTechnical solutions§§ Mouse driven software for RT synthesis Mouse driven software for RT synthesis andand RT composition with RT composition with

peculiar peculiar ““visual feedbackvisual feedback”” interfaceinterface§§ Standalone C program with HTTP facilities (on v. 1.0)Standalone C program with HTTP facilities (on v. 1.0)§§ Restricted to MS Windows (Direct X libraries)Restricted to MS Windows (Direct X libraries)§§ Non realNon real--time collaboration (halftime collaboration (half--duplex: duplex: first listen then modifyfirst listen then modify))

Direct X and Direct SoundDirect X and Direct SoundWindows, 3 ways for realWindows, 3 ways for real--time audio:time audio:

?? MME API (Microsoft Multimedia Extensions, older, bigger latency,MME API (Microsoft Multimedia Extensions, older, bigger latency, uses uses winmm.libwinmm.lib ))

?? DirectSound API (part of Microsoft DirectX, medium latency, suppDirectSound API (part of Microsoft DirectX, medium latency, supports orts ActiveX ActiveX pluginsplugins (?), does not work on NT 4.0 or <, works on (?), does not work on NT 4.0 or <, works on W95,98,ME,2000 and XP, uses W95,98,ME,2000 and XP, uses winmm.libwinmm.lib + + DSound.libDSound.lib))

?? AsioAsio (Steinberg, smaller latency, not all cards provide drivers)(Steinberg, smaller latency, not all cards provide drivers)

FMOL was made with DX 3.0 (currently DX 8.0 but back compatibiliFMOL was made with DX 3.0 (currently DX 8.0 but back compatibility) ty) and also uses DirectDraw for the GUI (and also uses DirectDraw for the GUI (DDraw.libDDraw.lib))

About DirectSound (from MS doc)About DirectSound (from MS doc)

?? The MicrosoftThe Microsoft®® DirectSoundDirectSound®® application programming interface (API) is the application programming interface (API) is the wavewave--audio component of the DirectXaudio component of the DirectX®®. DirectSound provides low. DirectSound provides low--latency latency mixing, hardware acceleration, and direct access to the sound demixing, hardware acceleration, and direct access to the sound device. It vice. It provides this functionality while maintaining compatibility withprovides this functionality while maintaining compatibility with existing device existing device drivers.drivers.

?? DirectSound enables both capture and playback of wave sounds. ItDirectSound enables both capture and playback of wave sounds. It also also supports property sets, which enable application developers to tsupports property sets, which enable application developers to take advantage ake advantage of extended services offered by sound cards and their associatedof extended services offered by sound cards and their associated drivers.drivers.

§§ Querying hardware capabilities at run time to determine the bestQuerying hardware capabilities at run time to determine the best solution for any solution for any given personal computer configuration [x]given personal computer configuration [x]

§§ Using property sets so that new hardware capabilities can be expUsing property sets so that new hardware capabilities can be exploited even when loited even when they are not directly supported by DirectSoundthey are not directly supported by DirectSound

§§ LowLow--latency mixing of audio streams for rapid response (not used)latency mixing of audio streams for rapid response (not used)§§ Implementing three dimensional (3Implementing three dimensional (3--D) soundD) sound§§ Capturing sound [x]Capturing sound [x]

[x] used in FMOL[x] used in FMOL

Direct Sound (and 2)Direct Sound (and 2)

?? The DirectSound buffer object represents a buffer containing souThe DirectSound buffer object represents a buffer containing sound nd data. Buffer objects are used to start, stop, and pause sound pldata. Buffer objects are used to start, stop, and pause sound playback, ayback, as well as to set attributes such as frequency and format.as well as to set attributes such as frequency and format.

?? The The primary sound bufferprimary sound buffer holds the audio that the listener will hear. holds the audio that the listener will hear. Secondary sound buffersSecondary sound buffers each contain a single sound or stream of each contain a single sound or stream of audio. DirectSound automatically creates a primary buffer, but iaudio. DirectSound automatically creates a primary buffer, but it is the t is the application's responsibility to create secondary buffers. When sapplication's responsibility to create secondary buffers. When sounds in ounds in secondary buffers are played, DirectSound mixes them in the primsecondary buffers are played, DirectSound mixes them in the primary ary buffer and sends them to the output device. Only the available buffer and sends them to the output device. Only the available processing time limits the number of buffers that DirectSound caprocessing time limits the number of buffers that DirectSound can mix.n mix.

?? The FMOL application is responsible for the mixing into a The FMOL application is responsible for the mixing into a ““principalprincipal””secondary buffer.secondary buffer.

Threads and SynchronicityThreads and Synchronicity?? MME uses a Win32 thread. Writes blocks of data to the HW device MME uses a Win32 thread. Writes blocks of data to the HW device and waits and waits

for events that signal buffer completion.for events that signal buffer completion.?? DirectSound Uses a timer callback for the background "thread". PDirectSound Uses a timer callback for the background "thread". Polls a olls a

circular buffer and writes blocks of data to keep it full.circular buffer and writes blocks of data to keep it full.

(information taken from Phil Burk(information taken from Phil Burk’’s and Ross s and Ross BencinaBencina’’ss PortAudioPortAudio))

In FMOL a unique clock controls the application main loop. At eaIn FMOL a unique clock controls the application main loop. At each frame:ch frame:1.1. Checks inputs (from mouse, keyboard and MIDI IN)Checks inputs (from mouse, keyboard and MIDI IN)2.2. Maps input info into control values, generates new values accordMaps input info into control values, generates new values according to ing to LFOsLFOs, ,

[sequences these control values], [outputs them to MIDI OUT], [r[sequences these control values], [outputs them to MIDI OUT], [read more values ead more values from scheduler]from scheduler]

3.3. Redraws horizontal lines according to the inputs and the controlRedraws horizontal lines according to the inputs and the control valuesvalues4.4. Redraws 6(8) strings after the 6(8) buffer contents (Redraws 6(8) strings after the 6(8) buffer contents (prevprev. frame). frame)5.5. Applies all control values to the Applies all control values to the synthsynth engineengine6.6. 6 (8) tracks are calculated (synthesized, processed6 (8) tracks are calculated (synthesized, processed……) with these values (in 6 ) with these values (in 6 ––88--

independent independent ““forfor”” loops)loops)7.7. 6 (8) tracks are mixed into main secondary buffer6 (8) tracks are mixed into main secondary buffer

NB. NB. But the program uses the But the program uses the MultithreadedMultithreaded runrun--time library.time library.

FMOL Track ArchitectureFMOL Track Architecture

?? 8 independent stereo tracks (28 independent stereo tracks (2--sec. each)sec. each)?? Mixed synchronously into a DS stereo secondary buffer (also Mixed synchronously into a DS stereo secondary buffer (also

22--sec)sec)

NB. 25 Hz is not true anymore. Now configurable in a text file NB. 25 Hz is not true anymore. Now configurable in a text file ((bambu.inibambu.ini). With a PIII almost 100 Hz can be achieved with no gaps.). With a PIII almost 100 Hz can be achieved with no gaps.

track MIX

track 1

track 2

track 3

...

Block (1/25 sec)

Tracks (2 sec)

circular

... ...

Primary Buffer 1/25 sec (x2)

1/25 seg 1/25 seg

Configured at 25 Hz

+

+

Excerpt from bambu.ini

[RTI]

FPS=50

[DirectSound]

wDevice=1

wMidiInDevice=255

wMidiOutDevice=255

bMidiOwnStrings=63

wFreq=22050

szTrcFile="DirectSound.log"

nTrcLevel=1

bTrcOverwrite=1

wBufferTime=2000

wBlockTime=40

wPlayAhead=80

bSync=1

FMOLFMOL’’ss SynthSynth EngineEngine?? 6 (8) audio channels (independent or not)6 (8) audio channels (independent or not)?? For each channel: 1 generator & 3 processors (selectable from moFor each channel: 1 generator & 3 processors (selectable from more than 100 re than 100

algorithms or variations)algorithms or variations)

?? For each generatorFor each generator--processor: 4 of its processor: 4 of its parameters are controlled parameters are controlled by independent by independent LFOsLFOs(total of 6x4x4=96 (total of 6x4x4=96 simultaneous simultaneous LFOsLFOs))

?? For each LFO, dynamic For each LFO, dynamic control on frequency, control on frequency, amplitude & shape (sin, amplitude & shape (sin, square, saw, triangle, square, saw, triangle, random)random)

?? LFOsLFOs are fundamental for are fundamental for all FMOL time evolution all FMOL time evolution (no use of prerecorded (no use of prerecorded sequences)sequences)

Clock Code FragmentsClock Code Fragments

FMOL.cppFMOL.cpp [[WinMainWinMain()] ()] àà see see FMOLApp.RunFMOLApp.Run();();FMOLApp.cppFMOLApp.cpp [:Run()] [:Run()] àà see see rti.Runrti.Run();();RTI.cppRTI.cpp [:Run()][:Run()]

The main loop is in The main loop is in BambuLoop.cppBambuLoop.cpp [[AppUpdateAppUpdate()] ()]

FMOL Demo 1FMOL Demo 1

1.1. Instruments configurationInstruments configuration2.2. Pitch and amplitude controlPitch and amplitude control3.3. Showing different algorithmsShowing different algorithms4.4. Effects controlEffects control5.5. ArpeggiatorArpeggiator6.6. LFOsLFOs7.7. Generators and processorsGenerators and processors

FMOL FMOL ConfigurationConfiguration window and graphical interfacewindow and graphical interface

Synthesis instruments / Sampler instruments / Filters / Processing Instruments (2+2+2+2)…

FMOL Synthesis and Processing AlgorithmsFMOL Synthesis and Processing Algorithms

######################################################################################################################################### PROGRAM CHANGES# PROGRAM CHANGES# # ------------------------------# PGM_SINUSO 0 PGM_SCRFRE 1 PGM_SAMPLE 2 PGM_# PGM_SINUSO 0 PGM_SCRFRE 1 PGM_SAMPLE 2 PGM_SQUARE 3SQUARE 3# PGM_PULSES 4 PGM_WNOISE 5 PGM_KARPLU 6 PGM_# PGM_PULSES 4 PGM_WNOISE 5 PGM_KARPLU 6 PGM_BINMOD 7BINMOD 7# PGM_GRANUL 8 PGM_GRANSI 9 PGM_REVERB 10 PGM_# PGM_GRANUL 8 PGM_GRANSI 9 PGM_REVERB 10 PGM_RESONA 11RESONA 11# PGM_COMREV 12 PGM_COMFIL 13 PGM_COMECO 14 PGM_# PGM_COMREV 12 PGM_COMFIL 13 PGM_COMECO 14 PGM_COMDEL 15COMDEL 15# PGM_PANORA 16 PGM_HIGLOW 17 PGM_PITSHI 18 PGM_# PGM_PANORA 16 PGM_HIGLOW 17 PGM_PITSHI 18 PGM_KARPFI 19KARPFI 19# PGM_AMMO12 20 PGM_RIMO12 21 PGM_AMMODU 22 PGM_# PGM_AMMO12 20 PGM_RIMO12 21 PGM_AMMODU 22 PGM_RINMOD 23RINMOD 23# PGM_BINMOF 24 PGM_BINMOH 25 PGM_BINMHF 26# PGM_BINMOF 24 PGM_BINMOH 25 PGM_BINMHF 26 PGM_LINEIN 27PGM_LINEIN 27

# PGM_PARAM 28 PGM_SAW 29# PGM_PARAM 28 PGM_SAW 29

##########################################################################################################################################

The main MFC applications shows the instrument list reading the configurationfile (*.cfg)

FMOL 1.0 main FMOL 1.0 main algorithms and their two algorithms and their two primary parametersprimary parameters

In FMOL 1.0 (on-line 98) the 2+2+2+2 structure of the program forced the collaborative approach

FMOL 2.0 (on-line 2000) added new playing and overdub features and keys è less collaboration !

FMOL Class libraryFMOL Class library

FMOL is very object orientedFMOL is very object oriented?? CSPluginCSPlugin is the base class for all sound generation is the base class for all sound generation

processes:processes:?? CSPSourceCSPSource is the base class for classes that generate is the base class for classes that generate

sound sound -- fill buffersfill buffers?? CSPSampleCSPSample or or CSPSenoCSPSeno derive from derive from CSPSourceCSPSource?? audio input is carried by audio input is carried by CSPLineInCSPLineIn also derived from also derived from

CSPSourceCSPSource?? CSPFilterCSPFilter is the base class for classes that process sound is the base class for classes that process sound --

modify buffers modify buffers ?? CSPReverbCSPReverb or or CSPCombCSPComb derive from derive from CSPFilterCSPFilter?? CSPSourceCSPSource and and CSPFilterCSPFilter both derive from both derive from CSPlugInCSPlugIn

CSPAMModCSPAMMod dependencydependency treetree

CSPluginCSPlugin OverviewOverview

CSPlugInCSPlugIn has (among others) the following properties:has (among others) the following properties:CSoundTrackCSoundTrack **pSTpST; //write to; //write toCPlugTrackCPlugTrack *pSTIn1, *pSTIn2; //read from*pSTIn1, *pSTIn2; //read from((CPlugTrackCPlugTrack derives also from derives also from CSoundTrackCSoundTrack))

Some important methods:Some important methods:virtual BOOL virtual BOOL NextBlockNextBlock(); (); //main sound loop//main sound loopvirtual void virtual void On(voidOn(void);); //called when //called when pluginplugin startsstartsvirtual void Off(void); virtual void Off(void); //called when //called when pluginplugin stopsstopsvirtual void Change(BYTE virtual void Change(BYTE nParam,LONGnParam,LONG iValueiValue); //called on control ); //called on control changeschanges

CSPSourceCSPSource adds important methods such as:adds important methods such as:void void FillFreqMap(doubleFillFreqMap(double freqMinfreqMin, double , double freqMaxfreqMax, WORD , WORD iMiniMin, WORD , WORD iMaxiMax););

Or redefines others as:Or redefines others as: Change(BYTE Change(BYTE nParam,LONGnParam,LONG iValueiValue););

CSPFilterCSPFilter does not add anything (does not add anything (only zeroes reading tracksonly zeroes reading tracks))pSTIn1 = pSTIn2 = NULL;pSTIn1 = pSTIn2 = NULL;

CSoundTrackCSoundTrack

The :The :NextBlockNextBlock() Method() MethodA A forfor loop loop forfor thethe sizesize ofof a a frameframe -- SimplestSimplest exampleexample: Delta pulse : Delta pulse synthsynth

BOOL BOOL CSPPulseCSPPulse::::NextBlockNextBlock()(){{

ifif (!(!CSPSourceCSPSource::::NextBlockNextBlock()) ()) returnreturn FALSE;FALSE;

SHORT SHORT valval=(=(SHORT)wAmpSHORT)wAmp;;forfor (DWORD i=0; (DWORD i=0; i<pSTi<pST-->>dwBlockSmpsdwBlockSmps; ++i); ++i){{

----n;n;ifif (n<=0) (n<=0) {{

pSTpST-->>Out(valOut(val>>ATTENUATE);>>ATTENUATE);n = n = wPeriodwPeriod; //; //wSlidePerwSlidePer;;

}}elseelse pSTpST-->Out(0);>Out(0);

}}returnreturn TRUE;TRUE;

}}

pSTpST isis a a membermember ofof CSPluginCSPlugin ((itit isis a a CSoundTrackCSoundTrack*)*)

cfg. practica-4.pdf, practica-5.pdf and practica-6.pdf for additional information aboutcreating new derived instruments (tutorials for 3rd year ESUP students)

NextBlock for the superclasse and forthe simplest case (Pulse generator)

?? pSTpST-->>Out(shortOut(short) ) writeswrites toto thethe tracktrack buffer buffer andand advancesadvances thethe indexindex..?? pSTpST-->In(>In(--indexindex) ) returnreturn previousprevious valuesvalues

e.g. a e.g. a lineline ofof KarplusKarplus--StrongStrong algorithmalgorithm::valval = (= (pSTpST-->In(>In(--1) + 1) + pSTpST-->In(>In(--wPeriodwPeriod))>>1;))>>1;

?? A A generatorgenerator thatthat isis a a processorprocessor (e.g. (e.g. RingRing ModulatorModulator) uses ) uses pST1pST1-->In() >In() andand optionallyoptionally pST2pST2-->In()>In()

OtherOther MethodsMethods::?? OnOn() () calledcalled whenwhen soundsound oror a a newnew note note startsstarts ((seesee CSPPulseCSPPulse))?? OffOff() () calledcalled whenwhen soundsound stopsstops ((automaticautomatic decaydecay))?? ChangeChange() () calledcalled whenwhen parametersparameters changechange

The :The :NextBlockNextBlock() Method (2)() Method (2)

On method for the (1) superclass, (2) a simple case (Square wave) and (3) how ramps are added at the beginning and end of any sound, with the fSubStatus(assigned in CSPlugin but applied in every NextBlock). The code for SetAttack & SetDecay (from CSPLugin - see next slide) does never need to be overwritten

SetAttackSetAttack & & SetDecaySetDecay

Embedded Embedded LFOsLFOs

?? TheThe classclass CSTLfoCSTLfo includesincludes 4 4 LFOsLFOs?? CSTLfoCSTLfo isis a a membermember ofof CSPluginCSPlugin àà

EachEach FMOL FMOL instrumentinstrument has 4 has 4 LFOsLFOs thatthat can can makemake oscillateoscillate anyany ofof thethe instrumentinstrument 4 4 mainmainparametersparameters

FMOL Demo 2FMOL Demo 2

1.1. ArpeggiatorArpeggiator2.2. LFOsLFOs

FMOL Synthesis and Processing AlgorithmsFMOL Synthesis and Processing Algorithms

######################################################################################################################################### PROGRAM CHANGES# PROGRAM CHANGES# # ------------------------------# PGM_SINUSO 0 PGM_SCRFRE 1 PGM_SAMPLE 2 PGM_# PGM_SINUSO 0 PGM_SCRFRE 1 PGM_SAMPLE 2 PGM_SQUARE 3SQUARE 3# PGM_PULSES 4 PGM_WNOISE 5 PGM_KARPLU 6 PGM_# PGM_PULSES 4 PGM_WNOISE 5 PGM_KARPLU 6 PGM_BINMOD 7BINMOD 7# PGM_GRANUL 8 PGM_GRANSI 9 PGM_REVERB 10 PGM_# PGM_GRANUL 8 PGM_GRANSI 9 PGM_REVERB 10 PGM_RESONA 11RESONA 11# PGM_COMREV 12 PGM_COMFIL 13 PGM_COMECO 14 PGM_# PGM_COMREV 12 PGM_COMFIL 13 PGM_COMECO 14 PGM_COMDEL 15COMDEL 15# PGM_PANORA 16 PGM_HIGLOW 17 PGM_PITSHI 18 PGM_# PGM_PANORA 16 PGM_HIGLOW 17 PGM_PITSHI 18 PGM_KARPFI 19KARPFI 19# PGM_AMMO12 20 PGM_RIMO12 21 PGM_AMMODU 22 PGM_# PGM_AMMO12 20 PGM_RIMO12 21 PGM_AMMODU 22 PGM_RINMOD 23RINMOD 23# PGM_BINMOF 24 PGM_BINMOH 25 PGM_BINMHF 26# PGM_BINMOF 24 PGM_BINMOH 25 PGM_BINMHF 26 PGM_LINEIN 27PGM_LINEIN 27

# PGM_PARAM 28 PGM_SAW 29# PGM_PARAM 28 PGM_SAW 29

##########################################################################################################################################

The main MFC applications shows the instrument list reading the configurationfile (*.cfg)

FMOL 1.0 main FMOL 1.0 main algorithms and their two algorithms and their two primary parametersprimary parameters

In FMOL 1.0 (on-line 98) the 2+2+2+2 structure of the program forced the collaborative approach

FMOL 2.0 (on-line 2000) added new playing and overdub features and keys è less collaboration !

TheThe GeneratorGenerator & & ProcessorProcessor classesclasses

Constructing InstrumentsConstructing Instruments

?? (Veure informaci(Veure informacióó en el enunciat de la en el enunciat de la prprààctica)ctica)

Bamboo GUI (1)Bamboo GUI (1)

Bamboo GUI (2)Bamboo GUI (2)

FMOL (2.0) keys allow to

§ Sustain strings [1-6] (already in 1.0)

§ Mute/unmute strings [Z-N] (already in 1.0)

§ Record and retrieve mouse gestures [A,S] (already in 1.0)

§ Record [D] and retrieve up to 8 snapshots [F-Ç]§ Change LFO wave [TAB,CAPS,SHIFT,CTRL]§ and more in FMOL 3.0 (private FMOL trio version) ….

Bamboo GUI (3)Bamboo GUI (3)

MIDI Control and MappingsMIDI Control and Mappings

CSPlugInCSPlugIn::::ChangeChange()()

Snapshots and SequencingSnapshots and Sequencing

File formatsFile formats

Communication with the main Communication with the main MFC programMFC program

Speed TricksSpeed Tricks

Additional Comments about AlgorithmsAdditional Comments about Algorithms

Net features (nonNet features (non--realreal--time)time)

Collective Compositional ModelsCollective Compositional Models

?? Options:Options:§§ FreeFree§§ Horizontal (i.e. Horizontal (i.e. ““exquisiteexquisite--corpsescorpses””))§§ Vertical (Vertical (multitrackmultitrack--overdub) overdub) çç

New composers can add new layers, and process/distort existing oNew composers can add new layers, and process/distort existing onesnes(they can also start new pieces from scratch)(they can also start new pieces from scratch)

èè Tree like database for storing uploaded pieces (synthesis Tree like database for storing uploaded pieces (synthesis engine and GUI are also very tightly related to this engine and GUI are also very tightly related to this concept)concept)

FMOL 2.0 database is now accessible from a web browserFMOL 2.0 database is now accessible from a web browserhttp://teatredigital.fib.upc.es/DQ/eng/fmol/database.htm

§ FMOL behaves now like a browser plug-in (clicking a node downloads its scorefile and runs the program)

§ Register, login, upload, query…features are done from the HTML page

§ Lighter program

§ Database is accessible to curious surfers

FMOL 1.0 Authorship TrackingFMOL 1.0 Authorship Tracking

1.1. At La At La FuraFura’’ss request, the SGAE sponsored the request, the SGAE sponsored the FMOL 1.0 projectFMOL 1.0 project

2.2. Users registered (alias, eUsers registered (alias, e--mailmail……) within the ) within the system before being able to upload filessystem before being able to upload files

3.3. ScorefilesScorefiles tracked their multiple authors identitiestracked their multiple authors identities4.4. SGAE facilitated registration proceedings of SGAE facilitated registration proceedings of

selected and nonselected and non--associate authorsassociate authors5.5. SGAE tracked their rightsSGAE tracked their rights6.6. Several selected Internet authors received more Several selected Internet authors received more

than 1.000$ during than 1.000$ during F@ustF@ust 3.0 tour (19983.0 tour (1998--2000)2000)

Musical & Social ImplicationsMusical & Social Implications

?? FMOL 1.0 (18 Jan FMOL 1.0 (18 Jan –– 16 April 1998) : + 1.200 2016 April 1998) : + 1.200 20””--compositions from + 50 composerscompositions from + 50 composers§§ 50 compositions selected and included in 50 compositions selected and included in F@ustF@ust 3.0 3.0

soundtracksoundtrack§§ CD with CD with ““remixesremixes”” by 12 authors, late 1998by 12 authors, late 1998

?? FMOL 2.0 (1 Sept FMOL 2.0 (1 Sept –– 8 Oct 2000) : + 600 608 Oct 2000) : + 600 60””--compositionscompositions§§ Selected ones constitute the electronic parts of the Selected ones constitute the electronic parts of the

(otherwise orchestral) opera DQ (premiered at the (otherwise orchestral) opera DQ (premiered at the GranGranTeatreTeatre del del LiceuLiceu of Barcelona, Nov. 2000)of Barcelona, Nov. 2000)

Net features (realNet features (real--time): Nettime): Net--jammingjamming

?? Allow realAllow real--time multitime multi--user interactionuser interaction?? Constraints imposed by current internet Constraints imposed by current internet

technologytechnology§§ High latency will cause delays of 500High latency will cause delays of 500--1000ms to music 1000ms to music

played on a computer and listened on anotherplayed on a computer and listened on another§§ Lack of a global reliable synchronism reference for the Lack of a global reliable synchronism reference for the

distributed synthesis enginesdistributed synthesis engines

?? Due to the Due to the timbricaltimbrical nature of the synthesis nature of the synthesis engine, FMOL music has a high amount of engine, FMOL music has a high amount of robustness towards the internet constraints robustness towards the internet constraints ((AtauAtau Tanaka: Tanaka: InternetInternet’’s latency can be seen as cyberspaces latency can be seen as cyberspace’’s acoustics acoustic))

FMOL netFMOL net--jam session serverjam session server

?? Asynchronous and multipoint realAsynchronous and multipoint real--time messaging server time messaging server (probably based on Phil Burk(probably based on Phil Burk’’s s TransjamTransjam protocol)protocol)

?? Server listens to periodically incoming messages from the Server listens to periodically incoming messages from the clientclient

?? At every frame (48times/sec) each client sends the At every frame (48times/sec) each client sends the generated events to the server generated events to the server

?? RealReal--time typical data rates of 60time typical data rates of 60--180 bytes/second180 bytes/second?? Server redistributes all the generated messages (except Server redistributes all the generated messages (except

clientclient’’s own) to all the clients at same s own) to all the clients at same framerateframerate

Open problem of netOpen problem of net--jammingjamming

?? Each client listens to a slightly different mixEach client listens to a slightly different mix?? The session server listens to yet another The session server listens to yet another

mixmix?? Which is the Which is the ““goodgood”” one then, and which one then, and which

one (ones) should be stored?one (ones) should be stored?