概要
- 環境
- 問題
- このバグを修正するために何を試みましたか?
- このバグを再現する方法 (+ 必要なデータ)?
- 私の質問
- ソース
環境
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 ファイルで何かを変更する必要がある場合は、それを行うことができます。
このバグを再現する方法 (+ 必要なデータ)?
次の MIDI ファイルをダウンロードします: https://a.uguu.se/kP1iJ4JVeTrD_b.mid名前を「b.mid」に変更します。
MIDIファイルを保存するディレクトリを作成します
この同じディレクトリに、次のタイトルのファイルを作成します
index.html
。この HTML ファイルに、以下に示すコードをコピーして貼り付けます (「ソース」セクション)。ブラウザを開き、この 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>