javascript - 超级强大的循环或loopBetween没有按预期工作
问题描述
我已将 JS 时间拉伸示例修改为循环,但没有使用 loop() 或 loopBetween() 输出任何音频。player.play() 播放整个文件。我可以通过在进程循环中轮询 getPositionMs 和 setPosition 来强制它,但这是一个 hack。我应该做什么?谢谢。
class MyProcessor extends SuperpoweredWebAudio.AudioWorkletProcessor {
// runs after the constructor
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.loopBetween (
1000.0, //double startMs,
3000.0, // double endMs,
true, // bool jumpToStartMs,
255, //unsigned char pointID,
false); //bool synchronisedStart
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;
};
if (this.player.getPositionMs() > 3000) {
this.player.setPosition(1000.0, false, false);
}
}
}
解决方案
推荐阅读
- visual-studio-code - 可以让 vscode 使用 remote-ssh 上游的代理吗?
- nginx - 如何将 Minikube 中的 nginx 暴露给外部
- node.js - 无法导入模块外
- java - 我必须编写一个 for 循环来打印数组中字符的 ASCII 值
- r - 从列中的字符串中提取特定短语后的某些数字的最佳方法是什么?
- ubuntu - 无法通过 pyqt 应用程序在 ubuntu20 中打开文件夹
- python - 加入表格,只保留右边的,但保留左边的数量
- flutter - GraphQL 操作如何以文件形式存储到 Postgraphile 管理的 Flutter 应用中?
- cuba-platform - 如何在数据采集 CUBA 平台中获取照片数据
- python - 通过 Python 将 Excel 文件保存为 CSV