class App extends React.Component{
constructor(props) {
super(props);
this.playAudio = this.playAudio.bind(this);
}
playAudio(event) {
const audio = event.currentTarget.querySelector('audio');
if (!audio) return; // safety check
audio.currentTime = 0;
try {
audio.play();
} catch(e) {
console.log("Audio play blocked:", e);
}
}
render() {
return (
<>
<div id="drum-machine">
<div id="display"></div>
<div id="drum-pads">
<button onClick={this.playAudio} className="drum-pad" id="heater-1">
Q
<audio className="clip" id="Q" src='https://cdn.freecodecamp.org/testable-projects-fcc/audio/Heater-1.mp3' preload="auto"></audio>
</button>
<button onClick={this.playAudio} className="drum-pad" id="heater-2">
W
<audio className="clip" id="W" src='https://cdn.freecodecamp.org/testable-projects-fcc/audio/Heater-2.mp3' preload="auto"></audio>
</button>
<button onClick={this.playAudio} className="drum-pad" id="heater-3">
E
<audio className="clip" id="E" src='https://cdn.freecodecamp.org/testable-projects-fcc/audio/Heater-3.mp3' preload="auto"></audio>
</button>
<button onClick={this.playAudio} className="drum-pad" id="heater-4">
A
<audio className="clip" id="A" src='https://cdn.freecodecamp.org/testable-projects-fcc/audio/Heater-4.mp3' preload="auto"></audio>
</button>
<button onClick={this.playAudio} className="drum-pad" id="clap">
S
<audio className="clip" id="S" src='https://cdn.freecodecamp.org/testable-projects-fcc/audio/Heater-6.mp3' preload="auto"></audio>
</button>
<button onClick={this.playAudio} className="drum-pad" id="open-hh">
D
<audio className="clip" id="D" src='https://cdn.freecodecamp.org/testable-projects-fcc/audio/Dsc_Oh.mp3' preload="auto"></audio>
</button>
<button onClick={this.playAudio} className="drum-pad" id="knh">
Z
<audio className="clip" id="Z" src='https://cdn.freecodecamp.org/testable-projects-fcc/audio/Kick_n_Hat.mp3' preload="auto"></audio>
</button>
<button onClick={this.playAudio} className="drum-pad" id="kick">
X
<audio className="clip" id="X" src='https://cdn.freecodecamp.org/testable-projects-fcc/audio/RP4_KICK_1.mp3' preload="auto"></audio>
</button>
<button onClick={this.playAudio} className="drum-pad" id="closed-hh">
C
<audio className="clip" id="C" src='https://cdn.freecodecamp.org/testable-projects-fcc/audio/Cev_H2.mp3' preload="auto"></audio>
</button>
</div>
</div>
</>
);
}
}
ReactDOM.render(<App />, document.getElementById('root'));
I thought it was const audio getting null or undefined, but that’s not. the App render nothing, but the moment I run test, the drum sound out for a moment and the test executing 7/8 and then only pass 5/8.
I try what I could but I dont understand and found the problem.