Я пытаюсь использовать new AudioContext(). audioWorklet.addModule(URL.createObjectURL(blob))
Загрузить, но консоль выдает ошибку: перекрестный источник, если это протокол file://
, как использовать audioWorklet
?
Я пытался использовать new Blob([Source Code], {type: 'application/javascript'});
, но все равно выдает ошибку
Однако в Chrome можно использовать метод file://
протокол new Worker(URL.createObjectURL(blob))
.
const getMp3=()=>{
// return arrayBuffer
};
const playWorkletStr = async () => {
let audioContext = new AudioContext();
let audioBuffer = await audioContext.decodeAudioData(getMp3());
let bypass = `class Bypass extends AudioWorkletProcessor {
process(inputs, outputs) {
const input = inputs[0];
const output = outputs[0];
for (let channel = 0; channel < output.length; ++channel) {
output[channel].set(input[channel]);
}
return true;
}
}
registerProcessor('bypass', Bypass);
`;
let blob = new Blob([bypass], {type: 'application/javascript'});
await audioContext.audioWorklet.addModule(URL.createObjectURL(blob));
const bypasser = new AudioWorkletNode(audioContext, 'bypass');
let source = audioContext.createBufferSource();
source.buffer = audioBuffer;
source.connect(bypasser).connect(audioContext.destination);
source.start();
};
document.getElementById('btn').onclick = () => {
playWorkletStr();
};
<button id="btn">play</button>
<script src="index.js"></script>