<p align="center">
  <img src=".github/logo.svg?sanitize=true" width="200px" height="200px">
</p>
<h2 align="center">Offline Text To Speech (TTS) converter for Python </h2>
[](https://pepy.tech/project/pyttsx3)   [](https://github.com/nateshmbhat/pyttsx3)  [](https://github.com/nateshmbhat/pyttsx3) [](https://pypi.org/project/pyttsx3/) [](https://github.com/nateshmbhat/pyttsx3) [](https://github.com/nateshmbhat)
`pyttsx3` is a text-to-speech conversion library in Python. Unlike alternative libraries, **it works offline**.
<a class="bmc-button" target="_blank" href="https://www.buymeacoffee.com/nateshmbhat"><img src="https://cdn.buymeacoffee.com/buttons/bmc-new-btn-logo.svg" alt="Buy me a coffee 😇"><span style="margin-left:5px;font-size:19px !important;">Buy me a coffee 😇</span></a>
## Installation :
	pip install pyttsx3
> If you get installation errors , make sure you first upgrade your wheel version using :
`pip install --upgrade wheel`
## Features :
- ✨Fully **OFFLINE** text to speech conversion
- 🎈 Choose among different voices installed in your system
- 🎛 Control speed/rate of speech
- 🎚 Tweak Volume
- 📀 Save the speech audio as a file
- ❤️ Simple, powerful, & intuitive API
#### Linux installation requirements :
+ If you are on a Linux system and if the voice output is not working, then  :
	Install espeak-ng and libespeak1 as shown below:
	```
	sudo apt update && sudo apt install espeak-ng libespeak1
	```
## Usage :
```python3
import pyttsx3
engine = pyttsx3.init()
# For Mac, If you face error related to "pyobjc" when running the `init()` method :
# Install 9.0.1 version of pyobjc : "pip install pyobjc>=9.0.1"
engine.say("I will speak this text")
engine.runAndWait()
```
**Single line usage with speak function with default options**
```python3
import pyttsx3
pyttsx3.speak("I will speak this text")
```
**Changing Voice , Rate and Volume :**
```python3
import pyttsx3
engine = pyttsx3.init() # object creation
# RATE
rate = engine.getProperty('rate')   # getting details of current speaking rate
print (rate)                        # printing current voice rate
engine.setProperty('rate', 125)     # setting up new voice rate
# VOLUME
volume = engine.getProperty('volume')   # getting to know current volume level (min=0 and max=1)
print (volume)                          # printing current volume level
engine.setProperty('volume',1.0)        # setting up volume level  between 0 and 1
# VOICE
voices = engine.getProperty('voices')       # getting details of current voice
#engine.setProperty('voice', voices[0].id)  # changing index, changes voices. o for male
engine.setProperty('voice', voices[1].id)   # changing index, changes voices. 1 for female
engine.say("Hello World!")
engine.say('My current speaking rate is ' + str(rate))
engine.runAndWait()
engine.stop()
# Saving Voice to a file
# On Linux, make sure that 'espeak-ng' is installed
engine.save_to_file('Hello World', 'test.mp3')
engine.runAndWait()
```
### **Full documentation of the Library**
https://pyttsx3.readthedocs.io
#### Included Text-To-Speech Engines by Operating System
|                         | Linux | macOS | Windows |
|-------------------------|:-----:|:-----:|:-------:|
| [AVSpeech][]            |       |   ✅︎  |         |
| [eSpeak][]              |   ✅︎  |   ✅︎  |    ✅︎   |
| [NSSpeechSynthesizer][] |       |   ✅︎  |         |
| [SAPI5][]               |       |       |    ✅︎   |
> [!NOTE]
> * AVSpeechSynthesizer support is still experimental.
> * NSSpeechSynthesizer is deprecated by Apple.
[AVSpeech]: https://developer.apple.com/documentation/avfoundation/speech_synthesis
[eSpeak]: https://github.com/espeak-ng/espeak-ng?tab=readme-ov-file#readme
[NSSpeechSynthesizer]: https://developer.apple.com/documentation/appkit/nsspeechsynthesizer
[SAPI5]: https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ms723627(v=vs.85)
Feel free to wrap another text-to-speech engine for use with ``pyttsx3``.
### Project Links :
* PyPI (https://pypi.org/project/pyttsx3)
* GitHub (https://github.com/nateshmbhat/pyttsx3)
* Full Documentation (https://pyttsx3.readthedocs.org)
            
         
        Raw data
        
            {
    "_id": null,
    "home_page": null,
    "name": "pyttsx3",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "gtts, ivona, offline text to speech, offline tts, pyttsx, pyttsx for python3, pyttsx3, speech, speech synthesis, text to speech, text to speech for python, tts, TTS for python3",
    "author": null,
    "author_email": "Natesh M Bhat <nateshmbhatofficial@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/94/4e/a37786f666f4f084fc45e026ca1e63f7b49ac0d90b53fa35ae62b73c96a8/pyttsx3-2.99.tar.gz",
    "platform": null,
    "description": "<p align=\"center\">\n  <img src=\".github/logo.svg?sanitize=true\" width=\"200px\" height=\"200px\">\n</p>\n<h2 align=\"center\">Offline Text To Speech (TTS) converter for Python </h2>\n\n\n[](https://pepy.tech/project/pyttsx3)   [](https://github.com/nateshmbhat/pyttsx3)  [](https://github.com/nateshmbhat/pyttsx3) [](https://pypi.org/project/pyttsx3/) [](https://github.com/nateshmbhat/pyttsx3) [](https://github.com/nateshmbhat)\n\n\n`pyttsx3` is a text-to-speech conversion library in Python. Unlike alternative libraries, **it works offline**.\n\n<a class=\"bmc-button\" target=\"_blank\" href=\"https://www.buymeacoffee.com/nateshmbhat\"><img src=\"https://cdn.buymeacoffee.com/buttons/bmc-new-btn-logo.svg\" alt=\"Buy me a coffee \ud83d\ude07\"><span style=\"margin-left:5px;font-size:19px !important;\">Buy me a coffee \ud83d\ude07</span></a>\n\n## Installation :\n\n\tpip install pyttsx3\n\n> If you get installation errors , make sure you first upgrade your wheel version using :\n`pip install --upgrade wheel`\n\n\n## Features :\n\n- \u2728Fully **OFFLINE** text to speech conversion\n- \ud83c\udf88 Choose among different voices installed in your system\n- \ud83c\udf9b Control speed/rate of speech\n- \ud83c\udf9a Tweak Volume\n- \ud83d\udcc0 Save the speech audio as a file\n- \u2764\ufe0f Simple, powerful, & intuitive API\n\n\n#### Linux installation requirements :\n\n+ If you are on a Linux system and if the voice output is not working, then  :\n\n\tInstall espeak-ng and libespeak1 as shown below:\n\n\t```\n\tsudo apt update && sudo apt install espeak-ng libespeak1\n\t```\n\n## Usage :\n\n```python3\nimport pyttsx3\nengine = pyttsx3.init()\n\n# For Mac, If you face error related to \"pyobjc\" when running the `init()` method :\n# Install 9.0.1 version of pyobjc : \"pip install pyobjc>=9.0.1\"\n\nengine.say(\"I will speak this text\")\nengine.runAndWait()\n```\n\n**Single line usage with speak function with default options**\n\n```python3\nimport pyttsx3\npyttsx3.speak(\"I will speak this text\")\n```\n\n**Changing Voice , Rate and Volume :**\n\n```python3\nimport pyttsx3\nengine = pyttsx3.init() # object creation\n\n# RATE\nrate = engine.getProperty('rate')   # getting details of current speaking rate\nprint (rate)                        # printing current voice rate\nengine.setProperty('rate', 125)     # setting up new voice rate\n\n# VOLUME\nvolume = engine.getProperty('volume')   # getting to know current volume level (min=0 and max=1)\nprint (volume)                          # printing current volume level\nengine.setProperty('volume',1.0)        # setting up volume level  between 0 and 1\n\n# VOICE\nvoices = engine.getProperty('voices')       # getting details of current voice\n#engine.setProperty('voice', voices[0].id)  # changing index, changes voices. o for male\nengine.setProperty('voice', voices[1].id)   # changing index, changes voices. 1 for female\n\nengine.say(\"Hello World!\")\nengine.say('My current speaking rate is ' + str(rate))\nengine.runAndWait()\nengine.stop()\n\n# Saving Voice to a file\n# On Linux, make sure that 'espeak-ng' is installed\nengine.save_to_file('Hello World', 'test.mp3')\nengine.runAndWait()\n```\n\n### **Full documentation of the Library**\n\nhttps://pyttsx3.readthedocs.io\n\n#### Included Text-To-Speech Engines by Operating System\n|                         | Linux | macOS | Windows |\n|-------------------------|:-----:|:-----:|:-------:|\n| [AVSpeech][]            |       |   \u2705\ufe0e  |         |\n| [eSpeak][]              |   \u2705\ufe0e  |   \u2705\ufe0e  |    \u2705\ufe0e   |\n| [NSSpeechSynthesizer][] |       |   \u2705\ufe0e  |         |\n| [SAPI5][]               |       |       |    \u2705\ufe0e   |\n\n> [!NOTE]\n> * AVSpeechSynthesizer support is still experimental.\n> * NSSpeechSynthesizer is deprecated by Apple.\n\n[AVSpeech]: https://developer.apple.com/documentation/avfoundation/speech_synthesis\n[eSpeak]: https://github.com/espeak-ng/espeak-ng?tab=readme-ov-file#readme\n[NSSpeechSynthesizer]: https://developer.apple.com/documentation/appkit/nsspeechsynthesizer\n[SAPI5]: https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ms723627(v=vs.85)\n\nFeel free to wrap another text-to-speech engine for use with ``pyttsx3``.\n\n### Project Links :\n\n* PyPI (https://pypi.org/project/pyttsx3)\n* GitHub (https://github.com/nateshmbhat/pyttsx3)\n* Full Documentation (https://pyttsx3.readthedocs.org)\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Text to Speech (TTS) library for Python 3. Works without internet connection or delay. Supports multiple TTS engines, including Sapi5, nsss, and espeak.",
    "version": "2.99",
    "project_urls": {
        "Homepage": "https://github.com/nateshmbhat/pyttsx3"
    },
    "split_keywords": [
        "gtts",
        " ivona",
        " offline text to speech",
        " offline tts",
        " pyttsx",
        " pyttsx for python3",
        " pyttsx3",
        " speech",
        " speech synthesis",
        " text to speech",
        " text to speech for python",
        " tts",
        " tts for python3"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "84149fb5842581f0419b5eb85f8c26c1c0c0f4cf6b4d5be638ae3157316a2650",
                "md5": "f62b7e09aa4c6f400033e9a7ee06838a",
                "sha256": "ff3e4ff756c24d72b9f3f2f304e0edaafd0f58adb0e6f4b90d930440cda8b207"
            },
            "downloads": -1,
            "filename": "pyttsx3-2.99-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "f62b7e09aa4c6f400033e9a7ee06838a",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 32157,
            "upload_time": "2025-07-08T12:24:20",
            "upload_time_iso_8601": "2025-07-08T12:24:20.299268Z",
            "url": "https://files.pythonhosted.org/packages/84/14/9fb5842581f0419b5eb85f8c26c1c0c0f4cf6b4d5be638ae3157316a2650/pyttsx3-2.99-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "944ea37786f666f4f084fc45e026ca1e63f7b49ac0d90b53fa35ae62b73c96a8",
                "md5": "229bc0443002eca4b9a09ec3bdbc47b5",
                "sha256": "a18a5601530a570c43491b4112887fc34c47e118fc937287db8d21905da1f74e"
            },
            "downloads": -1,
            "filename": "pyttsx3-2.99.tar.gz",
            "has_sig": false,
            "md5_digest": "229bc0443002eca4b9a09ec3bdbc47b5",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 33968,
            "upload_time": "2025-07-08T12:24:21",
            "upload_time_iso_8601": "2025-07-08T12:24:21.314616Z",
            "url": "https://files.pythonhosted.org/packages/94/4e/a37786f666f4f084fc45e026ca1e63f7b49ac0d90b53fa35ae62b73c96a8/pyttsx3-2.99.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-08 12:24:21",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "nateshmbhat",
    "github_project": "pyttsx3",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "pyttsx3"
}