Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Структура в wav |
Автор: NwinIX 20.8.2005, 00:51 |
У меня вопрос вот по такому делу. Пишу программу по работе с wav-файлом(не суть важно) в общем есть в нем такая функция DWORD get_wav_header(FILE *fp, WAVE_HEADER *wav_hdr), которая принимает указатель на сам файл и на его структуру(функция не моя, диктовали на лекциях). Сама функция делает проверку на корректность wav-файла(заголовка) и возращает код ошибки Структура самого файла что то в роде typedef struct { DWORD riffsize; BYTE riff[4]; BYTE wavefmt[8]; DWORD fmtsize; WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAligh; WORD wBitsPerSample; BYTE data[4]; DWORD datasize; }WAVE_HEADER; Так у меня не получается передать в эту функцию саму структуру из wav-файла, вот в этом и заключается проблема, будь то даже работа с bmp, не могу передать структуру в функцию для какой-либо проверки. I NEED HELP/ |
Автор: Step 20.8.2005, 00:55 |
NwinIX, для начало надобы писать код ошибочки... или хотябы сказать, какого типа ошибка компиляци, сборки или выполнения или ошибок нету, но не работает... а во вторых в этом случаи нужно поставить выравнивание равное 1 байту... |
Автор: NwinIX 20.8.2005, 01:06 | ||||
|
Автор: Step 20.8.2005, 01:11 |
ошибка какая, не получаеться передать - компилятор ругаеться, или уже ваша программа при выполнении??? |
Автор: NwinIX 20.8.2005, 01:15 |
Короче набрана программа(по лекции) В строке с функцией RedCode=get_wav_header(fin,&wav_hdr); /&wav_hdr----- undeclared identifier . Не знаю что делать. Может еще есть какие способы по проверке корректности wav-заголовка.... |
Автор: Step 20.8.2005, 01:23 |
ошибка в строке 107 wav_hdr и так указатель так что & не нужен |
Автор: NwinIX 20.8.2005, 01:26 |
error C2065: 'wav_hdr' : undeclared identifier |
Автор: Step 20.8.2005, 01:35 | ||||||
тю блин, а я думал у меня глюки, или слепну, а оно в натури нету, думал может в глобале лежит ![]() ну да ладно вы конда считаете синус пишите вот так
так вот, вот такого
у вас нету, для вашего wav_hdr более того, оно должно быть в таком виде
где то так... |
Автор: NwinIX 20.8.2005, 01:46 |
Вроде работает, хех а я и сам не заметил. Ну а если по смыслу так подумать, то мы передаем указатель на совершенно пустую структуру, которая у нас в хедаре висит, так как же тогда из совершенно пустой структуры мы сможем узнать формат или размер фактических данных? Или это у меня уже приступ паранои, или злостный лектор специально падлянку оставил ![]() |
Автор: Step 20.8.2005, 01:52 |
NwinIX, это параноя ![]() а что по вашему вы делаете когда из файл читаете данные в некое место.... и как раз на это место указывает указатель.. а теперь если почитать, или вспомнить что такое переменные структуры и как они распологаються в памяти то многое станет понятно, и даже станет понятно зачем необходимо делать выравнивание по 1 |
Автор: NwinIX 20.8.2005, 12:52 |
![]() |
Автор: NwinIX 20.8.2005, 14:02 |
На строку WAVE_HEADER * wav_hdr=new WAVE_HEADER; выдает аж 5 ошибок: error C2018: unknown character '0xa0' Что это ваще значит ![]() |
Автор: Step 20.8.2005, 15:02 |
NwinIX, а это прикол для лентяев, вы ее удалите и ручками введите ![]() а не копируйте с форума |
Автор: NwinIX 20.8.2005, 16:22 |
}{ех, вот хохма, пробел чертов ![]() ![]() |
Автор: Step 20.8.2005, 22:08 |
ну и че, заработало |
Автор: NwinIX 21.8.2005, 01:11 |
Почти, там еще кое-что доработать надо-это всего лишь костяк. А так да, теперь не ругается ![]() ![]() |
Автор: Step 21.8.2005, 01:15 |
С тебя бутылка ![]() |
Автор: NwinIX 21.8.2005, 02:42 |
Хех, вот еще вопросик тогда, связанный с эхо. Я в массив(указатель) samples писал данные из файла(кроме самого заголовка, его я формировал отдельно). В этом массиве я могу оперировать данными, повышая и понижая амплитуду-следовательно громкость. А как можно сделать, чтобы оперировать со временем? Ну например сдвинуть весь исходный сигнал на 1 или 0,1 секунды, и потом этот сдвинутый сигнал слить с исходным, чтобы как бы образовался сигнал со своим эхо(с небольшой задержкой) ![]() ![]() |
Автор: Step 21.8.2005, 13:53 |
NwinIX, как сдвинуть берешь и делаешь копию сигнала в памяти со свдигом и потом накладЫваешь, правый лишний край удаляешь, или увеличиваешь длительность... |
Автор: NwinIX 21.8.2005, 14:21 |
Со сдвигом разобрался но вот с наложением не очень. Ну вот есть у меня samples[]-оригинальный сигнал, samples_resize[]-все данные сдвинуты на 2 i-х позиции, размер такой же, следствие из этого, два последних значения не влезут..... Но вот как их слить не догоняю, это типа samples_resize[] вписать в samples[] или как, мож создать новый массив и в него все это записать, вот тока как ![]() |
Автор: Step 21.8.2005, 14:27 |
последнии два удаляете да вписать через какуюто операцию попробуйте в тупую сплюсовать и откоректировать амплитуду что бы не фонило |
Автор: NwinIX 21.8.2005, 14:53 |
В тупую не получается, не могу выравнять, да и не катит этот вариант, мне нужен конечный сигнал с точностью до бита как оригинал слитый с своим эхо, просто пишу программу по стеганографии, так боюсь что потом при декодировании данных не те значения будут извлекаться....А как можно еще слить? Можно на небольшом примере? ![]() ![]() |
Автор: Step 21.8.2005, 15:59 |
что значит не получаеться, что значит с точностью до бита, такое понятие применять как то глупо в єтом случае, нужно с точностью до отсчета или чето в этом роде что значит выровнять, что к чему ты выравниваешь |
Автор: NwinIX 25.8.2005, 17:26 | ||
Деху ступил.....
Где nsamples-колличество отсчетов в массиве samples. Создал еще два мас для записи этого же сигнала но с небольшой задержкой, а как теперь слить не знаю. NEED HELP(т.е. как слить samples_edit_3+samples или samples_edit_2+samples, чтоб сохранился и оригинал и его эхо?,то есть один равный сумме исходного и задержанного по времени. Если можно то примерчих хотя быб малюханький. ![]() ![]() |
Автор: DrLazy 25.8.2005, 21:42 | ||
Если у тебя амплитуды знаковые, то
эхо правда обрежется по длине первого звука. Если надо по другому надеюсь сообразишь Если будет перегрузка ( short int overflow ) то подели на 3 перед записью в массив. |
Автор: NwinIX 25.8.2005, 23:47 | ||
Я Впринципе так пробовал, тока складывал вот так
вот тока ничего хорошего не получилось, файл создает выходной а данными не заполняет Если записывать просто nsamples без всяких преобразований то все работает а так не пашет. А может стоит увеличить колличество памяти в выходной файл как минимум в двое, вот тока как вычесть эти восемь отсчетов на которые я сдвинул? |
Автор: Guest 26.8.2005, 22:08 |
Всем спасибо за советы, сам все сделал, во всем разобрался ![]() ![]() |