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

基于pyttsx3的PDF阅读器如何实现音频暂停、恢复及停止功能?

实现PDF阅读器的音频暂停/恢复/停止功能

原代码的问题在于speaker.runAndWait()是阻塞调用,一旦开始朗读就会执行到当前文本结束,无法实时响应暂停或停止指令。要实现随时控制的功能,需要通过线程分离朗读逻辑+全局状态变量+实时键盘监听来实现,具体方案如下:

修改后的完整代码

import pyttsx3
import PyPDF2
import keyboard
import threading
import time

# 全局状态变量,控制朗读状态
is_paused = False
is_stopped = False

def read_pdf():
    book = open(r"C:\Users\M E T R O\OneDrive\Desktop\self-motivational books\the_richest_man_in_babylon.pdf", "rb")
    pdfreader = PyPDF2.PdfReader(book)
    pages = len(pdfreader.pages)
    speaker = pyttsx3.init()
    speaker.setProperty("rate", 140)

    for i in range(4, pages):
        if is_stopped:
            break
        page = pdfreader.pages[i]
        text = page.extractText()
        # 将文本拆分为短句,提升状态响应灵敏度
        sentences = text.split('. ')
        for sentence in sentences:
            if is_stopped:
                speaker.stop()
                book.close()
                return
            # 暂停时循环等待,直到恢复或停止
            while is_paused:
                speaker.stop()
                time.sleep(0.1)
                if is_stopped:
                    book.close()
                    return
            speaker.say(sentence + '.')
            speaker.runAndWait()
    book.close()

# 键盘事件处理函数
def toggle_pause(event):
    global is_paused
    is_paused = not is_paused

def stop_reading(event):
    global is_stopped
    is_stopped = True

# 绑定快捷键:空格=暂停/恢复,Q=停止
keyboard.on_press_key('space', toggle_pause)
keyboard.on_press_key('q', stop_reading)

# 启动朗读线程
reading_thread = threading.Thread(target=read_pdf)
reading_thread.start()

# 主线程保持运行,监听键盘事件
reading_thread.join()

关键逻辑说明

  • 线程分离:把PDF朗读逻辑放到独立线程中,避免阻塞主线程的键盘监听
  • 状态变量:用is_paused和is_stopped两个全局变量标记当前状态,朗读过程中实时检查变量值
  • 文本拆分:将每页文本拆分为短句朗读,确保每次朗读的内容片段足够短,让暂停/停止指令能及时响应
  • 键盘监听:通过keyboard模块绑定快捷键,按下空格切换暂停/恢复状态,按下Q直接终止朗读
  • 资源清理:停止朗读时及时关闭PDF文件,释放资源

内容的提问来源于stack exchange,提问作者Chandler Bong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:15:33