Reputation: 1137
I'm making a drum machine, and so far I've been able to generate the grid with all the sounds(they're all the same for now, but I'll change it later), but I'm having trouble implementing my playAudio
function. I logged my props and I saw that the information is being passed, but my function is not working very well. Here's the code:
App component
import React from "react";
import "./styles.css";
import sounds from "./Sounds";
import DrumsGrid from "./DrumsGrid";
export default function App() {
const playAudio = audio => {
audio.play();
};
const mapped = sounds.map(sound => (
<DrumsGrid src={sound.src} id={sound.id} handleClick={playAudio} />
));
return <div className="App">{mapped}</div>;
}
DrumsGrid
import React from "react";
import "./styles.css";
function DrumsGrid(props) {
console.log(props);
return (
<div className="grid-element" onClick={() => props.handleClick(props.src)}>
{props.id}
<audio src={props.src} />
</div>
);
}
export default DrumsGrid;
Sounds
const sounds = [
{
id: 1,
src:
"https://sampleswap.org/samples-ghost/DRUMS%20(SINGLE%20HITS)/Kicks/24[kb]bonger-kick.wav.mp3"
},
{
id: 2,
src:
"https://sampleswap.org/samples-ghost/DRUMS%20(SINGLE%20HITS)/Kicks/24[kb]bonger-kick.wav.mp3"
},
{
id: 3,
src:
"https://sampleswap.org/samples-ghost/DRUMS%20(SINGLE%20HITS)/Kicks/24[kb]bonger-kick.wav.mp3"
},
{
id: 4,
src:
"https://sampleswap.org/samples-ghost/DRUMS%20(SINGLE%20HITS)/Kicks/24[kb]bonger-kick.wav.mp3"
},
{
id: 5,
src:
"https://sampleswap.org/samples-ghost/DRUMS%20(SINGLE%20HITS)/Kicks/24[kb]bonger-kick.wav.mp3"
},
{
id: 6,
src:
"https://sampleswap.org/samples-ghost/DRUMS%20(SINGLE%20HITS)/Kicks/24[kb]bonger-kick.wav.mp3"
},
{
id: 7,
src:
"https://sampleswap.org/samples-ghost/DRUMS%20(SINGLE%20HITS)/Kicks/24[kb]bonger-kick.wav.mp3"
},
{
id: 8,
src:
"https://sampleswap.org/samples-ghost/DRUMS%20(SINGLE%20HITS)/Kicks/24[kb]bonger-kick.wav.mp3"
},
{
id: 9,
src:
"https://sampleswap.org/samples-ghost/DRUMS%20(SINGLE%20HITS)/Kicks/24[kb]bonger-kick.wav.mp3"
}
];
export default sounds;
Upvotes: 1
Views: 1496
Reputation: 4050
You need to create a new Audio
instance like this:
const playAudio = audio => {
const audioToPlay = new Audio(audio);
audioToPlay.play();
};
And here is a working sandbox: https://codesandbox.io/s/happy-golick-7e6nm
Upvotes: 1