Now that the CLAM NetworkEditor has become such a convenient tool to define audio processing systems, we started to use it massively instead of C++ code to integrate processings. Even thought, we started to find that whenever we change a configuration structure, a port/control name, or even a processing class name, the networks xml had to be edited by hand because they didn't load. That problem led us to avoid such kind of changes, which is not a sane option. 'Embrace change', agile gurus said, and so we did.
We have developed a python tool to support network refactoring. It can be used, both as a python module, or as a command line tool, to batch modify CLAM network files using high level operations such as:
- Renaming a processing class name
- Renaming a processing name
- Renaming processing ports or controls
- Renaming a processing configuration parameter
- Removing/adding/reorder configuration parameters
- Setting configuration parameters values
The script just does XPath navigation and DOM manipulations in order to know which pieces need to be changed. Each high level command is just a couple of lines in python.
We are starting to use it to:
- Adapt to changes in the C++ code
- Change network configuration parameters in batch
- Provide migration scripts for user's networks
About the last point, we plan the next release to provide network migration scripts containing a command set such as:
renameClass OutControlSender NewClassName
renameConnector AudioMixer inport "Input 0" "New Port Name 0"
renameConfig AudioMixer NumberOfInPorts NInputs
setConfigByType AudioMixer NInputs 14
Still some short term TODO's:
- Include the clam version in the network xml so that the ensureVersion and upgrade commands work.
- Integrating also Qt Designer UI files in the refactorings
- Add some other commands as they are needed
Happy CLAM networks refactoring!