Compose — संगीत और ऑडियो प्रोडक्शन

speech-swift के संगीत और ऑडियो प्रोडक्शन पक्ष को तीन ऑन-डिवाइस मॉड्यूल कवर करते हैं, सभी MLX या CoreML के माध्यम से Apple Silicon पर मूल रूप से चल रहे हैं। MAGNeT टेक्स्ट प्रॉम्प्ट से 30-सेकंड के संगीत क्लिप उत्पन्न करता है। सोर्स सेपरेशन (Open-Unmix) एक स्टीरियो ट्रैक को चार स्टेम (वोकल / ड्रम / बेस / अन्य) में विभाजित करता है। स्पीच एन्हांसमेंट (DeepFilterNet3) वास्तविक समय में स्पीच से बैकग्राउंड नॉइज़ हटाता है।

मॉड्यूलकार्यबैकएंडआउटपुटCLI
MAGNeTटेक्स्ट → संगीतMLX (INT4 / INT8)30 s @ 32 kHz मोनोspeech compose
Open-Unmixस्टेम सेपरेशनMLX4 स्टेम @ 44.1 kHz स्टीरियोspeech separate
DeepFilterNet3नॉइज़ सप्रेशनCoreML (Neural Engine)48 kHz, वास्तविक समयspeech denoise

MAGNeT — टेक्स्ट-टू-म्यूज़िक जनरेशन

Meta के MAGNeT (Masked Audio Generation with a Single Non-Autoregressive Transformer) का MLX Swift पोर्ट। फ्री-फॉर्म अंग्रेज़ी प्रॉम्प्ट से 30 s के 32 kHz मोनो संगीत क्लिप उत्पन्न करता है — "happy rock", "energetic EDM with synth lead", या बेहतर परिणामों के लिए विस्तृत वर्णनात्मक टेक्स्ट।

आर्किटेक्चर

तीन लोडेड कॉम्पोनेंट, पहले कॉल पर डाउनलोड किए गए:

कॉम्पोनेंटभूमिकास्रोत
MAGNeT डिकोडर LM4 EnCodec कोडबुक पर मास्क्ड नॉन-ऑटोरिग्रेसिव ट्रांसफॉर्मर। 24 लेयर (Small, 300M) या 48 (Medium, 1.5B)। क्वांटाइज़्ड Q/K/V/out प्रोजेक्शन + FFN लीनियर (MLX-affine, ग्रुप 64)।aufklarer/MAGNeT-{Small,Medium}-30secs-MLX-{4,8}bit
T5-base टेक्स्ट एनकोडरटेक्स्ट कंडीशनिंग के लिए 110M-पैरामीटर एनकोडर। FP32 (केवल एनकोडर पथ; कोई डिकोडर नहीं, कोई LM हेड नहीं)।t5-base
EnCodec 32 kHz डिकोडरSEANet डिकोडर (Conv1d / ConvTranspose1d / ResnetBlock / 2-लेयर LSTM) + 4-कोडबुक Euclidean RVQ। LM के डिस्क्रीट टोकन को 32 kHz वेवफॉर्म में मैप करता है।mlx-community/encodec-32khz-float32

मास्क्ड पैरलल डिकोडिंग

ऑटोरिग्रेसिव सिबलिंग MusicGen के विपरीत, MAGNeT कोसाइन-शेड्यूल्ड री-मास्किंग, क्लासिफायर-फ्री गाइडेंस एनीलिंग, और प्रति-स्टेज लोकल अटेंशन विंडो के साथ कुल 50 फॉरवर्ड पास (4 कोडबुक में डिफ़ॉल्ट विभाजन [20, 10, 10, 10]) चलाता है। स्टेज 0 में पूर्ण सेल्फ-अटेंशन है; स्टेज 1-3 लोकल |q − k| ≤ 5 विंडो का उपयोग करते हैं क्योंकि उच्च कोडबुक केवल विवरण परिष्कृत करते हैं।

वैरिएंट

वैरिएंटपैरामीटरLM डिस्क परपीक RSSवॉल (M-सीरीज़, 30 s)RTF
small-int4300M287 MB~1.4 GB~10.8 s0.36×
small-int8300M425 MB~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 1.0 से कम = वास्तविक समय से तेज़। क्वांटाइज़ेशन वॉल-क्लॉक को मुश्किल से प्रभावित करता है — अटेंशन हावी रहता है, लीनियर प्रोजेक्शन नहीं — इसलिए INT4 का व्यावहारिक लाभ लेटेंसी के बजाय मेमोरी है।

त्वरित शुरुआत

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

फ्लैग: --variant {small,medium}-{int4,int8}, --temperature (एनील्ड, डिफ़ॉल्ट 3.0), --top-p (डिफ़ॉल्ट 0.9), --cfg-max / --cfg-min (डिफ़ॉल्ट 10.0 / 1.0), --steps "20,10,10,10" (प्रति-कोडबुक इटरेशन), --seed

प्रॉम्प्ट इंजीनियरिंग टिप

"happy rock" जैसे छोटे टैग काम करते हैं लेकिन कमज़ोर लगते हैं। उपकरण + टेम्पो + मूड का उल्लेख करने वाले वर्णनात्मक प्रॉम्प्ट संगति में काफी सुधार करते हैं — हमारे गुणवत्ता परीक्षण में, अधिक समृद्ध प्रॉम्प्ट ने उच्च ज़ीरो-क्रॉसिंग दर (0.116 बनाम 0.093, यानी अधिक उच्च-आवृत्ति विवरण) और शून्य क्लिपिंग दी। तुलना करें:

  • "happy rock" — कमज़ोर
  • "energetic upbeat rock anthem with electric guitar riffs, driving drums, bass groove" — अधिक समृद्ध, आमतौर पर बेहतर

बंडल और लाइसेंस

सभी चार MLX बंडल facebook/magnet-small-30secs और facebook/magnet-medium-30secs से प्राप्त हैं और Meta का लाइसेंस विरासत में लेते हैं: CC-BY-NC 4.0 — केवल गैर-वाणिज्यिक उपयोग। उत्पन्न ऑडियो पर भी वही प्रतिबंध लागू होता है।

सोर्स सेपरेशन — Open-Unmix (4 स्टेम)

Open-Unmix HQ / UMX-L MLX में पोर्ट किया गया। प्रति-स्टेम BiLSTM प्रेडिक्टर्स और मल्टीचैनल Wiener-EM पोस्ट-फिल्टर के माध्यम से एक स्टीरियो मिक्स को चार स्टेम में विभाजित करता है — वोकल, ड्रम, बेस, अन्य उपकरण — सभी इन्वर्स STFT के माध्यम से MLX पर एंड-टू-एंड चल रहे हैं। M-सीरीज़ पर 30 s ऑडियो के लिए वास्तविक RTF ~0.031 (वास्तविक समय से 32× तेज़)।

# 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 = try separator.separate(audio: stereoSamples, sampleRate: 44_100)
// stems.vocals, stems.drums, stems.bass, stems.other  — each [Float]

पूर्ण आर्किटेक्चर, ट्यूनिंग, और बेंचमार्क नोट्स सोर्स सेपरेशन गाइड पर।

स्पीच एन्हांसमेंट — DeepFilterNet3

Neural Engine (CoreML) पर DeepFilterNet3। 2.1M-पैरामीटर मॉडल के साथ 48 kHz स्पीच से बैकग्राउंड नॉइज़ को वास्तविक समय में हटाता है — ASR पाइपलाइन के साथ प्री-प्रोसेसिंग चरण के रूप में चलाने के लिए पर्याप्त छोटा।

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)

पूर्ण कॉन्फ़िगरेशन स्पीच एन्हांसमेंट गाइड पर।

सही टूल चुनना

आप चाहते हैं…उपयोग करें
टेक्स्ट प्रॉम्प्ट से संगीत उत्पन्न करेंMAGNeT (speech compose)
मौजूदा ट्रैक से वोकल या ड्रम निकालेंOpen-Unmix (speech separate)
ट्रांसक्रिप्शन से पहले शोर वाले स्पीच को साफ करेंDeepFilterNet3 (speech denoise)
टेक्स्ट को स्पीच में बदलें (वॉइस सिंथेसिस)VoxCPM2 or Qwen3-TTS