JavaScript:如何在播放另一个音频样本时停止并重新启动音频?

JavaScript:如何在播放另一个音频样本时停止并重新启动音频?,javascript,audio,Javascript,Audio,我正在创建一个吉他应用程序,当你按某些键时,它会播放和弦。我有播放音频的代码,这取决于你按的键。现在只有A和弦和G和弦在工作。但如果您再次按同一个键或按另一个键,音频仍将与新音频一起播放。我希望当前的声音停止,一旦你提出的关键是举行(keyup)。 我在读关于Audio.pause()和currentTime=0的文章,但我不知道如何让它们工作 document.addEventListener('keydown',函数(事件){ makeSound(event.key); }); 函数mak

我正在创建一个吉他应用程序,当你按某些键时,它会播放和弦。我有播放音频的代码,这取决于你按的键。现在只有A和弦和G和弦在工作。但如果您再次按同一个键或按另一个键,音频仍将与新音频一起播放。我希望当前的声音停止,一旦你提出的关键是举行(keyup)。 我在读关于Audio.pause()和currentTime=0的文章,但我不知道如何让它们工作

document.addEventListener('keydown',函数(事件){
makeSound(event.key);
});
函数makeSound(键){
开关(钥匙){
案例“a”:
var a2=新音频(“声音/a2.wav”);
a2.玩();
打破
案例“g”:
var g2=新音频(“声音/g2.wav”);
g2.play();
打破
}
};
正文{
背景:黑色;
字体系列:无衬线;
}
钮扣{
字体大小:30px;
}

吉他
A2
G2

要暂停和重置音频,您需要对当前播放的音频进行引用。此时,每次按下一个键都会创建新的音频播放器,因此对音频的引用将丢失

将音频和弦放在文件的顶部。我们将为每个按键事件使用相同的音频播放器。创建一个变量,该变量将保存对当前播放的音频的引用

无论何时释放该键,都应检查参考是否指向和弦音频播放器。如果是,则应暂停,将
currentTime
设置为
0
并销毁引用

var a2 = new Audio('sounds/a2.wav');
var g2 = new Audio('sounds/g2.wav');
var currentChord = null; // Reference to know what sound is currently playing.
var keyIsPressed = false;

document.addEventListener('keydown', function(event) {
  if (keyIsPressed === false) {
    makeSound(event.key);
    keyIsPressed = true;
  }
});

document.addEventListener('keyup', function() {
  stopSound(); // Stop the sound when releasing the key.
  keyIsPressed = false;
});

function makeSound(key) {
  switch(key) {
    case "a":
      currentChord = a2; // Assign to currentChord.
      break;
    
    case "g":
      currentChord = g2; // Assign to currentChord.
      break;
  }

  currentChord.play(); // Play the currentChord.
};

function stopSound() {
  if (currentChord !== null) { // Check if there is a reference.
    currentChord.pause(); // Pause and..
    currentChord.currentTime = 0; // ..reset if there is..
    currentChord = null; // ..and then destroy the reference.
  }
}

嗯,暂停按键并不像我想象的那样有效!最后我把那个部分去掉了。但我注意到的一件事是,如果你按住键超过一秒钟,音频将开始快速暂停和播放。你知道有什么办法可以阻止吗?是的!我添加了一个标志,用于检查某个键是否已按下,并且仅在第一次
keydown
事件时播放声音。