Skip to content

Instantly share code, notes, and snippets.

@zsarge
Created February 16, 2022 21:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zsarge/e6b7cfbdf3b2204a43dec612fd73541a to your computer and use it in GitHub Desktop.
Save zsarge/e6b7cfbdf3b2204a43dec612fd73541a to your computer and use it in GitHub Desktop.
Convert lots of text files to mp3s using Google Text to Speech
import os
import gtts
from gtts import gTTS
from tqdm import tqdm
from time import sleep
from random import randrange
from datetime import datetime
"""
This will turn:
./book
├── pages
│   ├── p1.txt
│   ├── p2.txt
│   ├── p3.txt
│   └── ...
└── recordings
into:
./book
├── pages
│   ├── p1.txt
│   ├── p2.txt
│   ├── p3.txt
│   └── ...
└── recordings
├── p1.mp3
├── p2.mp3
├── p3.mp3
└── ...
"""
def page_path(page_number):
return f"book/pages/p{page_number}.txt"
def recording_path(page_number):
return f"book/recordings/p{page_number}.mp3"
def save_page(page_number):
if os.path.exists(recording_path(page_number)):
return
print(f"saving page {page_number} at {datetime.now().strftime('%d-%b-%Y (%H:%M:%S)')}")
with open(page_path(page_number)) as page:
text = page.read()
tts = gTTS(text, lang='en')
tts.save(recording_path(page_number))
# try and prevent too many requests error
sleep(randrange(320, 400)) # sleep for at least 5 minutes
# sleeping for less than 5 minutes means you'll likely get rate-limited by Google
for i in tqdm(range(1, 175 + 1)): # The book I was converting had 175 pages
save_page(i)
@zsarge
Copy link
Author

zsarge commented Feb 17, 2022

This is powered by the gTTS library: https://github.com/pndurette/gTTS

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment