我为我们公司创建了一个小的PHP / Ajax WebChat。每当收到新消息时,它应该使用第一个答案中的方法播放通知声音。
How to play a notification sound on websites?
现在的问题是,当从任何普通计算机访问它时,它工作正常,但从(非常受限制的)公司网络,它在控制台中给我“HTTP状态503服务不可用”。由于它正在处理任何其他Internet访问,这很奇怪。还有一点,我收到了来自https://notificationsounds.com/
的通知声音如果从公司网络输入,则播放一些声音而一些声音不播放。刷新后,工作的声音与刷新前的声音不同。这就像是随机播放声音。注意:Chatserver位于我家。
可能是什么问题,是否有任何类型的工作不必使用其他帖子中的方法?
这是我用来加载和播放通知声音的代码:
chat.playSound("the-calling");
playSound : function (filename) {
document.getElementById("sound").innerHTML=
'<audio autoplay="autoplay">
<source src="https://notificationsounds.com/soundfiles/a516a87cfcaef229b342c437fe2b95f7/file-sounds-1068-the-calling.wav" />
<source src="https://notificationsounds.com/soundfiles/a516a87cfcaef229b342c437fe2b95f7/file-sounds-1068-the-calling.ogg" type="audio/ogg" />
<embed hidden="true" autostart="true" loop="false" src="/sounds/' + filename +'.mp3" />
</audio>';
}
答案 0 :(得分:0)
网站http://notificationsounds.com实际上并不打算收听声音;它们在每个声音上提供“下载”链接,以便您可以自己主持。他们的网站实际上可能无法扩展以满足您放置它的需求,或者它们可能受到IP地址的限制。 当您每次想要播放声音时都会访问他们的网站,并且可能会乘以聊天应用程序中的并发用户数,这两种情况都会导致随机失败。
如果网站管理员注意到您公司的公共IP地址导致此类问题,他们可能会选择阻止您公司的IP地址,让您无法发出声音。几年前发生过类似的事情,因此,我终于有机会见到我组织的副总裁,并在他的办公室度过“优质时光”。
所以,我推荐两件事:
1)从他们的网站下载你想要的声音并将它们托管在你的网站上
2)缓存音频加载,这样你就不必重新加载它了。
我创建了一个缓存音频的演示(来自http://notificationsounds.com):
var notification_sounds = {
"breaking-glass" : "8f121ce07d74717e0b1f21d122e04521/file-4f_glass-beaking-2",
"the-calling" : "a516a87cfcaef229b342c437fe2b95f7/file-sounds-1068-the-calling",
"ringo" : "5737c6ec2e0716f3d8a7a5c4e0de0d9a/file-47_oringz-pack-nine-01"
};
function findOrCreateAudioPlayer(filename) {
var sound = notification_sounds[filename] || notification_sounds['breaking-glass'];
var player = $("#audio-" + filename);
if (player.length == 0) {
player = $("<audio />").attr("id", "audio-" + filename);
$("<source />").attr("src", "https://notificationsounds.com/soundfiles/" + sound + ".mp3").appendTo(player);
player.appendTo($("body"));
$("<p />").text(filename).appendTo($("body"));
}
return player;
}
function playSound(filename) {
findOrCreateAudioPlayer(filename);
player = $("#audio-" + filename)[0];
player.load();
player.play();
}
var sounds = ["nothing", "the-calling", "ringo", "breaking-glass"];
var sound = sounds[Math.floor(Math.random()*sounds.length)]
playSound(sound);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
您也可以尝试complete jsFiddle demo。
准备好后,您可以通过拨打playSound(soundName)
播放您选择的任何声音(从声音列表中)。该演示选择一个已注册的声音(和一个未注册的声音)并在您单击代码下方的“运行代码段”按钮时播放该声音。
请注意,这不依赖于任何特定的HTML内容,但会根据需要创建自己的<audio>
元素,并在其中缓存内容。在此代码中,您将看到一旦声音被缓存,在重新加载页面之前,它不会再从原始站点加载。
从原始示例中,您可以将playSound
回调更改为:
playSound : function (filename) {
playSound(filename);
}
更改名称可能是明智之举,只是为了没有混淆。