You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pyttsx3实现PDF语音朗读时的倒计时语音播报问题求助

解决PDF语音朗读中的倒计时语音播报问题

问题描述

需要修改现有PDF语音朗读Python代码,将原有的5到1倒计时功能改为10到0,同时让扬声器播报每个倒计时数字。尝试添加speaker.say(str(i))实现语音播报时出现报错,请求解决。

原代码如下:

import pyttsx3 as audio_converter
import PyPDF2  # version 1.26.0
import time
import sys


book = open("OOP.pdf", "rb")
pdfreader = PyPDF2.PdfFileReader(book)

pages = pdfreader.numPages  # to find out number of pages
print(f'PDF name : "Object Oriented Programing (OOP)\nPage number : {pages}"')

speaker = audio_converter.init()  # to init the package of pyttsx3
page = pdfreader.getPage(7)  # pdf page number + 1 (index 0)
text = page.extractText()
speaker.say(f"Bismillah, Let's read the pdf {text}")

# pdf audio will start after the following commands
for i in range(5, 0, -1):
    sys.stdout.write(str(i)+' ')
    sys.stdout.flush()
    time.sleep(1)
speaker.runAndWait()  # this line will read existing pdf only

修改后可运行代码

import pyttsx3 as audio_converter
import PyPDF2  # version 1.26.0
import time
import sys

book = open("OOP.pdf", "rb")
pdfreader = PyPDF2.PdfFileReader(book)

pages = pdfreader.numPages  # 获取PDF总页数
print(f'PDF名称:"Object Oriented Programing (OOP)\n总页数:{pages}"')

speaker = audio_converter.init()  # 初始化语音转换引擎
page = pdfreader.getPage(7)  # 读取第8页(索引从0开始计数)
text = page.extractText()

# 执行10到0的倒计时,同步播报每个数字
for i in range(10, -1, -1):
    sys.stdout.write(str(i)+' ')
    sys.stdout.flush()
    # 播报当前倒计时数字
    speaker.say(str(i))
    speaker.runAndWait()  # 立即处理当前语音请求,避免队列堆积
    time.sleep(1)

# 倒计时结束后开始朗读PDF内容
speaker.say(f"Bismillah, Let's read the pdf {text}")
speaker.runAndWait()

book.close()  # 关闭PDF文件,释放资源

问题原因与修改说明

  • 报错原因:

    1. 原代码的range(5, 0, -1)仅循环5到1,无法实现10到0的需求;直接添加speaker.say(str(i))后未调用speaker.runAndWait(),pyttsx3的语音请求会堆积在队列中,time.sleep的阻塞会导致引擎无法及时处理请求,引发异常。
    2. 原代码将PDF朗读请求放在倒计时之前,会导致倒计时未完成就开始朗读PDF,不符合需求逻辑。
  • 核心修改点:

    • 调整循环范围为range(10, -1, -1),确保覆盖10到0的所有数字。
    • 在每次播报倒计时数字后调用speaker.runAndWait(),让语音引擎立即处理当前播报请求,避免队列堆积和顺序混乱。
    • 将PDF朗读的语音请求移到倒计时循环之后,保证倒计时完成后再开始朗读PDF。
    • 添加book.close()关闭文件,避免资源泄漏。

内容的提问来源于stack exchange,提问作者Jabed Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 00:52:40