未捕获(承诺中)错误:分割数必须均匀地划分轴

Posted

技术标签:

【中文标题】未捕获(承诺中)错误:分割数必须均匀地划分轴【英文标题】:Uncaught (in promise) Error: Number of splits must evenly divide the axis 【发布时间】:2020-06-13 13:43:19 【问题描述】:

总结

    上下文 问题 我尝试了哪些方法来修复此错误? 如何重现此错误(+ 所需数据)? 我的问题 来源

上下文

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

问题

我对@9​​87654322@ 的调用触发了以下错误:

Uncaught (in promise) 错误:分割数必须均分轴。 在 C 处(音乐:22) 在 split_ (音乐:22) 在 Module.split (音乐:22) 在 t.sampleRnn(音乐:83) 在音乐:83 在音乐:22 在 t.scopedRun(音乐:22) 在 t.tidy(音乐:22) 在 Module.$e (音乐:22) 在 t。 (音乐:83)

我尝试过什么来修复这个错误?

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

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

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

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

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

    打开浏览器,打开这个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>

【问题讨论】:

您没有处理承诺拒绝,请尝试使用异步等待从 try catch 内部访问 loadMidi() @codefreaK 好吧,我已将loadMidi(); 行替换为:try loadMidi(); catch(error) console.log(error); 【参考方案1】:

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

【讨论】:

感谢您的回答。我的问题是我没有指明笔记序列的时间:) 好的,很高兴听到您解决了它!似乎错误消息不是很有帮助:) 是的 :) 哈哈哈 :)

以上是关于未捕获(承诺中)错误:分割数必须均匀地划分轴的主要内容,如果未能解决你的问题,请参考以下文章

错误:`未捕获(承诺中)类型错误:无法读取未定义的属性'doc'`

GraphQL + Apollo 错误:未捕获(承诺中)

错误::未捕获(承诺中)类型错误:无法读取未定义的属性“内容”

405 - 未捕获(承诺中)错误:请求失败,状态码为 405

未捕获(承诺中)类型错误:无法读取未定义的属性“uid”

错误:未捕获(承诺中)类型错误:n.swapComponent 不是函数