iOS Dev IQ

iOS Dev IQ 

Алгоритмы, код, UI, разбор сложных тем

395subscribers

92posts

Showcase

3

Создаём музыку бесплатно: как я упаковал MusicGen в нативное приложение для MacOS (Swift + Python и щепотка шейдеров)

Вчера холодным зимним вечером смотрел ролик на ютубе, услышал ненавязчивую музыку и вспомнил про опрос в нашем канале.
Стало интересно, можно ли создать собственный генератор без регистрации и смс без подписок, и короткий ответ - да, можно.
Простой рецепт, из которого можно создать более-менее приемлемый вариант:
Движок - Python + Apple MLX (кстати, сначала пробовал без этого и очевидно упёрся в проблему использования GPU на Apple Silicon).
В качестве модели заттачил MusicGen Small (можно потяжелее).
Обёртку запилил на SwiftUI и добавил немного красоты для фона.
Проблемы, которые пришлось решать:
Оригинальный скрипт юзал библиотеку scipy для сохранения звука (а это потенциально ещё 100 метров допзависимостей). В качестве норм решения прокатило переписать модуль сохранения звука audio.pyна чистом Python (wave + numpy).
Упаковка для приложения:
С этим ожидаемо было больше всего проблем - начиная от того, что чёртов питон постоянно терял файлы при импорте или вовсе зависимости были кривыми, пришлось с напильником фигачить по очереди каждый вручную (в итоге просто скопировал с репы).
Вся магия внутри самого приложения происходит с помощью Process:
В итоге остановился на 4 доступных параметрах (можно меньше, больше к сожалению, вряд ли):
process.arguments = [promptText, selectedStyle, outputURL.path, durationString]
В качестве промпта можно использовать любой вариант музыки, который вам нравится, для стиля в целом тоже. У меня, например, сейчас несколько пресетов: от саундтреков до Lo-Fi.
С длительностью все сложнее: есть и ограничения модели, и сам трансформ происходит не слишком понятно на первый взгляд, сам модуль принимает шаги: steps = int(duration_sec * 50). 
И вообще максимальная длительность ограничена типом модели, так что тут тоже пришлось немного подкрутить.
Так или иначе, в итоге получилось завести проект, который генерит безлимитно музыку без использования сторонних решений, доп. зависимостей, подписок и чего-либо ещё.
На видосе приложил, как получившийся проект работает в реальном времени (у меня M1 Max).
🛠 Расширенная инструкция и пример кода (а также все необходимые скрипты для настройки) уже в Notion.
Классный пост, очень прикольно получилось. Заметил пару моментов: не распаковывается all_scripts.zip и после "Но если вам лень и вы хотите просто посмотреть, как работает проект, тут есть секретная ссылка:" пусто
Игорь Клюжев, посмотрю чуть позже, спасибо за комментарий)
Игорь Клюжев, проверил ещё раз, архив со скриптами корректно распаковывается) Можешь в лс здесь на бусти прислать скриншот ошибки, если она есть - как у тебя выглядит?
Subscription levels3

Мастер

$13.7 per month
• Ранний доступ к приложению-компаньону
• Доступ к закрытому чату в iOS Dev
 с самыми важными постами.
• Доступ ко всем постам на бусти сразу же.
• Доступ к другим ресурсам в будущем одним из первых.
• Доступ к notion и всем материалам.
+ chat

Архитектор

$27.3 per month
• Ранний доступ к приложению-компаньону
• Доступ к закрытому чату в iOS Dev
 с самыми важными постами.
• Доступ ко всем постам на бусти сразу же.
• Доступ к другим ресурсам в будущем одним из первых.
Возможность предлагать свои темы.
• Возможность комментирования материалов в notion.
+ chat

Инженер

$82 per month
Подписка для тех, кто готов поддержать развитие канала по максимуму, так как считает это правильным. 

Преимущества содержат все то, что на предыдущих уровнях.

Но с возможностью доступа в будущем к эксклюзивам.

• Ранний доступ к приложению-компаньону
• Доступ к закрытому чату в iOS Dev с самыми важными постами.
• Доступ ко всем постам на бусти сразу же.
• Доступ к другим ресурсам в будущем одним из первых.
• Возможность комментирования материалов в notion.
+ chat
Go up