Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Помогите с функцией!(Visual C++)

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Intro



Зарегистрирован: 04.08.2004
Сообщения: 6
Откуда: Барнаул

СообщениеДобавлено: Ср Авг 04 2004 12:15    Заголовок сообщения: Помогите с функцией!(Visual C++) Ответить с цитатой

Я разрабатываю проэкт сравнения двух wav файлов. Открываю wav файлы с помощью обычных потоков файлового ввода-вывода(возможно кому-то это покажется топорным Smile). Моя начальная цель програмно вычислить то место, где у wav начинается основная часть(то есть звук). Зачем это нужно? Чтобы потом написать программу сравнивающую звук обоих файлов и выводящую процентное соотношение похожести.
Сама программа написана и работает, но основная часть, то есть функция сравнения не коректно выводит результаты! --- при компиляции ошибок замечено не было.
P.S. ... Результат сравнения двух одинаковых файлов : 268 совпадений при размерах файлов 7 мегабайт Sad


Вот функция :

void sravn_file(ifstream& wave1in, ifstream& wave2in, ofstream& result)
{
char w1,w2;
while(! wave1in.eof() || ! wave2in.eof())
{
wave1in.get(w1);
wave2in.get(w2);
if (w1 == w2)
{
i++; //это переменная-счётчик обьявленная как глобальная
result.put(w2);
cout << w2;
wave1in.get(w1);
wave2in.get(w2);
}
}
}

//Не судите меня строго я только начинающий.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Слуга дяди Билла
Гость





СообщениеДобавлено: Ср Авг 04 2004 13:45    Заголовок сообщения: Ответить с цитатой

Ну найти свою ошибку - целое искусство . Помню у нас было несколько лекций с одной лишь целью - научить находить ошибки . Свои ошибки найти очень-очень трудно , чужие - на грани умопомешательства .
Вернуться к началу
Intro



Зарегистрирован: 04.08.2004
Сообщения: 6
Откуда: Барнаул

СообщениеДобавлено: Ср Авг 04 2004 15:00    Заголовок сообщения: Ну тогда поставлю вопрос по другому... Ответить с цитатой

void sravn_file(ifstream& wave1in, ifstream& wave2in, ofstream& result)
{
char w1,w2;
while(! wave1in.eof() || ! wave2in.eof()) //Есть ли альтернатива данному условию цикла. НО важно, чтобы оба условия соблюдались в пространстве ИЛИ
{
wave1in.get(w1);//Есть ли альтернатива(wave1in << w1 --- не предлагать)?
wave2in.get(w2);//То же самое
if (w1 == w2)//правильно ли из логики такое сравнение?
{
i++;
result.put(w2);//Есть ли альтернатива(result << w2 --- не предлагать)?
cout << w2;
wave1in.get(w1);
wave2in.get(w2);
}
}
}

Господа предлагайте свои версии алгоритмов, если не жалко Smile))
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
grayrat



Зарегистрирован: 30.06.2003
Сообщения: 189

СообщениеДобавлено: Ср Авг 04 2004 16:40    Заголовок сообщения: Ответить с цитатой

Вообще для побитового сравнения двух не слишком длинных файлов лучше воспользоваться винкоммандером.

А какой смысл сравнивать два ЗВУКОВЫХ файла побитно? Если хочешь определить похожесть двух РАЗНЫХ звуковых фрагментов то нужно использовать другие методы. Методов можно придумать много, но объединять их будет одно - сравнивание проходит не по одному единственному, а по группе отчетов. Если фрагменты ну очень похожи, записаны с разных микрофонов, буквально, можно считать коэффициент коррелляции квадратов амплитуд усредненных по нескольким соседним отсчетам. Если файлы отличаются сильнее - можно считать коррелляцию спектров этих двух сигналов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Intro



Зарегистрирован: 04.08.2004
Сообщения: 6
Откуда: Барнаул

СообщениеДобавлено: Ср Авг 04 2004 17:28    Заголовок сообщения: Ответить с цитатой

grayrat писал(а):
Вообще для побитового сравнения двух не слишком длинных файлов лучше воспользоваться винкоммандером.

У меня стояла задача програмно сравнить файлы, а визуально, просмотрев их Far-ом я ничего не добьюсь --- уже пробывал Sad --- много всяких символов разбросанных по экрану.
Сейчас главное найти то место, где заканчивается описание wav файла, его внтутренних характеристик таких как, например качество записи. Возможно в последствии всё это может пригодиться , так как выдрав то же самое качество записи его можно показать пользователю.
grayrat писал(а):

А какой смысл сравнивать два ЗВУКОВЫХ файла побитно? Если хочешь определить похожесть двух РАЗНЫХ звуковых фрагментов то нужно использовать другие методы.

М-да вот именно нужно использовать другие методы, то есть создавать новые алгоритмы... может кто-то уже занимался подобным сравниванием и имеет алгоритмы - не важно на каком языке они реализованы.
grayrat писал(а):

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

Я понял, то есть не должно быть строгого сравнивания if(w1==w2){............} ---- так как даже по- слуху одинаковые wav могут содержать разный код.
В любом случае метод по-битового сравнивания не подходит...
Нужно как-то преобразовать wav в график функций, где потом для сравнивания следует применить алгебраические или даже геометрические методы...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
DmitryShm



Зарегистрирован: 17.11.2003
Сообщения: 211
Откуда: Казань

СообщениеДобавлено: Чт Авг 05 2004 10:01    Заголовок сообщения: по методам можно задать вопрос на форуме www.autex.spb.ru Ответить с цитатой

Сравнивать надо по разумной норме. Если взять wav-файл и рассамтривать все wav, которые побитово различаются на некоторую фиксированную величину, то получишь не то, что хотел. Это не похожесть. По-поему, тебе надо сравнивать не побитово, а повекторно, используя преобразования Фурье (и обратное), чтобы, отбрасывая наименее значимые коэффициенты, сравнивать основные части -- это будет похожестью. Еще можно использовать вейвлеты. Резонно будет задать этот вопрос на www.mmonline.ru. Код писать не буду ввиду занятости. В случае Фурье код прозрачен. С вейвлетами будет потруднее..

PS: Если ты только тренируешься в программировании, то по-моему, взял не ту проблему для решения, т.к. эта проблема требует знания азов функционального анализа.
_________________
love IT
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...