- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 HTML 5 <audio>
标签。我觉得很酷,但刚刚遇到了一个很奇怪的情况。简而言之,canplaythrough
未按预期在移动设备上触发。
在本例中,我的网页上有几个按钮:
<button id="sndbtn01" onclick="createAudioById('01')">Audio 01</button>
<button id="sndbtn02" onclick="createAudioById('02')">Audio 02</button>
<button id="sndbtn03" onclick="createAudioById('03')">Audio 03</button>
<button id="sndbtn04" onclick="createAudioById('04')">Audio 04</button>
我期望的是在单击“Audio 01”时播放 01.mp3,以及单击“Audio 02”、“Audio 03”、“Audio 04”按钮时的类似操作。我希望<audio>
单击按钮时会创建标签,这样我就可以节省流量而无需预加载所有内容。
所以,我有 JavaScript 代码:
var audioObj = {};
function createAudioById(id){
var p = audioObj[id];
// alert(1)
if (p != undefined) {
alert(2);
p.play();
return;
} else {
alert(3);
p = new Audio();
p.addEventListener('canplaythrough', function(e){
e.currentTarget.removeEventListener('canplaythrough', arguments.callee);
alert(4);
p.play();
});
p.src = '../snds/'+id+'.mp3';
audioObj[id] = p;
}
}
但是移动设备上的行为很奇怪:
在移动设备 (iPhone) 上:
button 01
触发(3)
,然后什么也没发生 - canplaythrough
事件从未触发,音频也从未播放 - 不符合预期:(4)
应该触发并播放音频;(2)
将触发并播放音频。但奇怪的是(4)
音频开始播放几秒钟后触发。(2)
被触发但没有任何反应,音频继续播放 - 正如预期的那样;(2)
将触发,播放音频并 (4)
永远不会弹出 - 正如预期的那样。最佳答案
在桌面上:
我不明白为什么这是奇怪的行为。您首先检查名称为“01”的音频是否存在。它没有,所以您创建它,当它完成加载并可以播放时,事件监听器被触发并开始播放。
然后,您在播放时再次按下该按钮。您检查名称为“01”的音频是否存在 - 确实存在,因为您之前创建了它并且它仍在播放。因此,p 被定义并且 (2) 被触发。音频一直在播放,因为您告诉它要播放,而它已经在这样做了。
然后,当音频停止并按下按钮时,您将检查名称为“01”的音频是否存在。它仍然存在——它停止了播放,但它仍然存在,只是因为歌曲结束而暂停了。因此 (2) 触发,您告诉它播放,但事件监听器仍在监听,您从未销毁它,因此当它重新下载歌曲时, canplaythrough 会第二次触发。这都是正常行为。
在移动设备上:您具有完全相同的设置,但这次由于某种原因 canplaythrough 事件未触发。我不知道为什么会这样,但那是另一个问题了。除此之外,这种行为很容易解释。您创建新的音频,由于某种原因,事件没有被触发,因此当您再次单击该按钮时,音频仍然存在于您之前创建它时并开始播放。然后,当歌曲完成时,音频仍然存在,并且仍然有事件监听器,但再一次,由于某种原因,事件监听器根本不起作用,但音频仍然会播放,因为它仍然存在。
关于javascript - HTML <audio> 标签的 canplaythrough 不会在移动设备上触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35713648/
我有一个小型WordPress网站。我做了很多音频工作,并且试图在WordPress的博客条目中发布HTML5音频剪辑。由于某种原因,它不起作用。它可能与我在WordPress网站上使用的样式有关,但
我在让 html5 标签与 Web Audio API .createMediaElementSource() 方法配合使用时遇到问题。请参阅下面的 jsFiddle/代码。任何想法这里出了什么问题将
我尝试安装ffmpeg $ brew install ffmpeg 并运行 ffmpeg $ ffmpeg -i audio.m4a -ar 8000 -ab 12.2k audio.amr 我收到以
我已使用Web Audio API中的getByteFrequencyData方法使用了来自Analyzer节点的FFT数据来创建频谱可视化器,如下所示: 在这种情况下,我有256个数据箱。这个数字到
Google VR刚刚为wwise制作了一个VR插件: https://developers.google.com/vr/audio/wwise-getting-started https://git
如何将新记录追加到现有记录中的选定位置或特定位置? 例如,有一个5秒的录制,我想再次录制,但是将此录制追加到先前录制的特定位置,说出来:在3秒钟的录制长度之后追加此录制。 最佳答案 您可以使用getC
我们基于 Raspberry Pi 和 omxplayer 构建简单的网络控制视频播放器。我们遇到的问题是任何使用 ffmpeg 转码的文件都有音频不同步。在 iPad 上制作并直接上传到 Pi 的视
我正在尝试了解Web Audio API的引入对基于Web的游戏的开发意味着什么。 Flash游戏当然可以执行一些相当高级的音频处理,对于简单的游戏,音频元素也许就足够了。但是Web Audio AP
我已经在如何用简单的音频引擎循环播放声音效果方面进行了广泛的搜索,但是在cocos2d论坛上除了hello with looping sfx之外,它并没有取得太大进展,因为它存在多个问题。如何在Sim
我的任务是打开一个扩展名为 mka 的现有音频文件(Matroska 容器)并提取原始音频数据。 This示例仅显示了从 mp2 文件中提取原始数据的示例。我不知道如何使用 mka 容器执行此操作。我
我是Lync 2013 SDK的新手(现在已经使用了几周),并且能够弄清除此以外的大部分东西…… 当我加入 session 时(使用ConversationManager.JoinConference
我好奇。如何实现有史以来最简单的音频引擎?我有一些类似使用默认音频设备的音频数据流的想法。玩了很多 RtAudio,我认为如果可以放弃一些功能,这是可能的。有人知道从哪里开始吗? 最佳答案 我会这样做
我一直在玩网络音频API。 我正在使用getByteFrequencyData来显示频带的分贝数据,但是我想更改显示频带的整个范围,因为现在重要的音频都被压缩为一对频带。 有关如何执行此操作的任何想法
我想在音频 session 以NAudio开始和结束时接收回调。以下代码正在运行: private void SetupMediaSessionCallbacks() {
我可以用trackPosition,offset以某种方式记录并输出到WAV。当在浏览器中播放时,它工作正常,我只想输出到WAV文件。 for (var i = 0; i 0) {
在哪种情况下,我们可以不将Google Resonance Audio SDK与耳机配合使用,而应将其与真实的扬声器配合使用(例如,安装在360°的音圈设置中)? 还是所有算法都不适用于真实的扬声器输
AudioPannerNode是一个处理节点,用于在三维空间中定位/空间化传入的音频流。有没有一种方法可以将其用于常规LR平移,请记住它使用3D笛卡尔坐标系与侦听器结合使用,该侦听器的位置和方向与平移
我有一个带有两个源的音频对象,分别为M4A和OGG格式。 代码如下: 然后,我可以调用document.getElementById('audio1')。play()并开始播放。 它适用于所有
我正在尝试构建一个允许将时间/节奏(可能是音高)输入到 Web 音频振荡器节点的界面。实际上创建了一个“步进音序器”。 为 Web Audio API 振荡器节点触发预定 NoteOn 的最佳方式是什
是否可以使用 Core Audio 以亚毫秒级延迟播放声音? 我尝试过使用具有不同大小和缓冲区数量的 AudioQueues,也尝试过使用 AudioUnits,但我一直无法将延迟降低到 30 毫秒以
我是一名优秀的程序员,十分优秀!