按下键时播放声音

时间:2012-09-25 07:43:56

标签: javascript html audio

是否有人知道是否有任何预定义的方法可以为从键盘输入HTML格式的每个字母播放声音?

例如:如果我输入Y,则在文本字段中,网站显示Y等等。

或者,最好的方法是什么?

3 个答案:

答案 0 :(得分:20)

播放声音很容易,并且很容易为按键添加处理程序,但是没有预定义的方法来链接这两个操作,因此您必须键入自己的代码。

1)按键操作

document.onkeydown = function() {
    ...

2)播放声音

添加音频元素:

<audio id=alarm>
    <source src=sound/zbluejay.wav>
</audio>

执行
document.getElementById('alarm').play();

例如,您可以构建一个将键码链接到声音元素ID的地图:

var sounds = {
   88 : 'alarm', // key 'x'
   ...

};
document.onkeydown = function(e) {
    var soundId = sounds[e.keyCode];
    if (soundId) document.getElementById(soundId).play();
    else console.log("key not mapped : code is", e.keyCode);
}

Yoy可能会找到密钥代码here

答案 1 :(得分:2)

您必须拥有所有字母的声音文件,并使用JavaScript在按钮按下事件中播放它们。

答案 2 :(得分:1)

我刚刚编写了一个快速脚本,将您的工作简化为仅适合您的HTML。

&#13;
&#13;
(function(){
	var keyElements	= document.getElementsByTagName('keysound'),
		i			= keyElements.length,
		keys		= {};
	while (i--){
		var cur		= (keyElements[i].getAttribute('keys')||"").toString().split(''),
			v		= cur.length,
			audio	= keyElements[i].getAttribute('src'),
			caseinsensitive	= keyElements[i].getAttribute('anycase')!==null?true:false,
			regexp	= keyElements[i].getAttribute('regexp')!==null?true:false;
		if (audio){
			while (v--){
        cur[v] = caseinsensitive ? cur[v] : cur[v].toLowerCase();
        
				var src=!regexp?audio:
				audio.replace('${key}', cur[v])
				.replace('${code}', cur[v].charCodeAt(0));
				var ele = document.createElement('audio');
				ele.src = src;
				document.body.appendChild(ele);
				(keys[cur[v]] = keys[cur[v]] || []).push(
					ele
				);
				if (caseinsensitive) {
            
					(keys[cur[v].toUpperCase()] = keys[cur[v].toUpperCase()] || []).push(
						ele
					);
				}
			}
		}
	}
  console.log(keys);
	window.addEventListener('keydown',function(evt){
		var clist	= keys[evt.key] || [],
			clen	= clist.length;
		while (clen--){
			try { clist[clen].play() } catch(e) {}
		}
	});
})();
&#13;
<!-- Demo code example -->
<keysound keys="0123456789abcdefghijklmnopqrstuvwxyz" regexp anycase src="https://the-peppester.github.io/styff/keys/${key}.mp3" />
<keysound keys="QWERTY" src="http://soundbible.com/mp3/Fart-Common-Everyday-Fart_Mike-Koenig.mp3" />
<keysound anycase keys="bnm,./;'[]-=+_()*&^%$#@!`~" src="http://soundbible.com/mp3/Iguana_Farts_In_A_Bathtub-Iguana_Farts-1423164123.mp3" />
<keysound anycase keys="asdfgh" src="http://soundbible.com/mp3/Uuuuuu-Paula-1357936016.mp3" />
&#13;
&#13;
&#13;

文档

上面的脚本为keysound元素提供了特殊含义,允许您在用户按下键时播放声音。 Theese是特殊属性。

  • anycase
    • 使密钥不区分大小写
  • keys=...
    • 将播放此声音的键
  • regexp
    • 使得每个键的URL可以以类似regexp的方式不同,如下所示:
    • URL中的
    • ${key}将替换为每个选定键的纯文本表示
    • URL中的
    • ${code}将替换为每个选定密钥的基本10 ASCII密钥代码表示
  • src=...
    • 确定音频文件的URL。受regexp属性的影响

有关这些示例,请参阅演示。