【问题标题】:How to sync printing of characters with sound?如何将字符打印与声音同步?
【发布时间】:2019-03-06 05:56:51
【问题描述】:

在打印网页上正在键入的内容时,我需要模仿旧的手动打字机所做的事情。我想开发 JavaScript 函数来传递一个字符串,它会延迟打印出每个字符,并且声音文件会与每个字母同步。

我是 JavaScript 新手。执行此操作的首选方法是什么?我应该为此查看 jQuery 吗?还是这很简单?

我在某些网络浏览器上看到了像这样触发声音文件的问题,是否有最适合这种事情的音频文件格式?

我找到了这个,但问题是,它不适用于所有网络浏览器: https://rawgit.com/mehaase/js-typewriter/master/example3-typewriter/index.html

【问题讨论】:

  • 试着想一想你想要做什么,分解问题,在互联网上搜索每个部分,尝试实现它,然后如果你有问题,来这里问他们! SO 不是提出如此广泛问题的最佳场所。

标签: javascript jquery


【解决方案1】:

你可以试试这样的:

// The delay between each keystroke
var delay = 300;
 
// The typewriter sound file url
var clickURL = "https://cdn.rawgit.com/halimb/res/6ffa798d/typewriter.wav";
 
// Get a reference to the container div
var container = document.getElementById("container");
var sampleString = "Hello world!";
 
//get a reference to the start button and typewrite onclick
var start = document.getElementById("btn");
start.onclick = function() { typewrite( sampleString ); };
 
function typewrite( str ) {
    var i = 0;
    container.innerHTML = "";
    type();
 
    function type() {
        var click = new Audio( clickURL );
        // This is triggered when the browser has enough of the file to play through
        click.oncanplaythrough = function() {
            click.play();
            // Add the character to the container div
            container.innerHTML += str[i];
            i++;
            if(i < str.length) {
                window.setTimeout(type, delay);
            }
        }
    }  
}
* {
	font-family: Courier;
	font-size: 32px;
}

.btn {
	display: inline-block;
	border: 1px solid black;
	border-radius: 5px;
	padding: 10px;
	cursor: pointer;
	margin: 10px;
}
<div class="btn" id="btn">Start</div>
<div id="container"></div>

更新:在 Safari 上。似乎音频必须由用户事件触发(例如:onclick..),所以我添加了一个按钮,并使打字机启动 onclick。

缺点是无法预加载音频文件,Safari 每次播放时都会向服务器发出请求并下载音频。我能想到的唯一(肮脏)方法是提供一个数据URI而不是audioURL。如果播放速度真的很重要,你可以尝试一下(这可能会有所帮助:https://www.ibm.com/developerworks/library/wa-ioshtml5/

【讨论】:

  • 不错!您知道为什么这适用于 Google Chrome/Mac,但不适用于 Safari/Mac?没有声音。
  • 我在其他地方读到了一个建议,在 Safari 中使用 ogg 而不是 wav 文件可能效果更好?你对此有什么想法?
  • 其实正好相反,对ogg的支持有限,wav文件对跨浏览器的支持更好(IE除外)。下表显示了不同浏览器支持的格式:en.wikipedia.org/wiki/…
  • 我不了解移动设备,至于 Web Audio API,它确实更丰富更强大,但是由于它处于较低级别,因此需要更多代码来设置,这取决于你选择最适合你的;)
猜你喜欢
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
相关资源
最近更新 更多