Tłumaczenie automatyczne · Oryginał angielski

Kompozycja - Muzyka & amp; Produkcja audio

Trzy moduły on- device obejmują stronę muzyczną i audio-produkcyjną speech-swift, wszystkie uruchomione native na Apple Silicon poprzez MLX lub CoreML. MAGNET generuje klipy muzyczne 30- second z impulsu tekstowego. Separacja źródeł (Open- Unmix) dzieli utwór stereo na cztery łodygi (wokale / bębny / basy / inne). Wzmacnianie mowy (DeepFilterNet3) usuwa hałas tła z mowy w czasie rzeczywistym.

ModułZadanieWsteczWyjścieCLI
MAGNETTekst → muzykaMLX (INT4 / INT8)30 s @ 32 kHz monospeech compose
Open- UnmixSeparacja macierzystaMLX4 stery @ 44.1 kHz stereospeech separate
DeepFilterNet3Tłumienie hałasuCoreML (Neural Engine)48 kHz, czas realnyspeech denoise

MAGNET - text- to- music generation

MLX Swift port Mety MAGNET (Zamaskowane Audio Generation z pojedynczym transformatorem nieautoregresywnym). Generuje klipy 30 z muzyki mono 32, z bezpłatnej formy, angielskiej szybkości - "happy rock", "energy EDM z syntetycznym ołowiu", lub bogaty tekst opisowy dla czystszych wyników.

Architektura

Trzy załadowane komponenty, pobrane przy pierwszym wywołaniu:

SkładnikRolaŹródło
Dekoder MAGNET LMZamaskowany transformator nieautoregresywny ponad 4 kodeki EnCodec. 24 warstwy (Małe, 300M) lub 48 (Średnio, 1.5B). Wyliczone projekcje Q / K / V / out + liniowe linie FFN (MLX- affine, grupa 64).aufklarer/MAGNeT-{Small,Medium}-30secs-MLX-{4,8}bit
Kodowanie tekstu T5-base110M- enkoder parametru dla kondycjonowania tekstu. FP32 (ścieżka enkoder- tylko; bez dekodera, bez głowy LM).t5-base
Dekoder EnCodec 32 kHzDekoder SEANET (Conv1d / ConvTranspose1d / ResnetBlock 2- warstwa LSTM) + 4-codebook Euklidean RVQ. Mapy dyskretne znaczniki LM powrót do 32 kHz faveform.mlx-community/encodec-32khz-float32

Dekodowanie równoległe maskowane

W przeciwieństwie do autoregresywnego rodzeństwa MusicGen, MAGNET działa 50 przelotowe przejścia całkowite (domyślny podział [20, 10, 10, 10] w kodach 4) z cosine- planowanym remaskingiem, bezklasycznym annealizacją naprowadzania oraz przestronnych lokalnych okien uwagi. Etap 0 posiada pełną uwagę; etapy 1- 3 korzystają z lokalnego |q − k| ≤ 5 okno, ponieważ wyższe kodebooki tylko dopracować szczegóły.

Warianty

WariantParamsLM na dyskuSzczyt RSSŚciana (seria M-, 30 s)RTF
small-int4300M287 MB- 1,4 GB- 10,8 s0.36×
small-int8300M425 MB- 1,5 GB- 11 s0.37×
medium-int41,5B1,36 GB- 2,2 GB- 36 s1.20×
medium-int81,5B2.10 GB~ 3,0 GB- 36 s1.20×

RTF poniżej 1.0 = szybciej niż w czasie rzeczywistym. Ilościowanie ledwo porusza się wall- zegar - uwaga dominuje, a nie liniowe projekcje - więc praktyczną wygraną z INT4 jest pamięć, a nie latencja.

Szybki start

import MAGNeTMusicGen

let model = try await MAGNeTMusicGen.fromPretrained(variant: .smallInt4)
let pcm = model.generate(text: "energetic upbeat rock anthem with electric guitar riffs, driving drums, bass groove")
// pcm: [Float] length 960_000 (30 s × 32 kHz mono)

try WAVWriter.write(samples: pcm, sampleRate: 32_000,
                    to: URL(fileURLWithPath: "out.wav"))

CLI

# Default: small-int4 (~10 s on M-series for 30 s of audio)
speech compose "happy rock" -o happy_rock.wav

# Larger model — better prompt following, ~3.5× slower
speech compose "lo-fi hip hop with mellow piano and warm vinyl crackle" \
    --variant medium-int4 -o lofi.wav

# Reproducible
speech compose "energetic EDM with synth lead" --seed 42 -o edm.wav

Flagi: --variant {small,medium}-{int4,int8}, --temperature (annealed, domyślnie 3.0), --top-p (domyślnie 0.9), --cfg-max / --cfg-min (domyślnie 10.0 / 1.0), --steps "20,10,10,10" (iteracje per- codebook), --seed.

Szybkoinżynieryjny napiwek

Krótkie znaczniki jak "happy rock" pracy, ale czuć się szczupły. Opisowe sugestie, które wymieniają instrumenty + tempo + nastrój zauważalnie poprawić spójność - w naszym wysokiej jakości zamiatanie bogatszy promień dał wyższy zero- przekroczenie stawki (0.116 vs 0.093, czyli więcej high-frequency detal) i zero wycinki. Porównaj:

  • "happy rock" - cienkie
  • "energetic upbeat rock anthem with electric guitar riffs, driving drums, bass groove" - bogatszy, zazwyczaj lepszy

Zespoły i licencje

Wszystkie cztery pakiety MLX pochodzą z facebook / magnet-small-30secs oraz facebook / magnet-medium-30secs i odziedziczyć licencję Mety: CC- BY- NC 4.0 - tylko do zastosowań niekomercyjnych. Generowane audio ma takie same ograniczenia.

Separacja źródeł - Open- Unmix (4 łodygi)

Open- Unmix HQ / UMX- L przeniesiony do MLX. Dzieli mieszankę stereo na cztery łodygi - wokale, bębny, bas, inne instrumenty - za pośrednictwem przetworników BiLSTM i wielokanałowego filtra postfiltra Wiener- EM, wszystkie uruchomione końcówki na MLX przez odwrotną STFT. Real- world RTF ~ 0.031 (32 × szybszy niż czas rzeczywisty) na serii M- dla 30 s audio.

# Split mix.wav into vocals/drums/bass/other.wav next to it
speech separate mix.wav

# Or keep stems together
speech separate mix.wav --output stems/

import SourceSeparation

let separator = try await SourceSeparator.fromPretrained()
let stems = separator.separate(audio: stereoSamples, sampleRate: 44_100)
// stems[.vocals], stems[.drums], stems[.bass], stems[.other]  — each [[Float]] (stereo)

Pełna architektura, tuning, i benchmark notatki na temat Przewodnik dotyczący rozdzielania źródeł.

Wzmocnienie mowy - DeepFilterNet3

DeepFilterNet3 na Neural Engine (CoreML). Usuwa szumy tła z mowy 48 kHz w czasie rzeczywistym za pomocą modelu parametru 2.1M- na tyle mały, że może działać obok rurociągu ASR jako etap wstępnego przetwarzania.

speech denoise noisy.wav -o clean.wav

import SpeechEnhancement

let enhancer = try await SpeechEnhancer.fromPretrained()
let clean = try enhancer.enhance(audio: noisy, sampleRate: 48_000)

Pełna konfiguracja Przewodnik po wzmocnieniu mowy.

Wybór odpowiedniego narzędzia

Chcesz...Stosowanie
Generuj muzykę z podpowiedzi tekstowejMAGNET (speech compose)
Wyciągać wokale lub bębny z istniejącego toruOpen- Unmix (speech separate)
Oczyść głośną mowę przed transkrypcjąDeepFilterNet3 (speech denoise)
Przelicz tekst na język (synteza głosu)VoxCPM2 lub Qwen3-TTS