Автор работы: Пользователь скрыл имя, 18 Марта 2011 в 18:21, курсовая работа
Цель данной курсовой работы – это создание такого приложения, которое сможет прочитать пользователю ту книгу в электронном варианте, которую он сам захочет.
Для реализации этого проекта необходимо решить следующие задачи:
1.Подбор материалов и сервисов чтения.
2.Моделирование предметной области и обоснование выбранных средств разработки проекта.
3.Программная реализация проекта.
Глава 1. Выбор программных средств 5
1.1. Выбор средств разработки 5
1.2. Дополнительные компоненты 7
Глава 2. Анализ предметной области и создание концептуальной модели 9
2.1. Сбор информации о предметной области 9
2.2. Выделение сущностей 10
Глава 3. Программная реализация 11
3.1. Логическая структура программы 11
3.2. Подключение готовых библиотек кода 11
Заключение 17
Список используемых источников 18
Приложение а. Внешний вид программы 19
Часто требуется применение функций WinAPI, находящихся в файлах dll. Когда служба вызывает функцию, совершаются следующие операции:
Для подключения функции необходимо представить адрес библиотеки и данные о функции: название, входящие и исходящие аргументы.
Глава 2. Анализ предметной области и создание концептуальной модели
2.1.
Сбор информации о предметной
области
Перед тем, как начать работу над проектом, необходимо изучить структуру DLL файлов, т.к. через подключение этих библиотек мы достигнем наиболее оптимального решения поставленной задачи.
DLL - это сокращение от Dynamic Link Library (динамически загружаемая библиотека).
С
формальной точки зрения DLL - особым
образом оформленный
Особый
способ оформления предполагает наличие
в DLL так называемых секций импорта
и экспорта. Секция экспорта указывает
те идентификаторы объектов (функций,
классов, переменных), доступ к которым
предоставляет данная DLL. В этом случае
мы говорим об экспортировании
Относительная
независимость связана с
"Исполняемый"
код в DLL не предполагает автономного
использования. Перед тем, как
можно будет приступить к
Итак,
формально, DLL - особым образом оформленный
программный компонент, доступ к
исполняемому коду которого приложение
получает в момент старта (DLL неявной
загрузки) или в момент использования
(DLL явной и отложенной загрузки).
2.2.
Выделение сущностей
При анализе предметной области были выделены следующие сущности и проблемы: на начальном этапе реализации требовалось создать текстовый редактор для отображения читаемого текста. Его задача заключается в том, чтобы пользователь мог полноценно воспользоваться всеми стандартными функциями редактирования текста.
Затем – подключить имеющиеся голосовые движки и предоставить пользователю возможность самостоятельно выбрать понравившийся синтезатор речи.
Следующий этап разработки – создание удобного и понятного интерфейса, не требующего от пользователя высокого уровня компьютерной грамотности.
Глава 3. Программная реализация
3.1. Логическая структура
программы
Данная программа читает голосом любой текст. Язык чтения зависит от выбранного синтезатора речи. Она может читать текст, находящийся в окне программы.
Кроме этого, программа обладает возможностями изменения скорости чтения и громкости, записи речи в звуковой wav-файл
Для корректной работы программы придется загрузить некоторые недостающие файлы – text-to-speech engine и SAPI
TTS (text to speech) – технология, позволяющая синтезировать текст в его звуковое представление.
Text-to-speech engine (голосовой движок) – это набор файлов с описанием голоса. Позволяет синтезировать речь из текста. Существует много разных движков различных производителей. Движки отличаются качеством синтеза речи, количеством и характером голосов (мужчина, женщина, роботы), языком (русский, английский, французский, немецкий, ... ) и прочими параметрами. В Windows уже есть голосовой движок SpeechAPI (Microsoft Sam), но стандартным языком для него является английский.
Порядок работы с Суфлером:
1.загружаем файл для чтения либо вводим свой текст;
2.выбираем синтезатор речи;
3.запускаем
чтение текста.
Для
того чтобы использовать SpeechAPI нужно
подключить СОМ-объект Microsoft Speech Object и
прописать using SpeechLib.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Windows.Forms;
using SpeechLib;
Для
начала работы с SpeechAPI нужно объявить основной
объект:
SpVoice m_voice;
Но при подключении только SpeechAPI программа будет говорить только на английском.
Эту проблему решаем следующим образом: подключаем библиотеку SAPI_DLL.
Для
начала необходимо подключить нужное
пространство имен:
using System.Runtime.InteropServices
Далее
импортировать нужные функции. Для этого
создадим отдельный класс SAPIDLL:
class SAPIDLL
Функция
CreateSpeech:
[DllImport("SAPIDLL.DLL")]
public static extern Int32 CreateSpeech();
реализует проверку работоспособности SAPI и, если это так, инициализирует этот COM интерфейс. Эта функция вызывается первой, перед началом работы с остальными процедурами и функциями экспортируемыми SAPI_DLL.DLL.
Вызов
этой функции сделан автоматическим,
при загрузке SAPI_DLL.DLL:
private void Form1_Load(object sender, EventArgs e)
{
SAPIDLL.CreateSpeech();
for (int i = 1; i <= SAPIDLL.GetEnginesCount();
i++) comboBoxLang.Items.Add(
}
Функция
PSelectEngineNumber:
[DllImport("SAPIDLL.DLL")]
public static extern Int32 PSelectEngineNumber(Int32
EngineNumber);
осуществляет
выбор Engina (синтезатора речи). Указывает,
какой именно синтезатор речи необходимо
задействовать для синтеза речи. Параметр
EngineName должен содержать одно из имен доступных
синтезаторов речи. Имена всех доступных
синтезаторов можно получить, вызвав функцией
GetEngines. Либо, нужно быть уверенным в том,
что указывается правильное(существующее)
имя синтезатора.
Функция
GetEnginesCount:
[DllImport("SAPIDLL.DLL")]
public static extern Int32 GetEnginesCount();
нужна
для того, чтобы узнать количество
дикторов установленных на компьютер.
Функция
PSpeak:
[DllImport("SAPIDLL.DLL")]
public static extern Int32 PSpeak(string Text);
функция для произнесения текста
private void button1_Click(object sender, EventArgs e)
{
if (comboBoxLang.SelectedIndex == -1)
MessageBox.Show("Выберите синтезатор голоса");
else
{
SAPIDLL.PSelectEngineNumber(
SAPIDLL.PSpeak(richTextBox1.
}
}
Функция
PGetEngines:
[DllImport("SAPIDLL.DLL")]
public static extern string PGetEngines(int
num);
возвращает имя
диктора с порядковым номером number. Диктор
может быть не выбран до вызова этой процедуры.
Что бы узнать имена всех дикторов установленных
на вашем компьютере используется GetEnginesCount,
а после PGetEngines(0..
Следующая
группа функций возвращает соответственно
допустимые максимальные и минимальные
значения скорости и громкости речи для
выбранного синтезатора:
[DllImport("SAPIDLL.DLL")]
public static extern Int32 GetMaxSpeed();
[DllImport("SAPIDLL.DLL")]
public static extern Int32 GetMaxVolume();
[DllImport("SAPIDLL.DLL")]
public static extern Int32 GetMinSpeed();
[DllImport("SAPIDLL.DLL")]
public static extern Int32 GetMinVolume();
[DllImport("SAPIDLL.DLL")]
private void comboBoxLang_
{
SAPIDLL.PSelectEngineNumber(
trackBar2.Minimum = SAPIDLL.GetMinVolume();
trackBar2.Maximum = SAPIDLL.GetMaxVolume();
trackBar1.Minimum = SAPIDLL.GetMinSpeed();
trackBar1.Maximum = SAPIDLL.GetMaxSpeed();
}
Функции
устанавливающие уровни скорости и
громкости для выбранного синтезатора:
[DllImport("SAPIDLL.DLL")]
public static extern Int32 SetSpeed(int num);
[DllImport("SAPIDLL.DLL")]
public static extern Int32 SetVolume(int num);
Перед
вызовом этих функций следует обратиться
к приведенным выше функциям максимального
и минимального значения скорости и громкости
речи.
private void trackBar2_Scroll(object sender, EventArgs e)
{
SAPIDLL.SetVolume(trackBar2.
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
SAPIDLL.SetSpeed(trackBar1.
}
Функция
для остановки чтения. Очищает очередь
синтеза.
[DllImport("SAPIDLL.DLL")]
public static extern void Stop();
private void button3_Click(object sender, EventArgs e)
{
SAPIDLL.Stop();
}
Функция,которая
реализует паузу в синтезе речи.
Синтез (чтение) может быть возобновлено
вызовом процедуры Resume.
[DllImport("SAPIDLL.DLL")]
public static extern void Pause();
Для
паузы обрабатывается событие нажатия
клавиши:
private void button2_Click(object sender, EventArgs e)
{
if (a)
{
SAPIDLL.Pause();
a = false;
}
else
{
SAPIDLL.Resume();
a = true;
}