Strojový překlad · Anglický originál
Kompozice - Hudba & amp; Výroba zvuku
Tři on- device moduly pokrývají hudbu a audioprodukci speech-swift, všechny běží nativně na Apple Silicon přes MLX nebo CoreML. MAGNET generuje 30-second hudební klipy z textového tlačítka. Oddělování zdrojů (Open- Unmix) rozděluje stereo track do čtyř stonků (vokály / bubny / baskytara / jiné). Vylepšení řeči (DeepFilterNet3) odstraňuje hluk pozadí z řeči v reálném čase.
| Modul | Úkol | Backend | Výstup | CLI |
|---|---|---|---|---|
| MAGNET | Text → hudba | MLX (INT4 / INT8) | 30 s @ 32 kHz mono | speech compose |
| Odmíchat | Oddělování kmenů | MLX | 4 stonky @ 44.1 kHz stereo | speech separate |
| DeepFilterNet3 | Potlačení hluku | CoreML (Neural Engine) | 48 kHz, reálný čas | speech denoise |
MAGNET - tvorba text- to- hudby
MLX Swift port Meta MAGNET (Maskovaná Audio Generace s Single Non- Autoregresivní transformátor). Vytváří klipy 30 z monografie 32 kHz z free- form English quick - "happy rock", "energický EDM se synthovým vedením" nebo bohatý popisný text pro čistší výsledky.
Architektura
Tři naložené komponenty stažené při prvním volání:
| Součást | Úloha | Zdroj |
|---|---|---|
| MAGNET dekodér LM | Maskovaný non-autoregresivní transformátor nad 4 EnCodec kodeknihy. 24 vrstev (Small, 300M) nebo 48 (Medium, 1.5B). Kvantizované Q / K / V / out projekce + FFN linears (MLX- afine, skupina 64). | aufklarer/MAGNeT-{Small,Medium}-30secs-MLX-{4,8}bit |
| Textový enkodér T5-base | 110M- parametr enkodér pro textovou kondicionování. FP32 (enkoder- only path; no dekodér, no LM head). | t5-base |
| Encodec 32 kHz dekodér | SEAnet dekodér (Conv1d / ConvTranspose1d / ResnetBlock / 2- vrstva LSTM) + 4-Codebook Euklidovský RVQ. Mapy LM diskrétních tokenů zpět na 32 kHz vlnění. | mlx-community/encodec-32khz-float32 |
Maskované paralelní dekódování
Na rozdíl od autoregresivního sourozence MusicGen, MAGNET běží 50 vpřed prochází celkem (výchozí rozdělení [20, 10, 10, 10] na konci 4 Codebooks) s kosine- plánované remasking, klasifikační-free navádění žíhání, a per- stage místní pozornost okna. 0 má plnou sebevědomí; etapy 1–3 použít lokální |q − k| ≤ 5 okno, protože vyšší kódy pouze vylepšují detaily.
Varianty
| Varianta | Params | LM on- disk | Vrchol RSS | Zeď (M- série, 30 s) | RTF |
|---|---|---|---|---|---|
small-int4 | 300 M | 287 MB | ~ 1.4 GB | ~ 10.8 | 0.36× |
small-int8 | 300 M | 425 MB | - 1,5 GB | ~ 11 s | 0.37× |
medium-int4 | 1.5B | 1.36 GB | ~ 2.2 GB | ~ 36 s | 1.20× |
medium-int8 | 1.5B | 2,10 GB | ~ 3.0 GB | ~ 36 s | 1.20× |
RTF pod 1.0 = rychlejší než v reálném čase. Kvantizace sotva pohybuje tapety - pozornost dominuje, ne lineární projekce - takže praktické vítězství INT4 je spíše pamětí než latencí.
Rychlý 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
Vlajky: --variant {small,medium}-{int4,int8}, --temperature (žíhaný, výchozí 3.0), --top-p (výchozí 0.9), --cfg-max / --cfg-min (výchozí hodnota 10.0 / 1.0), --steps "20,10,10,10" (per- codebook iterations) --seed.
Krátké štítky jako "happy rock" práce, ale cítit tenký. Popisné podněty, které zmiňují nástroje + tempo + nálada Výrazně zlepšit soudržnost - v naší kvalitě zametat bohatší rychle dal vyšší nulovou rychlost (0.116 vs 0.093, tj. vyšší frekvence detail) a nulové stříhání. Porovnat:
"happy rock"- tenký"energetic upbeat rock anthem with electric guitar riffs, driving drums, bass groove"- bohatší, obvykle lepší.
Svazky & amp; licence
Všechny čtyři soubory MLX jsou odvozeny od facebook / magnet-small-30secs a facebook / magnet-medium-30secs a zdědit Metovu licenci: CC-BY-NC 4.0 - pouze pro nekomerční použití. Generovaný zvuk nese stejné omezení.
Oddělování zdrojů - Open- Unmix (4 stonky)
Open- Unmix HQ / UMX-L Přenos do MLX. Rozdělí stereo mix na čtyři stonky - vokály, bubny, okoun, ostatní nástroje - per- stem BiLSTM prediktory a multikanálový Wiener-EM post-filtr, všechny běží end- to-end na MLX přes inverzní STFT. Real- world RTF ~ 0.031 (32 × rychlejší než reálný čas) na M- sérii 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)
Úplná architektura, ladění a referenční poznámky k Příručka pro oddělení zdrojů.
Vylepšení řeči - DeepFilterNet3
DeepFilterNet3 na Neural Engine (CoreML). Odstraňuje hluk pozadí z řeči 48 kHz v reálném čase s parametrem 2.1M--model - dost malý na to, aby běžel vedle potrubí ASR jako krok předzpracování.
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)
Kompletní konfigurace na Příručka pro vylepšení řeči.
Vybírání správného nástroje
| Chceš... | Použití |
|---|---|
| Vygenerovat hudbu z textového tlačítka | MAGNET (speech compose) |
| Vytáhněte vokály nebo bubny z existující trati | Odmíchat (speech separate) |
| Ukliďte hlučnou řeč před přepisem | DeepFilterNet3 (speech denoise) |
| Převést text do řeči (syntéza hlasu) | VoxCPM2 nebo Qwen3-TTS |