Ruforum.eu Вход · Регистрация · Правила · Поиск · Помощь
Календарь · Участники · Игры
Вы не авторизованы на форуме. Введите логин и пароль или зарегистрируйтесь    

 
Ответить · Новая тема · Новое голосование

Каскадный · [ Стандартный ] · Линейный

WaveOutOpen не даёт хэндлик

Подписка на тему | Сообщить другу | Версия для печати
zhw
Гость




Братки! Помогите снять затор в использовании API-функции WaveOutOpen. Никак не хочет она выдать хендлик выходного звукового устройства, а возвращает только код возврата 32=WAVERR_BADFORMAT.
Платформа: Win 2000.
Среда программирования: VBA, практически = VB.
Исходный текст:
------------------------------------------------------------------------------------------------------------------------------------------Private Declare Function waveOutGetNumDevs Lib "winmm.dll" () As Long
Private Declare Function waveOutGetDevCaps Lib "winmm.dll" Alias "waveOutGetDevCapsA" (ByVal uDeviceID _
As Long, lpCaps As WAVEOUTCAPS, ByVal uSize As Long) As Long
Private Type WAVEOUTCAPS
wMid As Integer
wPid As Integer
vDriverVersion As Long
szPname As String * 32
dwFormats As Long
wChannels As Integer
wReserved1 As Integer
dwSupport As Long
End Type
Private Declare Function waveOutOpen Lib "winmm.dll" (lphWaveOut As Long, ByVal uDeviceID As Long, _
lpFormat As WAVEFORMATEX, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal dwFlags As Long) As _
Long
Private Type WAVEFORMATEX
wFormatTag As Integer
nChannels As Integer
nSamplesPerSec As Long
nAvgBytesPerSec As Long
nBlockAlign As Integer
wBitsPerSample As Integer
cbSize As Integer
End Type

Private Sub Form_Load() ' Процедура события не принципиальна, может быть и иная
Dim lpFormat As WAVEFORMATEX, lpCaps As WAVEOUTCAPS
RetVal = waveOutGetNumDevs ' нормально выдаёт 1 (одно выходное устройство)

RetVal = waveOutGetDevCaps(0, lpCaps, 52)
' выдаёт значения переменных структуры WAVEOUTCAPS
' wMid = 1
' wPid = 100
' vDriverVersion = 1280
' szPname = CMI8738/C3DX PCI
' dwFormats = 4095
' wChannels = -1
' wReserved1 = 30546
' dwSupport = 44

lpFormat.wFormatTag = -1 ' заполнял плохо понимая - так ли, но крутил цикл - при люьых тоже самое
lpFormat.nChannels = -1 ' заполнял плохо понимая - так ли
lpFormat.nSamplesPerSec = 44100 ' заполнял плохо понимая - так ли
lpFormat.nAvgBytesPerSec = 176400 ' заполнял плохо понимая - так ли
lpFormat.nBlockAlign = 4 ' заполнял плохо понимая - так ли
lpFormat.wBitsPerSample = 16 ' заполнял плохо понимая - так ли
lpFormat.cbSize = 0 ' заполнял плохо понимая - так ли

' И, наконец, самое важное:
RetVal = waveOutOpen(lphWaveOut&, -1&, lpFormat, 0, 0, &H1)
' -1& - это WAVE_MAPPER
' &H1 - это WAVE_FORMAT_QUERY

' Ну и всё время получаем код отлупа 32 = WAVERR_BADFORMAT
' и естественно хендлик lphWaveOut& = 0 ??? Кто знает - помогите.
End Sub
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
До свидания, всех крепко обнимаю, Железнов Владимир,
Для связи со мной: Email = ZHW@rambler.ru, тел. раб. (095)737-01-22, дом. 793-96-91
31.10.2003 · 10:14
MJ HFounce
Гость




блин...RTFM!!!
lpFormat.wFormatTag = 1 /* PCM */
lpFormat.nChannels = 1 моно, 2 стерео
lpFormat.nBlockAlign = 2 * nChannels
lpFormat.nAvgBytesPerSec = nSamplesPerSec * nBlockAlign
lpFormat.cbSize = SizeOf(lpFormat)
31.10.2003 · 11:27
zhw
Гость




Автор вопроса: ну а в чём же причина кода отлупа 32 = WAVERR_BADFORMAT?
04.11.2003 · 15:25
Тему просматривают:
Ответить · Опции темы · Новая тема

 


Правила форума · FAQ по форуму · Поиск · Архив форума

Наши партнеры: Cooler.irk.ru · WebSound.ru