Superpowered的loop或loopBetween方法未按预期运行问题咨询
问题根因
你调用loopBetween()没有生效是两个配置错误导致的:
- Superpowered AdvancedAudioPlayer的
loop属性默认值为false,仅设置循环区间不会自动开启循环功能,需要显式赋值开启。 loopBetween()的最后一个参数synchronisedStart仅在需要和其他音频轨道做同步启动的时候才需要设为false,普通单轨道循环场景设为false会导致首次跳转起始位置异常,出现无声音的情况。
修改后可正常运行的代码
class MyProcessor extends SuperpoweredWebAudio.AudioWorkletProcessor { // 构造函数执行完成后触发 onReady() { this.player = new this.Superpowered.AdvancedAudioPlayer(this.samplerate, 2, 2, 0, 0.501, 2, false); SuperpoweredTrackLoader.downloadAndDecode('../123456.mp3', this); } onMessageFromMainScope(message) { if (message.SuperpoweredLoaded) { this.player.openMemory(this.Superpowered.arrayBufferToWASM(message.SuperpoweredLoaded.buffer), false, false); // 新增:显式开启循环开关 this.player.loop = true; this.player.loopBetween ( 1000.0, // 循环起始位置,单位毫秒 3000.0, // 循环结束位置,单位毫秒 true, 255, // 普通单轨循环场景修改为true即可 true ); this.player.play(); this.sendMessageToMainScope({ loaded: true }); } if (typeof message.rate !== 'undefined') this.player.playbackRate = message.rate / 10000.0; if (typeof message.pitchShift !== 'undefined') this.player.pitchShiftCents = parseInt(message.pitchShift) * 100; } processAudio(inputBuffer, outputBuffer, buffersize, parameters) { if (!this.player.processStereo(outputBuffer.pointer, false, buffersize, 1)) { for (let n = 0; n < buffersize * 2; n++) outputBuffer.array[n] = 0; } // 原有轮询强制跳转的hack逻辑直接删除即可 } }
内容的提问来源于stack exchange,提问作者sean1081
相关产品推荐
相关产品推荐

