Audio recorder on visual basic

AUTOMATIC SYSTEM

AUDIO RECORDER ON VISUAL BASIC

Dushanbe, 2009

Main Interface

Source Code

Option Explicit

'Copyright: E. de Vries

'e-mail: eeltje@geocities.com

'This code can be used as freeware

Const AppName = "AudioRecorder"

Private sub> cmdSave_Click ()

Dim sName As String

If WaveMidiFileName = "" Then

sName = "Radio_from_" & CStr (WaveRecordingStartTime) & "_to_" & CStr (WaveRecordingStopTime)

sName = Replace (sName, ": ", "-")

sName = Replace (sName, " ", "_")

sName = Replace (sName, "/", "-")

Else

sName = WaveMidiFileName

sName = Replace (sName, "MID", "wav")

End If

CommonDialog1. FileName = sName

CommonDialog1. CancelError = True

On Error GoTo ErrHandler1

CommonDialog1. Filter = "WAV file (*. wav*) |*. wav"

CommonDialog1. Flags = &H3 Or &H400

CommonDialog1. ShowSave

sName = CommonDialog1. FileName

WaveSaveAs (sName)

Exit sub>

ErrHandler1:

End sub>

Private sub> cmdRecord_Click ()

Dim settings As String

Dim Alignment As Integer

Alignment = Channels * Resolution / 8

settings = "set capture>

WaveReset

WaveSet

WaveRecord

WaveRecordingStartTime = Now

cmdStop. Enabled = True 'Enable the STOP BUTTON

cmdPlay. Enabled = False 'Disable the "PLAY" button

cmdSave. Enabled = False 'Disable the "SAVE AS" button

cmdRecord. Enabled = False 'Disable the "RECORD" button

End sub>

Private sub> cmdSettings_Click ()

Dim strWhat As String

' show the user entry form modally

strWhat = MsgBox ("If you continue your data will be lost!", vbOKCancel)

If strWhat = vbCancel Then

Exit sub>

End If

Slider1. Max = 10

Slider1. Value = 0

Slider1. Refresh

cmdRecord. Enabled = True

cmdStop. Enabled = False

cmdPlay. Enabled = False

cmdSave. Enabled = False

WaveReset

Rate = CLng (GetSetting ("AudioRecorder", "StartUp", "Rate", "110025"))

Channels = CInt (GetSetting ("AudioRecorder", "StartUp", "Channels", "1"))

Resolution = CInt (GetSetting ("AudioRecorder", "StartUp", "Resolution", "16"))

WaveFileName = GetSetting ("AudioRecorder", "StartUp", "WaveFileName", "C: \Radio. wav")

WaveAutomaticSave = GetSetting ("AudioRecorder", "StartUp", "WaveAutomaticSave", "True")

WaveRecordingImmediate = True

WaveRecordingReady = False

WaveRecording = False

WavePlaying = False

'Be sure to change the Value property of the appropriate button!!

'if you change the default values!

WaveSet

frmSettings. optRecordImmediate. Value = True

frmSettings. Show vbModal

End sub>

Private sub> cmdStop_Click ()

WaveStop

cmdSave. Enabled = True 'Enable the "SAVE AS" button

cmdPlay. Enabled = True 'Enable the "PLAY" button

cmdStop. Enabled = False 'Disable the "STOP" button

If WavePosition = 0 Then

Slider1. Max = 10

Else

If WaveRecordingImmediate And (Not WavePlaying) Then Slider1. Max = WavePosition

If (Not WaveRecordingImmediate) And WaveRecording Then Slider1. Max = WavePosition

End If

If WaveRecording Then WaveRecordingReady = True

WaveRecordingStopTime = Now

WaveRecording = False

WavePlaying = False

frmSettings. optRecordProgrammed. Value = False

frmSettings. optRecordImmediate. Value = True

frmSettings. lblTimes. Visible = False

End sub>

Private sub> cmdPlay_Click ()

WavePlayFrom (Slider1. Value)

WavePlaying = True

cmdStop. Enabled = True

cmdPlay. Enabled = False

End sub>

Private sub> cmdWeb_Click ()

Dim ret&

ret& = ShellExecute (Me. hwnd, "Open", "http://home. wxs. nl/~eeltjevr/", "", App. Path,

1)

End sub>

Private sub> cmdReset_Click ()

Slider1. Max = 10

Slider1. Value = 0

Slider1. Refresh

cmdRecord. Enabled = True

cmdStop. Enabled = False

cmdPlay. Enabled = False

cmdSave. Enabled = False

WaveReset

Rate = CLng (GetSetting ("AudioRecorder", "StartUp", "Rate", "110025"))

Channels = CInt (GetSetting ("AudioRecorder", "StartUp", "Channels", "1"))

Resolution = CInt (GetSetting ("AudioRecorder", "StartUp", "Resolution", "16"))

WaveFileName = GetSetting ("AudioRecorder", "StartUp", "WaveFileName", "C: \Radio. wav")

WaveAutomaticSave = GetSetting ("AudioRecorder", "StartUp", "WaveAutomaticSave", "True")

WaveRecordingImmediate = True

WaveRecordingReady = False

WaveRecording = False

WavePlaying = False

WaveMidiFileName = ""

'Be sure to change the Value property of the appropriate button!!

'if you change the default values!

WaveSet

If WaveRenameNecessary Then

Name WaveShortFileName As WaveLongFileName

WaveRenameNecessary = False

WaveShortFileName = ""

End If

End sub>

Private sub> Form_Load ()

WaveReset

Rate = CLng (GetSetting ("AudioRecorder", "StartUp", "Rate", "110025"))

Channels = CInt (GetSetting ("AudioRecorder", "StartUp", "Channels", "1"))

Resolution = CInt (GetSetting ("AudioRecorder", "StartUp", "Resolution", "16"))

WaveFileName = GetSetting ("AudioRecorder", "StartUp", "WaveFileName", "C: \Radio. wav")

WaveAutomaticSave = GetSetting ("AudioRecorder", "StartUp", "WaveAutomaticSave", "True")

WaveRecordingImmediate = True

WaveRecordingReady = False

WaveRecording = False

WavePlaying = False

'Be sure to change the Value property of the appropriate button!!

'if you change the default values!

WaveSet

WaveRecordingStartTime = Now + TimeSerial (0, 15, 0)

WaveRecordingStopTime = WaveRecordingStartTime + TimeSerial (0, 15, 0)

WaveMidiFileName = ""

WaveRenameNecessary = False

End sub>

Private sub> Form_Unload (Cancel As Integer)

WaveClose

Call SaveSetting ("AudioRecorder", "StartUp", "Rate", CStr (Rate))

Call SaveSetting ("AudioRecorder", "StartUp", "Channels", CStr (Channels))

Call SaveSetting ("AudioRecorder", "StartUp", "Resolution", CStr (Resolution))

Call SaveSetting ("AudioRecorder", "StartUp", "WaveFileName", WaveFileName)

Call SaveSetting ("AudioRecorder", "StartUp", "WaveAutomaticSave", CStr (WaveAutomaticSave))

If WaveRenameNecessary Then

Name WaveShortFileName As WaveLongFileName

WaveRenameNecessary = False

WaveShortFileName = ""

End If

End

End sub>

Private sub> Timer2_Timer ()

Dim RecordingTimes As String

Dim msg As String

RecordingTimes = "Start time: " & WaveRecordingStartTime & vbCrLf _

& "Stop time: " & WaveRecordingStopTime

WaveStatistics

If Not WaveRecordingImmediate Then

WaveStatisticsMsg = WaveStatisticsMsg & "Programmed recording"

If WaveAutomaticSave Then

WaveStatisticsMsg = WaveStatisticsMsg & " (automatic save)"

Else

WaveStatisticsMsg = WaveStatisticsMsg & " (manual save)"

End If

WaveStatisticsMsg = WaveStatisticsMsg & vbCrLf & vbCrLf & RecordingTimes

End If

StatisticsLabel. Caption = WaveStatisticsMsg

WaveStatus

If WaveStatusMsg <> AudioRecorder. Caption Then AudioRecorder. Caption = WaveStatusMsg

If InStr (AudioRecorder. Caption, "stopped") > 0 Then

cmdStop. Enabled = False

cmdPlay. Enabled = True

End If

If RecordingTimes <> frmSettings. lblTimes. Caption Then frmSettings. lblTimes. Caption = RecordingTimes

If (Now > WaveRecordingStartTime) _

And (Not WaveRecordingReady) _

And (Not WaveRecordingImmediate) _

And (Not WaveRecording) Then

WaveReset

WaveSet

WaveRecord

WaveRecording = True

cmdStop. Enabled = True 'Enable the STOP BUTTON

cmdPlay. Enabled = False 'Disable the "PLAY" button

cmdSave. Enabled = False 'Disable the "SAVE AS" button

cmdRecord. Enabled = False 'Disable the "RECORD" button

End If

If (Now > WaveRecordingStopTime) And (Not WaveRecordingReady) And (Not WaveRecordingImmediate) Then

WaveStop

cmdSave. Enabled = True 'Enable the "SAVE AS" button

cmdPlay. Enabled = True 'Enable the "PLAY" button

cmdStop. Enabled = False 'Disable the "STOP" button

If WavePosition > 0 Then

Slider1. Max = WavePosition

Else

Slider1. Max = 10

End If

WaveRecording = False

WaveRecordingReady = True

If WaveAutomaticSave Then

WaveFileName = "Radio_from_" & CStr (WaveRecordingStartTime) & "_to_" & CStr (WaveRecordingStopTime)

WaveFileName = Replace (WaveFileName, ": ", ". ")

WaveFileName = Replace (WaveFileName, " ", "_")

WaveFileName = WaveFileName & ". wav"

WaveSaveAs (WaveFileName)

msg = "Recording has been saved" & vbCrLf

msg = msg & "Filename: " & WaveFileName

MsgBox (msg)

Else

msg = "Recording is ready" & vbCrLf

msg = msg & "Don't forget to save recording..."

MsgBox (msg)

End If

frmSettings. optRecordProgrammed. Value = False

frmSettings. optRecordImmediate. Value = True

End If

End sub>

Option Explicit

Private sub> cmdFileName_Click ()

WaveFileName = InputBox ("Filename: ", "Filename for automatic saving", WaveFileName)

End sub>

Private sub> cmdMidi_Click ()

CommonDialog2. CancelError = True

On Error GoTo ErrHandler1

CommonDialog2. Filter = "Midi file (*. mid*) |*. mid"

CommonDialog2. Flags = &H3 Or &H400

CommonDialog2. ShowOpen

WaveMidiFileName = CommonDialog2. FileName

WaveMidiFileName = GetShortName (WaveMidiFileName)

ErrHandler1:

End sub>

Private sub> cmdOke_Click ()

Unload Me

End sub>

Private sub> cmdStartTime_Click ()

Dim wrst As String

wrst = WaveRecordingStartTime

wrst = InputBox ("Enter start time recording", "Start time", wrst)

If wrst = "" Then Exit sub>

If Not IsDate (wrst) Then

MsgBox ("The date/time you entered was not valid!")

Else

' String returned from InputBox is a valid time,

' so store it as a date/time value in WaveRecordingStartTime.

If CDate (wrst) < Now Then

MsgBox ("Recording events in the past is not possible... ")

WaveRecordingStartTime = Now + TimeSerial (0, 15, 0)

Else

WaveRecordingStartTime = CDate (wrst)

End If

If WaveRecordingStopTime < WaveRecordingStartTime Then WaveRecordingStopTime = WaveRecordingStartTime + TimeSerial (0, 15, 0)

End If

End sub>

Private sub> cmdStopTime_Click ()

Dim wrst As String

wrst = WaveRecordingStopTime

If wrst < WaveRecordingStartTime Then wrst = WaveRecordingStartTime + TimeSerial (0, 15, 0)

wrst = InputBox ("Enter stop time recording", "Stop time", wrst)

If wrst = "" Then Exit sub>

If Not IsDate (wrst) Then

MsgBox ("The time you entered was not valid!")

Else

' String returned from InputBox is a valid time,

' so store it as a date/time value in WaveRecordingStartTime.

If CDate (wrst) < WaveRecordingStartTime Then

MsgBox ("The stop time has to be later then the start time!")

WaveRecordingStopTime = WaveRecordingStartTime + TimeSerial (0, 5, 0)

Else

WaveRecordingStopTime = CDate (wrst)

End If

End If

End sub>

Private sub> Form_Load ()

Select Case Rate

Case 44100

optRate44100. Value = True

Case 22050

optRate22050. Value = True

Case 11025

optRate11025. Value = True

Case 8000

optRate8000. Value = True

Case 6000

optRate6000. Value = True

End Select

Select Case Channels

Case 1

optMono. Value = True

Case 2

optStereo. Value = True

End Select

Select Case Resolution

Case 8

opt8bits. Value = True

Case 16

opt16bits. Value = True

End Select

If WaveRecordingImmediate Then

optRecordImmediate. Value = True

Else

optRecordProgrammed. Value = True

End If

If WaveAutomaticSave Then

Option11. Value = True

Else

Option10. Value = True

End If

End sub>

Private sub> optRate11025_Click ()

Rate = 11025

optRate11025. Value = True

End sub>

Private sub> optRate44100_Click ()

Rate = 44100

optRate44100. Value = True

End sub>

Private sub> Option10_Click ()

WaveAutomaticSave = False

End sub>

Private sub> Option11_Click ()

WaveAutomaticSave = True

End sub>

Private sub> optRate22050_Click ()

Rate = 22050

optRate22050. Value = True

End sub>

Private sub> optRate8000_Click ()

Rate = 8000

optRate8000. Value = True

End sub>

Private sub> optRate6000_Click ()

Rate = 6000

optRate6000. Value = True

End sub>

Private sub> optMono_Click ()

Channels = 1

optMono. Value = True

End sub>

Private sub> optStereo_Click ()

Channels = 2

optStereo. Value = True

End sub>

Private sub> opt8bits_Click ()

Resolution = 8

opt8bits. Value = True

End sub>

Private sub> opt16bits_Click ()

Resolution = 16

opt16bits. Value = True

End sub>

Private sub> optRecordImmediate_Click ()

WaveRecordingImmediate = True

frmManualAuto. Visible = False

frmTimes. Visible = False

lblTimes. Visible = False

AudioRecorder. cmdRecord. Enabled = True

End sub>

Private sub> optRecordProgrammed_Click ()

WaveRecordingImmediate = False

frmManualAuto. Visible = True

frmTimes. Visible = True

lblTimes. Visible = True

AudioRecorder. cmdRecord. Enabled = False

If WaveRecordingStartTime < Now Then

WaveRecordingStartTime = Now + TimeSerial (0, 15, 0)

WaveRecordingStopTime = WaveRecordingStartTime + TimeSerial (0, 15, 0)

End If

End sub>

Option Explicit

Public Declare Function ShellExecute Lib "shell32. dll" Alias _

"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As _

String, ByVal lpFile As String, ByVal lpParameters As String, _

ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Option Explicit

Public Rate As Long

Public Channels As Integer

Public Resolution As Integer

Public WaveStatusMsg As String * 255

Public WaveStatisticsMsg As String

Public WaveRecordingImmediate As Boolean

Public WaveRecordingStartTime As Date

Public WaveRecordingStopTime As Date

Public WaveRecordingReady As Boolean

Public WaveRecording As Boolean

Public WavePlaying As Boolean

Public WaveAutomaticSave As Boolean

Public WaveFileName As String

Public WaveMidiFileName As String

Public WaveLongFileName As String

Public WaveShortFileName As String

Public WaveRenameNecessary As Boolean

'These were the public variables

'=====================================================

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

Private Declare Function GetShortPathName Lib "kernel32" _

Alias "GetShortPathNameA" (ByVal lpszLongPath As String, _

ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long

Private Declare Function FindFirstFile& Lib "kernel32" _

Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData _

As WIN32_FIND_DATA)

Private Declare Function FindClose Lib "kernel32" _

(ByVal hFindFile As Long) As Long

Private Const MAX_PATH = 260

Private Type FILETIME ' 8 Bytes

dwLowDateTime As Long

dwHighDateTime As Long

End Type

Private Type WIN32_FIND_DATA ' 318 Bytes

dwFileAttributes As Long

ftCreationTime As FILETIME

ftLastAccessTime As FILETIME

ftLastWriteTime As FILETIME

nFileSizeHigh As Long

nFileSizeLow As Long

dwReservedЇ As Long

dwReserved1 As Long

cFileName As String * MAX_PATH

cAlternate As String * 14

End Type

Private Function FileExist (strFileName As String) As Boolean

Dim lpFindFileData As WIN32_FIND_DATA

Dim hFindFirst As Long

hFindFirst = FindFirstFile (strFileName, lpFindFileData)

If hFindFirst > 0 Then

FindClose hFindFirst

FileExist = True

Else

FileExist = False

End If

End Function

Public Function GetShortName (ByVal sLongFileName As String) As String

Dim lRetVal As Long, sShortPathName As String, iLen As Integer

'Set up buffer area for API function call return

sShortPathName = Space (255)

iLen = Len (sShortPathName)

'Call the function

lRetVal = GetShortPathName (sLongFileName, sShortPathName, iLen)

If lRetVal = 0 Then 'The file does not exist, first create it!

Open sLongFileName For Random As #1

Close #1

lRetVal = GetShortPathName (sLongFileName, sShortPathName, iLen)

'Now another try!

Kill (sLongFileName)

'Delete file now!

End If

'Strip away unwanted characters.

GetShortName = Left (sShortPathName, lRetVal)

End Function

Private Function Has_Space (sName As String) As Boolean

Dim b As Boolean

Dim i As Long

b = False 'not yet any spaces found

i = InStr (sName, " ")

If i <> 0 Then b = True

Has_Space = b

End Function

Public sub> WaveReset ()

Dim rtn As String

Dim i As Long

rtn = Space$ (260)

'Close any MCI operations from previous VB programs

i = mciSendString ("close all", rtn, Len (rtn), 0)

If i <> 0 Then MsgBox ("Closing all MCI operations failed!")

'Open a new WAV with MCI Command...

i = mciSendString ("open new type waveaudio alias capture", rtn, Len (rtn), 0)

If i <> 0 Then MsgBox ("Opening new wave failed!")

End sub>

Public sub> WaveSet ()

Dim rtn As String

Dim i As Long

Dim settings As String

Dim Alignment As Integer

rtn = Space$ (260)

Alignment = Channels * Resolution / 8

settings = "set capture>

'Samples Per Second that are supported:

'11025 low quality

'22050 medium quality

'44100 high quality (CD music quality)

'Bits per sample is 16 or 8

'Channels are 1 (mono) or 2 (stereo)

i = mciSendString ("seek capture to start", rtn, Len (rtn), 0) 'Always start at the beginning

If i <> 0 Then MsgBox ("Starting recording failed!")

'You can use at least the following combinations

' i = mciSendString ("set capture>

' i = mciSendString ("set capture>

' i = mciSendString ("set capture>

' i = mciSendString ("set capture>

' i = mciSendString ("set capture>

' i = mciSendString ("set capture>

' i = mciSendString ("set capture>

' i = mciSendString ("set capture>

' i = mciSendString ("set capture>

' i = mciSendString ("set capture>

' i = mciSendString ("set capture>

' i = mciSendString ("set capture>

i = mciSendString (settings, rtn, Len (rtn), 0)

If i <> 0 Then MsgBox ("Settings for recording not consistent")

' If the combination is not supported you get an error!

End sub>

Public sub> WaveRecord ()

Dim rtn As String

Dim i As Long

Dim msg As String

rtn = Space$ (260)

If WaveMidiFileName <> "" Then

If WaveRecordingImmediate Then MsgBox ("Midi file " & WaveMidiFileName & " will be recorded")

i = mciSendString ("open " & WaveMidiFileName & " type sequencer alias midi", rtn, Len (rtn), 0)

If i <> 0 Then MsgBox ("Opening midi file failed!")

i = mciSendString ("play midi", rtn, Len (rtn), 0) 'Start the recording

If i <> 0 Then MsgBox ("Playing midi file failed!")

End If

i = mciSendString ("record capture", rtn, Len (rtn), 0) 'Start the recording

If i <> 0 Then MsgBox ("Recording not possible, please restart your computer... ")

End sub>

Public sub> WaveSaveAs (sName As String)

Dim rtn As String

Dim i As Long

'If file already exists then remove it

If FileExist (sName) Then

Kill (sName)

End If

'The mciSendString API call doesn't seem to like'

'long filenames that have spaces in them, so we

'will make another API call to get the short

'filename version.

'This is accomplished by the function GetShortName

'MCI command to save the WAV file

If Has_Space (sName) Then

WaveShortFileName = GetShortName (sName)

WaveLongFileName = sName

WaveRenameNecessary = True

' These are necessary in order to be able to rename file

i = mciSendString ("save capture " & WaveShortFileName, rtn, Len (rtn), 0)

Else

i = mciSendString ("save capture " & sName, rtn, Len (rtn), 0)

End If

If i <> 0 Then MsgBox ("Saving file failed, file name was: " & sName)

End sub>

Public sub> WaveStop ()

Dim rtn As String

Dim i As Long

i = mciSendString ("stop capture", rtn, Len (rtn), 0)

If i <> 0 Then MsgBox ("Stopping recording failed!")

If WaveMidiFileName <> "" Then

i = mciSendString ("stop midi", rtn, Len (rtn), 0)

If i <> 0 Then MsgBox ("Stopping playing midi file failed!")

End If

End sub>

Public sub> WavePlay ()

Dim rtn As String

Dim i As Long

i = mciSendString ("play capture from 0", rtn, Len (rtn), 0)

If i <> 0 Then MsgBox ("Start playing failed!")

End sub>

Public sub> WaveStatus ()

Dim i As Long

WaveStatusMsg = Space (255)

i = mciSendString ("status capture mode", WaveStatusMsg, 255, 0)

If i <> 0 Then MsgBox ("Failure getting wave status... ")

WaveStatusMsg = "AudioRecorder: " & WaveStatusMsg

End sub>

Public sub> WaveStatistics ()

Dim mssg As String * 255

Dim i As Long

i = mciSendString ("set capture time format ms", 0&, 0, 0)

If i <> 0 Then MsgBox ("Setting time format in milliseconds failed!")

i = mciSendString ("status capture length", mssg, 255, 0)

mssg = CStr (CLng (mssg) / 1000)

If i <> 0 Then MsgBox ("Finding length recording in milliseconds failed!")

WaveStatisticsMsg = "Length recording " & Str (mssg) & " s"

i = mciSendString ("set capture time format bytes", 0&, 0, 0)

If i <> 0 Then MsgBox ("Setting time format in bytes failed!")

i = mciSendString ("status capture length", mssg, 255, 0)

If i <> 0 Then MsgBox ("Finding length recording in bytes failed!")

WaveStatisticsMsg = WaveStatisticsMsg & " (" & Str (mssg) & " bytes)" & vbCrLf

i = mciSendString ("status capture channels", mssg, 255, 0)

If i <> 0 Then MsgBox ("Finding number of channels failed!")

If Str (mssg) = 1 Then

WaveStatisticsMsg = WaveStatisticsMsg & "Mono - "

ElseIf Str (mssg) = 2 Then

WaveStatisticsMsg = WaveStatisticsMsg & "Stereo - "

End If

i = mciSendString ("status capture bitspersample", mssg, 255, 0)

If i <> 0 Then MsgBox ("Finding resolution failed!")

WaveStatisticsMsg = WaveStatisticsMsg & Str (mssg) & " bits - "

i = mciSendString ("status capture samplespersec", mssg, 255, 0)

If i <> 0 Then MsgBox ("Finding sample rate failed!")

WaveStatisticsMsg = WaveStatisticsMsg & Str (mssg) & " samples per second " & vbCrLf & vbCrLf

End sub>

Public sub> WaveClose ()

Dim rtn As String

Dim i As Long

i = mciSendString ("close capture", rtn, Len (rtn), 0)

If i <> 0 Then MsgBox ("Closing MCI failed!")

End sub>

Public Function WavePosition () As Long

Dim rtn As String

Dim i As Long

Dim pos As String

rtn = Space (255)

pos = Space (255)

i = mciSendString ("set capture time format ms", rtn, Len (rtn), 0)

If i <> 0 Then MsgBox ("Setting format in milliseconds failed!")

i = mciSendString ("status capture position", pos, 255, 0)

If i <> 0 Then MsgBox ("Finding position failed!")

If i <> 0 Then MsgBox ("Error in position")

WavePosition = CLng (pos)

End Function

Public sub> WavePlayFrom (Position As Long)

Dim rtn As String

Dim i As Long

Dim pos As String

pos = CStr (Position)

i = mciSendString ("set capture time format ms", 0&, 0, 0)

If i <> 0 Then MsgBox ("Setting format in milliseconds failed!")

i = mciSendString ("play capture from " & pos, rtn, Len (rtn), 0)

If i <> 0 Then MsgBox ("Playing from indicated position failed!")

If i <> 0 Then MsgBox ("Play from position doesn't work... ")

End sub>

Interface in Action