W3C home > Mailing lists > Public > public-audio-dev@w3.org > March 2013

Re: Multi-channel hardware support available for testing in Chrome Canary

From: Jory <me@jory.org>
Date: Fri, 15 Mar 2013 11:53:55 -0700
Message-Id: <10428341-6292-4925-B827-06E5D91023E5@jory.org>
Cc: "public-audio-dev@w3.org" <public-audio-dev@w3.org>
Ah, so it was the panner that was messing with me. Are plans to make the panner into a steerable multichannel one? I'm sure I won't be the only audio developer to get thrown by this, as I'd have expected it behave quite differently. I guess for the moment, custom panning code has to be written to handle surround steering.

I'll give your suggestions a try in a bit. 

Thanks!

Jory

me@jory.org
http://studio.jory.org

On Mar 15, 2013, at 11:08, Chris Wilson <cwilso@google.com> wrote:

> I will be writing a demo, yes.  As Chris said, to utilize the multi-channel output you really want to use ChannelMergerNodes - unless you're playing a source buffer node that is multichannel.
> 
> I'd point out text from the spec on AudioPannerNode: "The output of this node is hard-coded to stereo (2 channels) and currently cannot be configured."  You won't get surround-sound placement from Panners, at least not based on the current spec - similarly ConvolverNodes will never output more than two channels.  If you run a 6-channel source through one of those nodes, it would get downsampled to stereo.  This is mentioned in their respective sections, but also in Section 9:
> 
> // PannerNode and ConvolverNode are like this by default.
> pannerNode.channelCount = 2;
> pannerNode.channelCountMode = "clamped-max";
> pannerNode.channelInterpretation = "speakers";
> As for a 6-channel WAV file - well, I don't have a 6-channel system handy, but it should work.  I tested decoding a 6-channel WAV (sample from McGill: http://www-mmsp.ece.mcgill.ca/documents/AudioFormats/WAVE/Samples.html) and it worked fine.  As in the spec, if you had 5.1 hardware, you'd have to set this to get it to output correctly:
> 
> // Set “hardware output” to 5.1
> context.destination.channelCount = 6;
> context.destination.channelCountMode = "explicit";
> context.destination.channelInterpretation = "speakers";
> Then connect the 6-channel BufferSourceNode to the context.destination.
> 
> The output.L, .R, .C in section 9.1 are misleading you - that is effectively pseudocode detailing how up/downmixing should be done between layouts.  Your "forced mono gets sent to the Center channel" is shown in that section:
>     1 -> 5.1 : up-mix from mono to 5.1
>         output.L = 0;
>         output.R = 0;
>         output.C = input; // put in center channel
>         output.LFE = 0;
>         output.SL = 0;
>         output.SR = 0;
> 
> Simplistic version: you either need to 
> work with original multi (>2) channel sources and set your "hardware output" to interpret as speakers - which case you need to be careful with nodes that downsample (Convolver and Panner), or 
> set interpretation to "discrete", and make sure you're sending the correct number of channels to the output to fill up all the channels.  This would use mergers, and would also be the way you would implement a digital DJ app or other multiple-paired-stereo-outputs case (e.g. a DAW).
> Either way, of course, you'll want to set the context.destination.channelCount to the desired number of channels, and the channelCountMode to "explicit".
> 
> Hope that helps,
> -Chris
> 
> 
> On Fri, Mar 15, 2013 at 10:47 AM, Jory <me@jory.org> wrote:
>> I spent a lot of time reading through that part of the spec lat night, but to no avail. I didn't try the ChannelMergerNode, so I'll give that a shot.
>> 
>> Something that was completely unclear to me was what output.L, output.R, output.C, etc referred to. Where is output coming from? I didn't see anything like that in any of the examples elsewhere, nor could I found anything that subdivided channels inside the Inspector in Canary.
>> 
>> Also, should multichannel audio files play? If so, what formats?
>> 
>> Jory
>> 
>> me@jory.org
>> http://studio.jory.org
>> 
>> On Mar 15, 2013, at 10:34, Chris Rogers <crogers@google.com> wrote:
>> 
>>> 
>>> 
>>> 
>>> On Thu, Mar 14, 2013 at 11:11 PM, Jory <me@jory.org> wrote:
>>>> On Thu, 14 Mar 2013 15:53:50 -0700, Chris Rogers wrote:
>>>> > For those interested in multi-channel output in the Web Audio API, here's
>>>> > your chance to try out an early build.  This could be of interest for
>>>> > digital DJ type applications, or rendering to multi-channel speaker
>>>> > installations...
>>>> >
>>>> > Please note this is an early build and little testing has yet been made.
>>>> >  So far I've tested on several devices on OSX.  I'm interested in your
>>>> > feedback!
>>>> >
>>>> > The .maxChannelCount attribute is now exposed to show the actual number of
>>>> > hardware channels:
>>>> >
>>>> https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioDestinationNode
>>>> >
>>>> > The .channelCount attribute should now be settable on the
>>>> > AudioDestinationNode to values up to .maxChannelCount
>>>> >
>>>> > Cheers,
>>>> > Chris
>>>> 
>>>> Well, I've spent a couple hours playing around, since multichannel
>>>> audio certainly interests me, both for games and music. I've had very
>>>> little success, though.
>>>> 
>>>> I'm finding it very difficult to get any audio to play out anything but
>>>> the Left and Right channels. The only success I've had was forcing a
>>>> down-mix to 1 channel, where sound finally came out my Center channel.
>>>> So clearly the system functions in some manner. I've tried setting up a
>>>> 3D panner and hard-coding positional panning, but sound never leaves my
>>>> Lft-Rht channels.
>>> 
>>> Hi Jory, I believe Chris Wilson will be writing an article with more details and complete sample code.  In the meantime, you can look at some of the partial example code here:
>>> https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#UpMix
>>> 
>>> Just to add a little more detail, with the "digital DJ" example you'd want to use a ChannelMergerNode to combine two separate stereo mixes.  The first one would be connected to input 0 of the merger and the 2nd to input 1.  Then the merger would be connected to the destination as configured in the partial example code.
>>> 
>>> The ChannelMergerNode turns out to be really important for these types of applications.  In another example, if your hardware supported 8 channels of output, you could configure it as 8-channel discrete, then create a merger and connect eight independent mono AudioNodes to inputs 0 - 7 of the merger.  Then you could hookup eight speakers and place them anywhere in the room you like.  And the mono sources could be whatever you want - maybe 8 de-correlated channels of white noise...
>>> 
>>> Hope that helps.
>>> 
>>>  
>>>> 
>>>> I also tried playing back a 6-channel interleaved WAV file, but while
>>>> the file appears to "play", sound doesn't come from any speaker, no
>>>> matter how I try to configure the channelCount.
>>>> 
>>>> I'm beginning to wonder if 6-channel source files are playable at this
>>>> time or if that's unsupported. (Everything seems to have choked when I
>>>> supplied a 6-channel AAC file, but I'm not even 100% the file I
>>>> supplied was even playable, since getting multi-channel AAC output is
>>>> kinda challenging with today's tools.) Also, a bit of sample code would
>>>> do my morale wonders right about now. :-)
>>>> 
>>>> Thanks!
>>>> 
>>>> Jory
>>>> 
>>>> me@jory.org
>>>> http://studio.jory.org
> 
Received on Friday, 15 March 2013 18:54:29 GMT

This archive was generated by hypermail 2.3.1 : Friday, 15 March 2013 18:54:29 GMT