audio - 网络音频缓冲区奇怪的行为

标签 audio web buffer web-audio-api

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

我做了一些按钮

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

这是错误还是功能?

最佳答案

所以这很有趣,它会不间断地播放该部分:

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

关于audio - 网络音频缓冲区奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35173551/

相关文章:

android - 如何使用索引直接从raw/res文件夹访问音频文件

ruby-on-rails - 您如何在本地网络上托管 Ruby on Rails 应用程序,以便多人可以访问它?

c - 为什么不同的测试有完全相同的数字?

java - java直接发送音频到扬声器

c - 用C/C++在Raspberry Pi上播放WAV,必须使用dsp吗?

web - 我如何为手机设计网站

javascript - 时区 : user preference vs client-side Javascript

iphone - 关于我的 OpenGL 的问题 - 代码

vim - 使用 Vim :make with quickfix ends up creating a new file when error is in header

ios - iOS:在播放其他应用程序时播放声音