Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用同一音频对象时多次播放JavaScript音频_Javascript_Angular_Typescript_Ionic Framework_Html5 Audio - Fatal编程技术网

使用同一音频对象时多次播放JavaScript音频

使用同一音频对象时多次播放JavaScript音频,javascript,angular,typescript,ionic-framework,html5-audio,Javascript,Angular,Typescript,Ionic Framework,Html5 Audio,我有一个播放JavaScript音频的函数,如下所示: playSound(sub) { console.log(sub); if (sub.audio.paused) { sub.audio.ontimeupdate = function (i) { if ((this.currentTime / this.duration) > 0.9) { this.currentTime = 0; this.p

我有一个播放JavaScript音频的函数,如下所示:

  playSound(sub) {
    console.log(sub);
    if (sub.audio.paused) {
      sub.audio.ontimeupdate = function (i) {
        if ((this.currentTime / this.duration) > 0.9) {
          this.currentTime = 0;
          this.play();
        }
      };
      sub.audio.play();
    } else {
      sub.audio.pause();
      sub.audio.currentTime = 0;
    }
  }
我在HTML中调用此函数,如下所示:

(click)="playSound(sub)"
一切都很好,工作也很好,直到我通过编程尝试播放音频,我在if语句的另一个函数中调用playSound()函数。音频播放成功,但每当我尝试使用参数中给定的完全相同的音频对象(据我所知)调用HTML中的完全相同的函数(单击)时,声音会播放两次

这是缓存问题吗?还是一个角度问题,它复制了原始音频,因此音频实例可以播放多次

我也试过HowlerJS,这给了我完全相同的问题,Howler在玩的时候似乎会做出不同的ID

这是调用playSound函数的地方

  setSleepyset() {
    this.muteAll();
    for (let i = 0; i < this.items.length; i++) {
      for (let x = 0; x < this.items[i].subitems.length; x++) {
        if (localStorage.getItem(this.items[i].subitems[x].audio.src) !== null) {
          this.playSound(this.items[i].subitems[x]);
        } else {
          this.items[i].subitems[x].audio.pause();
          this.items[i].subitems[x].audio.currentTime = 0;
        }
      }
    }
  }
我们的目标是在同一时间播放多个声音并同时加载,除非我可以在同一个变量中播放/暂停多个音频源,否则全局音频变量不是解决方案。

修复

原来我从另一个实例调用了该函数,我使用了一个提供程序,它创建了Home类的一个新实例,每次从侧菜单调用playSound时都创建了一个新的音频对象。

修复了

结果是我从另一个实例调用了这个函数,我使用了一个提供程序,它创建了Home类的一个新实例,每次从侧菜单调用playSound时都创建了一个新的音频对象

items = [
    {
      category: "Weather",
      expanded: true,
      subitems: [
        {
          name: "Rain",
          background: "../assets/backgrounds/rain.jpg",
          sound: "../assets/sounds/rain.ogg",
          audio: new Audio('../assets/sounds/rain.ogg'),
          icon: "../assets/icons/rain.png",
          playing: false
        },
        {
          name: "Thunder",
          background: "../assets/backgrounds/thunder.jpg",
          sound: "../assets/sounds/thunder.ogg",
          audio: new Audio('../assets/sounds/thunder.ogg'),
          icon: "../assets/icons/thunder.png",
          playing: false
        },
        {
          name: "Wind",
          background: "../assets/backgrounds/wind.jpg",
          sound: "../assets/sounds/wind.ogg",
          audio: new Audio('../assets/sounds/wind.ogg'),
          icon: "../assets/icons/wind.png",
          playing: false
        }
      ]
    }
]