有声小说书屋阅读软件 功能及技术分析

目录

一、有声小说书屋软件功能

1、界面介绍

2、听书功能

1)点击上册工具栏的  喇叭,可实现听书功能,

2)生成网页,借助 edge浏览器的听书功能

3、 扩展书屋

二、所用技术介绍

1、导入小说,自动分章节功能

2、显示技术

3、XML存储技术

4、本地网站技术


这是我历经十来年,一直坚持开发的一个软件,可以把网络上的公版TXT小说,直接转换为本地藏书,并提供多种阅读、听书方式,目前已经比较完善了。

一、有声小说书屋软件功能

1、界面介绍

左侧是树形列表, 代表着书籍、章节

右侧是显示, 显示章节内容

 

2、听书功能

1)点击上册工具栏的  喇叭,可实现听书功能,

使用的是微软的TTS技术,不过目前的TTS 还是很机械声,听书效果一般

2)生成网页,借助 edge浏览器的听书功能

左侧,树形列表中,选中某本书,然后右键点击 出现菜单

选择生成本地网站

这样就生成 本地网页版


默认edge浏览器打开,

右键 选择 大声朗读功能,  即可用比较好的自然语音 阅读

3、 扩展书屋

首先,在竖形列表中,选中一个目录,比如四大名著,然后将TXT格式小说或epub格式小说,拖入到左侧竖形列表中,就可以自动往书屋中,添加新书了。

二、所用技术介绍

总体框架使用的VC的 SDI 单文档程序 框架

1、导入小说,自动分章节功能

这里使用线程才实现导入分章节模块

//导入小说线程
UINT ImportXiaoshuoThread(LPVOID parm)
{
	CMainFrame *pMainFrm=m_XiaoshuoParam.pFram;
	CImportTreeView *pView=m_XiaoshuoParam.pView;

	CTreeCtrl &nTreeCtrl=*m_XiaoshuoParam.pTreeCtrl;

	pMainFrm->beginImport(m_XiaoshuoParam.pFram,m_XiaoshuoParam.hDrop,m_XiaoshuoParam.pView,m_XiaoshuoParam.pImportView,nTreeCtrl,m_XiaoshuoParam.hItem);

	return 1;
}

 	AfxBeginThread(ImportXiaoshuoThread,NULL);

1)、epub格式小说

对于epub格式,有专门的处理方式,网上有个好像是华为的epub格式库,借鉴它的方法进行解析的

2)、txt格式小说

这是使用最广的格式了,

解析的策略是,读取小说,然后按照 关键字进行章节的划分,如:章、回、节、卷等,实在没有找到关键字的,则按字数划分

2、显示技术

派生 CScrollView 类,实现自己的显示视图界面。

按照BODY、 段落 、行、字,进行数据结构设计, 然后进行显示算法设计等

3、XML存储技术

导入后的小说章节,采用XML格式进行存储。

网上有开源的XML读写类,可以使用

4、本地网站技术

先使用VUE,打造本地网站

客户端生成网站,实际上就是写文件

void CMyView::ToGenMyHtml()
{

	CString htmlStr;

	htmlStr=L"<html  lang=\"zh-cn\">\n\
		<head>\n\
		  <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n\
		  <title>古典小说-听小说</title>\n\
		  <link rel=\"stylesheet\" href=\"HTML/js/element_lib/theme-chalk/index.css\">\n\
		  <link rel='stylesheet' href='http://gudianxiaoshuo.com/js/myCss/gudianxiaoshuo.css'>\n\
		  <script src=\"HTML/js/vue.js\"  type=\"text/javascript\"  charset=\"utf-8\"></script>\n\
		  ";

	CString jsFile;

	if (pMain->BExistFile(L"gudian.txt"))
	{
		jsFile = L"<script type=\"text/javascript\" src=\"http://gudianxiaoshuo.com/js/myHeader_gudian.js\"  charset=\"utf-8\"></script>\n";
	}
	else if (pMain->BExistFile(L"web.txt"))
	{
		jsFile = L"<script type=\"text/javascript\" src=\"http://gudianxiaoshuo.com/js/myHeader.js\"  charset=\"utf-8\"></script>\n";
	}
	else{
		jsFile = L"<script type=\"text/javascript\" src=\"http://gudianxiaoshuo.com/js/myHeader_yousheng.js\"  charset=\"utf-8\"></script>\n";
	}
	jsFile += L"<script type=\"text/javascript\" src=\"http://gudianxiaoshuo.com/js/comp/comp_headBtns.js\"  charset=\"utf-8\"></script>\n";

	htmlStr += jsFile;


	htmlStr += L"</head>\n";


	CFile nFile_Save;

	CString strFile=g_strPath+_T("听小说.html");


	nFile_Save.Open(strFile,CFile::modeCreate|CFile::modeWrite);

	WORD sign=0xfeff;  //保存为UNICODE格式  否则的话 中文可能出现乱码
	nFile_Save.Write(&sign,2);

	nFile_Save.Write(htmlStr,htmlStr.GetLength()*2);    // 直接将数据保存到文档中, ASCII 方式存储, 其中 ASC为0的 不显示  效果与空格相同,但ASC吗不同  空格为0x20  
	nFile_Save.Close();


	g_curWebTitle = L"古典小说-听小说";

	//ShellExecute(NULL,NULL,strFile,NULL,NULL,SW_NORMAL);
	OpenUrlWithEdge(strFile.GetBuffer());
	strFile.ReleaseBuffer();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清水迎朝阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值