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

Как правильно открыть WAV файл - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Ошибка при выделении памяти http://www.cyberforum.ru/cpp-beginners/thread1091128.html
Вопрос: из-за чего программа может рушится? int *NRRow = new int ; int *NRow = new int ; int *NCol = new int ; //тут код. всякие преобразования массивов и тд delete NCol; delete NRRow; delete NRow; на делитах программа рушится. Закоменчиваю код - работает. N где-то порядка 50, NZ где-то от 300.
C++ Исключительные операции, класс и вызовы Алгоритм задачи 1. Повторять действия, пока не получено правильного результата 1.1. Увести число и его степень. 1.2. Если число >0, то возвести число в введенную степень. 1.3. Если число <0, то произвести такие действия: 1.3.1. Выделить целую и дробную части степени. 1.3.2. Если дробная часть степени равняется 0 и его целая часть непарная, тогда возвести число в степень и получить... http://www.cyberforum.ru/cpp-beginners/thread1091103.html
C++ Организовать добавление данных в файл, просмотр, поиск и очистку данных
НАписать программу. Компонентами типизированного файла являются записи, состоящие из следующих полей: - фамилия; - имя; - отчество; - город проживания; - год рождения. Организовать следующие процедуры работы с файлом: - добавление записи в файл; - просмотр файла; - поиск по фамилии, имени и отчеству; - очистка файла. Действия выполняются в произвольном порядке по выбору пользователя.
Ввести в структуру в виде указателя строку из нескольких слов C++
Нужно сделать структуру с помощью new. Надо чтобы программа запрашивала диаметр пиццы, название компании из нескольких слов и вес. При вводе названия компании первой всё ок, а вот в этом порядке не могу ничего поделать. Перебрал варианты с массивами и строками - в итоге ноль. Максимум чего добиваюсь, так это обрезки названия компании до одного слова. Ниже код, в данном варианте он вообще...
C++ Работа с одномерным массивом (найти наиболее часто встречающееся число) http://www.cyberforum.ru/cpp-beginners/thread1091048.html
Дан одномерный массив A, найти наиболее часто встречающееся число. Если таких чисел несколько, то определить наименьшее из них.
C++ Игра «Пуговицы» Игра «Пуговицы» (Время: 0,5 сек. Память: 16 Мб Сложность: 48%) Правила игры очень просты. Перед двумя играющими находится кучка из K пуговиц. Играющие по очереди берут пуговицы из кучки, причем за один ход каждый из них может взять от 1 до L пуговиц. Выигрывает тот из спортсменов, которому удастся взять последнюю пуговицу. Тот из игроков, которому по жребию выпадает делать первый ход,... подробнее

Показать сообщение отдельно
SkyLu
0 / 0 / 0
Регистрация: 30.01.2014
Сообщений: 24
07.02.2014, 03:44     Как правильно открыть WAV файл
Ребята, такое дело.
Есть функция

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
IDirectSoundBuffer8 *CreateBufferFromWAV(FILE *fp,  sWaveHeader *Hdr)
{
    IDirectSoundBuffer  *pDSB;
    IDirectSoundBuffer8 *pDSBuffer;
    DSBUFFERDESC        dsbd;
    WAVEFORMATEX        wfex;
 
    // Читаем заголовок с начала файла
 
    fseek(fp, 0, SEEK_SET);
    fread(Hdr, 1, sizeof(sWaveHeader), fp);
 
    // Проверяем поля сигнатур, возвращаемся в случае ошибки
 
    if(memcmp(Hdr->RiffSig, "RIFF", 4) || memcmp(Hdr->WaveSig, "WAVE", 4) || memcmp(Hdr->FormatSig, "fmt ", 4) || memcmp(Hdr->DataSig, "data", 4))
    {
        return NULL;
    }
 
    ZeroMemory(&wfex, sizeof(WAVEFORMATEX));        // Устанавливаем формат воспроизведения
 
    wfex.wFormatTag      = WAVE_FORMAT_PCM;
    wfex.nChannels       = Hdr->Channels;
    wfex.nSamplesPerSec  = Hdr->SampleRate;
    wfex.wBitsPerSample  = Hdr->BitsPerSample;
    wfex.nBlockAlign     = wfex.wBitsPerSample / 8 * wfex.nChannels;
    wfex.nAvgBytesPerSec = wfex.nSamplesPerSec * wfex.nBlockAlign;
 
    ZeroMemory(&dsbd, sizeof(DSBUFFERDESC));        // Создаем звуковой буфер, используя данные заголовка
 
    dsbd.dwSize = sizeof(DSBUFFERDESC);
    dsbd.dwFlags = DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLPAN |   DSBCAPS_CTRLFREQUENCY;
    dsbd.dwBufferBytes = Hdr->DataSize;
    dsbd.lpwfxFormat = &wfex;
 
    if(!(g_pDS->CreateSoundBuffer(&dsbd, &pDSB, NULL)))
    {
        return NULL;
    }
 
    // Получаем новую версию интерфейса
 
    if(!(pDSB->QueryInterface(IID_IDirectSoundBuffer8,(void**)&pDSBuffer)))
    {
        pDSB->Release();
        return NULL;
    }
 
    // Возвращаем интерфейс
 
    return pDSBuffer;
}
Есть такая структуры:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
typedef struct sWaveHeader
    {
        char  RiffSig[4];        // 'RIFF'
        long  WaveformChunkSize; // 8
        char  WaveSig[4];        // 'WAVE'
        char  FormatSig[4];      // 'fmt ' (обратите внимание
                                 //     на завершающий пробел)
        long  FormatChunkSize;   // 16
        short FormatTag;         // WAVE_FORMAT_PCM
        short Channels;          // количество каналов
        long  SampleRate;        // частота выборки
        long  BytesPerSec;       // байт на секунду
        short BlockAlign;        // выравнивание блока выборки
        short BitsPerSample;     // бит в выборке
        char  DataSig[4];        // 'data'
        long  DataSize;          // размер волновых данных
    }sWaveHeader;

Как, какой функцией, или что там ещё, нужно читать простой WAV файл лежащий допустим просто на C:\\?
Всё это по знаменитому примеру из книги Programming Role Playing Games
частичный перевод которой лежит по адресу http://netlib.narod.ru/library/book0051/ch04_03.htm

Спасибо

Добавлено через 3 часа 25 минут
Разобрался, можно закрывать
Спасибо )))
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru