====== Konduktiva ====== {{ :konduktiva-logo.png?100|}} Konduktiva is a JavaScript library for live coding, an improved version of the Conductive library for live coding in the Haskell programming language by Renick Bell. The code was originally developed by Renick Bell. Then, my classmate, Yiler Huang, and I added to it. Yiler was focused on music generation within Konnduktiva and I mainly worked on the interface of the Konduktiva system combined with most of the MIDI system design in Konduktiva. We have submitted a conference paper about it at Audio Mostly 2024 (https://audiomostly.com/2024/) and it is about adding and modifying Konduktiva, a live coding library written in JavaScript, to equip it with tools for algorithmic creation of melodies and harmonies that conform to user intention. At the time of writing the paper has just been accepted and published on AM '24: Proceedings of the 19th International Audio Mostly Conference: Explorations in Sonic Cultures. Here is the link to it (https://dl.acm.org/doi/10.1145/3678299.3678336). On this page, I will be focusing on the software aspects. On my [[music-research|Music Research]] page, I will be focusing more on the academic parts. In other words, here I will be writing from the point of view of a programmer there, I will be writing as a researcher. I mainly worked on the MIDI system in Konduktiva and the interface of Konduktiva. Some of my work includes the configuration objects in Kondutkiva, the addMap method in the MusicalEnvironment, the worker functions in Konduktiva and the MIDI integration and action functions. Originally, the main method to add information into Konduktiva was to manipulate the information directly. However, when I just started using Konduktiva, I often got confused and ended up not being able to play any sound. So, while working on my first task integrating MIDI into Konduktiva, I created a way for myself to be able to get the same setup every time for testing and be able to learn more from a working setup. Eventually I was able to get a set of useful action functions that users can use easily to control different parts of MIDI like Control Change messages and program change messages. To make the system easier for users, I started adding features that I would find useful. These include, helper functions to identify MIDI inputs and outputs, verbosity to give myself a clean environment to work with, type checking functions, worker helper functions, etc. Eventually, I found myself needing to add more QuantizedMaps to the MusicalEnvironment and constantly made mistakes. This was when Dr.Bell suggested the addMap method which I have implemented. Some of the other things which I have added at Dr.Bell request are, recording and playing back MIDI, saving the MusicalEnvironment, user friendly features + API and, code packaging. Eventually, we got to the point where we have added all the features we wanted to add for this version and it was time to write some documentation which went on the [[https://konduktiva.org/|Konduktiva website]]. The packaged code went on [[https://github.com/renickbell/konduktiva|Github]] and [[https://www.npmjs.com/package/konduktiva|NPM]]. Then we wrote the paper. INSERT PDF HERE. The documentation part was difficult for me to write because I am not the best at communication and I find writing documentation quite dull. Even so, I persisted and wrote most of the documentation you will see on the [[https://konduktiva.org/|Konduktiva website]]. Partly, most of those features had to do with the parts I had worked on. Furthermore, I had also developed some tools to help users setup their Konduktiva development environment like the [[https://konduktiva.org/doku.php?id=vim-tmux-setup|automatic TMUX+VIM setup tools]]. The next steps for me will be writing some code that will allow smooth and gradual transitions between music. In more technical terms, figuring out how to gradually and smoothly transition an array of numbers to a final state. That would mean figuring out a way to quantify how different two number arrays are and how to gradually transition arrays without feeling slow or sudden. To prepare for this I have been reading Artificial intelligence: a modern approach by Russell Stuart J and Norvig Peter. Furthermore, I have been making other improvements to Konduktiva. Recently, I have been experimenting with improvements to the scheduler to make it more accurate. I have also been adding more methods to QuantizedMap class to make it more useful.