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
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


0