Skip to main content

Leverage the macOS `say` command into you scripts

Project description


Ever wanted to leverage the macOS builtin speech synthesis directly into python ? Or just make your code to talk...
With the Python macos_speech package you can do it in a pythonic way. Easy and zen.

Getting Started:


pip install macos_speech


git clone
cd macos_speech
pip install .


macOS 10.x or for oldest OS X
For now, this package only works on Python >= 2.6 and Python >= 3.6.x
Only tested on Python 2.7.10 and >= 3.7.2.

Basic usage

from macos_speech import Synthesizer

speaker = Synthesizer(voice='Alex', device='Built-in')

speaker.text = """How my God! I can make my python code to talk!

And I can even send multiple lines! Awesome.

# or


Get informations

from macos_speech import Synthesizer

speaker = Synthesizer()

for voice in speaker.voices:
  print('{} {} {}'.format(, voice.lang, voice.desc))


print('Audio devices:')
for device in speaker.devices:
  print('ID: {}, NAME: {}'.format(,


print('''Output file possible formats:
for format in speaker.formats:
  print('{} {} ({}) [{}] [{}]'.format(,,

Synthesizer Properties

from macos_speech import Synthesizer

synthe = Synthesizer()

# Helper properties

# Configuration properties

# File IO (takes absolute pathes strings)
synthe.infile  # A file containing text to say (mutually exclusive with self.text - high priority)
synthe.outfile # The output audio file (default should be 'output.aiff'
               # but you can specify file and data formats)

# Simple configs (takes strings)
synthe.rate    # The speech rate
synthe.quality # The audio quality (between 0 and 127 both included)
synthe.text    # The text to say (mutually exclusive with self.infile - low priority)

# Pythonified configs (takes macos_speech.CustomClasses)
synthe.format  # The audio output file/data format : macos_speech.AudioFormat
               # (Works only with self.outfile populated)

synthe.device  # The audio output device           : macos_speech.AudioDevice
               #                                 (or 'name' or 'id' on Python 3)
               # (Only used if no self.outfile)

synthe.voice   # The voice to use                  : macos_speech.Voice
               #                                   (or 'name' on Python 3)

Go Further

from macos_speech import Synthesiser, AudioFormat

# Speech manipulation:
# To create more realistic speech you can play on time and rate.

# You can add delays between words by following a simple syntax.
# Just set the delay by writing time in milliseconds between brackets.
mytext = 'I want to say... [100] something.'

# And/Or specify a rate in words per minutes to your Synthesiser
synthe = Synthesiser(voice='Alex', rate=50, text=mytext)

# Record to file:

# Basically, setting an outfile with supported extension would be enough to correctly encode the file.
speaker = Synthesiser(voice='Alex', text='Some text to record', outfile='rec.mp4')

# But you can customize a lot more your output file:
format  = AudioFormat('3gp2', dataformat='Qclp', bitrate=13000)
speaker = Synthesiser(voice='Alex', text= "Some text", format=format, outfile='out.3g2')

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for macos-speech, version 1.1.0
Filename, size File type Python version Upload date Hashes
Filename, size macos_speech-1.1.0-py3-none-any.whl (5.8 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size macos_speech-1.1.0.tar.gz (5.1 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page