C++和python代码实现朗读文本的功能(附源代码)

2023-05-16

闲来无事,平时就喜欢看看小说之类的。突发奇想,好多小说软件上的听小说功能都是收费的,咱们写个小程序读一读,岂不是很哇塞!
看了一些资料,这里给大家分享出来,已经测试可以用。

C++代码和python代码实现对文本的朗读功能,代码比较简单,仅供参考。

主要是采用的接口是Microsoft Speech SDK。
Win7以上的系统不需要再次安装,首先包含头文件和库文件:

#include "sapi.h"	// 语音头文件
#include "sphelper.h"	// 语音识别头文件
#pragma comment(lib, "sapi.lib")

程序运行有可能报错,按以下流程处理即可。

error C4996: ‘GetVersionExW’: 被声明为已否决

在这里插入图片描述
右键工程属性,设置C++ ----- 常规 ----- SDL检查 为 “ 否 ”。
在这里插入图片描述

C++实例代码:
代码中没有写文本读取的操作,需要的可以自己改改,比较简单。

void CfvoiceDlg::OnBnClickedVoice()
{
	// TODO: 在此添加控件通知处理程序代码
	ISpVoice *pfvoice = NULL;
	if (FAILED(CoInitialize(NULL)))
	{
		return;
	}
	// 初始化
	HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void**)&pfvoice);
	ISpObjectToken * pSpObjToken = NULL;
	if (SUCCEEDED(SpFindBestToken(SPCAT_VOICES, _T("language=804"), NULL, &pSpObjToken)))	// 804 代表中文
	{
		pfvoice->SetVoice(pSpObjToken);	// 设置声音大小
		pfvoice->SetRate(-2);			// 设置语速
		pSpObjToken->Release();
	}
	else
	{
		return;
	}
	if (SUCCEEDED(hr))
	{
		CString csText = _T("播放语音测试文本");
		hr = pfvoice->Speak(csText.AllocSysString(), 0, NULL);
		pfvoice->Release();
		pfvoice = NULL;
	}
	CoUninitialize();
}

python代码运行用到的包,需要安装,可以按错误提示进行下载安装。
如果遇到安装问题,可以看看python学习之word文档转换成pdf文档

pip install pywin32
pip install pypiwin32
pip install --user pypdf2

python代码实例:

import winsound
import win32com
from win32com.client import Dispatch, constants
import random
import time
speak_out = win32com.client.Dispatch('sapi.spvoice')
lang={}


def view():                                    # 按字典顺序输出方言
    for key,value in lang.items():
        print(key,":",value)                   # 按字典顺序显示方言   
        speak(key+"     "+value)               # 按字典顺序语音播放方言
        time.sleep(1)                          # 循环间隔时间为1秒钟
def speak(str):                                # 按播放语音
    speak_out.speak(str)                       # 输出方言解释
    winsound.PlaySound(str,winsound.SND_ASYNC)   # 输出结束音
with open("note.txt","r",encoding='UTF-8') as file: # 读取文件中的方言给字典
    while True:
       line = file.readline()
       if line =='':            
           break
       group=line.split(":")           # 按“:”分割字符串
       lang[group[0]]=group[1] 
print("    东北方言\n")
print("说明:输入“q”退出系统;输入“s”按顺序输出并朗读词典内容。")
while True:
    word=input("请输入要查找的东北方言:").strip()
    if word.lower()=="q":
        break
    if word.lower()=="s":
        view()
    else:
        note=lang.get(word,"no")
        if note!="no":
            print(word,":",note)
            speak(word+":    "+note)
        else:
            print("没有检索到相关东北方言!")

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++和python代码实现朗读文本的功能(附源代码) 的相关文章

  • 如何查看Databricks中的所有数据库和表

    我想列出 Azure Databricks 中每个数据库中的所有表 所以我希望输出看起来像这样 Database Table name Database1 Table 1 Database1 Table 2 Database1 Table
  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • 通过 Scrapy 抓取 Google Analytics

    我一直在尝试使用 Scrapy 从 Google Analytics 获取一些数据 尽管我是一个完全的 Python 新手 但我已经取得了一些进展 我现在可以通过 Scrapy 登录 Google Analytics 但我需要发出 AJAX
  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • NotImplementedError:无法将符号张量 (lstm_2/strided_slice:0) 转换为 numpy 数组。时间

    张量流版本 2 3 1 numpy 版本 1 20 在代码下面 define model model Sequential model add LSTM 50 activation relu input shape n steps n fe

随机推荐