Введение
В этой статье мы исследуем, как можно использовать ИИ для анализа звуковых волн и автоматического создания музыки.
Мой вопрос
Я люблю музыку. В детстве я брал уроки игры на барабанах в средней школе и колледже. Я также создаю музыку на своем компьютере, используя FL Studio и Virtual DJ. На протяжении многих лет я пытался разучить несколько песен на скрипке, но мне никогда не удавалось добиться большого успеха, что привело меня к следующему вопросу:
Может ли компьютер играть на инструменте так же, как опытный музыкант?
Чтобы ответить на этот вопрос, нам сначала нужно изучить тему компьютерного звука.
Компьютерное аудио
Я новичок в аудиотехнике и компьютерной музыке, но за несколько недель обучения я многому научился. Вот несколько важных концепций, о которых я узнал.
- В волновом файле (.wav) хранятся байтовые данные, которые можно использовать для представления звука.
- В формате PCM байтовые данные представляют собой последовательность числовых значений амплитуды со знаком.
- Позиции в последовательности связаны с моментами времени, а изменения значений амплитуды приводят к вибрации динамиков.
- В формате два байта на кадр (или 16-битном формате) каждое числовое значение амплитуды представляется в виде пары байтов. Это позволяет использовать значения амплитуды от -32768 до 32767.
- Используя порядок с прямым порядком байтов, второй байт содержит старшие биты, а первый байт содержит младшие биты.
- Стерео имеет два аудиоканала (например: левое и правое ухо), а моно — один аудиоканал.
Я смог применить эти знания для программного чтения, записи, воспроизведения, копирования и смешивания аудиоданных из нескольких звуковых файлов. Я также смог программно выполнить несколько простых преобразований звука.
Аудио преобразования
Аудио можно преобразовать, манипулируя соответствующей последовательностью значений амплитуды.
Например:
- Для регулировки громкости мы умножаем значения амплитуды на постоянный коэффициент.
- Чтобы объединить два звуковых клипа, мы суммируем значения амплитуд из соответствующих последовательностей.
Мое решение для создания музыки
Для своего побочного проекта я создал компьютерный ИИ, который читает песню и пытается воссоздать ее, используя заданный инструмент.
Если инструмент — скрипка, то программа сначала считывает сэмплы скрипки. Затем программа копирует, преобразует и смешивает эти семплы, чтобы воссоздать оригинальную песню.
Посмотреть пример процесса отдыха на скрипке можно здесь.
Примечание. Сгенерированная скрипка играет ближе к концу видео.
Вы также можете прослушать сгенерированный звук здесь.
Процесс отдыха основан на интуитивной идее. Сэмплы скрипки многократно воспроизводятся с разными интервалами разными способами, чтобы создать звуки, соответствующие фрагментам исходной песни. ИИ определяет, как эффективно выполнить этот процесс, в течение серии раундов. По мере увеличения количества раундов сгенерированный звук все больше и больше напоминает музыку.
Существующие решения
Оказывается, существуют программные решения, которые напрямую конвертируют аудио в MIDI. Это позволяет извлечь мелодию из аудиофайла и транскрибировать ее в композицию. В будущей работе я надеюсь изучить различные подходы к преобразованию аудио в MIDI.
Вот несколько полезных ссылок, которые я нашел.
http://akoff.com/audio-to-midi.html
http://www.justinsalamon.com/melody-extraction.html
Большое спасибо за чтение! Я с радостью приветствую любые мысли, отзывы и комментарии.
Это была моя первая серьезная попытка создать музыку, генерируемую искусственным интеллектом. В будущем я надеюсь узнать больше о существующих технологиях производства музыки и аудиотехники, чтобы усовершенствовать свой подход к созданию музыки.
Я очень признателен всем музыкальным исполнителям, которые поделились своими песнями и сэмплами.
ДЖБА – https://spot1techno.newgrounds.com
Карлос Вакеро – https://freesound.org/people/Carlos_Vaquero