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

DirectSound. Шум - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Организовать обработку каждого элемента: печать строк из информационной части и их первых символов http://www.cyberforum.ru/cpp-beginners/thread1079513.html
Составить программу, которая создает очередь из произвольного количества элементов. Информационная часть динамического элемента должна состоять из двух строк. Организовать обработку каждого элемента: печать строк из информационной части и их первых символов. Надеюсь на вашу помощь.
C++ Найти сумму таких чисел в диапазоне [a;b], синус которых больше нуля. Вводятся числа a и b. Найти сумму таких чисел в диапазоне , синус которых больше нуля. Необходимо использовать Операторы цикла ! Спасибо за внимание! http://www.cyberforum.ru/cpp-beginners/thread1079511.html
C++ Из скольких различных чисел состоит введенное число.
Дано натуральное число. Из которых различных чисел оно состоит. Реализовать с помощью "set"
C++ Вывод на консоль информации о человеке, номер телефона которого введён с консоли.
Разработать структуру с именем NOTE, содержащую поля: • Фамилия, имя; • Номер телефона; • Дата рождения (массив их трёх чисел для хранения даты, месяца и го- да). Написать программу, выполняющую следующие действия: • Ввод с консоли данных в массив структур NOTE; • Вывод на консоль информации о человеке, номер телефона которого введён с консоли. Если такого человека нет, вывести на консоль...
C++ Дана строка S. Создать новую строку, состоящую из символов S, у кото- рой к каждому пробелу добавлено два пробела http://www.cyberforum.ru/cpp-beginners/thread1079496.html
Дана строка S. Создать новую строку, состоящую из символов S, у кото- рой к каждому пробелу добавлено два пробела
C++ Конвертировать, чтобы из строки s получилось число, которое получено p? Есть строка s="(1&0)"; то же самое можно сделать int p=int(1&0) => p=0. Вопрос в том, как конвертировать, чтобы из строки s получилось число, которое получено p? Добавлено через 1 час 7 минут Вообще так можно сделать или нет? подробнее

Показать сообщение отдельно
Reflake
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 4
23.01.2014, 15:39     DirectSound. Шум
DirectSound не производит звуки, если точнее то он производит лишь первый сэмпл (4 байта) .wav файла, в итоге слышен только шум. Файлы читаются правильно, думаю проблема в буферах.
Использую DirectX SDK (June 2010)

Код инициализации DirectSound и создания первичного буфера
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
void InitSoundDevice(HWND hWnd)
{
    if (FAILED(DirectSoundCreate8(NULL,&dsDevice,NULL)))
        DebugBreak();
    if (FAILED(dsDevice->SetCooperativeLevel(hWnd,DSSCL_PRIORITY)))
        DebugBreak();
    
    DSBUFFERDESC dsbd;
    memset(&dsbd,0,sizeof(DSBUFFERDESC));
 
    dsbd.dwSize        = sizeof(DSBUFFERDESC);
    dsbd.dwFlags       = DSBCAPS_PRIMARYBUFFER | DSBCAPS_CTRLVOLUME;
    dsbd.dwBufferBytes = 0;
    dsbd.lpwfxFormat   = NULL;
 
 
    WAVEFORMATEX wfex;
    memset(&wfex,0, sizeof(WAVEFORMATEX));
 
    wfex.wFormatTag      = WAVE_FORMAT_PCM;
    wfex.nChannels       = 2;
    wfex.nSamplesPerSec  = 22050;
    wfex.wBitsPerSample  = 16;
    wfex.nBlockAlign     = 4;
    wfex.nAvgBytesPerSec = wfex.nSamplesPerSec * wfex.nBlockAlign;
 
    if (FAILED(dsDevice->CreateSoundBuffer(&dsbd,&primaryBuff,NULL)))
        DebugBreak();
    
    if (FAILED(primaryBuff->SetFormat(&wfex)))
        DebugBreak();
 
    if (FAILED(primaryBuff->Play(0,0,DSBPLAY_LOOPING)))
        DebugBreak();
 
};
Код чтения .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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
WaveSound::WaveSound(const wchar_t *path)
{
    unsigned char str[4];
 
    memset(&format,0,sizeof(WAVEFORMATEX));
    format.wFormatTag=WAVE_FORMAT_PCM;
 
    std::basic_ifstream<unsigned char> stream(path,std::ios::in);
    stream.seekg(22,stream.beg);
 
    // кол-во каналов
    stream.read(str,2);
    format.nChannels=str[0]+(str[1]<<8);
 
    // сэмплы в секунду
    stream.read(str,4);
    format.nSamplesPerSec=str[0] + (str[1]<<8) + (str[2]<<16) + (str[3]<<24);
 
    // битрейт (биты в секунду)
    stream.read(str,4);
    format.nAvgBytesPerSec=str[0] + (str[1]<<8) + (str[2]<<16) + (str[3]<<24);
 
    // байты за сэмпл (включая каналы)
    stream.read(str,2);
    format.nBlockAlign=str[0]+(str[1]<<8);
 
    // бит за один сэмпл
    stream.read(str,2);
    format.wBitsPerSample=str[0]+(str[1]<<8);
 
    stream.seekg(40,stream.beg);
 
    // размер в байтах
    stream.read(str,4);
    size=str[0] + (str[1]<<8) + (str[2]<<16) + (str[3]<<24);
 
    // Создание буфера
    // описание буфера
    DSBUFFERDESC bDesc;
    memset(&bDesc,0,sizeof(DSBUFFERDESC));
    bDesc.dwSize=sizeof(DSBUFFERDESC);
    bDesc.lpwfxFormat=&format;
    bDesc.dwFlags=DSBCAPS_CTRLVOLUME | DSBCAPS_LOCSOFTWARE | DSBCAPS_STATIC;
    bDesc.dwBufferBytes=size;
 
    // получаем 8 версию интерфейса буфера
    {
        IDirectSoundBuffer *buff;
        if (FAILED(dsDevice->CreateSoundBuffer(&bDesc,&buff,NULL)))
            DebugBreak();
        if (FAILED(buff->QueryInterface(IID_IDirectSoundBuffer8,(void**)&buffer8)))
            DebugBreak();
        buff->Release();
    }
    
    // чтение всех байтов в буфер
    if (FAILED(buffer8->Lock(0,size,(void**)&bytesPtr1,&sizePtr1,(void**)&bytesPtr2,&sizePtr2,0)))
        DebugBreak();
 
    stream.read(bytesPtr1,sizePtr1);
    if (sizePtr2)
        stream.read(bytesPtr2,sizePtr2);
 
    if (FAILED(buffer8->Unlock(bytesPtr1,sizePtr1,bytesPtr2,sizePtr2)))
        DebugBreak();
 
    stream.close();
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru