[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