你如何在网络音频api中使用waveshapernode?特别是曲线Float32Array属性?
编辑:清除代码和播放器(在Github上),以便更容易设置频率
我正在尝试使用Karplus Strong字符串合成算法合成字符串,但我无法正确调整字符串.有谁有想法吗?
如上所述,代码在Github上:https://github.com/achalddave/Audio-API-Frequency-Generator(相关位在strings.js).
Wiki有以下图表:

基本上,我产生噪声,然后输出并同时发送到延迟滤波器.延迟滤波器连接到低通滤波器,然后与输出混合.根据维基百科,延迟应该是N个样本,其中N是采样频率除以基频(N = f_s/f_0).
摘自我的代码:
产生噪音(bufferSize是2048,但这不应该太重要)
var buffer = context.createBuffer(1, bufferSize, context.sampleRate);
var bufferSource = context.createBufferSource();
bufferSource.buffer = buffer;
var bufferData = buffer.getChannelData(0);
for (var i = 0; i < delaySamples+1; i++) {
bufferData[i] = 2*(Math.random()-0.5); // random noise from -1 to 1
}
Run Code Online (Sandbox Code Playgroud)
创建延迟节点
var delayNode = context.createDelayNode();
Run Code Online (Sandbox Code Playgroud)
我们需要延迟f_s/f_0样品.但是,延迟节点以秒为单位进行延迟,因此我们需要将其除以每秒的采样数,我们得到(f_s/f_0) / f_s,这就是1/f_0.
var delaySeconds …Run Code Online (Sandbox Code Playgroud) 我正在使用webkit Audio API,我正在尝试创建一个Echo效果,以实现我在一个循环中连接一个DelayNode和一个GainNode(一个的输出是另一个的输入,反之亦然) .

效果很好,但现在我想创建一个EchoNode对象,我可以插入并与其他AudioNode对象连接.
就像是:
myEchoNode = new EchoNode();
myConvolverNode = context.createConvolver();
myConvolverNode.connect(myEchoNode);
Run Code Online (Sandbox Code Playgroud)
我认为我应该让我的EchoNode继承AudioNode,这样每个其他AudioNode的连接功能都可以工作,但我不知道如何在Javascript中使用web Audio API.
任何人都可以给我一个提示,或者如果你认为有一个更好的方法来完成,我会非常感激.
谢谢
因此,我可以使用这些信息来协调页面动画,就像分贝级别越高,使元素更亮
我正在使用Opentok JavaScript WebRTC库来托管一对一的视频聊天(点对点).我可以看到我的同伴的视频,并完美地听到音频.
我的愿望是录制其他聊天方(远程)的音频/视频.为此,我正在使用RecordRTC.我能够录制其他聊天参与者的视频(视频输出到HTML视频元素),但到目前为止,我还没有成功录制音频(死音静音.wav文件是我能得到的).使用Chrome Canary(30.0.1554.0).这是我的方法:
var clientVideo = $('#peerdiv video')[0];//peer's video (html element)
var serverVideo = $('#myselfdiv video')[0];//my video (html element)
var context = new webkitAudioContext();
var clientStream = context.createMediaStreamSource(clientVideo.webRTCStream);
var serverStream = context.createMediaStreamSource(serverVideo.webRTCStream);
Run Code Online (Sandbox Code Playgroud)
webRTCStream是我通过修改opentok js库的源来分配给HTMLVideoElement对象的自定义属性.它包含链接到相应<video>元素的MediaStream对象.
var recorder = RecordRTC({
video: clientVideo,
stream: clientStream
});
recorder.recordAudio();
recorder.recordVideo();
Run Code Online (Sandbox Code Playgroud)
录制视频.音频文件也被创建,它的长度接近视频的长度,然而,它是完全静音的(是的,录制期间在另一侧产生了很多噪音)
我用视频元素测试了这个,它显示了我的网络摄像头的视频流(和音频),并且它有效:录制了音频和视频:
...
var recorder = RecordRTC({
video: serverVideo,
stream: serverStream
});
...
Run Code Online (Sandbox Code Playgroud)
源自远程位置的流有什么特别之处吗?关于这个问题的任何指导都会非常有帮助.
我正在使用ScriptProcessorNode的onaudioprocess回调来处理麦克风输入.通过将MediaStreamSourceNode连接到ScriptProcessorNode,我可以在onaudioprocess回调函数中获取原始音频数据.但是,在大约30秒后(这在10到35秒之间变化),浏览器停止调用onaudioprocess.在以下代码中,console.log输出('>>')总是在大约30秒后停止.
var ctx = new AudioContext();
var BUFFER_LENGTH = 4096;
console.log('Buffer length is + ' + BUFFER_LENGTH);
navigator.webkitGetUserMedia({audio: true}, function (stream) {
var mediaStreamSource = ctx.createMediaStreamSource(stream);
var scriptProcessor = ctx.createScriptProcessor(BUFFER_LENGTH, 1, 1);
scriptProcessor.onaudioprocess = function (e) {
console.log('>>');
};
scriptProcessor.connect(ctx.destination);
}, function(e) {
console.error('Unable to get audio input source.');
});
Run Code Online (Sandbox Code Playgroud)
我尝试了所有可能的BUFFER_LENGTH(256,512,1024,2048,4096,8192,16384),但情况没有改变(30秒后停止记录.)我在最新的Chrome版本(版本35.0)中观察到了这个问题. 1916.153)和Canary(版本37.0.2060.3 canary.)有没有人知道任何变通方法?
我们有一个博客,每个帖子都包含一个iframe,当点击播放时,它会使用Web Audio播放声音.
问题是,在页面上有一定数量的帖子后,下一帧会抛出错误:
Uncaught SyntaxError: Failed to construct 'AudioContext': number of hardware contexts reached maximum (6).
在帧之间重用单个AudioContext是不可能的 - window.top由于同源策略而被禁止.
这是一个简化的例子:http://jsfiddle.net/aobpv7kg/(单击添加框架,直到出现错误 - 在我的情况下为第7帧).
页面中的任意数量的帧可以使用Web Audio吗?或者将每页的帖子数减少到5我们能做什么?
在使用音频元素(<audio>)或contexts(AudioContext)时,您可以检查它们的currentTime属性以确切了解缓冲区的播放时间。
在我一次创建多个源(或AudioBufferSourceNode)之前,所有这些都是不错的选择AudioContext。
音源可以在不同的时间播放,因此我需要知道它们对应currentTime的,以说明:
一些基础代码供您解决:
buffer1 = [0,1,0]; //not real buffers
buffer2 = [1,0,1];
ctx = new AudioContext();
source1 = ctx.createBufferSourceNode();
source1.buffer = buffer1;
source1.connect(ctx.destination);
source1.start(0);
source2 = ctx.createBufferSourceNode();
source2.buffer = buffer2;
source2.connect(ctx.destination);
setTimeout(1000/*some time later*/){
source2.start(0);
}
setTimeout(1500/*some more time later*/){
getCurrentTime();
}
function getCurrentTime(){
/* magic */
/* more magic */
console.log("the sources currentTime values are obviously 1500 (source1) and 500 (source2).");
}
Run Code Online (Sandbox Code Playgroud) 我问了一个类似于此前的问题,但它没有解决我的问题并且解释得很差.这次我做了插图,希望能更好地解释.
我的音频播放器有一个简单的频谱分析仪.频率存储在每个都更新的数组中requestAnimationFrame,数组如下所示:
fbc_array = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(fbc_array);
Run Code Online (Sandbox Code Playgroud)
在这里阅读更多关于getByteFrequencyData的信息.
所以这个工作正常,但我希望频率在整个频谱中均匀分布.现在它显示线性频率:
正如您所看到的,这里的主要频率范围是高音(高端),最主要的频率范围是低音范围(低端).我希望我的分析仪具有均匀分布的频率范围,如下所示:
在这里,您可以看到分析仪上均匀分布的频率.这可能吗?
我用于生成分析器的代码如下所示:
// These variables are dynamically changed, ignore them.
var canbars = 737
var canmultiplier = 8
var canspace = 1
// The analyser
var canvas, ctx, source, context, analyser, fbc_array, bars, bar_x,
bar_width, bar_height;
function audioAnalyserFrame() {
'use strict';
var i;
canvas.width = $('analyser-').width();
canvas.height = $('analyser-').height();
ctx.imageSmoothingEnabled = false;
fbc_array = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(fbc_array);
ctx.clearRect(0, 0, canvas.width, canvas.height); // Clear the canvas
ctx.fillStyle = "white"; …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过将示例拼凑在一起来学习在线教程。我觉得这应该是播放mp3文件。我正在使用 Chrome 浏览器,它是最新的。我在控制台上没有收到任何错误。我不确定我需要更改或添加什么才能使其工作。
<script type="text/javascript">
//creating an audio context
window.addEventListener('load',init);
function init()
{
try
{
window.AudioContext = window.AudioContext || window.webkitAudioContext;
var context=new AudioContext();
}
catch(e)
{
alert("Your browser doesn't support Web Audio API");
}
loadSound();
playSound();
}
//loading sound into the created audio context
function loadSound()
{
//set the audio file's URL
var audioURL='audio files/song.mp3';
//creating a new request
var request = new XMLhttpRequest();
request.open("GET",audioURL,true);
request.responseType= 'arraybuffer';
request.onLoad funtion(){
//take the audio from http request and decode it in an …Run Code Online (Sandbox Code Playgroud) web-audio-api ×10
javascript ×7
audio ×3
html5-audio ×2
api ×1
audiocontext ×1
getusermedia ×1
html ×1
iframe ×1
json ×1
opentok ×1
webkit ×1
webrtc ×1