soundManager2:无法从Url数组预加载我的所有声音

soundManager2: Cannot Preload All Of My Sounds From Arrays Of Urls

本文关键字:我的 加载 声音 数组 Url soundManager2      更新时间:2023-09-26

我本质上试图构建的是一个能够自我读取并在使用鼠标时提供听觉反馈的网站。图标的使用方式与大多数用户使用视觉图标的方式类似。预先录制的口语曲目用于已知元素,例如我的唠叨栏菜单。我在大多数浏览器中都使用电子尖峰来处理tts,但我计划在IE中使用tts web服务,因为电子尖峰在IE中不起作用。传统上,盲人用户会通过按键来导航网站;但是,我是一名正在接受培训的网络开发人员,我正在通过使用声音来帮助校对布局来突破极限[即]我的div是否正确浮动?图像的div是否正确?我可以通过四处走动和倾听来检查这一点。这是一种颠覆性的技术,它试图让你的眼睛比使用更传统的阅读解决方案获得更多的信任。

我已经做了好几个星期了,仍然无法预加载我所有的声音。我使用了一个递归函数,理论上,在加载第一个声音对象之前,它不会创建下一个声音对象。我的18个耳机正在加载并正确播放所需的事件,但我的12首口语曲目中只有三首似乎正在加载——或者,如果它们正在加载,它们就没有播放。

这是我的两个相关模块的代码。你们中有人想出一个可靠的方法来预加载多个声音吗?

var Earcons = (function() {
   // Earcons are like icons, but use symbolic sounds instead of pictures
 var trackUrls = [
 "audio/newpage.mp3", "audio/fgrow.mp3", "audio/fshrink.mp3",
 "audio/slideright.mp3", "audio/slideleft.mp3", "audio/sdiv.mp3", "audio/tell.mp3",
 "audio/office_lobby.mp3", "audio/footstep.mp3", "audio/apple.mp3",
 "audio/typewriter.mp3",
 "audio/walking.mp3", "audio/macspeak.mp3", "audio/picklock1.mp3",
 "audio/gossip.mp3", "audio/winenter.mp3", "audio/winleave.mp3", "audio/beep.mp3"];
 var trackTitles = [
 "soundOnLoad", "soundOnGrow", "soundOnShrink", "soundOnSlideRight",
 "soundOnSlideLeft", "soundOnDiv", "soundOnParagraph", "work",
 "soundOnList", "apple", "stype", "walk", "macbook",
 "soundOnLink", "soundOnInput", "winenter", "winleave", "soundOnImage"];
 var trackPtr = 0;
 var getTrackNumber = function (trackName) {
   for (i = 0; i < trackTitles.length; i++) {
     if (trackName == trackTitles[i]) return i;
   }
   return -1;
 };
 var preload = function() {
   if (trackPtr >= trackUrls.length)
   { trackPtr = 0; return; }
   var trackId = "st" + trackPtr + "";
   var trackUrl = trackUrls[trackPtr];
   trackPtr++;
   var soundTrack = soundManager.createSound ({stream: false,
   id: trackId,
   url: trackUrl,
   autoLoad: false, autoPlay: false});
   soundTrack.load ({onload: function() { preload(); } });
 };
 var unload = function() {
   for (i = 0; i < trackUrls.length; i++) {
     var soundTrack = soundManager.getSoundById ("st" + i);
     soundTrack.unload();
     soundTrack.destruct();
   }
 };
 interface = {
   trackUrls: trackUrls,
   trackTitles: trackTitles,
   getTrackNumber: getTrackNumber,
   preload: preload,
   unload: unload
 };

  return interface;
} )();
 var Narrations = (function() {
  var trackUrls = [
  "audio/about.mp3", "audio/webtech.mp3", "audio/screenreader.mp3",
 "audio/services.mp3", "audio/stories.mp3", "audio/settings.mp3",
  "audio/feedback.mp3", "audio/display.mp3", "audio/soundset.mp3",
  "audio/voiceset.mp3", "audio/divmain.mp3", "audio/divcenter.mp3",
 "audio/divnav.mp3"];
 var trackTitles = [
 "About This Web App", "Web Development Technologies", "What's A Screen Reader",
 "Services I Can Offer", "Stories, Poetry, Anecdotes", "Settings",
 "Send Me Your Comments", "Display Settings", "Sound Settings",
 "Voice Quality Settings", "div mainContent", "div center", "div navBar"];
 var trackPtr = 0;
 var getTrackNumber = function (trackName) {
   for (i = 0; i < trackTitles.length; i++) {
     if (trackName == trackTitles[i]) return i;
   }
   return -1;
 };
 var preload = function() {
   if (trackPtr >= trackUrls.length)
   { trackPtr = 0; return; }
   var trackId = "vt" + trackPtr + "";
   var trackUrl = trackUrls[trackPtr];
   trackPtr++;
   var voiceTrack = soundManager.createSound ({stream: false,
   id: trackId,
   url: trackUrl,
   autoLoad: false, autoPlay: false});
   voiceTrack.load ({onload: function() { preload(); } });
 };
 var unload = function() {
   for (i = 0; i < trackUrls.length; i++) {
     var voiceTrack = soundManager.getSoundById ("vt" + i);
     voiceTrack.unload();
     voiceTrack.destruct();
   }
 };

 interface = {
   trackUrls: trackUrls,
   trackTitles: trackTitles,
   getTrackNumber: getTrackNumber,
   preload: preload,
   unload: unload
 };
 return interface;
})();

播放耳机的功能:var playSound=函数(trackName){var trackID="st"+Earcons.getTrackNumber(trackName)+";var soundTrack=soundManager.getSoundById(trackID);if(!soundTrack)return;如果(无声)返回;如果(soundManager.playState>0)soundManager.stopAll();soundTrack.play();};

以及用于播放所述语音记录:功能播放语音(录音){var tn=Narrations.getTrackNumber(记录);如果(tn==-1)返回false;var voiceId="vt"+tn+";var voiceTrack=soundManager.getSoundById(voiceId);if(!voiceTrack)返回false;如果(soundManager.playState>0)soundManager.stopAll();soundManager.onrady(function(){voiceTrack.play();});返回true;}//结束播放语音

如果我把播放函数方法做得更好,比如Earcons.playSound(),Narrations.playSpeech()?您可以在以下位置体验我的网站的工作部分:www.innovascripter.com提前感谢您的任何见解:-)

IE 9对一次加载的音频标签数量有硬件和资源限制。我在SoundJS上工作,我们在文档中包含了关于这一点和其他限制的注释。

SoundJS有两个解决方案,一个是最近实现的音频精灵,另一个是强制flash回退的旧解决方案。

希望能有所帮助。