Spaces:
				
			
			
	
			
			
		Sleeping
		
	
	
	
			
			
	
	
	
	
		
		
		Sleeping
		
	| import streamlit as st | |
| import fitz # PyMuPDF for PDF text extraction | |
| from gtts import gTTS | |
| import tempfile | |
| import os | |
| # App Title | |
| st.title("PDF to Speech with gTTS") | |
| # Description | |
| st.write(""" | |
| This app lets you upload a PDF, extracts the text, and converts it into a human-like voice using Google Text-to-Speech (gTTS). | |
| You can adjust the **speed** and **language** for a personalized experience. | |
| """) | |
| # Sidebar options for customization | |
| st.sidebar.header("Customize Voice") | |
| speed = st.sidebar.slider("Speech Speed (rate)", min_value=100, max_value=300, value=150, step=10) # 100 to 300 words per minute | |
| slow = st.sidebar.checkbox("Slow Down the Speech", value=False) # Slow down speech | |
| language = st.sidebar.selectbox("Language", ["English", "French", "Spanish", "German"], index=0) # Select language | |
| # File upload | |
| uploaded_file = st.file_uploader("Upload a PDF", type=["pdf"]) | |
| # Language mapping for gTTS | |
| language_mapping = { | |
| "English": "en", | |
| "French": "fr", | |
| "Spanish": "es", | |
| "German": "de" | |
| } | |
| if uploaded_file is not None: | |
| # Extract text from the uploaded PDF | |
| with fitz.open(stream=uploaded_file.read(), filetype="pdf") as pdf: | |
| text = "" | |
| for page in pdf: | |
| text += page.get_text() | |
| # Display extracted text | |
| st.subheader("Extracted Text") | |
| if text.strip(): | |
| st.write(text) | |
| else: | |
| st.warning("No text found in the uploaded PDF. Please upload a valid document.") | |
| if text.strip(): | |
| # Limit text for TTS to avoid overly long processing | |
| max_length = 1000 # Adjust as needed | |
| text = text[:max_length] | |
| # Generate speech using gTTS | |
| tts = gTTS(text=text, lang=language_mapping[language], slow=slow) | |
| # Save audio to a temporary file | |
| with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as temp_file: | |
| tts.save(temp_file.name) | |
| temp_file_path = temp_file.name | |
| # Display audio player in Streamlit | |
| st.subheader("Listen to the Speech") | |
| st.audio(temp_file_path, format="audio/mp3") | |
| # Add download button | |
| with open(temp_file_path, "rb") as audio_file: | |
| st.download_button( | |
| label="Download MP3", | |
| data=audio_file, | |
| file_name="output_audio.mp3", | |
| mime="audio/mp3" | |
| ) | |
| # Clean up the temporary file after use | |
| os.remove(temp_file_path) | |
| else: | |
| st.info("Upload a PDF to get started.") | |
| # Footer | |
| st.markdown(""" | |
| --- | |
| π‘ **Tip**: Adjust the settings in the sidebar to customize your speech experience. | |
| """) | |