需求
1.最近看pdf文档以及一些文本文档,不想看,想着文档自己能说话把自己的内容读出来就行了
省的我还得看,我就闭着眼听文档自己读
2.怎么触发这个功能?快捷键,或者鼠标手势
就这样,鼠标划一下,自动激活
为什么鼠标划的图案设置成w呢?我觉得他像声音的波形,比较好记,
这样的话当我选择了文字,然后鼠标划出这个图案,文字就能自动朗读了
原理
1.首先选择文字段落,这个要开发的软件应该能够自动将这些文字内容复制进入剪切板,实现"Ctrl C"功能
2.这个软件应该读出剪切板的文字,并将这些文字送入百度的文字转语音接口,得到回传的语音
3.播放得到的语音
4.使用mouseinc鼠标手势软件,为这个软件设置快捷键,然后使用鼠标手势触发
给这个要开发的小软件设置的快捷键是Ctrl Shift Alt L,就怕有重复的快捷键,使劲复杂着设置
需求升级
有些文字无法复制,能否截图识别,实现ocr功能,自动识别出图片的文字然后自动朗读
呵呵,这个是伪需求,因为我的pdf文档的文字可以复制,我i暂时够用,这个升级的需求就不要了,等看的文档文字不能复制再升级功能吧
实现
import pyperclip
from aip import AipSpeech # 这是百度的aip包,
import pygame
from mutagen.mp3 import MP3
import time
import os
global flag_last_music_name
flag_last_music_name = 0
# # 复制到粘贴板
# pyperclip.copy('牛顿')
# 从粘贴板读出
spam = pyperclip.paste()
print(spam)
basic_path = r"C:\Users\Administrator.DESKTOP-KMH7HN6\AppData\Local\Temp\python_pgm\my_voice_brain\mymusic"
def play_sentence(myword):
global flag_last_music_name
flag_last_music_name = flag_last_music_name + 1
if myword:
lan = myword
APP_ID = '' # 引号之间填写之前在ai平台上获得的参数,百度语音接口密钥,免费的,自己去百度的开发者平台注册
API_KEY = '' # 如上
SECRET_KEY = ' ' # 如上
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
result = client.synthesis(lan, 'zh', 1, {'vol': 10, 'per': 1, 'spd': 3, 'pit': 5})
'''
固定值zh。语言选择,目前只有中英文混合模式,填写固定值zh
客户端类型选择,web端填写固定值1
spd语速,取值0-15,默认为5中语速(选填)
pit音调,取值0-15,默认为5中语调(选填)
vol音量,取值0-15,默认为5中音量(选填)
per发音人选择, 0为普通女声,1为普通男生,3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女声
'''
# 识别正确返回语音二进制 错误则返回dict 参照下面错误码
name_music = str(flag_last_music_name)
last_name_music = str(flag_last_music_name - 1)
path = basic_path + '\%s.mp3' % (name_music)
last_path = basic_path + '\%s.mp3' % (last_name_music)
if not isinstance(result, dict):
with open(path, 'wb') as f:
f.write(result)
pc_play_music(path)
if (flag_last_music_name > 2):
try:
os.remove(last_path)
except:
print("没有发现应该删除的音频")#语音文件播放后删除,不留着,播放后就没用了
# 我的意思是音乐播放完就删除,要不然一直生成语音文件,谁受得了
def pc_play_music(n):
global flag_play_command
flag_play_command = 0
print("开始播放音乐")
audio = MP3(n)
pygame.mixer.init()
path = n
pygame.mixer.music.load(path)
pygame.mixer.music.play()
for i in range(0, int(audio.info.length) + 2):
if i == int(audio.info.length) or flag_play_command == 1: # 表示有应用请求音频或者已经播放完
pygame.mixer.music.stop()
pygame.quit()
flag_play_command = 0
break
else:
time.sleep(1)
print("播放完成")
play_sentence(spam)