DirectSound

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
seelts
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 21.11.2002 (Чт) 11:24
Откуда: Russia

DirectSound

Сообщение seelts » 13.11.2004 (Сб) 22:49

Пишу следующее:

Код: Выделить всё
Set DXS = DX8.DirectSoundCreate(vbNullString)
DXS.SetCooperativeLevel frmMain.hWnd, DSSCL_WRITEPRIMARY
With bufferDesc
    With .fxFormat
        '.lExtra - не знаю чё это
        .lSamplesPerSec = IIf(InStr(1, Format, "44") > 0, 44100, IIf(InStr(1, Format, "22") > 0, 22050, 11025))
        .nBitsPerSample = IIf(InStr(1, Format, "16") > 0, 16, 8)
        .nChannels = IIf(InStr(1, Format, "стерео") > 0, 2, 1)
        .nFormatTag = WAVE_FORMAT_PCM
        .nSize = 0 'может не ноль, тада как посчитать?
        .nBlockAlign = .nBitsPerSample / 8 * .nChannels
        .lAvgBytesPerSec = .lSamplesPerSec * .nBlockAlign
    End With
    '.guid3DAlgorithm - это для чего?
    .lBufferBytes = .fxFormat.lAvgBytesPerSec * 5
    .lFlags = DSBCAPS_CTRLFREQUENCY Or DSBCAPS_CTRLPAN Or DSBCAPS_CTRLVOLUME Or DSBCAPS_STATIC
End With
Set DXSB = DXS.CreatePrimarySoundBuffer(bufferDesc)


пишет неверный вызов процедуры или параметр.

для захвата звука пишу тоже самое только .lFlag другой - всё нормально...
ктонить помогите
если создать алгоритм, которым сможет пользоваться даже дурак, то только дурак и будет им пользоваться

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 15.11.2004 (Пн) 0:26

1. По-моему в тексте не хватает DXS.CreateSoundBuffer
2. lExtra - не используется, ставить в 0.
3. NSize - размер в байтах extra format information. Для WAVE_FORMAT_PCM формата этот пункт игнорируется.
4. guid3DAlgorithm - описывает метод создания 3-Д эффектов. Если lFlags DSBCAPS_CTRL3D не установлен, то должен быть GUID_DS3DALG_DEFAULT.
Могут быть GUID_DS3DALG_NO_VIRTUALIZATION, GUID_DS3DALG_HRTF_FULL, GUID_DS3DALG_HRTF_LIGHT.
5. Читай SDK!

seelts
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 21.11.2002 (Чт) 11:24
Откуда: Russia

Сообщение seelts » 15.11.2004 (Пн) 1:20

спасибо за пояснения, к сожалению всё равно не работает.
Делать createsoundbuffer я не могу, т.к. DXSB - это первичный буфер а createsoundbuffer создаёт вторичный (вроде как), поэтому я делаю createprimarysoundbuffer
Если делать createsoundbuffer то говорит не совпадение типов и опять на той же самой строчке (где собственно и создаётся буфер - create*soundbuffer)
если создать алгоритм, которым сможет пользоваться даже дурак, то только дурак и будет им пользоваться

seelts
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 21.11.2002 (Чт) 11:24
Откуда: Russia

Сообщение seelts » 16.11.2004 (Вт) 21:43

сделал DXSB secondary буфером (раньше он был первичным) и заменил CreatePrimarySoundBuffer на CreateSoundBuffer - ошибки не стало, хотя её причину я так и не понял - если кто знает подскажите пожалуста. кстати у меня ещё и винамп играл во время програмирования - он же тоже директсаунд использует - может это как то влияло?
теперь ошибка в другом месте:
DXSB.GetCurrentPosition curs
говорит automation error
причём до этого есть строчка
DXCB.GetCurrentPosition curs
которая не выдаёт ошибки...
DXCB - буфер захвата
други помогите!!!
кстати винамп во время запуска проги звук останавливает.... 8(
если создать алгоритм, которым сможет пользоваться даже дурак, то только дурак и будет им пользоваться

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 18.11.2004 (Чт) 3:10

Ну насчет, automation error, GetCurrentPosition вообще только две ошибки возвратить может:

DSERR_INVALIDPARAM
An invalid parameter was passed to the returning function.

DSERR_PRIOLEVELNEEDED
The caller does not have the priority level required for the function to succeed.

А насчет winamp'а, ты поставь в опциях, чтобы он через waveOut играл, а не через dsound и тести программу

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

seelts
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 21.11.2002 (Чт) 11:24
Откуда: Russia

Сообщение seelts » 18.11.2004 (Чт) 13:26

на счёт винампа - я себя пересилил - выключаю его во время тестирования, а по поводу ошибки - мне то её название ничё не даёт - она есть - где её корень?
если создать алгоритм, которым сможет пользоваться даже дурак, то только дурак и будет им пользоваться

seelts
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 21.11.2002 (Чт) 11:24
Откуда: Russia

исходник:

Сообщение seelts » 18.11.2004 (Чт) 18:22

для наглядности прикладываю исходник:
Вложения
Lans.zip
Работа со звуком через DirectX (DirectSound)
(5.78 Кб) Скачиваний: 24
если создать алгоритм, которым сможет пользоваться даже дурак, то только дурак и будет им пользоваться

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 22.11.2004 (Пн) 23:22

Я так понял - ты звук записать хотел 8). Накатал пример по этому..

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

seelts
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 21.11.2002 (Чт) 11:24
Откуда: Russia

Сообщение seelts » 23.11.2004 (Вт) 21:16

честно говоря я не успел просмотреть твои примеры - только скачал, но в своём коде я ошибку нашёл - просто я кагда циклом запихивал данные в буфер я не прибавлял счётчик который отвечал за место в которое запихивался звук:
(DXSB.WriteBuffer lastpos + i, cbufSize, cbuffer(i), DSBLOCK_DEFAULT)
теперь звук в буфере, проигрывается, НО когда я пытаюсь записать звук в буфер больше чем длина буфера Васька вылетает с ошибкой, при чём вылетает не прога моя а сам вася... чё за беда...
надеюсь ответы на мои вопросы есть в твоём посте... спасибо.
если создать алгоритм, которым сможет пользоваться даже дурак, то только дурак и будет им пользоваться

seelts
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 21.11.2002 (Чт) 11:24
Откуда: Russia

континиус

Сообщение seelts » 23.11.2004 (Вт) 21:47

я туту не много подпаял, теперь ошибка есть но вася остаётся жив...
почему "последняя_позиция" равна "текущему_месту_курсора"? это же признак конца записи...
и ещё я присобачил пример по которому делал захват звука. он не много отличается от "холодного" :wink:
Вложения
Lans.zip
моя прога для работы с ДиректСаунд
(2.9 Кб) Скачиваний: 20
SoundCapture.zip
прога по мотивам которой реализован захват звука в моей проге
(5.08 Кб) Скачиваний: 24
если создать алгоритм, которым сможет пользоваться даже дурак, то только дурак и будет им пользоваться

seelts
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 21.11.2002 (Чт) 11:24
Откуда: Russia

Сообщение seelts » 26.11.2004 (Пт) 12:44

я разобрался со своими бедами - кому надо напишите - объясню
если создать алгоритм, которым сможет пользоваться даже дурак, то только дурак и будет им пользоваться


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 17

    TopList