Graph-based approach versus XML+SMIL approach

Graph-based (node) model are natural for not too complex audio but there expressiveness power is questionable.

In the past, when working on MPEG-4 Systems, we have been involved in a graph-based (node) approach for different kinds of media (3D, audio, video, ...).
A format  called XMT (Extensible MPEG-4 Textual)) and an APi were defined.

Just after that, IBM  (see (http://www.research.ibm.com/mpeg4/Projects/XMTInterop.htm) went with a new XML version of XMT where synchronization was expressed in the  Synchronized Multimedia Integration Language (SMIL) 2.0 from the W3C consortium.

The graph-based XMT was then called XMT-A and the XML-SMIL based XMT called XMT-O (or high-level XMT).

In fact, XMT-O was found to be much simpler and  powerful than the graph based approach. And authoring was considerably easier.

Below is an example (an audio  jungle scene) of an XML document with time-structured audio objects  together with a mixer-and-effects-send model, the whole being expressed in XML with embedded SMIL.
This shows at some point the expressiveness of declarative model based on XML+SMIL. This jungle scene can be made to react to user-event .....
jacques

ps for Chris: exclusiveRandom with the semantic of omitMostRecent="1" :-)

 <cues>
        <cue id="river" begin="0s" loopCount="-1">
            <chunk pick="exclusiveRandom" fadeOutType="crossfade" fadeOutDur="0.5s">
                <sound src="/river_1-1.wav"/>
                <sound src="/river_1-2.wav"/>
                <sound src="/river_1-3.wav"/>
            </chunk>
            <chunk pick="exclusiveRandom" fadeOutType="crossfade" fadeOutDur="0.5s">
                <sound src="/river_2-1.wav"/>
                <sound src="/river_2-2.wav"/>
                <sound src="/river_2-3.wav"/>
            </chunk>
        </cue>      
        <cue id="wind" begin="0s" loopCount="-1">
            <chunk pick="random" fadeOutType="crossfade" fadeOutDur="0.5s">
                <sound src="/wind_1-1.wav"/>
                <sound src="/wind_1-2.wav"/>
                <sound src="/wind_1-3.wav"/>
                <sound src="/wind_1-4.wav"/>
            </chunk>
            <chunk pick="exclusiveRandom" fadeOutType="crossfade" fadeOutDur="0.5s">
                <sound src="/wind_strong_1.wav"/>
                <sound src="/wind_strong_2.wav"/>
                <triggerControl chance="10"/>    <!-- triggers sometimes a stronger wind loop -->
            </chunk>
        </cue>
        <cue id="rain" begin="object.rain"  loopCount="-1" >    
            <chunk pick="random" fadeOutType="crossfade" fadeOutDur="1s">
                <sound src="/rain_1-1.wav"/>
                <sound src="/rain_1-2.wav"/>
                <sound src="/rain_1-3.wav"/>
            </chunk>
        </cue>        
        <cue id="crickets" dur="rand(3, 10)s" restartOnRetrigger="never">
            <chunk pick="random" fadeInType="simplefade" fadeInDur="0.5s" fadeOutType="simplefade" fadeOutDur="0.5s">
                <sound src="crickets_1.wav" pickPriority="3"/>
                <sound src="crickets_2.wav" pickPriority="2"/>
                <sound src="crickets_3.wav" pickPriority="1"/>
                <sound src="crickets_4.wav" pickPriority="1"/>
            </chunk>
            <triggerControl autoStart="rand(0, 5)s"/>
            <spawnControl maxInstances="4"/>    <!-- no more than 4 crickets cues at the same time -->
        </cue>       
.........
 <cues>

 <sections>
        <masterSection volume="100">        
            <auditor>
                <locationControl location="0 0 0"/>
                <orientationControl orientation="0 0 1"/>
            </auditor>
            <dspControl dspName="reverb">
                <parameter name="preset" value="forest"/>
            </dspControl>
        </masterSection>
        <section id="ambiance" cues="river wind crickets">            
            <volumeControl level="60"/>
        </section>
        <section id="animals" cues="bird monkeys">
            <volumeControl level="100">
                <animate id="quiet_animals_anim" attribute="level" from="rand(25, 40)" to="100" dur="rand(10, 20)" fill="remove"/>
            </volumeControl>
        </section>
        <section id="river_3D" cues="river">
            <mix3D>
                <locationControl location="-10 0 50"/>    <!-- river in front of the auditor on the left -->
                <macroscopicControl size="2000 100 10000"/>
            </mix3D>
        </section>
        <section id="fly_3D" cues="fly">
            <mix3D>
                <locationControl enableAutomaticDoppler="true">
                    <animate id="fly_3D_anim" attribute="location" eventValue="fly.move.default"/>    <!-- change location by event, needs some program code here -->                
                </locationControl>
            </mix3D>
        </section>
    </sections>
        

Received on Monday, 5 July 2010 14:47:25 UTC