我经常读到使用Web Audio API暂停/恢复音频文件是不可能的.
但现在我看到一个例子,他们实际上可以暂停和恢复它.我试图弄清楚他们是怎么做到的.我想也许source.looping = false是关键,但事实并非如此.
现在我的音频总是从一开始就重新播放.
这是我目前的代码
var context = new (window.AudioContext || window.webkitAudioContext)();
function AudioPlayer() {
this.source = context.createBufferSource();
this.analyser = context.createAnalyser();
this.stopped = true;
}
AudioPlayer.prototype.setBuffer = function(buffer) {
this.source.buffer = buffer;
this.source.looping = false;
};
AudioPlayer.prototype.play = function() {
this.source.connect(this.analyser);
this.analyser.connect(context.destination);
this.source.noteOn(0);
this.stopped = false;
};
AudioPlayer.prototype.stop = function() {
this.analyser.disconnect();
this.source.disconnect();
this.stopped = true;
};
Run Code Online (Sandbox Code Playgroud)
有人知道该怎么做,让它运作起来吗?
我正在研究这篇很棒的文章:https://jackschaedler.github.io/circles-sines-signals/dft_introduction.html
我想使用Web Audio API的PeriodicWave对象来实现此演示: 
但是,当我使用这些设置设置周期波时:
var real = new Float32Array([0,0,1,0,1]);
var imag = new Float32Array(real.length);
var customWave = context.createPeriodicWave(real,imag);
osc.setPeriodicWave(customWave);
Run Code Online (Sandbox Code Playgroud)
我输出一个看起来像这样的波:
以下是完整代码:http://jsbin.com/zaqojavixo/4/edit
要查看波形,请按几次播放声音.
我相信这些应该匹配,所以这是我的问题:
编辑:如评论中所述,我的图表是颠倒的(在画布上0,0是左上角).
我理解Web Audio API是客户端功能,但nodejs基于ECMAScript的V8 Chrome客户端实现,其中包括Web Audio API.
为什么nodejs中没有完全支持Web Audio API?
是因为AudioContext基于全局窗口对象吗?
我在这里错过了一点吗?
是否有计划在将来提供它?
我想学习/做的事情:如何使用脉冲响应在我的代码沙箱中设置一个简单的工作卷积器(混响).我认为这与设置过滤器类似,但事情似乎有很大不同.
我尝试过:与所有新技术一样,事情变化很快,因此很难知道哪种实现是正确的,哪些是不正确的.我看了无数的WebAudio Api Convolver Tutorials,很多都很老,其他人都在工作,但是太过"臃肿",让人很难理解发生了什么.我试图从mozilla文档中实现一些示例:
我已经看过了:https://developer.mozilla.org/en-US/docs/Web/API/ConvolverNode/buffer
我的问题:如何在下面的上下文中正确集成一个卷积器?正如你所看到的那样,我试过但是无法弄明白这一点.
window.addEventListener('load', init, false);
function init() {
setupWebAudio();
}
function setupWebAudio() {
var audio = document.getElementById('music');
var context = new AudioContext();
var source = context.createMediaElementSource(audio);
var filter = context.createBiquadFilter();
var convolver = context.createConvolver();
var inpulseRes = "hall.mp3";
var hallBuffer = inpulseRes;
soundSource = context.createBufferSource();
soundSource.buffer = hallBuffer;
convolver.buffer = hallBuffer;
filter.type = 'lowpass';
filter.frequency.value = 400;
var theParent = document.getElementById("test");
theParent.addEventListener("mousedown", doSomething, false);
function doSomething(e) {
if (e.target …Run Code Online (Sandbox Code Playgroud) 我应该能够使用相同AudioBufferSourceNode的声音多次播放声音吗?出于某种原因,noteGrainOn即使进行干预,第二次呼叫也不会播放音频noteOff.
此代码仅播放一次声音:
var node = audioContext.createBufferSource()
node.buffer = audioBuffer
node.connect(audioContext.destination)
var now = audioContext.currentTime
node.noteGrainOn(now, 0, 2)
node.noteOff(now + 2)
node.noteGrainOn(now + 3, 0, 2)
node.noteOff(now + 5)
Run Code Online (Sandbox Code Playgroud) 如何使用Web音频API反向播放音频?我似乎无法在API文档中找到任何内容......
我打算在网站上创建一个音乐可视化工具.有些物体应该根据正在播放的当前音乐改变大小和形状(可能是非经典的多行歌曲,例如Do not Stop believe).我想至少能够知道音乐的音量,如果可能的话,任何可以拾取的音高(在Javascript中可以进行FFT吗?).是否有声音API可以让我在Javascript或至少在线执行此操作?
我想了解如何在Web Audio API中使用分贝
这里我有一个连接到增益节点的音频缓冲区
var mybuffer = context.createBufferSource());
mybuffer.buffer = buffer; //an audio buffer
var gainNode=context.createGain();
mybuffer.connect(gainNode);
gainNode.connect(context.destination);
Run Code Online (Sandbox Code Playgroud)
增益音量是从0(静音)到n的范围,其中1是默认音量,但据我所知,音频通常与这样的音域无关,音量以分贝(Db)为单位,操作也以Db为单位.
我已经在这个答案中读到了一些有趣的东西,但它完全符合我的需求: 是否有办法从音频文件中获取分贝级别并将该信息转换为json数组?
我想知道如何确定音频节点的分贝,如何使用分贝编辑音量
如需现场演示,请访问:http://codepen.io/rrorg/pen/WxPjrz?edit = 0010
在Safari中播放HTTP音频直播流时,分析器会getByteFrequencyData使用零填充数组.
在所有其他浏览器中,这可以按预期工作,并且Safari正确填充静态文件的频率数据没有问题.
CORS标头设置正确,Apple文档没有提到特殊情况.
我正在尝试使用WebAudio API并尝试构建一个分析器,用户可以与之交互并最终打开和关闭音乐中的不同频率,以隔离音轨内的不同节拍,即低音,踢等.
我正在使用Canvas可视化频率数据,并希望用户能够突出显示部分可视化和反过来的静音频率.
默认情况下,可视化将如下所示,用户将听到所有频率.
但是当用户选择几个条形图时,灰色的条形图会使相关频率静音:
我的想法是,我可以对frequencyData数组进行反向工程,并基本上将相关频率静音吗?
**更新**
所以我一直在玩几个串联biquadFilter类型的s notch,然后调整它们的频率和Q值.这有助于隔离音乐的拍摄,但不完全是我想要的.这是我到目前为止使用的代码......
const audioContext = new window.AudioContext();
const source = audioContext.createMediaElementSource(element);
const biquadFilter1 = audioContext.createBiquadFilter();
const biquadFilter2 = audioContext.createBiquadFilter();
const biquadFilter3 = audioContext.createBiquadFilter();
const analyser = audioContext.createAnalyser();
biquadFilter1.connect(analyser);
biquadFilter2.connect(analyser);
biquadFilter3.connect(analyser);
source
.connect(biquadFilter1)
.connect(biquadFilter2)
.connect(biquadFilter3);
analyser.connect(audioContext.destination);
Run Code Online (Sandbox Code Playgroud)
我不确定我是否正确设置了它,但它确实允许我非常粗略地操纵频率,但感觉就像没有准确的科学这样做.
是我尝试的可能,如果是的话,任何建议真的很感激:)
web-audio-api ×10
javascript ×9
html5 ×3
html5-audio ×3
audio ×2
html ×1
node.js ×1
safari ×1
stream ×1