New issue
Advanced search Search tips

Issue 923957 link

Starred by 1 user

Issue metadata

Status: Assigned
Owner:
Cc:
Components:
EstimatedDays: ----
NextAction: 2019-01-29
OS: Linux , Windows , Mac
Pri: 1
Type: Bug-Regression



Sign in to add a comment

AudioWorkletNode seems to silence all audio rendering after being disposed

Reported by yotamm...@gmail.com, Yesterday (32 hours ago)

Issue description

UserAgent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36

Steps to reproduce the problem:
1. Go to: https://wo8w4rmv58.codesandbox.io/
2. Click the button labeled "osc!". This button plays an OscillatorNode for a moment
3. Click the button labeled "worklet!". This button plays an OscillatorNode through an AudioWorkletNode (specifically the BitCrusher example from the spec website)
4. When the second sample is done playing, click "osc!" again. 
5. Notice there is no sound in either of the buttons any more. The entire page is silent. 

What is the expected behavior?
After the AudioWorkletNode is done playing, the rest of the audio should be allowed to play normally. 

What went wrong?
The AudioWorkletNode seems to completely silence the page after it's source node is garbage collected. The page does is not able to make sound again until the tab is refreshed. 

Did this work before? N/A 

Does this work in other browsers? N/A

Chrome version: 71.0.3578.98  Channel: stable
OS Version: OS X 10.13.6
Flash Version: 

Code here: https://codesandbox.io/s/wo8w4rmv58
 

Comment 1 by swarnasree.mukkala@chromium.org, Yesterday (26 hours ago)

Labels: Needs-Triage-M71

Comment 2 by phanindra.mandapaka@chromium.org, Today (22 hours ago)

Cc: phanindra.mandapaka@chromium.org
Components: Internals>Media>Audio
Labels: -Type-Bug -Pri-2 hasbisect-per-revision Triaged-ET RegressedIn-67 Target-71 Target-72 Target-73 M-73 FoundIn-71 FoundIn-73 FoundIn-72 OS-Linux OS-Windows Pri-1 Type-Bug-Regression
Owner: rtoy@chromium.org
Status: Assigned (was: Unconfirmed)
Able to reproduce the issue on chrome version 71.0.3578.98 and latest chrome 73.0.3679.0 using Windows 10, Mac 10.14.0, Ubuntu 17.10. 
Below is the bisect information for same.
Bisect Info:
================
Good build: 67.0.3371.0
Bad build:  67.0.3372.0
You are probably looking for a change made after 543505 (known good), but no later than 543506 (first known bad).
CHANGELOG URL:
https://chromium.googlesource.com/chromium/src/+log/38c6a5e503d885f1ebc16461749025e3b81a40df..9d4a34cadf1b7d85f4ad0b709374aaaf59325a8d
Change-Id: I82407ed0a9fe84c5012333af8af27f4dd08d29b8
Reviewed-on: https://chromium-review.googlesource.com/953970

Raymond Toy:Please confirm the issue and help in re-assigning if it is not related to your change.

Thanks..!

Comment 3 by dalecur...@chromium.org, Today (11 hours ago)

Cc: hongchan@chromium.org
Components: -Internals>Media>Audio Blink>WebAudio

Comment 4 by hongchan@chromium.org, Today (11 hours ago)

NextAction: 2019-01-29
Owner: hongchan@chromium.org
Thanks for filing the issue. I'll investigate.

Comment 5 by hongchan@chromium.org, Today (8 hours ago)

phanindra.mandapaka@

Thanks so much for bisecting. Were you able to here the sound playing correctly at 67.0.3371.0? Just trying to clarify the definition of "Good build" and "Bad build".

Comment 6 by hongchan@chromium.org, Today (7 hours ago)

Labels: -Needs-Triage-M71 Needs-Feedback
I figured out what is happening:

The example code from the spec is not really complete.

 - When the input to the worklet node stops, the channel configuration in the path changes.
 - So the code actually need to tap "input" to figure out the correct channel count.
 - When the graph dynamically changes, input[channel][i] can be NaN when then "i" is based on the output channel.
 - When you have any NaN value in the output stream, it will become silent no matter what else you have in the graph.

Here's the fixed version: https://codesandbox.io/s/q79lj30wz6

(I believe this is my mistake in the spec example code)

Currently there's no easy way to catch NaN from AWGS. You can throw an error by using onprocessorerror:
https://github.com/GoogleChromeLabs/web-audio-samples/blob/master/audio-worklet/basic/handling-errors/error-processor.js

Comment 7 by hongchan@chromium.org, Today (6 hours ago)

> - When you have any NaN value in the output stream, it will become silent no matter what else you have in the graph.

You can see the speaker icon on the tab is still playing when you don't hear nothing. That's a sign of NaN coming out of your output.

Sign in to add a comment