OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 part of $LIBRARY; | 5 part of $LIBRARY; |
6 | 6 |
7 $(ANNOTATIONS)class $CLASSNAME$EXTENDS$NATIVESPEC { | 7 $(ANNOTATIONS)class $CLASSNAME$EXTENDS$NATIVESPEC { |
8 Stream<AudioProcessingEvent> _eventStream; | 8 Stream<AudioProcessingEvent> _eventStream; |
9 | 9 |
10 /** | 10 /** |
11 * Get a Stream that fires events when AudioProcessingEvents occur. | 11 * Get a Stream that fires events when AudioProcessingEvents occur. |
12 * This particular stream is special in that it only allows one listener to a | 12 * This particular stream is special in that it only allows one listener to a |
13 * given stream. Converting the returned Stream [asBroadcast] will likely ruin | 13 * given stream. Converting the returned Stream [asBroadcast] will likely ruin |
14 * the soft-real-time properties which which these events are fired and can | 14 * the soft-real-time properties which which these events are fired and can |
15 * be processed. | 15 * be processed. |
16 */ | 16 */ |
17 Stream<AudioProcessingEvent> get onAudioProcess { | 17 Stream<AudioProcessingEvent> get onAudioProcess { |
18 if (_eventStream == null) { | 18 if (_eventStream == null) { |
19 var controller = new StreamController(); | 19 var controller = new StreamController(sync: true); |
20 var callback = (audioData) { | 20 var callback = (audioData) { |
21 if (controller.hasListener) { | 21 if (controller.hasListener) { |
22 // This stream is a strange combination of broadcast and single | 22 // This stream is a strange combination of broadcast and single |
23 // subscriber streams. We only allow one listener, but if there is | 23 // subscriber streams. We only allow one listener, but if there is |
24 // no listener, we don't queue up events, we just drop them on the | 24 // no listener, we don't queue up events, we just drop them on the |
25 // floor. | 25 // floor. |
26 controller.add(audioData); | 26 controller.add(audioData); |
27 } | 27 } |
28 }; | 28 }; |
29 _setEventListener(callback); | 29 _setEventListener(callback); |
30 _eventStream = controller.stream; | 30 _eventStream = controller.stream; |
31 } | 31 } |
32 return _eventStream; | 32 return _eventStream; |
33 } | 33 } |
34 | 34 |
35 $if DART2JS | 35 $if DART2JS |
36 _setEventListener(callback) { | 36 _setEventListener(callback) { |
37 JS('void', '#.onaudioprocess = #', this, | 37 JS('void', '#.onaudioprocess = #', this, |
38 convertDartClosureToJS(callback, 1)); | 38 convertDartClosureToJS(callback, 1)); |
39 } | 39 } |
40 $endif | 40 $endif |
41 | 41 |
42 $!MEMBERS | 42 $!MEMBERS |
43 } | 43 } |
OLD | NEW |