export default class AudioTrackProcess { name= "" source= null sourceSettings = null processor = null trackGenerator= null; processedTrack= null; constructor(name) { this.name = name; } async init(opts) { this.source = opts.track this.sourceSettings = this.source.getSettings(); this.processor = new MediaStreamTrackProcessor({ track: this.source }); this.trackGenerator = new MediaStreamTrackGenerator({ kind: 'audio', signalTarget: this.source, }); let readableStream = this.processor.readable; this.transformer = new TransformStream({ transform: (frame, controller) => this.transform(frame, controller), }); readableStream = readableStream.pipeThrough(this.transformer); readableStream .pipeTo(this.trackGenerator.writable) .catch((e) => console.error('error when trying to pipe', e)) .finally(() => this.destroy()); this.processedTrack = this.trackGenerator } async transform(data, controller) { console.log('transformer', data); controller.enqueue(data); } async restart(opts) { await this.destroy(); return this.init(opts); } async destroy() { this.trackGenerator?.stop(); } }