Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Структура в wav, I NEED HELP 
:(
    Опции темы
NwinIX
  Дата 20.8.2005, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 13.8.2005

Репутация: нет
Всего: нет



У меня вопрос вот по такому делу.
Пишу программу по работе с 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/
PM MAIL   Вверх
Step
Дата 20.8.2005, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



NwinIX, для начало надобы писать код ошибочки...
или хотябы сказать, какого типа ошибка компиляци, сборки или выполнения

или ошибок нету, но не работает...


а во вторых в этом случаи нужно поставить выравнивание равное 1 байту...


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
NwinIX
Дата 20.8.2005, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 13.8.2005

Репутация: нет
Всего: нет



Код

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include "wavhdr.h"
#include"Resourse_NIX.h"
typedef struct
{
    BYTE data[4];
    DWORD datasize;
}DATA_CHUNK;

#define NO_ERRORS 0;
#define ILLEGAL_HEADER 1;
#define ILLEGAL_FORMAT 2;
#define READ_ERROR 3;
#define MAXHDRLEN 1000 ;
 
DWORD get_wav_header(FILE *fp, WAVE_HEADER *wav_hdr)
{
    BYTE Buf[4];
    DWORD i,r,j;
    DWORD bytecnt=0;
    DATA_CHUNK data_hdr;
    if(fread(wav_hdr,sizeof(WAVE_HEADER)-sizeof(data_hdr),1,fp)!=1)
        return READ_ERROR;
    //if(strncmp(wav_hdr->riff,"RIFF",4))
    //    return ILLEGAL_HEADER;
//    if(strncmp(wav_hdr->wavefmt,"WAVE,fmt ",8))
    //    return ILLEGAL_HEADER;
    if(wav_hdr->wFormatTag!=WAVE_FORMAT_PCM)
        return ILLEGAL_FORMAT;
    if(wav_hdr->fmtsize>16)
    {
        if(fread(Buf,2,1,fp)!=1)
        {
            return READ_ERROR;
        }
        else
        {
        }
         
        wav_hdr->fmtsize=16;

    }
    else
    {
    }
    while (bytecnt < MAXHDRLEN)
    {
        if(fread(&data_hdr, sizeof(data_hdr),1,fp)!=1)
            return READ_ERROR;
        i=data_hdr.datasize;
        if(strncmp(data_hdr.data,"data",4)==0)
        {
            memcpy(wav_hdr->data, data_hdr.data,4);
            wav_hdr->datasize=data_hdr.datasize;
            return NO_ERRORS;
        }
        bytecnt+=i;
        for(j=0;j<i;j++)
        {
            fread(Buf,1,1,fp);
        }
    }
    return ILLEGAL_HEADER;
}

//#define MAXBUF 256
void ConsOut(char *tbuf)
{
    char buf[MAXBUF];
    CharToOem(tbuf,buf);
    printf("%s\n",buf);
}
 
void main(int argc, char *argv[])
{
FILE *fin, *fout;
DWORD nsamples;
DWORD datasize;
short *samples;
WORD maxval;
DWORD i;
double coeff;
DWORD RedCode;
char tbuf[20];
//WAVE_HEADER wav_hdr;
 
//char tbuf[MAXBUF];
 
if(argc<3)
{
    RusOut("?????? wav_exe  ");
    //ConsOut(tbuf);
}
if((fin=fopen(argv[1],"rb"))==NULL)
{
    RusOut("?????? ??? ???????? ????? ");
    exit(1);
}
if((fout=fopen(argv[2],"wb"))==NULL)
{
    RusOut("?????? ??? ???????? ????? ");
    exit(1);
}
 
[color=red] RedCode=get_wav_header(fin,&wav_hdr); [/color]/*тут пытаюсь передать указатель на структуру, короче как было в лекциях(примерно), короче не знаю что еще можно впихнуть вместо &wav_hdr
 пишет undeclared identifier */
switch(RedCode)
{
case  3: // READ_ERROR
        ConsOut("?????? ??????");
        exit(1);
     
case 1 ://ILLEGAL_HEADER
        ConsOut("????????? ??????");
        exit(1);
case  2 :  //ILLEGAL_FORMAT
        ConsOut("????????? ??????");
        exit(1);
}
 
        

datasize=wav_hdr->datasize;
nsamples=datasize/2;
samples=(short*)malloc(datasize);
if (samples=NULL)
{
    ConsOut("??? ?????? ??? ??????");
    exit(1);
}
if(fread(samples,datasize,1,fin)!=1)
{
    RusOut("?????? ??? ?????? ?????");
    exit(1);
}
WORD t;
maxval=abs(samples[0]);
for(i=0;i<nsamples;i++)
{
      t= abs(samples[i]);
    if(t>samples)
    {
         maxval=t;//???? ????? ?????? ???? ???????? ??? ??? maxval=t;
    }
}
if(maxval>3000)
{
    coeff=0,5;
}
else
{
    coeff=1,5;
}
 
for(i=0;i<nsamples;i++)
{
    samples[i]=(short)(samples[i]*coeff);
}
wav_hdr->riffsize=datasize+36;
fwrite(&wav_hdr,sizeof(wav_hdr),1,fout);
fwrite(samples,datasize,1,fout);
fclose(fin);
fclose(fout);
ConsOut("???????!");
}

М
 
вот так будет лучше, используйте code

PM MAIL   Вверх
Step
Дата 20.8.2005, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



ошибка какая,

не получаеться передать - компилятор ругаеться, или уже ваша программа при выполнении???




--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
NwinIX
Дата 20.8.2005, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 13.8.2005

Репутация: нет
Всего: нет



Короче набрана программа(по лекции) В строке с функцией RedCode=get_wav_header(fin,&wav_hdr); /&wav_hdr----- undeclared identifier . Не знаю что делать. Может еще есть какие способы по проверке корректности wav-заголовка....

Это сообщение отредактировал(а) NwinIX - 20.8.2005, 01:19
PM MAIL   Вверх
Step
Дата 20.8.2005, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



ошибка в строке 107

wav_hdr и так указатель так что & не нужен


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
NwinIX
Дата 20.8.2005, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 13.8.2005

Репутация: нет
Всего: нет



error C2065: 'wav_hdr' : undeclared identifier
PM MAIL   Вверх
Step
Дата 20.8.2005, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



тю блин, а я думал у меня глюки, или слепну, а оно в натури нету, думал может в глобале лежит smile

ну да ладно

вы конда считаете синус пишите вот так
Код

float angle;
float var_sin;
angle=1.23;
var_sin=sin(angle)


так вот, вот такого
Код
float angle;


у вас нету, для вашего wav_hdr

более того, оно должно быть в таком виде
Код

WAVE_HEADER * wav_hdr=new  WAVE_HEADER;

где то так...




--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
NwinIX
Дата 20.8.2005, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 13.8.2005

Репутация: нет
Всего: нет



Вроде работает, хех а я и сам не заметил. Ну а если по смыслу так подумать, то мы передаем указатель на совершенно пустую структуру, которая у нас в хедаре висит, так как же тогда из совершенно пустой структуры мы сможем узнать формат или размер фактических данных? Или это у меня уже приступ паранои, или злостный лектор специально падлянку оставил smile Разве не должны эту структуру из самого файла извлекать?
PM MAIL   Вверх
Step
Дата 20.8.2005, 01:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



NwinIX, это параноя smile

а что по вашему вы делаете когда из файл читаете данные в некое место....

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


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
NwinIX
Дата 20.8.2005, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 13.8.2005

Репутация: нет
Всего: нет



smile Респект
PM MAIL   Вверх
NwinIX
Дата 20.8.2005, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 13.8.2005

Репутация: нет
Всего: нет



На строку WAVE_HEADER * wav_hdr=new  WAVE_HEADER;
выдает аж 5 ошибок: error C2018: unknown character '0xa0'
Что это ваще значит smile
PM MAIL   Вверх
Step
Дата 20.8.2005, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



NwinIX, а это прикол для лентяев, вы ее удалите и ручками введите smile

а не копируйте с форума


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
NwinIX
Дата 20.8.2005, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 13.8.2005

Репутация: нет
Всего: нет



}{ех, вот хохма, пробел чертов smile И вправду smile
PM MAIL   Вверх
Step
Дата 20.8.2005, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



ну и че, заработало


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1304 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.