@nativescript/canvas-media 2.0.22 → 2.0.24

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.
@@ -31,4 +31,6 @@ export declare class Audio extends AudioBase {
31
31
  set loop(value: boolean);
32
32
  _addChildFromBuilder(name: string, value: any): void;
33
33
  onLoaded(): void;
34
+ attachAudioContextTap(contextNative: any): any;
35
+ detachAudioContextTap(): void;
34
36
  }
@@ -98,6 +98,7 @@ export class Audio extends AudioBase {
98
98
  if (this._playPromise) {
99
99
  return this._playPromise;
100
100
  }
101
+ this._notifyListener(Audio.playEvent);
101
102
  this._playPromise = new Promise((resolve, reject) => {
102
103
  this._playResolve = resolve;
103
104
  this._playReject = reject;
@@ -118,6 +119,7 @@ export class Audio extends AudioBase {
118
119
  return;
119
120
  }
120
121
  this._instance.pause();
122
+ this._notifyListener(Audio.pauseEvent);
121
123
  }
122
124
  get muted() {
123
125
  return this._instance.getMuted();
@@ -126,46 +128,25 @@ export class Audio extends AudioBase {
126
128
  this._instance.setMuted(booleanConverter(value));
127
129
  }
128
130
  get duration() {
129
- try {
130
- const d = this._instance.getDuration();
131
- if (d == null || Number(d) <= 0)
132
- return NaN;
133
- return Number(d) / 1000.0;
134
- }
135
- catch (e) {
131
+ const d = this._instance.getDuration();
132
+ if (d == null || Number(d) <= 0)
136
133
  return NaN;
137
- }
134
+ return Number(d) / 1000.0;
138
135
  }
139
136
  get currentTime() {
140
- try {
141
- return this._instance.getCurrentTime();
142
- }
143
- catch (e) {
144
- return 0;
145
- }
137
+ return this._instance.getCurrentTime();
146
138
  }
147
139
  set currentTime(value) {
148
- try {
149
- this._instance.setCurrentTime(value);
150
- }
151
- catch (e) { }
140
+ this._instance.setCurrentTime(value);
152
141
  }
153
142
  get src() {
154
- try {
155
- return this._instance.getSrc();
156
- }
157
- catch (e) {
158
- return undefined;
159
- }
143
+ return this._instance.getSrc();
160
144
  }
161
145
  set src(value) {
162
- try {
163
- if (typeof value === 'string' && value.startsWith('~/')) {
164
- value = path.join(knownFolders.currentApp().path, value.replace('~', ''));
165
- }
166
- this._instance.setSrc(value);
146
+ if (typeof value === 'string' && value.startsWith('~/')) {
147
+ value = path.join(knownFolders.currentApp().path, value.replace('~', ''));
167
148
  }
168
- catch (e) { }
149
+ this._instance.setSrc(value);
169
150
  }
170
151
  load() {
171
152
  if (!this._instance) {
@@ -218,5 +199,29 @@ export class Audio extends AudioBase {
218
199
  this.src = this._sourceView[0].src;
219
200
  }
220
201
  }
202
+ attachAudioContextTap(contextNative) {
203
+ const inst = this._instance;
204
+ if (!inst || typeof inst.attachAudioContextTap !== 'function') {
205
+ return null;
206
+ }
207
+ try {
208
+ return inst.attachAudioContextTap(contextNative);
209
+ }
210
+ catch (e) {
211
+ console.warn('Audio.attachAudioContextTap: native call failed:', e);
212
+ return null;
213
+ }
214
+ }
215
+ detachAudioContextTap() {
216
+ const inst = this._instance;
217
+ if (!inst || typeof inst.detachAudioContextTap !== 'function')
218
+ return;
219
+ try {
220
+ inst.detachAudioContextTap();
221
+ }
222
+ catch (e) {
223
+ console.warn('Audio.detachAudioContextTap: native call failed:', e);
224
+ }
225
+ }
221
226
  }
222
227
  //# sourceMappingURL=index.android.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.android.js","sourceRoot":"","sources":["../../../../packages/canvas-media/audio/index.android.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAIlE,MAAM,OAAO,KAAM,SAAQ,SAAS;IAUnC,MAAM,CAAC,gBAAgB;QACtB,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;QAC1B,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;QACvB,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;QAClB,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACd,CAAC;IAED;QACC,KAAK,EAAE,CAAC;QAjBT,iBAAY,GAAoB,IAAI,CAAC;QACrC,gBAAW,GAAoB,IAAI,CAAC;QACpC,iBAAY,GAAyB,IAAI,CAAC;QAC1C,gBAAW,GAAa,EAAE,CAAC;QAC3B,aAAQ,GAAY,KAAK,CAAC;QAC1B,gBAAW,GAAW,CAAC,CAAC;QACxB,cAAS,GAAY,KAAK,CAAC;QAa1B,MAAM,QAAQ,GAAQ,WAAW,CAAC,OAAO,CAAC,kBAAkB,IAAI,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC;QAClG,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,YAAY,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC;QAExG,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;QAE9B,IAAI,CAAC,SAAS,CAAC,WAAW,CACzB,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;YACtD,gBAAgB,CAAC,QAAgB;gBAChC,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;gBACxB,IAAI,KAAK,EAAE,CAAC;oBACX,IAAI,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;oBAClE,gBAAgB,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAChD,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBAClD,CAAC;YACF,CAAC;YAED,SAAS;gBACR,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;gBACxB,IAAI,KAAK,EAAE,CAAC;oBACX,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;oBACtB,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;wBACxB,KAAK,CAAC,YAAY,EAAE,CAAC;wBACrB,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;wBAC1B,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;wBACzB,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;oBAC3B,CAAC;oBACD,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC3C,CAAC;YACF,CAAC;YAED,oBAAoB,CAAC,IAAY;gBAChC,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;gBACxB,IAAI,KAAK,EAAE,CAAC;oBACX,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;oBACjC,mBAAmB,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBACnD,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;gBAC9C,CAAC;YACF,CAAC;YAED,YAAY;gBACX,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;gBACxB,IAAI,KAAK,EAAE,CAAC;oBACX,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,iBAAiB,CAAC;oBAC5C,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;oBACjD,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;oBACjD,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;gBAC9C,CAAC;YACF,CAAC;YAED,SAAS;gBACR,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;gBACxB,IAAI,KAAK,EAAE,CAAC;oBACX,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC3C,CAAC;YACF,CAAC;YAED,gBAAgB;gBACf,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;gBACxB,IAAI,KAAK,EAAE,CAAC;oBACX,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBAClD,CAAC;YACF,CAAC;YAED,OAAO,CAAC,OAAe;gBACtB,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;gBACxB,IAAI,KAAK,EAAE,CAAC;oBACX,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;oBACvB,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;wBACvB,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC,CAAC;oBAC3D,CAAC;oBACD,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;oBAC1B,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;oBACzB,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;oBAC1B,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBACzC,CAAC;YACF,CAAC;SACD,CAAC,CACF,CAAC;IACH,CAAC;IAED,gBAAgB;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;IACtC,CAAC;IAED,IAAI;QACH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,YAAY,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;YAC5B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;YAC1B,IAAI,CAAC;gBACJ,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACvB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBACzB,MAAM,CAAC,CAAC,CAAC,CAAC;YACX,CAAC;QACF,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,KAAK,CAAC,KAAc;QACvB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,QAAQ;QACX,IAAI,CAAC;YACJ,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;gBAAE,OAAO,GAAG,CAAC;YAC5C,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QAC3B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,OAAO,GAAG,CAAC;QACZ,CAAC;IACF,CAAC;IAED,IAAI,WAAW;QACd,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;QACxC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,OAAO,CAAC,CAAC;QACV,CAAC;IACF,CAAC;IAED,IAAI,WAAW,CAAC,KAAa;QAC5B,IAAI,CAAC;YACJ,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;IACf,CAAC;IAED,IAAI,GAAG;QACN,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QAChC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,OAAO,SAAS,CAAC;QAClB,CAAC;IACF,CAAC;IAED,IAAI,GAAG,CAAC,KAAa;QACpB,IAAI,CAAC;YACJ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzD,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YAC3E,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;IACf,CAAC;IAED,IAAI;QACH,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED,WAAW,CAAC,IAAY;QACvB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,EAAE,CAAC;QACX,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,QAAQ;QACX,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED,IAAI,QAAQ,CAAC,KAAc;QAC1B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,QAAQ;QACX,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED,IAAI,QAAQ,CAAC,OAAgB;QAC5B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;IAED,IAAI,IAAI,CAAC,KAAc;QACtB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,oBAAoB,CAAC,IAAY,EAAE,KAAU;QAC5C,IAAI,KAAK,YAAY,MAAM,EAAE,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACF,CAAC;IAED,QAAQ;QACP,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACpC,CAAC;IACF,CAAC;CACD"}
1
+ {"version":3,"file":"index.android.js","sourceRoot":"","sources":["../../../../packages/canvas-media/audio/index.android.ts"],"names":[],"mappings":"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"}
@@ -31,4 +31,7 @@ export declare class Audio extends AudioBase {
31
31
  pause(): void;
32
32
  get loop(): boolean | string;
33
33
  set loop(value: boolean | string);
34
+ private _activeTapNode;
35
+ attachAudioContextTap(contextNative: any): any;
36
+ detachAudioContextTap(): void;
34
37
  }
@@ -84,6 +84,7 @@ export class Audio extends AudioBase {
84
84
  this._playResolve = null;
85
85
  this._playReject = null;
86
86
  this._isCustom = false;
87
+ this._activeTapNode = null;
87
88
  this.helper = NSCAudioHelper.new();
88
89
  try {
89
90
  AVAudioSession.sharedInstance().setCategoryError(AVAudioSessionCategoryPlayback);
@@ -177,6 +178,7 @@ export class Audio extends AudioBase {
177
178
  if (this._playPromise) {
178
179
  return this._playPromise;
179
180
  }
181
+ this._notifyListener(Audio.playEvent);
180
182
  this._playPromise = new Promise((resolve, reject) => {
181
183
  this._playResolve = resolve;
182
184
  this._playReject = reject;
@@ -186,6 +188,7 @@ export class Audio extends AudioBase {
186
188
  }
187
189
  pause() {
188
190
  this.helper.pause();
191
+ this._notifyListener(Audio.pauseEvent);
189
192
  }
190
193
  // @ts-ignore
191
194
  get loop() {
@@ -198,5 +201,26 @@ export class Audio extends AudioBase {
198
201
  }
199
202
  this.helper.loop = booleanConverter(value);
200
203
  }
204
+ attachAudioContextTap(contextNative) {
205
+ if (!contextNative || typeof contextNative.createSourceNodeFromMediaPlayer !== 'function') {
206
+ return null;
207
+ }
208
+ const player = this.helper?.player;
209
+ if (!player)
210
+ return null;
211
+ try {
212
+ const node = contextNative.createSourceNodeFromMediaPlayer(player);
213
+ if (node)
214
+ this._activeTapNode = node;
215
+ return node;
216
+ }
217
+ catch (e) {
218
+ console.warn('Audio.attachAudioContextTap: native call failed:', e);
219
+ return null;
220
+ }
221
+ }
222
+ detachAudioContextTap() {
223
+ this._activeTapNode = null;
224
+ }
201
225
  }
202
226
  //# sourceMappingURL=index.ios.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.ios.js","sourceRoot":"","sources":["../../../../packages/canvas-media/audio/index.ios.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.ios.js","sourceRoot":"","sources":["../../../../packages/canvas-media/audio/index.ios.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nativescript/canvas-media",
3
- "version": "2.0.22",
3
+ "version": "2.0.24",
4
4
  "description": "Canvas media",
5
5
  "main": "index",
6
6
  "typings": "index.d.ts",
Binary file
@@ -0,0 +1,140 @@
1
+ package org.nativescript.canvas.media;
2
+
3
+ import androidx.media3.common.audio.AudioProcessor;
4
+ import androidx.media3.common.audio.BaseAudioProcessor;
5
+ import androidx.media3.common.util.UnstableApi;
6
+
7
+ import java.nio.ByteBuffer;
8
+ import java.nio.ByteOrder;
9
+ import java.nio.FloatBuffer;
10
+
11
+
12
+ @UnstableApi
13
+ public class AudioContextTapProcessor extends BaseAudioProcessor {
14
+
15
+ public interface Sink {
16
+ void onPcmFrames(float[] interleaved, int sampleCount, int sampleRate, int channels);
17
+
18
+ boolean isActive();
19
+ }
20
+
21
+ private volatile Sink _sink;
22
+ private float[] _floatScratch = new float[2048];
23
+ private int _silenceFlag;
24
+ static final int ENCODING_PCM_16BIT_BIG_ENDIAN = 0x10000000;
25
+
26
+ public void setSink(Sink sink) {
27
+ this._sink = sink;
28
+ }
29
+
30
+ public Sink getSink() {
31
+ return _sink;
32
+ }
33
+
34
+ @Override
35
+ public AudioFormat onConfigure(AudioFormat inputFormat) throws UnhandledAudioFormatException {
36
+ return inputFormat;
37
+ }
38
+
39
+ @Override
40
+ public void queueInput(ByteBuffer inputBuffer) {
41
+ if (!inputBuffer.hasRemaining()) return;
42
+
43
+ Sink sink = _sink;
44
+ AudioFormat fmt = inputAudioFormat;
45
+
46
+ int remaining = inputBuffer.remaining();
47
+ int channels = fmt.channelCount;
48
+ int sampleRate = fmt.sampleRate;
49
+ int bytesPerSample = bytesPerSample(fmt.encoding);
50
+
51
+ ByteBuffer out = replaceOutputBuffer(remaining);
52
+ int srcStart = inputBuffer.position();
53
+ out.put(inputBuffer);
54
+ out.flip();
55
+
56
+ if (sink != null && sink.isActive() && bytesPerSample > 0 && channels > 0) {
57
+ int sampleCount = remaining / bytesPerSample;
58
+ if (sampleCount > 0) {
59
+ if (_floatScratch.length < sampleCount) {
60
+ _floatScratch = new float[Math.max(sampleCount, _floatScratch.length * 2)];
61
+ }
62
+ ByteBuffer src = inputBuffer.duplicate();
63
+ src.order(ByteOrder.nativeOrder());
64
+ src.position(srcStart);
65
+ src.limit(srcStart + remaining);
66
+ copyToFloat(src, _floatScratch, sampleCount, fmt.encoding);
67
+ try {
68
+ sink.onPcmFrames(_floatScratch, sampleCount, sampleRate, channels);
69
+ } catch (Throwable t) {
70
+ android.util.Log.w("AudioContextTapProc", "sink threw", t);
71
+ }
72
+ }
73
+ }
74
+
75
+ inputBuffer.position(srcStart + remaining);
76
+ }
77
+
78
+ private static int bytesPerSample(int encoding) {
79
+ switch (encoding) {
80
+ case android.media.AudioFormat.ENCODING_PCM_8BIT:
81
+ return 1;
82
+ case android.media.AudioFormat.ENCODING_PCM_16BIT:
83
+ case ENCODING_PCM_16BIT_BIG_ENDIAN:
84
+ return 2;
85
+ case android.media.AudioFormat.ENCODING_PCM_24BIT_PACKED:
86
+ return 3;
87
+ case android.media.AudioFormat.ENCODING_PCM_32BIT:
88
+ case android.media.AudioFormat.ENCODING_PCM_FLOAT:
89
+ return 4;
90
+ default:
91
+ return 0;
92
+ }
93
+ }
94
+
95
+ private static void copyToFloat(ByteBuffer src, float[] dst, int sampleCount, int encoding) {
96
+ switch (encoding) {
97
+ case android.media.AudioFormat.ENCODING_PCM_FLOAT: {
98
+ FloatBuffer fb = src.asFloatBuffer();
99
+ fb.get(dst, 0, sampleCount);
100
+ break;
101
+ }
102
+ case android.media.AudioFormat.ENCODING_PCM_16BIT: {
103
+ for (int i = 0; i < sampleCount; i++) {
104
+ short s = src.getShort();
105
+ dst[i] = s / 32768.0f;
106
+ }
107
+ break;
108
+ }
109
+ case android.media.AudioFormat.ENCODING_PCM_8BIT: {
110
+ for (int i = 0; i < sampleCount; i++) {
111
+ int u = src.get() & 0xff;
112
+ dst[i] = (u - 128) / 128.0f;
113
+ }
114
+ break;
115
+ }
116
+ case android.media.AudioFormat.ENCODING_PCM_32BIT: {
117
+ for (int i = 0; i < sampleCount; i++) {
118
+ int v = src.getInt();
119
+ dst[i] = v / 2147483648.0f;
120
+ }
121
+ break;
122
+ }
123
+ case android.media.AudioFormat.ENCODING_PCM_24BIT_PACKED: {
124
+ for (int i = 0; i < sampleCount; i++) {
125
+ int b0 = src.get() & 0xff;
126
+ int b1 = src.get() & 0xff;
127
+ int b2 = src.get();
128
+ int v = (b2 << 16) | (b1 << 8) | b0;
129
+ if ((v & 0x800000) != 0) v |= 0xff000000;
130
+ dst[i] = v / 8388608.0f;
131
+ }
132
+ break;
133
+ }
134
+ default: {
135
+ java.util.Arrays.fill(dst, 0, sampleCount, 0f);
136
+ break;
137
+ }
138
+ }
139
+ }
140
+ }
@@ -27,8 +27,14 @@ import androidx.media3.datasource.cache.LeastRecentlyUsedCacheEvictor;
27
27
  import androidx.media3.datasource.cache.SimpleCache;
28
28
  import androidx.media3.database.StandaloneDatabaseProvider;
29
29
  import androidx.media3.exoplayer.DefaultLoadControl;
30
+ import androidx.media3.exoplayer.DefaultRenderersFactory;
30
31
  import androidx.media3.exoplayer.ExoPlayer;
32
+ import androidx.media3.exoplayer.audio.AudioSink;
33
+ import androidx.media3.exoplayer.audio.DefaultAudioSink;
31
34
  import androidx.media3.exoplayer.source.DefaultMediaSourceFactory;
35
+ import androidx.media3.common.audio.AudioProcessor;
36
+
37
+ import java.lang.reflect.Method;
32
38
 
33
39
  @UnstableApi
34
40
  public class AudioHelper implements Player.Listener {
@@ -50,6 +56,61 @@ public class AudioHelper implements Player.Listener {
50
56
  private boolean _playing = false;
51
57
  private AudioView _audioView;
52
58
  private LinearLayout _container;
59
+ private final AudioContextTapProcessor _tapProcessor = new AudioContextTapProcessor();
60
+ private volatile Object _tapSourceNode;
61
+ private volatile Object _attachedContext;
62
+ private volatile int _tapNodeSampleRate;
63
+ private volatile int _tapNodeChannels;
64
+ private volatile Method _tapNodePushFrames;
65
+ private volatile Method _tapNodeEndStream;
66
+ private volatile Method _ctxCreateExternalPcm;
67
+
68
+ private final AudioContextTapProcessor.Sink _tapSink = new AudioContextTapProcessor.Sink() {
69
+ @Override
70
+ public void onPcmFrames(float[] interleaved, int sampleCount, int sampleRate, int channels) {
71
+ Object node = _tapSourceNode;
72
+ if (node == null || sampleCount == 0) return;
73
+
74
+ if (_tapNodeSampleRate != sampleRate || _tapNodeChannels != channels) {
75
+ Object ctx = _attachedContext;
76
+ Method create = _ctxCreateExternalPcm;
77
+ Method end = _tapNodeEndStream;
78
+ if (ctx == null || create == null) return;
79
+ Object replacement;
80
+ try {
81
+ replacement = create.invoke(ctx, sampleRate, channels);
82
+ } catch (Throwable t) {
83
+ android.util.Log.w("AudioHelper", "createExternalPcmSource reflection failed", t);
84
+ return;
85
+ }
86
+ if (replacement == null) return;
87
+ Object old = _tapSourceNode;
88
+ if (old != null && end != null) {
89
+ try { end.invoke(old); } catch (Throwable ignored) {}
90
+ }
91
+ _tapSourceNode = replacement;
92
+ _tapNodeSampleRate = sampleRate;
93
+ _tapNodeChannels = channels;
94
+ node = replacement;
95
+ }
96
+
97
+ float[] payload = interleaved;
98
+ if (interleaved.length != sampleCount) {
99
+ payload = new float[sampleCount];
100
+ System.arraycopy(interleaved, 0, payload, 0, sampleCount);
101
+ }
102
+ try {
103
+ _tapNodePushFrames.invoke(node, (Object) payload);
104
+ } catch (Throwable t) {
105
+ android.util.Log.w("AudioHelper", "pushFrames reflection failed", t);
106
+ }
107
+ }
108
+
109
+ @Override
110
+ public boolean isActive() {
111
+ return _tapSourceNode != null;
112
+ }
113
+ };
53
114
 
54
115
  public interface Callback {
55
116
  void onDurationChange(long duration);
@@ -95,8 +156,23 @@ public class AudioHelper implements Player.Listener {
95
156
  _cdsf.setUpstreamDataSourceFactory(_dsf);
96
157
  _msf = new DefaultMediaSourceFactory(_cdsf);
97
158
 
159
+ _tapProcessor.setSink(_tapSink);
160
+ DefaultRenderersFactory rf = new DefaultRenderersFactory(context) {
161
+ @Override
162
+ protected AudioSink buildAudioSink(android.content.Context ctx,
163
+ boolean enableFloatOutput,
164
+ boolean enableAudioTrackPlaybackParams) {
165
+ return new DefaultAudioSink.Builder(ctx)
166
+ .setEnableFloatOutput(enableFloatOutput)
167
+ .setEnableAudioTrackPlaybackParams(enableAudioTrackPlaybackParams)
168
+ .setAudioProcessors(new AudioProcessor[]{ _tapProcessor })
169
+ .build();
170
+ }
171
+ };
172
+
98
173
  ExoPlayer.Builder builder = new ExoPlayer.Builder(context);
99
174
  builder.setMediaSourceFactory(_msf);
175
+ builder.setRenderersFactory(rf);
100
176
 
101
177
  DefaultLoadControl.Builder loadControl = new DefaultLoadControl.Builder();
102
178
  loadControl.setBufferDurationsMs(500, DefaultLoadControl.DEFAULT_MAX_BUFFER_MS, 500, 500);
@@ -221,6 +297,47 @@ public class AudioHelper implements Player.Listener {
221
297
  } catch (Exception e) { }
222
298
  }
223
299
 
300
+ public Object attachAudioContextTap(Object contextNative) {
301
+ if (contextNative == null) return null;
302
+ try {
303
+ Method create = contextNative.getClass()
304
+ .getMethod("createExternalPcmSource", int.class, int.class);
305
+ Object node = create.invoke(contextNative, 48000, 2);
306
+ if (node == null) return null;
307
+
308
+ Method push = node.getClass().getMethod("pushFrames", float[].class);
309
+ Method end = node.getClass().getMethod("endStream");
310
+
311
+ _attachedContext = contextNative;
312
+ _ctxCreateExternalPcm = create;
313
+ _tapSourceNode = node;
314
+ _tapNodePushFrames = push;
315
+ _tapNodeEndStream = end;
316
+ _tapNodeSampleRate = 48000;
317
+ _tapNodeChannels = 2;
318
+ return node;
319
+ } catch (NoSuchMethodException e) {
320
+ android.util.Log.w("AudioHelper", "attachAudioContextTap: contextNative missing expected surface", e);
321
+ return null;
322
+ } catch (Throwable t) {
323
+ android.util.Log.w("AudioHelper", "attachAudioContextTap failed", t);
324
+ return null;
325
+ }
326
+ }
327
+
328
+ public void detachAudioContextTap() {
329
+ Object node = _tapSourceNode;
330
+ Method end = _tapNodeEndStream;
331
+ _tapSourceNode = null;
332
+ _attachedContext = null;
333
+ _ctxCreateExternalPcm = null;
334
+ _tapNodePushFrames = null;
335
+ _tapNodeEndStream = null;
336
+ if (node != null && end != null) {
337
+ try { end.invoke(node); } catch (Throwable ignored) {}
338
+ }
339
+ }
340
+
224
341
  public void pause() {
225
342
  try {
226
343
  this._player.setPlayWhenReady(false);
@@ -228,6 +345,12 @@ public class AudioHelper implements Player.Listener {
228
345
  } catch (Exception e) { }
229
346
  }
230
347
 
348
+ public void release() {
349
+ try { detachAudioContextTap(); } catch (Throwable ignored) {}
350
+ try { if (_timer != null) { _timer.cancel(); _timer = null; } } catch (Throwable ignored) {}
351
+ try { if (_player != null) { _player.release(); } } catch (Throwable ignored) {}
352
+ }
353
+
231
354
  public boolean getMuted() {
232
355
  return this._player.getVolume() == 0f;
233
356
  }
@@ -637,7 +637,6 @@ public class VideoHelper implements Player.Listener, SurfaceTexture.OnFrameAvail
637
637
  }
638
638
 
639
639
  public android.graphics.Bitmap getCurrentBitmap() {
640
- // Lazily set up the ImageReader surface when dimensions are first known.
641
640
  if (_imageReader == null && _surfaceOwner == SurfaceOwner.NONE) {
642
641
  setupBitmapSurface();
643
642
  }
@@ -691,8 +690,6 @@ public class VideoHelper implements Player.Listener, SurfaceTexture.OnFrameAvail
691
690
  }
692
691
  }
693
692
 
694
- // Last-resort fallback: PlayerView's TextureView, only reachable when the
695
- // player IS in the window (createNativeView() was called and view is visible).
696
693
  View surfaceView = this._playerView.getVideoSurfaceView();
697
694
  if (surfaceView instanceof TextureView && ((TextureView) surfaceView).isAvailable()) {
698
695
  TextureView tv = (TextureView) surfaceView;