Yotam Mann 830c9eee4c load fewer audio files when the screen is smaller
helps speed up the mobile load time
2018-10-17 14:21:23 -04:00

69 lines
1.7 KiB
JavaScript

/**
* Copyright 2016 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Tone from 'Tone/core/Tone'
import PolySynth from 'Tone/instrument/PolySynth'
import Frequency from 'Tone/type/Frequency'
import MonoSynth from 'Tone/instrument/MonoSynth'
import {Sampler} from 'sound/Sampler'
class Sound {
constructor(){
// make the samples loaded based on the screen size
if (screen.availWidth < 750 && screen.availHeight < 750){
this._range = [48, 72]
} else if (screen.availWidth < 1000 && screen.availHeight < 1000){
this._range = [48, 84]
} else {
this._range = [24, 108]
}
this._piano = new Sampler('audio/Salamander/', this._range)
this._synth = new Sampler('audio/string_ensemble/', this._range)
}
load(){
return Promise.all([this._piano.load(), this._synth.load()])
}
keyDown(note, time=Tone.now(), ai=false){
if (note >= this._range[0] && note <= this._range[1]){
this._piano.keyDown(note, time)
if (ai){
this._synth.volume = -8
this._synth.keyDown(note, time)
}
}
}
keyUp(note, time=Tone.now(), ai=false){
if (note >= this._range[0] && note <= this._range[1]){
time += 0.05
this._piano.keyUp(note, time)
if (ai){
this._synth.keyUp(note, time)
}
}
}
}
export {Sound}