- 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/24244744@github.com>
> [Original comment](https://www.w3.org/Bugs/Public/show_bug.cgi?id=20039#2) by Chris Rogers on W3C Bugzilla. Thu, 29 Nov 2012 17:28:20 GMT (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. > > > > 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. --- Reply to this email directly or view it on GitHub: https://github.com/WebAudio/web-audio-api/issues/189#issuecomment-24244744
Received on Wednesday, 11 September 2013 14:38:58 UTC