Autor
|
Tema: Ejecutar archivo de sonido (Leído 9,015 veces)
|
‡‡‡ Ðξλ†Ћ Щλ†ζЋ ‡‡‡
Desconectado
Mensajes: 56
|
Hola que tal: Tengo una pregunta, que quiza sea muy sencilla, pero no encuentro la respuesta. Estoy intentando hacer un programa en VB6, y necesito que cuando se oprima un boton, por ejemplo, se ejecute un pequeño archivo de audio (wav, avi o wma) , pero no lo consigo. El archivo de audio es de 300Kb, el problema es que no lo puedo llamar o ejecutar. He intentado por medio de: Id=Shell("C:\Carpeta\audio.wav") Id=Shell("C:\Carpeta\audio.avi") Open archivo for Input as #1 pero obviamente no me lo abre, porque no es un archivo de texto y demás. He checado que hay un control llamado MMControl, pero por mas que busco, no lo encuentro en la galeria de objetos en mi VB6, y en internet no encuentro el nombre del control (por ej, Microsoft Common Control). Alguien me podría dar una pista, por favor?
|
|
|
En línea
|
|
|
|
seba123neo
|
Hola Alpha,vos lo queres reproducir con el programa que reproduce esos archivos o lo queres reproducir desde visual basic?..que yo sepa el Shell solo abre archivos .exe,para ejecutar otro archivo como .doc. .wav .pdf etc... lo haces con una api llamada ShellExecute..pero el programa te va a abrir el archivo con el predeterminado,por ejemplo el .wav con el winamp o con el programa que vos le pusiste para que lo abra,el .doc con el word...etc... por eso no se que es lo que qeures,abrirlo con el programa ya predeterminado o desde visualbasic.. desde visual basic sonidos los podes reproducir de muchas formas...un .wav basicamente se reproduce con una api llamada PlaySound,archivos Wav, MP3 y Midi los podes reproducir con la api llamada mciExecute,y tambien con el control ese que vos decis que no tenes el MMControl podes reproducir .wav y .avi videos,o con la api mciSendString podes reproducir los .avi tambien... por lo que veo vos los queres "llamar" y abrir con el programa que ya este definido,seria algo asi: Option Explicit Private 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
Private Sub Command1_Click() ShellExecute Me.hwnd, "Open", "C:\Carpeta\audio.wav", vbNullString, vbNullString, 1 End Sub saludos.
|
|
« Última modificación: 13 Abril 2008, 06:29 am por seba123neo »
|
En línea
|
|
|
|
((( SPAWN )))
Desconectado
Mensajes: 56
|
Hola, o si queres reproducir desde visual basic, utiliza la api q t nombro anteriormente seba123neo la sndPlaySound. Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long Const SND_SYNC = &H0 Const SND_NODEFAULT = &H2
Private Sub Command1_Click() Dim rst& rst = sndPlaySound("c:\windows\media\chimes.wav", SND_SYNC Or SND_NODEFAULT) End Sub
Saludos.
|
|
|
En línea
|
|
|
|
‡‡‡ Ðξλ†Ћ Щλ†ζЋ ‡‡‡
Desconectado
Mensajes: 56
|
Hola Seba123neo y ((( SPAWN ))): Les agradezco mucho su atención, sus respuestas, su rapidez y su tiempo. Inserte el codigo que me dieron, y funciona a la perfección Ahora, abusando de su tiempo, , me pueden apoyar con otras 2 preguntas? La 1ra es: Como cierro el wmplayer, despues de que ya se ejecutaron los archivos de audio? Se me ocurrió generar un bat desde VB, que terminara el proceso (taskkill..., etc), pero debe haber una forma desde VB. La 2da es: Desde luego que no tengo el nivel de conocimientos que tienen ustedes, pero bueno, mas o menos me defiendo . He leido muchos manuales, de los cuales hago mis resumenes, y sigo buscando, , pero, o encuentro muy basicos, o muy complicados, con codigos que no entiendo completamente, como los que me indicaron para ejecutar el archivo de audio. Encontre estas ligas que despues he de leer y practicar, http://msdn2.microsoft.com/es-es/library/4zey12w5(VS.80).aspx http://support.microsoft.com/kb/106553/espero, sabran ustedes de algunas ligas donde pueda encontrar manuales de VB, nivel Intermedio, que expliquen con ejemplos no tan complicados, acerca de Declare, Public, Lib, ByVal, as Long? Repito, tengo info acerca de esto, y saco mis resumenes, pero los ejemplos, o estan muy complicados, o solo comentan para que sirve, y cuando los quiero aplicar, me manda errores , asi que termino usando siempre Dim ... as String o Integer . Se los agradezco, y estamos en contacto. Saludos.
|
|
|
En línea
|
|
|
|
seba123neo
|
vamos por parte(dijo yack)...para cerrar el windows media player o cualquier programa,lo podes hacer de muchas formas,matando su proceso,cerrandolo sabiendo el nombre de clase de la ventana o el caption de la misma.. Matando el proceso:Option Explicit
Dim ListaProcesos As Object Dim ObjetoWMI As Object Dim ProcesoACerrar As Object
Private Function MatarProceso(StrNombreProceso As String, Optional DecirSINO As Boolean = True) As Boolean MatarProceso = False Set ObjetoWMI = GetObject("winmgmts:") If IsNull(ObjetoWMI) = False Then Set ListaProcesos = ObjetoWMI.InstancesOf("win32_process") For Each ProcesoACerrar In ListaProcesos If UCase(ProcesoACerrar.Name) = UCase(StrNombreProceso) Then If DecirSINO Then If MsgBox("¿Matar el proceso " & _ ProcesoACerrar.Name & vbNewLine & "...¿Está seguro?", _ vbYesNo + vbCritical) = vbYes Then ProcesoACerrar.Terminate (0) MatarProceso = True End If
Else
ProcesoACerrar.Terminate (0) MatarProceso = True
End If End If
Next End If Set ListaProcesos = Nothing Set ObjetoWMI = Nothing End Function
Private Sub Form_Load() MatarProceso LCase$("wmplayer"), True End Sub Con el Nombre clase y caption:Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long Private Declare Function TerminateProcess Lib "kernel32" (ByVal ApphProcess As Long, ByVal uExitCode As Long) As Long Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal blnheritHandle As Long, ByVal dwAppProcessId As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long Const SW_SHOWNORMAL = 1 Const WM_CLOSE = &H10 Const PROCESS_ALL_ACCESS = 0 Const Calculadora = "SciCalc" 'aca pones el nombre de clase de la ventana
Private Sub Form_Load() Dim WinWnd As Long, Ret As String, RetVal As Long, lpClassName As String WinWnd = FindWindow(vbNullString, "Calculadora") If WinWnd = 0 Then MsgBox "No lo tenes abierto al programa !!!": Exit Sub ShowWindow WinWnd, SW_SHOWNORMAL lpClassName = Space(256) RetVal = GetClassName(WinWnd, lpClassName, 256) PostMessage WinWnd, WM_CLOSE, 0&, 0& End Sub
Function KillWindow(hwnd) Dim PROCESSID As Long Dim exitcode As Long Dim MyProcess As Long Call GetWindowThreadProcessId(hwnd, PROCESSID) MyProcess = OpenProcess(PROCESS_ALL_ACCESS, False, PROCESSID) AppKill = TerminateProcess(MyProcess, exitcode) Call CloseHandle(MyProcess) End Function
el nombre de clase del windows media player es WMPlayerApplos links que pusiste son de VB NET.....eso es otra cosa...por eso no te funcionan los codigos..aca podes encontrar manuales,busca en los post con chinchetas hay muchas cosas.. saludos.
|
|
« Última modificación: 14 Abril 2008, 02:48 am por seba123neo »
|
En línea
|
|
|
|
naderST
|
mirate este example Option Explicit
Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Const WM_QUIT As Long = &H12
Function EndProcess(ByVal WindowTitle As String, Optional Class As Boolean = False) Dim lRet As Long If Class = True Then lRet = FindWindow(WindowTitle, vbNullString) Else lRet = FindWindow(vbNullString, WindowTitle) End If If lRet = 0 Then Exit Function Call PostMessage(lRet, WM_QUIT, 0&, 0&) End Function
Private Sub Form_Load() Call EndProcess("notepad", True) 'Por clase Call EndProcess("Windows Live Messenger", False) 'Por caption End Sub
|
|
|
En línea
|
|
|
|
|
cassiani
Desconectado
Mensajes: 978
« Anterior | Próximo »
|
necesito que cuando se oprima un boton, por ejemplo, se ejecute un pequeño archivo de audio (wav, avi o wma) , Como cierro el wmplayer, despues de que ya se ejecutaron los archivos de audio?
Hola BlaKore_Alpha, lo que quieres hacer es aceptable, pero... uhm... ¿pare que recurrir al wmp? no lo veo nada profesional, yo te recomendaría que usaras la api que tejo ((( SPAWN ))), y aquí te dejo un ejemplo mas completo de como usarlo: http://www.recursosvisualbasic.com.ar/htm/listado-api/206-api-reproducir-sonidos-playsound.htmHay otras formas ¡suerte! ¡s4lu2!
|
|
|
En línea
|
|
|
|
‡‡‡ Ðξλ†Ћ Щλ†ζЋ ‡‡‡
Desconectado
Mensajes: 56
|
Hola a todos (seba123neo, ((( SPAWN ))), naderST, cΔssiΔnі): Nuevamente les agradezco su ayuda. seba123neo y naderST, gracias, sé que su intención es la mejor (ayudarme) , pero como les comentaba, ese tipo de instrucciones no las comprendo todavía. La verdad es que entendí 1/4 de lo que me escribieron , pero bueno, ya tengo mas instrucciones que investigar. ((( SPAWN ))), gracias por los links, tienen mucha info y muchos enlaces que de seguro me serán de gran ayuda. cΔssiΔnі, igual, muchas gracias por la ayuda, de hecho parece que me va a acomodar mas el método que me comentas, explicado en el link. Solo una pregunta: ¿por qué no abre ninguna aplicación (que quiza es lo que más me resulte), sino que sólo se escucha el sonido? seba123neo, ((( SPAWN ))), naderST, disculpen si me fuí con el método (hasta el momento) de cΔssiΔnі, pero para mi nivel, me es más fácil, y un poco más entendible. De nuevo muchas gracias a todos. Les voy a quitar un poco más de su tiempo, si me lo permiten. El sonido se va a escuchar acabando cada 3 o 5 palabras, mas o menos. Obviamente tiene un fin esto de cada x palabras. Es por tiempo, y movimiento dentro del textbox. Mi pregunta es: Con los metodos que me han dado, y que + o - he probado (por el trabajo que nada mas me quita el tiempo, ), no se cargará la RAM? ¿No se trabará la máquina, o se hará lenta, al ejecutar archivos de sonido en poco tiempo? Mas que nada, por eso era la pregunta de como cerrar el wmplayer. O por ejemplo en el método que comentó cΔssiΔnі, el archivo de sonido, se ejecuta, se escucha y terminando de escucharse, se cierra? termina el proceso? Como les comentaba, los archivos son de 300Kb, y les tengo que recortar el 50%, asi que van a quedar, igual y como de 150 o 180Kb, pero lo que no quisiera y que tengo que checar, es que despues de reproducir estos archivos cierta cantidad de veces, se empiece a trabar la máquina. Si tienen alguna respuesta o sugerencia... Bueno, me despido por el momento. Hasta luego.
|
|
|
En línea
|
|
|
|
((( SPAWN )))
Desconectado
Mensajes: 56
|
Hola BlaKore_Alpha como estas, constestando a tus dudas. Solo una pregunta: ¿por qué no abre ninguna aplicación (que quiza es lo que más me resulte), sino que sólo se escucha el sonido?
como la api sndPlaySoundA es una función propia del windows, esta en particular no necesita ejecutar un programa externo para reproducir el sonido de un archivo de audio, tal es el caso contrario de la api ShellExecute q al introducirle un parametro con la ruta del archivo de audio, ejecutará el mismo con un programa q tengas instalado para reproducirlo como puede ser el Winamp,WMP o el q tengas predeterminado. no se cargará la RAM? ¿No se trabará la máquina, o se hará lenta, al ejecutar archivos de sonido en poco tiempo?
q yo sepa son funciones q no consumen mucha memoria, o si alguien tenga otra definicion. Saludos.
|
|
|
En línea
|
|
|
|
|
|