Visual Basic - Captura de sonido

Life is soft - evento anual de software empresarial
 
Vista:

Captura de sonido

Publicado por Nikita01 (3 intervenciones) el 26/07/2012 00:05:59
Hola, soy nuevo en el foro y aunque no he tenido estudios formales en programación, parte de mi trabajo lo resuelvo con pequeños programas en Visual Basic 6.0 desde hace años.
Mi problema es el siguiente: Tengo una pequeña aplicación ya compilada que captura sonido desde la fuente que este seleccionada en el panel de sonido de Windows como dispositivo de entrada. Bajo Windows XP graba, tal cual lo necesito, en stereo o 2 channels, con 16 bits de profundidad y 22050 Hz de sampleo. Puedo variar a gusto esos parámetros entre las opciones permitidas, pero esa es la calidad que necesito.
El mismo programa ejecutado bajo Windows 7 64 bits graba en 11025 Hz, 8 bits y mono. No puedo cambiar eso, por mas instrucciones que le de. Quizá sea una diferencia en la biblioteca winmm.dll.
Les paso el código, si alguien tiene alguna idea de como solucionarlo (que no sea pasarme a .net) le agradezco:



Private Sub Command1_Click()

i = mciSendString("close all", 0&, 0, 0)
i = mciSendString("open new type waveaudio alias capture", 0&, 0, 0)
i = mciSendString("seek capture to start", 0&, 0, 0)
i = mciSendString("set capture samplespersec 22050", 0&, 0, 0)
i = mciSendString("set capture bitspersample 16", 0&, 0, 0)
i = mciSendString("set capture channels 2", 0&, 0, 0)
i = mciSendString("record capture insert", 0&, 0, 0)

End Sub


Private Sub Command2_Click()

i = mciSendString("save capture C:\Prueba.wav", 0&, 0, 0)
i = mciSendString("close all", 0&, 0, 0)

End Sub



Simple, empieza a grabar con el boton 1 y salva con el 2. Lleva un modulo:



'************************************************* ***************
'Windows API/Global Declarations for :FileFound()
'************************************************* ***************

Public Declare Function FindFirstFile& Lib "kernel32" _
Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData _
As WIN32_FIND_DATA)

Public Declare Function FindClose Lib "kernel32" _
(ByVal hFindFile As Long) As Long


Public Const MAX_PATH = 260

Type FILETIME ' 8 Bytes
dwLowDateTime As Long
dwHighDateTime As Long
End Type


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
Declare Function mciSendString Lib "winmm.dll" Alias _
"mciSendStringA" (ByVal lpstrCommand As String, ByVal _
lpstrReturnString As Any, ByVal uReturnLength As Long, ByVal _
hwndCallback As Long) As Long


Global ValidFile As Boolean

Function FileFound(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
ValidFile = True
Else
ValidFile = False
End If

End Function

Nada mas, muchas gracias por adelantado
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder