Страница: 1 |
Страница: 1 |
Вопрос: DirectX в VB
Добавлено: 18.09.07 18:57
Автор вопроса: KreAtoR
Доброго дня всем.
Проблема у меня такова.
1. У меня есть карта1 которая получает аудио сигнал (и она его получает), а также звуковая карта2, которая звук дожна выдавать (в принципе она его выдает). Но я никак не могу сделать так, чтобы звук принимаемой картой1 выводился на карту2
2. Изза этой проблемы мне пришлось полезть в directX. через него я могу снять входяший в карту1 звук сохранить его и воспроизвести на карте2. Но это не то что мне надо.
3. есть там в directX одна функция CreateSoundBufferFromResource и в ней надо указать имя dll. К Бейсику можно подключить тока либо 7й либо 8й X а SDK у меня от 9го и в нем все для C++, а мне это немного неясно и много изменений.поэтому я незнаю какая dll нужна и не могу ее найти.
Вопросы:
1. Есть ли возможность без directX сделать вывод входящего звука с карты(и она не звуковая), как с микрофона(т.е. без задержек и созранений)на звуковую карту (колонки)
2. в directX есть ли возможность во время сохраниения входящего звука в буфер Capture копировать содержимое этого буфера Capture в буфер Sound и в этот же момент воспроизводить то что надотится в буфере Sound (точнее то, что только что туда записалось)
3. как называется эта dll
p.s. заранее спасибо
p.p.s. я в DirectX только седня его открыл, поэтому если можно поподробней и желательно с примерами.
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #1
Добавлено: 18.09.07 19:34
So now we've set up our DSBUFFERDESC and WAVEFORMATEX objects and we can proceed to load the sound buffer, DSBuffer, with data:
Set DSBuffer = ds.CreateSoundBufferFromFile(App.Path & "\WaveFile.WAV", DSBufferDescription, DSFormat)
Alternatively, if we would like to load the wave from a resource we could do this:
Set DSBuffer = ds.CreateSoundBufferFromResource("", "WaveFile", DSBufferDescription, DSFormat)
http://gpwiki.org/index.php/DirectX:DirectSound:Tutorials:VB:DX7:Introduction
Так-то)
Номер ответа: 2
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #2
Добавлено: 19.09.07 10:18
это я все могу
мне ненужна вот эта строка.
в данном случае мне нужна эта
тока пурвый параметр эта dll а вот какая я незнаю. Это вопрос 3
@Winand
Номер ответа: 3
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #3
Добавлено: 19.09.07 12:34
народ проблема. Все перепробовал ну никак, посмотрите может что подскажите
Implements DirectXEvent
Dim DSs As DirectSound
Dim DSc As DirectSoundCapture
Dim DX As New DirectX7
Dim curInfo As DSCURSORS
Dim DSSBuffer As DirectSoundBuffer
Dim DSCBuffer As DirectSoundCaptureBuffer
Dim DSBufferDescription As DSBUFFERDESC
Dim DSFormat As WAVEFORMATEX
Private Sub cmdButton_Click(Index As Integer)
Select Case Index
Case 0
If cmdButton(Index).Caption = "Record" Then
 SCBuffer.start DSCBSTART_DEFAULT
cmdButton(2).Enabled = False
cmdButton(Index).Caption = "Stop"
Else
 SCBuffer.Stop
cmdButton(2).Enabled = True
cmdButton(Index).Caption = "Record"
End If
Case 1
If cmdButton(Index).Caption = "Play" Then
 SSBuffer.Play DSBPLAY_DEFAULT
cmdButton(Index).Caption = "Stop"
Else
 SSBuffer.Stop
cmdButton(Index).Caption = "Play"
End If
Case 2
 SSBuffer.SaveToFile App.Path & "\wave.wav"
Case 3
If cmdButton(Index).Caption = "Play from file" Then
Set DSSBuffer = DSs.CreateSoundBufferFromFile(App.Path & "\wave.wav", DSBufferDescription, DSFormat)
 SSBuffer.Play DSBPLAY_DEFAULT
cmdButton(Index).Caption = "Stop"
Else
 SSBuffer.Stop
cmdButton(Index).Caption = "Play from file"
End If
End Select
End Sub
Private Sub Form_Load()
Set DSc = DX.DirectSoundCaptureCreate("{BD6DD71B-3DEB-11D1-B171-00C04FC20003}"
Set DSs = DX.DirectSoundCreate(vbNullString)
With DSFormat
.nFormatTag = WAVE_FORMAT_PCM
.nChannels = 2
.lSamplesPerSec = 22050
.nBitsPerSample = 16
.nBlockAlign = .nBitsPerSample / 8 * .nChannels
.lAvgBytesPerSec = .lSamplesPerSec * .nBlockAlign
End With
With DSBufferDescription
.lFlags = DSBCAPS_CTRLPOSITIONNOTIFY Or DSBCAPS_CTRLFREQUENCY _
& DSBCAPS_CTRLPAN Or DSBCAPS_CTRLVOLUME
End With
Set DSCBuffer = DSc.CreateCaptureBuffer(DSBufferDescription)
 Ss.SetCooperativeLevel Me.hWnd, DSSCL_PRIORITY
CopyBuffer
 SSBuffer.Play DSBPLAY_DEFAULT
End Sub
Private Sub DirectXEvent_DXCallback(ByVal eventid As Long)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set DSBuffer = Nothing
End Sub
Private Sub CopyBuffer()
Set DSSBuffer = DSs.CreateSoundBuffer(DSBufferDescription, DSFormat)
Dim bytes() As Integer
ReDim bytes(curInfo.lWrite)
 SCBuffer.ReadBuffer 0, UBound(bytes), bytes(0), DSCBLOCK_DEFAULT
 SSBuffer.WriteBuffer 0, UBound(bytes), bytes(0), DSBLOCK_DEFAULT
End Sub
Private Sub Timer1_Timer()
CopyBuffer
End Sub
также на форму надо кинуть массив кнопок cmdButton(3) ну и timer1 у меня еще есть
Номер ответа: 4
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #4
Добавлено: 19.09.07 17:06
Да млин. В МСДН написано
Name of the DLL that contains the resource, or vbNullString if the resource is contained in the executable file.
То есть это та длл в которой находится ресурс
Если wav-файл в ресурсах проги то не указываешь ничего там.
НО Как это Тебе Поможет - Не Понимаю. И вообще Как связана Эта Функа С Буфером?
Номер ответа: 5
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #5
Добавлено: 19.09.07 17:10
Почитай про КриэйтСаундБуффер
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/dx81_vb/directx_vb/htm/_dx_directsound8.createsoundbufferfromresource_dxaudio_vb.asp
Номер ответа: 6
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #6
Добавлено: 19.09.07 17:11
да никак она с буфером ни связана. просто надо послушать звук входящий в видео карту на колонках и все. просто не получается
Номер ответа: 7
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #7
Добавлено: 19.09.07 20:10
См. пример (он и в 9 и в 8).
The Full Duplex Filter sample application shows how to capture and play back sounds at the same time.
Path
Source: (SDK root)\Samples\C++\DirectSound\FullDuplexFilter
Executable: (SDK root)\Samples\C++\DirectSound\Bin
User's Guide
Be sure your sound card is configured for full-duplex operation and that you have a microphone attached. Choose a format from the Output Format list. A list of formats appears in the Input Format list. Select one. Click OK. If full duplex is successfully created, another dialog box is displayed with a Record button. Click this button. Speak into the microphone and your voice is heard over the speakers.
Правда, даже в 9 -ом он реализован только для неуправляемого кода (C++).
С чего бы это?
Номер ответа: 8
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #8
Добавлено: 20.09.07 00:25
Оффтоп.
Чего ж ты уверял, что тебе нужна именно CreateSoundBufferFromResource?
Номер ответа: 9
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #9
Добавлено: 20.09.07 00:30
void Offtopic(){
cout << "Звук, входящий в видеокарту...";
cout << "Задумался...";
while(!kbhit());
return;
}
Номер ответа: 10
Автор ответа:
KreAtoR
Вопросов: 120
Ответов: 438
Профиль | | #10
Добавлено: 20.09.07 15:17
@Winand
да да все верно. там все только через буферы в принципе идет, поэтому надо обязательно буфер дулать. Мне не то чтобы буфер важен. Мне важно слышать что заходит в карту, а как это уже второй вопрос. Если получится без буферов то хорошо если с ними то тоже ничего страшного.