Форум программистов, компьютерный форум CyberForum.ru

неправильно считываются данные из WAV файла - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Курсовая работа http://www.cyberforum.ru/cpp-beginners/thread587638.html
мне необходимо написать курсовую работу на тему "визуализация алгоритма А* с помощью openGL" Программу написал, но никак не могу понять, что нужно написать в цель и задачи в ведении. может кто поможет советом ?
C++ Инициализация массива длинны N Требуется задать массив с Энным количеством членов, n вводится с клавиатуры. При попытке создания массива ... int n; scanf("%d",&n); А ... выдается ошибка "C2057: требуется константное выражение" пробуем так: ... http://www.cyberforum.ru/cpp-beginners/thread587637.html
Поправить описание класса для объектов-векторов, задаваемых координатами концов в двухмерном пространстве C++
составить описание класса для объектов-векторов, задаваемых координатами концов в двухмерном пространстве. Обеспечить операции сложения и вычитания, вычисление скалярного произведения двух векторов, длины вектора, косинус угла между векторами. гребаная куча ошибок выручайте! #include <iostream> #include <math.h> #include <conio.h> #include <iomanip> using namespace std; struct...
В программе не работает 1)удаление элемента, последнего в списке-зависает и C++
В программе не работает 1)удаление элемента, последнего в списке-зависает и нужна операция обработки -обмен местами элементов с заданными номерами для этой программы На языке С++ #include "stdio.h" #include "conio.h" #include "windows.h" #include "locale.h" #include "stdlib.h" #include "string.h" #define OUTPUT_FILE "./OUTPUT.TXT"
C++ База Данных Автомастерская.Сдавать в универ http://www.cyberforum.ru/cpp-beginners/thread587619.html
БД Автомастерская (3 таблицы). 1. Номер заказа, гос.номер авто, дата поступления, поломка(одно слово) 2. гос. номер авто, марка, номер владельца 3. номер владельца, Ф.И.О., контактный телефон Необходимо по Ф.И.О. находить все его заказы, по гос.номеру авто выдавать все случавшиеся поломки, по номеру заказа выводить Ф.И.О. владельца и его номер телефона.
C++ как изменить яркость видео исползуйя с++ с запускается на open cv как изменить яркость видео исползуйя с++ с запускается на open cv подробнее

Показать сообщение отдельно
Flamе
9 / 9 / 0
Регистрация: 25.10.2009
Сообщений: 152
26.05.2012, 21:33     неправильно считываются данные из WAV файла
Всем привет! У меня проблема с получением данных из WAV файла. Почему то функция, которая написана ниже, возвращает размер блока data в 2 раза больше, чем он есть на самом деле. и если воспроизвести массив с данными data, то он будет воспроизводится в 2 раза быстрее, чем нужно (эти факты получены в результате проверки на MATLAB). Используемый файл - моно (с 1 каналом). подскажите, пожалуйста, если кто знает, с чем это может быть связано? Заранее спасибо!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
struct WAVEF
{
    DWORD   dwRIFF;
    long        lSizeFile;
    DWORD       dwWAVE;
    DWORD       dwFormat;
    long        lSizeFmt;
    WAVEFORMATEX    waveFormat;
    DWORD   dwNextChunk;
    DWORD   dwSizeFact;
    DWORD   dwFact;
    int dwDataSize;
    int *pData;
};
 
void    GetDataWav(char* szName)
{
    ifstream    fIn;                                //Наш файл
    fIn.open(szName,ios::beg|ios::in|ios::binary);//Открываем для чтения, двоичный
    if(!fIn)
        throw(1);
 
    fIn.read((char*)&File.dwRIFF,4);
 
    if(File.dwRIFF!=MAKEFOURCC('R','I','F','F'))
        throw(2);
    fIn.read((char*)&File.lSizeFile,4);         //Размер файла
 
    
    File.dwWAVE=0;//Блок WAVE
    File.dwFormat=0;//Блок fmt
    File.lSizeFmt=0;//Длина структуры WAVEFORMATEX, хранящейся в файле
 
    fIn.read((char*)&File.dwWAVE,4);
    
    if(File.dwWAVE!=MAKEFOURCC('W','A','V','E'))        //Вдруг файл испорчен
        throw(3);
 
    fIn.read((char*)&File.dwFormat,4);
    if(File.dwFormat!=MAKEFOURCC('f','m','t',' '))      //Вдруг файл испорчен
        throw(4);
 
    fIn.read((char*)&File.lSizeFmt,4);
    if(File.lSizeFmt==0)
        throw(5);
 
    File.waveFormat=WAVEFORMATEX();//Наш формат аудио-данных
    fIn.read((char*)&File.waveFormat,16);//Размер WAVEFORMATEX==16
 
    int numChanels=File.waveFormat.nChannels;
    DWORD sampleRate, byteRate, blockAlign,bitsPerSample;
    
    if(File.waveFormat.wFormatTag!=1)
        throw(6);
 
    File.dwNextChunk=0;//Слудующий блок может быть либо 'fact', либо 'data'
    fIn.read((char*)&File.dwNextChunk,4);
 
    if(File.dwNextChunk==MAKEFOURCC('f','a','c','t'))       //Если 'fact', то мы его пропускаем
    {
        File.dwSizeFact=0;                      //Размер пропускаемой области :)
        fIn.read((char*)&File.dwSizeFact,4);                //Считываем
        //fIn.ignore(File.dwSizeFact);                      //Пропускаем
        
        fIn.read((char*)&File.dwFact,4);                //Считываем
        
        fIn.read((char*)&File.dwNextChunk,4);               //Считываем блок 'data', для следующей
    };                                              //проверки
 
    //Если мы до этого нашли 'fact', то в коде его обработки, дошли до 'data', и прочли 
    //в dwFormat, иначе dwFormat итак его содержит.... Иначе invalid file format 
    if(File.dwNextChunk!=MAKEFOURCC('d','a','t','a'))       //Если 'fact', то мы его пропускаем
        throw(7);
    //File.dwDataSize=0;                    //Размер данных
    fIn.read((char*)&File.dwDataSize,4);            //Считываем
 
    //Далее идут чистые данные, УРА!!!
 
    File.pData=new int[File.dwDataSize];    //Создаём буфер, для хранения звука
 
    fIn.read((char*)File.pData,File.dwDataSize);                //И считываем в него информацию...
 
 
    fIn.close();                            //Больше нам файл не нужен!
    sampleRate=File.waveFormat.nSamplesPerSec;
    byteRate=File.waveFormat.nAvgBytesPerSec;//ByteRate
    blockAlign=File.waveFormat.nBlockAlign;
    bitsPerSample=File.waveFormat.wBitsPerSample;
 
    return;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 09:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru