Bol Processor BP3 To Do List ============================ This is a list of technical improvements considered during the development of BP3. None of them are critical to its proper functioning. 🎹 However, we need good musical examples to highlight BP3's features! 🎶 The most requested improvements are listed at the top of the list. Current location of this file: https://github.com/bolprocessor/bolprocessor/blob/graphics-for-BP3/BP3-To-Do.txt You can also check the history of changes: https://raw.githubusercontent.com/bolprocessor/bolprocessor/graphics-for-BP3/BP3-changes.txt If you are interested in taking part in this project, join the BP developer's list: https://sourceforge.net/projects/bolprocessor/lists/bolprocessor-devel Distribution ------------ - Now that BP3 compiles on MacOS/Windows/Linux, create installers to facilitate the implementation. (This is easy!) Microtonal scales and tuning systems ------------------------------------ - Limit to 2500 the size of Comment describing the tuning process (scale.php), or revise ReadOne() in SaveLoads3.c - Separate tuning systems from Csound instruments, as tuning is applicable to many other environments. Create "-tu.mytuning" files to this effect. - Export/import tunings in the Scala (SCL) file format (https://www.huygens-fokker.org/scala/scl_format.html) used by Microtuner Ableton (https://www.ableton.com/en/packs/microtuner/), etc. - Also try the Scala Keyboard Mapping (KBM) format (https://www.huygens-fokker.org/scala/help.htm#mappings). - Include values for optional stretching of each octave. - Implement a performance control to set the A4 frequency (diapason) in the score. Csound orchestra ---------------- - New instruments are needed in the styles of: + pipe organ + flute + piano + harpsichord + guitar + horn + saxo + marimba + drums - Study how BP could produce score instructions modifying parameters in some instruments. - Find an instrument that would create a switched bandpass filter with either a sound file or another instrument as input. The idea is to reproduce the effect of sympathetic strings and use it to add partials to other instruments (much like the Indian tanpura). These devices had been successfully wired as "switch filters" in the Shruti Harmonium. - Modify "new-vina" to produce lower frequencies, minimum "C2". MIDI input ---------- - Implement more script instructions previously designed for BP2. Real-time MIDI -------------- - Use client:port as MIDI input/output on Linux. Currently, only the client is mentioned in the settings. Some devices may allocate several ports to the same client. - Check -gr.Alan and -gr.Beatrix for a synchronisation problem - Try on Windows and MacOS the anti-bouncing procedure that is working on Linux (in MIDIdriver.c). - Put scripts on top of a grammar (the INIT: section) to run them before the production is started. This will notably allow setting up parameters K1, K2… K127. - When playing back chunked data in real-time MIDI, there may be gaps followed by garbled events due to the time taken to calculate large chunks. Check "-da.Beethoven-fugue-B-flat-major" for this. It's probably unavoidable: a larger value of MaxMIDIMessages (currently 1000 in ConsoleMain.c) is needed, but it blows the memory. - Maybe use a dynamically resizable array for eventStack? Probably not beneficial. - The value of MaxMIDIMessages could also be specified in the settings file of the project. - Check the accuracy of start times in sound-object pictures. - Implement MPE protocol (MIDI Polyphonic Expression). Real-time Csound ---------------- - This development should be easy with the help of AI tools. - Implement UDP for communicating with Csound. Links: https://csound.com/docs/manual/udpserver.html https://www.geeksforgeeks.org/udp-server-client-implementation-c/ - Implement OSC ? Antescofo Score Language ------------------------ - Study ASCL. Antescofo can be used as a standalone program or as an extension in environments like Max/MSP (https://antescofo-doc.ircam.fr/). Open Sound Control (OSC) ------------------------ - This development should be easy with the help of AI tools. - Read https://en.wikipedia.org/wiki/Open_Sound_Control - This might create a framework for connecting BP3 with PYO (http://ajaxsoundstudio.com/software/pyo/) - Also try direct communication with MuseScore. HTML/PHP/Javascript interface ----------------------------- - Implement command-s (on MacOS) or control-s (on Windows/Linux) to save a grammar, data, alphabet, etc. This is almost done in _header.php (line 41) and at the bottom of data.php Standalone application ---------------------- - https://github.com/cztomczak/phpdesktop => Compile BP3 under Linux or MacOS. The MacOS version is still under development by Czarek Tomczak (czarek.tomczak at gmail) Alternate options in case "phpdesktop" doesn't fit: - https://electronforge.io/ - https://github.com/peachpiecompiler/peachpie - https://laravel.com/ - https://cakephp.org/ - https://www.yiiframework.com/ - https://github.com/bcosca/fatfree - https://fuelphp.com/ - https://symfony.com/ - https://phalcon.io/en-us - https://www.chromium.org/Home Csound ------ - (Optional) Revise CsoundWrite to make sure that events are ordered by "note-on" dates, notably with tied notes/sound-objects - Reference: https://csound.com/docs/manual/i.html => use negated p1 for distinct note-off? - Implement output to DAC in the interface: https://csound.com/docs/manual/CommandFlags.html - Csound can compile orchestras and scores directly from strings of text: this feature could be exploited Actions ------- - Implement produce-items N action. - Implement play-all action. - Fix analyze-item action. - Implement expand-item & show-beats options. Chunked data in real-time MIDI ------------------------------ - Faulty chunked data (e.g. “-da.Beethoven-fugue-b-flat-major”) produces timing errors in real-time MIDI, although MIDI files are acceptable. This may be difficult to fix due to the size of data. Settings -------- - Use XML format to store the settings of projects. MIDI file player ---------------- - The player won't work if the computer doesn't have an internet connection. Download version of the player? - Implement Pause and Resume (check https://www.midijs.net/midijs_api.html) - Standalone application might not accept to call remote midi.js - Implement connection with FluidSynth (https://www.fluidsynth.org/) Images ------ - In Graphic.c, in the Improvize mode, dates on the ruler are adjusted by the "shift" variable. This doesn't yet work on the "pianoroll" type, because its background is drawn before updating PianorollShift. This can be solved (if felt necessary) by drawing the pianoroll graph after the completion of MakeSound, i.e. when calling DrawItem(). To this effect, the drawings of notes would be stored in a structure. - When no settings file is specified, allow the creation of images via a command line option. This option should specify a location for images. Currently, image location is the one of the trace file, which is always specified by the HTML/PHP interface. - Revise the drawing of time streaks (the vertical blue lines). These should be adjusted to the (varying) tempo instead of the default metronomic setting. Compilation ----------- - Modify the C source to handle some Unicode characters that are not currently accepted, such as '≤', '≠', '•', '…', etc. Cleaning up the code ------------------- - The console code contains many obsolete parts (marked as such and not compiled). These are mostly remnants of BP2's built-in interface, at the time we wanted to maintain a MacOS standalone version of BP2 using conditional compilation. These will be removed unless they turn out to be useful for further development. - Unused code files have been moved to a "not_used" folder in the "source" folder. These can be deleted later. - There are still many parts of the code marked "WITH_REAL_TIME_MIDI". This marker has been changed to "WITH_REAL_TIME_MIDI_FORGET_THIS" to indicate that these need to be deleted, as they are remnants of BP2's real-time MIDI or initial (unfinished) implementation of real-time MIDI in/output. Leave them unchanged for now, as some code could be reused. MIDI files (Probably unnecessary, as MIDI file creation works perfectly.) ---------- - note that currently the creation of type-1 MIDI files works even with very large sets of data… Therefore the following issues are not critical. - probably error when creating MIDI file from -gr.ShapesInRhythm because a very long silence is inserted, neither visible on graphs nor on the Csound score - "Error WriteVarLenQuantity(): value %u is out of range" may happen when data is faulty - add code to write track names (is it necessary?) - write 2 bytes of MIDIfileTrackNumber instead of 1 so that more than 255 tracks are possible; add error checking to make sure it doesn't exceed 32,767 (?) - reimplement the function ReadVarLen() - should "produce all" write each item to its own track in a type 2 file? (Currently writes all items to the same track). This may be useful if the MIDI file is downloaded, but MIDIjs won't play it. - close midi files at the end of MakeSound() ? (and reopen if for each item?) => This may be complicated because the size of data needs to be writen in its header - when writing a type 2 file, an empty track is written and the end of the file but it not counted in the final track count that is written when closing the file; best solution would be to avoid writing the track or truncate the file? - fix or remove the handling of FileSaveMode in PrepareMIDIFile()? The option is currently always set to ALLSAME by Inits() and LoadSettings(). Until this option becomes necessary it would be best to leave it out. - remove "('-' for stdout)" text from --midiout help? Piping MIDI files probably won't work because we use ftell/fseek to write some parts of the file. (Alternatively, could support dumping MIDI file in a text format to stdout?) Documentation ------------- - Write new docs for BP3 (command-line usage, etc.) - Convert BP2 documentation to an (open-source) authoring system that can help maintain the organization and internal links as well as output in multiple formats (HTML, PDF, etc.) ?? ========