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

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

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

DirectSound. Шум - C++

23.01.2014, 15:39. Просмотров 287. Ответов 0
Метки нет (Все метки)

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();
};
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2014, 15:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос DirectSound. Шум (C++):

Запустить DirectSound - C++
Здравствуйте. Где можно достать софт, чтобы можно было использовать объект IDirectSound8 из DirectSound? Никак не удается найти нужную...

Использование DirectSound - C++
Как использовать, где качать библиотеки пожалуйста все подробненько, желательно на vc++2010 ВААЩЩЩЕ ЗАМЕЧАТЕЛЬНО, ЕСЛИ С ИСХОДНИЧКАМИ С...

Передача звука по сети. DirectSound - C++
В общем-то, требуется записать звук с микрофона, передать его по сети и воспроизвести. Знаю, что тема поднималась много раз, но ничего...

DirectSound. Как правильно, и какую библиотеку следует добавить? - C++
Ребята, нужна ваша помощь. MVS 2010 выдаёт следующее 1&gt;DXUTsound.obj : error LNK2019: unresolved external symbol __imp__mmioClose@8...

Tesseract: лишние символы (шум) при записи в файл - C++
Господа, помогите кто знает. #include &lt;fstream&gt; #include &lt;stdio.h&gt; #include &lt;allheaders.h&gt; //lept #include &lt;baseapi.h&gt; //tess ...

DirectSound - C++
Как то оставлял тут вопрос по поводу работы со звуком, мне посоветовали использовать DirectSound. Прочитал кучу описаний и примеров по...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2014, 15:39
Привет! Вот еще темы с ответами:

DirectSound - Visual Basic
Всем привет. Не для кого не секрет, что DirectSound – это инструмент, предназначенный для создания игр, воспроизведения звуковой...

DirectSound - DirectX
Доброго всем вечера. Возникла такая проблема. При работе с DirectSound на 64битной винде выходит на исключение. ...

скачать DirectSound v 2.47(d) - Звук, акустика
всем привет где можно скачать DirectSound v 2.47(d).Чтобы не отправлять смс и все такое))Одним словом скачал и установил!

directSound capture - C#
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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