audiopod 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- audiopod-1.0.0/PKG-INFO +395 -0
- audiopod-1.0.0/README.md +345 -0
- audiopod-1.0.0/audiopod/__init__.py +83 -0
- audiopod-1.0.0/audiopod/cli.py +285 -0
- audiopod-1.0.0/audiopod/client.py +332 -0
- audiopod-1.0.0/audiopod/config.py +63 -0
- audiopod-1.0.0/audiopod/exceptions.py +96 -0
- audiopod-1.0.0/audiopod/models.py +235 -0
- audiopod-1.0.0/audiopod/services/__init__.py +24 -0
- audiopod-1.0.0/audiopod/services/base.py +213 -0
- audiopod-1.0.0/audiopod/services/credits.py +46 -0
- audiopod-1.0.0/audiopod/services/denoiser.py +51 -0
- audiopod-1.0.0/audiopod/services/karaoke.py +61 -0
- audiopod-1.0.0/audiopod/services/music.py +434 -0
- audiopod-1.0.0/audiopod/services/speaker.py +53 -0
- audiopod-1.0.0/audiopod/services/transcription.py +212 -0
- audiopod-1.0.0/audiopod/services/translation.py +81 -0
- audiopod-1.0.0/audiopod/services/voice.py +376 -0
- audiopod-1.0.0/audiopod.egg-info/PKG-INFO +395 -0
- audiopod-1.0.0/audiopod.egg-info/SOURCES.txt +26 -0
- audiopod-1.0.0/audiopod.egg-info/dependency_links.txt +1 -0
- audiopod-1.0.0/audiopod.egg-info/entry_points.txt +2 -0
- audiopod-1.0.0/audiopod.egg-info/not-zip-safe +1 -0
- audiopod-1.0.0/audiopod.egg-info/requires.txt +21 -0
- audiopod-1.0.0/audiopod.egg-info/top_level.txt +1 -0
- audiopod-1.0.0/pyproject.toml +146 -0
- audiopod-1.0.0/setup.cfg +4 -0
- audiopod-1.0.0/setup.py +93 -0
audiopod-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: audiopod
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Professional Audio Processing API Client for Python
|
|
5
|
+
Home-page: https://github.com/audiopod-ai/audiopod-python
|
|
6
|
+
Author: AudioPod AI
|
|
7
|
+
Author-email: AudioPod AI <support@audiopod.ai>
|
|
8
|
+
Project-URL: Homepage, https://audiopod.ai
|
|
9
|
+
Project-URL: Repository, https://github.com/audiopod-ai/audiopod
|
|
10
|
+
Project-URL: Bug Tracker, https://github.com/audiopod-ai/audiopod/issues
|
|
11
|
+
Project-URL: API Reference, https://docs.audiopod.ai/
|
|
12
|
+
Keywords: audio,processing,ai,voice,cloning,transcription,translation,music,generation,denoising,api,sdk
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Topic :: Multimedia :: Sound/Audio
|
|
23
|
+
Classifier: Topic :: Multimedia :: Sound/Audio :: Analysis
|
|
24
|
+
Classifier: Topic :: Multimedia :: Sound/Audio :: Conversion
|
|
25
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
26
|
+
Requires-Python: >=3.8
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
Requires-Dist: requests>=2.28.0
|
|
29
|
+
Requires-Dist: aiohttp>=3.8.0
|
|
30
|
+
Requires-Dist: pydantic>=1.10.0
|
|
31
|
+
Requires-Dist: python-dotenv>=0.19.0
|
|
32
|
+
Requires-Dist: tqdm>=4.64.0
|
|
33
|
+
Requires-Dist: websockets>=10.4
|
|
34
|
+
Requires-Dist: click>=8.0.0
|
|
35
|
+
Provides-Extra: dev
|
|
36
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
37
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
|
|
38
|
+
Requires-Dist: black>=22.0.0; extra == "dev"
|
|
39
|
+
Requires-Dist: flake8>=5.0.0; extra == "dev"
|
|
40
|
+
Requires-Dist: mypy>=0.991; extra == "dev"
|
|
41
|
+
Requires-Dist: twine>=4.0.0; extra == "dev"
|
|
42
|
+
Requires-Dist: build>=0.10.0; extra == "dev"
|
|
43
|
+
Provides-Extra: docs
|
|
44
|
+
Requires-Dist: sphinx>=5.0.0; extra == "docs"
|
|
45
|
+
Requires-Dist: sphinx-rtd-theme>=1.2.0; extra == "docs"
|
|
46
|
+
Requires-Dist: sphinx-autodoc-typehints>=1.19.0; extra == "docs"
|
|
47
|
+
Dynamic: author
|
|
48
|
+
Dynamic: home-page
|
|
49
|
+
Dynamic: requires-python
|
|
50
|
+
|
|
51
|
+
# AudioPod Python SDK
|
|
52
|
+
|
|
53
|
+
The official Python SDK for the AudioPod API - Professional Audio Processing powered by AI.
|
|
54
|
+
|
|
55
|
+
[](https://badge.fury.io/py/audiopod)
|
|
56
|
+
[](https://www.python.org/downloads/)
|
|
57
|
+
[](https://opensource.org/licenses/MIT)
|
|
58
|
+
|
|
59
|
+
## Features
|
|
60
|
+
|
|
61
|
+
- 🎵 **Music Generation** - Create music from text prompts, lyrics, or audio samples
|
|
62
|
+
- 🎤 **Voice Cloning** - Clone voices from audio samples and generate speech
|
|
63
|
+
- 📝 **Transcription** - Convert speech to text with speaker diarization
|
|
64
|
+
- 🌍 **Translation** - Translate audio and video content between languages
|
|
65
|
+
- 🎬 **Karaoke Generation** - Create karaoke videos with synchronized lyrics
|
|
66
|
+
- 🔊 **Audio Enhancement** - Denoise and improve audio quality
|
|
67
|
+
- 👥 **Speaker Analysis** - Identify and separate speakers in audio
|
|
68
|
+
- 💰 **Credit Management** - Track usage and manage API credits
|
|
69
|
+
|
|
70
|
+
## Installation
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
pip install audiopod
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Quick Start
|
|
77
|
+
|
|
78
|
+
### Authentication
|
|
79
|
+
|
|
80
|
+
Get your API key from the [AudioPod Dashboard](https://app.audiopod.ai/dashboard) and set it as an environment variable:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
export AUDIOPOD_API_KEY="ap_your_api_key_here"
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Or pass it directly to the client:
|
|
87
|
+
|
|
88
|
+
```python
|
|
89
|
+
import audiopod
|
|
90
|
+
|
|
91
|
+
client = audiopod.Client(api_key="ap_your_api_key_here")
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Basic Usage
|
|
95
|
+
|
|
96
|
+
#### Voice Cloning
|
|
97
|
+
|
|
98
|
+
```python
|
|
99
|
+
import audiopod
|
|
100
|
+
|
|
101
|
+
# Initialize client
|
|
102
|
+
client = audiopod.Client()
|
|
103
|
+
|
|
104
|
+
# Clone a voice and generate speech
|
|
105
|
+
job = client.voice.clone_voice(
|
|
106
|
+
voice_file="path/to/voice_sample.wav",
|
|
107
|
+
text="Hello! This is a cloned voice speaking.",
|
|
108
|
+
language="en",
|
|
109
|
+
wait_for_completion=True
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
print(f"Generated audio URL: {job['output_url']}")
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
#### Music Generation
|
|
116
|
+
|
|
117
|
+
```python
|
|
118
|
+
# Generate music from text
|
|
119
|
+
music_job = client.music.generate_music(
|
|
120
|
+
prompt="upbeat electronic dance music with heavy bass",
|
|
121
|
+
duration=120.0, # 2 minutes
|
|
122
|
+
wait_for_completion=True
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
print(f"Generated music URL: {music_job.output_url}")
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
#### Audio Transcription
|
|
129
|
+
|
|
130
|
+
```python
|
|
131
|
+
# Transcribe audio with speaker diarization
|
|
132
|
+
transcript = client.transcription.transcribe_audio(
|
|
133
|
+
audio_file="path/to/audio.mp3",
|
|
134
|
+
language="en",
|
|
135
|
+
enable_speaker_diarization=True,
|
|
136
|
+
wait_for_completion=True
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
print(f"Transcript: {transcript.transcript}")
|
|
140
|
+
print(f"Detected {len(transcript.segments)} speakers")
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
#### Audio Translation
|
|
144
|
+
|
|
145
|
+
```python
|
|
146
|
+
# Translate audio to another language
|
|
147
|
+
translation = client.translation.translate_audio(
|
|
148
|
+
audio_file="path/to/english_audio.wav",
|
|
149
|
+
target_language="es", # Spanish
|
|
150
|
+
wait_for_completion=True
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
print(f"Translated audio URL: {translation.audio_output_url}")
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Async Support
|
|
157
|
+
|
|
158
|
+
The SDK supports async/await for better performance:
|
|
159
|
+
|
|
160
|
+
```python
|
|
161
|
+
import asyncio
|
|
162
|
+
import audiopod
|
|
163
|
+
|
|
164
|
+
async def main():
|
|
165
|
+
async with audiopod.AsyncClient() as client:
|
|
166
|
+
# All the same methods are available with async support
|
|
167
|
+
job = await client.voice.clone_voice(
|
|
168
|
+
voice_file="voice.wav",
|
|
169
|
+
text="Async voice cloning!",
|
|
170
|
+
wait_for_completion=True
|
|
171
|
+
)
|
|
172
|
+
print(f"Async result: {job['output_url']}")
|
|
173
|
+
|
|
174
|
+
asyncio.run(main())
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Advanced Examples
|
|
178
|
+
|
|
179
|
+
#### Create Voice Profile for Reuse
|
|
180
|
+
|
|
181
|
+
```python
|
|
182
|
+
# Create a reusable voice profile
|
|
183
|
+
voice_profile = client.voice.create_voice_profile(
|
|
184
|
+
name="My Custom Voice",
|
|
185
|
+
voice_file="voice_sample.wav",
|
|
186
|
+
description="A professional voice for narration",
|
|
187
|
+
wait_for_completion=True
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
# Use the voice profile for speech generation
|
|
191
|
+
speech = client.voice.generate_speech(
|
|
192
|
+
voice_id=voice_profile.id,
|
|
193
|
+
text="This uses my custom voice profile!",
|
|
194
|
+
wait_for_completion=True
|
|
195
|
+
)
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
#### Batch Processing
|
|
199
|
+
|
|
200
|
+
```python
|
|
201
|
+
# Process multiple files
|
|
202
|
+
audio_files = ["file1.mp3", "file2.wav", "file3.m4a"]
|
|
203
|
+
jobs = []
|
|
204
|
+
|
|
205
|
+
for audio_file in audio_files:
|
|
206
|
+
job = client.transcription.transcribe_audio(
|
|
207
|
+
audio_file=audio_file,
|
|
208
|
+
language="en"
|
|
209
|
+
)
|
|
210
|
+
jobs.append(job)
|
|
211
|
+
|
|
212
|
+
# Wait for all jobs to complete
|
|
213
|
+
for job in jobs:
|
|
214
|
+
completed_job = client.transcription.get_transcription_job(job.id)
|
|
215
|
+
while completed_job.job.status != "completed":
|
|
216
|
+
time.sleep(5)
|
|
217
|
+
completed_job = client.transcription.get_transcription_job(job.id)
|
|
218
|
+
|
|
219
|
+
print(f"Transcript for {job.id}: {completed_job.transcript}")
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
#### Music Generation with Custom Parameters
|
|
223
|
+
|
|
224
|
+
```python
|
|
225
|
+
# Generate rap music with specific parameters
|
|
226
|
+
rap_job = client.music.generate_rap(
|
|
227
|
+
lyrics="""
|
|
228
|
+
Started from the bottom now we're here
|
|
229
|
+
Building dreams with every single year
|
|
230
|
+
AI music generation so clear
|
|
231
|
+
AudioPod making magic appear
|
|
232
|
+
""",
|
|
233
|
+
style="modern",
|
|
234
|
+
tempo=120,
|
|
235
|
+
wait_for_completion=True
|
|
236
|
+
)
|
|
237
|
+
|
|
238
|
+
# Share the generated music
|
|
239
|
+
share_result = client.music.share_music_track(
|
|
240
|
+
job_id=rap_job.job.id,
|
|
241
|
+
platform="social",
|
|
242
|
+
message="Check out this AI-generated rap!"
|
|
243
|
+
)
|
|
244
|
+
print(f"Shareable URL: {share_result['share_url']}")
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
#### Karaoke Video Generation
|
|
248
|
+
|
|
249
|
+
```python
|
|
250
|
+
# Generate karaoke video from YouTube URL
|
|
251
|
+
karaoke_job = client.karaoke.generate_karaoke(
|
|
252
|
+
youtube_url="https://www.youtube.com/watch?v=example",
|
|
253
|
+
video_style="modern",
|
|
254
|
+
wait_for_completion=True
|
|
255
|
+
)
|
|
256
|
+
|
|
257
|
+
print(f"Karaoke video URL: {karaoke_job.result['karaoke_video_path']}")
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## Error Handling
|
|
261
|
+
|
|
262
|
+
```python
|
|
263
|
+
import audiopod
|
|
264
|
+
from audiopod.exceptions import (
|
|
265
|
+
AudioPodError,
|
|
266
|
+
AuthenticationError,
|
|
267
|
+
RateLimitError,
|
|
268
|
+
ValidationError,
|
|
269
|
+
ProcessingError
|
|
270
|
+
)
|
|
271
|
+
|
|
272
|
+
try:
|
|
273
|
+
client = audiopod.Client(api_key="invalid_key")
|
|
274
|
+
job = client.voice.clone_voice("voice.wav", "Test text")
|
|
275
|
+
|
|
276
|
+
except AuthenticationError:
|
|
277
|
+
print("Invalid API key")
|
|
278
|
+
except RateLimitError as e:
|
|
279
|
+
print(f"Rate limit exceeded. Retry after: {e.retry_after} seconds")
|
|
280
|
+
except ValidationError as e:
|
|
281
|
+
print(f"Invalid input: {e.message}")
|
|
282
|
+
except ProcessingError as e:
|
|
283
|
+
print(f"Processing failed: {e.message}")
|
|
284
|
+
except AudioPodError as e:
|
|
285
|
+
print(f"General API error: {e.message}")
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
## Credit Management
|
|
289
|
+
|
|
290
|
+
```python
|
|
291
|
+
# Check credit balance
|
|
292
|
+
credits = client.credits.get_credit_balance()
|
|
293
|
+
print(f"Available credits: {credits.total_available_credits}")
|
|
294
|
+
print(f"Next reset: {credits.next_reset_date}")
|
|
295
|
+
|
|
296
|
+
# Get usage history
|
|
297
|
+
usage = client.credits.get_usage_history()
|
|
298
|
+
for record in usage:
|
|
299
|
+
print(f"Service: {record['service_type']}, Credits: {record['credits_used']}")
|
|
300
|
+
|
|
301
|
+
# Get credit multipliers
|
|
302
|
+
multipliers = client.credits.get_credit_multipliers()
|
|
303
|
+
print(f"Voice cloning: {multipliers['voice_cloning']} credits/second")
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
## Configuration
|
|
307
|
+
|
|
308
|
+
### Environment Variables
|
|
309
|
+
|
|
310
|
+
- `AUDIOPOD_API_KEY`: Your AudioPod API key
|
|
311
|
+
- `AUDIOPOD_BASE_URL`: Custom API base URL (optional)
|
|
312
|
+
- `AUDIOPOD_TIMEOUT`: Request timeout in seconds (default: 30)
|
|
313
|
+
|
|
314
|
+
### Client Configuration
|
|
315
|
+
|
|
316
|
+
```python
|
|
317
|
+
client = audiopod.Client(
|
|
318
|
+
api_key="your_api_key",
|
|
319
|
+
base_url="https://api.audiopod.ai", # Custom base URL
|
|
320
|
+
timeout=60, # 60 second timeout
|
|
321
|
+
max_retries=5, # Retry failed requests
|
|
322
|
+
verify_ssl=True, # SSL verification
|
|
323
|
+
debug=True # Enable debug logging
|
|
324
|
+
)
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
## API Reference
|
|
328
|
+
|
|
329
|
+
### Client Classes
|
|
330
|
+
|
|
331
|
+
- `audiopod.Client`: Synchronous client
|
|
332
|
+
- `audiopod.AsyncClient`: Asynchronous client
|
|
333
|
+
|
|
334
|
+
### Services
|
|
335
|
+
|
|
336
|
+
- `client.voice`: Voice cloning and TTS operations
|
|
337
|
+
- `client.music`: Music generation and editing
|
|
338
|
+
- `client.transcription`: Speech-to-text transcription
|
|
339
|
+
- `client.translation`: Audio/video translation
|
|
340
|
+
- `client.speaker`: Speaker analysis and diarization
|
|
341
|
+
- `client.denoiser`: Audio denoising and enhancement
|
|
342
|
+
- `client.karaoke`: Karaoke video generation
|
|
343
|
+
- `client.credits`: Credit management and usage tracking
|
|
344
|
+
|
|
345
|
+
### Models
|
|
346
|
+
|
|
347
|
+
- `Job`: Base job information and status
|
|
348
|
+
- `VoiceProfile`: Voice profile details
|
|
349
|
+
- `TranscriptionResult`: Transcription results and metadata
|
|
350
|
+
- `MusicGenerationResult`: Music generation results
|
|
351
|
+
- `TranslationResult`: Translation job results
|
|
352
|
+
- `CreditInfo`: User credit information
|
|
353
|
+
|
|
354
|
+
## CLI Usage
|
|
355
|
+
|
|
356
|
+
The SDK includes a command-line interface:
|
|
357
|
+
|
|
358
|
+
```bash
|
|
359
|
+
# Check API status
|
|
360
|
+
audiopod health
|
|
361
|
+
|
|
362
|
+
# Get credit balance
|
|
363
|
+
audiopod credits balance
|
|
364
|
+
|
|
365
|
+
# Clone a voice
|
|
366
|
+
audiopod voice clone voice.wav "Hello world!" --language en
|
|
367
|
+
|
|
368
|
+
# Generate music
|
|
369
|
+
audiopod music generate "upbeat electronic music" --duration 60
|
|
370
|
+
|
|
371
|
+
# Transcribe audio
|
|
372
|
+
audiopod transcription transcribe audio.mp3 --language en
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
## Requirements
|
|
376
|
+
|
|
377
|
+
- Python 3.8+
|
|
378
|
+
- Active AudioPod account with API access
|
|
379
|
+
- Valid API key
|
|
380
|
+
|
|
381
|
+
## Support
|
|
382
|
+
|
|
383
|
+
- 📖 [Documentation](https://docs.audiopod.ai)
|
|
384
|
+
- 🎯 [API Reference](https://api.audiopod.ai/docs)
|
|
385
|
+
- 💬 [Discord Community](https://discord.gg/audiopod)
|
|
386
|
+
- 📧 [Email Support](mailto:support@audiopod.ai)
|
|
387
|
+
- 🐛 [Bug Reports](https://github.com/audiopod-ai/audiopod-python/issues)
|
|
388
|
+
|
|
389
|
+
## License
|
|
390
|
+
|
|
391
|
+
This SDK is released under the MIT License. See [LICENSE](LICENSE) for details.
|
|
392
|
+
|
|
393
|
+
---
|
|
394
|
+
|
|
395
|
+
Made with ❤️ by the AudioPod team
|