【问题标题】:web audio buffer strange behaviour网络音频缓冲区奇怪的行为
【发布时间】:2016-02-03 09:50:17
【问题描述】:

这里发生了一些奇怪的事情。 我创建了一个音频缓冲区,将其存储在一个变量中并尝试多次重复使用它 - 但它似乎已损坏

我做了一些按钮

    <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;

我可以多次评估 play() 而不会出错

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 创建指向缓冲区的指针而不是副本

这是错误还是功能?

【问题讨论】:

    标签: audio web buffer web-audio-api


    【解决方案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);
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 2022-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多