- From: Jory <me@jory.org>
- Date: Fri, 15 Mar 2013 14:15:36 -0700
- To: Jory <me@jory.org>
- Cc: public-audio-dev@w3.org
I removed the panner node and suddenly I have 5.1 playback of my 6-channel WAVE file! Yay! Jory On Fri, 15 Mar 2013 11:53:55 -0700, Jory wrote: > 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 >> Jory me@jory.org http://studio.jory.org
Received on Friday, 15 March 2013 21:16:06 UTC