Automatische vertaling · Engels origineel

Samenstellen van muziek & audioproductie

Drie on-device modules hebben betrekking op de muziek- en audioproductiezijde van speech-swift, die allemaal oorspronkelijk op Apple Silicon draait via MLX of CoreML. MAGNeT genereert 30-seconde muziekclips van een tekstprompt. Source Separation (Open-Unmix) splitst een stereotrack in vier stengels (zang / drums / bas / andere). Speech Enhancement (DeepFilterNet3) verwijdert in real time achtergrondgeluid uit spraak.

ModuleTaakBackend UitvoerCLI
MAGNeT Tekst → muziekMLX (INT4 / INT8)30 s @ 32 kHz monospeech compose
Open-UnmixStamscheidingMLX4 stengels @ 44,1 kHz stereospeech separate
DeepFilterNet3 GeluidsonderdrukkingCoreML (Neural Engine)48 kHz, realtimespeech denoise

MAGNET .. tekst-naar-muziek generatie

MLX Swift-poort van Meta's MAGNeT (Masked Audio Generation with a Single Non-Autoregressive Transformer). Genereert 30 s clips van 32 kHz monomuziek uit een vrije Engelse prompt .. "happy rock," "energetic EDM with synth lead" of rijke beschrijvende tekst voor schonere resultaten.

Architectuur

Drie geladen componenten, gedownload op eerste oproep:

Onderdeel Rol Bron
MAGNeT decoder LMGemaskerde niet-autoregressieve transformator over 4 EnCodec codebooks. 24 lagen (Klein, 300M) of 48 (Medium, 1.5B). Gekwantiseerde Q/K/V/out projecties + FFN-linears (MLX-affine, groep 64).aufklarer/MAGNeT-{Small,Medium}-30secs-MLX-{4,8}bit
T5-base tekstcoder110M-parameter encoder voor tekstconditionering. FP32 (encoder-alleen pad; geen decoder, geen LM hoofd).t5-base
Encodec 32 kHz decoderSEANet decoder (Conv1d / ConvTranspose1d 'ResnetBlock' 2- laag LSTM) + 4-codeboek Euclidische RVQ. Maps de discrete tokens van de LM terug naar een 32 kHz golfvorm.mlx-community/encodec-32khz-float32

Gemaskerde parallelle decodering

In tegenstelling tot autoregressieve broers en zussen MusicGen, MAGNeT draait 50 vooruit gaat totaal (standaard verdeling [20, 10, 10, 10] over de 4 codebooks) met cosinus-geplande hermasking, classifier-free guidance gloeien, en per-stage lokale aandacht vensters. Stage 0 heeft volledige zelf-aandacht; stadia 1Z3 gebruiken een lokale |q − k| ≤ 5 venster omdat hogere codeboeken alleen details verfijnen.

Varianten

VariantParamsLM on-diskPiek RSSMuur (M-serie, 30 s)RTF
small-int4300M287 MB~1,4 GB 10,8 s0.36×
small-int8300M425 MB~1,5 GB11 s0.37×
medium-int41.5B 1,36 GB~2,2 GB~36 s1.20×
medium-int81.5B2,10 GB~ 3,0 GB~36 s1.20×

RTF lager dan 1,0 = sneller dan real time. Kwantisering beweegt nauwelijks de aandacht van de klok, niet de lineaire projecties, dus de praktische overwinning van INT4 is geheugen in plaats van latentie.

Snel starten

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

Vlaggen: --variant {small,medium}-{int4,int8}, --temperature (annealed, default 3,0), --top-p (standaard 0,9), --cfg-max / --cfg-min (standaard 10,0 / 1,0), --steps "20,10,10,10" (per-codeboekiteraties), --seed.

Prompt-engineering tip

Korte tags als "happy rock" werken maar voelen zich dun. Descriptieve aanwijzingen die instrumenten noemen + tempo + stemming merkbaar de samenhang verbeteren .. in onze kwaliteit vegetatie gaf de rijkere prompt een hoger zero-crossing tarief (0,116 vs 0,093, d.w.z. meer high-frequency detail) en nul knippen. Vergelijk:

  • "happy rock"
  • "energetic upbeat rock anthem with electric guitar riffs, driving drums, bass groove"

Bundels & licentie

Alle vier MLX bundels zijn afgeleid van facebook/magnet-small-30secs en faceboek/magnet-medium-30secs en erf Meta's licentie: CC-BY-NC 4.0

Open-Unmix (4 stengels)

Open-Unmix HQ / UMX-L geporteerd naar MLX. Splitst een stereo mix in vier stengels zang, trommels, bas, overige instrumenten De zender heeft een BIL STM-voorspellers en een multikanaals Wiener-EM-postfilter, die allemaal end-to-end draaien op MLX via de omgekeerde STFT. Real-world RTF ~0.031 (32× sneller dan real time) op M-series voor 30 s van 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)

Volledige architectuur, tuning en benchmarknoten op de Bronscheidingsgids.

Spraakverbetering . DeepFilterNet3

DeepFilterNet3 op de Neural Engine (CoreML). Verwijdert achtergrondgeluid van 48 kHz spraak in real time met een 2.1M-parameter model .. klein genoeg om naast een ASR pijpleiding te draaien als een voorbewerkingsstap.

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)

Volledige configuratie op de Speech Enhancement Guide.

Het juiste gereedschap kiezen

Wil je... Gebruik
Muziek van een tekstprompt genererenMAGNeT (speech compose)
Trek zang of drums uit een bestaande trackOpen-Unmix (speech separate)
Ruim luidruchtige speech op voor de transcriptie.DeepFilterNet3 (speech denoise)
Tekst omzetten naar spraak (spraaksynthese)VoxCPM2 of Qwen3-TTS