从 x 到 y 秒播放音频

Posted

技术标签:

【中文标题】从 x 到 y 秒播放音频【英文标题】:play audio from x to y seconds 【发布时间】:2014-09-26 09:24:19 【问题描述】:

我正在尝试将音频文件从第二个 x 播放到第二个 y。我会尝试以更好的方式解释它。

我有一个文本,我希望在单击一个单词时播放一个音频文件。关键是我不想播放整个音频文件,而只是播放点击单词的一段音频。 我想使用包含我文本中所有单词的单个音频文件(不是每个单词的单个音频文件)并提取说出单词的音频部分。

目前我有音频文件,对于每个单词,我都知道它开始和结束的确切秒数。

例子:

我的文字是:“大家好,你们好吗?我很好。” 当我点击“每个人”时,我想在它说“每个人”时获得一段音频。

javascript

<script src="jquery-1.11.1.min.js"></script>
<script>

$(document).ready(function() 
    $('#1').click(function ()
            //play audiofile from 0 sec to 1 sec
        );
    $('#2').click(function ()
            //play audiofile from 1 sec to 2 sec
        );
    $('#3').click(function ()
            //play audiofile from 2 sec to 3 sec
        );
    $('#4').click(function ()
            //play audiofile from 3 sec to 4 sec
        );

);
</script>

html

<body>

<div><span id="1">Hello </span><span id="2">World! </span><span id="3">Life </span><span id="4">long</span></div>

</body>

我已经使用了 .play() 和 .pause() 函数,但它们对我不好,因为我想随机获取单词。

提前谢谢你!

【问题讨论】:

到目前为止你的代码是什么? 提供更多信息,例如说了什么秒数。提供你的 html 结构... 查看我的更新答案 您是否创建了音频元素?请将其添加到您的标记中 【参考方案1】:

data-word 添加到每个带有“word”类的元素:

<p>
  <span class="word" data-word="hello" id="1">Hello </span><span class="word" data-word="world" id="2">World! </span><span class="word" data-word="life" id="3">Life </span><span class="word" data-word="long" id="4">long</span>
</p>

然后在你的 jQuery 中写:

(function($) 
  $(function() 
    var audio = $('audio').get(0),
      word_timings = 
        'hello': start: 0, end: 1,
        'world': start: 1, end: 2,
        'life': start: 2, end: 3,
        'long': start: 4, end: 4
      ;

    $('.word').click(function() 
      var word = $(this).data('word'),
        start = word_timings[word].start,
        end = word_timings[word].end;

      audio.pause().currentTime = start;
      audio.play();
      $(audio).on('timeupdate', function() 
        if (this.currentTime >= end) 
          this.pause();
          $(audio).off('timeupdate');
        
      );

    );
  );
)(jQuery);

在数组word_timings 中,您可以定义哪个单词在什么秒/时间开始和结束。

【讨论】:

完美!非常感谢你!!唯一的就是“audio.pause().currentTime = start;”无需“.pause()”即可工作。有效的代码是:audio.currentTime = start;真的谢谢你!【参考方案2】:

尝试:

function dynamicVoice(text)
  var msg = new SpeechSynthesisUtterance(text);
window.speechSynthesis.speak(msg);
  

dynamicVoice("Hello World");
`

文本到语音的浏览器api

【讨论】:

这是个好主意,但首先:它不完全满足 OPs 要求,其次不是所有浏览器都广泛支持

以上是关于从 x 到 y 秒播放音频的主要内容,如果未能解决你的问题,请参考以下文章

请问js如何实现多个音频文件依次播放,而不是同时播放?如何实现播放制定位置,如音频3秒到10秒之间

如何在合并音频和视频时循环播放音频

如何播放音频文件示例

官方认可的从 Qt5.x 下的资源播放音频的方式

如何在 Java 中播放 Opus 编码的音频?

使用哪种技术在 iPhone 上播放音频?