标签: web-audio-api

为decodeAudioData定义'有效的mp3块'(WebAudio API)

我正在尝试使用decodeAudioData来解码并在javascript中播放更大的mp3文件的初始部分.我的第一个原始方法是从mp3的开头切掉一些字节并将它们提供给decodeAudioData.毫不奇怪,这失败了.

一些挖后似乎decodeAudioData仅能够与由记录"有效的MP3块"工作公平鼎恳Thinkum,在这里.

然而,没有关于有效mp3块的结构的澄清(前面提到的作者没有涉及到这一点).我知道存在的各种mp3分离器,但我想以编程方式处理它.(我正试图在服务器端使用nodejs实现一种"穷人的流媒体").

那么,拆分mp3帧头是否足够或者我需要做更多?(或许通过在末尾添加一些数据来"关闭"每个块?)'字节库'怎么样?这会引起问题吗?为了记录,我目前正在使用128kbps cbr mp3.这会以任何方式简化流程吗?

任何有关decodeAudioData期望作为虚拟数据的信息都将受到赞赏.

谢谢.

PS:我意识到这可能是对Fair Dinkum Thinkum的帖子的澄清请求,但我的低声誉让我不发表评论.所以我不知道如何做到这一点,但有一个新的问题.再次感谢.

javascript mp3 web-audio-api

13
推荐指数
1
解决办法
6106
查看次数

Firefox WebAudio createMediaElementSource无法正常工作

我使用WebAudio API将new Audio()对象作为源.以下是我正在做的简化版本.然而,这并没有在Firefox 25.0.1中播放任何声音.

var context;
if(window.webkitAudioContext) {
    context = new webkitAudioContext();
} else {
    context = new AudioContext();
}
var audio = new Audio();

// This file does seem to have CORS Header
audio.src = "http://upload.wikimedia.org/wikipedia/en/4/45/ACDC_-_Back_In_Black-sample.ogg";

var source;
function onCanPlay() {
    console.log("can play called");
    source = context.createMediaElementSource(audio);
    source.connect(context.destination);
    audio.removeEventListener("canplay", onCanPlay);
    audio.play();
}

if(audio.readyState < 3) {
    audio.addEventListener("canplay", onCanPlay);
} else {
    onCanPlay();
}
Run Code Online (Sandbox Code Playgroud)

jsFiddle:http://jsfiddle.net/7bJUU/

我读了另一个问题,createMediaElementSource需要CORS.上面的例子中的文件确实有,Access-Control-Allow-Origin: *但它仍然无法在Firefox中工作.如果我在本地使用本地音频文件运行相同的示例,一切正常.

不确定这是一个错误还是我做了一些非常错误的事情.任何帮助表示赞赏.

firefox html5 html5-audio web-audio-api

13
推荐指数
1
解决办法
2001
查看次数

将HTML5 SpeechSynthesisUtterance生成的语音记录到文件中

我可以使用Chrome的Speech Synthesis API(版本33.0.1750.112 beta-m)以下列方式从文本生成语音

var transcript = document.getElementById("speechTxt").value; 
var msg = new SpeechSynthesisUtterance(transcript); 
speechSynthesis.speak(msg);
Run Code Online (Sandbox Code Playgroud)

现在我想将这个语音保存在一个文件中(可能使用WebAudio API).这有可能通过一些函数调用吗?

我已经查看了语音合成API中的方法,没有什么可以保存这些语音数据.使用WebAudio API我能够在麦克风中捕获这种语音,但会引入许多不必要的噪音.是否无法将此语音数据保存在Chrome浏览器本身中,因为它是首先生成它的人?

speech-synthesis web-audio-api

13
推荐指数
1
解决办法
1967
查看次数

HTML5网络音频 - 将音频缓冲区转换为wav文件

我有一个使用的音频缓冲区webkitOfflineAudioContext.现在,我希望将其导出为WAV文件.我该怎么做?我尝试使用recorder.js但无法弄清楚如何使用它.这是我的代码:http://jsfiddle.net/GBQV8/.

html5 web-audio-api

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

了解网络音频中的getByteTimeDomainData和getByteFrequencyData

无论我在哪里,这两种方法的文档都非常通用.我想知道我正在查看我从每个方法得到的返回数组到底是什么.

对于getByteTimeDomainData,每次传递覆盖的时间段是多少?我相信大多数的oscopes每次传球覆盖32毫秒.这也包括在内吗?对于实际的元素值本身,范围似乎是0 - 255.这相当于-1 - +1伏?

对于getByteFrequencyData,所覆盖的频率基于采样率,因此每个索引都是实际频率,但实际元素值本身又如何呢?是否有一个dB范围等于返回数组中返回的值?

html5 audio-streaming html5-audio web-audio-api

13
推荐指数
3
解决办法
3845
查看次数

移动平台上的Web Audio API内存泄漏

我正在开发一个将大量使用Audio的应用程序,我正处于决定是否在可支持它的设备上使用Web Audio API的研究阶段.我已经组装了一个非常简单的测试床,可以加载一个MP3精灵文件(大小约600kB),有一个播放和暂停按钮以及一个销毁按钮,理论上它应该允许GC回收Web Audio API实现使用的内存.但是,由于内存不足异常加载和销毁~5次iOS崩溃后.

我在XCode Instruments中描述了MobileSafari,事实上MobileSafari不断耗尽内存.此外,600kb MP3在解码时最终使用~80-90MB的内存.

我的问题是 - 当使用Web Audio API解码音频数据时,为什么内存使用量如此之大以及为什么内存永远不会被回收?根据我的理解,解码是浏览器的异步操作,所以可能发生在一个单独的线程上?浏览器单独的线程是否可能永远不会释放解码过程中使用的内存?

我的代码如下,非常感谢任何帮助/解释:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>Web Audio Playground</title>
</head>
<body>
<button id="load">
    Load
</button>
<button id="play">
    Play
</button>
<button id="pause">
    Pause
</button>
<button id="destroy">
    Destroy
</button>
<script type="application/javascript">
    (function () {
        window.AudioContext = window.AudioContext || window.webkitAudioContext;

        var loadButton = document.getElementById('load'),
                playButton = document.getElementById('play'),
                pauseButton = document.getElementById('pause'),
                destroyButton = document.getElementById('destroy'),
                audioContext = new window.AudioContext(),
                soundBuffer = null,
                soundSource = null;

        loadButton.addEventListener('click', function () {
            var …
Run Code Online (Sandbox Code Playgroud)

audio memory-leaks mobile-safari ios web-audio-api

13
推荐指数
2
解决办法
2069
查看次数

如何使用JS WebAudioAPI进行节拍检测?

我有兴趣使用JavaScript WebAudioAPI来检测歌曲节拍,然后在画布中渲染它们.

我可以处理画布部分,但我不是一个很大的音频人,真的不明白如何在JavaScript中制作节拍探测器.

我已经尝试过这篇文章但是,对于我的生活,我不能连接每个函数之间的点来制作一个功能程序.

我知道我应该向你展示一些代码,但说实话,我没有任何代码,我所有的尝试都失败了,并且在前面提到的文章中有相关的代码.

无论如何,我真的很感激一些指导,甚至更好的演示如何实际检测歌曲节拍WebAudioAPI.

谢谢!

javascript audio beat-detection web-audio-api

13
推荐指数
2
解决办法
8387
查看次数

通过createMediaElementSource从<audio />元素将audiodata加载到AudioBufferSourceNode中?

是否可以从<audio/>-element通过createMediaElementSource加载音频文件,然后将音频数据加载到AudioBufferSourceNode

使用audio-element作为源(MediaElementSource)似乎不是一个选项,因为我想使用像noteOn和的Buffer方法noteGrain.

不幸的是,不能通过XHR将音频文件直接加载到缓冲区 (请参阅通过客户端XHR打开Soundcloud Track的stream_url?)

尽管如此,从音频元素加载缓冲区内容似乎是可能的:

http://www.w3.org/2011/audio/wiki/Spec_Differences#Reading_Data_from_a_Media_Element

或者甚至可以直接使用<audio/>-element 的缓冲区作为sourceNode?

javascript html5 html5-audio web-audio-api

12
推荐指数
3
解决办法
3685
查看次数

使用Web Audio API创建10波段均衡器

我正试着用Web Audio API来重新创建类似
Winamp的10波段均衡器.

Winamp的10频段均衡器

据我所知,我要创建10个双二阶滤波器,设置其type2(一个带通滤波器),并设置其frequency[60, 170, 310, 600, 1000, 3000, 6000, 12000, 14000, 16000]分别.有一次,我已经做到了(这里的地方,我开始有点糊涂了),那么我会创建一个单独的增益节点对每个频率"带",并将其值绑定到一个滑块.

<input id="someFreqBand" type="range" min="-12" max="12" step="0.1" value="0" onchange="slide()"/>
Run Code Online (Sandbox Code Playgroud)

假设所有这些都是正确的,那么唯一剩下的步骤是将所有10个增益节点连接到音频上下文destination(我想这将采用所有10个频率"频带"并将它们混合/同步回来).这是创建Web Audio 10波段均衡器的正确方法吗?

我很困惑的主要问题是我如何将源"连接"到10个频带滤波器(+相关增益节点),因为所有节点只有一个输入或输出(包括目的地).

javascript equalizer html5-audio web-audio-api

12
推荐指数
2
解决办法
7096
查看次数

WebAudio中的WaveShaper节点 - 如何模拟失真?

使用WebAudio API并尝试扭曲!问题是,我不确定如何进入WaveShaper的"曲线"参数.

简而言之,'oscidis'是程序早期创建的WaveShaper节点.Oscidisv是一个静态设置为0的值,现在:

var wsCurve = new Float32Array();
if ((oscidisv >= -1) && (oscidisv < 1)) {

    var k = 2 * oscidisv / (1 - oscidisv);
    console.log
    for (var i = 0; i < 16; i+=1) {
        // LINEAR INTERPOLATION: x := (c - a) * (z - y) / (b - a) + y
        // a = 0, b = 2048, z = 1, y = -1, c = i
        var x = (i - 0) * (1 …
Run Code Online (Sandbox Code Playgroud)

audio web web-audio-api

12
推荐指数
2
解决办法
5336
查看次数