- From: Olivier Thereaux <notifications@github.com>
- Date: Wed, 11 Sep 2013 07:30:17 -0700
- To: WebAudio/web-audio-api <web-audio-api@noreply.github.com>
- Message-ID: <WebAudio/web-audio-api/issues/189/24244748@github.com>
> [Original comment](https://www.w3.org/Bugs/Public/show_bug.cgi?id=20039#3) by Ehsan Akhgari [:ehsan] on W3C Bugzilla. Thu, 29 Nov 2012 21:00:36 GMT (In reply to [comment #3](#issuecomment-24244744)) > (In reply to [comment #2](#issuecomment-24244739)) > > (In reply to [comment #1](#issuecomment-24244733)) > > > (In reply to comment #0) > > > > Here is a list of problems that come to my mind right now. > > > > > > > > 1. It's not clear whether the callbacks have to be asynchronous or not. For > > > > example, if for some reason the implementation decides that it's unable to > > > > decode the audio right away, should it just call the failure callback > > > > directly, or call it the next time that the execution hits the event loop. > > > > > > I'm not sure I completely understand the question. The decoding is meant to > > > be asynchronous, so in some sense will not happen "right away". So neither > > > the success nor the error callback will be called directly, but at some > > > later time (a later time in the event loop). The failure callback should be > > > called if there is an actual error in the decoding, meaning that the audio > > > data is not one of the known and supported formats (depending on what the > > > user agent supports), or that the audio data is corrupt. > > > > Let me clarify the question. Consider this test case for example: > > > > var cx = new AudioContext(); > > var buf = new Uint8Array(100); > > // buf is filled with zeros, and therefore, not a valid audio stream > > var decodeFailed = false; > > cx.decodeAudioData(buf.buffer, function(x) { > > }, function(x) { > > decodeFailed = true; > > }); > > alert(decodeFailed); > > > > The question is, should decodeFailed be true or false after the call to > > decodeAudioData. The reason that I started to think about this is that in > > the Gecko implementation, we sniff the buffer synchronously as it's a > > relatively cheap operation, so in this case we will know immediately that > > the decoding operation will fail. Now, we have the option of calling the > > failure callback immediately which means that decodeFailed will be true when > > decodeAudioData returns, or calling it the next time that we hit the event > > loop, which means that decodeFailed will be false when decodeAudioData > > returns. > > I see. I would say that decodeFailed will be false, since the callback will > only happen the next time we hit the event loop. Sounds good. Do you want me to edit the spec to reflect this? (And also my point 3 in comment 0 perhaps?) > > > > 2. It's not clear what the AudioBuffer callback passed to the failure > > > > callback should contain. For example, if the audio's type cannot be > > > > sniffed, what should be passed to the failure callback? What if the source > > > > buffer doesn't contain valid samples and the decoding operation fails > > > > half-way? > > > > > > I think it's best that there is *no* AudioBuffer in the failure case. > > > > In that case, we need to change the Web IDL to offer two distinct callback > > types, like this: > > > > callback DecodeSuccessCallback = void (AudioBuffer decodedData); > > callback DecodeErrorCallback = void (); > > > > interface AudioContext { > > // ... > > void decodeAudioData(ArrayBuffer audioData, > > DecodeSuccessCallback successCallback, > > optional DecodeErrorCallback errorCallback); > > // ... > > }; > > > > I personally think that this makes way more sense. Please let me know if > > you want me to change the Web IDL accordingly. Thanks! > > Yes, agreed this makes more sense, and feel free to edit the IDL. Done: https://dvcs.w3.org/hg/audio/rev/cb492d3bd589. --- Reply to this email directly or view it on GitHub: https://github.com/WebAudio/web-audio-api/issues/189#issuecomment-24244748
Received on Wednesday, 11 September 2013 14:39:02 UTC