class Synth {
constructor(settings) {
this.settings = settings
this.destination = 'destination'
// この配列に再生中のオシレーターが、
// index = midiNoteNumber の場所に保存される
// midiNote 60 を再生するオシレーターは
// this.oscillatorArray[60] に保存される
this.oscillatorArray = Array.from({ length: 128 })
// this.oscillatorArray が何個あるか確認
console.log(this.oscillatorArray.map((o, index) => index))
}
// midiNoteNumber からその周波数を再生する
// オシレーターを作成する
createOscillator({ midiNoteNumber, wave }) {
return `oscilator with ${midiNoteNumber}, ${wave}`
}
// midiNoteNumber を受け取って再生する
play({ midiNoteNumber }) {
const wave = 'sine'
const oscillator = this.createOscillator({ midiNoteNumber, wave })
// connect と play をする
// oscillator.connect(this.destination)
// oscillator.play()
// oscillator を配列に保存する
this.oscillatorArray[midiNoteNumber] = oscillator
// 中身確認
console.log(this.oscillatorArray)
return `play ${midiNoteNumber}`
}
// midiNoteNumber を受け取って停止する
stop({ midiNoteNumber }) {
// midiNoteNumber に対応する index に
// 再生中のオシレーターがあるか確認する
const targetOscillator = this.oscillatorArray[midiNoteNumber]
if (!targetOscillator) {
// ないときは停止すべき対象がないので
// 特に何もしない
return `not ${midiNoteNumber} playing`
}
// 対象がある場合は止める
//targetOscillator.stop()
// 本来であれば、止めるだけで配列が空になるが、
// ダミーのコードなので、そこに目印を入れることにする
this.oscillatorArray[midiNoteNumber] = `stop ${midiNoteNumber}`
// 中身確認
console.log(this.oscillatorArray)
return `stop ${midiNoteNumber}`
}
}
export default Synth