mirror of https://github.com/godotengine/godot
[Web] Remove position pool system and return false when done instead
This commit is contained in:
parent
172fc62c80
commit
cdb6fc7f74
|
|
@ -35,16 +35,20 @@ class GodotPositionReportingProcessor extends AudioWorkletProcessor {
|
|||
super(...args);
|
||||
this.lastPostTime = currentTime;
|
||||
this.position = 0;
|
||||
this.ended = false;
|
||||
|
||||
this.port.onmessage = (event) => {
|
||||
if (event?.data?.type === 'clear') {
|
||||
this.lastPostTime = currentTime;
|
||||
this.position = 0;
|
||||
if (event?.data?.type === 'ended') {
|
||||
this.ended = true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
process(inputs, _outputs, _parameters) {
|
||||
if (this.ended) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (inputs.length > 0) {
|
||||
const input = inputs[0];
|
||||
if (input.length > 0) {
|
||||
|
|
@ -55,7 +59,7 @@ class GodotPositionReportingProcessor extends AudioWorkletProcessor {
|
|||
// Posting messages is expensive. Let's limit the number of posts.
|
||||
if (currentTime - this.lastPostTime > POST_THRESHOLD_S) {
|
||||
this.lastPostTime = currentTime;
|
||||
this.port.postMessage({ 'type': 'position', 'data': this.position });
|
||||
this.port.postMessage({ type: 'position', data: this.position });
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -621,28 +621,24 @@ class SampleNode {
|
|||
if (this.isCanceled) {
|
||||
return;
|
||||
}
|
||||
this.getPositionWorklet();
|
||||
this._source.connect(this._positionWorklet);
|
||||
this._source.connect(this.getPositionWorklet());
|
||||
if (start) {
|
||||
this.start();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a AudioWorkletProcessor from the pool, or create one if no processor is available.
|
||||
* Get a AudioWorkletProcessor
|
||||
* @returns {AudioWorkletNode}
|
||||
*/
|
||||
getPositionWorklet() {
|
||||
if (this._positionWorklet != null) {
|
||||
return;
|
||||
}
|
||||
if (GodotAudio.audioPositionWorkletPool.length == 0) {
|
||||
this._positionWorklet = new AudioWorkletNode(
|
||||
GodotAudio.ctx,
|
||||
'godot-position-reporting-processor'
|
||||
);
|
||||
} else {
|
||||
this._positionWorklet = GodotAudio.audioPositionWorkletPool.pop();
|
||||
return this._positionWorklet;
|
||||
}
|
||||
this._positionWorklet = new AudioWorkletNode(
|
||||
GodotAudio.ctx,
|
||||
'godot-position-reporting-processor'
|
||||
);
|
||||
this._positionWorklet.port.onmessage = (event) => {
|
||||
switch (event.data['type']) {
|
||||
case 'position':
|
||||
|
|
@ -652,6 +648,7 @@ class SampleNode {
|
|||
// Do nothing.
|
||||
}
|
||||
};
|
||||
return this._positionWorklet;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -681,8 +678,7 @@ class SampleNode {
|
|||
if (this._positionWorklet) {
|
||||
this._positionWorklet.disconnect();
|
||||
this._positionWorklet.port.onmessage = null;
|
||||
this._positionWorklet.port.postMessage({ type: 'clear' });
|
||||
GodotAudio.audioPositionWorkletPool.push(this._positionWorklet);
|
||||
this._positionWorklet.port.postMessage({ type: 'ended' });
|
||||
this._positionWorklet = null;
|
||||
}
|
||||
|
||||
|
|
@ -1199,7 +1195,6 @@ const _GodotAudio = {
|
|||
|
||||
/** @type {Promise} */
|
||||
audioPositionWorkletPromise: null,
|
||||
audioPositionWorkletPool: [],
|
||||
|
||||
/**
|
||||
* Converts linear volume to Db.
|
||||
|
|
|
|||
Loading…
Reference in New Issue