Awtomatikong salin · Orihinal sa Ingles
Compose — Musika & Audio Production
Tatlo sa mga on-device module ang sumasaklaw sa musika at audio-production side ng speech-swift, lahat ay tumatakbo ng katutubo sa Apple Silicon via MLX o CoreML. MAGNET Gumawa ng 30-second music clips mula sa isang text leader. Pinagmumulan ng Paghihiwalay (Open-Unmix) ang isang stereo track sa apat na tangkay (vocals / drums / bass / iba pa). Pag - unlad sa Pagsasalita (DeepFilterNet3) ay nag-aalis ng ingay ng background mula sa pagsasalita sa tunay na panahon.
| Module | Task | Likod | Ilabas | CLI |
|---|---|---|---|---|
| MAGNET | Text → musika | MLX (INT4 / INT8) | 30 s × 32 kHz mono | speech compose |
| Open-Unmix | Paghihiwalay ng Ismo | MLX | 4 tangkay × 44.1 kHz stereo | speech separate |
| DeepFilterNet3 | Pagpigil sa Ingay | CoreML (Neural Engine) | 48 kHz, real-time | speech denoise |
MAGNET — teksto-to-music na henerasyon
MLX Swift port of Meta's MAGNET (Masked Audio Generation na may isang Single Non-Autoregresssive Transformer). Generates 30 s clips of 32 kHz mono music mula sa isang free-form English agarang – "maligayang rock", "energetic EDM na may synth lead", o mayamang naglalarawang teksto para sa mas malinis na resulta.
Arkitektura
Tatlong nakakargang bahagi, na naka - download sa unang tawag:
| Nakikipagtulungan | Ang Papel | Pinagmumulan |
|---|---|---|
| MAGNET decoder LM | Masinam na non-autoregressive transformer sa 4 na mga codebook ng EnCodec. 24 patong (Small, 300M) o 48 (Medium, 1.5B). Quantised Q/K/V/out projections + FFN linears (MLX-afine, grupo 64). | aufklarer/MAGNeT-{Small,Medium}-30secs-MLX-{4,8}bit |
| T5-base text regulator | 110M-parameter regulater para sa pagkokondisyon ng teksto. FP32 (encoder-lamang path; walang decoder, walang LM head). | t5-base |
| EnCodec 32 kHz decoder | SEANet decoder (E.Conv1d / ConvTranspose1d / ResnetBlock / 2-layer LSTM) + 4-codebook Euclidean RVQ. Mapa Ang discrete ng LM ay nagrereplekta pabalik sa isang noble 32 kHz waveform. | mlx-community/encodec-32khz-float32 |
Mas maliit na kahilerang decoding
Hindi tulad ng autoregressive fratern MusicGen, tumatakbo ang MAGNET Ang 50 forward ay nagreresulta sa kabuuan ( Paghihiwalay [20, 10, 10, 10] Sa ibayo ng 4 codebooks) na may cosine-scheduled remasking, classifier-free guidance annealing, at per-stage local attention windows.Ang Stage 0 ay may full self-tension; ang mga yugtong 1–3 na gumagamit ng isang lokal na localQXZ |q − k| ≤ 5 bintana sapagkat dinidalisay lamang ng mas mataas na mga aklat ng kodigo ang mga detalye.
Mga Variant
| Kaurian | Mga Param | LM on-disk | Pinakamataas na RS | Pader (M-series, 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 mababa sa 1.0 = mas mabilis kaysa sa tunay na panahon. Quantisation ay bahagyang gumagalaw ng pader-oras – nangingibabaw ang pansin, hindi ang linear projections – kaya ang praktikal na panalo mula INT4 ay memorya sa halip na latency.
Mabilis na pagsisimula
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
Mga Bandila: --variant {small,medium}-{int4,int8}, --temperature (annealed, default 3.0), --top-p (default 0.9), --cfg-max / --cfg-min (default 10.0 / 1.0), --steps "20,10,10,10" (per-codebook series), --seed.
Maikling tag tulad ng "happy rock" ang nag - uudyok sa pagbanggit na iyon na maging payat. mga instrumento + tempo + kondisyon Kapansin-pansing pagpapabuti ng kompensasyon – sa kalidad natin ay pinalis ang mas mayamang agarang pag-aalsa ay nagbigay ng mas mataas na sero-crossing rate (na mas mataas na zero-crosting rate)0.116 mga v 0.093, i.e. higit pang mataas-na-frequency na detalye) at sero na paggupit. Ihambing ang:
"happy rock"— manipis"energetic upbeat rock anthem with electric guitar riffs, driving drums, bass groove"— mas mayaman, karaniwang mas mahusay
Bundles & kuto
Ang lahat ng apat na bungkos ng MLX ay mula sa mukhang aklat/magnet-small-30secs at mukhang aklat/magnet-medium-30secs At manahin mo ang kuto ni Meta: CC-BY-NC 4.0 — hindi-komersyal na paggamit lamang. Ang "generated audio " ay may gayunding restriksiyon.
Paghihiwalay ng Source — Open-Unmix (4 tangkay)
Open-Unmix HQ / UMX-L Nahahati sa apat na tangkay ang stereo na may tatak na MLX. mga tinig, mga tambol, baho, iba pang instrumento – via per-stem BELSTM propesiyars at isang multichannel Wiener-EM post-fitter, lahat ng tumatakbong dulo-to-end on MLX sa pamamagitan ng Inverse STFT. Real-world RTF ~0.031 (32× mas mabilis kaysa sa tunay na oras) sa M-series para sa 30 Mga halimbawa ng 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)
Buong arkitektura, pag - aayos, at mga notang benmark sa ibabaw ng Pinagmumulan ng Pagbubukod na giya.
Pagpapasulong sa pagsasalita — DeepFilterNet3
DeepFilterNet3 tungkol sa Neural Engine (CoreML).. Inaalis ang ingay sa paligid mula sa ). 48 kHz pagsasalita sa tunay na panahon na may kasamang isang 2.1M-parameter model — maliit lamang para tumakbo sa tabi ng isang modelo ASR pipeline bilang isang pre-processing na hakbang.
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)
Buong pagsasaayos sa Speech Enhancement guide.
Pagpili ng tamang kagamitan
| Gusto mo... | Gamitin |
|---|---|
| Tumugtog ng musika mula sa isang pag - uutos ng teksto | MAGNET (speech compose) |
| Mga kuwerdas o mga tambol mula sa dati nang riles | Open-Unmix (speech separate) |
| Linisin ang maingay na pananalita bago isalin | DeepFilterNet3 (speech denoise) |
| Komberteng teksto sa pagsasalita (voice synthesis) | VoxCPM2 o Qwen3-TTS |