-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 ファイルの何かを変更する必要がありますか?

ソース

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