xxxxxxxxxx
var settings // une variable pour stocker le panneau de controle
var initSound = "acoustic_grand_piano"
var lead
var amplitude
var fft
// la fonction preload est executée avant le chargement de la page et donc avant le setup
// ici on va l'utiliser pour charger la librairie quicksettings disponnible via CDN
// et initialiser notre gui
function preload(){
var script = document.createElement( 'script' ); // on crée un nouvel 'élément script'
script.src = 'https://cdn.jsdelivr.net/quicksettings/latest/quicksettings.min.js'; // on ajoute en source la lib (lien cdn)
// on définit ce qu'on doit faire au chargement de la page via une fonction de rappel
script.onload = function(){
settings = QuickSettings.create(255, 50, "GUI");
settings.addDropDown("instrument" , instrumentTable, setSound);
}
document.body.appendChild( script );
var soundfont = document.createElement('script');
soundfont.src = 'https://raw.githubusercontent.com/danigb/soundfont-player/master/dist/soundfont-player.min.js'
soundfont.onload = function(){
ctx = getAudioContext();
lead = Soundfont.instrument(ctx, initSound );
}
document.body.appendChild( soundfont );
}
function setup() {
createCanvas(windowWidth, windowHeight);
background(0)
amplitude = new p5.Amplitude();
fft = new p5.FFT();
lead.then(function(inst){
inst.connect(amplitude)
inst.connect(fft);
});
colorMode(HSB,360,100,100)
}
function setSound(){
initSound = gui.getValuesAsJSON(false)["instrument"]
ctx = getAudioContext();
lead = Soundfont.instrument(ctx, initSound);
lead.then(function(inst){
inst.connect(amplitude)
inst.connect(fft);
});
}
function draw() {
//background(0)
noStroke();
fill(0,0,0,0.15)
rect(0,0,windowWidth,windowHeight)
fill(0,0,100,0.25)
console.log(amplitude.getLevel());
ellipse(windowWidth/2,windowHeight/2,amplitude.getLevel()*5000, amplitude.getLevel()*5000)
// utiliser keyPressed() plutôt
if (keyIsPressed && key == 'q'){
play(60)
}
if (keyIsPressed && key == 's'){
play(62)
}
if (keyIsPressed && key == 'd'){
play(64)
}
if (keyIsPressed && key == 'f'){
play(65)
}
if (keyIsPressed && key == 'g'){
play(67)
}
if (keyIsPressed && key == 'h'){
play(69)
}
if (keyIsPressed && key == 'j'){
play(71)
}
if (keyIsPressed && key == 'k'){
play(72)
}
var spectrum = fft.analyze();
for (i = 0; i<spectrum.length; i++) {
fill(map(i,0,spectrum.length,0,180),100,map(spectrum[i],0,255,0,100))
rect (map(i,0,spectrum.length,0,windowWidth),height,windowWidth/spectrum.length , map(spectrum[i], 0, 255, 0, -height) );
}
}
function keyPressed(){
}
function play(midinote){
lead.then(function (inst) {
inst.play(midinote + 24, 0, {
loop: false
});
});
}
var instrumentTable = [
"accordion"
, "acoustic_bass"
, "acoustic_grand_piano"
, "acoustic_guitar_nylon"
, "acoustic_guitar_steel"
, "agogo"
, "alto_sax"
, "applause"
, //"bagpipe", // doesn't work
"banjo"
, "baritone_sax"
, "bassoon"
, "bird_tweet"
, "blown_bottle"
, "brass_section"
, "breath_noise"
, "bright_acoustic_piano"
, "celesta"
, "cello"
, "choir_aahs"
, "church_organ"
, "clarinet"
, //"clavinet", // doesn't work
"contrabass"
, "distortion_guitar"
, "drawbar_organ"
, "dulcimer"
, "electric_bass_finger"
, "electric_bass_pick"
, "electric_grand_piano"
, "electric_guitar_clean"
, "electric_guitar_jazz"
, "electric_guitar_muted"
, "electric_piano_1"
, "electric_piano_2"
, "english_horn"
, "fiddle"
, "flute"
, "french_horn"
, "fretless_bass"
, "fx_1_rain"
, "fx_2_soundtrack"
, "fx_3_crystal"
, "fx_4_atmosphere"
, "fx_5_brightness"
, "fx_6_goblins"
, "fx_7_echoes"
, "fx_8_scifi"
, "glockenspiel"
, "guitar_fret_noise"
, "guitar_harmonics"
, "gunshot"
, "harmonica"
, "harpsichord"
, "helicopter"
, "honkytonk_piano"
, "kalimba"
, "koto"
, "lead_1_square"
, "lead_2_sawtooth"
, "lead_3_calliope"
, "lead_4_chiff"
, "lead_5_charang"
, "lead_6_voice"
, "lead_7_fifths"
, //"lead_8_bass__lead", // doesn't work
"marimba"
, "melodic_tom"
, "music_box"
, "muted_trumpet"
, "oboe"
, "ocarina"
, "orchestra_hit"
, "orchestral_harp"
, "overdriven_guitar"
, "pad_1_new_age"
, "pad_2_warm"
, "pad_3_polysynth"
, "pad_4_choir"
, "pad_5_bowed"
, "pad_6_metallic"
, "pad_7_halo"
, "pad_8_sweep"
, "pan_flute"
, "percussive_organ"
, "piccolo"
, "pizzicato_strings"
, "recorder"
, "reed_organ"
, //"reverse_cymbal",
"rock_organ"
, //"seashore",
"shakuhachi"
, "shamisen"
, "shanai"
, "sitar"
, "slap_bass_1"
, "slap_bass_2"
, "soprano_sax"
, "steel_drums"
, "string_ensemble_1"
, "string_ensemble_2"
, "synth_bass_1"
, "synth_bass_2"
, //"synth_brass_1", // doesn't work
//"synth_brass_2", // doesn't work
//"synth_choir", // doesn't work
//"synth_drum",
//"synth_strings_1", // doesn't work
//"synth_strings_2", // doesn't work
//"taiko_drum",
"tango_accordion"
, "telephone_ring"
, "tenor_sax"
, "timpani"
, "tinkle_bell"
, "tremolo_strings"
, "trombone"
, "trumpet"
, "tuba"
, "tubular_bells"
, "vibraphone"
, "viola"
, "violin"
, "voice_oohs"
, "whistle"
, "woodblock"
, "xylophone"
];