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ł | Zadanie | Wstecz | Wyjście | CLI |
|---|---|---|---|---|
| MAGNET | Tekst → muzyka | MLX (INT4 / INT8) | 30 s @ 32 kHz mono | speech compose |
| Open- Unmix | Separacja macierzysta | MLX | 4 stery @ 44.1 kHz stereo | speech separate |
| DeepFilterNet3 | Tłumienie hałasu | CoreML (Neural Engine) | 48 kHz, czas realny | speech 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ładnik | Rola | Źródło |
|---|---|---|
| Dekoder MAGNET LM | Zamaskowany 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-base | 110M- enkoder parametru dla kondycjonowania tekstu. FP32 (ścieżka enkoder- tylko; bez dekodera, bez głowy LM). | t5-base |
| Dekoder EnCodec 32 kHz | Dekoder 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
| Wariant | Params | LM na dysku | Szczyt RSS | Ściana (seria M-, 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 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.
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 tekstowej | MAGNET (speech compose) |
| Wyciągać wokale lub bębny z istniejącego toru | Open- 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 |