Спойлер: Никаких банальных ИИ-оберток, где текст конвертируется в звук через API. Только хардкорная хирургия нейросетей, кросс-модальные мосты и перехват мыслей LLM в реальном времени.
За последний год Hugging Face превратился в конвейер одинаковых проектов: берем Llama/Gemma, прикручиваем к ней интерфейс на Gradio, называем это стартапом. Мы для нашего виртуального музыкального артиста Livadies решили пойти другим путем. Мы задались вопросом: как звучит чистая мысль нейросети, если не переводить ее в текст? И как звучит математическая геометрия доисторического камня или кожи рептилии?
Чтобы это выяснить, нам пришлось вскрывать архитектуры SOTA-моделей и сшивать их напрямую на уровне тензоров. Вот два наших главных инженерных эксперимента.
Эксперимент 1: PaleoSonic Engine (Слушаем голую математику)
Задача: Заставить нейросеть сгенерировать звук макро-текстуры (например, куска янтаря) НАПРЯМУЮ, минуя текстовое описание.
Обычно пайплайн выглядит так: Image -> Text (LLM) -> Audio. Это долго, грязно и убивает суть картинки. Мы решили сделать прямой мост: Vision Latent -> Audio Latent.
Мы взяли зрительную кору от google/siglip-base-patch16-224 и генератор звука от facebook/musicgen-small. Обе модели мы перевели в формат bfloat16, чтобы они влезли в бесплатные 16 ГБ RAM на Hugging Face.
Магия сшивания:
Мы создали кастомный мост nn.Linear, который переводит 196 визуальных патчей картинки в 196 звуковых векторов. Но функция generate() в MusicGen защищена от чужих тензоров. Что мы сделали? Применили Monkey Patching.
Мы буквально на лету подменили оригинальный текстовый энкодер MusicGen на нашу функцию-троян:
Python
# Сохраняем оригинальный "мозг" original_text_encoder = self.audio_decoder.text_encoder.forward # Создаем класс-подделку class VisualThoughts: def __init__(self, hidden_states): self.last_hidden_state = hidden_states def __getitem__(self, idx): return [self.last_hidden_state][idx] def spoofed_text_encoder(*args, **kwargs): # Подсовываем визуальные тензоры вместо текста! return VisualThoughts(audio_conditioning) # Заражаем генератор self.audio_decoder.text_encoder.forward = spoofed_text_encoder
MusicGen "думал", что читает 196 токенов текста, а на самом деле поглощал чистую геометрию пикселей.
Почему звук такой странный? Если вы зайдете в этот проект, вы услышите резкий, скрежещущий шум, похожий на модем из 90-х. Это необработанный математический звук. Наш тензорный мост заполнился случайными весами (random initialization), и мы не стали его дообучать. Вы слышите физическое столкновение двух архитектур: сырую, грубую трансляцию геометрии картинки в акустические волны без фильтров и прикрас. Это звук самой логики машины.
? Попробовать: PaleoSonic_Engine на Hugging Face
Эксперимент 2: Neural-Analog Engine (Эмбиент из мыслей ИИ)
После первого эксперимента мы поняли: прямое сшивание дает концептуальный, но "грязный" звук. Мы решили сделать шаг в сторону изящества и вернуть звуку красоту, не теряя связи с ИИ.
Мы полностью выбросили нейросети, генерирующие аудио (типа MusicGen или AudioLDM). Вместо этого мы превратили LLM в виртуозного музыканта, который крутит ручки классического аналогового синтезатора (DSP).
Мы взяли открытую Qwen/Qwen2.5-1.5B-Instruct. Идея: пока модель генерирует текст по промпту (например, "Тишина замерзшей квантовой звезды"), мы с помощью PyTorch Forward Hooks вклиниваемся в ее 15-й слой (центр абстрактного мышления) и воруем значения активаций нейронов в реальном времени.
Python
neural_activations = [] # Функция-шпион для перехвата мыслей def steal_thoughts_hook(module, input, output): # Берем текущее состояние нейронов current_thought = output[0].detach().cpu().to(torch.float32).numpy() compressed_thought = np.mean(current_thought, axis=1)[0] neural_activations.append(compressed_thought) # Втыкаем "шприц" в 15-й слой Qwen hook_handle = model.model.layers[15].register_forward_hook(steal_thoughts_hook)
Затем мы прогоняем эти сырые векторы через математический осциллятор (numpy + scipy.signal).
Почему этот звук такой приятный?
В отличие от первого проекта, здесь звук генерируется законами физики (чистые синусоиды, плавное затухание, математически точные фильтры). Нейросеть выступает лишь как дирижер. Изменение тональности, частота нот, сдвиги фаз — всё это модулируется буквальной пульсацией нейронов Qwen 2.5. Получился кристально чистый, кинематографичный Dark Ambient, где музыка — это процесс вычисления графов внимания.
? Попробовать: Neural-Analog-Engine на Hugging Face
Зачем это все?
Вся эта архитектурная дичь была создана как экспериментальный baseline-инструментарий для виртуального артиста Livadies. Мы не хотим генерировать «попсу по кнопке». Мы исследуем, как звучит машинное подсознание и как слияние старого (аналоговый синтез/палео-текстуры) и нового (Latent Space) рождает искусство.
Залетайте в наши Спейсы, ломайте их, слушайте разницу между сырой математикой тензоров и кинематографичным DSP, управляемым мыслями LLM. Будем рады обсудить в комментах ваши способы изящного обхода защиты .generate().
ioleynikov
бред сумасшедшего какой то ! Что вы там курите? Внутренние законы визуальных композиций форм, цветов, пространственных положений имеют совершенно отличную от звука и музыки природу. Генерация звука должна опираться на кластеризацию и статистику векторных представлений эмбеддингов звучания голосов лучших певцов, музыкальных инструментов, синтезаторов. Удачным расположением формант, спектров. Получить эти данные можно из оценок композиций музыкантами, звукорежиссерами, любителями музыки. Плюс совершенно необходимо подставлять на вход сети не случайные значения векторов, а осмысленные в плане знаний различных музыкальных гармоний, ритмов: классика, джаз, авангард, .. В противном случае вы получите на выходе какофонию не имеющую никакого эстетического значения, смысла и ценности. Я сам занимаюсь эпизодически этой темой для генерации новых голосов и звуковых эффектов. Но все мои работы базируются исключительно на модификациях, объединении лучших образцов, а не на генераторах случайных чисел.
Livadies Автор
Вы описываете классический пайплайн для коммерческого продакшена (в духе Suno или Udio). Если бы мы делали коммерческий продукт — шли бы именно этим путем, через кластеризацию и форманты.
Но цель этой статьи — чистый R&D и Generative Art. Мы намеренно ломаем архитектуру (Circuit Bending) и используем случайные тензоры как аналог белого шума или сырого сигнала в модульном синтезаторе. Мы не ищем классическую гармонию, мы ищем управляемый хаос и новые глитч-текстуры через PyTorch Hooks. Для генерации «правильных» скрипок есть другие инструменты
ioleynikov
Ну вы блин даете. Как же вы, точнее ваша сеть, научится генерировать действительно интересные вещи? Кто и как будет отличать (управлять) хаосом ? Я как раз предлагаю не генерацию классических скрипок, синтов, а разумное развитие звуковых форм на базе внутренних законов гармонии самих звуков, а не случайных чисел. Так можно искать 1000 лет и ничего не найти, да кто конкретно будет искать, Любой музыкант или любитель услышит хаос и уйдет с вашего сайта. Еще немного другой момент по архитектуре сервиса. Я использую генерацию на стороне клиента при помощи расширений браузера, а сервер только помнит и обменивается между пользователями настройками нейросетей. Это более масштабируемая и гибкая схема.