Меня всегда интриговал творческий потенциал искусственного интеллекта (ИИ). От создания визуального искусства до написания историй ИИ открыл новые возможности для художественного исследования и самовыражения. Именно этот потенциал вдохновил меня на личное путешествие, чтобы научить 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 и узнайте, как искусственный интеллект может помочь раскрыть ваш творческий потенциал в увлекательном мире музыкальной композиции.