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

DirectSound. Шум - DirectSound

Войти
Регистрация
Восстановить пароль
Другие темы раздела
DirectSound Захват потокового звука, использование DirectSound http://www.cyberforum.ru/directsound/thread1067650.html
Программа захватывает звук с микрофона и сразу воспроизводит его на колонки. Всё хорошо работает, но как избавится от эха? using System.IO; using System.Net.Sockets; using System.Net; using...
DirectSound Как правильно подключить Microsoft.DirectX.DirectSound Пишу что то на подобие голосового чата, пытаюсь захватить звук с микрофона. Нашел в интернете пример работы со звуком с помощью using Microsoft.DirectX.DirectSound Вроде бы все правильно подключил... http://www.cyberforum.ru/directsound/thread1057237.html
DirectSound Ошибки при работы с DirectSound
Для работы с DirectSound подключаю соответствующий файл (прописываю в заголовочном файле класса) #include "dsound.h" //также подключаю библиотеку: #pragma comment (lib, "c:/Program Files...
Захват аудио в DirectSound DirectSound
Записываю и проигрываю аудио маленькими кусками по тику таймера: dwCapBuffer->Stop(); System::Array^ write = dwCapBuffer->Read(0, Byte::typeid, LockFlag::None, dwOutputBufferSize); ...
DirectSound SlimDx,SharpDx,DirectSound,Xaudio2 или любой либ.Как проиграть уже имеющийся на компе wave файл http://www.cyberforum.ru/directsound/thread926789.html
Нужен какой-нибудь пример по воспроизведению файла в формате wave(реально существующего файла на компе) с использованием SlimDx или SharpDx ну на худой конец пойдет и на плюсах.Порылся в инете нашел...
DirectSound Возможно ли такое с DirectShow и DirectSound? Привет. Скажите, пожалуйста, возможно ли воспроизводить медиа-файлы на компьютере с компьютера друга, зная его IP? Я слышал о flash-плеере, но он работает только с сайтами. подробнее

Показать сообщение отдельно
Reflake
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 4

DirectSound. Шум - DirectSound

23.01.2014, 15:39. Просмотров 329. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru