我正在使用Chrome网络音频API和webkitAudioContext来播放循环.我有几个循环,我正在交叉淡入淡出类似于铬博客上的数字DJ示例.
在他们的示例中,当循环到达循环结束时他们正在切换样本,然后他们开始播放下一个加载的循环.我想立即启动新循环并在它们之间交叉淡入淡出,但我还没有找到一个如何在中间开始播放新音频文件的示例,而不仅仅是从开始.
我查看了W3C Web Audio API,您发送的noteOn参数只是在音频开始播放时与上下文currentTime属性相关的时间编码.它始终从样本开始播放.
是否有更多的文档或我忽略了如何开始播放音频文件2秒的内容?
我正在开发一个Web应用程序,用户可以对音频样本进行排序,并可选择将效果应用于他们使用Web Audio API创建的音乐模式.模式存储为JSON数据,我想对每个模式服务器端的渲染音频进行一些分析.据我所知,这给我留下了两个选择:
在服务器端运行我自己的渲染代码,尝试尽可能忠实于浏览器内渲染.也许我甚至可以从Chromium项目中取出Web Audio代码并对其进行修改,但这似乎可能需要做很多工作.
渲染客户端,希望比实时更快,然后将渲染的音频发送到服务器.这是理想的(和DRY),因为只有一个引擎用于模式渲染.
这个问题引导我到Chromium存储库中的这个代码示例,这似乎表明离线处理是可能的.诀窍似乎是webkitAudioContext用一些参数构造一个(通常使用零参数构造函数).以下是我对参数含义的猜测:
new webkitAudioContext(2, // channels
10 * 44100, // length in samples
44100); // sample rate
Run Code Online (Sandbox Code Playgroud)
我稍微调整了样本,并在Windows,Mac和Linux上的Chrome 23.0.1271.91中进行了测试. 这是实例和结果(打开Dev Tools Javascript控制台以查看发生的情况):
webkitAudioContext我上面描述的构造函数导致Windows和Linux上的异常.
离线渲染对于我正在尝试做的事情来说是完美的,但我无法在任何地方找到文档,并且支持不太理想.有没有人有关于此的更多信息?我是否应该尽快在Windows和/或Linux中期待对此的支持,或者我应该期待支持在Mac上很快消失?
我正在使用THREE.JS和Web Audio API创建一个3D游戏.我遇到的一个问题是我想使用网络音频监听器方向,并将监听器定义为摄像头,其位置和方向不断更新
我的问题是,无论如何要轻松获得三个相机的矢量方向?
我试图通过使用旧的相机位置来计算它,并使用速度矢量来计算它面向哪个方向,但是当相机静止时这不起作用...
通过使用camera.rotation.x,camera.rotation.y,camera.rotation.z来创建单位向量是否可行?
还是有更简单的方法?
非常感谢你的时间!
我想开始并停止声音.这很有效.但是我无法重新开始播放声音.
我真的要再制作一个振荡器吗?这看起来非常不直观.肯定有更好的办法.
这就是我所有的工作:
oscillator1.noteOn(0);
oscillator1.noteOff(0);
Run Code Online (Sandbox Code Playgroud)
再次致电noteOn并没有做任何事情.为什么?超越我.
我也尝试设置音量,或者在Web Audio人的上下文中,"增益"等于零.但由于某种原因,增益为零会产生声音.什么样的增益值都不会发出任何声音?
男人,我简直不敢相信这是多么困难:/
我通过线路接收交错的16位PCM采样.每个样本都已签名
我把它读作Int16bit数组,让我们调用这个ALL_DATA.因此每个数组条目都是16位样本.
因为它是交错的,所以我把它提取到2个通道中RLRL我最终得到了一半大小为ALL_DATA数组的2(16位)数组.
之后,我查看每个示例并将其规范化为Float32Array,因为这是Web音频API使用的.
var normalizedSample =(sample> 0)?sample/32768:sample/-32768;
这是正确的方法吗?
我的声音变得扭曲了.你可以知道发生了什么.所以,如果你正在聆听经典吉他,那么听起来就像是电动的失真.
为了论证,我放下了示例代码,但是这段代码处理
MONO SOUND使示例更简单,因此我们也不必交错
var startTime = 0;
var fileReader = new FileReader();
fileReader.onload = function (e) {
var data = new DataView(e.target.result);
var audio = new Int16Array(data.byteLength / Int16Array.BYTES_PER_ELEMENT);
var len = audio.length;
for (var jj = 0; jj < len; ++jj) {
audio[jj] = data.getInt16(jj * Int16Array.BYTES_PER_ELEMENT, true);
}
var right = new Float32Array(audio.length);
var channleCounter = 0;
for (var i = 0; i < audio.length; ) {
var …Run Code Online (Sandbox Code Playgroud) 我希望从浏览器中获取音频输入并将其传输到多个侦听器.预期用途是音乐,所以质量必须mp3标准或左右.
我尝试了两种方法,都产生了不成功的结果:
的WebRTC
的WebSockets
问题是从浏览器到服务器的传输.我通过以下方法获取的PCM音频数据已被证明太大,无法通过websockets重复流式传输到服务器.该流在高速互联网环境中完美运行,但在较慢的wifi上它无法使用.
var context = new webkitAudioContext()
navigator.webkitGetUserMedia({audio:true}, gotStream)
function gotStream (stream)
{
var source = context.createMediaStreamSource(stream)
var proc = context.createScriptProcessor(2048, 2, 2)
source.connect(proc)
proc.connect(context.destination)
proc.onaudioprocess = function(event)
{
var audio_data = event.inputBuffer.getChannelData(0)|| new Float32Array(2048)
console.log(audio_data)
// send audio_data to server
}
}
Run Code Online (Sandbox Code Playgroud)所以主要的问题是,有没有办法压缩PCM数据,以便更容易流到服务器?或者也许有一个更简单的方法来解决这个问题?
这是一个非常简单的例子,我试图在Chrome上运行iphone.其他网络音频API示例像这样一个http://alxgbsn.co.uk/wavepad/工作,但不是我的:(
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<script>
var audioContext, osc
audioContext = new (window.AudioContext || window.webkitAudioContext);
osc = audioContext.createOscillator()
osc.connect(audioContext.destination)
if (osc.noteOn) osc.start = osc.noteOn
osc.start(0)
osc.frequency.value = 440
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
知道什么是错的吗?
编辑
总结答案:
试图将两个缓冲区合并为一个缓冲区; 我已经能够从音频文件创建两个缓冲区并加载和播放它们.现在我需要将两个缓冲区合并到一个缓冲区中.他们怎么能合并?
context = new webkitAudioContext();
bufferLoader = new BufferLoader(
context,
[
'audio1.mp3',
'audio2.mp3',
],
finishedLoading
);
bufferLoader.load();
function finishedLoading(bufferList) {
// Create the two buffer sources and play them both together.
var source1 = context.createBufferSource();
var source2 = context.createBufferSource();
source1.buffer = bufferList[0];
source2.buffer = bufferList[1];
source1.connect(context.destination);
source2.connect(context.destination);
source1.start(0);
source2.start(0);
}
Run Code Online (Sandbox Code Playgroud)
现在这些来源分别加载并同时播放; 但是如何将这两个源合并到一个缓冲源中呢?我不想附加它们,我想覆盖/合并它们.
解释和/或片段会很棒.
我有网站,我需要显示Live Mic Audio的频率.我有一个这个代码,但它很难理解(它使用傅里叶变换和所有).在一些研究中,我知道getByteFrequencyData()哪个返回音频的频率.有没有人之前使用过Live Mic Audio,最好是在Web Audio API中?
我在decodeAudioData使用Web Audio APIChrome浏览器播放方法时遇到问题(在Firefox中运行正常) -
我正在从服务器发送媒体记录器记录的音频缓冲区.
服务器端
wss = new WebSocketServer({server: server}, function () {});
wss.on('connection', function connection(ws) {
ws.binaryType = "arraybuffer";
ws.on('message', function incoming(message) {
if ((typeof message) == 'string') {
console.log("string message: ", message);
} else {
console.log("not string: ", message);
ws.send(message);
}
});
});
Run Code Online (Sandbox Code Playgroud)
客户端
window.AudioContext = window.AudioContext||window.webkitAudioContext;
navigator.getUserMedia = (navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia);
var context = new AudioContext();
var mediaRecorder;
var chunks = [];
var startTime = 0;
ws = …Run Code Online (Sandbox Code Playgroud) javascript websocket node.js mediarecorder-api web-audio-api
web-audio-api ×10
javascript ×9
audio ×3
html5 ×3
html5-audio ×2
websocket ×2
getusermedia ×1
node.js ×1
pcm ×1
three.js ×1
typed-arrays ×1
webrtc ×1