2016-02-03 4 views
6

Здесь что-то странное. создать аудио магазин буфера в переменной и попытаться повторно использовать его несколько раз - но это, кажется, поврежденweb audio buffer странное поведение

Я делаю несколько кнопок

<button onclick="play();">play(0)</button> 
    <button onclick="playsection();">play section</button> 
    <button onclick="stop();">stop()</button> 

Получить некоторые аудио данные

context = new AudioContext(); 

var getWav = new XMLHttpRequest(); 
var wavbuf; 

getWav.open("GET", "/wav/test.wav", true); 
getWav.responseType = "arraybuffer"; 

getWav.onload = function() { 
    context.decodeAudioData(getWav.response, function(buffer){ 
    wavbuf = buffer; 
    }); 
} 

getWav.send(); 

var p; 

я могу оценить игру() несколько раз без ошибки

function play(){ 
    p = context.createBufferSource(); 
    p.buffer = wavbuf; 
    p.connect(context.destination); 
    p.start(0); 
} 

playsection, кажется, работает только один раз - или иногда больше, чем один раз, если я нажимаю остановить до того остановки (10) оценивает

function playsection(){ 
    p = context.createBufferSource(); 
    p.buffer = wavbuf; 
    p.connect(context.destination); 
    p.start(0, 6); // start after 6 seconds 
    p.stop(10); // stop after 10 seconds 
} 


function stop(){ 
    p.stop(); 
} 

Похоже p.buffer = wavbuf создает указатель в буфер, а не копию

Это ошибка или функция?

ответ

1

Так что это интересно, он будет играть в секции последовательно либо без остановки:

function playsection(){ 
    p = context.createBufferSource(); 
    p.buffer = wavbuf; 
    p.connect(context.destination); 
    p.start(0, 6); // start after 6 seconds 
} 

или без смещения:

function playsection(){ 
    p = context.createBufferSource(); 
    p.buffer = wavbuf; 
    p.connect(context.destination); 
    p.start(0); 
    p.stop(10); // stop after 10 seconds 
} 

и даже объявить смещение и длительность в начале:

function playsection(){ 
    p = context.createBufferSource(); 
    p.buffer = wavbuf; 
    p.connect(context.destination); 
    p.start(0,6,10); 
} 
+0

Да - спасибо Это в разделе спецификации 2.10.2 https://webaudio.github.io/web-audio-api/#the-audi obuffer-интерфейс –

 Смежные вопросы

  • Нет связанных вопросов^_^