EuroSciPy logo


Cambridge, UK - 27-30 August 2014

Pafi: a Collaborative Musical Instrument Manufacturing Platform

Vladimir Popescu


The determination of a pipe acoustic impedance from its geometry is a method which has reached a certain maturity. This acoustical characteristic is of great importance to the music instrument makers community, as it can be related to many features of the musical instruments. A project funded by the National research agency of the French government has consisted in creating a platform for assisting musical instrument makers in their design and production processes. The platform allows makers to use and customize such acoustical computations and characteristics.

The Python language and the freely-available Cubic-Web knowledge management framework have been chosen for developing the platform, as a Web-based solution. The Pafi platform was developed from scratch in about 4 months and has now reached production stage.

The platform targets musical instrument makers without any particular computer skills and emphasizes many ergonomic aspects. A Web-based interface allows the users to store a lot of information about a particular instrument, like its internal geometry, which is also known as bore profile. A bore profile is described using simple elements like cones, cylinders, elbows, and lateral holes. These elements can be visualized as two-dimensional axial projections. The platform supports both woodwind and brass instruments, including for the latter their piston bore profiles.

The platform also allows the user to customize and visualize some instrument model acoustics-related computations, like the input impedance or other related quantities. The computations make heavy use of Numpy and Scipy. They concern various features of the bores, in relation to the bore profile geometry which includes lateral holes or pistons states, depending on the instruments’ fingerings. For brass instruments containing pistons, computations are particularly involved as the bore geometry changes deeply and dynamically according to the considered fingering.

Collaborating on instruments design is also a supported feature of the platform. This is accomplished via a generic collaboration model implemented in a distinct software component, seamlessly pluggable to the Pafi platform. The collaboration model draws on distributed version control principles and is supposed to be intuitive for the users. It allows to:

  • specify whether an instrument model can be updated or not;

  • specify with whom an instrument model can be shared, i.e., who collaborates on an instrument; collaborators can see all the features related to a shared instrument model.

  • clone an instrument model (i.e. have all its contents deeply copied), only if the instrument cannot be updated. Only the creator or the collaborators of an instrument can clone it.

  • trace the evolution of an instrument design, as a collaboration tree, where one can see the clones of an instrument, rooted on the original instrument model, and the user who created each instrument in the collaboration tree.

An interesting feature of the collaboration tree is that, when a user doesn't have reading rights on a node, all the part of the collaboration tree between the root and the said node is pruned, and thus the user only sees the subtree rooted in the first node on which s/he has reading rights. Hence, the user can see several subtrees of the collaboration tree.

Thus, the Pafi platform exhibits several innovative features relevant to the scientific Python community, among which the most important seems to be the collaboration on scientific computations. Indeed, once an instrument has been created, or cloned, for that matter, one can perform calculations on it and, based on them, further edit the instrument, and / or share it with other users.

In the near future, we want to be able to compute differences between various versions of the same instrument model, similarly to the differences between change sets in a version control system. To compute the difference, the structure of the instrument model would be recursively traversed and represented as a graph and compared to graph representations of other versions of the same instrument model.

The software component which implements the collaborative facilities is freely available from .

To sum up, Pafi is a medium-sized Python application relying on Numpy, Scipy and CubicWeb which provides facilities for collaborative musical instrument design.