[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