Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2015, 08:30   #1
EaRLL
Пользователь
 
Аватар для EaRLL
 
Регистрация: 03.01.2009
Сообщений: 22
По умолчанию WAVEHDR.lpData и поиск точки записи голоса

Приветствую, дамы и господа.
Начну сразу с того, что в одной своей софтине необходимо добавить некое подобие "телефона". Ну не совсем "телефона", просто нужно записать фразу из входящего из микрофона потока и отправить уже на софтину на другом компьютере другого пользователя. Это как-бы вкратце сие действо.
Сама же суть проблемы вот в чем: есть входящий поток (грубо говоря) WAVEHDR.lpData с него я беру т.н. "коэффициент" (можно сказать, что это некий "уровень" входящего сигнала) в текущий момент времени (с задержкой, конечно; особая точность в том виде, которая необходима софтине - и не требуется) и управляюсь с ним.
Прилагаю исходник на гитхабе (думаю, это куда удобнее, чем тут постить пару сотен строк).
В данном исходнике (до вставки в основной код софтины, я пока решил поэкспериментировать в чистой среде, поэтому в них ничего кроме сабжа, собсно, и нету) при старте программы сразу инициализируется запись в буфер звука. Во время записи на экран выводится этот т.н. "коэффициент", просто для наглядности процесса. Сама запись голоса (второстепенная запись) тут отсутствует и требуется просто понять начальную и конечную точку записи, а в последствии уже в основном коде она реализуется. В данном случае выводящиеся значения "Recording << " и "Stop Recording >> " неверны, потому что как таковой нет основной мысли и специфики как это реализовать. Так же в коде есть некоторые закомментированные строки - это остатки от бывших проб и вариаций. В основном - в таком виде работает вроде все верно, только загвоздка с получением момента начала и конца (второстепенной) записи уже голоса. (Кстати, в коде, есть некоторое количество мусора и быдлокода, я его не убирал и не переписывал пока потому, что это как-бы не финальный вариант и прошлые задумки могут помочь)
Я понимаю, что будут предложения реализовать это через две кнопочки "Записать"/"Остановить и отправить", или через горячие клавиши, или начинать запись в выявленного момента (коэфф>500, к примеру) и записывать ровно две/три/пять/десять/тридцать_три секунды. Это, конечно, вариант, но не для этого случая. Не хочется загромождать форму лишними кнопками. А последний вариант не нравится потому что я могу говорить в микрофон и одно слово и двадцать одно, и в таком виде мне потребуется уложиться за эти несколько секунд - что не есть хорошо.

Собственно, суть описана: проблема в поиске этих точек. Кто-нибудь с таким сталкивался или у кого-нибудь есть идея, пусть даже гипотетическая, как это можно было бы провернуть (а реализовать всегда можно)? Или может быть кто-нибудь предложит более разумный вариант проверки и записи, чем текущий - буду безмерно благодарен.
Ежели кто сразу на гитхабе захочет внести изменения - не стесняйтесь, возможно общими усилиями сможем даже создать какую-нибудь библиотечку и выпустить в народ, возможно кому-нибудь понадобиться такой функционал.

Последний раз редактировалось EaRLL; 05.02.2015 в 08:36.
EaRLL вне форума Ответить с цитированием
Старый 05.02.2015, 09:29   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Я правильно понял, что вам надо различить где в записи говорят а где молчат?
waleri вне форума Ответить с цитированием
Старый 05.02.2015, 10:41   #3
EaRLL
Пользователь
 
Аватар для EaRLL
 
Регистрация: 03.01.2009
Сообщений: 22
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Я правильно понял, что вам надо различить где в записи говорят а где молчат?
Да, в принципе, в этом суть.
Но ещё есть дополнение: если, к примеру, запись проводить из ноутбука через его микрофоны встроенные, то там уже изначально будет малая доля шума. Сколько я не мониторил, "коэфф." бьется от 100 до 300, но пробуя мониторить уже речь, столкнулся с тем, что нижний порог голоса может быть и в районе 200 и даже 100. Так что проверять и включать запись только тогда, когда он будет >300 я не могу, т.к. он может и не сработать на обычный голос. Загвоздка, как я уже сказал, может даже состоять не в том, что бы выхватить начальную точку, а найти конечную.

Последний раз редактировалось EaRLL; 05.02.2015 в 10:54.
EaRLL вне форума Ответить с цитированием
Старый 05.02.2015, 12:05   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Может это?
http://habrahabr.ru/post/226143/
waleri вне форума Ответить с цитированием
Старый 05.02.2015, 12:33   #5
EaRLL
Пользователь
 
Аватар для EaRLL
 
Регистрация: 03.01.2009
Сообщений: 22
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Статья по ссылке довольно интересная, попробую покопаться в коде автора, может что-нибудь полезное там будет, но, там по большей части, информация именно по распознаванию речи на "записи", а не определению речи/не_речи. Но как уже сказал - обязательно гляну сорсцы. Спасибо за ссылку.
EaRLL вне форума Ответить с цитированием
Старый 05.02.2015, 13:47   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

там так же шла речь о тишине, что собственно и надо...
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск всех путей в лабиринте от точки до точки pavel_abelardo Помощь студентам 12 26.06.2011 00:23
Поиск принадлежности точки области CrazyN00b Win Api 3 13.04.2010 00:19
Поиск седловой точки матрицы (C) ya chef Помощь студентам 11 22.11.2009 19:24
поиск седловой точки vasd Общие вопросы Delphi 1 14.05.2009 22:04
Поиск точки (х;у) Slavik Microsoft Office Excel 4 01.05.2009 10:48