Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > 2 wav


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


Вот функция :

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);
}
}
}

//Не судите меня строго я только начинающий.

Автор: p0s0l 4.8.2004, 20:17
Зачем два последних get'а ?
Какого типа у тебя переменная i ? Может просто происходит переполнение ?...

Автор: lynx_916 4.8.2004, 20:44
попробуй старыую ф-цию read().
читай за раз байт эдак 10.
и помещай их куда-то.
потом сравни и выбрось.

Автор: Гость_Intro 5.8.2004, 05:58
Вообще по хорошему надо было сделать цикл do while... мне надо совместить и условие о конечности входящих файловых потоках и условие обязательного предварительного сравнивания. Именно поэтому из-за своей топорности код выглядит нелепым smile.gif)) I переменная типа int.

............................................................................................................

А про read() по-подробней... Дело в том, что я встретился с проблеммой когда даже ну очень похожие по звуку файлы различаются по-байтово.
Эсть ли как какая-то уловка, чтобы пропускать некоторые байты в группе входящих по файловому потоку байтов?

Пожалуйста напишите какой заголовочный файл нужен для read() и возможные параметры этой функции.

Заранее благодарен.

Автор: C/L 7.8.2004, 02:52
Цитата
P.S. ... Результат сравнения двух одинаковых файлов : 268 совпадений при размерах файлов 7 мегабайт

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

Автор: C/L 7.8.2004, 03:09
http://geom.mgsu.ru/Docs/CodeNet/www.codenet.al.ru/progr/audio/sbprot.htm#part_3
http://graphics.cs.msu.ru/courses/cg02b/assigns/hw-2/help/wavfmt2.htm
http://art.bdk.com.ru/govor/infast49.htm

Автор: C/L 7.8.2004, 04:42
http://www.developing.ru/ubb/Forum18/HTML/000103.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)