我正在使用飞行中故事的精彩信息在鼠标悬停事件中产生声音,这是数字写作项目的一部分。我目前的草案一直停止声音,或者在Chrome中显示“Aw,Snap”页面。该页面位于http://www.nathan-walker.co.uk/sounding
我还将频道提升到300(这可能是我需要的)。另一个问题是我猜因为我使用的是WAV文件而且它们相当大!如果有人可以提出替代方案或知道某种解决方法,那就太棒了!
<audio id="multiaudio1" src="audio/flute_c_long_01.wav" preload="auto"></audio>
<audio id="multiaudio2" src="audio/piano_chord.wav" preload="auto"></audio>
<audio id="multiaudio3" src="audio/synth_vox.wav" preload="auto"></audio>
<audio id="multiaudio4" src="audio/shimmer.wav" preload="auto"></audio>
<audio id="multiaudio5" src="audio/sweep.wav" preload="auto"></audio>
<a href="javascript:play_multi_sound('multiaudio1');">Flute</a><br />
<a href="javascript:play_multi_sound('multiaudio2');">Piano Chord</a><br />
<a href="javascript:play_multi_sound('multiaudio3');">Synth Vox</a><br />
<a href="javascript:play_multi_sound('multiaudio4');">Shimmer</a><br />
<a href="javascript:play_multi_sound('multiaudio5');">Sweep</a><br />
<script type="text/javascript">
var channel_max = 10; // number of channels
audiochannels = new Array();
for (a=0;a<channel_max;a++) { // prepare the channels
audiochannels[a] = new Array();
audiochannels[a]['channel'] = new Audio(); // create a new audio object
audiochannels[a]['finished'] = -1; // expected end time for this channel
}
function play_multi_sound(s) {
for (a=0;a<audiochannels.length;a++) {
thistime = new Date();
if (audiochannels[a]['finished'] < thistime.getTime()) { // is this channel finished?
audiochannels[a]['finished'] = thistime.getTime() + document.getElementById(s).duration*1000;
audiochannels[a]['channel'].src = document.getElementById(s).src;
audiochannels[a]['channel'].load();
audiochannels[a]['channel'].play();
break;
}
}
}
答案 0 :(得分:1)
首先,300个频道对于网络浏览器来说非常极端。你可以轻松崩溃。 Chrome设置了很多虚拟内存分页(大约是我的第二大页面的4倍),并且很快就崩溃了。
其次,为什么要使用wavs?我会将它们转换为压缩格式,并让浏览器的播放器动态解压缩,以便节省空间。
最后,我没有使用<audio>
元素(仅用于简单的媒体播放),而是考虑使用Web Audio API - 当然,这在当前的Chrome和Safari版本中也是如此。它的性能模型比<audio>
标签更高,这将是您在这样的实验中寻找的内容。只要您按照说明操作,它就不会很难使用。这是教程的链接:http://creativejs.com/resources/web-audio-api-getting-started/