Сказанное выше означает, что приведённые алгоритмы образуют конструктор, из которого каждый может сделать консольную программу по своему вкусу. Алгоритмы не содержат графической интерфейсной части, которую предлагается создать самому читателю в случае необходимости, а приводимые модули являются консольными приложениями. Существующие в Интернете программы, решающие проблему анализа речи, содержат в интерфейсной части какие-то параметры, смысл которых не всегда ясен. В случае самоделки все находится в руках программиста. Как уже упоминалось выше, предполагается знание языка программирования Питон (только базовые знания) и доступ к основным библиотекам: numpy, scipy, matplotlib, scikit-learn и некоторым другим. Приводятся только тексты нестандартных, по мнению автора, модулей Для остальных модулей дается словесное описание алгоритм. Более существенным моментом является владением основами цифровой обработки сигналов, если есть желание понять, что именно измеряется. А когда такого желания нет, достаточно уметь пользоваться числами, полученными в результате вычислений. Книга не является учебником по упомянутым областям знаний, поскольку в настоящее время имеется бесплатный доступ к нужной литературе.
Что касается «железа», то необходимо обеспечить доступ к речевым файлам и способ ввода их в компьютер. Для этих целей может понадобиться микрофон либо обычный смартфон с приложением «Диктофон». Здесь следует сделать несколько замечаний. Для анализа важен способ записи речевого файла. Рекомендуется стандартный формат с частотой записи 44100 Hz. Именно эта частота предполагается, когда речь идет об отдельных параметрах алгоритмов. Программы записи в диктофонах, как правило, используют сжатие файла и перевод его в соответствующий формат. Все алгоритмы, реализованные в книге, предполагают формат wav речевого файла, поэтому будет необходимо перевести исходный файл в этот формат. Наиболее универсальным средством, решающим данную задачу, является бесплатная программа ffmpeg. Другой полезной программой для работы с аудио файлами является бесплатная программа Audacity. Она пригодится для ввода файлов с микрофона, перевода в формат wav и для редактирования файлов.
Автор реализовал представленную выше идею на сайте с адресом http://5.23.55.2 . Доступ к сайту свободный, без регистрации. Заметим, что сайт не использует сертификат достоверности, поэтому браузер порождает предупреждение об этом, однако, для эксперимента достаточно только загрузить на сайт речевой файл в любом формате. Такая загрузка не может повредить пользователю. Целью создания сайта является проверка работы алгоритмов, поэтому автор будет благодарен всем пользователям, если они поделятся результатом своего эксперимента. Надо сравнить реакцию программы на отклонение в параметрах с ощущением человека при прослушивании речи. Адрес для связи: ystolov@list.ru.
Выводы об эмоциональном состоянии диктора основаны на измерении определенных параметров звукового файла. Если речь идет о скрытых эмоциях, то, скорее всего, эти эмоции проявляются при произнесении отдельных слов.
Выделение "фраз" и "слов " в речевом файле
Изменение эмоционального состояния может проявиться во время произнесения очередной фразы в потоке или даже при произнесении отдельного слова в фразе. Нашей ближайшей целью является научиться выделять отдельные слова в потоке и формировать из них фразы. Рассмотрим более детально произвольный отрезок обычного речевого файла.
Видно, что этот отрезок делится на небольшие фрагменты повышенной мощности и промежутки между ними. Отмеченные промежутки это либо заполненные шумом от дыхания интервалы (интервалы между словами или отдельными слогами), либо переходные процессы в речи. Переходный процесс это промежуток между концом гласного и началом согласного или наоборот. Назовем такие интервалы шумовыми интервалами (ШИ), а оставшиеся – информационными (ИнИ). Естественно считать словом промежуток в речевом файле между двумя последовательными ШИ. На самом деле ситуация более сложная, поскольку ШИ может появиться и между двумя слогами одного слова либо в позиции переходного процесса. В этом случае такой интервал должен быть проигнорирован. Следует отметить, что выделением информационных фрагментов в речевом файле занимались многие исследователи. Так или иначе, для этой цели используется мощность сигнала, однако, установка пределе для этой мощности и является предметом исследования. Мы берем за основу выделение ШИ и последующий анализ их распределения. Это означает, что для вычисления порога исследуется мощность сигнала в некотором маленьком интервале. После этого все интервалы в автоматическом режиме разбиваются на два класса. Последующая процедура выделения слов основана на этом разбиении. Сначала требуется выбрать размер интервала. Естественно выбирать этот параметр в зависимости от частоты стробирования 𝐹𝑟, например, 𝑆𝑖𝑧𝑒𝐹𝑟𝑎𝑔𝑚=𝐹𝑟/1000 – одна мс. Теперь функция createStdDistr вычисляет стандартные отклонения внутри каждого из выбранных интервалов из входного массива In .
import nunpy as np
def createStdDistr(In,SizeFragm):
In = np.float_(In)
In -= np.mean(In)
Ln = len(In)
Vary = []
I =0; End = SizeFragm
while End<= Ln:
Fragm = In[I:End]
Vary.append(Fragm)
I += SizeFragm
End += SizeFragm
VaryArray = np.float_(Vary)