Programmable real-time audio signal processing application
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

notes.txt 36KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847
  1. CONTENTS:
  2. 1) TODO List
  3. 2) OSX Install Notes
  4. SPAT LAB SETUP:
  5. + 1. Stereo
  6. a. TotalMix - select 'diff. stereo' snapshot
  7. b. mixer: Recall preset 91 ('stereo diff')
  8. + 2. Direct - 24 channels - each channel goes in and out on same number.
  9. a. TotalMix - select 'DTS_24ch'
  10. b. mixer: Recall preset 96 ('24ch firecac ufx')
  11. =============================================================================
  12. Equipment List:
  13. 1) Two DPA 4011 cardioid mic's.
  14. 2) Two boom mic. stands.
  15. 3) FMR Audio RNP8380 pre-amp.
  16. 4) Presonus Audiobox 181VLS.
  17. 5) Mackie 1604 or equivalent mixer.
  18. 6) One MIDI cable (15-20 feet)
  19. 7) Four 25 foot power extension cables.
  20. 8) Two power strips.
  21. 9) Eight short (3-4 ft) balanced 1/4" cables.
  22. 10) 8 (25 ft) XLR mic cables.
  23. 11) 4 balanced 1/4" to male XLR cables (10 ft)
  24. 12) 2 balanced 1/4" to female XLR cables (10 ft)
  25. 13) One set of the best headphones you can give me.
  26. 14) Diskclavier remote control,power supply, and manual.
  27. 0) Contact Mics
  28. 1) MIDI interface and USB
  29. 2) MIDI cable
  30. 3) MIDI barrel adapter
  31. 4) Speakers
  32. 5) Speaker power cables
  33. 6) Tape for contact mics
  34. 7) Scissors for contact mics
  35. =============================================================================
  36. Take sequence builder development notes.
  37. 1. The MIDI file implementation should not overload the use of the
  38. 'dtick' field in cmMidiTrackMsg_t to contain multiple possible
  39. meanings of time (e.g. tick,microsecond,seconds,samples etc) or at
  40. the very least the current meaning of the field should be held as a
  41. flag in the MIDI file. As it i s the field is ambiguous and it can
  42. be difficult to tell what the meaning of the field is in any given
  43. algorithm that processes it.
  44. 2. Sostenuto pedal should be added to the score and then implemented
  45. in cmMidiFileCalcDurations(). When the sostenuto pedal is down
  46. only notes that are playing when the pedal is depressed are
  47. sustained.
  48. 3 As current written the UI control architecture supports only one
  49. user interface element (kcApp.h::ctl_t) per DSP instance. This
  50. limitation is manifest in kcApp.h::find_ctl() which has no way
  51. to distiguish which of multiple ctl_t's to return from a given
  52. instId. In fact this problem probably goes deeper into the
  53. way that Fl_Widgets and DSP instances are assocated.
  54. 4. TODO:
  55. a) When pedal events are inserted via cmGrTksrFltk the inserted event
  56. is shifted backward in time.
  57. b) Test the save/restore function of TakeSeqBldr render takes.
  58. c) TakeSeqBldr load should be threaded.
  59. d) Eliminate direct communication between cmGrTksb/rFltk and cmTakeSeqBldr.
  60. All communcation should be serialized.
  61. e) Run with valgrind to see if cmGrGksb/rFltk has any obvious bugs.
  62. f) bar select / take select logic is difficult.
  63. g) There is often a NAN shown in the position select display UI.
  64. h) Add bars to the cmGrTksrFltk view.
  65. =============================================================================
  66. CHANGES TO SIMULATE MODE TO ALLOW MIDI FILE PLAYER TO DRIVE SCORE
  67. FOLLOWER DIRECTLY RATHER THAN FEEDING SCORE FOLLOWER FROM MIDI INPUT PORT:
  68. CHANGE:
  69. LINE 1150 cmDspSysInstallCb(h, siRt, "f-out-1", sfp, "smpidx",NULL );
  70. 1154 cmDspSysInstallCb(h, d0Rt, "f-out-1", sfp, "d0", NULL );
  71. 1160 cmDspSysInstallCb(h, d1Rt, "f-out-1", sfp, "d1", NULL );
  72. 1166 cmDspSysInstallCb(h, stRt, "f-out-1", sfp, "status",NULL );
  73. BACK TO:
  74. cmDspSysInstallCb(h, siRt, "f-out-0", sfp, "smpidx",NULL );
  75. cmDspSysInstallCb(h, d0Rt, "f-out-0", sfp, "d0", NULL );
  76. cmDspSysInstallCb(h, d1Rt, "f-out-0", sfp, "d1", NULL );
  77. cmDspSysInstallCb(h, stRt, "f-out-0", sfp, "status",NULL );
  78. =============================================================================
  79. Session Notes 3/28/15
  80. 1. 34-38-49-54 (good take sequence)
  81. 2. Try combining bins in the SpecDist algorithm as a variaion on the spectral distortion algorithm.
  82. For example the bins coud be combined using a Bark grouping.
  83. Session Notes 12/12/14
  84. 1. Write a tool to create multiple MIDI preformances of the piece.
  85. a) Map each segment to the score using the score follower.
  86. b) Where parts overlap allow interactive selection of which part should be selected.
  87. c) Where parts are missing - insert notes from the score.
  88. d) Display the pedal and allow it to be edited.
  89. e) Allow parameter changes to be assigned to performance locations.
  90. Session Notes 11/08/14
  91. 1. 127 dynamic level values are not adequate.
  92. we loose quiet notes. the new Steinway instr. should have more velocity bits.
  93. 2. Display the next target score location of cmScModulator() so that it is clear
  94. that cmScoreModulator() is waiting for a score location in the expected place.
  95. Adding a button to dump the cmScModulator() score might also be useful.
  96. 3. JSON parser errors are being sent to the terminal output not the console
  97. output - so they are not easy to not notice.
  98. 4. We need transitsions
  99. We need to be able to audtion presets faster
  100. We need to insert missing pedal information.
  101. 5. Build a complete MIDI version of the piece so that long sections can be run.
  102. Session Notes: 10/18/14
  103. 1) Contact and air mics ogain all set to 1.0
  104. Sometimes igain on air mics reduced to control feedback.
  105. Speakers are 10 ft in front of piano
  106. AudioBox Gains all at 10 oclock.
  107. FMR Preamp 2nd notch on air mics
  108. Mixer 2.5 kHz 10 oclock, 80 Hz 9 oclock.
  109. Mixer in gains 11 oclock w/ 75 Hz low cut engaged
  110. 2) Need input Eq for contact mic's. LP,BP,HP with adjustable xover Fc and Gain.
  111. 3) Preset G works best. With 'offset' used to control radicalization between 20 and 80.
  112. 4) Add a control cmSpecDist() to interpolate between the input and output
  113. spectrum. This would allow a smooth transition between transformed
  114. and untransformed signal.
  115. The interpolation can be made to be frequency dependent. This could
  116. also be used to counter the bass boost which the transform tends
  117. to produce.
  118. 5) Add 'offset' as a modulator variable.
  119. 6) Are the dynamic modulator parameter controls working: line, sline
  120. 7) Many of the modulator file labels are redundant - can they be left out?
  121. (When modulator file values are missing they should default to their last set value).
  122. 8) When the score follower triggers a change the change seems to come
  123. before the Disklavier note sounds due to Disklavier system latency.
  124. Add a delay to the input of scMod to compensate for this delay.
  125. 9) The scMod data file would be easier to work with if it was in columnar form.
  126. Session Notes: 9/28/14
  127. 1) Problems with feedback were mitigated by brining down the input gain.
  128. In generate the input/output gain were set to:
  129. In Gain: 0.7 0.2
  130. Out Gain: 2.0 2.0
  131. 2) Turning the piano away from the microphones also reduced feedback; probably
  132. due to the fact that the piano lid sheilds the mic's from direct path
  133. from the speakers.
  134. 3) Increasing the threshold and and use of mode 4 (Bump Mode) produced the
  135. best transformations. See Preset G in mod_44_45.js
  136. 4) Input signal conditioning needs to be added to keep the piano signal
  137. in the effective range of the transform.
  138. 5) The Sine Tracking feedback controller is in an uncertain state.
  139. a. The attenThresh setting range needs to be verified.
  140. b. The scoring function was changed and then not verified.
  141. c. The algorithm which compares the trajectory of a given harmonic
  142. to the trajectory of the overall sound needs to be writen.
  143. Harmonics that are increasing relative the overall envelope
  144. should be attenuated.
  145. 6) A noise gate might help the reberberation feedback problem (i.e.
  146. the dense wash of sound with tends to build with time)
  147. 7) The transform algorithm needs to be developed further to increase
  148. it's reliability and range of effect.
  149. 8) Changing window length from the score didn't seem to be working.
  150. Session Notes: 8/24/14
  151. 0) Investigate using omni mic. in front of speakers to feed input to cmFrqTrk.
  152. 1) Feedback from Mark 178, m144, Preset C.
  153. Session Notes: 5/24/14
  154. 1) Move mic's back from the Disklavier to decrease damper noise.
  155. 2) The head phone signal sounds correct.
  156. 3) The the L410 computer is running out of time in release mode.
  157. 4) Better quality speakers are required.
  158. 5) Build a spectrum analyzer and bank of notch filters or graphic EQ to deal with feedback.
  159. 6) The DPA 4011 mics and FMR Audio RNP8380 preamp work well.
  160. 7) Whenever the speaker signal gets to the point where the transform can be heard
  161. the feedback begins to occur.
  162. Session Notes: 1/14/14
  163. 1) The non-grace evenness notes should include a tempo quality evaluation
  164. based on using the 'tfrac' values from column S of the score.
  165. 2) Sliver fade outs are currently tied to the reat-time performance not the captured performance.
  166. In the event that the score follower is lost after beginning a sliver playback
  167. and therefore misses the programmed fade out times begin fading out the
  168. sliver after the attack of the last captured note. This means that
  169. the time location of the captured notes must be accurately indicated
  170. in the sliver.
  171. 3) Allow fades to be tied to the capture notes - this is easy if 2) is done first.
  172. LANGUAGE NOTES:
  173. The primary goal of the language is to initialize a dataflow system.
  174. Sub-goals:
  175. 1) Avoid describing domain specific computation in the language. As much as possible constrain the
  176. language to describe initialization tasks (e.g. object allocation, object connection, initialization
  177. parameters, preset grouping, thread/process allocation, UI layout, ...)
  178. 2) Network Distrubution
  179. 3) UI Layout
  180. Runtime:
  181. + Extensible data-object system.
  182. + Library organization (platform independent UI description, application objects, app-independent objects, vector library)
  183. - Platform independent UI description is a protocol for describing a UI object and a runtime protocol
  184. for communitcating with the UI which is independent of the UI implementation itself. The UI should be
  185. implementable in FLTK, or Javascript. The UI will always run in separate thread and may run in a
  186. separate process.
  187. - Application objects are plug-ins which follow a similar design to the cmDspProc() objects.
  188. + xs
  189. NEW DESIGN NOTES:
  190. + The current designs fundamental weakness is that it uses callbacks to communicate where sequential program
  191. flow would produce a more comprehensible program.
  192. + Dataflow is a natural way to express DSP programs but if it is implemented in a textual, rather than
  193. graphical language, then their are some design princles that must be followed in order
  194. to produce comprehensible programs.
  195. 1) Limit the number of connections as much as possible.
  196. - There are many simple UI->param connections - these should be made automatically and UI
  197. objects should not have to be explicitely created - they should be created by the runtime
  198. environment.
  199. - If multiple pieces of data are part of a single message then they should be sent as a unit
  200. rather than separately. This decreases the number of connections and also removes timing
  201. dependencies - where the application programmer has to know the order of transmission of the
  202. individual pieces. (e.g. MIDI messages always contain {status,d0,d1} rather than having to
  203. send d0 and d1 followed by status to indicate the end of the message {status,d0,d1} should
  204. be sent as a single record.
  205. 2) Eliminate as many event ordering issues as possible
  206. See the example in 1).
  207. 3) Alllow the connections between objects to be made as part of the object allocation.
  208. 4) Allow subprograms to be made. This decreases the complexity of the programs and because
  209. it allows the programs to be organized hierarchically. It also allows the subprograms to
  210. be tested idenpendently.
  211. 5) A natural way to express object multiplicity is required. (e.g. multiple channels).
  212. This leads to a way to naturally create parallel/fan-in/fan-out connections.
  213. + One way to solve some of the problems of the current program would be to add debugging tools.
  214. - Generate dataflow diagrams that show execution order and the order of connections.
  215. The actual sending order of the outputs is not accessible to a static network analyzer because it is
  216. implementation dependent.
  217. - Generate reports of network activity that show the timed order of events.
  218. + The audio system (cmAudioSys) needs to be able to support multiple parallel DSP chains in separate threads.
  219. + UI Related Issues:
  220. - Automatic UI's should be generated by scanning the objects parameters.
  221. - Custom UI's should be created by explicitily naming object variables along with layout info.
  222. + Processors should be able to contain their own processing chains - embeddding processors should be possible.
  223. This naturally leads to a tree address space. (e.g. fx.filter.param1)
  224. + Communication between threads should not necessarily require serialization.
  225. - Use a blackboard approach where object values are read/written from a blackboard. Objects on the same
  226. thread use the same physical blackboard. Blackboards on remote processes stream data in the background.
  227. - This scheme may require double buffering of complex objects to prevent accessing invalid data states.
  228. + Objects that send multiple valued messages should use 'record' based data so that only one connection
  229. is necessary.
  230. STRATEGY:
  231. + implement highly parallel version - which can take advantage of multiple processors
  232. to do more - acoustic pitch tracking, source separation based fades
  233. TODO:
  234. + When a cmMsgList item is selected it should send out the selected index
  235. after the individual data items rather than before them - this way the index
  236. can be used as a definitive signal to perform some action on the previously
  237. transmitted data items.
  238. + cmJson and cmLex should report the name of the file when with syntax error messages.
  239. + Use CSV for mod score file format (to eliminate need for labels)
  240. + Autoload of default pgm cfg, program, enable audio, sequence, score location.
  241. + (done) Circuit switcher patch.
  242. + Review and document the app threading and locking during audio file loading.
  243. + Remove old performance evaluation code from cmScore.
  244. + All programs should be able to reload without crashing via enabling/disabling audio.
  245. + (in new version) Select and save audio devices.
  246. + (done) Mac Conversion
  247. + (done) Live MIDI - to test audio/MIDI delay.
  248. + (done) As threshold increases overall volume decreases - add a compensation algorithm.
  249. + There are unintialized variable warnings on the release build.
  250. + Add preset delete.
  251. + All uses of va_copy() should have a complimentary va_end()
  252. + The list boxes do not show the currently selected item.
  253. + (done)MIDI note messages are sent but do not trigger notes on OSX.
  254. *** Usage Notes
  255. live - Disconnects WT cmd input (WT will not receive an 'on' msg)
  256. Disconnects TL reset input (TL will not receive a 'reset' msg)
  257. Disconnects MFP sel input (MPF will not receive an 'on' msg)
  258. Switches audio input to KR from WT to AIN.
  259. Turn the 'meas' checkbox 'on'.
  260. simulate - Turn the 'audio in' checkbox 'on'.
  261. Switch MFP output from SF to Nano.
  262. (SF MIDI input then comes from the MIDI port.)
  263. audio in - Switch audio input to KR from WT to AIN.
  264. meas - Instruct the SF to generate measurement outputs for the active meas. unit.
  265. Otherwise the measurements must be loaded from the recorded measurment list.
  266. print - Print a report from the SF.
  267. quiet - Turn off SF output.
  268. LA Secs - Fragment recd/play unit look-ahead time in seconds.
  269. Fade DbpSec - Framgent recd/play unit fade out time
  270. (time to fade to 0 following a fade msg)
  271. *** Cross-fade Notes
  272. Cross-fades are initiated by sending any msg to the 'AvailCh.trig' input.
  273. The 'AvailCh' object then toggles the parameter router channels and xfader gates.
  274. Only after this should the new parameter values be transmitted either from
  275. the 'ActiveMeas' object (through the scale range chains) or directly from the
  276. 'ScMod' object.
  277. Sending parameter values prior to triggering the 'AvailCh' will result in the
  278. parameters being sent to the currently active 'Kr'. This will result in two
  279. possibly unintended effects:
  280. 1) The effect of the parameter will be heard immediately - possibly resulting in distortion.
  281. 2) If a subsequent trigger is sent to 'AvailCh' the parameters will be routed to
  282. the fade-out (current) channel rather than the fade-in (next) channel.
  283. **** Live Test Score
  284. + Line 1048 has a red G#5 immediiately following another G#5. Is this correct?
  285. For now the second G#5 has been marked as a 'skip'.
  286. + Changed Tempo sections 25,26,27 to 40,47,47a
  287. + Measurements are taken for sections 51-54 but these sections follow bar 136 and
  288. are therefore outside the test. These sections have therefore been redirected
  289. to the downbeat of 201-204.
  290. *** Testing Notes:
  291. + Equipment List:
  292. Four Microphones: Four performance/ Four recording
  293. 2 inside 2 inside
  294. 2 overhead 2 overhead
  295. 4 powered speakers
  296. 2 Mixers (1 performance 1 recording)
  297. Performance Computer (harpo)/ Audio Interface (delta1010) / MIDI interface (Fastlane)
  298. Recording Computer (crel) / Audio Interface (delta 1010) / MIDI interface (???)
  299. Sensor Strip
  300. + Performance Setup
  301. +------ +
  302. Mic0 ----------->| |
  303. Mic1 ----------->| | sends +-----+ +-------+
  304. Mic2 ----------->| |------->| A/D | | | +------+ +--------+
  305. Mic3 ----------->| Mixer |------->| |------>| harpo |<-------| MIDI |<-----| sensor |
  306. aux | | | | | | +------+ | strip |
  307. Spkr0 <----------| |<-------| |<------| | +--------+
  308. Spkr1 <----------| |<-------| | +------ +
  309. main | | | |
  310. Spkr2 <----------| |<-------| D/A |
  311. Spkr3 <----------| |<-------| |
  312. +-------+ +-----+
  313. + Software Development
  314. - Create Score File
  315. - Create Recording Program (test with long MIDI playback generating audio - look for drift)
  316. Record the index of each MIDI event at it's location in an audio channel.
  317. - Allow all variables and patch connections to be set from the scMod script and have
  318. multiple scripts with varynig effects setups.
  319. - When scanning past ramping variables in scMod the end value should be
  320. taken as the next variable(???) - this is not necessarily correct
  321. because one never knows where a timed change may end - maybe ramped
  322. variables should include a 'skip value' giving the next ambient value
  323. for the ramped variable - experiment with this to figure out what works.
  324. - Add comb filters tuned according to the current MIDI notes as an additional effect.
  325. - Add EQ output stage (use mixer).
  326. - Add an input Compressor.
  327. - The dry signal should be able to be routed to seperate output channels - around the compressor.
  328. (Better would be to output a delayed version of the dry signal that was in sync with the transformed
  329. signal - this might mean simply passing the dry version as separate outputs from KR).
  330. - Create a mode in scMod which increments values based on an onset detector. So that
  331. changes only happen on attacks. This still doesn't help if the pedal is down (or
  332. if notes are sustained) but otherwise might be a better way to ramp parameters.
  333. - (DONE) The ability for the measurements to be called at the correct time must be built in.
  334. (or alternatively to use stored effects).
  335. - (DONE) Effects applied to the playback fragments.
  336. - (DONE?) CROSSFADE BUG - This may be fixed by the change to cmDspAvailCh which
  337. handles the case where no channels are available by sending an error message
  338. but not actually changing the state of the cross fader.
  339. + Experiments:
  340. 1) Speaker placement and live/electronics mix.
  341. 2) Sliver mix level
  342. 3) Try varying degree's of effects
  343. *** 11/19
  344. + The recd/play fade should be able to trigger from a capture note as well as
  345. playback note. An offset might also be useful.
  346. (Should be a default fade for each fragment - keyed to the input. This
  347. will be the fade that will occur when
  348. + Allow setting fade time in the score.
  349. + Allow setting fade rate based on 1.0 to 0.0 from fade point to end point.
  350. + Allow for multiple fades markers per fragment. (what does this mean?)
  351. + Write code to ignore playback when the score follower is not stable -
  352. or to throw out fragments where there is a mistake.
  353. + At the end of each fragment recording the fragment should be truncated by the look-ahead time
  354. to avoid capturing the attack of the marked note.
  355. + Part 2 data analysis: analyze the order of notes in counter rhythms.
  356. + Allow 'evenness' sequences to have non-even relationships.
  357. *** 11/1
  358. + Change the wavetable to read stereo files or add a second wavetable to play the other channel.
  359. + The console window is not always updating from the bottom.
  360. + The 'Dump' button results are not going to the console window.
  361. + Put dry signal into separate output channels.
  362. + Add 'adaptive' mode parameters to scale/range mappings.
  363. + The 'meas'->'parameter' mappings should changable from scMod (mod0.js)
  364. + The 'adaptive' mode parameters (e.g. offset and invert) need to be connected in the patch.
  365. + Create a mode in scMod which increments values based on an onset detector. So that
  366. changes only happen on attacks. This still doesn't help if the pedal is down (or
  367. if notes are sustained) but otherwise might be a better way to ramp parameters.
  368. + Mark all notes in the score according to how well they would act as places to transition.
  369. Notes held while the pedal is down would not be good places to transition.
  370. These indicators would then be used to determine where a section change can occur
  371. when the actual section change is missed.
  372. + (done) All score_loc's and event indexes in meas0.js that beginning with
  373. score location 743 must be decremented by two. (e.g. loc 743 becomes 741 ...)
  374. (score_loc_1.txt is now the correct score file)
  375. + When scanning past ramping variables in scMod the end value should be
  376. taken as the next variable(???) - this is not necessarily correct
  377. because one never knows where a timed change may end - maybe ramped
  378. variables should include a 'skip value' giving the next ambient value
  379. for the ramped variable - experiment with this to figure out what works.
  380. *** 10/17
  381. Select bar 129.
  382. Start on F5 before 129.
  383. Score follower jumps to loc. 978 then backs up to 973.
  384. *** 9/27
  385. * (DONE) Implement live recording for use in part 2.
  386. * Implement a delay between when a new section is set to trigger and when
  387. it actually does. This might allow transitions to be set up prior to when they are heard.
  388. * (DONE) OS-X version crashes when the printf("PROCSET ...) is removed from _cmScProcSets().
  389. * Add ability to set mappings and perf. measure settings to scMod.
  390. * The scMod should play through all changes up to the cur starting location so that
  391. we can mimic the state of playing the piece through but allow starting from any location.
  392. * Experiment with changing settings using the scMod ramping functions.
  393. * Make a source separation based fade using an filter/inverse filter based on the
  394. spectrum prior to the cross-fade. As an extra feature notice the state of the pedal
  395. and decay appropriately.
  396. * The electronic score needs the ability to specify that the output is sent to the audible
  397. cross-fade channel rather than the inactive channel.
  398. * Add a score mode that performs some action (e.g. incr/decr) on each incoming score follower
  399. event.
  400. * In AvailCh what happens when no available channels are found - this may be the cause
  401. of the cross-fade cut-out problem.
  402. * Add eq stage to output.
  403. * Setting the upper slope to a negative value is effective.
  404. * Demo Material: Seq 8 Mark 204 (1024-4 2048-4) Fade 10ms Cost->Threshold.
  405. - recd7 Mark 151
  406. - recd8 Mark 145 - same settings a previous take.
  407. - (recd9) Mark 145 - w/ changing xfade switch to mode 4 at 38
  408. - recd10 Mark 145 - same w/ no mode change
  409. - recd11 Mark 145 - a. 3 different takes w/ score constant - no perf. parameters used - fixed threshold=65
  410. - recd12 Mark 148 b.(same settings as recd9)
  411. - recd13 Mark 151 c.
  412. - recd14 Mark 161 Section 40 - fixed changes see mod0.js for note
  413. - Seq 6 Mark 145 M-92 (38,39,39a) (recd16) (recd17) (recd18) (recd19)
  414. - Seq 7 Mark 167 M-100
  415. *** 8/13
  416. * Cross-fade was cutting out during demo.
  417. * Missing takes between seq 7 and seq 8.
  418. * The MIDI is mis-aligned against the audio.
  419. * Are cost / tempo working? ... test changing mode.
  420. * Add an automatic volume adjustment to prevent parameter changes from causing large volume changes.
  421. * What can we actually do between after a MIDI note is received? Is it already too late to
  422. send parameters w/o affecting the attack of the note.
  423. * Live Test material
  424. Part 1: Meas:76 - (one measure) to get measurments for later sections
  425. Part 1: Meas:94 (sect 38 (Seq 6)) through Meas:136 (include 136 stop at 137).
  426. Part 2: ("/Users/kevin/temp/piano score part 2 draft 1 master m 232 - 241 1st 2 bts.sib")
  427. The downbeat of part two aligns with the 3rd beat (in 4/4) of 122 in the first part.
  428. Ends on measure 131 at end of beat 3.
  429. MISSING MIDI for measures 114:126
  430. *** July 10
  431. ** (done) Make separate mappings and scale/range controls for left and right.
  432. ** Add EQ output stage.
  433. ** Work out the speaker setup.
  434. ** Add capture/playback. Analyze notes on capture and do not play if there are
  435. any wrong notes. (Skipped notes however are acceptable.)
  436. **
  437. ** When a section transition is occurs late - (e.g. due to dropped notes) do not apply
  438. the transformation all at once - instead either ramp it in or step it in on subsequent
  439. attacks. Section transitions which are positively identified are intended to have
  440. dramatic changes so applying the updated parameters immediately is acceptable - but
  441. when the parameters are changed mid-section they should be much applied subtely.
  442. ** (done) Build a database of measurements and setup the program to be able to
  443. apply a given measurement at it's assigned section.
  444. ** Redevelop spectral distortion algorithm to use a spline as the transform.
  445. ** use Log frequency frequency transform instead of FFT.
  446. ** Allow for a continous window size via zero padding.
  447. ** Add a 'write' preset file button - so the preset file can be saved prior to next crash.
  448. ** measurement values can generate MAX_DBL - be sure that are not being sent through to the audio algorithm.
  449. (see ln:965 cmDspKr.c for a hack to fix this)
  450. ** add invert to scale/range to cause output to go in opposite direction.
  451. ** non-grace eveneess are used to generate a measurement value from previous tempo calibration section.
  452. (non-grace evenness notes therefore have two scores: 'evenness' and 'overall-duration').
  453. ** note that the default setting for dyn and even.
  454. ** add dyn,even,tempo,cost number boxes to allow artificial setting of these parameters.
  455. add dyn,even,tempo,cost as modulator variables to allow them to be set from the modulator
  456. With these additions we can simulate apply measurements at the 'application' section.
  457. ** add begining and ending measure numbers to 'seq' labels
  458. ** Gain compensation for mode 4.
  459. ** Do IFFT using cos()^c + i * sin()^c - these bases are orthognal but cause harmonic distortion.
  460. To be efficient this might involve writing an FFT function.
  461. // May 22
  462. ** Crashers (Should be tested but are probably already fixed following score follower debugging.)
  463. Seq 2 m24 Mark 36 & 38
  464. Seq 4: Mark 115
  465. Seq 4: m76-79 Mark 129 (W/ meas: even & dyn -> thresh change min Thresh to 40) - use 4th seq w/ b1
  466. Seq 6: m92 Mark 143
  467. Seq 7: m103 Mark 173
  468. Seq 7: Mark 172 Meas 103 - always crashes on playback.
  469. Seq 4: Mark 76 Meas 40 - crash!
  470. Seq 2: First mark meas 23
  471. Crash seems to happen in cmProc4.c: _cmScMatchInitMtx() ln:1311.
  472. It looks like a memory overrun. Looks like the first line is wrong
  473. shouldn't:
  474. if( rn >p->mrn && cn > p->mcn )
  475. be
  476. if(rn*cn > p->mrn*p->mcn)
  477. BUGS:
  478. // Apr 20
  479. The tempo measurement can produce invalid values. Set score to 22 then play Mark 38.
  480. First tempo measurement is a non-sense value - probably produced by an div by zero.
  481. Also: Mark 8, Meas 10.
  482. Crash on playing Mark 37.
  483. Click on list control outside below list item - crash!
  484. Select Mark 171 (Seq 7) Section 43, m103 crash
  485. // Feb 27
  486. + Audio seems to preceded MIDI by around 250ms this probably arises
  487. from a delay that was inserted by 'mas'. Can the delay be removed?
  488. // Feb 25
  489. + Fix the audio file input/output ports
  490. //
  491. // Feb 6 & 7
  492. //
  493. + Performed notes which arrive which about 50ms could be
  494. considered chords. Extra notes notes which were not part of
  495. the chord are probably common and should be discounted during
  496. the cost analysis.
  497. + (done) Add alignment cost as a 4th variable along with dyn,even,tempo.
  498. + (done) In the score print out (score_loc.txt) Section 2 is starting on Bar 5
  499. when it should start inside Bar 7.
  500. + In Take 1 the 2nd dynamics set is not triggered.
  501. + In Take 3 Eveness 2 the C2 and F#4 are NOT missing althrough they are in the
  502. evalation. Also E7 which ends that set is not marked with an 'e'.
  503. + It is possible to have even-non-grace sets where the note rythm value's are not
  504. all the same (e.g. bar 20 )
  505. + User soft-thresholds for the dynamics categories.
  506. + Set 39 even measure 25 shows the first note as G#2 when it should be C#1
  507. + Missig MIDI note sounded:
  508. C1 score-loc:132
  509. A#2 140
  510. A5 173
  511. C#2 195 Marker 36
  512. E5,G33,A#2,C#1 212-218 Marker 36
  513. E3 185 Marker 37
  514. F5,C#4,G#5 986 Marker-Down 204
  515. =============================================================================
  516. Sequence Editor Design
  517. 1) Performance pre-processing:
  518. For each annotated performance section align the performance to the score.
  519. and fill in the
  520. sectionArray :
  521. [
  522. section :
  523. {
  524. seq : 1 // time-line this section resides in
  525. marker : 12 // time-line id of this sections begin marker
  526. eventArray :
  527. [
  528. event :
  529. {
  530. // score tracking status
  531. // aligned = event matches a score location (scloc is valid)
  532. // inserted = inserted note that does not match the score (scloc is not valid)
  533. // pitch_err = matches score with the wrong pitch (scloc is valid)
  534. // order_err = matches score but not is out of order (scloc is valid)
  535. status: aligned | inserted | pitch_err | order_err
  536. // score location this event is associated with
  537. // or -1 if the note does not match a score event
  538. scloc: 154
  539. // performance sample index as an offset into the time-line sequence
  540. smpIdx: 134689
  541. // performance event duration
  542. durtn: 234567
  543. // optional note event information
  544. note :
  545. {
  546. pitch: 60
  547. vel: 110
  548. }
  549. // optional pedal event information
  550. pedal :
  551. {
  552. label: quiet, sust, damp
  553. down : true
  554. }
  555. }
  556. ]
  557. }
  558. ]
  559. 2) Create a new sequence by combining sections:
  560. a. Load the section array file created in step 1).
  561. b. Select a set of sections to form the basis of the new sequence.
  562. c. Resolve overlapping notes by disabling extra notes that share the
  563. same score location.
  564. d. Insert missing notes by selecting a note(s) from the score.
  565. e. Increase or decrease the inter-onset interval between two notes.
  566. (this will adjust the absolute time offset of all subsequent notes)
  567. f. Edit the velocity of a note.
  568. g. Shift the position of a pedal down or up event.
  569. h. Insert a pedal event.
  570. i. Write the sequence to a file.
  571. j. Load a sequence from a file.
  572. 3) User Interface:
  573. Two Views:
  574. a. Single Frame View:
  575. Display score bars and sections (same as score window) and overlay
  576. section boxes. Select sections to include in a new sequence.
  577. Select Edit | Create Sequence.
  578. b. Single Frame View:
  579. The begin marker of each frame includes the section label.
  580. Selecting the begin section marker selects all events in the section.
  581. (this does not have to be done explicitely)
  582. Each note in each section is displayed piano-roll style.
  583. The notes are colored according to their 'status'.
  584. Overlapping notes are shown in red.
  585. Disabled notes are shown as hollow boxes.
  586. A strip at the bottom shows the pedal state.
  587. Menu:
  588. Show/Hide selected events / sections.
  589. Enable/Disable selected events.
  590. =============================================================================
  591. a b
  592. piano --> mic ----> adc --> fbctl --> xform -+-> dac --> spkr --> room --+
  593. ^ ^ ^ | |
  594. | | | | |
  595. | | +--------------+ |
  596. +---------+-------------------------------------------------------------+
  597. fbctl Design:
  598. 1. Measure the spectrum of the room impulse response.
  599. a. Generate a sine sweep, or Max. length sequance, s, with a non-symetric envelope.
  600. b. Playback s and record the result N times
  601. using different mic. positions.
  602. c. S = STFT(s)
  603. R = sum(STFT(r_i) / N
  604. d. Align S and R using PHAT.
  605. e. RIR = mean(S - R)
  606. 2. Find the delay, d, which minimizes sum(a-b)
  607. a ----------> DFT() --\
  608. - --->
  609. b --> z^d --> DFT() --/
  610. =============================================================================
  611. 1. Use spectral flux to generate an impulse signal: f.
  612. 2. f' = 1-f correlates to the level of time dependency in the signal.
  613. Frames with a high time dependency contain more reberberated signal.
  614. 3. Setup a 2xT NMF problem Y = HE
  615. 4. Initialize spectrum 1 as the f weighted avg. of all spectra.
  616. 5. Initialize spectrum 2 as the f' weighted avg. of all spectra.
  617. 6. Initialize env. 1 as f
  618. 7. Initialize env. 2 as f'
  619. 8. Allow all other variables, other than f', to vary - spectrum 2
  620. is the impulse response.
  621. alternatively use gradient descent, or alternating LS, rather than NMF
  622. =============================================================================
  623. New vector library:
  624. 1. Use type generic pre-proc feature.
  625. 2. Explicit matrix representation.
  626. 3. Use BLAS and LAPACK.
  627. =============================================================================
  628. -------------------------------------------------------------------------------
  629. OSX - Install Notes
  630. -------------------------------------------------------------------------------
  631. 1. Install XQuartz (from xquartz.macosforge.org)
  632. 0. Install Xcode
  633. 1. Install macports (export PATH="/opt/local/bin:/opt/local/sbin:$PATH")
  634. 2. sudo port install autoconf
  635. 3. sudo port install automake
  636. 4. sudo port install libtool
  637. 5. sudo port install fftw-3
  638. 6. sudo port install fftw-3-single
  639. 7. port select --list gcc (which gcc is active)
  640. 8. sudo port install gcc47
  641. 9. sudo port --set gcc mp-gcc47 (6/15/15 the default, mp-gcc5, works without this stp)
  642. sudo port intsall gdb (then edit /System/Library/LaunchDaemons/com.apple.taskgated.plist <string>s<string> to <string>sp<string>.
  643. 10. sudo port install fltk
  644. 11. sudo port install xorg-libX11
  645. 12.sudo port install git
  646. 13.sudo port install emacs +x11
  647. 14 install ~/Library/Preferences/org.larke.kc.txt (this is not required)
  648. 15 create ~/Library/Preferences/kc
  649. 16 Install ~/Library/Preferences/time_line.js, time_line_preset.js, time_line_preset.csv
  650. A. In System Preferences | Keyboard | Shortcuts replace Ctl-<left> with Ctl-Alt-Left in the
  651. Spaces shortcut. This allows emacs to use C-<left> for word-back.
  652. B. Set keycodes in xmod_apple_keymap to force 'Alt' to be emacs meta key.
  653. keycode <Cmd> = Super_L NoSymbol Super_L NoSymbol
  654. keycode <Alt> = Alt_L Meta_L Alt_L Meta_l
  655. Replace <Cmd> with command code of Command key.
  656. replace <Alt> with command code of Alt key.
  657. Use 'xev' to get the keycodes.
  658. C. Uncheck enable key equivalents under X11 to prevent Cmd-W from closing window in emacs.
  659. -------------------------------------------------------------------------------
  660. Linux - Install Notes
  661. -------------------------------------------------------------------------------
  662. 1. autoconf
  663. 2. automake
  664. 3. gcc-c++ (to get g++)
  665. 4. blas-devel x64
  666. 5. atlas-devel x64
  667. 6. lapack-devel x64
  668. 7. download fftw-3: ./configure --prefix=/usr
  669. 8. fftwf-3 : ./configure --prefix=/usr --enable-single
  670. 9. fltk-devel x64