-
Notifications
You must be signed in to change notification settings - Fork 4
Home
WebAudioXML is a javascript library that makes it possible to create Web Audio applications using XML syntax. It is a PhD research project by Hans Lindetorp. The XML syntax is a proposal for a standardized way of structuring audio node trees for Web Audio API using XML. The specification for WebAudioXML defines how to structure Audio objects in a hierarchical, modular way using XML. For integration in a web-based application, it requires WebAudioXML.js, a JavaScript library that parses the XML and creates and connects all Web Audio nodes into a tree-like structure, called an Audio Graph. The code is open source and freely available for download from GitHub (https://github.com/hanslindetorp/WebAudioXML). There are also some DEMOs available at https://codepen.io/collection/DjaYkE?grid_type=list.
WebAudioXML is added to a web page using one line of HTML-code added to the
-element or at the end of the . The ‘data-source’ attribute specifies the path to a WebAudioXML document.ex. external file:
<script src="WebAudioXML.js" data-source="audio.xml"></script>
The ‘data-source’ can be a relative path or an address pointing to a remote file. It is also possible to point to an embedded XML-element within the HTML-file using the ‘id’ attribute as an identifier.
ex. embedded XML:
<xml id="WebAudioXML">
<Audio version="1.0"></Audio>
</xml>
<script src="WebAudioXML.js" data-source="#WebAudioXML"></script>
The following shows the simplest configuration using only one OscillatorNode connected to the Web Audio destination:
<?xml version="1.0" encoding="UTF-8"?>
<audio version="1.0">
<OscillatorNode></OscillatorNode>
</audio>
The structure of the XML-data follows some basic rules. The root element is named and the other elements can be either a valid Web Audio node, a Web Audio parameter or one of the following custom elements: mixer, chain, synth, voice, send, envelope or link. See the separate pages for comments on each element type.
Any valid Web Audio node can potentially be specified using WebAudioXML. The name structure follows the Web Audio API specification. Currently, the following nodes are implemented and tested:
- AudioBufferSourceNode
- MediaStreamAudioSourceNode
- BiquadFilterNode
- ConvolverNode
- DelayNode
- DynamicsCompressorNode
- GainNode
- OscillatorNode
- StereoPannerNode
- WaveShaperNode
Any valid Web Audio parameters can be set using attributes. The following example shows an oscillator node with type set to ‘sawtooth’ and frequency set to 880 Hz.
<?xml version="1.0" encoding="UTF-8"?>
<Audio version="1.0">
<OscillatorNode type="sawtooth" frequency="880"></OscillatorNode>
</Audio>
All codenames and attributes are case-insensitive, but all examples use a recommended way of specifying them and are guided by the standard set by WebAudioAPI. To be honest, I would rather have used a case-sensitive implementation but I wanted to support embedded XML inside and HTML-document which is converting the names to uppercase in an inconsistent manner between different browsers.
Please follow my research journey at http://hans.arapoviclindetorp.se and https://www.facebook.com/hanslindetorpresearch/
- Collaborative music-making: special educational needs school assistants as facilitators in performances with accessible digital musical instruments (Frontiers in Computer Science 2023)
- Playing the Design: Creating Soundscapes through Playful Interaction (SMC2023)
- Accessible sonification of movement: A case in Swedish folk dance (SMC2023)
- Evaluating Web Audio for Learning, Accessibility, and Distribution (JAES2022)
- Audio Parameter Mapping Made Explicit Using WebAudioXML (SMC2021)
- Putting Web Audio API To The Test: Introducing WebAudioXML As A Pedagogical Platform (WAC2021)
- Sonification for everyone everywhere – Evaluating the WebAudioXML Sonification Toolkit for browsers (ICAD2021)
- WebAudioXML: Proposing a new standard for structuring web audio (SMC2020)