A modular Swift SDK for audio processing with MLX on Apple Silicon
MLXAudio follows a modular design allowing you to import only what you need:
Add MLXAudio to your project using Swift Package Manager:
dependencies: [
.package(url: "https://github.com/Blaizzy/mlx-audio-swift.git", branch: "main")
]
// Import only what you need
.product(name: "MLXAudioTTS", package: "mlx-audio-swift"),
.product(name: "MLXAudioCore", package: "mlx-audio-swift")
import MLXAudioTTS
import MLXAudioCore
// Load a TTS model from HuggingFace
let model = try await SopranoModel.fromPretrained("mlx-community/Soprano-80M-bf16")
// Generate audio
let audio = try await model.generate(
text: "Hello from MLX Audio Swift!",
parameters: GenerateParameters(
maxTokens: 200,
temperature: 0.7,
topP: 0.95
)
)
// Save to file
try saveAudioArray(audio, sampleRate: Double(model.sampleRate), to: outputURL)
import MLXAudioSTT
import MLXAudioCore
// Load audio file
let (sampleRate, audioData) = try loadAudioArray(from: audioURL)
// Load STT model
let model = try await GLMASRModel.fromPretrained("mlx-community/GLM-ASR-Nano-2512-4bit")
// Transcribe
let output = model.generate(audio: audioData)
print(output.text)
import MLXAudioVAD
import MLXAudioCore
// Load audio file
let (sampleRate, audioData) = try loadAudioArray(from: audioURL)
// Load diarization model
let model = try await SortformerModel.fromPretrained(
"mlx-community/diar_streaming_sortformer_4spk-v2.1-fp16"
)
// Detect who is speaking when
let output = try await model.generate(audio: audioData, threshold: 0.5)
for segment in output.segments {
print("Speaker \(segment.speaker): \(segment.start)s - \(segment.end)s")
}
for try await event in model.generateStream(text: text, parameters: parameters) {
switch event {
case .token(let token):
print("Generated token: \(token)")
case .audio(let audio):
print("Final audio shape: \(audio.shape)")
case .info(let info):
print(info.summary)
}
}
| Codec | Notes | HuggingFace Repo |
|---|---|---|
| SNAC | Neural audio codec with encode/decode support | mlx-community/snac_24khz |
| Encodec | Encodec-compatible audio codec runtime | Converted Encodec-compatible MLX checkpoints |
| Vocos | Vocoder/codec decode components | Converted Vocos-compatible MLX checkpoints |
| Mimi | Mimi encoder/decoder codec used by speech models | Mimi-compatible MLX checkpoints |
| DACVAE | DAC-style VAE audio codec | Converted DACVAE-compatible MLX checkpoints |
| Descript DAC | Descript DAC-compatible audio codec | Descript DAC-compatible checkpoints |
| Fish S1 DAC | Fish Speech S1 audio codec | Fish S1 DAC-compatible checkpoints |
| S3TokenizerV2 | S3 acoustic tokenizer exposed in MLXAudioCodecs | mlx-community/S3TokenizerV2 |
| MOSS Audio Tokenizer | MOSS audio tokenizer runtime shared with MOSS TTS models | mlx-community/MOSS-Audio-Tokenizer-Nano |
| Higgs Audio Tokenizer | Higgs acoustic tokenizer decode and acoustic encode support | bosonai/higgs-audio-v3-tts-4b bundled tokenizer weights |
| Step-Audio-2 Token2Wav | Token-to-waveform stack for Step-Audio-2 style prompts | mlx-community/Step-Audio-2-token2wav |
| Model | Model README | HuggingFace Repo |
|---|---|---|
| LFM2.5-Audio | LFM Audio README | mlx-community/LFM2.5-Audio-1.5B-6bit |
| SAM-Audio | SAM Audio README | mlx-community/sam-audio-large-fp16 |
| MossFormer2-SE | — | starkdmi/MossFormer2-SE-fp16 |
| DeepFilterNet | DeepFilterNet README | mlx-community/DeepFilterNet-mlx |
| Model | Model README | HuggingFace Repo |
|---|---|---|
| Sortformer | Sortformer README | mlx-community/diar_streaming_sortformer_4spk-v2.1-fp16 |
| SmartTurn | SmartTurn README | mlx-community/smart-turn-v3 |
| FSMN VAD | — | mlx-community/fsmn-vad |
| Silero VAD | Silero VAD README | Silero VAD-compatible MLX checkpoints |
let parameters = GenerateParameters(
maxTokens: 1200,
temperature: 0.7,
topP: 0.95,
repetitionPenalty: 1.5,
repetitionContextSize: 30
)
let audio = try await model.generate(text: "Your text here", parameters: parameters)
import MLXAudioCodecs
// Load SNAC codec
let snac = try await SNAC.fromPretrained("mlx-community/snac_24khz")
// Encode audio to tokens
let tokens = try snac.encode(audio)
// Decode tokens back to audio
let reconstructed = try snac.decode(tokens)
// For models supporting multiple voices (like LlamaTTS/Orpheus)
let audio = try await model.generate(
text: "Hello!",
voice: "tara", // Options: tara, leah, jess, leo, dan, mia, zac, zoe
parameters: parameters
)
Check out the Examples/VoicesApp directory for a complete SwiftUI application demonstrating:
Additional usage examples can be found in the test files.
See CONTRIBUTING.md for contribution guidelines.
MIT License - see LICENSE file for details.
(top 30 of 41)
Swift
100.0%
A modular Swift SDK for audio processing with MLX on Apple Silicon
MLXAudio follows a modular design allowing you to import only what you need:
Add MLXAudio to your project using Swift Package Manager:
dependencies: [
.package(url: "https://github.com/Blaizzy/mlx-audio-swift.git", branch: "main")
]
// Import only what you need
.product(name: "MLXAudioTTS", package: "mlx-audio-swift"),
.product(name: "MLXAudioCore", package: "mlx-audio-swift")
import MLXAudioTTS
import MLXAudioCore
// Load a TTS model from HuggingFace
let model = try await SopranoModel.fromPretrained("mlx-community/Soprano-80M-bf16")
// Generate audio
let audio = try await model.generate(
text: "Hello from MLX Audio Swift!",
parameters: GenerateParameters(
maxTokens: 200,
temperature: 0.7,
topP: 0.95
)
)
// Save to file
try saveAudioArray(audio, sampleRate: Double(model.sampleRate), to: outputURL)
import MLXAudioSTT
import MLXAudioCore
// Load audio file
let (sampleRate, audioData) = try loadAudioArray(from: audioURL)
// Load STT model
let model = try await GLMASRModel.fromPretrained("mlx-community/GLM-ASR-Nano-2512-4bit")
// Transcribe
let output = model.generate(audio: audioData)
print(output.text)
import MLXAudioVAD
import MLXAudioCore
// Load audio file
let (sampleRate, audioData) = try loadAudioArray(from: audioURL)
// Load diarization model
let model = try await SortformerModel.fromPretrained(
"mlx-community/diar_streaming_sortformer_4spk-v2.1-fp16"
)
// Detect who is speaking when
let output = try await model.generate(audio: audioData, threshold: 0.5)
for segment in output.segments {
print("Speaker \(segment.speaker): \(segment.start)s - \(segment.end)s")
}
for try await event in model.generateStream(text: text, parameters: parameters) {
switch event {
case .token(let token):
print("Generated token: \(token)")
case .audio(let audio):
print("Final audio shape: \(audio.shape)")
case .info(let info):
print(info.summary)
}
}
| Codec | Notes | HuggingFace Repo |
|---|---|---|
| SNAC | Neural audio codec with encode/decode support | mlx-community/snac_24khz |
| Encodec | Encodec-compatible audio codec runtime | Converted Encodec-compatible MLX checkpoints |
| Vocos | Vocoder/codec decode components | Converted Vocos-compatible MLX checkpoints |
| Mimi | Mimi encoder/decoder codec used by speech models | Mimi-compatible MLX checkpoints |
| DACVAE | DAC-style VAE audio codec | Converted DACVAE-compatible MLX checkpoints |
| Descript DAC | Descript DAC-compatible audio codec | Descript DAC-compatible checkpoints |
| Fish S1 DAC | Fish Speech S1 audio codec | Fish S1 DAC-compatible checkpoints |
| S3TokenizerV2 | S3 acoustic tokenizer exposed in MLXAudioCodecs | mlx-community/S3TokenizerV2 |
| MOSS Audio Tokenizer | MOSS audio tokenizer runtime shared with MOSS TTS models | mlx-community/MOSS-Audio-Tokenizer-Nano |
| Higgs Audio Tokenizer | Higgs acoustic tokenizer decode and acoustic encode support | bosonai/higgs-audio-v3-tts-4b bundled tokenizer weights |
| Step-Audio-2 Token2Wav | Token-to-waveform stack for Step-Audio-2 style prompts | mlx-community/Step-Audio-2-token2wav |
| Model | Model README | HuggingFace Repo |
|---|---|---|
| LFM2.5-Audio | LFM Audio README | mlx-community/LFM2.5-Audio-1.5B-6bit |
| SAM-Audio | SAM Audio README | mlx-community/sam-audio-large-fp16 |
| MossFormer2-SE | — | starkdmi/MossFormer2-SE-fp16 |
| DeepFilterNet | DeepFilterNet README | mlx-community/DeepFilterNet-mlx |
| Model | Model README | HuggingFace Repo |
|---|---|---|
| Sortformer | Sortformer README | mlx-community/diar_streaming_sortformer_4spk-v2.1-fp16 |
| SmartTurn | SmartTurn README | mlx-community/smart-turn-v3 |
| FSMN VAD | — | mlx-community/fsmn-vad |
| Silero VAD | Silero VAD README | Silero VAD-compatible MLX checkpoints |
let parameters = GenerateParameters(
maxTokens: 1200,
temperature: 0.7,
topP: 0.95,
repetitionPenalty: 1.5,
repetitionContextSize: 30
)
let audio = try await model.generate(text: "Your text here", parameters: parameters)
import MLXAudioCodecs
// Load SNAC codec
let snac = try await SNAC.fromPretrained("mlx-community/snac_24khz")
// Encode audio to tokens
let tokens = try snac.encode(audio)
// Decode tokens back to audio
let reconstructed = try snac.decode(tokens)
// For models supporting multiple voices (like LlamaTTS/Orpheus)
let audio = try await model.generate(
text: "Hello!",
voice: "tara", // Options: tara, leah, jess, leo, dan, mia, zac, zoe
parameters: parameters
)
Check out the Examples/VoicesApp directory for a complete SwiftUI application demonstrating:
Additional usage examples can be found in the test files.
See CONTRIBUTING.md for contribution guidelines.
MIT License - see LICENSE file for details.
(top 30 of 41)
Swift
100.0%