在另一个完成后,我们怎样才能在html5播放中制作一些音频?
我尝试过使用jquery delay()函数,但它根本不工作,是否可以pause()在html5音频中使用定时器?例如,pause('500',function(){});?
我使用的是Chrome,这是我的代码:
<audio id="letter_audio" src="audio/bomb.mp3" type="audio/mp3" preload="auto"></audio>
$('.sound').live('click', function () {
var sound = $("#letter_audio")[0];
sound.pause();
sound.currentTime = 0;
sound.play();
return false;
});
Run Code Online (Sandbox Code Playgroud)
我第一次点击播放时声音怎么播放.然后当我再次点击时,它会暂停,就像代码一样.但它只是暂停?我希望它能够播放,然后当我再次点击它时,返回0并再次播放代码中的代码?
无论我在哪里,这两种方法的文档都非常通用.我想知道我正在查看我从每个方法得到的返回数组到底是什么.
对于getByteTimeDomainData,每次传递覆盖的时间段是多少?我相信大多数的oscopes每次传球覆盖32毫秒.这也包括在内吗?对于实际的元素值本身,范围似乎是0 - 255.这相当于-1 - +1伏?
对于getByteFrequencyData,所覆盖的频率基于采样率,因此每个索引都是实际频率,但实际元素值本身又如何呢?是否有一个dB范围等于返回数组中返回的值?
我正在开发iOS节拍器网络应用程序.由于移动safari一次只能播放一个声音,我正在尝试创建一个"音频精灵" - 我可以使用单个音轨的不同片段来生成不同的声音.我有1秒的剪辑,上面有2个半秒的声音.
<audio id="sample" src="sounds.mp3"></audio>
<a href="javascript:play1();">Play1</a>
<a href="javascript:play2();">Play2</a>
<a href="javascript:pauseAudio();">Pause</a>
<script>
var audio = document.getElementById('click');
function play1(){
audio.currentTime = 0;
audio.play();
// This is the problem area
audio.addEventListener('timeupdate', function (){
if (currentTime >= 0.5) {
audio.pause();
}
}, false);
}
function play2(){
audio.currentTime = 0.5;
audio.play();
}
function pause(){
audio.pause();
}
</script>
Run Code Online (Sandbox Code Playgroud)
在JSFiddle上看到它.
正如您所看到的,我试图使用'timeupdate'事件(jPlayer示例)但无济于事.
我见过Remy Sharp关于音频精灵的帖子,但是(A)我无法让它为我工作,而且(B)我宁愿远离库依赖.
有任何想法吗?在此先感谢您的帮助!
更新
我现在使用它setInterval:
function play1(){
audio.currentTime = 0;
audio.play();
int = setInterval(function() …Run Code Online (Sandbox Code Playgroud) 我在后台播放这个音频标签,我可以在几秒钟内将进度存储到cookie中.但是,我无法从该cookie启动音频.(继续在其他页面上)
$("p#sound audio").currentTime = $.cookie("audioTime");
<audio autoplay="autoplay" loop="loop" ontimeupdate="document.getElementById('tracktime').innerHTML = Math.floor(this.currentTime); $.cookie('audioTime', Math.floor(this.currentTime));">
<source src="audio/song.ogg" type="audio/ogg" />
<source src="audio/song.mp3" type="audio/mp3" />
Your browser does not support the audio tag.
</audio>
<span id="tracktime">0</span>
Run Code Online (Sandbox Code Playgroud)
这是否与从头开始重新加载的歌曲有关?
谢谢!
编辑:
$("p#sound audio").get[0].currentTime
Run Code Online (Sandbox Code Playgroud)
使用.get [0],它也不起作用.
有人可以帮我清理一下吗?非常感激!
是否可以从<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个频带滤波器(+相关增益节点),因为所有节点只有一个输入或输出(包括目的地).
我想创建按钮,在点击时播放下一首/上一首歌,但他们应该在长按时寻找音乐.
我确实设法改变歌曲,但我找不到搜索方法.还有如何从头开始玩?
有没有办法确定自歌曲开始以来已经过了多少?我发现缓冲区有持续时间,但没有实际播放时间.
在init:
context = new (window.AudioContext || window.webkitAudioContext)()
Run Code Online (Sandbox Code Playgroud)
要播放歌曲:
var buffer = song.buffer
var source = context.createBufferSource()
source.buffer = song.buffer
source.connect(analysers.main)
source.start(0, offset || 0)
Run Code Online (Sandbox Code Playgroud) 我有两个这样的标签:
<audio id="1" src="lub0.mp4" />
<audio id="2" src="lub1.mp4" />
Run Code Online (Sandbox Code Playgroud)
我想逐个播放它们,即.play()第一个,当它启动第一个事件时,我将.play()第二个.不幸的是,这给了我一个流行音乐.没有点击,有没有正确的crossbrowser方式来做到这一点?
文件本身很好,如果我在ffmpeg中将它们粘在一起,声音是完美的.
感谢名单.
I'm trying to play audio files (I've tried many). All of them are mp3s. I've tested the following on both MAMP localhost and also by just running it in the browser.
I use the following javascript:
var testSound = new Audio();
testSound.src = "a.mp3"
setTimeout(testSound.play.bind(testSound),100)
Run Code Online (Sandbox Code Playgroud)
This returns the error:
Uncaught (in promise)
Run Code Online (Sandbox Code Playgroud)
Trying to catch it:
var testSound = new Audio();
testSound.src = "a.mp3"
setTimeout(playSound,100)
function playSound () {
testSound.play().then(response => {
}).catch(e => {
console.log(e);
})
}
Run Code Online (Sandbox Code Playgroud)
returns nothing …
html5-audio ×10
html5 ×7
javascript ×7
audio ×3
jquery ×2
asynchronous ×1
equalizer ×1
ffmpeg ×1
media-source ×1