Maskinoversættelse · Engelsk original
Komposition - Musik & amp; Lydproduktion
Tre on- device moduler dækker musik og audioproduktion side af speech-swift, alle kører indbygget på Apple Silicon via MLX eller CoreML. MAGNET genererer 30- andet musikklip fra en tekstprompt. Kildeseparation (Open- Unmix) splitter et stereospor i fire stilke (vokal / trommer / bas / andet). Højttaleranlæg (DeepFilterNet3) fjerner baggrundsstøj fra tale i realtid.
| Modul | Opgave | Backend | Output | CLI |
|---|---|---|---|---|
| MAGNET | Tekst → musik | MLX (INT4 / INT8) | 30 s @ 32 kHz mono | speech compose |
| Open- unmix | Stamseparation | MLX | 4 stængler @ 44.1 kHz stereo | speech separate |
| DeepFilterNet3 | Støjdæmpning | CoreML (Neural Engine) | 48 kHz, realtid | speech denoise |
MAGNET - text- to- music generation
MLX Swift port of Meta 's MAGNET (Mask Audio Generation med en Single Non- Autoregressive Transformer). Genererer 30 's klip af 32 kHz mono musik fra en free- form engelsk prompt - "glad rock", "energisk EDM med synth bly", eller rig beskrivende tekst til renere resultater.
Arkitektur
Tre indlæste komponenter, downloades ved første opkald:
| Komponent | Rolle | Kilde |
|---|---|---|
| MAGNET dekoder LM | Maskeret ikke-autoregressiv transformator over 4 EnCodec kodebøger. 24 lag (små, 300M) eller 48 (Medium, 1.5B). Kvantiserede Q / K / V / out fremskrivninger + FFN lineører (MLX- affin, gruppe 64). | aufklarer/MAGNeT-{Small,Medium}-30secs-MLX-{4,8}bit |
| T5-base tekstindkoder | 110M- parameter encoder til tekstkonditionering. FP32 (encoder- only path; ingen dekoder, ingen LM hoved). | t5-base |
| EnCodec 32 kHz dekoder | SEANET-dekoder (Conv1d / ConvTranspose1d / ResnetBlock / 2-lag LSTM) + 4-codebook euklidisk RVQ. Kort LM 's diskrete tokens tilbage til en 32 kHz bølgeform. | mlx-community/encodec-32khz-float32 |
Masket parallel afkodning
I modsætning til autoregressive søskende MusicGen, er MAGNET kører 50 fremad passerer i alt (standardopdeling [20, 10, 10, 10] på tværs af 4 kodebøger) med cosine- planlagt ommaskering, klassifier- free guidance annealing, og per- stage lokale opmærksomhed vinduer. Stage 0 har fuld selvopmærksomhed; stadier 1- 3 bruge en lokal |q − k| ≤ 5 vindue, fordi højere kodebøger kun forfine detaljer.
Varianter
| Variant | Paramboler | LM on- disk | Peak RSS | Mur (M-serie, 30 s) | RTF |
|---|---|---|---|---|---|
small-int4 | 300M | 287 MB | ~ 1,4 GB | ~ 10,8 s | 0.36× |
small-int8 | 300M | 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 nedenfor 1.0 = hurtigere end real time. Kvantisering bevæger knap væg- ur - opmærksomhed dominerer, ikke de lineære fremskrivninger - så den praktiske gevinst fra INT4 er hukommelse snarere end latency.
Hurtig 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
Flag: --variant {small,medium}-{int4,int8}, --temperature (annealed, standard 3.0) --top-p (standard 0.9) --cfg-max / --cfg-min (standard 10.0 / 1.0) --steps "20,10,10,10" (per- kodebook iterationer), --seed.
Kort tags som "happy rock" arbejde, men føler sig tynd. Beskrivende tilskyndelse til at nævne instrumenter + tempo + humør mærkbart forbedre sammenhængen - i vores kvalitet feje de rigere prompt gav højere zero-krydsning sats (0.116 vs 0.093, dvs mere høj frekvens detalje) og nul cliping. Sammenlign:
"happy rock"- tynd"energetic upbeat rock anthem with electric guitar riffs, driving drums, bass groove"- rigere, som regel bedre
Bundles & amp; - licens
Alle fire MLX bundter er afledt af facebook / magnet-small-30secs og facebook / magnet-medium-30secs og arve Metas licens: CC- BY- NC 4.0 - kun ikke-kommerciel brug. Genereret lyd har samme begrænsning.
Source separation - Open- Unmix (4 stængler)
Open- Unmix HQ / UMX- L porteret til MLX. Splitter en stereo mix i fire stængler - vokal, trommer, bas, Andre instrumenter - via per- stem BiLSTM forudsigelser og en multichannel Wiener- EM postfilter, alle kører end-to-end på MLX gennem den inverse STFT. Real- world RTF ~ 0.031 (32 × hurtigere end realtid) på M- serien for 30 s lyd.
# 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)
Fuld arkitektur, tuning, og benchmark noter om Kildeseparationsguide.
Højnelse af tale - DeepFilterNet3
DeepFilterNet3 på Neural Engine (CoreML). Fjerner baggrundsstøj fra 48 kHz tale i realtid med en 2.1M- parameter model - lille nok til at køre sammen med en ASR rørledninger som et forbehandling trin.
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)
Fuld konfiguration på Håndbog til talegenkendelse.
Picking af det rigtige værktøj
| Vil du... | Anvendelse |
|---|---|
| Generér musik fra en tekstprompt | MAGNET (speech compose) |
| Træk vokal eller trommer ud af et eksisterende spor | Open- unmix (speech separate) |
| Ryd op støjende tale før transskription | DeepFilterNet3 (speech denoise) |
| Konvertér tekst til tale (stemmesyntese) | VoxCPM2 eller Qwen3-TTS |