我有一个应用程序正在使用JPlayer Circle Player播放用于转录目的的短音频。这些音频中的每一个都源自.sox文件,该文件已被SoX转换为.wav。按下“播放”按钮时,播放音频但不显示绿色圆圈。剪辑播放后,再次按下播放会显示绿色圆圈前进。
我认为这是因为原始vox格式或wav格式不包含任何长度数据,因此玩家在尝试播放之前不会知道这一点。一旦知道了长度,就可以显示圆圈。
如何克服这个问题?在播放之前,圈子播放器能以某种方式预加载音频以确定其长度吗?在SoX转换中我可以做些什么吗?转换到WAV以外的东西会更好吗? JPlayer建议反对使用WAV,但没有说明原因,除此之外,它的播放效果还不错。
或者还有别的我做错了吗?
UPDATE 1:在读取原始的.vox文件和转换后的.wav文件后,看起来两个地方都存在持续时间数据,因此玩家无法提前知道这一点。所以转换似乎是罪魁祸首。
更新2: 我为loadedmetadata和play事件添加了一些JPlayer事件处理程序,这些事件清楚地显示了上述问题。
$("#jquery_jplayer").bind($.jPlayer.event.loadedmetadata , function(event) { // Add a listener log the duration on load
console.log("loadedmetadata: this audio has a duration of " + event.jPlayer.status.duration + " seconds.");
});
$("#jquery_jplayer").bind($.jPlayer.event.play , function(event) { // Add a listener log the duration on play
console.log("play: this audio has a duration of " + event.jPlayer.status.duration + " seconds.");
});
这在日志中产生了以下输出:
loadedmetadata: this audio has a duration of 0 seconds.
play: this audio has a duration of 0 seconds.
play: this audio has a duration of 10.72 seconds.
表示在第一次游戏之前不知道持续时间。
更新3:撤消更新1:虽然soxi能以某种方式从文件中提取持续时间数据,但这并不一定意味着HTML5浏览器能够这样做。那里可能有不同的算法。转换重新开始。我看不出它是怎么回事。
我认为这可能是因为Circle Player存在于模态对话框中,但是在加载调用模态对话框的页面时会被实例化,并且只有在显示模态对话框时才会加载媒体。我把它改成了一个更清洁的设计,每次显示模态对话框并且当时加载媒体(并在模态消失时销毁),实例化Circle Player,但问题仍然存在。
样本文件
Download sample file进行测试。它是一个10秒的剪辑,在最初的几秒内有一些微弱的随机噪音,然后在大约7或8秒的标记处,一个女性的声音说出名字和姓氏。
答案 0 :(得分:0)
<强>原因强>
为什么玩家不玩.WAV文件有多种原因。根据你的描述,玩家可以在第二次点击后播放.WAV文件,似乎你可能在玩家初始化之前过早加载你的.WAV文件。
备注强>
许多HTML5浏览器都支持WAV格式。我们建议您尽量避免使用它作为对应格式。推荐的编码选项是:
- 8位和16位线性PCM
- 仅支持编解码器“1”(PCM)。
如果可能的话,我建议使用.MP3格式,因为它有更广泛的桌面/移动浏览器支持。
另请注意,您需要指定supplied: 'wav'
才能播放.WAV文件。
<强>样本强>
有关播放您上传的.WAV文件的jPlayer Circle Player的演示,请参阅this jsFiddle。
我能够在Firefox,Chrome和Safari上播放.WAV文件,但不能播放IE。这表明问题不在于文件格式。