标签: web-audio-api

使用Chrome webkitAudioContext开始在中间播放加载的音频文件?

我正在使用Chrome网络音频API和webkitAudioContext来播放循环.我有几个循环,我正在交叉淡入淡出类似于铬博客上的数字DJ示例.

在他们的示例中,当循环到达循环结束时他们正在切换样本,然后他们开始播放下一个加载的循环.我想立即启动新循环并在它们之间交叉淡入淡出,但我还没有找到一个如何在中间开始播放新音频文件的示例,而不仅仅是从开始.

我查看了W3C Web Audio API,您发送的noteOn参数只是在音频开始播放时与上下文currentTime属性相关的时间编码.它始终从样本开始播放.

是否有更多的文档或我忽略了如何开始播放音频文件2秒的内容?

javascript google-chrome html5-audio web-audio-api

8
推荐指数
1
解决办法
1282
查看次数

使用Web Audio API进行离线/非实时渲染

问题

我正在开发一个Web应用程序,用户可以对音频样本进行排序,并可选择将效果应用于他们使用Web Audio API创建的音乐模式.模式存储为JSON数据,我想对每个模式服务器端的渲染音频进行一些分析.据我所知,这给我留下了两个选择:

  1. 在服务器端运行我自己的渲染代码,尝试尽可能忠实于浏览器内渲染.也许我甚至可以从Chromium项目中取出Web Audio代码并对其进行修改,但这似乎可能需要做很多工作.

  2. 渲染客户端,希望比实时更快,然后将渲染的音频发送到服务器.这是理想的(和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控制台以查看发生的情况):

  • Mac - 它工作!!
  • Windows - FAIL - SYNTAX_ERR:DOM异常12
  • Linux - 失败 - SYNTAX_ERR:DOM异常12

webkitAudioContext我上面描述的构造函数导致Windows和Linux上的异常.

我的问题

离线渲染对于我正在尝试做的事情来说是完美的,但我无法在任何地方找到文档,并且支持不太理想.有没有人有关于此的更多信息?我是否应该尽快在Windows和/或Linux中期待对此的支持,或者我应该期待支持在Mac上很快消失

javascript google-chrome web-audio-api

8
推荐指数
1
解决办法
1581
查看次数

如何在THREE.js中获得相机的定位

我正在使用THREE.JS和Web Audio API创建一个3D游戏.我遇到的一个问题是我想使用网络音频监听器方向,并将监听器定义为摄像头,其位置和方向不断更新

我的问题是,无论如何要轻松获得三个相机的矢量方向?

我试图通过使用旧的相机位置来计算它,并使用速度矢量来计算它面向哪个方向,但是当相机静止时这不起作用...

通过使用camera.rotation.x,camera.rotation.y,camera.rotation.z来创建单位向量是否可行?

还是有更简单的方法?

非常感谢你的时间!

javascript html5 three.js web-audio-api

8
推荐指数
1
解决办法
1万
查看次数

Web Audio启动和停止振荡器然后再次启动它

我想开始并停止声音.这很有效.但是我无法重新开始播放声音.

我真的要再制作一个振荡器吗?这看起来非常不直观.肯定有更好的办法.

这就是我所有的工作:

oscillator1.noteOn(0);
oscillator1.noteOff(0);
Run Code Online (Sandbox Code Playgroud)

再次致电noteOn并没有做任何事情.为什么?超越我.

我也尝试设置音量,或者在Web Audio人的上下文中,"增益"等于零.但由于某种原因,增益为零会产生声音.什么样的增益值都不会发出任何声音?

男人,我简直不敢相信这是多么困难:/

javascript audio web-audio-api

8
推荐指数
2
解决办法
5061
查看次数

PCM Web Audio Api Javascript - 我听到了扭曲的声音

我通过线路接收交错的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)

javascript pcm typed-arrays web-audio-api

8
推荐指数
1
解决办法
2811
查看次数

HTML5和Web音频API:从浏览器到服务器的流式传输麦克风数据.理想的传输和数据压缩

我希望从浏览器中获取音频输入并将其传输到多个侦听器.预期用途是音乐,所以质量必须mp3标准或左右.

我尝试了两种方法,都产生了不成功的结果:

的WebRTC

  • 直接在浏览器之间流式传输音频工作正常,但音频质量似乎是不可定制的,尽管我已经看到了.(我已经看到它正在使用Opus音频编解码器,但似乎没有暴露任何控件).
  • 有没有人对如何提高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数据,以便更容易流到服务器?或者也许有一个更简单的方法来解决这个问题?

html5 websocket webrtc getusermedia web-audio-api

8
推荐指数
1
解决办法
7970
查看次数

简单的振荡器,但IOS上的网络音频API没有声音

这是一个非常简单的例子,我试图在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)

知道什么是错的吗?

编辑

总结答案:

  1. 响应用户交互启动音频
  2. 检查静音开关是否关闭

javascript web-audio-api

8
推荐指数
1
解决办法
2552
查看次数

将两个音频缓冲区叠加到一个缓冲区源中

试图将两个缓冲区合并为一个缓冲区; 我已经能够从音频文件创建两个缓冲区并加载和播放它们.现在我需要将两个缓冲区合并到一个缓冲区中.他们怎么能合并?

  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)

现在这些来源分别加载并同时播放; 但是如何将这两个源合并到一个缓冲源中呢?我不想附加它们,我想覆盖/合并它们.

解释和/或片段会很棒.

javascript audio html5 html5-audio web-audio-api

8
推荐指数
1
解决办法
2161
查看次数

使用WebAudio API计算Live Mic Audio频率的简单代码

我有网站,我需要显示Live Mic Audio的频率.我有一个这个代码,但它很难理解(它使用傅里叶变换和所有).在一些研究中,我知道getByteFrequencyData()哪个返回音频的频率.有没有人之前使用过Live Mic Audio,最好是在Web Audio API中?

javascript audio frequency-analysis web-audio-api

8
推荐指数
2
解决办法
9841
查看次数

未捕获(在承诺中)DOMException:无法解码音频数据

我在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

8
推荐指数
1
解决办法
5312
查看次数