[x3d-public] Sound v4 > channel nodes > node design comparison v4 vs Doug proposed

GPU Group gpugroup at gmail.com
Sun Mar 5 05:44:05 PST 2023


Here's an even better proposed design using a 3-tuple, and showing more
tested scenarios

CHANNEL NODE DESIGN COMPARISON

v4: channel nodes as written in v4 Spec Draft Sound Component

- merger.children is a sequential list of output/destination channels

proposed: add 3 fields to ChannelMerger

-  MFInt32 indexStream, indexSource, indexDestination

- and eliminate ChannelSelector node.

- Merger.children is a list of audio streams.

I have both v4 and proposed implemented in freewrl: if indexStream, Source
or Destination is empty, thunks to v4

I tested both methods on 5 scenarios and they both work as follows:

a) swapping 2 channels

v4

        <ChannelMerger channelCount='6' >

            <ChannelSelector channelSelection='1'>

               <ChannelSplitter DEF='Channel_Splitter' channelCount='6'>

                 <AudioClip url='"sound/6_Channel_ID.wav"'/>

               </ChannelSplitter>

            </ChannelSelector>

            <ChannelSelector channelSelection='0'>

              <ChannelSplitter USE='Channel_Splitter'/>

            </ChannelSelector>

        </ChannelMerger>

proposed

        <ChannelMerger channelCount='6'

          indexStream='0,0'

          indexSource='0,1'

          indexDestination='1,0'

          >

             <ChannelSplitter DEF='Channel_Splitter' channelCount='6'>

              <AudioClip url='"sound/6_Channel_ID.wav"'/>

             </ChannelSplitter>

        </ChannelMerger>

b) merging 2 channels into 1

v4

        <ChannelMerger channelCount='6' >

          <Gain>

            <ChannelSelector channelSelection='1'>

               <ChannelSplitter DEF='Channel_Splitter' channelCount='6'>

                 <AudioClip url='"sound/6_Channel_ID.wav"'/>

               </ChannelSplitter>

            </ChannelSelector>

            <ChannelSelector channelSelection='0'>

              <ChannelSplitter USE='Channel_Splitter'/>

            </ChannelSelector>

          </Gain>

        </ChannelMerger>

proposed

        <ChannelMerger channelCount='6'

          indexStream='0,0'

          indexSource='0,1'

          indexDestination='0,0'

          >

             <ChannelSplitter DEF='Channel_Splitter' channelCount='6'>

               <AudioClip url='"sound/6_Channel_ID.wav"'/>

             </ChannelSplitter>

        </ChannelMerger>

c) merging 2 channels into 2nd merger channel (skipping first output
channel)

v4

        <ChannelMerger channelCount='6' >

          <Gain/>

          <Gain>

            <ChannelSelector channelSelection='1'>

               <ChannelSplitter DEF='Channel_Splitter' channelCount='6'>

                <AudioClip url='"sound/6_Channel_ID.wav"'/>

               </ChannelSplitter>

            </ChannelSelector>

            <ChannelSelector channelSelection='0'>

              <ChannelSplitter USE='Channel_Splitter'/>

            </ChannelSelector>

          </Gain>

        </ChannelMerger>

proposed:

        <ChannelMerger channelCount='6'

          indexStream='0,0'

          indexSource='0,1'

          indexDestination='1,1'

          >

             <ChannelSplitter DEF='Channel_Splitter' channelCount='6'>

              <AudioClip url='"sound/6_Channel_ID.wav"'/>

             </ChannelSplitter>

        </ChannelMerger>



d) assign different audio streams to first and 2nd channnels (play beat in
left, cnote in right)

v4

        <ChannelMerger channelCount='2' >

              <Gain gain='.5'><AudioClip url='"sound/beat.mp3"'/></Gain>

              <Gain gain='.5'><AudioClip url='"sound/cnote.wav"'/></Gain>

        </ChannelMerger>

proposed:

        <ChannelMerger channelCount='2'

          indexSteam='0,0'

          indexSourc='-1,-1'

          indexDestination='0,1'

          >

              <Gain gain='.5'><AudioClip url='"sound/beat.mp3"'/></Gain>

              <Gain gain='.5'><AudioClip url='"sound/cnote.wav"'/></Gain>

        </ChannelMerger>

e) assign different audio streams to first and 2nd channnels via splitter
take first channel (play beat in left, cnote in right)

v4

        <ChannelMerger channelCount='2' >

            <ChannelSelector channelChoice='0'>

              <ChannelSplitter channelCount='2'><AudioClip
url='"sound/beat.mp3"'/></ChannelSplitter>

            </ChannelSelector>

            <ChannelSelector channelChoice='0'>

              <ChannelSplitter channelCount='2'><AudioClip
url='"sound/cnote.wav"'/></ChannelSplitter>

            </ChannelSelector>

        </ChannelMerger>

proposed:

        <ChannelMerger channelCount='2'

          indexStream='0,1'

          indexSourc='0,0'

          indexDestination='0,1'

          >

              <ChannelSplitter channelCount='2'><AudioClip
url='"sound/beat.mp3"'/></ChannelSplitter>

              <ChannelSplitter channelCount='2'><AudioClip
url='"sound/cnote.wav"'/></ChannelSplitter>

        </ChannelMerger>

/CHANNEL NODE DESIGN COMPARISON

On Sat, Mar 4, 2023 at 10:20 AM GPU Group <gpugroup at gmail.com> wrote:

> CHANNEL NODE DESIGN COMPARISON
>
> v4: channel nodes as written in v4 Spec Draft Sound Component
>
> Doug proposed: add 2 fields to ChannelMerger MFInt32 indxDst and indxSrc
> and eliminate ChannelSelector node
>
> I have both v4 and Doug proposed implemented in freewrl: if indxDst or
> indxSrc is empty, thunks to v4
>
> I tested both methods on 3 scenarios and they both work as follows:
>
> a) swapping 2 channels
>
> v4
>
>         <ChannelMerger channelCount='6' >
>
>             <ChannelSelector channelSelection='1'>
>
>                <ChannelSplitter DEF='Channel_Splitter' channelCount='6'>
>
>                  <AudioClip url='"sound/6_Channel_ID.wav"'/>
>
>                </ChannelSplitter>
>
>             </ChannelSelector>
>
>             <ChannelSelector channelSelection='0'>
>
>               <ChannelSplitter USE='Channel_Splitter'/>
>
>             </ChannelSelector>
>
>         </ChannelMerger>
>
> Doug proposed
>
>         <ChannelMerger channelCount='6'
>
>           indxSrc='0,1'
>
>           indxDst='1,0'
>
>           >
>
>              <ChannelSplitter DEF='Channel_Splitter' channelCount='6'>
>
>               <AudioClip url='"sound/6_Channel_ID.wav"'/>
>
>              </ChannelSplitter>
>
>             <ChannelSplitter USE='Channel_Splitter'/>
>
>         </ChannelMerger>
>
> b) merging 2 channels into 1
>
> v4
>
>         <ChannelMerger channelCount='6' >
>
>           <Gain>
>
>             <ChannelSelector channelSelection='1'>
>
>                <ChannelSplitter DEF='Channel_Splitter' channelCount='6'>
>
>                  <AudioClip url='"sound/6_Channel_ID.wav"'/>
>
>                </ChannelSplitter>
>
>             </ChannelSelector>
>
>             <ChannelSelector channelSelection='0'>
>
>               <ChannelSplitter USE='Channel_Splitter'/>
>
>             </ChannelSelector>
>
>           </Gain>
>
>         </ChannelMerger>
>
> Doug proposed
>
>         <ChannelMerger channelCount='6'
>
>           indxSrc='0,1'
>
>           indxDst='0,0'
>
>           >
>
>              <ChannelSplitter DEF='Channel_Splitter' channelCount='6'>
>
>                <AudioClip url='"sound/6_Channel_ID.wav"'/>
>
>              </ChannelSplitter>
>
>              <ChannelSplitter USE='Channel_Splitter'/>
>
>         </ChannelMerger>
>
> c) merging 2 channels into 2nd merger channel (skipping first output
> channel)
>
> v4
>
>         <ChannelMerger channelCount='6' >
>
>           <Gain/>
>
>           <Gain>
>
>             <ChannelSelector channelSelection='1'>
>
>                <ChannelSplitter DEF='Channel_Splitter' channelCount='6'>
>
>                 <AudioClip url='"sound/6_Channel_ID.wav"'/>
>
>                </ChannelSplitter>
>
>             </ChannelSelector>
>
>             <ChannelSelector channelSelection='0'>
>
>               <ChannelSplitter USE='Channel_Splitter'/>
>
>             </ChannelSelector>
>
>           </Gain>
>
>         </ChannelMerger>
>
> Doug proposed:
>
>         <ChannelMerger channelCount='6'
>
>           indxSrc='0,1'
>
>           indxDst='1,1'
>
>           >
>
>              <ChannelSplitter DEF='Channel_Splitter' channelCount='6'>
>
>               <AudioClip url='"sound/6_Channel_ID.wav"'/>
>
>              </ChannelSplitter>
>
>             <ChannelSplitter USE='Channel_Splitter'/>
>
>         </ChannelMerger>
>
>
>
> /CHANNEL NODE DESIGN COMPARISON
>
> -Doug
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20230305/2d3b3f25/attachment-0001.html>


More information about the x3d-public mailing list