soundManager2:无法从Url数组预加载我的所有声音
soundManager2: Cannot Preload All Of My Sounds From Arrays Of Urls
我本质上试图构建的是一个能够自我读取并在使用鼠标时提供听觉反馈的网站。图标的使用方式与大多数用户使用视觉图标的方式类似。预先录制的口语曲目用于已知元素,例如我的唠叨栏菜单。我在大多数浏览器中都使用电子尖峰来处理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回退的旧解决方案。
希望能有所帮助。
- 我的加载更多功能适用于按钮单击,但它不适用于滚动
- jQuery 限制我正在加载/追加的字符数
- 优化 CSS 交付.但我正在加载 JS 的样式
- $(窗口).on('scroll',函数 () 当滚动到 50% 时,我想加载很少的数据
- jQuery Mobile添加了我可以加载的文本't拆卸
- 当我重新加载页面时,我放在文本框中的文本保持不变,我能让这种情况不发生吗
- 我如何加载javascript模板与他们的id
- require.js:我如何加载一个模块,它在不同的名称下定义了一个名称
- 为什么我的加载处理程序不起作用
- 我如何在网站上加载特定的字体与较少的加载时间
- 当我重新加载页面时,我之前的评论消失了——这与本地存储有关
- 我可以订阅openwindow的加载事件吗?
- Jstree:当我重新加载树时,我不能将所有的复选框重置为默认取消选中
- 我可以加载一个新的页面时,有人点击关闭按钮在浏览器上
- 为什么以及如何在console.log中引用变量来修复我遇到的加载错误?
- 我的加载更多的按钮是不显示,尽管一切都是正确的,根据我
- 为什么我的加载更多的按钮后,ajax加载需要另一个点击它之前隐藏,即使没有什么要加载
- 如何优化我的加载JQuery函数
- 为什么我的加载没有'不起作用
- 当加载html与ajax在jQuery,我怎么能确保我的加载gif保持可见的整个时间,直到html已添加