Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Visual Basic - Трюки и Хитрости, советы и ответы на вопросы


Служба Рассылок Городского Кота
VB Хитрости - советы и ответы на вопросы

Здравствуйте, уважаемые читатели.
Чем бы порадовать вас в этот раз ?

1. Простой пример - как записать звук с микрофона (естественно микрофон должен быть, и быть правильно подключен к аудиокарте)

Private Declare Function mciSendString Lib "winmm.dll" Alias _
"mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As
String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

Private Sub cmdPlay_Click()
 Dim L As Long, Res As String, cb As Long
 On Error Resume Next
 Res = Space$(128)
 L = mciSendString("open new type waveaudio alias sound", Res, 128, cb)
 L = mciSendString("set sound time format ms format tag pcm channels 1
 samplespersec 22050 bytespersec 44100 alignment 2
 bitspersample 16", Res, 128, cb)
 L = mciSendString("record sound", Res, 128, cb)
End Sub

Private Sub cmdStop_Click()
 Dim L As Long, Res As String, cb As Long
 On Error Resume Next
 Res = Space$(128)
 L = mciSendString("stop sound", Res, 128, cb)
 L = mciSendString("close sound", Res, 128, cb)
End Sub


2. Раз уж зашла речь об этой библиотеке (winmm.dll), давайте посмотрим, что с ней можно еше сделать
Вот, например померить время :

Private lngStart As Long
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Public Sub StartTimer()
    lngStart = timeGetTime
End Sub
Public Function StopTimer() As Long
    StopTimer = (timeGetTime - lngStart)
End Function


Private Sub Command1_Click()
     Print Time
    StartTimer
    Do While StopTimer < 1000
        DoEvents
    Loop
    Print Time
    Debug.Print StopTimer
End Sub


3. Точность такого измерения - во много раз выше точности обычного таймера . Впрочем это не таймер . Но на его основе можно наворотить....

Сдается мне , что это уже проскакивало в моих советах, однако лучше повториться. Любимый способ ребутить подвисший модем, который перегрудвется только нажатием кнопки ресет - к СD-ROM Приставляется каромысло, которое и нажимает кнопку на модеме.

Private Declare Function mciSendString Lib "winmm.dll" _
     Alias "mciSendStringA" _
    (ByVal lpstrCommand As String, _
     ByVal lpstrReturnString As String, _
     ByVal uReturnLength As Long, _
     ByVal hwndCallback As Long) As Long
'выезжает
Private Sub Command1_Click()
   Call mciSendString("Set CDAudio Door Open Wait", 0&, 0&, 0&)
End Sub
'заезжает
Private Sub Command2_Click()
 Call mciSendString("Set CDAudio Door Closed Wait", 0&, 0&, 0&)
End Sub

4. Ну, и примерчик - как определить начилие аудиокарты -


Declare Function waveOutGetNumDevs Lib "winmm.dll" () As Long

Private Sub Check_Click()

Dim rtn As Integer 'declare the needed variables

rtn = waveOutGetNumDevs() 'check for a sound card

If rtn = 1 Then 'Когда больше, чем  1- карта работает :-)
   MsgBox "Your system supports a sound card."
Else 'А иначе карты нету :-(
   MsgBox "Your system cannot play Sound Files."
End If

End Sub


         

 


Традиционная рекомендация из серии "куда пойти учиться" - по мнению читателей (а читатели выражают свое мнение не только письмами, но и покупками, статистика которых вполне доступна) лучший печатный учебник по VB . Отзывы читателей об этой книге можно посмотреть у меня на сайте - здесь
Книга, весьма полезная для понимания работы с API. А учитывая ее смешную стоимость - 45 рублей.... Короче, рекомендую

 

Успехов в программировании!

Борис Рудой

Автор сайта - Visual Basic на русском



http://subscribe.ru/
E-mail: ask@subscribe.ru

В избранное