Traducere automată · Originalul în engleză
Compoziţie de producţie audio şi muzică
Trei module de la dispozitiv acoperă partea muzicală și audio-producție a speech-swift, toate rulând nativ pe Apple Silicon via MLX sau CoreML. MAGNET generează 30-secunde clipuri muzicale dintr-o promptă de text. Source Separation (Open-Unmix) divide o pistă stereo în patru tulpini (vocale / tobe / bass / altele). Discursul Sporește (DeepFilterNet3) elimină zgomotul de fond din vorbire în timp real.
| Modul | Sarcina | Platformă | Ieșire | CLI |
|---|---|---|---|---|
| MAGNET | Text → muzică | MLX (INT4 / INT8) | 30 s @ 32 kHz mono | speech compose |
| Deschide-Unmix | Separarea stemei | MLX | 4 tulpini stereo @ 44.1 kHz | speech separate |
| DeepFilterNet3 | Suprimarea zgomotului | CoreML (Neural Engine) | 48 kHz, în timp real | speech denoise |
MAGNET bază text-muzica
MLX Swift port de Meta's MAGNET (Mascate Audio Generation with a Single Non-Autorregresive Transformer). Generează 30 s clips de 32 kHz mono music from a free-form English prompt
Arhitectură
Trei componente încărcate, descărcate la primul apel:
| Componentă | Rol | Sursă |
|---|---|---|
| Decodor MAGNET LM | Transformator non-autoregresiv mascat peste 4 coduri EnCodec. 24 straturi (Small, 300M) sau 48 (Mediu, 1.5B). Proiecții Quantize Q/K/V/out + lineare FFN (MLX-affin, grup 64). | aufklarer/MAGNeT-{Small,Medium}-30secs-MLX-{4,8}bit |
| T5-base codor text | Codor 110M-parametru pentru condiționarea textului. FP32 (calea exclusiv codor; fără decodor, fără cap LM). | t5-base |
| Decodor EnCodec 32 kHz | Decodor SEANet (Conv1d / ConvTranspose1d ResnetBlock 2-layer LSTM) + 4- Cartea de coduri Euclidian RVQ. Hartă jetoane discret LM înapoi la o 32 Formular de undă kHz. | mlx-community/encodec-32khz-float32 |
Decodare paralelă mascată
Spre deosebire de fratele autoregresiv MusicGen, MAGNeT ruleaza 50 înainte pasă total (Spațiu implicit) [20, 10, 10, 10] pe tot cuprinsul 4 cărți de coduri) cu cosinus-programat de remascare, orientare fără clasificare anneling, și pe scenă Ferestre de atenție locală. 0 are deplină atenție; etape 1–3 utilizaţi un local |q − k| ≤ 5 fereastra pentru că cărțile de coduri mai mari rafinează doar detaliile.
Variante
| Variantă | Paramele | LM pe disc | Vârful RSS | Perete (M-serie, 30 s) | RTF |
|---|---|---|---|---|---|
small-int4 | 300M | 287 MO | ~1.4 GB | ~10,8 s | 0.36× |
small-int8 | 300M | 425 MO | ~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 mai jos 1.0 = mai repede decât în timp real. Quantizarea abia se mișcă perete-ceas INT4 este mai degrabă memorie decât latență.
Start rapid
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
Indicatoare: --variant {small,medium}-{int4,int8}, --temperature (ascuns, implicit 3,0), --top-p (default 0,9), --cfg-max / --cfg-min (default 10,0 / 1,0), --steps "20,10,10,10" (percodebook iterations), --seed.
Etichete scurte ca "happy rock" munca, dar se simt subtiri. Descriptive determina ca mention instrumente + tempo + stare de spirit Îmbunătățește în mod vizibil coerența . În matura noastră de calitate promptul mai bogat a dat o rată mai mare zero-crossing (0.116 vs 0.093, adică mai multe detalii de înaltă frecvență) și de tăiere zero. Comparați:
"happy rock""energetic upbeat rock anthem with electric guitar riffs, driving drums, bass groove"
Bundles & licență
Toate cele patru pachete MLX sunt derivate din facebook/magnet-small-30secs și facebook / magnet-medium-30secs și moștenesc licența Meta: CC-BY-NC 4.0
Separarea sursei bază (4 tulpini)
Open-Unmix HQ / UMX-L Portat la MLX. Împarte un amestec stereo în patru tulpini voce, tobe, BassCity in Germany, Alte instrumente Prin intermediul predictoarelor per-stem BILSTM și a unui multichannel Wiener-EM post-filtru, toate rulând la sfârșit pe MLX prin intermediul STFT invers. Real-world RTF ~0.031 (32 × mai rapid decât în timp real) pe seriile M pentru 30 s de 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)
Arhitectură completă, tuning, și note de referință pe Ghid de separare a sursei.
Îmbunătățire a vorbirii DeepFilterNet3
DeepFilterNet3 privind Neural Engine (CoreML) Elimină zgomotul de fond de la 48 speech kHz în timp real cu un 2.1M-parametru model bază suficient pentru a rula alături de o ASR Conducta ca un pas înainte de procesare.
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)
Configurație completă pe Ghid de îmbunătăţire a vorbirii.
Culegerea instrumentului potrivit
| Vrei... | Utilizare |
|---|---|
| Generează muzică dintr-un text prompt | MAGNET (speech compose) |
| Trageți vocea sau tobele dintr-o pistă existentă | Deschide-Unmix (speech separate) |
| Curăța discursul zgomotos înainte de transcriere | DeepFilterNet3 (speech denoise) |
| Schimbă textul în vorbire (sinteză vocală) | VoxCPM2 sau Qwen3-TTS |