diff --git a/doc/kc_play_directions.txt b/doc/kc_play_directions.txt deleted file mode 100644 index 6ded162..0000000 --- a/doc/kc_play_directions.txt +++ /dev/null @@ -1,53 +0,0 @@ -0) Log-in to Mac as 'kevin'. - -1) Setup hardware - a. Turn on MOTU Traveler (MOTU Audio Setup window shows up on Mac) - b. Turn on mixer. - Channel 1: Transformation Left (Mute button down) - 2: Transformation Right (Mute button down) - 3: Dry Piano Left (Mute button up) - 4: Dry Piano Right (Mute button up) - -2) Start Ivory - a. Insert ILOK - b. Select Ivory Standalone from Mac Menu. - c. Select 'Program Preset' "German Concert D Grand" - d. Audio | Device = Soundflower (2ch) - -3) Start 'kc' - a. Right click on: src | kc | build | osx | debug | bin | kc - and select 'Open'. - - b. The grey 'kc' window will open and a white terminal window - will open behind it. The terminal window will end with - the message: - "UDP Network error: The JSON 'udpnet' element was not found. (RC:9)" - (Contrary to what it says this is a not an error message.) - - c. Select the 'Enable Audio' checkbox. Some text will be printed - to the terminal window. - - mode:1 - mode:1 - wsn:2048 hsn:512 - wsn:1024 hsn:256 - wsn:2048 hsn:512 - wsn:1024 hsn:256 - mode:1 - mode:1 - /Users/kevin/temp/score_temp.mid : 0 - A7 : 0 - /Users/kevin/temp/score_temp.mid : 0 - A7 : 0 - - d. Select the 'Main' tab. - - e. Push the 'Start' button to begin playback. - If playback does not start and errors show up in the - terminal window goto a. - - f. By default playback begins from measure 1. - To begin playback from a different measure - enter the measure number in the edit box - labelled 'meas' and preset enter. - diff --git a/doc/new_dsp.txt b/doc/new_dsp.txt deleted file mode 100644 index 5f50832..0000000 --- a/doc/new_dsp.txt +++ /dev/null @@ -1,124 +0,0 @@ - - - - - -ain audio_in chs:2 gain:[.5 .3] -lpf bquad chs:2 type:[lpf hpf] fc:100 Q:3.2 -aout audio_out chs:2 gain:.4 - - -igain.val -> gain.ain - -ain.out -> in.lpf.out -> in.aout - -> in.oscope - - - -ain.out[0] -> [0].in.lpf.out ->in.aout - - -Built-in Data Types: --------------------- -bool -int -uint -float -double -symbol -string - -boolM -intM -uintM -floatM -doubleM -symbolM -stringM - -function - -array : mixed type arrays -struct : user definable structures - - -Support Functions: -copy() -toString() -fromString() -Math Op's. -String Op's. -Custom ops of the form: function( const struct* inputs, struct* outputs ). - - - -Functions: ----------- -List of named inputs and outputs, implemented according to the -above data types, along with known functions: - -Constructor() : Allocate object based on resource struct. -Destructor() : Release object. -Setup() : Determine runtime configuration based on input types. -Exec() : Audio rate execution. -SetInput() : Control rate updates. -GetValue() : Query state values. -StoreState() : Store the current state of the object as a preset. -RestoreState() : Recall a previously stored preset. - - -User Interface: ---------------- -The user interface is formed by instantiating user interface -elements for function inputs. In this way most user interface -elements do not have to be explicitely connected because they -are inherently connected. This does not preclude either -connecting the same control to other functions or the use -of UI-only functions. - - -Sub-Programs: -------------- - - - -Generic System Changes: ------------------------ -1) Error handling: - - Use a predefined set of generic error codes with the possiblity of - adding custom codes. - - - Use a generic error handler macro which jumps to 'errLabel' on fail. - cmErrTry( err, rc, function_returning_error_code() ) - cmErrTryMsg( err, rc, function_returning_error_code(), "Error msg %i ", value ); - - - - Global functions, (i.e, those functions which do not have a manager) should - take optional error object points. These functions include memory mgmt, - file mgmt, text mgmt, ... - -2) Develop a transparent, multi-dimensional, matrix class. - -3) cmCtx_t extensions. - - The cmCtx_t context should be considered a singleton global object, whose - life extends for the entire program. This will eliminate needing to duplicate - the context. - - - Possibly add a JSON tree to pass global program cfg. information. - -4) Simplify the low level processing object design. - - Eliminate the alternative cmCtx type and use the cmCtx_t class. - - Eliminate the distinction between allocation and initialization. - -5) Make use of thread local memory for allocating scratch memory - which does not need to be deleted. - -6) Add a cmMemPrintf() function to create dynamcially allocated formatted strings. - -7) Figure out the text encoding thing. - -8) Eliminate the cmXXXIsValid() function - this can be provided - by a generic function (or macro). - -9) Make the documentation work from the start. - diff --git a/doc/notes.txt b/doc/notes.txt deleted file mode 100644 index 050b713..0000000 --- a/doc/notes.txt +++ /dev/null @@ -1,847 +0,0 @@ -CONTENTS: - -1) TODO List -2) OSX Install Notes - - -SPAT LAB SETUP: -+ 1. Stereo - a. TotalMix - select 'diff. stereo' snapshot - b. mixer: Recall preset 91 ('stereo diff') -+ 2. Direct - 24 channels - each channel goes in and out on same number. - a. TotalMix - select 'DTS_24ch' - b. mixer: Recall preset 96 ('24ch firecac ufx') - -============================================================================= -Equipment List: - -1) Two DPA 4011 cardioid mic's. -2) Two boom mic. stands. -3) FMR Audio RNP8380 pre-amp. -4) Presonus Audiobox 181VLS. -5) Mackie 1604 or equivalent mixer. -6) One MIDI cable (15-20 feet) -7) Four 25 foot power extension cables. -8) Two power strips. -9) Eight short (3-4 ft) balanced 1/4" cables. -10) 8 (25 ft) XLR mic cables. -11) 4 balanced 1/4" to male XLR cables (10 ft) -12) 2 balanced 1/4" to female XLR cables (10 ft) -13) One set of the best headphones you can give me. -14) Diskclavier remote control,power supply, and manual. - -0) Contact Mics -1) MIDI interface and USB -2) MIDI cable -3) MIDI barrel adapter -4) Speakers -5) Speaker power cables -6) Tape for contact mics -7) Scissors for contact mics - -============================================================================= -Take sequence builder development notes. - -1. The MIDI file implementation should not overload the use of the - 'dtick' field in cmMidiTrackMsg_t to contain multiple possible - meanings of time (e.g. tick,microsecond,seconds,samples etc) or at - the very least the current meaning of the field should be held as a - flag in the MIDI file. As it i s the field is ambiguous and it can - be difficult to tell what the meaning of the field is in any given - algorithm that processes it. - -2. Sostenuto pedal should be added to the score and then implemented - in cmMidiFileCalcDurations(). When the sostenuto pedal is down - only notes that are playing when the pedal is depressed are - sustained. - -3 As current written the UI control architecture supports only one - user interface element (kcApp.h::ctl_t) per DSP instance. This - limitation is manifest in kcApp.h::find_ctl() which has no way - to distiguish which of multiple ctl_t's to return from a given - instId. In fact this problem probably goes deeper into the - way that Fl_Widgets and DSP instances are assocated. - -4. TODO: - a) When pedal events are inserted via cmGrTksrFltk the inserted event - is shifted backward in time. - - b) Test the save/restore function of TakeSeqBldr render takes. - c) TakeSeqBldr load should be threaded. - d) Eliminate direct communication between cmGrTksb/rFltk and cmTakeSeqBldr. - All communcation should be serialized. - e) Run with valgrind to see if cmGrGksb/rFltk has any obvious bugs. - f) bar select / take select logic is difficult. - g) There is often a NAN shown in the position select display UI. - h) Add bars to the cmGrTksrFltk view. - -============================================================================= -CHANGES TO SIMULATE MODE TO ALLOW MIDI FILE PLAYER TO DRIVE SCORE -FOLLOWER DIRECTLY RATHER THAN FEEDING SCORE FOLLOWER FROM MIDI INPUT PORT: - -CHANGE: - LINE 1150 cmDspSysInstallCb(h, siRt, "f-out-1", sfp, "smpidx",NULL ); - 1154 cmDspSysInstallCb(h, d0Rt, "f-out-1", sfp, "d0", NULL ); - 1160 cmDspSysInstallCb(h, d1Rt, "f-out-1", sfp, "d1", NULL ); - 1166 cmDspSysInstallCb(h, stRt, "f-out-1", sfp, "status",NULL ); - -BACK TO: - cmDspSysInstallCb(h, siRt, "f-out-0", sfp, "smpidx",NULL ); - cmDspSysInstallCb(h, d0Rt, "f-out-0", sfp, "d0", NULL ); - cmDspSysInstallCb(h, d1Rt, "f-out-0", sfp, "d1", NULL ); - cmDspSysInstallCb(h, stRt, "f-out-0", sfp, "status",NULL ); - - -============================================================================= -Session Notes 3/28/15 -1. 34-38-49-54 (good take sequence) -2. Try combining bins in the SpecDist algorithm as a variaion on the spectral distortion algorithm. - For example the bins coud be combined using a Bark grouping. - - -Session Notes 12/12/14 -1. Write a tool to create multiple MIDI preformances of the piece. - a) Map each segment to the score using the score follower. - b) Where parts overlap allow interactive selection of which part should be selected. - c) Where parts are missing - insert notes from the score. - d) Display the pedal and allow it to be edited. - e) Allow parameter changes to be assigned to performance locations. - - -Session Notes 11/08/14 -1. 127 dynamic level values are not adequate. - we loose quiet notes. the new Steinway instr. should have more velocity bits. - -2. Display the next target score location of cmScModulator() so that it is clear - that cmScoreModulator() is waiting for a score location in the expected place. - Adding a button to dump the cmScModulator() score might also be useful. - -3. JSON parser errors are being sent to the terminal output not the console - output - so they are not easy to not notice. - -4. We need transitsions - We need to be able to audtion presets faster - We need to insert missing pedal information. - -5. Build a complete MIDI version of the piece so that long sections can be run. - -Session Notes: 10/18/14 -1) Contact and air mics ogain all set to 1.0 - Sometimes igain on air mics reduced to control feedback. - Speakers are 10 ft in front of piano - - AudioBox Gains all at 10 oclock. - FMR Preamp 2nd notch on air mics - Mixer 2.5 kHz 10 oclock, 80 Hz 9 oclock. - Mixer in gains 11 oclock w/ 75 Hz low cut engaged - -2) Need input Eq for contact mic's. LP,BP,HP with adjustable xover Fc and Gain. - -3) Preset G works best. With 'offset' used to control radicalization between 20 and 80. - -4) Add a control cmSpecDist() to interpolate between the input and output - spectrum. This would allow a smooth transition between transformed - and untransformed signal. - - The interpolation can be made to be frequency dependent. This could - also be used to counter the bass boost which the transform tends - to produce. - -5) Add 'offset' as a modulator variable. -6) Are the dynamic modulator parameter controls working: line, sline -7) Many of the modulator file labels are redundant - can they be left out? - (When modulator file values are missing they should default to their last set value). - -8) When the score follower triggers a change the change seems to come - before the Disklavier note sounds due to Disklavier system latency. - Add a delay to the input of scMod to compensate for this delay. - -9) The scMod data file would be easier to work with if it was in columnar form. - -Session Notes: 9/28/14 -1) Problems with feedback were mitigated by brining down the input gain. - In generate the input/output gain were set to: - In Gain: 0.7 0.2 - Out Gain: 2.0 2.0 -2) Turning the piano away from the microphones also reduced feedback; probably - due to the fact that the piano lid sheilds the mic's from direct path - from the speakers. -3) Increasing the threshold and and use of mode 4 (Bump Mode) produced the - best transformations. See Preset G in mod_44_45.js -4) Input signal conditioning needs to be added to keep the piano signal - in the effective range of the transform. -5) The Sine Tracking feedback controller is in an uncertain state. - a. The attenThresh setting range needs to be verified. - b. The scoring function was changed and then not verified. - c. The algorithm which compares the trajectory of a given harmonic - to the trajectory of the overall sound needs to be writen. - Harmonics that are increasing relative the overall envelope - should be attenuated. -6) A noise gate might help the reberberation feedback problem (i.e. - the dense wash of sound with tends to build with time) -7) The transform algorithm needs to be developed further to increase - it's reliability and range of effect. -8) Changing window length from the score didn't seem to be working. - -Session Notes: 8/24/14 -0) Investigate using omni mic. in front of speakers to feed input to cmFrqTrk. -1) Feedback from Mark 178, m144, Preset C. - - -Session Notes: 5/24/14 -1) Move mic's back from the Disklavier to decrease damper noise. -2) The head phone signal sounds correct. -3) The the L410 computer is running out of time in release mode. -4) Better quality speakers are required. -5) Build a spectrum analyzer and bank of notch filters or graphic EQ to deal with feedback. -6) The DPA 4011 mics and FMR Audio RNP8380 preamp work well. -7) Whenever the speaker signal gets to the point where the transform can be heard - the feedback begins to occur. - -Session Notes: 1/14/14 -1) The non-grace evenness notes should include a tempo quality evaluation - based on using the 'tfrac' values from column S of the score. -2) Sliver fade outs are currently tied to the reat-time performance not the captured performance. - In the event that the score follower is lost after beginning a sliver playback - and therefore misses the programmed fade out times begin fading out the - sliver after the attack of the last captured note. This means that - the time location of the captured notes must be accurately indicated - in the sliver. -3) Allow fades to be tied to the capture notes - this is easy if 2) is done first. - - -LANGUAGE NOTES: -The primary goal of the language is to initialize a dataflow system. -Sub-goals: -1) Avoid describing domain specific computation in the language. As much as possible constrain the -language to describe initialization tasks (e.g. object allocation, object connection, initialization -parameters, preset grouping, thread/process allocation, UI layout, ...) - -2) Network Distrubution -3) UI Layout - -Runtime: -+ Extensible data-object system. -+ Library organization (platform independent UI description, application objects, app-independent objects, vector library) - - Platform independent UI description is a protocol for describing a UI object and a runtime protocol - for communitcating with the UI which is independent of the UI implementation itself. The UI should be - implementable in FLTK, or Javascript. The UI will always run in separate thread and may run in a - separate process. - - Application objects are plug-ins which follow a similar design to the cmDspProc() objects. - + xs - -NEW DESIGN NOTES: -+ The current designs fundamental weakness is that it uses callbacks to communicate where sequential program - flow would produce a more comprehensible program. - -+ Dataflow is a natural way to express DSP programs but if it is implemented in a textual, rather than - graphical language, then their are some design princles that must be followed in order - to produce comprehensible programs. - 1) Limit the number of connections as much as possible. - - There are many simple UI->param connections - these should be made automatically and UI - objects should not have to be explicitely created - they should be created by the runtime - environment. - - If multiple pieces of data are part of a single message then they should be sent as a unit - rather than separately. This decreases the number of connections and also removes timing - dependencies - where the application programmer has to know the order of transmission of the - individual pieces. (e.g. MIDI messages always contain {status,d0,d1} rather than having to - send d0 and d1 followed by status to indicate the end of the message {status,d0,d1} should - be sent as a single record. - 2) Eliminate as many event ordering issues as possible - See the example in 1). - 3) Alllow the connections between objects to be made as part of the object allocation. - 4) Allow subprograms to be made. This decreases the complexity of the programs and because - it allows the programs to be organized hierarchically. It also allows the subprograms to - be tested idenpendently. - 5) A natural way to express object multiplicity is required. (e.g. multiple channels). - This leads to a way to naturally create parallel/fan-in/fan-out connections. - -+ One way to solve some of the problems of the current program would be to add debugging tools. - - Generate dataflow diagrams that show execution order and the order of connections. - The actual sending order of the outputs is not accessible to a static network analyzer because it is - implementation dependent. - - Generate reports of network activity that show the timed order of events. -+ The audio system (cmAudioSys) needs to be able to support multiple parallel DSP chains in separate threads. -+ UI Related Issues: - - Automatic UI's should be generated by scanning the objects parameters. - - Custom UI's should be created by explicitily naming object variables along with layout info. -+ Processors should be able to contain their own processing chains - embeddding processors should be possible. - This naturally leads to a tree address space. (e.g. fx.filter.param1) -+ Communication between threads should not necessarily require serialization. - - Use a blackboard approach where object values are read/written from a blackboard. Objects on the same - thread use the same physical blackboard. Blackboards on remote processes stream data in the background. - - This scheme may require double buffering of complex objects to prevent accessing invalid data states. -+ Objects that send multiple valued messages should use 'record' based data so that only one connection - is necessary. - -STRATEGY: -+ implement highly parallel version - which can take advantage of multiple processors - to do more - acoustic pitch tracking, source separation based fades - -TODO: -+ When a cmMsgList item is selected it should send out the selected index - after the individual data items rather than before them - this way the index - can be used as a definitive signal to perform some action on the previously - transmitted data items. -+ cmJson and cmLex should report the name of the file when with syntax error messages. -+ Use CSV for mod score file format (to eliminate need for labels) -+ Autoload of default pgm cfg, program, enable audio, sequence, score location. -+ (done) Circuit switcher patch. -+ Review and document the app threading and locking during audio file loading. -+ Remove old performance evaluation code from cmScore. -+ All programs should be able to reload without crashing via enabling/disabling audio. -+ (in new version) Select and save audio devices. -+ (done) Mac Conversion -+ (done) Live MIDI - to test audio/MIDI delay. -+ (done) As threshold increases overall volume decreases - add a compensation algorithm. -+ There are unintialized variable warnings on the release build. -+ Add preset delete. -+ All uses of va_copy() should have a complimentary va_end() -+ The list boxes do not show the currently selected item. -+ (done)MIDI note messages are sent but do not trigger notes on OSX. - -*** Usage Notes -live - Disconnects WT cmd input (WT will not receive an 'on' msg) - Disconnects TL reset input (TL will not receive a 'reset' msg) - Disconnects MFP sel input (MPF will not receive an 'on' msg) - Switches audio input to KR from WT to AIN. - Turn the 'meas' checkbox 'on'. - -simulate - Turn the 'audio in' checkbox 'on'. - Switch MFP output from SF to Nano. - (SF MIDI input then comes from the MIDI port.) - -audio in - Switch audio input to KR from WT to AIN. -meas - Instruct the SF to generate measurement outputs for the active meas. unit. - Otherwise the measurements must be loaded from the recorded measurment list. -print - Print a report from the SF. -quiet - Turn off SF output. - -LA Secs - Fragment recd/play unit look-ahead time in seconds. -Fade DbpSec - Framgent recd/play unit fade out time - (time to fade to 0 following a fade msg) - -*** Cross-fade Notes -Cross-fades are initiated by sending any msg to the 'AvailCh.trig' input. -The 'AvailCh' object then toggles the parameter router channels and xfader gates. -Only after this should the new parameter values be transmitted either from -the 'ActiveMeas' object (through the scale range chains) or directly from the -'ScMod' object. - -Sending parameter values prior to triggering the 'AvailCh' will result in the -parameters being sent to the currently active 'Kr'. This will result in two -possibly unintended effects: -1) The effect of the parameter will be heard immediately - possibly resulting in distortion. -2) If a subsequent trigger is sent to 'AvailCh' the parameters will be routed to - the fade-out (current) channel rather than the fade-in (next) channel. - - -**** Live Test Score -+ Line 1048 has a red G#5 immediiately following another G#5. Is this correct? - For now the second G#5 has been marked as a 'skip'. -+ Changed Tempo sections 25,26,27 to 40,47,47a -+ Measurements are taken for sections 51-54 but these sections follow bar 136 and - are therefore outside the test. These sections have therefore been redirected - to the downbeat of 201-204. - -*** Testing Notes: -+ Equipment List: - Four Microphones: Four performance/ Four recording - 2 inside 2 inside - 2 overhead 2 overhead - - 4 powered speakers - 2 Mixers (1 performance 1 recording) - - Performance Computer (harpo)/ Audio Interface (delta1010) / MIDI interface (Fastlane) - Recording Computer (crel) / Audio Interface (delta 1010) / MIDI interface (???) - Sensor Strip - -+ Performance Setup - - +------ + - Mic0 ----------->| | - Mic1 ----------->| | sends +-----+ +-------+ - Mic2 ----------->| |------->| A/D | | | +------+ +--------+ - Mic3 ----------->| Mixer |------->| |------>| harpo |<-------| MIDI |<-----| sensor | - aux | | | | | | +------+ | strip | - Spkr0 <----------| |<-------| |<------| | +--------+ - Spkr1 <----------| |<-------| | +------ + - main | | | | - Spkr2 <----------| |<-------| D/A | - Spkr3 <----------| |<-------| | - +-------+ +-----+ - -+ Software Development - - Create Score File - - - Create Recording Program (test with long MIDI playback generating audio - look for drift) - Record the index of each MIDI event at it's location in an audio channel. - - - Allow all variables and patch connections to be set from the scMod script and have - multiple scripts with varynig effects setups. - - - When scanning past ramping variables in scMod the end value should be - taken as the next variable(???) - this is not necessarily correct - because one never knows where a timed change may end - maybe ramped - variables should include a 'skip value' giving the next ambient value - for the ramped variable - experiment with this to figure out what works. - - - Add comb filters tuned according to the current MIDI notes as an additional effect. - - Add EQ output stage (use mixer). - - Add an input Compressor. - - - The dry signal should be able to be routed to seperate output channels - around the compressor. - (Better would be to output a delayed version of the dry signal that was in sync with the transformed - signal - this might mean simply passing the dry version as separate outputs from KR). - - - Create a mode in scMod which increments values based on an onset detector. So that - changes only happen on attacks. This still doesn't help if the pedal is down (or - if notes are sustained) but otherwise might be a better way to ramp parameters. - - - (DONE) The ability for the measurements to be called at the correct time must be built in. - (or alternatively to use stored effects). - - - (DONE) Effects applied to the playback fragments. - - - (DONE?) CROSSFADE BUG - This may be fixed by the change to cmDspAvailCh which - handles the case where no channels are available by sending an error message - but not actually changing the state of the cross fader. - - -+ Experiments: - 1) Speaker placement and live/electronics mix. - 2) Sliver mix level - 3) Try varying degree's of effects - - - -*** 11/19 -+ The recd/play fade should be able to trigger from a capture note as well as - playback note. An offset might also be useful. - (Should be a default fade for each fragment - keyed to the input. This - will be the fade that will occur when -+ Allow setting fade time in the score. -+ Allow setting fade rate based on 1.0 to 0.0 from fade point to end point. -+ Allow for multiple fades markers per fragment. (what does this mean?) -+ Write code to ignore playback when the score follower is not stable - - or to throw out fragments where there is a mistake. -+ At the end of each fragment recording the fragment should be truncated by the look-ahead time - to avoid capturing the attack of the marked note. -+ Part 2 data analysis: analyze the order of notes in counter rhythms. -+ Allow 'evenness' sequences to have non-even relationships. - -*** 11/1 -+ Change the wavetable to read stereo files or add a second wavetable to play the other channel. -+ The console window is not always updating from the bottom. -+ The 'Dump' button results are not going to the console window. -+ Put dry signal into separate output channels. -+ Add 'adaptive' mode parameters to scale/range mappings. -+ The 'meas'->'parameter' mappings should changable from scMod (mod0.js) -+ The 'adaptive' mode parameters (e.g. offset and invert) need to be connected in the patch. -+ Create a mode in scMod which increments values based on an onset detector. So that - changes only happen on attacks. This still doesn't help if the pedal is down (or - if notes are sustained) but otherwise might be a better way to ramp parameters. -+ Mark all notes in the score according to how well they would act as places to transition. - Notes held while the pedal is down would not be good places to transition. - These indicators would then be used to determine where a section change can occur - when the actual section change is missed. -+ (done) All score_loc's and event indexes in meas0.js that beginning with - score location 743 must be decremented by two. (e.g. loc 743 becomes 741 ...) - (score_loc_1.txt is now the correct score file) -+ When scanning past ramping variables in scMod the end value should be - taken as the next variable(???) - this is not necessarily correct - because one never knows where a timed change may end - maybe ramped - variables should include a 'skip value' giving the next ambient value - for the ramped variable - experiment with this to figure out what works. - - - -*** 10/17 - Select bar 129. - Start on F5 before 129. - Score follower jumps to loc. 978 then backs up to 973. - -*** 9/27 -* (DONE) Implement live recording for use in part 2. -* Implement a delay between when a new section is set to trigger and when -it actually does. This might allow transitions to be set up prior to when they are heard. -* (DONE) OS-X version crashes when the printf("PROCSET ...) is removed from _cmScProcSets(). -* Add ability to set mappings and perf. measure settings to scMod. -* The scMod should play through all changes up to the cur starting location so that - we can mimic the state of playing the piece through but allow starting from any location. -* Experiment with changing settings using the scMod ramping functions. -* Make a source separation based fade using an filter/inverse filter based on the - spectrum prior to the cross-fade. As an extra feature notice the state of the pedal - and decay appropriately. -* The electronic score needs the ability to specify that the output is sent to the audible -cross-fade channel rather than the inactive channel. -* Add a score mode that performs some action (e.g. incr/decr) on each incoming score follower -event. -* In AvailCh what happens when no available channels are found - this may be the cause -of the cross-fade cut-out problem. -* Add eq stage to output. - -* Setting the upper slope to a negative value is effective. - -* Demo Material: Seq 8 Mark 204 (1024-4 2048-4) Fade 10ms Cost->Threshold. -- recd7 Mark 151 -- recd8 Mark 145 - same settings a previous take. -- (recd9) Mark 145 - w/ changing xfade switch to mode 4 at 38 -- recd10 Mark 145 - same w/ no mode change -- recd11 Mark 145 - a. 3 different takes w/ score constant - no perf. parameters used - fixed threshold=65 -- recd12 Mark 148 b.(same settings as recd9) -- recd13 Mark 151 c. -- recd14 Mark 161 Section 40 - fixed changes see mod0.js for note -- Seq 6 Mark 145 M-92 (38,39,39a) (recd16) (recd17) (recd18) (recd19) -- Seq 7 Mark 167 M-100 - -*** 8/13 -* Cross-fade was cutting out during demo. -* Missing takes between seq 7 and seq 8. -* The MIDI is mis-aligned against the audio. -* Are cost / tempo working? ... test changing mode. -* Add an automatic volume adjustment to prevent parameter changes from causing large volume changes. -* What can we actually do between after a MIDI note is received? Is it already too late to - send parameters w/o affecting the attack of the note. - -* Live Test material - - Part 1: Meas:76 - (one measure) to get measurments for later sections - Part 1: Meas:94 (sect 38 (Seq 6)) through Meas:136 (include 136 stop at 137). - - Part 2: ("/Users/kevin/temp/piano score part 2 draft 1 master m 232 - 241 1st 2 bts.sib") - The downbeat of part two aligns with the 3rd beat (in 4/4) of 122 in the first part. - Ends on measure 131 at end of beat 3. - - MISSING MIDI for measures 114:126 - -*** July 10 -** (done) Make separate mappings and scale/range controls for left and right. -** Add EQ output stage. -** Work out the speaker setup. -** Add capture/playback. Analyze notes on capture and do not play if there are - any wrong notes. (Skipped notes however are acceptable.) -** - -** When a section transition is occurs late - (e.g. due to dropped notes) do not apply -the transformation all at once - instead either ramp it in or step it in on subsequent -attacks. Section transitions which are positively identified are intended to have -dramatic changes so applying the updated parameters immediately is acceptable - but -when the parameters are changed mid-section they should be much applied subtely. - - - - -** (done) Build a database of measurements and setup the program to be able to - apply a given measurement at it's assigned section. - -** Redevelop spectral distortion algorithm to use a spline as the transform. - -** use Log frequency frequency transform instead of FFT. - -** Allow for a continous window size via zero padding. - -** Add a 'write' preset file button - so the preset file can be saved prior to next crash. - -** measurement values can generate MAX_DBL - be sure that are not being sent through to the audio algorithm. - (see ln:965 cmDspKr.c for a hack to fix this) - -** add invert to scale/range to cause output to go in opposite direction. - -** non-grace eveneess are used to generate a measurement value from previous tempo calibration section. - (non-grace evenness notes therefore have two scores: 'evenness' and 'overall-duration'). - -** note that the default setting for dyn and even. - -** add dyn,even,tempo,cost number boxes to allow artificial setting of these parameters. - add dyn,even,tempo,cost as modulator variables to allow them to be set from the modulator - With these additions we can simulate apply measurements at the 'application' section. - -** add begining and ending measure numbers to 'seq' labels - -** Gain compensation for mode 4. - -** Do IFFT using cos()^c + i * sin()^c - these bases are orthognal but cause harmonic distortion. - To be efficient this might involve writing an FFT function. - -// May 22 - -** Crashers (Should be tested but are probably already fixed following score follower debugging.) -Seq 2 m24 Mark 36 & 38 -Seq 4: Mark 115 -Seq 4: m76-79 Mark 129 (W/ meas: even & dyn -> thresh change min Thresh to 40) - use 4th seq w/ b1 -Seq 6: m92 Mark 143 -Seq 7: m103 Mark 173 -Seq 7: Mark 172 Meas 103 - always crashes on playback. -Seq 4: Mark 76 Meas 40 - crash! -Seq 2: First mark meas 23 - Crash seems to happen in cmProc4.c: _cmScMatchInitMtx() ln:1311. - It looks like a memory overrun. Looks like the first line is wrong - shouldn't: - if( rn >p->mrn && cn > p->mcn ) - be - if(rn*cn > p->mrn*p->mcn) - - - -BUGS: -// Apr 20 -The tempo measurement can produce invalid values. Set score to 22 then play Mark 38. -First tempo measurement is a non-sense value - probably produced by an div by zero. -Also: Mark 8, Meas 10. - -Crash on playing Mark 37. - -Click on list control outside below list item - crash! - -Select Mark 171 (Seq 7) Section 43, m103 crash - - -// Feb 27 -+ Audio seems to preceded MIDI by around 250ms this probably arises -from a delay that was inserted by 'mas'. Can the delay be removed? - -// Feb 25 -+ Fix the audio file input/output ports - -// -// Feb 6 & 7 -// -+ Performed notes which arrive which about 50ms could be -considered chords. Extra notes notes which were not part of -the chord are probably common and should be discounted during -the cost analysis. - -+ (done) Add alignment cost as a 4th variable along with dyn,even,tempo. - -+ (done) In the score print out (score_loc.txt) Section 2 is starting on Bar 5 -when it should start inside Bar 7. - -+ In Take 1 the 2nd dynamics set is not triggered. - -+ In Take 3 Eveness 2 the C2 and F#4 are NOT missing althrough they are in the -evalation. Also E7 which ends that set is not marked with an 'e'. - -+ It is possible to have even-non-grace sets where the note rythm value's are not -all the same (e.g. bar 20 ) - -+ User soft-thresholds for the dynamics categories. - -+ Set 39 even measure 25 shows the first note as G#2 when it should be C#1 - -+ Missig MIDI note sounded: -C1 score-loc:132 -A#2 140 -A5 173 -C#2 195 Marker 36 -E5,G33,A#2,C#1 212-218 Marker 36 -E3 185 Marker 37 -F5,C#4,G#5 986 Marker-Down 204 - -============================================================================= -Sequence Editor Design - -1) Performance pre-processing: - For each annotated performance section align the performance to the score. - and fill in the - sectionArray : - [ - section : - { - seq : 1 // time-line this section resides in - marker : 12 // time-line id of this sections begin marker - - eventArray : - [ - event : - { - - // score tracking status - // aligned = event matches a score location (scloc is valid) - // inserted = inserted note that does not match the score (scloc is not valid) - // pitch_err = matches score with the wrong pitch (scloc is valid) - // order_err = matches score but not is out of order (scloc is valid) - status: aligned | inserted | pitch_err | order_err - - // score location this event is associated with - // or -1 if the note does not match a score event - scloc: 154 - - // performance sample index as an offset into the time-line sequence - smpIdx: 134689 - - // performance event duration - durtn: 234567 - - // optional note event information - note : - { - pitch: 60 - vel: 110 - } - - // optional pedal event information - pedal : - { - label: quiet, sust, damp - down : true - } - } - ] - } - ] - -2) Create a new sequence by combining sections: - - a. Load the section array file created in step 1). - b. Select a set of sections to form the basis of the new sequence. - c. Resolve overlapping notes by disabling extra notes that share the - same score location. - d. Insert missing notes by selecting a note(s) from the score. - e. Increase or decrease the inter-onset interval between two notes. - (this will adjust the absolute time offset of all subsequent notes) - f. Edit the velocity of a note. - g. Shift the position of a pedal down or up event. - h. Insert a pedal event. - i. Write the sequence to a file. - j. Load a sequence from a file. - -3) User Interface: - Two Views: - a. Single Frame View: - Display score bars and sections (same as score window) and overlay - section boxes. Select sections to include in a new sequence. - Select Edit | Create Sequence. - - b. Single Frame View: - The begin marker of each frame includes the section label. - Selecting the begin section marker selects all events in the section. - (this does not have to be done explicitely) - Each note in each section is displayed piano-roll style. - The notes are colored according to their 'status'. - Overlapping notes are shown in red. - Disabled notes are shown as hollow boxes. - A strip at the bottom shows the pedal state. - - - Menu: - Show/Hide selected events / sections. - Enable/Disable selected events. - - -============================================================================= - - - - a b - piano --> mic ----> adc --> fbctl --> xform -+-> dac --> spkr --> room --+ - ^ ^ ^ | | - | | | | | - | | +--------------+ | - +---------+-------------------------------------------------------------+ - -fbctl Design: - - - -1. Measure the spectrum of the room impulse response. - a. Generate a sine sweep, or Max. length sequance, s, with a non-symetric envelope. - - b. Playback s and record the result N times - using different mic. positions. - - c. S = STFT(s) - R = sum(STFT(r_i) / N - - d. Align S and R using PHAT. - e. RIR = mean(S - R) - - -2. Find the delay, d, which minimizes sum(a-b) - - a ----------> DFT() --\ - - ---> - b --> z^d --> DFT() --/ - - -============================================================================= - - 1. Use spectral flux to generate an impulse signal: f. - 2. f' = 1-f correlates to the level of time dependency in the signal. - Frames with a high time dependency contain more reberberated signal. - 3. Setup a 2xT NMF problem Y = HE - 4. Initialize spectrum 1 as the f weighted avg. of all spectra. - 5. Initialize spectrum 2 as the f' weighted avg. of all spectra. - 6. Initialize env. 1 as f - 7. Initialize env. 2 as f' - 8. Allow all other variables, other than f', to vary - spectrum 2 - is the impulse response. - - alternatively use gradient descent, or alternating LS, rather than NMF - - -============================================================================= - -New vector library: -1. Use type generic pre-proc feature. -2. Explicit matrix representation. -3. Use BLAS and LAPACK. - - -============================================================================= - -------------------------------------------------------------------------------- -OSX - Install Notes -------------------------------------------------------------------------------- -1. Install XQuartz (from xquartz.macosforge.org) -0. Install Xcode -1. Install macports (export PATH="/opt/local/bin:/opt/local/sbin:$PATH") -2. sudo port install autoconf -3. sudo port install automake -4. sudo port install libtool -5. sudo port install fftw-3 -6. sudo port install fftw-3-single -7. port select --list gcc (which gcc is active) -8. sudo port install gcc47 -9. sudo port --set gcc mp-gcc47 (6/15/15 the default, mp-gcc5, works without this stp) - sudo port intsall gdb (then edit /System/Library/LaunchDaemons/com.apple.taskgated.plist s to sp. -10. sudo port install fltk -11. sudo port install xorg-libX11 -12.sudo port install git -13.sudo port install emacs +x11 -14 install ~/Library/Preferences/org.larke.kc.txt (this is not required) -15 create ~/Library/Preferences/kc -16 Install ~/Library/Preferences/time_line.js, time_line_preset.js, time_line_preset.csv - - -A. In System Preferences | Keyboard | Shortcuts replace Ctl- with Ctl-Alt-Left in the -Spaces shortcut. This allows emacs to use C- for word-back. - -B. Set keycodes in xmod_apple_keymap to force 'Alt' to be emacs meta key. - -keycode = Super_L NoSymbol Super_L NoSymbol -keycode = Alt_L Meta_L Alt_L Meta_l - -Replace with command code of Command key. -replace with command code of Alt key. -Use 'xev' to get the keycodes. - - -C. Uncheck enable key equivalents under X11 to prevent Cmd-W from closing window in emacs. - -------------------------------------------------------------------------------- -Linux - Install Notes -------------------------------------------------------------------------------- -1. autoconf -2. automake -3. gcc-c++ (to get g++) -4. blas-devel x64 -5. atlas-devel x64 -6. lapack-devel x64 -7. download fftw-3: ./configure --prefix=/usr -8. fftwf-3 : ./configure --prefix=/usr --enable-single -9. fltk-devel x64 - - -