Ejecutar archivo de sonido

Iniciado por ‡‡‡ Ðξλ†Ћ Щλ†ζЋ ‡‡‡, 13 Abril 2008, 05:46 AM

0 Miembros y 1 Visitante están viendo este tema.

‡‡‡ Ðξλ†Ћ Щλ†ζЋ ‡‡‡

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) :P, pero no lo consigo. :-\

El archivo de audio es de 300Kb, el problema es que no lo puedo llamar o ejecutar. :huh:

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?

seba123neo

#1
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.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

((( SPAWN )))

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.

Cita de: EON + = SOLUCIÓN

‡‡‡ Ðξλ†Ћ Щλ†ζЋ ‡‡‡

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

Ahora, abusando de su tiempo,  ;D, 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,  :P, 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/es
pero, 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.

seba123neo

#4
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 WMPlayerApp

los 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.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

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

((( SPAWN )))

Hola, bueno llegue tarde, por lo menos te voy contestar la segunda pregunta sobre los manuales de visual basic aca te dejo algunos links donde podras encontrar, manuales desde los basicos hasta los avanzados:

http://www.visual-basic.com.ar/links-es.htm
http://www.canalvisualbasic.net
http://www.elguille.info
http://www.recursosvisualbasic.com.ar

no es por nada malo contra seba pero me gusto mas el codigo de naderST es mucho mas simplificado, pero ambos cumplen la misma funcion.  ;)

Saludos.

Cita de: EON + = SOLUCIÓN

cassiani

Cita de: BlaKore_Alpha en 13 Abril 2008, 05:46 AM
necesito que cuando se oprima un boton, por ejemplo, se ejecute un pequeño archivo de audio (wav, avi o wma) :P,

Cita de: BlaKore_Alpha en 14 Abril 2008, 02:21 AM
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.htm

Hay otras formas ¡suerte!

¡s4lu2!

‡‡‡ Ðξλ†Ћ Щλ†ζЋ ‡‡‡

Hola a todos (seba123neo, ((( SPAWN ))), naderST, cΔssiΔnі):  :D

Nuevamente les agradezco su ayuda.  :D

seba123neo y naderST, gracias, sé que su intención es la mejor (ayudarme)  :laugh:, 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 :o, pero bueno, ya tengo mas instrucciones que investigar.  ;D

((( 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, ;D), 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.

((( SPAWN )))

Hola BlaKore_Alpha como estas, constestando a tus dudas.

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

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

Cita de: EON + = SOLUCIÓN