Uncaught (in promise) Error: Number of splits must evenly divide the axis

Uncaught (in promise) Error: Number of splits must evenly divide the axis

总结

  1. 上下文
  2. 问题
  3. 我尝试过什么来修复这个错误?
  4. 如何重现此错误(+ 所需数据)?
  5. 我的问题
  6. 来源

上下文

感谢 MusicRNN chord_pitches_improv。

我想生成 MIDI 文件的新音符序列

问题

我对 music_rnn.continueSequence 的调用触发了以下错误:

Uncaught (in promise) Error: Number of splits must evenly divide the axis. at C (music:22) at split_ (music:22) at Module.split (music:22) at t.sampleRnn (music:83) at music:83 at music:22 at t.scopedRun (music:22) at t.tidy (music:22) at Module.$e (music:22) at t. (music:83)

我是如何修复这个错误的?

没什么,因为我什至不明白这个错误。 注意:我有 MuseScore。所以如果必须在 MIDI 文件中更改某些内容,我可以做到。

如何重现此错误(+ 所需数据)?

  1. 下载以下 MIDI 文件:https://a.uguu.se/kP1iJ4JVeTrD_b.mid 并重命名为 "b.mid"

  2. 创建一个用于存储 MIDI 文件的目录

  3. 在同一目录中,创建一个名为 index.html 的文件:copy/paste 在此 HTML 文件中,下面提供的代码(第 "Sources" 节)

  4. 打开浏览器,打开这个HTML文件:我的脚本会自动执行,会触发错误

我的问题

这个错误是什么意思?我该如何解决?我应该更改 MIDI 文件中的某些内容吗(如果是:什么?怎么做?我可以使用 MuseScore 来做吗?)?

来源

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Music</title>
    <script src="https://cdn.jsdelivr.net/npm/@magenta/music"></script>
    <script src="https://unpkg.com/@tonejs/midi"></script>
</head>
<body>

<script>
    loadMidi = async function() {
        const sequence = {'notes': []}
        const midi = await Midi.fromUrl("b.mid")
        midi.tracks.forEach(track => {
          const notes = track.notes
          notes.forEach(note => {
            if(note.midi < 48) {
                note.midi = 48
            }
            if(note.midi > 83) {
                note.midi = 83
            }

            sequence['notes'].push(
                {
                    pitch: note.midi,
                    velocity: note.velocity * 100,
                    startTime: note.time,
                    endTime: note.time + note.duration
                }
            )
          })
        })

         try {
            const quantizedSequence = mm.sequences.quantizeNoteSequence(sequence, 1)
            const improvCheckpoint = 'https://storage.googleapis.com/magentadata/js/checkpoints/music_rnn/chord_pitches_improv'
            const music_rnn = new mm.MusicRNN(improvCheckpoint)
            const prepareMusic = async() => {
                await music_rnn.initialize()
                var improvisedMelody = await music_rnn.continueSequence(quantizedSequence, 60, 1.1, ['Bm', 'Bbm', 'Gb7', 'F7', 'Ab', 'Ab7', 'G7', 'Gb7', 'F7', 'Bb7', 'Eb7', 'AM7'])
                improvisedMelody.notes.forEach(n => n.velocity = 100)
                var midi_bytes_array = mm.sequenceProtoToMidi(improvisedMelody)
                saveByteArray("generated_music.midi", midi_bytes_array);
            }

            prepareMusic()

          } catch (error) {
            console.error(error)
        }

       }
       loadMidi();

     function saveByteArray(reportName, byte) {
            var blob = new Blob([byte], {type: "audio/midi"});
            var link = document.createElement('a');
            link.href = window.URL.createObjectURL(blob);
            var fileName = reportName;
            link.download = fileName;
            link.click();
        };
    </script>

</body>
</html>

当我尝试量化已经采用量化格式的音符序列时,我遇到了同样的错误。值得检查一下你的音符序列格式。