перевести ванильный оператор try / catch в приложение реакции? - PullRequest
0 голосов
/ 26 мая 2020

У меня есть класс React, в котором я пытаюсь настроить повторяющиеся нейронные сети, но которые в настоящее время не работают должным образом. Я должен слышать сгенерированные midi, но я ничего не слышу и даже не вижу кнопки «сгенерировать», видимые в коде.

По сути, этот проект просто включает в себя перевод vanilla на React. В приведенном ниже классе я использую попытку / уловку, которая, как мне кажется, является проблемой; Я думаю, что использую константы, когда мне нужно использовать что-то еще, но не уверен, что это проблема.

export default class Beat3 extends React.Component {
  constructor(props) {
    super(props);
    this.improvCheckpoint = 'https://storage.googleapis.com/magentadata/js/checkpoints/music_rnn/chord_pitches_improv'
    this.improvRNN = new mm.MusicRNN(this.improvCheckpoint)

    this.synth = new Tone.Synth().toMaster()
    const { midi, Note } = Tonal
    this.sequence = {
      ticksPerQuarter: 220,
      totalTime: 58,
      timeSignatures: [
        {
          time: 0,
          numerator: 4,
          denominator: 4
        }
      ],
      tempos: [
        {
          time: 0,
          qpm: 120
        }
      ],
      notes: [
        { pitch: 60, startTime: 0, endTime: 1 },
        { pitch: 67, startTime: 1, endTime: 3.5 }

      ]
    }
    this.quantizedSequence = mm.sequences.quantizeNoteSequence(this.sequence, 1)

    const startProgram = async () => {
      try {
        await this.improvRNN.initialize()
        let improvisedMelody = await this.improvRNN.continueSequence(this.quantizedSequence, 60, 1.1, ['Bm', 'Bbm', 'Gb7', 'F7', 'Ab', 'Ab7', 'G7', 'Gb7', 'F7', 'Bb7', 'Eb7', 'AM7'])

        const playOriginalMelody = () => {
          this.sequence.notes.forEach(note => {
            this.synth.triggerAttackRelease(Note.fromMidi(note.pitch), note.endTime - note.startTime, note.startTime)
          })
        }
        const playGeneratedMelody = () => {
          improvisedMelody.notes.forEach(note => {
            this.synth.triggerAttackRelease(Note.fromMidi(note.pitch), note.quantizedEndStep - note.quantizedStartStep, note.quantizedStartStep)
          })
        }
        const originalMelodyButton = document.getElementById('b1a')
        const generatedMelodyButton = document.getElementById('b1b')
        originalMelodyButton.onclick = () => {
          playOriginalMelody()
        }
        generatedMelodyButton.onclick = () => {
          playGeneratedMelody()
        }
      } catch (error) {
        console.error(error)
      }
}

startProgram()
}
  render()
  {
    return (
      <div class="b1a">
      </div>
    );
  }
}

Итак, я хотел бы видеть кнопки, которые приводят к тому, что данные midi переведено.

исходный код, который я пытаюсь перевести на React: https://github.com/FunmiOjo/pep-magenta/blob/master/index.js

...