react-native-audio-api 0.6.2-rc.4 → 0.6.2-rc.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -130,9 +130,6 @@ class LockScreenManager(
130
130
  }
131
131
  }
132
132
  artworkThread!!.start()
133
- } else {
134
- md.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, null)
135
- nb.setLargeIcon(null as Bitmap?)
136
133
  }
137
134
 
138
135
  speed =
@@ -143,32 +143,9 @@ class MediaNotificationManager(
143
143
  pause = createAction("pause", "Pause", mask, PlaybackStateCompat.ACTION_PAUSE, pause)
144
144
  stop = createAction("stop", "Stop", mask, PlaybackStateCompat.ACTION_STOP, stop)
145
145
  next = createAction("next", "Next", mask, PlaybackStateCompat.ACTION_SKIP_TO_NEXT, next)
146
- previous =
147
- createAction(
148
- "previous",
149
- "Previous",
150
- mask,
151
- PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS,
152
- previous,
153
- )
154
-
155
- skipForward =
156
- createAction(
157
- "skip_forward_10",
158
- "Skip Forward",
159
- mask,
160
- PlaybackStateCompat.ACTION_FAST_FORWARD,
161
- skipForward,
162
- )
163
-
164
- skipBackward =
165
- createAction(
166
- "skip_backward_10",
167
- "Skip Backward",
168
- mask,
169
- PlaybackStateCompat.ACTION_REWIND,
170
- skipBackward,
171
- )
146
+ previous = createAction("previous", "Previous", mask, PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS, previous)
147
+ skipForward = createAction("skip_forward_10", "Skip Forward", mask, PlaybackStateCompat.ACTION_FAST_FORWARD, skipForward)
148
+ skipBackward = createAction("skip_backward_10", "Skip Backward", mask, PlaybackStateCompat.ACTION_REWIND, skipBackward)
172
149
  }
173
150
 
174
151
  private fun createAction(
@@ -19,6 +19,7 @@ class AudioBufferSourceNodeHostObject
19
19
  : AudioScheduledSourceNodeHostObject(node) {
20
20
  addGetters(
21
21
  JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loop),
22
+ JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loopSkip),
22
23
  JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, buffer),
23
24
  JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loopStart),
24
25
  JSI_EXPORT_PROPERTY_GETTER(AudioBufferSourceNodeHostObject, loopEnd),
@@ -27,9 +28,12 @@ class AudioBufferSourceNodeHostObject
27
28
 
28
29
  addSetters(
29
30
  JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loop),
31
+ JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loopSkip),
30
32
  JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, buffer),
31
33
  JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loopStart),
32
- JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loopEnd));
34
+ JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, loopEnd),
35
+ JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, onPositionChanged),
36
+ JSI_EXPORT_PROPERTY_SETTER(AudioBufferSourceNodeHostObject, onPositionChangedInterval));
33
37
 
34
38
  // start method is overridden in this class
35
39
  functions_->erase("start");
@@ -45,6 +49,13 @@ class AudioBufferSourceNodeHostObject
45
49
  return {loop};
46
50
  }
47
51
 
52
+ JSI_PROPERTY_GETTER(loopSkip) {
53
+ auto audioBufferSourceNode =
54
+ std::static_pointer_cast<AudioBufferSourceNode>(node_);
55
+ auto loopSkip = audioBufferSourceNode->getLoopSkip();
56
+ return {loopSkip};
57
+ }
58
+
48
59
  JSI_PROPERTY_GETTER(buffer) {
49
60
  auto audioBufferSourceNode =
50
61
  std::static_pointer_cast<AudioBufferSourceNode>(node_);
@@ -95,6 +106,12 @@ class AudioBufferSourceNodeHostObject
95
106
  audioBufferSourceNode->setLoop(value.getBool());
96
107
  }
97
108
 
109
+ JSI_PROPERTY_SETTER(loopSkip) {
110
+ auto audioBufferSourceNode =
111
+ std::static_pointer_cast<AudioBufferSourceNode>(node_);
112
+ audioBufferSourceNode->setLoopSkip(value.getBool());
113
+ }
114
+
98
115
  JSI_PROPERTY_SETTER(buffer) {
99
116
  auto audioBufferSourceNode =
100
117
  std::static_pointer_cast<AudioBufferSourceNode>(node_);
@@ -120,6 +137,20 @@ class AudioBufferSourceNodeHostObject
120
137
  audioBufferSourceNode->setLoopEnd(value.getNumber());
121
138
  }
122
139
 
140
+ JSI_PROPERTY_SETTER(onPositionChanged) {
141
+ auto audioBufferSourceNode =
142
+ std::static_pointer_cast<AudioBufferSourceNode>(node_);
143
+
144
+ audioBufferSourceNode->setOnPositionChangedCallbackId(std::stoull(value.getString(runtime).utf8(runtime)));
145
+ }
146
+
147
+ JSI_PROPERTY_SETTER(onPositionChangedInterval) {
148
+ auto audioBufferSourceNode =
149
+ std::static_pointer_cast<AudioBufferSourceNode>(node_);
150
+
151
+ audioBufferSourceNode->setOnPositionChangedInterval(value.getNumber());
152
+ }
153
+
123
154
  JSI_HOST_FUNCTION(start) {
124
155
  auto when = args[0].getNumber();
125
156
  auto offset = args[1].getNumber();
@@ -284,15 +284,21 @@ void AudioParam::removeInputNode(AudioNode *node) {
284
284
  }
285
285
  }
286
286
 
287
- std::shared_ptr<AudioBus> AudioParam::processARateParam(
288
- int framesToProcess,
289
- double time) {
290
- auto processingBus = audioBus_;
287
+ std::shared_ptr<AudioBus> AudioParam::calculateInputs(
288
+ const std::shared_ptr<AudioBus> &processingBus,
289
+ int framesToProcess) {
291
290
  processingBus->zero();
292
291
  if (!inputNodes_.empty()) {
293
292
  processInputs(processingBus, framesToProcess, true);
294
293
  mixInputsBuses(processingBus);
295
294
  }
295
+ return processingBus;
296
+ }
297
+
298
+ std::shared_ptr<AudioBus> AudioParam::processARateParam(
299
+ int framesToProcess,
300
+ double time) {
301
+ auto processingBus = calculateInputs(audioBus_, framesToProcess);
296
302
  for (size_t i = 0; i < framesToProcess; i++) {
297
303
  auto sample = getValueAtTime(time + i / context_->getSampleRate());
298
304
  processingBus->getChannel(0)->getData()[i] += sample;
@@ -302,9 +308,8 @@ std::shared_ptr<AudioBus> AudioParam::processARateParam(
302
308
  }
303
309
 
304
310
  float AudioParam::processKRateParam(int framesToProcess, double time) {
305
- auto processingBus = processARateParam(framesToProcess, time);
306
- // processingBus is a mono bus
307
- return processingBus->getChannel(0)->getData()[0];
311
+ auto processingBus = calculateInputs(audioBus_, framesToProcess);
312
+ return processingBus->getChannel(0)->getData()[0] + getValueAtTime(time);
308
313
  }
309
314
 
310
315
  double AudioParam::getQueueEndTime() {
@@ -63,6 +63,7 @@ class AudioParam {
63
63
  void updateQueue(ParamChangeEvent &event);
64
64
  void processInputs(const std::shared_ptr<AudioBus>& outputBus, int framesToProcess, bool checkIsAlreadyProcessed);
65
65
  void mixInputsBuses(const std::shared_ptr<AudioBus>& processingBus);
66
+ std::shared_ptr<AudioBus> calculateInputs(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess);
66
67
  };
67
68
 
68
69
  } // namespace audioapi
@@ -4,6 +4,7 @@
4
4
  #include <audioapi/core/sources/AudioBufferSourceNode.h>
5
5
  #include <audioapi/core/utils/Locker.h>
6
6
  #include <audioapi/dsp/AudioUtils.h>
7
+ #include <audioapi/events/AudioEventHandlerRegistry.h>
7
8
  #include <audioapi/utils/AudioArray.h>
8
9
  #include <audioapi/utils/AudioBus.h>
9
10
 
@@ -46,6 +47,10 @@ bool AudioBufferSourceNode::getLoop() const {
46
47
  return loop_;
47
48
  }
48
49
 
50
+ bool AudioBufferSourceNode::getLoopSkip() const {
51
+ return loopSkip_;
52
+ }
53
+
49
54
  double AudioBufferSourceNode::getLoopStart() const {
50
55
  return loopStart_;
51
56
  }
@@ -71,7 +76,14 @@ void AudioBufferSourceNode::setLoop(bool loop) {
71
76
  loop_ = loop;
72
77
  }
73
78
 
79
+ void AudioBufferSourceNode::setLoopSkip(bool loopSkip) {
80
+ loopSkip_ = loopSkip;
81
+ }
82
+
74
83
  void AudioBufferSourceNode::setLoopStart(double loopStart) {
84
+ if (loopSkip_) {
85
+ vReadIndex_ = loopStart * context_->getSampleRate();
86
+ }
75
87
  loopStart_ = loopStart;
76
88
  }
77
89
 
@@ -136,6 +148,30 @@ std::mutex &AudioBufferSourceNode::getBufferLock() {
136
148
  return bufferLock_;
137
149
  }
138
150
 
151
+ void AudioBufferSourceNode::sendOnPositionChangedEvent() {
152
+ if (onPositionChangedTime_ > onPositionChangedInterval_) {
153
+ std::unordered_map<std::string, EventValue> body = {
154
+ {"value", getStopTime()}};
155
+
156
+ context_->audioEventHandlerRegistry_->invokeHandlerWithEventBody(
157
+ "positionChanged", onPositionChangedCallbackId_, body);
158
+
159
+ onPositionChangedTime_ = 0;
160
+ }
161
+
162
+ onPositionChangedTime_ += RENDER_QUANTUM_SIZE;
163
+ }
164
+
165
+ void AudioBufferSourceNode::setOnPositionChangedInterval(int interval) {
166
+ onPositionChangedInterval_ = static_cast<int>(
167
+ context_->getSampleRate() * static_cast<float>(interval) / 1000);
168
+ }
169
+
170
+ void AudioBufferSourceNode::setOnPositionChangedCallbackId(
171
+ uint64_t callbackId) {
172
+ onPositionChangedCallbackId_ = callbackId;
173
+ }
174
+
139
175
  void AudioBufferSourceNode::processNode(
140
176
  const std::shared_ptr<AudioBus> &processingBus,
141
177
  int framesToProcess) {
@@ -153,6 +189,7 @@ void AudioBufferSourceNode::processNode(
153
189
  }
154
190
 
155
191
  handleStopScheduled();
192
+ sendOnPositionChangedEvent();
156
193
  } else {
157
194
  processingBus->zero();
158
195
  }
@@ -160,7 +197,7 @@ void AudioBufferSourceNode::processNode(
160
197
 
161
198
  double AudioBufferSourceNode::getStopTime() const {
162
199
  return dsp::sampleFrameToTime(
163
- static_cast<int>(vReadIndex_), alignedBus_->getSampleRate());
200
+ static_cast<int>(vReadIndex_), buffer_->getSampleRate());
164
201
  }
165
202
 
166
203
  /**
@@ -247,8 +284,13 @@ void AudioBufferSourceNode::processWithoutInterpolation(
247
284
 
248
285
  size_t framesLeft = offsetLength;
249
286
 
250
- if (loop_ && (readIndex >= frameEnd || readIndex < frameStart)) {
251
- readIndex = frameStart + (readIndex - frameStart) % frameDelta;
287
+ // if we are moving towards loop, we do nothing because we will achieve it
288
+ // otherwise, we wrap to the start of the loop if necessary
289
+ if (loop_ &&
290
+ ((readIndex >= frameEnd && direction == 1) ||
291
+ (readIndex < frameStart && direction == -1))) {
292
+ readIndex = frameStart +
293
+ ((long long int)readIndex - (long long int)frameStart) % frameDelta;
252
294
  }
253
295
 
254
296
  while (framesLeft > 0) {
@@ -278,7 +320,10 @@ void AudioBufferSourceNode::processWithoutInterpolation(
278
320
  readIndex += framesToCopy * direction;
279
321
  framesLeft -= framesToCopy;
280
322
 
281
- if (readIndex >= frameEnd || readIndex < frameStart) {
323
+ // if we are moving towards loop, we do nothing because we will achieve it
324
+ // otherwise, we wrap to the start of the loop if necessary
325
+ if ((readIndex >= frameEnd && direction == 1) ||
326
+ (readIndex < frameStart && direction == -1)) {
282
327
  readIndex -= direction * frameDelta;
283
328
 
284
329
  if (!loop_) {
@@ -20,6 +20,7 @@ class AudioBufferSourceNode : public AudioScheduledSourceNode {
20
20
  ~AudioBufferSourceNode() override;
21
21
 
22
22
  [[nodiscard]] bool getLoop() const;
23
+ [[nodiscard]] bool getLoopSkip() const;
23
24
  [[nodiscard]] double getLoopStart() const;
24
25
  [[nodiscard]] double getLoopEnd() const;
25
26
  [[nodiscard]] std::shared_ptr<AudioParam> getDetuneParam() const;
@@ -27,6 +28,7 @@ class AudioBufferSourceNode : public AudioScheduledSourceNode {
27
28
  [[nodiscard]] std::shared_ptr<AudioBuffer> getBuffer() const;
28
29
 
29
30
  void setLoop(bool loop);
31
+ void setLoopSkip(bool loopSkip);
30
32
  void setLoopStart(double loopStart);
31
33
  void setLoopEnd(double loopEnd);
32
34
  void setBuffer(const std::shared_ptr<AudioBuffer> &buffer);
@@ -34,6 +36,10 @@ class AudioBufferSourceNode : public AudioScheduledSourceNode {
34
36
  void start(double when, double offset, double duration = -1);
35
37
  void disable() override;
36
38
 
39
+ void setOnPositionChangedCallbackId(uint64_t callbackId);
40
+ void setOnPositionChangedInterval(int interval);
41
+ void sendOnPositionChangedEvent();
42
+
37
43
  protected:
38
44
  std::mutex &getBufferLock();
39
45
  void processNode(const std::shared_ptr<AudioBus>& processingBus, int framesToProcess) override;
@@ -42,6 +48,7 @@ class AudioBufferSourceNode : public AudioScheduledSourceNode {
42
48
  private:
43
49
  // Looping related properties
44
50
  bool loop_;
51
+ bool loopSkip_;
45
52
  double loopStart_;
46
53
  double loopEnd_;
47
54
  std::mutex bufferLock_;
@@ -63,6 +70,11 @@ class AudioBufferSourceNode : public AudioScheduledSourceNode {
63
70
  std::shared_ptr<AudioBuffer> buffer_;
64
71
  std::shared_ptr<AudioBus> alignedBus_;
65
72
 
73
+ // positionChanged event props: callbackId, update interval in frames, time since last update in frames
74
+ uint64_t onPositionChangedCallbackId_ = 0;
75
+ int onPositionChangedInterval_;
76
+ int onPositionChangedTime_ = 0;
77
+
66
78
  void processWithoutPitchCorrection(const std::shared_ptr<AudioBus> &processingBus,
67
79
  int framesToProcess);
68
80
 
@@ -29,6 +29,12 @@ class AudioBufferSourceNode extends _AudioScheduledSourceNode.default {
29
29
  }
30
30
  this.node.buffer = buffer.buffer;
31
31
  }
32
+ get loopSkip() {
33
+ return this.node.loopSkip;
34
+ }
35
+ set loopSkip(value) {
36
+ this.node.loopSkip = value;
37
+ }
32
38
  get loop() {
33
39
  return this.node.loop;
34
40
  }
@@ -63,6 +69,17 @@ class AudioBufferSourceNode extends _AudioScheduledSourceNode.default {
63
69
  this.hasBeenStarted = true;
64
70
  this.node.start(when, offset, duration);
65
71
  }
72
+
73
+ // eslint-disable-next-line accessor-pairs
74
+ set onPositionChanged(callback) {
75
+ const subscription = this.audioEventEmitter.addAudioEventListener('positionChanged', callback);
76
+ this.node.onPositionChanged = subscription.subscriptionId;
77
+ }
78
+
79
+ // eslint-disable-next-line accessor-pairs
80
+ set onPositionChangedInterval(value) {
81
+ this.node.onPositionChangedInterval = value;
82
+ }
66
83
  }
67
84
  exports.default = AudioBufferSourceNode;
68
85
  //# sourceMappingURL=AudioBufferSourceNode.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_AudioScheduledSourceNode","_interopRequireDefault","require","_AudioBuffer","_AudioParam","_errors","e","__esModule","default","AudioBufferSourceNode","AudioScheduledSourceNode","constructor","context","node","detune","AudioParam","playbackRate","buffer","AudioBuffer","loop","value","loopStart","loopEnd","start","when","offset","duration","RangeError","hasBeenStarted","InvalidStateError","exports"],"sourceRoot":"../../../src","sources":["core/AudioBufferSourceNode.ts"],"mappings":";;;;;;AACA,IAAAA,yBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,YAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,WAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AAA0D,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE3C,MAAMG,qBAAqB,SAASC,iCAAwB,CAAC;EAI1EC,WAAWA,CAACC,OAAyB,EAAEC,IAA4B,EAAE;IACnE,KAAK,CAACD,OAAO,EAAEC,IAAI,CAAC;IAEpB,IAAI,CAACC,MAAM,GAAG,IAAIC,mBAAU,CAACF,IAAI,CAACC,MAAM,EAAEF,OAAO,CAAC;IAClD,IAAI,CAACI,YAAY,GAAG,IAAID,mBAAU,CAACF,IAAI,CAACG,YAAY,EAAEJ,OAAO,CAAC;EAChE;EAEA,IAAWK,MAAMA,CAAA,EAAuB;IACtC,MAAMA,MAAM,GAAI,IAAI,CAACJ,IAAI,CAA4BI,MAAM;IAC3D,IAAI,CAACA,MAAM,EAAE;MACX,OAAO,IAAI;IACb;IACA,OAAO,IAAIC,oBAAW,CAACD,MAAM,CAAC;EAChC;EAEA,IAAWA,MAAMA,CAACA,MAA0B,EAAE;IAC5C,IAAI,CAACA,MAAM,EAAE;MACV,IAAI,CAACJ,IAAI,CAA4BI,MAAM,GAAG,IAAI;MACnD;IACF;IAEC,IAAI,CAACJ,IAAI,CAA4BI,MAAM,GAAGA,MAAM,CAACA,MAAM;EAC9D;EAEA,IAAWE,IAAIA,CAAA,EAAY;IACzB,OAAQ,IAAI,CAACN,IAAI,CAA4BM,IAAI;EACnD;EAEA,IAAWA,IAAIA,CAACC,KAAc,EAAE;IAC7B,IAAI,CAACP,IAAI,CAA4BM,IAAI,GAAGC,KAAK;EACpD;EAEA,IAAWC,SAASA,CAAA,EAAW;IAC7B,OAAQ,IAAI,CAACR,IAAI,CAA4BQ,SAAS;EACxD;EAEA,IAAWA,SAASA,CAACD,KAAa,EAAE;IACjC,IAAI,CAACP,IAAI,CAA4BQ,SAAS,GAAGD,KAAK;EACzD;EAEA,IAAWE,OAAOA,CAAA,EAAW;IAC3B,OAAQ,IAAI,CAACT,IAAI,CAA4BS,OAAO;EACtD;EAEA,IAAWA,OAAOA,CAACF,KAAa,EAAE;IAC/B,IAAI,CAACP,IAAI,CAA4BS,OAAO,GAAGF,KAAK;EACvD;EAEOG,KAAKA,CAACC,IAAY,GAAG,CAAC,EAAEC,MAAc,GAAG,CAAC,EAAEC,QAAiB,EAAQ;IAC1E,IAAIF,IAAI,GAAG,CAAC,EAAE;MACZ,MAAM,IAAIG,kBAAU,CAClB,8CAA8CH,IAAI,EACpD,CAAC;IACH;IAEA,IAAIC,MAAM,GAAG,CAAC,EAAE;MACd,MAAM,IAAIE,kBAAU,CAClB,gDAAgDF,MAAM,EACxD,CAAC;IACH;IAEA,IAAIC,QAAQ,IAAIA,QAAQ,GAAG,CAAC,EAAE;MAC5B,MAAM,IAAIC,kBAAU,CAClB,kDAAkDD,QAAQ,EAC5D,CAAC;IACH;IAEA,IAAI,IAAI,CAACE,cAAc,EAAE;MACvB,MAAM,IAAIC,yBAAiB,CAAC,kCAAkC,CAAC;IACjE;IAEA,IAAI,CAACD,cAAc,GAAG,IAAI;IACzB,IAAI,CAACf,IAAI,CAA4BU,KAAK,CAACC,IAAI,EAAEC,MAAM,EAAEC,QAAQ,CAAC;EACrE;AACF;AAACI,OAAA,CAAAtB,OAAA,GAAAC,qBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_AudioScheduledSourceNode","_interopRequireDefault","require","_AudioBuffer","_AudioParam","_errors","e","__esModule","default","AudioBufferSourceNode","AudioScheduledSourceNode","constructor","context","node","detune","AudioParam","playbackRate","buffer","AudioBuffer","loopSkip","value","loop","loopStart","loopEnd","start","when","offset","duration","RangeError","hasBeenStarted","InvalidStateError","onPositionChanged","callback","subscription","audioEventEmitter","addAudioEventListener","subscriptionId","onPositionChangedInterval","exports"],"sourceRoot":"../../../src","sources":["core/AudioBufferSourceNode.ts"],"mappings":"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","ignoreList":[]}
@@ -24,6 +24,12 @@ export default class AudioBufferSourceNode extends AudioScheduledSourceNode {
24
24
  }
25
25
  this.node.buffer = buffer.buffer;
26
26
  }
27
+ get loopSkip() {
28
+ return this.node.loopSkip;
29
+ }
30
+ set loopSkip(value) {
31
+ this.node.loopSkip = value;
32
+ }
27
33
  get loop() {
28
34
  return this.node.loop;
29
35
  }
@@ -58,5 +64,16 @@ export default class AudioBufferSourceNode extends AudioScheduledSourceNode {
58
64
  this.hasBeenStarted = true;
59
65
  this.node.start(when, offset, duration);
60
66
  }
67
+
68
+ // eslint-disable-next-line accessor-pairs
69
+ set onPositionChanged(callback) {
70
+ const subscription = this.audioEventEmitter.addAudioEventListener('positionChanged', callback);
71
+ this.node.onPositionChanged = subscription.subscriptionId;
72
+ }
73
+
74
+ // eslint-disable-next-line accessor-pairs
75
+ set onPositionChangedInterval(value) {
76
+ this.node.onPositionChangedInterval = value;
77
+ }
61
78
  }
62
79
  //# sourceMappingURL=AudioBufferSourceNode.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["AudioScheduledSourceNode","AudioBuffer","AudioParam","InvalidStateError","RangeError","AudioBufferSourceNode","constructor","context","node","detune","playbackRate","buffer","loop","value","loopStart","loopEnd","start","when","offset","duration","hasBeenStarted"],"sourceRoot":"../../../src","sources":["core/AudioBufferSourceNode.ts"],"mappings":";;AACA,OAAOA,wBAAwB,MAAM,+BAA4B;AAEjE,OAAOC,WAAW,MAAM,kBAAe;AACvC,OAAOC,UAAU,MAAM,iBAAc;AACrC,SAASC,iBAAiB,EAAEC,UAAU,QAAQ,oBAAW;AAEzD,eAAe,MAAMC,qBAAqB,SAASL,wBAAwB,CAAC;EAI1EM,WAAWA,CAACC,OAAyB,EAAEC,IAA4B,EAAE;IACnE,KAAK,CAACD,OAAO,EAAEC,IAAI,CAAC;IAEpB,IAAI,CAACC,MAAM,GAAG,IAAIP,UAAU,CAACM,IAAI,CAACC,MAAM,EAAEF,OAAO,CAAC;IAClD,IAAI,CAACG,YAAY,GAAG,IAAIR,UAAU,CAACM,IAAI,CAACE,YAAY,EAAEH,OAAO,CAAC;EAChE;EAEA,IAAWI,MAAMA,CAAA,EAAuB;IACtC,MAAMA,MAAM,GAAI,IAAI,CAACH,IAAI,CAA4BG,MAAM;IAC3D,IAAI,CAACA,MAAM,EAAE;MACX,OAAO,IAAI;IACb;IACA,OAAO,IAAIV,WAAW,CAACU,MAAM,CAAC;EAChC;EAEA,IAAWA,MAAMA,CAACA,MAA0B,EAAE;IAC5C,IAAI,CAACA,MAAM,EAAE;MACV,IAAI,CAACH,IAAI,CAA4BG,MAAM,GAAG,IAAI;MACnD;IACF;IAEC,IAAI,CAACH,IAAI,CAA4BG,MAAM,GAAGA,MAAM,CAACA,MAAM;EAC9D;EAEA,IAAWC,IAAIA,CAAA,EAAY;IACzB,OAAQ,IAAI,CAACJ,IAAI,CAA4BI,IAAI;EACnD;EAEA,IAAWA,IAAIA,CAACC,KAAc,EAAE;IAC7B,IAAI,CAACL,IAAI,CAA4BI,IAAI,GAAGC,KAAK;EACpD;EAEA,IAAWC,SAASA,CAAA,EAAW;IAC7B,OAAQ,IAAI,CAACN,IAAI,CAA4BM,SAAS;EACxD;EAEA,IAAWA,SAASA,CAACD,KAAa,EAAE;IACjC,IAAI,CAACL,IAAI,CAA4BM,SAAS,GAAGD,KAAK;EACzD;EAEA,IAAWE,OAAOA,CAAA,EAAW;IAC3B,OAAQ,IAAI,CAACP,IAAI,CAA4BO,OAAO;EACtD;EAEA,IAAWA,OAAOA,CAACF,KAAa,EAAE;IAC/B,IAAI,CAACL,IAAI,CAA4BO,OAAO,GAAGF,KAAK;EACvD;EAEOG,KAAKA,CAACC,IAAY,GAAG,CAAC,EAAEC,MAAc,GAAG,CAAC,EAAEC,QAAiB,EAAQ;IAC1E,IAAIF,IAAI,GAAG,CAAC,EAAE;MACZ,MAAM,IAAIb,UAAU,CAClB,8CAA8Ca,IAAI,EACpD,CAAC;IACH;IAEA,IAAIC,MAAM,GAAG,CAAC,EAAE;MACd,MAAM,IAAId,UAAU,CAClB,gDAAgDc,MAAM,EACxD,CAAC;IACH;IAEA,IAAIC,QAAQ,IAAIA,QAAQ,GAAG,CAAC,EAAE;MAC5B,MAAM,IAAIf,UAAU,CAClB,kDAAkDe,QAAQ,EAC5D,CAAC;IACH;IAEA,IAAI,IAAI,CAACC,cAAc,EAAE;MACvB,MAAM,IAAIjB,iBAAiB,CAAC,kCAAkC,CAAC;IACjE;IAEA,IAAI,CAACiB,cAAc,GAAG,IAAI;IACzB,IAAI,CAACZ,IAAI,CAA4BQ,KAAK,CAACC,IAAI,EAAEC,MAAM,EAAEC,QAAQ,CAAC;EACrE;AACF","ignoreList":[]}
1
+ {"version":3,"names":["AudioScheduledSourceNode","AudioBuffer","AudioParam","InvalidStateError","RangeError","AudioBufferSourceNode","constructor","context","node","detune","playbackRate","buffer","loopSkip","value","loop","loopStart","loopEnd","start","when","offset","duration","hasBeenStarted","onPositionChanged","callback","subscription","audioEventEmitter","addAudioEventListener","subscriptionId","onPositionChangedInterval"],"sourceRoot":"../../../src","sources":["core/AudioBufferSourceNode.ts"],"mappings":";;AACA,OAAOA,wBAAwB,MAAM,+BAA4B;AAEjE,OAAOC,WAAW,MAAM,kBAAe;AACvC,OAAOC,UAAU,MAAM,iBAAc;AACrC,SAASC,iBAAiB,EAAEC,UAAU,QAAQ,oBAAW;AAGzD,eAAe,MAAMC,qBAAqB,SAASL,wBAAwB,CAAC;EAI1EM,WAAWA,CAACC,OAAyB,EAAEC,IAA4B,EAAE;IACnE,KAAK,CAACD,OAAO,EAAEC,IAAI,CAAC;IAEpB,IAAI,CAACC,MAAM,GAAG,IAAIP,UAAU,CAACM,IAAI,CAACC,MAAM,EAAEF,OAAO,CAAC;IAClD,IAAI,CAACG,YAAY,GAAG,IAAIR,UAAU,CAACM,IAAI,CAACE,YAAY,EAAEH,OAAO,CAAC;EAChE;EAEA,IAAWI,MAAMA,CAAA,EAAuB;IACtC,MAAMA,MAAM,GAAI,IAAI,CAACH,IAAI,CAA4BG,MAAM;IAC3D,IAAI,CAACA,MAAM,EAAE;MACX,OAAO,IAAI;IACb;IACA,OAAO,IAAIV,WAAW,CAACU,MAAM,CAAC;EAChC;EAEA,IAAWA,MAAMA,CAACA,MAA0B,EAAE;IAC5C,IAAI,CAACA,MAAM,EAAE;MACV,IAAI,CAACH,IAAI,CAA4BG,MAAM,GAAG,IAAI;MACnD;IACF;IAEC,IAAI,CAACH,IAAI,CAA4BG,MAAM,GAAGA,MAAM,CAACA,MAAM;EAC9D;EAEA,IAAWC,QAAQA,CAAA,EAAY;IAC7B,OAAQ,IAAI,CAACJ,IAAI,CAA4BI,QAAQ;EACvD;EAEA,IAAWA,QAAQA,CAACC,KAAc,EAAE;IACjC,IAAI,CAACL,IAAI,CAA4BI,QAAQ,GAAGC,KAAK;EACxD;EAEA,IAAWC,IAAIA,CAAA,EAAY;IACzB,OAAQ,IAAI,CAACN,IAAI,CAA4BM,IAAI;EACnD;EAEA,IAAWA,IAAIA,CAACD,KAAc,EAAE;IAC7B,IAAI,CAACL,IAAI,CAA4BM,IAAI,GAAGD,KAAK;EACpD;EAEA,IAAWE,SAASA,CAAA,EAAW;IAC7B,OAAQ,IAAI,CAACP,IAAI,CAA4BO,SAAS;EACxD;EAEA,IAAWA,SAASA,CAACF,KAAa,EAAE;IACjC,IAAI,CAACL,IAAI,CAA4BO,SAAS,GAAGF,KAAK;EACzD;EAEA,IAAWG,OAAOA,CAAA,EAAW;IAC3B,OAAQ,IAAI,CAACR,IAAI,CAA4BQ,OAAO;EACtD;EAEA,IAAWA,OAAOA,CAACH,KAAa,EAAE;IAC/B,IAAI,CAACL,IAAI,CAA4BQ,OAAO,GAAGH,KAAK;EACvD;EAEOI,KAAKA,CAACC,IAAY,GAAG,CAAC,EAAEC,MAAc,GAAG,CAAC,EAAEC,QAAiB,EAAQ;IAC1E,IAAIF,IAAI,GAAG,CAAC,EAAE;MACZ,MAAM,IAAId,UAAU,CAClB,8CAA8Cc,IAAI,EACpD,CAAC;IACH;IAEA,IAAIC,MAAM,GAAG,CAAC,EAAE;MACd,MAAM,IAAIf,UAAU,CAClB,gDAAgDe,MAAM,EACxD,CAAC;IACH;IAEA,IAAIC,QAAQ,IAAIA,QAAQ,GAAG,CAAC,EAAE;MAC5B,MAAM,IAAIhB,UAAU,CAClB,kDAAkDgB,QAAQ,EAC5D,CAAC;IACH;IAEA,IAAI,IAAI,CAACC,cAAc,EAAE;MACvB,MAAM,IAAIlB,iBAAiB,CAAC,kCAAkC,CAAC;IACjE;IAEA,IAAI,CAACkB,cAAc,GAAG,IAAI;IACzB,IAAI,CAACb,IAAI,CAA4BS,KAAK,CAACC,IAAI,EAAEC,MAAM,EAAEC,QAAQ,CAAC;EACrE;;EAEA;EACA,IAAWE,iBAAiBA,CAACC,QAA6C,EAAE;IAC1E,MAAMC,YAAY,GAAG,IAAI,CAACC,iBAAiB,CAACC,qBAAqB,CAC/D,iBAAiB,EACjBH,QACF,CAAC;IAEA,IAAI,CAACf,IAAI,CAA4Bc,iBAAiB,GACrDE,YAAY,CAACG,cAAc;EAC/B;;EAEA;EACA,IAAWC,yBAAyBA,CAACf,KAAa,EAAE;IACjD,IAAI,CAACL,IAAI,CAA4BoB,yBAAyB,GAAGf,KAAK;EACzE;AACF","ignoreList":[]}
@@ -3,12 +3,15 @@ import AudioScheduledSourceNode from './AudioScheduledSourceNode';
3
3
  import BaseAudioContext from './BaseAudioContext';
4
4
  import AudioBuffer from './AudioBuffer';
5
5
  import AudioParam from './AudioParam';
6
+ import { EventTypeWithValue } from '../events/types';
6
7
  export default class AudioBufferSourceNode extends AudioScheduledSourceNode {
7
8
  readonly playbackRate: AudioParam;
8
9
  readonly detune: AudioParam;
9
10
  constructor(context: BaseAudioContext, node: IAudioBufferSourceNode);
10
11
  get buffer(): AudioBuffer | null;
11
12
  set buffer(buffer: AudioBuffer | null);
13
+ get loopSkip(): boolean;
14
+ set loopSkip(value: boolean);
12
15
  get loop(): boolean;
13
16
  set loop(value: boolean);
14
17
  get loopStart(): number;
@@ -16,5 +19,7 @@ export default class AudioBufferSourceNode extends AudioScheduledSourceNode {
16
19
  get loopEnd(): number;
17
20
  set loopEnd(value: number);
18
21
  start(when?: number, offset?: number, duration?: number): void;
22
+ set onPositionChanged(callback: (event: EventTypeWithValue) => void);
23
+ set onPositionChangedInterval(value: number);
19
24
  }
20
25
  //# sourceMappingURL=AudioBufferSourceNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AudioBufferSourceNode.d.ts","sourceRoot":"","sources":["../../../src/core/AudioBufferSourceNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,UAAU,MAAM,cAAc,CAAC;AAGtC,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,wBAAwB;IACzE,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;gBAEhB,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,sBAAsB;IAOnE,IAAW,MAAM,IAAI,WAAW,GAAG,IAAI,CAMtC;IAED,IAAW,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,EAO3C;IAED,IAAW,IAAI,IAAI,OAAO,CAEzB;IAED,IAAW,IAAI,CAAC,KAAK,EAAE,OAAO,EAE7B;IAED,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,IAAW,SAAS,CAAC,KAAK,EAAE,MAAM,EAEjC;IAED,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED,IAAW,OAAO,CAAC,KAAK,EAAE,MAAM,EAE/B;IAEM,KAAK,CAAC,IAAI,GAAE,MAAU,EAAE,MAAM,GAAE,MAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;CA0B5E"}
1
+ {"version":3,"file":"AudioBufferSourceNode.d.ts","sourceRoot":"","sources":["../../../src/core/AudioBufferSourceNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,wBAAwB;IACzE,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;gBAEhB,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,sBAAsB;IAOnE,IAAW,MAAM,IAAI,WAAW,GAAG,IAAI,CAMtC;IAED,IAAW,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,EAO3C;IAED,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED,IAAW,QAAQ,CAAC,KAAK,EAAE,OAAO,EAEjC;IAED,IAAW,IAAI,IAAI,OAAO,CAEzB;IAED,IAAW,IAAI,CAAC,KAAK,EAAE,OAAO,EAE7B;IAED,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,IAAW,SAAS,CAAC,KAAK,EAAE,MAAM,EAEjC;IAED,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED,IAAW,OAAO,CAAC,KAAK,EAAE,MAAM,EAE/B;IAEM,KAAK,CAAC,IAAI,GAAE,MAAU,EAAE,MAAM,GAAE,MAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IA4B3E,IAAW,iBAAiB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,EAQzE;IAGD,IAAW,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAEjD;CACF"}
@@ -68,11 +68,14 @@ export interface IOscillatorNode extends IAudioScheduledSourceNode {
68
68
  export interface IAudioBufferSourceNode extends IAudioScheduledSourceNode {
69
69
  buffer: IAudioBuffer | null;
70
70
  loop: boolean;
71
+ loopSkip: boolean;
71
72
  loopStart: number;
72
73
  loopEnd: number;
73
74
  detune: IAudioParam;
74
75
  playbackRate: IAudioParam;
75
- start: (when: number, offset?: number, duration?: number) => void;
76
+ start: (when?: number, offset?: number, duration?: number) => void;
77
+ onPositionChanged: string;
78
+ onPositionChangedInterval: number;
76
79
  }
77
80
  export interface IAudioBufferQueueSourceNode extends IAudioScheduledSourceNode {
78
81
  detune: IAudioParam;
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,gBAAgB,IAAI,eAAe,CAAC;IACpC,UAAU,IAAI,SAAS,CAAC;IACxB,kBAAkB,IAAI,iBAAiB,CAAC;IACxC,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;IAC5C,kBAAkB,EAAE,CAAC,eAAe,EAAE,OAAO,KAAK,sBAAsB,CAAC;IACzE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;IAC3D,YAAY,EAAE,CACZ,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,KACf,YAAY,CAAC;IAClB,kBAAkB,EAAE,CAClB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,YAAY,EAClB,oBAAoB,EAAE,OAAO,KAC1B,aAAa,CAAC;IACnB,cAAc,EAAE,MAAM,aAAa,CAAC;IACpC,qBAAqB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACrE,eAAe,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACrE,0BAA0B,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,aAAc,SAAQ,iBAAiB;IACtD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAEtD,OAAO,EAAE,CAAC,WAAW,EAAE,UAAU,GAAG,WAAW,KAAK,IAAI,CAAC;IACzD,UAAU,EAAE,CAAC,WAAW,CAAC,EAAE,UAAU,GAAG,WAAW,KAAK,IAAI,CAAC;CAC9D;AAED,MAAM,WAAW,SAAU,SAAQ,UAAU;IAC3C,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,IAAI,EAAE,gBAAgB,CAAC;IAEvB,oBAAoB,CAClB,cAAc,EAAE,YAAY,EAC5B,iBAAiB,EAAE,YAAY,EAC/B,mBAAmB,EAAE,YAAY,GAChC,IAAI,CAAC;CACT;AAED,MAAM,WAAW,qBAAsB,SAAQ,UAAU;CAAG;AAE5D,MAAM,WAAW,yBAA0B,SAAQ,UAAU;IAC3D,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAG7B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAgB,SAAQ,yBAAyB;IAChE,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,IAAI,EAAE,cAAc,CAAC;IAErB,eAAe,CAAC,YAAY,EAAE,aAAa,GAAG,IAAI,CAAC;CACpD;AAED,MAAM,WAAW,sBAAuB,SAAQ,yBAAyB;IACvE,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,WAAW,CAAC;IAE1B,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAGnE,iBAAiB,EAAE,MAAM,CAAC;IAE1B,yBAAyB,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,2BAA4B,SAAQ,yBAAyB;IAC5E,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,WAAW,CAAC;IAE1B,aAAa,EAAE,CACb,WAAW,EAAE,YAAY,EACzB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,OAAO,KAClB,IAAI,CAAC;IACV,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,KAAK,EAAE,MAAM,IAAI,CAAC;IAGlB,iBAAiB,EAAE,MAAM,CAAC;IAE1B,yBAAyB,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAElC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAAC;IAC9C,eAAe,CACb,WAAW,EAAE,YAAY,EACzB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,IAAI,CAAC;IACR,aAAa,CACX,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,IAAI,CAAC;CACT;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IAEjB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,uBAAuB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,4BAA4B,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvE,eAAe,EAAE,CACf,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,KACjB,IAAI,CAAC;IACV,mBAAmB,EAAE,CACnB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,KACb,IAAI,CAAC;IACV,qBAAqB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,mBAAmB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,aAAa;CAAG;AAEjC,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,UAAU,CAAC;IAEnB,qBAAqB,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACrD,oBAAoB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAClD,sBAAsB,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACtD,qBAAqB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CACpD;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,IAAI,CAAC;IAGjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,qBAAqB,CAAC,IAAI,SAAS,cAAc,EAC/C,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,kBAAkB,CAAC,IAAI,CAAC,GACjC,MAAM,CAAC;IACV,wBAAwB,CAAC,IAAI,SAAS,cAAc,EAClD,IAAI,EAAE,IAAI,EACV,cAAc,EAAE,MAAM,GACrB,IAAI,CAAC;CACT"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-audio-api",
3
- "version": "0.6.2-rc.4",
3
+ "version": "0.6.2-rc.5",
4
4
  "description": "react-native-audio-api provides system for controlling audio in React Native environment compatible with Web Audio API specification",
5
5
  "bin": {
6
6
  "setup-rn-audio-api-web": "./scripts/setup-rn-audio-api-web.js"
@@ -4,6 +4,7 @@ import BaseAudioContext from './BaseAudioContext';
4
4
  import AudioBuffer from './AudioBuffer';
5
5
  import AudioParam from './AudioParam';
6
6
  import { InvalidStateError, RangeError } from '../errors';
7
+ import { EventTypeWithValue } from '../events/types';
7
8
 
8
9
  export default class AudioBufferSourceNode extends AudioScheduledSourceNode {
9
10
  readonly playbackRate: AudioParam;
@@ -33,6 +34,14 @@ export default class AudioBufferSourceNode extends AudioScheduledSourceNode {
33
34
  (this.node as IAudioBufferSourceNode).buffer = buffer.buffer;
34
35
  }
35
36
 
37
+ public get loopSkip(): boolean {
38
+ return (this.node as IAudioBufferSourceNode).loopSkip;
39
+ }
40
+
41
+ public set loopSkip(value: boolean) {
42
+ (this.node as IAudioBufferSourceNode).loopSkip = value;
43
+ }
44
+
36
45
  public get loop(): boolean {
37
46
  return (this.node as IAudioBufferSourceNode).loop;
38
47
  }
@@ -83,4 +92,20 @@ export default class AudioBufferSourceNode extends AudioScheduledSourceNode {
83
92
  this.hasBeenStarted = true;
84
93
  (this.node as IAudioBufferSourceNode).start(when, offset, duration);
85
94
  }
95
+
96
+ // eslint-disable-next-line accessor-pairs
97
+ public set onPositionChanged(callback: (event: EventTypeWithValue) => void) {
98
+ const subscription = this.audioEventEmitter.addAudioEventListener(
99
+ 'positionChanged',
100
+ callback
101
+ );
102
+
103
+ (this.node as IAudioBufferSourceNode).onPositionChanged =
104
+ subscription.subscriptionId;
105
+ }
106
+
107
+ // eslint-disable-next-line accessor-pairs
108
+ public set onPositionChangedInterval(value: number) {
109
+ (this.node as IAudioBufferSourceNode).onPositionChangedInterval = value;
110
+ }
86
111
  }
package/src/interfaces.ts CHANGED
@@ -103,12 +103,18 @@ export interface IOscillatorNode extends IAudioScheduledSourceNode {
103
103
  export interface IAudioBufferSourceNode extends IAudioScheduledSourceNode {
104
104
  buffer: IAudioBuffer | null;
105
105
  loop: boolean;
106
+ loopSkip: boolean;
106
107
  loopStart: number;
107
108
  loopEnd: number;
108
109
  detune: IAudioParam;
109
110
  playbackRate: IAudioParam;
110
111
 
111
- start: (when: number, offset?: number, duration?: number) => void;
112
+ start: (when?: number, offset?: number, duration?: number) => void;
113
+
114
+ // passing subscriptionId(uint_64 in cpp, string in js) to the cpp
115
+ onPositionChanged: string;
116
+ // set how often the onPositionChanged event is called
117
+ onPositionChangedInterval: number;
112
118
  }
113
119
 
114
120
  export interface IAudioBufferQueueSourceNode extends IAudioScheduledSourceNode {