Следующий код будет воспроизводить синусоидальную волну на 0,5 и 2,0. Вызовите функцию play_buffersource()
в вашей кнопке или в любом другом месте.
Протестировано с использованием Chrome с включенным флагом Web Audio. В вашем случае все, что вам нужно сделать, это просто перенаправить ваши аудио байты на buf
.
<script type="text/javascript">
const kSampleRate = 44100; // Other sample rates might not work depending on the your browser's AudioContext
const kNumSamples = 16834;
const kFrequency = 440;
const kPI_2 = Math.PI * 2;
function play_buffersource() {
if (!window.AudioContext) {
if (!window.webkitAudioContext) {
alert("Your browser sucks because it does NOT support any AudioContext!");
return;
}
window.AudioContext = window.webkitAudioContext;
}
var ctx = new AudioContext();
var buffer = ctx.createBuffer(1, kNumSamples, kSampleRate);
var buf = buffer.getChannelData(0);
for (i = 0; i < kNumSamples; ++i) {
buf[i] = Math.sin(kFrequency * kPI_2 * i / kSampleRate);
}
var node = ctx.createBufferSource(0);
node.buffer = buffer;
node.connect(ctx.destination);
node.noteOn(ctx.currentTime + 0.5);
node = ctx.createBufferSource(0);
node.buffer = buffer;
node.connect(ctx.destination);
node.noteOn(ctx.currentTime + 2.0);
}
</script>
Ссылки:
Если вам нужно повторить выборку аудио, вы можете использовать ресэмплер JavaScript: https://github.com/grantgalitz/XAudioJS
Если вам нужно декодировать данные base64, существует множество декодеров JavaScript base64: https://github.com/carlo/jquery-base64