<jupyter_start><jupyter_text>演習「MusicVAE」により、独自のコード進行からオリジナルの曲を生成しましょう。  生成には時間がかかるので、「編集」→「ノートブックの設定」→「ハードウェア アクセラレータ」で「GPU」を選択しておきましょう。  このノートブックのコードは、以下のリンク先のコードを参考にしています。  https://g.co/magenta/musicvae-colab  ライブラリのインストール<jupyter_code>!apt-get update -qq && apt-get install -qq libfluidsynth1 fluid-soundfont-gm build-essential libasound2-dev libjack-dev
!pip install -qU pyfluidsynth pretty_midi
!pip install -qU magenta

!gsutil -q -m cp gs://download.magenta.tensorflow.org/models/music_vae/multitrack/* /content/<jupyter_output><empty_output><jupyter_text>ライブラリの導入<jupyter_code>import numpy as np
from google.colab import files

import magenta.music as mm
from magenta.models.music_vae import configs
from magenta.models.music_vae.trained_model import TrainedModel
from magenta.music.sequences_lib import concatenate_sequences

import note_seq<jupyter_output><empty_output><jupyter_text>各設定値<jupyter_code>BATCH_SIZE = 4  # 一度に扱うデータ数
Z_SIZE = 512  # 潜在変数の数
TOTAL_STEPS = 512  # コードのベクトル化に使用
CHORD_DEPTH = 49  # コードのベクトル化に使用
SEQ_TIME = 2.0  # 各NoteSequenceの長さ<jupyter_output><empty_output><jupyter_text>関数の設定<jupyter_code>def trim(seqs, seq_time=SEQ_TIME):  # NoteSequenceの長さを揃える
    for i in range(len(seqs)):
        seqs[i] = mm.extract_subsequence(seqs[i], 0.0, seq_time)
        seqs[i].total_time = seq_time

def encode_chord(chord):  # コードの文字列をベクトルに変換
    index = mm.TriadChordOneHotEncoding().encode_event(chord)
    encoded = np.zeros([TOTAL_STEPS, CHORD_DEPTH])
    encoded[0,0] = 1.0
    encoded[1:,index] = 1.0
    return encoded

def set_instruments(note_sequences):  # 楽器の調整
    for i in range(len(note_sequences)):
        for note in note_sequences[i].notes:
            if note.is_drum:
                note.instrument = 9<jupyter_output><empty_output><jupyter_text>Conditionalなモデルによるオリジナル曲の作曲<jupyter_code>config = configs.CONFIG_MAP["hier-multiperf_vel_1bar_med_chords"]
model = TrainedModel(
    config,
    batch_size=BATCH_SIZE,
    checkpoint_dir_or_path="/content/model_chords_fb64.ckpt")<jupyter_output><empty_output><jupyter_text>以下のセルでコード進行を変更し、オリジナルの曲を生成しましょう。<jupyter_code>chord_1 = "Dm"
chord_2 = "F"
chord_3 = "Am"
chord_4 = "G"
chords = [chord_1, chord_2, chord_3, chord_4]

num_bars = 32
temperature = 0.2

z1 = np.random.normal(size=[Z_SIZE])
z2 = np.random.normal(size=[Z_SIZE])
z = np.array([z1+z2*t for t in np.linspace(0, 1, num_bars)])  # z1とz2の間を線形補間

seqs = [
    model.decode(
        length=TOTAL_STEPS,
        z=z[i:i+1, :],
        temperature=temperature,
        c_input=encode_chord(chords[i%4])
        )[0]
    for i in range(num_bars)
]

trim(seqs)
set_instruments(seqs)
seq = concatenate_sequences(seqs)

mm.plot_sequence(seq)
mm.play_sequence(seq, synth=mm.fluidsynth)
note_seq.sequence_proto_to_midi_file(seq, "exercise.mid")  #MIDI　データに変換し保存
files.download("exercise.mid")  # ダウンロード<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11482254697286012, 'fraction_numerical': 0.017049408489909535, 'mean_word_length': 5.431767337807607, 'pattern_counts': {'":': 0, '<': 25, '<?xml version=': 0, '>': 25, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '109075', 'license': 'MIT', 'n_tokens_mistral': 1396, 'n_tokens_neox': 1337, 'n_words': 171, 'path': 'section_4/03_exercise.ipynb', 'repo_name': 'EitaroKuwabara/ai_music', 'size': '2874'}