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 Microtonal scales and tuning systems ------------------------------------ - Retuning the MIDI device to diapason A4 ≠ 440 Hz does not work or makes a mess (e.g. Windows 10, Microsoft GS Wavetable Synth). - Check that setting pitchbend range to ± 200 cents on all channels works. - Include values for optional stretching of each octave. - Implement a performance control to set the A4 frequency (diapason) in the score. Capture (in process) -------------------- - Use the captured incoming NoteOn/Noteoff events to build a polymetric structure that reproduces the stream. The difficulty lies in the design of the most significant polymetric structure - for which AI tools may be helpful in the future. Proper time quantization is also needed to avoid overly complicated results. Csound orchestra ---------------- - New instruments are needed in the styles of: + pipe organ + flute + piano + harpsichord + guitar (check guitar.orc in Csound resources) + 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. Try to fix "_script(Wait for space)" (no hope!) Real-time MIDI -------------- - Set _part() instructions when importing multi-part MusicXML scores. Also suggest a conversion of _part() to _ins() for creating Csound scores, and vice-versa. - Why is kcurrentinstance (12) > Maxevent (10) in -gr.koto3 ? - Use client:port as MIDI input/output on Linux. Currently, only the client is mentioned in the settings. Some devices might allocate several ports to the same client. - Check -gr.Alan and -gr.Beatrix for a synchronisation problem after more than 2 turns. — In Linux, it seems that the two virtual ports 'VirMIDI 0-0' and 'VirMIDI 0-1' are not communicating with other ports even though connections are valid. - Install a pitchbender sensitive MIDI output device on the Linux test machine. - A _script(wait for key…) in the beginning of a grammar does not always work. This needs to be clarified. - Put some 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. - Check the accuracy of start times in sound-object pictures. - Restore "PLAY THIS EXPRESSION (real-time MIDI)" with MIDI output features. Maybe store the latest real-time MIDI output? 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 - When moving "-gr" and "-da" projects, their settings should be copied. 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 ------ - The Csound orchestra file "0-default.orc" does not work on Linux. It returns Csound error 1 (on line 47). Read https://forum.csound.com/t/orchestra-file-rejected-by-linux/1780 - (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 ------- - 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. Various errors -------------- - Check why CorrectionFactor = 1.059 in -gr.koto3. (Line 1679 in FillPhaseDiagram) Probably when an out-time object falls at the end of a sequence. - Check that scripts can be attached to out-time objects - In linux, when the STOP or PANIC button is clicked during a "wait" event, the trace file is empty. Maybe a problem flushing it and closing it. - Check quadratic adjustment of _vel and _volume 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 ------------- - The file BP2_help.txt still needs updates (and a renaming, to be checked by installers) - 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.) ?? ========