// Copyright (C) 2013 Massachusetts Institute of Technology
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License version 2,
// as published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

// Instr.js
// Tim Mickel, 2013
// Based entirely on the AS by John Maloney, April 2012
//
// This class interacts with IO to load Scratch instruments and drums.
// The variable 'samples' is a dictionary of named sound buffers.
// Call initSamples() to initialize 'samples' before using (during load).
//
// All instrument and drum samples were created for Scratch by:
//
//      Paul Madden, paulmatthewmadden@yahoo.com
//
// Paul is an excellent sound designer and we appreciate all the effort
// he put into this project.

var Instr = function() {}

Instr.samples = {};
Instr.wavsLoaded = 0;

Instr.wavs = {
    'AcousticGuitar_F3': 'instruments/AcousticGuitar_F3_22k.wav',
    'AcousticPiano_As3': 'instruments/AcousticPiano(5)_A#3_22k.wav',
    'AcousticPiano_C4': 'instruments/AcousticPiano(5)_C4_22k.wav',
    'AcousticPiano_G4': 'instruments/AcousticPiano(5)_G4_22k.wav',
    'AcousticPiano_F5': 'instruments/AcousticPiano(5)_F5_22k.wav',
    'AcousticPiano_C6': 'instruments/AcousticPiano(5)_C6_22k.wav',
    'AcousticPiano_Ds6': 'instruments/AcousticPiano(5)_D#6_22k.wav',
    'AcousticPiano_D7': 'instruments/AcousticPiano(5)_D7_22k.wav',
    'AltoSax_A3': 'instruments/AltoSax_A3_22K.wav',
    'AltoSax_C6': 'instruments/AltoSax(3)_C6_22k.wav',
    'Bassoon_C3': 'instruments/Bassoon_C3_22k.wav',
    'BassTrombone_A2_2': 'instruments/BassTrombone_A2(2)_22k.wav',
    'BassTrombone_A2_3': 'instruments/BassTrombone_A2(3)_22k.wav',
    'Cello_C2': 'instruments/Cello(3b)_C2_22k.wav',
    'Cello_As2': 'instruments/Cello(3)_A#2_22k.wav',
    'Choir_F3': 'instruments/Choir(4)_F3_22k.wav',
    'Choir_F4': 'instruments/Choir(4)_F4_22k.wav',
    'Choir_F5': 'instruments/Choir(4)_F5_22k.wav',
    'Clarinet_C4': 'instruments/Clarinet_C4_22k.wav',
    'ElectricBass_G1': 'instruments/ElectricBass(2)_G1_22k.wav',
    'ElectricGuitar_F3': 'instruments/ElectricGuitar(2)_F3(1)_22k.wav',
    'ElectricPiano_C2': 'instruments/ElectricPiano_C2_22k.wav',
    'ElectricPiano_C4': 'instruments/ElectricPiano_C4_22k.wav',
    'EnglishHorn_D4': 'instruments/EnglishHorn(1)_D4_22k.wav',
    'EnglishHorn_F3': 'instruments/EnglishHorn(1)_F3_22k.wav',
    'Flute_B5_1': 'instruments/Flute(3)_B5(1)_22k.wav',
    'Flute_B5_2': 'instruments/Flute(3)_B5(2)_22k.wav',
    'Marimba_C4': 'instruments/Marimba_C4_22k.wav',
    'MusicBox_C4': 'instruments/MusicBox_C4_22k.wav',
    'Organ_G2': 'instruments/Organ(2)_G2_22k.wav',
    'Pizz_A3': 'instruments/Pizz(2)_A3_22k.wav',
    'Pizz_E4': 'instruments/Pizz(2)_E4_22k.wav',
    'Pizz_G2': 'instruments/Pizz(2)_G2_22k.wav',
    'SteelDrum_D5': 'instruments/SteelDrum_D5_22k.wav',
    'SynthLead_C4': 'instruments/SynthLead(6)_C4_22k.wav',
    'SynthLead_C6': 'instruments/SynthLead(6)_C6_22k.wav',
    'SynthPad_A3': 'instruments/SynthPad(2)_A3_22k.wav',
    'SynthPad_C6': 'instruments/SynthPad(2)_C6_22k.wav',
    'TenorSax_C3': 'instruments/TenorSax(1)_C3_22k.wav',
    'Trombone_B3': 'instruments/Trombone_B3_22k.wav',
    'Trumpet_E5': 'instruments/Trumpet_E5_22k.wav',
    'Vibraphone_C3': 'instruments/Vibraphone_C3_22k.wav',
    'Violin_D4': 'instruments/Violin(2)_D4_22K.wav',
    'Violin_A4': 'instruments/Violin(3)_A4_22k.wav',
    'Violin_E5': 'instruments/Violin(3b)_E5_22k.wav',
    'WoodenFlute_C5': 'instruments/WoodenFlute_C5_22k.wav',
    // Drums
    'BassDrum': 'drums/BassDrum(1b)_22k.wav',
    'Bongo': 'drums/Bongo_22k.wav',
    'Cabasa': 'drums/Cabasa(1)_22k.wav',
    'Clap': 'drums/Clap(1)_22k.wav',
    'Claves': 'drums/Claves(1)_22k.wav',
    'Conga': 'drums/Conga(1)_22k.wav',
    'Cowbell': 'drums/Cowbell(3)_22k.wav',
    'Crash': 'drums/Crash(2)_22k.wav',
    'Cuica': 'drums/Cuica(2)_22k.wav',
    'GuiroLong': 'drums/GuiroLong(1)_22k.wav',
    'GuiroShort': 'drums/GuiroShort(1)_22k.wav',
    'HiHatClosed': 'drums/HiHatClosed(1)_22k.wav',
    'HiHatOpen': 'drums/HiHatOpen(2)_22k.wav',
    'HiHatPedal': 'drums/HiHatPedal(1)_22k.wav',
    'Maracas': 'drums/Maracas(1)_22k.wav',
    'SideStick': 'drums/SideStick(1)_22k.wav',
    'SnareDrum': 'drums/SnareDrum(1)_22k.wav',
    'Tambourine': 'drums/Tambourine(3)_22k.wav',
    'Tom': 'drums/Tom(1)_22k.wav',
    'Triangle': 'drums/Triangle(1)_22k.wav',
    'Vibraslap': 'drums/Vibraslap(1)_22k.wav',
    'WoodBlock': 'drums/WoodBlock(1)_22k.wav'
};

Instr.wavCount = Object.keys(Instr.wavs).length;