具有鼠标悬停功能的多声道音频HTML5

时间:2013-06-13 19:58:38

标签: html5 audio

我正在使用飞行中故事的精彩信息在鼠标悬停事件中产生声音,这是数字写作项目的一部分。我目前的草案一直停止声音,或者在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;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

首先,300个频道对于网络浏览器来说非常极端。你可以轻松崩溃。 Chrome设置了很多虚拟内存分页(大约是我的第二大页面的4倍),并且很快就崩溃了。

其次,为什么要使用wavs?我会将它们转换为压缩格式,并让浏览器的播放器动态解压缩,以便节省空间。

最后,我没有使用<audio>元素(仅用于简单的媒体播放),而是考虑使用Web Audio API - 当然,这在当前的Chrome和Safari版本中也是如此。它的性能模型比<audio>标签更高,这将是您在这样的实验中寻找的内容。只要您按照说明操作,它就不会很难使用。这是教程的链接:http://creativejs.com/resources/web-audio-api-getting-started/