An unofficial Swift SDK for AssemblyAI - the AI platform for speech-to-text, speaker diarization, sentiment analysis, and more.
Note: This is a community-maintained SDK, not an official AssemblyAI product.
- Full AssemblyAI API coverage
- Built with Apple's Swift OpenAPI Generator
- Async/await support
- Type-safe API
- Cross-platform: macOS, iOS, tvOS, watchOS, and Linux
- Swift 5.9+
- macOS 13+ / iOS 16+ / tvOS 16+ / watchOS 9+
Add the following to your Package.swift:
dependencies: [
.package(url: "https://github.com/atacan/AssemblyAI.git", from: "1.0.0")
]Then add the dependency to your target:
.target(
name: "YourTarget",
dependencies: [
.product(name: "AssemblyAI", package: "AssemblyAI"),
.product(name: "AssemblyAITypes", package: "AssemblyAI"),
]
)- File → Add Package Dependencies
- Enter:
https://github.com/atacan/AssemblyAI.git - Select your desired version
import AssemblyAI
import AssemblyAITypes
import OpenAPIAsyncHTTPClient
// Create the client with your API key
let client = Client(
serverURL: try AssemblyAITypes.Servers.Server1.url(),
transport: AsyncHTTPClientTransport(),
middlewares: [
AuthenticationMiddleware(apiKey: "your-api-key")
]
)import Foundation
// 1. Upload your audio file
let audioData = try Data(contentsOf: audioFileURL)
let uploadResponse = try await client.uploadFile(
.init(body: .binary(.init(audioData)))
)
let uploadUrl = try uploadResponse.ok.body.json.upload_url
// 2. Start transcription
let transcriptResponse = try await client.createTranscript(
.init(body: .json(.init(
value1: .init(audio_url: uploadUrl),
value2: .init()
)))
)
var transcript = try transcriptResponse.ok.body.json
// 3. Poll for completion
while transcript.status != .completed {
try await Task.sleep(for: .seconds(1))
let response = try await client.getTranscript(
.init(path: .init(transcript_id: transcript.id))
)
transcript = try response.ok.body.json
}
// 4. Get the transcription text
print("Transcription: \(transcript.text ?? "")")If your audio is already hosted online:
let response = try await client.createTranscript(
.init(body: .json(.init(
value1: .init(audio_url: "https://example.com/audio.mp3"),
value2: .init()
)))
)| Method | Description |
|---|---|
uploadFile |
Upload a local audio file |
createTranscript |
Start a new transcription |
getTranscript |
Get transcription status/result |
listTranscripts |
List all transcripts |
deleteTranscript |
Delete a transcript |
getSubtitles |
Get subtitles (SRT/VTT) |
getSentences |
Get transcript split by sentences |
getParagraphs |
Get transcript split by paragraphs |
wordSearch |
Search for words in transcript |
createLemurTask |
Use LeMUR AI models |
Enable additional features when creating a transcript:
let response = try await client.createTranscript(
.init(body: .json(.init(
value1: .init(audio_url: audioUrl),
value2: .init(
speaker_labels: true, // Speaker diarization
auto_chapters: true, // Auto chapters
entity_detection: true, // Entity detection
sentiment_analysis: true, // Sentiment analysis
auto_highlights: true, // Key phrases
language_code: .en_us // Language
)
)))
)// Get words with timestamps
if let words = transcript.words {
for word in words {
print("\(word.text) [\(word.start)ms - \(word.end)ms]")
}
}
// Get speaker labels
if let utterances = transcript.utterances {
for utterance in utterances {
print("Speaker \(utterance.speaker): \(utterance.text)")
}
}
// Get chapters
if let chapters = transcript.chapters {
for chapter in chapters {
print("\(chapter.headline): \(chapter.summary)")
}
}Create a .env file for local development:
API_KEY=your_assemblyai_api_key
See the Tests directory for more usage examples.
Contributions are welcome! Please feel free to submit a Pull Request.
This project is available under the MIT License. See the LICENSE file for details.
Keywords: AssemblyAI Swift, AssemblyAI iOS, AssemblyAI macOS, Speech-to-Text Swift, Transcription Swift SDK, AssemblyAI Swift Package, Audio Transcription iOS, Voice Recognition Swift, ASR Swift, Automatic Speech Recognition Swift