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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
SkyLu
0 / 0 / 0
Регистрация: 30.01.2014
Сообщений: 24
#1

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

07.02.2014, 03:44. Просмотров 370. Ответов 0
Метки нет (Все метки)

Ребята, такое дело.
Есть функция

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 минут
Разобрался, можно закрывать
Спасибо )))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2014, 03:44     Как правильно открыть WAV файл
Посмотрите здесь:
C++ Как правильно открыть файл и считать из него строку?
Написать программу, формирующую по исходному WAV файлу новый WAV файл C++
C++ Сохранить как .wav файл
Как побайтово считать Wav файл? C++
Как открыть файл? C++
C++ Как открыть файл ?
C++ Как открыть текстовый файл
Как открыть файл в 16 виде C++
Как открыть файл из архива? C++
C++ Как открыть конкретный excel-файл?
C++ с++ как открыть exe файл в программе ?
Как открыть файл в потоке ifstream? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru