New issue
Advanced search Search tips

Issue 829767 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: Apr 2018
Components:
EstimatedDays: ----
NextAction: ----
OS: Mac
Pri: 2
Type: Bug-Regression

Blocking:
issue 828826



Sign in to add a comment

No audio when using DynamicsCompressorNode after reconnection

Reported by andrew.macpherson@soundtrap.com, Apr 6 2018

Issue description

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

Steps to reproduce the problem:
1. Go to https://jsfiddle.net/20bhjuyv/4/ and click in the document area to run the Javascript.
2. After 2 seconds a tone should play (works in earlier Chrome).
3. Instead there is no sound.

What is the expected behavior?

What went wrong?
After disconnecting and reconnecting an earlier part of the graph the DynamicsCompressorNode stops working after its tail time (if there is silent input). 
Do nodes need to cancel any tail time scheduled disconnections if a new input is connected?

Did this work before? Yes At least in 65.0.3325.181 and probably later

Does this work in other browsers? Yes

Chrome version: 67.0.3389.0  Channel: canary
OS Version: OS X 10.13.4
Flash Version:
 

Comment 1 by rtoy@chromium.org, Apr 6 2018

Owner: rtoy@chromium.org
Status: Assigned (was: Unconfirmed)
Yep, that's exactly what I see in canary.  Not sure what's happening here though.

Comment 2 by rtoy@chromium.org, Apr 9 2018

Ok, I think there's some confusion in RemoveTailProcessingHandler.  If tail processing is complete, we should remove the handler from the list and also disable outputs.

But if we're removing the removing the handler from the list because we made a connection (or re-enabled output), we don't actually want to disable the output.


Comment 3 by rtoy@chromium.org, Apr 9 2018

Ok.  When gain0 disconnects, the compressor starts tail processing.  When gain0 reconnects, we don't inform the compressor to end tail processing.  When the tail time comes, the compressor output is disabled.  And nothing ever informs the compressor to enable outputs gain.

I think this is not unique to the compressor.  Any node with with a non-zero tail + latency time should have this problem.

Comment 4 by rtoy@chromium.org, Apr 9 2018

Status: Started (was: Assigned)

Comment 5 by rtoy@chromium.org, Apr 10 2018

Blocking: 828826
Project Member

Comment 6 by bugdroid1@chromium.org, Apr 11 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/00a02b5ca5fc489867d28ddaa3c8c0b753494cd0

commit 00a02b5ca5fc489867d28ddaa3c8c0b753494cd0
Author: Raymond Toy <rtoy@chromium.org>
Date: Wed Apr 11 05:38:46 2018

Remove from tail list if node is connected or re-enabled

When a node has its output disabled (because of disconnection or a
source finishing), the node is placed on the tail processing list (if
it has a tail).

But when an upstream node is reconnected or otherwise has outputs
enabled, we need to traverse the graph and re-enable all the outputs
and if the node is on the tail processing list, we need to remove it
from the list.  If we don't, then when the tail time comes, the node
will have it's output disabled and nothing will enable it again.

Also, last_non_silent_time_ was incorrectly initialized to -1 instead
of 0, causing tail processing to end 1 sec early in some cases.

Manually verified that test-connections.html fails without this CL
and passes with this CL.  Also verified that the repro case works
with this CL.

Bug:  829767 
Test: AudioNode/test-connections.html
Change-Id: I3770806d30fad71c670930cc9427347ede798c90
Reviewed-on: https://chromium-review.googlesource.com/1002734
Commit-Queue: Raymond Toy <rtoy@chromium.org>
Reviewed-by: Hongchan Choi <hongchan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#549776}
[add] https://crrev.com/00a02b5ca5fc489867d28ddaa3c8c0b753494cd0/third_party/WebKit/LayoutTests/webaudio/AudioNode/tail-connections.html
[modify] https://crrev.com/00a02b5ca5fc489867d28ddaa3c8c0b753494cd0/third_party/blink/renderer/modules/webaudio/audio_node.cc
[modify] https://crrev.com/00a02b5ca5fc489867d28ddaa3c8c0b753494cd0/third_party/blink/renderer/modules/webaudio/deferred_task_handler.cc
[modify] https://crrev.com/00a02b5ca5fc489867d28ddaa3c8c0b753494cd0/third_party/blink/renderer/modules/webaudio/deferred_task_handler.h

Comment 7 by rtoy@chromium.org, Apr 11 2018

Status: Fixed (was: Started)

Sign in to add a comment