Реализация программного обеспечения для записи, воспроизведения и анализа звукового сигнала

Разработка программного обеспечения для голосового управления трехмерными моделями функционирования промышленных роботов
158991
знак
11
таблиц
10
изображений

3.2 Реализация программного обеспечения для записи, воспроизведения и анализа звукового сигнала

Для реализации программного обеспечения для записи. воспроизведения и анализа звукового сигнала были созданы следующие окна: главное окно программы, окно добавления слова в словарь, окно записи и обработки звука и окна, обеспечивающие просмотр рассчитанных характеристик в виде графиков.

В главном окне обеспечивается просмотр и редактирование существующих словарей, а также их сохранение. Это окно содержит главное меню, панель управления и рабочую область приложения. Главное меню состоит из следующих пунктов: File, Edit, View, Help. Нажатие на пункт File позволяет создать новый файл, открыть существующий файл с расширением *.spl, открыть недавно использованный файл, сохранить новый файл и сохранить существующий файл под другим именем, выйти из программы. При нажатии на пункт Edit можно выбрать одно из предлагаемых действий: добавить слово, удалить слово, воспроизводить звук выделенного слова в рабочей области приложения. Пункт View отвечает за вид главного окна: наличие или отсутствие панели управления и строки состояния.

В панели управления присутствуют следующие кнопки: создание нового файла, открытие существующего файла, сохранение файла, удаление и добавление слова, воспроизведение слова,

Для воспроизведения выбранного слова требуется лишь нажать на соответствующую кнопку в панели управления либо выбрать Edit->Play Sound.

Для записи нового слова требуется нажать на соответствующую кнопку в панели управления либо выбрать Edit->Add Word. При этом появляется новое окно, основанное на диалоговой форме, в котором есть поле для ввода буквенного обозначения нового слова. После ввода слова в поле Word, необходимо нажать кнопку Record. После этого появляется новое окно, также основанное на диалоговом окне. Это окно обеспечивает запись и анализ нового слова. Для записи нового слова, прежде всего, необходимо выбрать в поле Source присутствующую в данном компьютере звуковую карту. Далее в поле Format необходимо выбрать формат записываемых данных. Предлагаются форматы данных, приведенные в табл. 3.9.

Выбор формата записываемых данных необходимо осуществлять исходя из следуюпщх предпосылок: с одной стороны, чем выше частота дискретизации (количество элементов в секунду), чем выше количество каналов и чем выше количество бит в элементе, тем выше качество записи, а потом и воспроизведения звука; с другой стороны, чем выше эти параметры, тем сложнее проводить анализ звука, тем дольше обрабатываются данные. Поэтому для решения поставленной задачи выбирается частота дискретизации 11025 Гц, выбирается моно-режим, т.е. количество каналов=1, и количество бит в элементе=8.

После этого всё уже готово для записи. Для непосредственного осуществления записи звукового аналога слова необходимо нажать на кнопку Record.

Таблица 3.9 - Форматы данных

Название Количество Частота Количество
каналов дискретизации бит
WAVE_FORMAT_1M08 1 11025 8
WAVE_FORMAT_1M16 1 11025 16
WAVE_FORMAT_J S08 2 11025 8
WAVE_FORMAT_lS16 2 11025 16
WAVE_FORMAT_2M08 1 22050 8
WAVE_FORMAT_2M16 1 22050 16
WAVE_FORMAT_2S08 2 22050 8
W AVE_FORMAT_2 S16 2 22050 16
WAVE_FORMAT_4M08 1 44100 8
WA VE_FORMAT_4Ml 6 1 44100 16
WAVE_FORMAT_4S08 2 44100 8
WAVE_FORMAT_4S16 2 44100 16

После нажатия на кнопку Record, в программе устанавливается режим работы программы - запись. При этом вызываются функции, которые

останавливают воспроизведение, если оно было включено. Кнопка Record становится неактивной, а кнопка Stop - активной. Далее определяются параметры выбранной звуковой карты и формат записываемого звука, Очищаются буферы, в которые будет производиться запись.

Ниже приведена функция, обеспечивающая запись звуковой информации.

BOOL CWaveIriDevice::Record(CWave* pWave, int iBlockSize) {if (IsOpenQ) {if (! CanDoFormat(pWave->GetFormat())) {TRACE("Imput device is already open and doesn't support format"); return FALSE;}

} else {if (!Open(WAVE_MAPPER, pWave->GetFormat())) { TRACE("No input device supports format"); return FALSE;}} miBlockSize = iBlockSize;

WAVEHDR* phdr = (WAVEHDR*)malloc(sizeof(WAVEHDR)); ASSERT(phdr);

memset(phdr, 0, sizeof(WAVEHDR));

phdr->lpData = (char*)malloc(iBlockSize);

ASSERT(phdr->lpData);

phdr->dwBufferLength = iBlockSize;

phdr->dwUser = (D WORD)(void*)p Wave;

MMRESULT mmr = waveInPrepareHeader(m_hInDev, phdr,

sizeof(WAVEHDR)); if (mmr) (MMERR(mmr); return FALSE;}

mmr = waveInAdabuffer(m_hInDev, phdr, sizeof(WAVEHDR)); if (mmr) {MMERR(rnmr);

return FALSE;} (3.1)

phdr = (WAVEHDR*)malloc(sizeof(WAVEHDR));

ASSERT(phdr);

memset(phdr, 0, sizeof(WAVEHDR)); phdr->lpData = (char*)malloc(iBlockSize); ASSERT(phdr->lpData); phdr->dwBufferLength = iBlockSize; phdr->dwUser = (DWORD)(void*)pWave;

mmr = waveInPrepareHeader(m_hInDev, phdr, sizeof(WAVEHDR)); if (mmr) {MMERR(mmr); return FALSE;}

mmr = waveInAddBufTer(m_hInDev, phdr, sizeof(WAVEHDR)); if (mmr) (MMERR(mmr); return FALSE;}

mmr = wavelnS tart(m_h InDe v); if (mmr) {MMERR(mmr); return FALSE;} return TRUE;}

Прежде всего, проверяется, открыто ли устройство. Если открыто, то проверяется, поддерживает ли оно выбранный формат. Если не поддерживает, то выводится сообщение, что устройство уже открыто, но такой формат оно не поддерживает. Если устройство закрыто, то предпринимается попытка открыть какое-либо устройство, поддерживающее данный формат. Если не удалось открыть устройство, поддерживающее данный формат, то выводится сообщение, что никакое устройство не поддерживает данный формат. Устанавливаем два буфера и отправляем их в драйвер устройства. Устанавливаем заголовок. Опустошаем заголовок. Подготавливаем заголовок. Начинаем запись

До тех пор, пока не будет нажата кнопка Stop, будет производиться запись. После этого при нажатии на кнопку Play можно прослушать весь записанный сигнал. При наличии претензий к записанному сигналу, его

можно переписать, повторно нажав на кнопку Record. Все ранее записанные данные при этом теряются

Для обработки полученных данных необходимо нажать на кнопку OpenData, которая вызывает функцию обработки данных. После нажатия на кнопку OpenData, в программе устанавливается режим работы программы -обработка данных, находящихся в буфере.

Ни же приведена функция, обеспечивающая обработку данных, находящихся в буфере.


BOOL CWaveOutDevice::OpenData(CWave *pWave,CClientDC *curDC) (int count=0;

CWaveBlockList* pBL = pWave->GetBlockList(); if(!pBL) return FALSE; POSITION pos = pBL->GetHeadPositionO; if(!pos) return FALSE;

if (pWave->m_bAutoDestruct) pWave->AddRef(); while (pos)

{CWaveBlock* pBlock = pBL->GetNext(pos); ASSERT(pBlock);

WAVEHDR* phdr = (WAVEHDR*)malloc(sizeof(WAVEHDR)); ASSERT(phdr);

memset(phdr, 0, sizeof(WAVEHDR)); phdr->lpData = (char*) pBlock->GetSamples(); phdr->dwBufferLength = pBlock->GetSize(); phdr->dwUser = (DWORD)(void*)pWave; CString ss("");

ss.Format(_T("%s"),pBlock->m_pSamples); int iw = ss.GetLengthO;

intnum=0; (3.2)

for(long h=0;h<4096;h++)

{num=count*4096+h; bunker[num]=(int)ss. GetAt(O); CString s("");

s.Format(_T("%f "),bunker[num]);

ss.Delete(0,l);}

count-H-;

len=4096*count;}

Noise(bunker,len,0);

Filter(bun,l);

Hamming(fнl,l);

Furje(ham,l);

СИр(пЦ);

AfxMessageBox("Data are..."); return TRUE;}

Прежде всего, обнуляем номер буфера. Далее берём список блоков данных из функции GetBlockList(). Если это невозможно, выходим из функции. Определяем позицию первого элемента в блоке данных. При невозможности выполнения действия, выходим из функции. Наращиваем счётчик ref, если мы его используем. До тех пор, пока существует pos, выполняем следующий цикл. Определяем позицию следующего элемента. Устанавливаем заголовок. Очищаем заголовок. Передаём в параметр IpData значения элементов. Определяем длину буфера. Объявляем строку. В эту строку записываем данные о звуке из pBlock. Определяем длину строки. Объявляем и обнуляем счётчик для массива, в который будем записывать данные о звуке. Т.к. буфер ограничен числом 4096, в цикле от 0 до 4096 записываем данные из строки в массив. Номер элемента массива определяется как номер буфера умноженный на его длину плюс номер элемента в буфере. Непосредственно сама запись из строки в массив. Переопределяем тип данных массива. Увеличиваем номер массива.

Рассчитываем длину массива. Вызываем функцию избавления от шумов. Вызываем функцию обработки с помощью фильтра. Вызываем функцию обработки в окне Хэмминга. Вызываем функцию выполнения преобразования Фурье. Вызываем функцию проведения клиппирования. Выводим на экран сообщение, что данные успешно обработаны. Выходим из функции.

После появления сообщения о том, что данные успешно обработаны, можно воспроизвести звуковую информацию, находящуюся в буфере, просмотреть графики функций, записать новую информацию (при этом теряется обработанная) или выйти из программы с сохранением звуковой информации, нажав Ok, или без него, нажав Cancel.

Для просмотра графиков, представляющих результаты обработки данных, в этом окне расположены кнопки, при нажатии на каждую из которых появляется окно, в котором есть кнопка, нажав на которую, получаем график интересующей нас зависимости.



Информация о работе «Разработка программного обеспечения для голосового управления трехмерными моделями функционирования промышленных роботов»
Раздел: Коммуникации и связь
Количество знаков с пробелами: 158991
Количество таблиц: 11
Количество изображений: 10

Похожие работы

Скачать
216371
14
6

... и менеджмента Санкт-Петербургского Государственного технического университета соответствовал поставленной цели. Его результаты позволили автору разработать оптимальную методику преподавания темы: «Использование электронных таблиц для финансовых и других расчетов». Выполненная Соловьевым Е.А. дипломная работа, в частности разработанная теоретическая часть и план-конспект урока представляет ...

Скачать
60551
0
0

... разработки программ, но и разработку пакетов прикладных программ. Эти разработки должны обеспечивать высокое качество и вестись примерно так же, как и выпуск промышленной продукции. Достижения компьютерной техники   1.         Универсальные настольные ПК Что такое настольный компьютер, объяснять никому не надо — это любимое молодежью устройство, чтобы красиво набирать тексты рефератов, а ...

Скачать
461693
14
14

... информация должна поступать в декодер при восстановлении звукового сигнала. Декодер преобразует серию сжатых мгновенных спектров сигнала в обычную цифровую волновую форму. Audio MPEG - группа методов сжатия звука, стандартизованная MPEG (Moving Pictures Experts Group - экспертной группой по обработке движущихся изображений). Методы Audio MPEG существуют в виде нескольких типов - MPEG-1, MPEG-2 и ...

Скачать
430825
6
4

... с применением полиграфических компьютерных технологий? 10. Охарактеризуйте преступные деяния, предусмотренные главой 28 УК РФ «Преступления в сфере компьютерной информации». РАЗДЕЛ 2. БОРЬБА С ПРЕСТУПЛЕНИЯМИ В СФЕРЕ КОМПЬЮТЕРНОЙ ИНФОРМАЦИИ ГЛАВА 5. КОНТРОЛЬ НАД ПРЕСТУПНОСТЬЮВ СФЕРЕ ВЫСОКИХ ТЕХНОЛОГИЙ 5.1 Контроль над компьютерной преступностью в России Меры контроля над ...

0 комментариев


Наверх