Official Murf TTS integration for Pipecat
Project description
Pipecat Murf TTS
Official Murf AI Text-to-Speech integration for Pipecat - a framework for building voice and multimodal conversational AI applications.
Table of Contents
- Pipecat Murf TTS
Note: This integration is maintained by Murf AI. As the official provider of the TTS service, we are committed to actively maintaining and updating this integration.
Pipecat Compatibility
Tested with Pipecat v0.0.106
This integration has been tested with Pipecat version 0.0.106. For compatibility with other versions, please refer to the Pipecat changelog.
Features
- 🎙️ High-Quality Voice Synthesis: Leverage Murf's advanced TTS technology
- 🔄 Real-time Streaming: WebSocket-based streaming for low-latency audio generation
- 🎨 Voice Customization: Control voice style, rate, pitch, and variation
- 🌍 Multi-Language Support: Support for multiple languages and locales
- 🔧 Flexible Configuration: Comprehensive audio format and quality options
- 📊 Metrics Support: Built-in performance tracking and monitoring
Installation
Using pip
pip install pipecat-murf-tts
Using uv
uv add pipecat-murf-tts
From source
git clone https://github.com/murf-ai/pipecat-murf-tts.git
cd pipecat-murf-tts
pip install -e .
Quick Start
1. Get Your Murf API Key
Sign up at Murf AI and obtain your API key from the dashboard.
2. Basic Usage
import asyncio
from pipecat_murf_tts import MurfTTSService
async def main():
# Initialize the TTS service
tts = MurfTTSService(
api_key="your-murf-api-key",
params=MurfTTSService.InputParams(
voice_id="Matthew",
style="Conversational",
rate=0,
pitch=0,
sample_rate=44100,
format="PCM",
),
)
# Use in your Pipecat pipeline
# ... (see examples below)
if __name__ == "__main__":
asyncio.run(main())
3. Complete Example with Pipeline
import asyncio
import os
from dotenv import load_dotenv
from pipecat.pipeline.pipeline import Pipeline
from pipecat.pipeline.runner import PipelineRunner
from pipecat.pipeline.task import PipelineTask, PipelineParams
from pipecat.services.openai.llm import OpenAILLMService
from pipecat.processors.aggregators.llm_context import LLMContext
from pipecat.processors.aggregators.llm_response_universal import (
LLMContextAggregatorPair,
)
from pipecat_murf_tts import MurfTTSService
load_dotenv()
async def main():
# Initialize Murf TTS
tts = MurfTTSService(
api_key=os.getenv("MURF_API_KEY"),
params=MurfTTSService.InputParams(
voice_id="Matthew",
style="Conversational",
),
)
# Initialize LLM
llm = OpenAILLMService(api_key=os.getenv("OPENAI_API_KEY"))
# Set up context and pipeline
messages = [
{"role": "system", "content": "You are a helpful assistant."},
]
context = LLMContext(messages)
context_aggregator = LLMContextAggregatorPair(context)
# Create pipeline
pipeline = Pipeline([
context_aggregator.user(),
llm,
tts,
context_aggregator.assistant(),
])
# Run pipeline
task = PipelineTask(pipeline)
runner = PipelineRunner()
await runner.run(task)
if __name__ == "__main__":
asyncio.run(main())
Configuration
InputParams
The MurfTTSService.InputParams class provides extensive configuration options:
| Parameter | Type | Default | Range/Options | Description |
|---|---|---|---|---|
voice_id |
str |
"Matthew" |
Any valid Murf voice ID | Voice identifier for TTS synthesis |
style |
str |
"Conversational" |
Voice-specific styles | Voice style (e.g., "Conversational", "Narration") |
rate |
int |
0 |
-50 to 50 |
Speech rate adjustment |
pitch |
int |
0 |
-50 to 50 |
Pitch adjustment |
variation |
int |
1 |
0 to 5 |
Variation in pause, pitch, and speed (Gen2 only) |
model |
str |
"FALCON" |
"FALCON", "GEN2" |
The model to use for audio output |
sample_rate |
int |
44100 |
8000, 16000, 24000, 44100, 48000 |
Audio sample rate in Hz |
channel_type |
str |
"MONO" |
"MONO", "STEREO" |
Audio channel configuration |
format |
str |
"PCM" |
"MP3", "WAV", "FLAC", "ALAW", "ULAW", "PCM", "OGG" |
Audio output format |
multi_native_locale |
str |
None |
Language codes (e.g., "en-US") |
Language for Gen2 model audio |
pronunciation_dictionary |
dict |
None |
Custom pronunciation mappings | Dictionary for custom word pronunciations |
Example with Custom Configuration
from pipecat_murf_tts import MurfTTSService
tts = MurfTTSService(
api_key="your-api-key",
params=MurfTTSService.InputParams(
voice_id="en-US-natalie",
style="Narration",
rate=10, # Slightly faster
pitch=-5, # Slightly lower pitch
variation=3, # More variation
sample_rate=48000, # Higher quality
channel_type="STEREO",
format="WAV",
multi_native_locale="en-US",
pronunciation_dictionary={
"Pipecat": {"pronunciation": "pipe-cat"},
},
),
)
Available Voices
Murf AI offers a wide variety of voices across different languages and styles. Visit the Murf AI Voice Library to explore available voices.
Common voice IDs include:
en-US-natalie- American English, femaleen-UK-ruby- British English, femaleen-US-amara- American English, female- And many more...
Environment Variables
Create a .env file in your project root:
MURF_API_KEY=your_murf_api_key_here
OPENAI_API_KEY=your_openai_key_here # If using with LLM
DEEPGRAM_API_KEY=your_deepgram_key_here # If using with STT
Examples
Check out the examples directory for complete working examples:
- murf_tts_basic.py - Full pipeline with STT, LLM, and TTS
To run the example:
# Install example dependencies
uv add pipecat-ai[deepgram,openai,silero]
# Set up your .env file with API keys
# Then run
python examples/foundational/murf_tts_basic.py
Advanced Features
Dynamic Voice Changes
# Change voice on the fly (async in pipecat >= 0.0.106)
await tts.set_voice("en-US-natalie")
Error Handling
The service includes built-in error handling and automatic reconnection:
tts = MurfTTSService(
api_key="your-api-key",
params=MurfTTSService.InputParams(voice_id="Matthew"),
)
# Automatic reconnection on connection loss
# Built-in context management for interruptions
Requirements
- Python >= 3.10, < 3.13
- pipecat-ai >= 0.0.106, <= 0.1.0
- websockets >= 15.0.1, < 16.0
- loguru >= 0.7.3
- python-dotenv >= 1.1.1
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Support
- 📧 Email: support@murf.ai
- 🌐 Website: murf.ai
- 📖 Documentation: Murf API Documentation
- 🐛 Issues: GitHub Issues
Acknowledgments
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pipecat_murf_tts-0.2.0.tar.gz.
File metadata
- Download URL: pipecat_murf_tts-0.2.0.tar.gz
- Upload date:
- Size: 110.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b65d58066b1748ce116ff220dd2388f64a54dd1e66c628425c175231e2909628
|
|
| MD5 |
4ea0958aceb1b65821d692b6bcccae9a
|
|
| BLAKE2b-256 |
b6b8b1debff5965eeb3adc7eb6ec0c6a7894edde70f895da47bc97b3d86a2f69
|
File details
Details for the file pipecat_murf_tts-0.2.0-py3-none-any.whl.
File metadata
- Download URL: pipecat_murf_tts-0.2.0-py3-none-any.whl
- Upload date:
- Size: 10.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
722f78b277b4fc88e93c07bc053ef0bd0d6eb45b7c6878c5093f7c7fa0e6c171
|
|
| MD5 |
a8be3e1f526a6b637070cff5cb840bca
|
|
| BLAKE2b-256 |
1042582ad7c4ec9d6d1d4a68fe12021b16c28dfc1f62728a42fe27b192be18aa
|