-1

概括

  1. 语境
  2. 问题
  3. 我试图修复这个错误是什么?
  4. 如何重现此错误(+ 所需数据)?
  5. 我的问题
  6. 来源

语境

感谢 MusicRNN chord_pitches_improv,我想生成一个新的 MIDI 文件音符序列。

问题

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

未捕获(承诺中)错误:分割数必须均匀地划分轴。在 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. (音乐:83)

我试图修复这个错误是什么?

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

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

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

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

  3. 在同一目录中,创建一个文件,标题为index.html:在此 HTML 文件中复制/粘贴下面提供的代码(“源”部分)

  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>
4

1 回答 1

1

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

于 2020-07-26T18:11:30.920 回答