Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: winandfx.narod.ru
 Профиль | | #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
это я все могу :)

мне ненужна вот эта строка.
Set DSBuffer = ds.CreateSoundBufferFromFile(App.Path & "\WaveFile.WAV", DSBufferDescription, DSFormat)


в данном случае мне нужна эта
Set DSBuff = DS.CreateSoundBufferFromResource(, "{BD6DD71A-3DEB-11D1-B171-00C04FC20000}", capBuff)


тока пурвый параметр эта dll а вот какая я незнаю. Это вопрос 3

@Winand
:-P

Ответить

Номер ответа: 3
Автор ответа:
 KreAtoR



Вопросов: 120
Ответов: 438
 Профиль | | #3 Добавлено: 19.09.07 12:34
народ проблема. Все перепробовал ну никак, посмотрите может что подскажите
            Option Explicit
        
        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
                ;DSCBuffer.start DSCBSTART_DEFAULT
                cmdButton(2).Enabled = False
                cmdButton(Index).Caption = "Stop"
            Else
                ;DSCBuffer.Stop
                cmdButton(2).Enabled = True
                cmdButton(Index).Caption = "Record"
            End If
        Case 1
            If cmdButton(Index).Caption = "Play" Then
                ;DSSBuffer.Play DSBPLAY_DEFAULT
                
                cmdButton(Index).Caption = "Stop"
            Else
                ;DSSBuffer.Stop
                cmdButton(Index).Caption = "Play"
            End If
        Case 2
            ;DSSBuffer.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)
                ;DSSBuffer.Play DSBPLAY_DEFAULT
                cmdButton(Index).Caption = "Stop"
            Else
                ;DSSBuffer.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)
    
    ;DSs.SetCooperativeLevel Me.hWnd, DSSCL_PRIORITY
    
    CopyBuffer
    
    ;DSSBuffer.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)
    
    ;DSCBuffer.ReadBuffer 0, UBound(bytes), bytes(0), DSCBLOCK_DEFAULT
    ;DSSBuffer.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-сайт: winandfx.narod.ru
 Профиль | | #4
Добавлено: 19.09.07 17:06
Да млин. В МСДН написано
"dll"
Name of the DLL that contains the resource, or vbNullString if the resource is contained in the executable file.

То есть это та длл в которой находится ресурс
The sound resource must be of type WAV or WAVE.

Если wav-файл в ресурсах проги то не указываешь ничего там.

НО Как это Тебе Поможет - Не Понимаю. И вообще Как связана Эта Функа С Буфером?

Ответить

Номер ответа: 5
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #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-сайт: softvito.narod2.ru
 Профиль | | #7
Добавлено: 19.09.07 20:10
См. пример (он и в 9 и в 8).

Full Duplex Filter Sample
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-сайт: winandfx.narod.ru
 Профиль | | #8
Добавлено: 20.09.07 00:25
Оффтоп.
Чего ж ты уверял, что тебе нужна именно CreateSoundBufferFromResource?

Ответить

Номер ответа: 9
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #9
Добавлено: 20.09.07 00:30
void Offtopic(){
   cout << "Звук, входящий в видеокарту...";
   cout << "Задумался...";
   while(!kbhit());
   return;
}

Ответить

Номер ответа: 10
Автор ответа:
 KreAtoR



Вопросов: 120
Ответов: 438
 Профиль | | #10 Добавлено: 20.09.07 15:17
@Winand
да да все верно. там все только через буферы в принципе идет, поэтому надо обязательно буфер дулать. Мне не то чтобы буфер важен. Мне важно слышать что заходит в карту, а как это уже второй вопрос. Если получится без буферов то хорошо если с ними то тоже ничего страшного.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам