Меня всегда интриговал творческий потенциал искусственного интеллекта (ИИ). От создания визуального искусства до написания историй ИИ открыл новые возможности для художественного исследования и самовыражения. Именно этот потенциал вдохновил меня на личное путешествие, чтобы научить ChatGPT — языковую модель AI от OpenAI — сочинять музыку, используя уникальное представление MIDI-файлов на основе токенов.

Превращение MIDI-файлов в токены

Чтобы научить ChatGPT генерировать музыку, мне нужен был формат, который мог бы представлять MIDI-файлы так, чтобы их мог понять ИИ. Итак, я преобразовал MIDI-файлы в строковое представление токена. Формат этих токенов следующий:

инструмент:скорость:высота ожидание:время

Первый токен представляет либо воспроизводимую, либо отпущенную ноту (note_on или note_off), а второй токен указывает на паузу между событиями. Например:

фортепиано: v127: C5 фортепиано: v127: G # 2 ждать: 192 фортепиано: v0: G # 2

Эта последовательность означает, что проигрываются две ноты, за которыми следует пауза в 192 такта, а затем отпускание ноты G#2.

Чтобы упростить процесс преобразования, я создал функции Python, которые могут преобразовывать MIDI-файл в этот формат токена и наоборот:

def pitch_to_note(pitch):
    note_names = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B']
    octave = (pitch // 12) - 1
    note = note_names[pitch % 12]
    return note + str(octave)

def note_to_pitch(note):
    note_names = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B']
    pitch_class = note[:-1]  # Get the note name without the octave number
    octave = int(note[-1])   # Get the octave number
    pitch = (octave + 1) * 12 + note_names.index(pitch_class)
    return pitch

def midi_to_token(midi_file):
    midi = mido.MidiFile(midi_file)
    
    all_messages = []
    for track in midi.tracks:
        track_time = 0
        for msg in track:
            track_time += msg.time
            if msg.type == 'note_on' or msg.type == 'note_off':
                all_messages.append((msg, track_time))
                
    all_messages.sort(key=lambda x: x[1])  # Sort messages by time
    
    tokens = []
    prev_time = 0
    for msg, time in all_messages:
        if time > prev_time:
            wait_token = f"wait:{time - prev_time}"
            tokens.append(wait_token)
        if msg.type == 'note_on':
            note_token = f"piano:v{msg.velocity}:{pitch_to_note(msg.note)}"
        elif msg.type == 'note_off':
            note_token = f"piano:v0:{pitch_to_note(msg.note)}"
        tokens.append(note_token)
        prev_time = time
        
    return tokens



def token_to_midi(tokens, midi_file):
    midi = mido.MidiFile()
    track = mido.MidiTrack()
    midi.tracks.append(track)

    current_time = 0

    for token in tokens:
        if token.startswith("wait:"):
            time = int(token.split(":")[1])
            current_time += time
        elif token.startswith("piano:"):
            velocity,note = token.split(":")[1:]
            print(velocity[1:])  
            note = note_to_pitch(note)
            print(note)
            velocity = velocity[1:]
            note, velocity = int(note), int(velocity)
            time = current_time
            if velocity > 0:
                msg = mido.Message('note_on', note=note, velocity=velocity, time=time)
            else:
                msg = mido.Message('note_off', note=note, velocity=0, time=time)
            track.append(msg)
            current_time = 0  # Reset the current_time after appending the message

    midi.save(midi_file)

Функция pitch_to_note принимает целочисленное значение высоты тона и преобразует его в название ноты, например «C4» или «G#2». И наоборот, функция note_to_pitch преобразует имя ноты обратно в целочисленное значение высоты тона. Функция midi_to_token читает MIDI-файл, извлекает соответствующие сообщения note_on и note_off и преобразует их в формат токена. Наконец, функция token_to_midi принимает список токенов и генерирует MIDI-файл на основе предоставленной последовательности токенов.

Создание музыки с помощью ChatGPT

Создав представление MIDI-файлов на основе токенов, я решил познакомить ChatGPT с миром музыкальной композиции. Я предоставил ИИ следующую подсказку, а затем фрагмент фортепианной пьесы в этом формате токена и попросил его продолжить композицию:

«Я создал функцию Python, которая преобразует миди-файлы в строковое токен-представление файла. Формат этих токенов следующий:

инструмент:скорость:шаг
ожидание:время

Первый маркер соответствует событию миди-сообщения note_on или note_off, а второй — паузе между событиями. Пример последовательности: фортепиано:v127:C5 фортепиано:v127:G#2 ожидание:192 фортепиано:v0:G#2 Это будет соответствовать двум событиям note_on, за которыми следует ожидание 192, а затем событие note_off для G#. 2. Если вы понимаете это представление, я вставлю часть фортепианной пьесы в этом формате токена. Я бы хотел, чтобы вы продолжили эту часть. Пожалуйста, подтвердите, что вы поняли инструкции, и я продолжу. Дайте мне знать, если возникнут вопросы».

ChatGPT ответил:

«Я понимаю предоставленные вами инструкции и формат токена. Пожалуйста, вставьте часть фортепианной пьесы в этом формате токена, и я сделаю все возможное, чтобы продолжить эту пьесу для вас. Если у вас есть дополнительная информация или контекст, не стесняйтесь поделиться ею.

Затем я смог вставить токенизированный отрывок из фортепианной пьесы, чтобы он продолжился. Моя цель состояла в том, чтобы ChatGPT создавал музыку, которая была выразительной, эмоциональной, гармоничной и последовательной, а также отображала вариативность и хорошо продуманную структуру.

Когда ChatGPT обрабатывал предоставленные токены, он использовал свои обширные знания языка и шаблонов для интерпретации и анализа музыкальной информации. Затем он сгенерировал новые токены, которые продолжают произведение, стремясь достичь желаемых качеств выразительности, эмоций и гармонии.

Творческое сотрудничество с ИИ

Когда я изучил сгенерированные композиции, стало ясно, что у ChatGPT есть способности к созданию музыки, соответствующей моим критериям. Фортепианные пьесы, созданные искусственным интеллектом, демонстрируют различные музыкальные элементы, такие как гармония, мелодия и ритм, а также вариации и структуру. Вот пример выходных токенов:

“фортепиано:v0:C3 фортепиано:v127:G#3 ждать:192 фортепиано:v0:G#3 фортепиано:v127:C4 ждать:192 фортепиано:v0:C4 фортепиано:v127:G#4 ждать:192 фортепиано :v0:G#4 фортепиано:v127:F5 фортепиано:v0:G#5 фортепиано:v127:D#5 ждать:192 фортепиано:v0:F5 фортепиано:v127:C5 фортепиано:v0:D#5 фортепиано:v127:G #4 ждать:192 фортепиано:v0:C5 фортепиано:v127:F4 фортепиано:v0:G#4 фортепиано:v127:D#4 ждать:192 фортепиано:v0:F4 фортепиано:v127:C#4 фортепиано:v0:D# 4 фортепиано: v127:G#3 ждать:192 фортепиано:v0:C#4 фортепиано:v127:C4 фортепиано:v0:G#3 фортепиано:v127:G#2 ждать:192 фортепиано:v0:C4 фортепиано:v127:F3 фортепиано:v0:G#2 фортепиано:v127:D#3 ожидание:192 фортепиано:v0:F3 фортепиано:v127:C3 фортепиано:v0:D#3 фортепиано:v127:A#2 ожидание:192 фортепиано:v0:C3 фортепиано :v127:G#4 фортепиано:v127:G#2 фортепиано:v0:A#2 фортепиано:v127:C5 ждать:192 фортепиано:v0:G#4 фортепиано:v0:G#2 фортепиано:v127:F4 фортепиано:v127 :F3 ждать:192 фортепиано:v0:C5 фортепиано:v0:F3 фортепиано:v127:D#4 фортепиано:v127:D#3 ждать:192 фортепиано:v0:F4 фортепиано:v127:C#4 фортепиано:v0:D# 4 фортепиано: v127:G#3 ждать:192 фортепиано:v0:C#4 фортепиано:v127:C4 фортепиано:v0:G#3 фортепиано:v127:G#2 ждать:192 фортепиано:v0:C4 фортепиано:v127:F3 фортепиано:v0:G#2 фортепиано:v127:D#3 ожидание:192 фортепиано:v0:F3 фортепиано:v127:C3 фортепиано:v0:D#3 фортепиано:v127:A#2 ожидание:192 фортепиано:v0:C3 фортепиано :v127:G#4 фортепиано:v127:G#2 фортепиано:v0:A#2 фортепиано:v127:C5 ждать:192 фортепиано:v0:G#4 фортепиано:v0:G#2 фортепиано:v127:F4 фортепиано:v127 :F3 ждать:192 фортепиано:v0:C5 фортепиано:v0:F3 фортепиано:v127:D#4 фортепиано:v127:D#3 ждать:192 фортепиано:v0:F4 фортепиано:v127:C#4 фортепиано:v0:D# 4 фортепиано: v127:G#3 ждать:192 фортепиано:v0:C#4 фортепиано:v127:C4 фортепиано:v0:G#3 фортепиано:v127:G#2 ждать:192 фортепиано:v0:C4 фортепиано:v127:F3 фортепиано:v0:G#2 фортепиано:v127:D#3 ожидание:192 фортепиано:v0:F3 фортепиано:v127:C3 фортепиано:v0:D#3 фортепиано:v127:A#2 ожидание:192 фортепиано:v0:C3 фортепиано :v127:G#3 фортепиано:v127:G#2 ожидание:192 фортепиано:v0:G#3 фортепиано:v127:C4 фортепиано:v0:G#2 фортепиано:v127:F4 ожидание:192 фортепиано:v0:C4 фортепиано: v127:D#4 фортепиано:v0:F4 фортепиано:v127:G#4 ожидание:192 фортепиано:v0:D#4 фортепиано:v127:C5 фортепиано:v0:G#4 фортепиано:v127:F5 ожидание:192 фортепиано:v0 :C5 фортепиано:v127:D#5 фортепиано:v0:F5 фортепиано:v127:G#5 ожидание:192 фортепиано:v0:D#5 фортепиано:v127:C6 фортепиано:v0:G#5 фортепиано:v127:F6 ожидание: 192 дюйма

Важно отметить, что ChatGPT в первую очередь обучен моделированию языка, и его понимание теории музыки и композиции может быть не таким глубоким, как у модели, специально разработанной для создания музыки. Однако, учитывая его языковую основу, креативность и музыкальность, проявленные в его композициях, были действительно впечатляющими.

Взгляд в будущее: будущее музыкальной композиции с помощью искусственного интеллекта

Мое приключение с ChatGPT показало мне захватывающий потенциал ИИ в области музыкальной композиции. Такой подход может послужить ценным инструментом для музыкантов и композиторов, помогая им генерировать новые идеи, расширять существующие композиции или создавать совершенно новые музыкальные произведения.

Эта методология потенциально может быть распространена на другие инструменты и даже на полные оркестровые аранжировки. Адаптируя представление на основе токенов для включения дополнительных музыкальных элементов, таких как динамика, артикуляция и фразировка, композиции, созданные ИИ, могут стать еще более сложными и выразительными.

Более того, с непрерывным развитием технологий искусственного интеллекта качество музыкальной композиции с помощью искусственного интеллекта будет только улучшаться. Вскоре мы можем увидеть сотрудничество между людьми-музыкантами и искусственным интеллектом, результатом которого станет уникальная, инновационная и эмоционально насыщенная музыка.

В заключение

Обучение ChatGPT написанию музыки было захватывающим и поучительным опытом. Использование представлений на основе токенов для MIDI-файлов оказалось успешным и универсальным подходом, позволяющим ИИ создавать выразительную и гармоничную музыку. Хотя возможности ИИ в музыкальной композиции все еще появляются, ясно, что ИИ может сыграть решающую роль, помогая музыкантам расширять свои творческие горизонты.

Поскольку мы продолжаем исследовать пересечение ИИ и музыки, важно помнить, что ИИ не предназначен для замены человеческого творчества, а скорее для его улучшения. Объединив уникальные возможности искусственного интеллекта с человеческой интуицией и эмоциями, мы можем с нетерпением ждать будущего, в котором слияние технологий и искусства приведет к созданию новой захватывающей музыки.

Итак, являетесь ли вы начинающим композитором или опытным музыкантом, попробуйте ChatGPT и узнайте, как искусственный интеллект может помочь раскрыть ваш творческий потенциал в увлекательном мире музыкальной композиции.