- From: Chris Wilson <cwilso@google.com>
- Date: Tue, 3 Sep 2013 13:06:33 -0700
- To: Marcus Geelnard <mage@opera.com>
- Cc: WebAudio <public-audio@w3.org>
- Message-ID: <CAJK2wqWjv18M0UUxJ69R9pbQ0HO=oGSgwQtLt1jPa3VOMbSCOw@mail.gmail.com>
1) & 2) to me, the value of ROC's proposal is that in most cases, the getChannelData() method can continue to be used precisely as it is today. 3) I thought we'd agreed that the AudioProcessingEvent was a separate topic at some point. Either way - I'm not opposed to discussing making AudioProcessingEvent use arrays of Float32Arrays instead of AudioBuffers. 4) I still consider this a feature, not a bug. :) On Mon, Sep 2, 2013 at 2:56 AM, Marcus Geelnard <mage@opera.com> wrote: > Hi all! > > Since we have a Cfc coming up, I'd like to get some feedback on a few > points about ROC's proposal for AudioBuffers [1], since I'm a bit short on > ideas myself. > > Generally speaking I'm in the "can live with" camp. I.e. I'm not happy > with the syntax/semantics, but I understand the position of supporting > existing content, and it's hard to do anything much different from ROC's > proposal without breaking existing content (if that indeed is the main > goal). > > > *The main things that bother me about the proposal are*: > > > 1) The naming/functionality of getChannelData(). > > If we disregard the case of the AudioProcessingEvent (see below), the main > purpose (at least a very important function) of getChannelData() seems to > be to *set* the channel data. > > We now have the copyChannelDataTo() method for getting a persistent > version of the channel data, while the getChannelData() is used for getting > a volatile (sometimes persistent!) version of the channel data that may > later be transfered back to the AudioBuffer. > > IMO this is confusing (i.e. "get" ~= set/modify, "copy" == get), to say > the least. > > > 2) The getChannelData() method can return a persistent copy. > > If you call getChannelData() on an AudioBuffer that is in use, you will > get a persistent copy of the AudioBuffer data (i.e. modifying the data does > nothing to the AudioBuffer, and the array will never be neutered), which > kind of goes against the purpose of getChannelData(). Again, I find this > quite confusing. > > I think that a better solution would be to throw in that case (or possibly > return an empty array). > > > 3) The AudioProcessingEvent still uses AudioBuffers. > > I realize that not all agree that this is a problem, but this complicates > the semantics of the AudioBuffer (among other things). For instance, in an > AudioProcessingEvent getChannelData() is used both for getting the input > channel data and for setting the output channel data. > > IMO the better solution would be to pass pure Float32Arrays in the event > handler instead (using neutering and ownership transfer as necessary). > > > 4) Data transfer from JS to an AudioBuffer is implicit. > > The data transfer from JS to an AudioBuffer is implicit by design, rather > than explicit. This is confusing, and could lead to hard-to-find bugs. > > In general it's also sub-optimal from a performance perspective, since > it's easier to design a performance critical application if you can limit > possible performance hits to explicit points in your code (e.g. let them > happen during pre-processing/loading stages rather than during playback > stages). Now, since the proposal relies heavily on neutering this might not > be much of an issue, but I still think that it's a good idea to at least > *consider* an implementation that does "acquire the contents" using a copy > operation. > > > *Possible solutions*? > > It's hard to both be backwards compatible and offer solutions to the above > issues without introducing new interfaces and keeping the old interfaces > only as deprecated. We've already been over that, and it seems to be a bad > idea to have deprecated interfaces in the v1 spec. > > However, I can think of at least two solutions for the future: > > A) Once we introduce worker-based processing nodes we could consider using > a slightly different design for those, hopefully one that does not include > AudioBuffers at all. > > B) We could also consider deprecating getChannelData() in favor of a more > explicit interface in a future version of the API. > > > /Marcus > > > > [1] https://wiki.mozilla.org/User:Roc/AudioBufferProposal > > -- > Marcus Geelnard > Technical Lead, Mobile Infrastructure > Opera Software > > > >
Received on Tuesday, 3 September 2013 20:07:01 UTC