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 SarcinaPlatformăIeșireCLI
MAGNETText → muzicăMLX (INT4 / INT8)30 s @ 32 kHz monospeech compose
Deschide-Unmix Separarea stemeiMLX4 tulpini stereo @ 44.1 kHzspeech separate
DeepFilterNet3Suprimarea zgomotuluiCoreML (Neural Engine)48 kHz, în timp realspeech 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 LMTransformator 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 kHzDecodor 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ăParameleLM pe discVârful RSSPerete (M-serie, 30 s)RTF
small-int4300M287 MO~1.4 GB~10,8 s0.36×
small-int8300M425 MO~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 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.

Vârf de inginerie promptă

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 promptMAGNET (speech compose)
Trageți vocea sau tobele dintr-o pistă existentăDeschide-Unmix (speech separate)
Curăța discursul zgomotos înainte de transcriereDeepFilterNet3 (speech denoise)
Schimbă textul în vorbire (sinteză vocală) VoxCPM2 sau Qwen3-TTS