Music-maker / script.js
Doubleupai's picture
Create script.js
33c3286 verified
const audioContext = new (window.AudioContext || window.webkitAudioContext)();
const oscillator = audioContext.createOscillator();
const gainNode = audioContext.createGain();
oscillator.connect(gainNode);
gainNode.connect(audioContext.destination);
oscillator.start();
function playNote(note) {
const noteFrequency = getNoteFrequency(note);
oscillator.frequency.setValueAtTime(noteFrequency, audioContext.currentTime);
gainNode.gain.setValueAtTime(1, audioContext.currentTime);
gainNode.gain.exponentialRampToValueAtTime(0.001, audioContext.currentTime + 1);
}
function getNoteFrequency(note) {
const noteFrequencies = {
'C4': 261.63,
'C#4': 277.18,
'D4': 293.66,
'D#4': 311.13,
'E4': 329.63,
'F4': 349.23,
'F#4': 369.99,
'G4': 392.00,
'G#4': 415.30,
'A4': 440.00,
'A#4': 466.16,
'B4': 493.88
};
return noteFrequencies[note];
}
const pianoKeys = document.querySelectorAll('.key');
pianoKeys.forEach(key => {
key.addEventListener('click', () => {
const note = key.getAttribute('data-note');
playNote(note);
});
});
const drumButtons = document.querySelectorAll('.drum-button');
drumButtons.forEach(button => {
button.addEventListener('click', () => {
const sound = button.getAttribute('data-sound');
playSound(`sounds/drums/${sound}.mp3`);
});
});
const pluckButtons = document.querySelectorAll('.pluck-button');
pluckButtons.forEach(button => {
button.addEventListener('click', () => {
const sound = button.getAttribute('data-sound');
playSound(`sounds/pluck/${sound}.mp3`);
});
});
const voiceButtons = document.querySelectorAll('.voice-button');
voiceButtons.forEach(button => {
button.addEventListener('click', () => {
const sound = button.getAttribute('data-sound');
playSound(`sounds/voice/${sound}.mp3`);
});
});
const guitarButtons = document.querySelectorAll('.guitar-button');
guitarButtons.forEach(button => {
button.addEventListener('click', () => {
const sound = button.getAttribute('data-sound');
playSound(`sounds/guitar/${sound}.mp3`);
});
});
const saxophoneButtons = document.querySelectorAll('.saxophone-button');
saxophoneButtons.forEach(button => {
button.addEventListener('click', () => {
const sound = button.getAttribute('data-sound');
playSound(`sounds/saxophone/${sound}.mp3`);
});
});
const bit8Buttons = document.querySelectorAll('.8bit-button');
bit8Buttons.forEach(button => {
button.addEventListener('click', () => {
const sound = button.getAttribute('data-sound');
playSound(`sounds/8bit/${sound}.mp3`);
});
});
const bit16Buttons = document.querySelectorAll('.16bit-button');
bit16Buttons.forEach(button => {
button.addEventListener('click', () => {
const sound = button.getAttribute('data-sound');
playSound(`sounds/16bit/${sound}.mp3`);
});
});
const genreButtons = document.querySelectorAll('.genre-button');
genreButtons.forEach(button => {
button.addEventListener('click', () => {
const genre = button.getAttribute('data-genre');
applyGenre(genre);
});
});
const loopButtons = document.querySelectorAll('.loop-button');
loopButtons.forEach(button => {
button.addEventListener('click', () => {
const loop = button.getAttribute('data-loop');
playLoop(`sounds/loops/${loop}.mp3`);
});
});
const fxButtons = document.querySelectorAll('.fx-button');
fxButtons.forEach(button => {
button.addEventListener('click', () => {
const fx = button.getAttribute('data-fx');
applyFX(`sounds/fx/${fx}.mp3`);
});
});
function playSound(soundFile) {
const audio = new Audio(soundFile);
audio.play();
}
function playLoop(loopFile) {
const audio = new Audio(loopFile);
audio.loop = true;
audio.play();
}
function applyFX(fxFile) {
const audio = new Audio(fxFile);
audio.play();
}
function applyGenre(genre) {
// Apply genre effects (e.g., change tempo, pitch, etc.)
console.log(`Applying ${genre} genre effects...`);
}
let isRecording = false;
let recordedNotes = [];
document.getElementById('record-button').addEventListener('click', () => {
isRecording = true;
recordedNotes = [];
document.getElementById('record-button').disabled = true;
document.getElementById('stop-button').disabled = false;
});
document.getElementById('stop-button').addEventListener('click', () => {
isRecording = false;
document.getElementById('record-button').disabled = false;
document.getElementById('stop-button').disabled = true;
document.getElementById('play-button').disabled = false;
});
document.getElementById('play-button').addEventListener('click', () => {
recordedNotes.forEach((note, index) => {
setTimeout(() => playNote(note), index * 500);
});
});
pianoKeys.forEach(key => {
key.addEventListener('click', () => {
const note = key.getAttribute('data-note');
if (isRecording) {
recordedNotes.push(note);
}
});
});
document.getElementById('audio-file').addEventListener('change', (event) => {
const file = event.target.files[0];
if (file) {
document.getElementById('play-file-button').disabled = false;
}
});
document.getElementById('play-file-button').addEventListener('click', () => {
const file = document.getElementById('audio-file').files[0];
if (file) {
const audio = new Audio(URL.createObjectURL(file));
audio.play();
}
});