Para hacer sonar archivos Midi o wave a través del API, arrancar y parar. Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long Puedes incluir las siguientes líneas en cualquier parte del código, declarando la variable de respuesta. Para hacer que suene: iResult = mciExecute("Play " & App.Path & "archivo.mid") Para hacer que pare: iResult = mciExecute("Stop " & App.Path & "archivo.mid") Bueno pues así reproduciría un archivo midi o wav que esté en el mismo directorio que el del proyecto. Si además se combina con la función de presentar una ruta larga de archivo en corta, entonces queda asegurada su funcionalidad en cualquier directorio. Si no, no sonará si el archivo a reproducir se encuentra en un directorio largo. ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- Convertir nombre de ruta larga a corta Private Declare Function OSGetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, _ ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long '----------------------------------------------------------- ' Función: GetShortPathName ' ' Recupera el nombre de ruta corto de una ruta que contiene nombres de archivos o subdirectorios en formato largo '----------------------------------------------------------- ' Function GetShortPathName(ByVal strLongPath As String) As String Const cchBuffer = 300 Dim strShortPath As String Dim lResult As Long On Error GoTo 0 strShortPath = String(cchBuffer, Chr$(0)) lResult = OSGetShortPathName(strLongPath, strShortPath, cchBuffer) If lResult = 0 Then Error 53 ' Archivo no encontrado Else GetShortPathName = StripTerminator(strShortPath) End If End Function '----------------------------------------------------------- ' Función: StripTerminator ' ' Devuelve una cadena sin un terminador en cero. Es la forma típica ' en la que la API de Windows API devuelve una cadena. ' ' Entrada: [strString] - Cadena de la que eliminar el terminador ' ' Devuelve: El valor de la cadena que se pasa menos cualquier ' cadena terminada en cero. '----------------------------------------------------------- ' Function StripTerminator(ByVal strString As String) As String Dim intZeroPos As Integer intZeroPos = InStr(strString, Chr$(0)) If intZeroPos > 0 Then StripTerminator = Left$(strString, intZeroPos - 1) Else StripTerminator = strString End If End Function Página interesante: http://www.e-mision.net/crazyhouse/secciones/ultvisitados.asp