⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ttsdlg.cpp.bak

📁 TTS语音开发示例
💻 BAK
📖 第 1 页 / 共 2 页
字号:
void CTTSDlg::OnCancel()
{
	
	CDialog::OnCancel();
}

void CTTSDlg::OnOK()
{
	//CDialog::OnOK();
}

void CTTSDlg::OnTimer(UINT_PTR nIDEvent)
{
	int status;
	STTSQueryPlayStatus(&status);
	if(status == 0 && m_senPos != m_page.end())	//读完一句话,且没有暂停或停止,读下一句
	{
		m_senPos++;
		OnPlay();
	}
	CDialog::OnTimer(nIDEvent);
}


void CTTSDlg::InitIndex()
{
	//初始化
	m_bookIndex.resize(1000);
	memset(m_readTag, 1, 1000);
	memset(m_saveTag, 1, 1000);
	m_isLoad = false;
	m_isSave = false;
	m_isCover = false;
	m_isDelete = false;

	//this is the index data file
	ifstream file("D:/TTS-Data/index.dat");
	string line;
	
	//初始化文件索引、阅读标记以及存储标记
	::getline(file, line);
	//get the readTeg
	istringstream temp(line);
	temp >> m_lastReadBook >> m_lastSaveBook;

	while(::getline(file, line))
	{
		istringstream input(line);
		int readTag;
		int bookNum;
		string content;

		input >> bookNum >> readTag >> content;
		m_bookIndex[bookNum] = content;
		m_readTag[bookNum] = readTag;
	}

	//初始化中间变量
	m_currentBook = m_lastReadBook;
	m_currentPage = m_readTag[m_lastReadBook];
	m_curSaveBook = m_lastSaveBook;
	m_curSavePage = m_saveTag[m_lastSaveBook];
}

void CTTSDlg::NextBook()
{
	ostringstream readStr;
	if(m_isSave)		//当前为录制状态
	{
		if(m_curSaveBook != 999)
		{
			m_curSaveBook++;
			m_curSavePage = m_saveTag[m_curSaveBook];

			readStr << "录制当前阅读的内容到第" << m_curSaveBook << "书。"
				<< m_bookIndex[m_curSaveBook] << "第" << m_saveTag[m_curSaveBook]
				<< "页。是否确认";
			//string read = "录制当前阅读的内容到第" + m_curSaveBook + "书。";
		}
		else
			readStr << "已经到达最后一本书.";
	}
	else if(m_isDelete)		//当前为删除状态
	{
		if(m_currentBook != 999)
		{
			m_currentBook++;
			m_currentPage = 1;

			readStr << "清除当前的内容, 第"  << m_currentBook << "本书"
				<< m_bookIndex[m_currentBook] << "是否确认";
		}
		else
			readStr << "已经到达最后一本书.";
	}
	else	//当前为阅读状态
	{
		m_isLoad = true;
		if(m_currentBook != 999)	//如果不是最后一本书
		{
			m_currentBook++;
			m_currentPage = m_readTag[m_currentBook];
			
			if(m_bookIndex[m_currentBook].length() == 0)
				readStr << "第" << m_currentBook+1 << "本书,该书为空白。";
			else
			{
				readStr << "第" << m_currentBook+1 << "本书。" << m_bookIndex[m_currentBook]
						<< "当前读到第" << m_readTag[m_currentBook] << "页";
			}
			
		}
		else
			readStr << "已经到达最后一本书.";
	}

	STTSPlayString(m_hTTSInstance, (char*)readStr.str().c_str(), 1);
}

void CTTSDlg::PreBook()
{
	ostringstream readStr;

	if(m_isSave)				//当前状态为录制
	{
		if(m_curSaveBook != 0)
		{
			m_curSaveBook--;
			m_curSavePage = m_saveTag[m_curSaveBook];

			readStr << "录制当前阅读的内容到第" << m_curSaveBook << "书。"
				<< m_bookIndex[m_curSaveBook] << "第" << m_saveTag[m_curSaveBook]
				<< "页。" << "是否确认";
		}
		else
			readStr << "已经到达第一本书";
	}
	else if(m_isDelete)
	{
		if(m_currentBook != 0)
		{
			m_currentBook--;
			m_currentPage = 1;

			readStr << "清除当前的内容, 第"  << m_currentBook << "本书"
				<< m_bookIndex[m_currentBook] << "是否确认";
		}
		else
			readStr << "已经到达第一本书";
	}
	else		//当前状态为阅读
	{
		m_isLoad = true;
		if(m_currentBook != 0)	//如果不是第一本书
		{
			m_currentBook--;
			m_currentPage = m_readTag[m_currentBook];

			if(m_bookIndex[m_currentBook].length() == 0)
				readStr << "第" << m_currentBook+1 << "本书,该书为空白。";
			else
			{
				readStr << "第" << m_currentBook+1 << "本书。" << m_bookIndex[m_currentBook] << "当前读到第" << m_readTag[m_currentBook] << "页";
			}
		}
		else
			readStr << "已经到达第一本书";
	}

	STTSPlayString(m_hTTSInstance, (char*)readStr.str().c_str(), 1);
}

void CTTSDlg::NextPage()
{
	ostringstream readStr;
	if(m_isSave)		//当前状态为录制状态
	{
		m_curSavePage++;

		readStr << "录制当前阅读的内容到第" << m_curSavePage << "页"
			<< "请按录制键开始录制";
	}
	else if(m_isDelete)		//当前状态为删除状态
	{
		m_currentPage++;
		ostringstream pageName;
		pageName << "D:/TTS-Data" << m_currentBook << "/" << m_currentPage;

		string line;
		ifstream file(pageName.str().c_str());
		if(!file.is_open())		//该页为空白页
		{
			readStr << "该页为空白页";
		}
		else
		{
			::getline(file, line);
			file.close();
			readStr << "清除当前的内容, 第" << m_currentPage << "页" << line
				<< "请按清除键确认清除";
		}
	}
	else	//当前状态为阅读状态
	{
		//判断该书是否有内容
		if(m_bookIndex[m_currentBook].length() == 0)
		{
			STTSPlayString(m_hTTSInstance, (char*)"该书为空白", 1);
			return;
		}
		
		m_currentPage++;
		//当前页的名字
		ostringstream pageName;
		pageName << "D:/TTS-Data" << m_currentBook << "/" << m_currentPage;
		intptr_t handle;
		_finddata_t fileInfo;
		
		handle = _findfirst(pageName.str().c_str(), &fileInfo);

		if(handle == -1)	//如果该页为空
			readStr << "第" << m_currentPage << "页。本页为空白页。";
		else				//如果该页不为空
		{
			ifstream file(pageName.str().c_str());
			string line;

			//得到该页的第一行
			::getline(file, line);
			readStr << "第" << m_currentPage << "页。" << line << "请按朗读暂停键开始阅读";
			file.close();
			_findclose(handle);
		}
	}


	STTSPlayString(m_hTTSInstance, (char*)readStr.str().c_str(), 1);
}

void CTTSDlg::PrePage()
{
	ostringstream readStr;
	if(m_isSave)			//当前状态为录制状态
	{
		if(m_curSavePage == 1)
			readStr << "已到达首页";
		else
		{
			m_curSavePage--;
			readStr << "录制当前阅读的内容到第" << m_curSavePage << "页"
				<< "请按录制键开始录制";
		}
	}
	else if(m_isDelete)		//当前状态为删除 
	{
		if(m_currentPage == 1)
			readStr << "已到达首页";
		else if(m_currentPage > 1)
		{
			m_currentPage--;
			ostringstream pageName;
			pageName << "D:/TTS-Data" << m_currentBook << "/" << m_currentPage;

			string line;
			ifstream file(pageName.str().c_str());
			if(!file.is_open())		//该页为空白页
				readStr << "该页为空白页";
			else
			{
				::getline(file, line);
				file.close();
				readStr << "清除当前的内容, 第" << m_currentPage << "页" << line
					<< "请按清除键确认清除";
			}
		}
	}
	else	//当前状态为阅读状态
	{
		//判断该书是否有内容
		if(m_bookIndex[m_currentBook].length() == 0)
		{
			STTSPlayString(m_hTTSInstance, (char*)"该书为空白", 1);
			return;
		}
		
		if(m_currentPage == 1)
			readStr << "已到达首页";
		else if(m_currentPage > 1)
		{	
			m_currentPage--;

			_finddata_t fileInfo;
			intptr_t handle;
			ostringstream pageName;
			pageName << "D:/TTS-Data" << m_currentBook << "/" << m_currentPage;

			handle = _findfirst(pageName.str().c_str(), &fileInfo);

			if(handle == -1)		//this page is empty
				readStr << "第" << m_currentPage << "页。本页为空白页。";
			else					//this page is not empty
			{
				ifstream file(pageName.str().c_str());
				string line;

				//得到该页的第一行
				::getline(file, line);

				readStr << "第" << m_currentPage << "页。" << line << "请按朗读暂停键开始阅读";

				file.close();
				_findclose(handle);
			}
		}
	}

	STTSPlayString(m_hTTSInstance, (char*)readStr.str().c_str(), 1);
}

void CTTSDlg::LoadSavedPage()
{
	ostringstream pageName;
	pageName << "D:/TTS-Data/" << m_currentBook << "/"
		<< m_currentPage;

	ifstream file(pageName.str().c_str());

	if(!file.is_open())
	{
		STTSPlayString(m_hTTSInstance, "该页为空白页", 1);
		return;
	}

	if(!m_page.empty())
		m_page.clear();

	//装载存储的文件
	string line;
	while(::getline(file, line))
		m_page.push_back(line);

	m_page.push_back("朗读结束, 按暂停/虫读键重新听一遍,按返回键继续操作。");
	file.close();
	m_senPos = m_page.begin();

	//更新阅读标记
	m_lastReadBook = m_currentBook;
	m_readTag[m_currentBook] = m_currentPage;
}

void CTTSDlg::CheckSavePage()
{
	//当第二次进行确认时,保存该页内容
	if(m_isSave)
	{
		SavePage();
		return;
	}

	m_isSave = true;
	ostringstream readStr;
	readStr << "录制当前阅读的内容到第"<< m_lastSaveBook << "书。"
		<< m_bookIndex[m_lastSaveBook].c_str() << "第" 
		<< m_saveTag[m_lastSaveBook] << "页。" << "是否确认";

	STTSPlayString(m_hTTSInstance, (char*)readStr.str().c_str(), 1);
}

void CTTSDlg::SavePage()
{
	ostringstream pageName;
	pageName << "D:/TTS-Data/" << m_curSavePage << "/"
			<< m_curSavePage;
	if(m_isCover)		//用户要求覆盖该页内容
	{
		ofstream file(pageName.str().c_str());
		for(list<string>::iterator pos = m_page.begin();
			pos != m_page.end(); pos++)
			file << *pos << endl;
		file.close();

		//更新录制标记
		m_lastSaveBook = m_curSaveBook;
		m_saveTag[m_curSaveBook] = m_curSavePage + 1;

		//表示录制成功
		m_isCover = false;
		m_isSave = false;

		STTSPlayString(m_hTTSInstance, "该页内容已经录制", 1);
		
	}
	else
	{
		//检查该页内是否已经有内容
		ifstream checkFile(pageName.str().c_str());
		if(!checkFile.is_open())	//该页为空白页
		{
			//写入文件
			ofstream file(pageName.str().c_str());
			for(list<string>::iterator pos = m_page.begin();
				pos != m_page.end(); pos++)
				file << *pos << endl;
			file.close();

			//更新录制标记
			m_lastSaveBook = m_curSaveBook;
			m_saveTag[m_curSaveBook] = m_curSavePage + 1;
			m_isSave = false;	//录制成功

			STTSPlayString(m_hTTSInstance, "该页内容已经录制", 1);
		}
		else		//该页已有内容
		{
			STTSPlayString(m_hTTSInstance, "本页已有内容,按录制键覆盖或选择其他页", 1);
			m_isCover = true;
		}
	}

	//录制一本书的第一页,更新书目索引
	if(m_curSavePage == 1)
	{
		//这本书原本为空
		if(m_bookIndex[m_curSaveBook].length() == 0)
		{
			m_bookIndex[m_curSaveBook] = *m_page.begin();
			m_readTag[m_curSaveBook] = 1;
		}
		else
			m_bookIndex[m_curSaveBook] = *m_page.begin();
	}
}

void CTTSDlg::CheckDelete()
{
	if(m_isDelete)
	{
		Delete();
		return;
	}

	m_isDelete = true;
	ostringstream readStr;
	readStr << "清除当前的内容, 第"  << m_lastSaveBook << "本书"
		<< m_bookIndex[m_lastSaveBook] << "是否确认";

	STTSPlayString(m_hTTSInstance, (char*)readStr.str().c_str(), 1);
}

void CTTSDlg::Delete()
{
	ostringstream name;
	
	if(m_currentPage == 1)	//清除整书
	{
		name << "D:/TTS-Data/" << m_curSavePage << "/*.*";

		_finddata_t fileInfo;
		intptr_t handle;

		handle = _findfirst(name.str().c_str(), &fileInfo);

		//删除该目录下所有文件
		if(handle != -1)
		{
			do
			{
				remove(fileInfo.name);
			}while(_findnext(handle, &fileInfo));
		}

		//更新书目索引
		m_bookIndex[m_currentBook] = "";
		m_readTag[m_currentBook] = 1;
		m_saveTag[m_currentBook] = 1;
	}
	else		//清除一页
	{
		name << "D:/TTS-Data/" << m_curSavePage << "/"
			<< m_curSavePage;

		ifstream checkFile(name.str().c_str());
		if(!checkFile.is_open())	//该页为空白页
			return;
		
		remove(name.str().c_str());
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -