| // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| part of $LIBRARY; |
| |
| $(ANNOTATIONS)class $CLASSNAME$EXTENDS$NATIVESPEC { |
| Stream<AudioProcessingEvent> _eventStream; |
| |
| /** |
| * Get a Stream that fires events when AudioProcessingEvents occur. |
| * This particular stream is special in that it only allows one listener to a |
| * given stream. Converting the returned Stream [asBroadcast] will likely ruin |
| * the soft-real-time properties which which these events are fired and can |
| * be processed. |
| */ |
| Stream<AudioProcessingEvent> get onAudioProcess { |
| if (_eventStream == null) { |
| var controller = new StreamController(); |
| var callback = (audioData) { |
| if (controller.hasListener) { |
| // This stream is a strange combination of broadcast and single |
| // subscriber streams. We only allow one listener, but if there is |
| // no listener, we don't queue up events, we just drop them on the |
| // floor. |
| controller.add(audioData); |
| } |
| }; |
| _setEventListener(callback); |
| _eventStream = controller.stream; |
| } |
| return _eventStream; |
| } |
| |
| $if DART2JS |
| _setEventListener(callback) { |
| JS('void', '#.onaudioprocess = #', this, |
| convertDartClosureToJS(callback, 1)); |
| } |
| $endif |
| |
| $!MEMBERS |
| } |