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:
ensureVersion 1.3
renameClass OutControlSender NewClassName
renameConnector AudioMixer inport "Input 0" "New Port Name 0"
renameConfig AudioMixer NumberOfInPorts NInputs
setConfigByType AudioMixer NInputs 14
upgrade 1.3.2
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!
 

 

No comments:
Post a Comment