我正在尝试使用decodeAudioData来解码并在javascript中播放更大的mp3文件的初始部分.我的第一个原始方法是从mp3的开头切掉一些字节并将它们提供给decodeAudioData.毫不奇怪,这失败了.
一些挖后似乎decodeAudioData仅能够与由记录"有效的MP3块"工作公平鼎恳Thinkum,在这里.
然而,没有关于有效mp3块的结构的澄清(前面提到的作者没有涉及到这一点).我知道存在的各种mp3分离器,但我想以编程方式处理它.(我正试图在服务器端使用nodejs实现一种"穷人的流媒体").
那么,拆分mp3帧头是否足够或者我需要做更多?(或许通过在末尾添加一些数据来"关闭"每个块?)'字节库'怎么样?这会引起问题吗?为了记录,我目前正在使用128kbps cbr mp3.这会以任何方式简化流程吗?
任何有关decodeAudioData期望作为虚拟数据的信息都将受到赞赏.
谢谢.
PS:我意识到这可能是对Fair Dinkum Thinkum的帖子的澄清请求,但我的低声誉让我不发表评论.所以我不知道如何做到这一点,但有一个新的问题.再次感谢.
我使用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中工作.如果我在本地使用本地音频文件运行相同的示例,一切正常.
不确定这是一个错误还是我做了一些非常错误的事情.任何帮助表示赞赏.
我可以使用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浏览器本身中,因为它是首先生成它的人?
我有一个使用的音频缓冲区webkitOfflineAudioContext.现在,我希望将其导出为WAV文件.我该怎么做?我尝试使用recorder.js但无法弄清楚如何使用它.这是我的代码:http://jsfiddle.net/GBQV8/.
无论我在哪里,这两种方法的文档都非常通用.我想知道我正在查看我从每个方法得到的返回数组到底是什么.
对于getByteTimeDomainData,每次传递覆盖的时间段是多少?我相信大多数的oscopes每次传球覆盖32毫秒.这也包括在内吗?对于实际的元素值本身,范围似乎是0 - 255.这相当于-1 - +1伏?
对于getByteFrequencyData,所覆盖的频率基于采样率,因此每个索引都是实际频率,但实际元素值本身又如何呢?是否有一个dB范围等于返回数组中返回的值?
我正在开发一个将大量使用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) 我有兴趣使用JavaScript WebAudioAPI来检测歌曲节拍,然后在画布中渲染它们.
我可以处理画布部分,但我不是一个很大的音频人,真的不明白如何在JavaScript中制作节拍探测器.
我已经尝试过这篇文章但是,对于我的生活,我不能连接每个函数之间的点来制作一个功能程序.
我知道我应该向你展示一些代码,但说实话,我没有任何代码,我所有的尝试都失败了,并且在前面提到的文章中有相关的代码.
无论如何,我真的很感激一些指导,甚至更好的演示如何实际检测歌曲节拍WebAudioAPI.
谢谢!
是否可以从<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?
我正试着用Web Audio API来重新创建类似
Winamp的10波段均衡器.

据我所知,我要创建10个双二阶滤波器,设置其type到2(一个带通滤波器),并设置其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个频带滤波器(+相关增益节点),因为所有节点只有一个输入或输出(包括目的地).
使用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) web-audio-api ×10
html5 ×4
html5-audio ×4
javascript ×4
audio ×3
equalizer ×1
firefox ×1
ios ×1
memory-leaks ×1
mp3 ×1
web ×1