Audio recorder on visual basic                          
		Audio recorder on visual basic                          
25 
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 = &H2 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 alignment " & CStr (Alignment) & " bitspersample " & CStr (Resolution) & " samplespersec " & CStr (Rate) & " channels " & CStr (Channels) & " bytespersec " & CStr (Alignment * Rate) 
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 = &H2 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 alignment " & CStr (Alignment) & " bitspersample " & CStr (Resolution) & " samplespersec " & CStr (Rate) & " channels " & CStr (Channels) & " bytespersec " & CStr (Alignment * Rate) 
'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 alignment 4 bitspersample 16 samplespersec 44100 channels 2 bytespersec 176400", rtn, Len (rtn), 0) 
' i = mciSendString ("set capture alignment 2 bitspersample 16 samplespersec 44100 channels 1 bytespersec 88200", rtn, Len (rtn), 0) 
' i = mciSendString ("set capture alignment 4 bitspersample 16 samplespersec 22050 channels 2 bytespersec 88200", rtn, Len (rtn), 0) 
' i = mciSendString ("set capture alignment 2 bitspersample 16 samplespersec 22050 channels 1 bytespersec 44100", rtn, Len (rtn), 0) 
' i = mciSendString ("set capture alignment 4 bitspersample 16 samplespersec 11025 channels 2 bytespersec 44100", rtn, Len (rtn), 0) 
' i = mciSendString ("set capture alignment 2 bitspersample 16 samplespersec 11025 channels 1 bytespersec 22050", rtn, Len (rtn), 0) 
' i = mciSendString ("set capture alignment 2 bitspersample 8 samplespersec 11025 channels 2 bytespersec 22050", rtn, Len (rtn), 0) 
' i = mciSendString ("set capture alignment 1 bitspersample 8 samplespersec 11025 channels 1 bytespersec 11025", rtn, Len (rtn), 0) 
' i = mciSendString ("set capture alignment 2 bitspersample 8 samplespersec 8000 channels 2 bytespersec 16000", rtn, Len (rtn), 0) 
' i = mciSendString ("set capture alignment 1 bitspersample 8 samplespersec 8000 channels 1 bytespersec 8000", rtn, Len (rtn), 0) 
' i = mciSendString ("set capture alignment 2 bitspersample 8 samplespersec 6000 channels 2 bytespersec 12000", rtn, Len (rtn), 0) 
' i = mciSendString ("set capture alignment 1 bitspersample 8 samplespersec 6000 channels 1 bytespersec 6000", rtn, Len (rtn), 0) 
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 
 
                           
	
	
					
							 |