XBase - AYUDA CON PROGRAMA

 
Vista:

AYUDA CON PROGRAMA

Publicado por ANTONIO (37 intervenciones) el 04/03/2008 10:52:55
Hola a todos:
Este programa saca una lista de ficherso wav y los reproduce segun los seleccionemos:
a ver si alguno me puede ayudar a que solo reproduzca el que se le pase y no saque ninguna lista.
o sea si tengo un fichero llamaso sonido.wav solo reprodizca este sin nada mas.
Gracias anticipadas.

#include "inkey.ch"
#include "directry.ch"
#include "dll.ch"
***********************
// flags for PlaySound
#define SND_SYNC 0
#define SND_ASYNC 1
#define SND_FILENAME 131072
#define SND_PURGE 64
// flags for MessageBeep
#define MB_ICONHAND 16
#define MB_OK 0
#define MB_DEFAULT -1
***********************
PROCEDURE MAIN()
LOCAL cLookupDir
LOCAL aPlayField
LOCAL i, lRun, nSelect
LOCAL aSize
CLS
cLookupDir := GetEnv( "WINDIR") + "MEDIA"
@ 1, 2 SAY "PLAYSND - play all the system sounds. Press Esc to quit."
@ 3, 2 SAY "Available sounds from " + cLookupDir + ":"
/* get all files from the default sound directory */
aPlayField := Directory( cLookupDir + "*.wav")
IF len(aPlayField) = 0
MessageBeep( MB_ICONHAND)
Alert( "Error: No wave files found in "+ cLookupDir )
QUIT
ENDIF
AEval( aPlayField, {|x,i| x := ConvToOemCp(x[F_NAME])},,,.T.)
aPlayField := ASort( aPlayField )
lRun := .T.
nSelect := 1
IF waveOutGetNumDevs() = 0
MessageBeep( MB_ICONHAND)
Alert( "Error: No waveform output devices found!" )
ENDIF
SetMouse(.T.)
SetColor("N/G,N/W")
aSize := SetAppWindow():setMode()
DO WHILE lRun
nSelect := AChoice( 5,2,aSize[1]-4,40, aPlayField,,,nSelect, 8)
IF nSelect > 0
StopSound()
PlayWaveFile( cLookupDir + "" + ConvToAnsiCp(aPlayField[nSelect]))
ELSE
IF LASTKEY()==K_ESC
lRun := .F.
ENDIF
ENDIF
ENDDO
SetColor("W/N/,W/N")
CLS
RETURN
***********************
PROCEDURE StopSound()
#ifdef __WIN32__
/* stops waveform sound */
DllCall("WINMM.DLL",DLL_STDCALL,"PlaySoundA",0,0,0)
/* stops non-waveform sound */
DllCall("WINMM.DLL",DLL_STDCALL,"PlaySoundA",0,0,SND_PURGE)
#endif
RETURN
**************************
PROCEDURE PlayWaveFile(cFilename)
DllCall("WINMM.DLL",DLL_STDCALL,"PlaySoundA",cFileName,0, SND_FILENAME + SND_ASYNC)
RETURN
************
DLLFUNCTION MessageBeep(nMsgType) USING STDCALL FROM "USER32.DLL"
DLLFUNCTION waveOutGetNumDevs() USING STDCALL FROM "WINMM.DLL"
RETURN iif( rc == 0,1,0)
********************
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
Imágen de perfil de Alejandro

Reproducir un solo archivo WAV en lugar de una lista

Publicado por Alejandro (13 intervenciones) el 17/07/2023 16:34:36
Para modificar el programa y lograr que solo reproduzca un archivo WAV específico en lugar de mostrar una lista, sigue estos pasos:

1. Elimina el código que muestra la lista de archivos y la selección de los mismos. Puedes eliminar las siguientes líneas de código:

1
2
3
4
5
6
7
8
9
@ 3, 2 SAY "Available sounds from " + cLookupDir + ":"
aPlayField := Directory( cLookupDir + "*.wav")
IF len(aPlayField) = 0
MessageBeep( MB_ICONHAND)
Alert( "Error: No wave files found in "+ cLookupDir )
QUIT
ENDIF
AEval( aPlayField, {|x,i| x := ConvToOemCp(x[F_NAME])},,,.T.)
aPlayField := ASort( aPlayField )

2. Elimina el bucle DO WHILE y la lógica de selección de archivos. Puedes eliminar las siguientes líneas de código:

1
2
3
4
5
6
7
8
9
10
11
DO WHILE lRun
nSelect := AChoice( 5,2,aSize[1]-4,40, aPlayField,,,nSelect, 8)
IF nSelect > 0
StopSound()
PlayWaveFile( cLookupDir + "" + ConvToAnsiCp(aPlayField[nSelect]))
ELSE
IF LASTKEY()==K_ESC
lRun := .F.
ENDIF
ENDIF
ENDDO

3. Modifica el procedimiento MAIN para que reciba el nombre del archivo WAV que deseas reproducir. Puedes hacerlo de la siguiente manera:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PROCEDURE MAIN(cFilename)
   CLS
   IF waveOutGetNumDevs() = 0
      MessageBeep( MB_ICONHAND )
      Alert( "Error: No waveform output devices found!" )
      QUIT
   ENDIF
   SetMouse( .T. )
   SetColor( "N/G,N/W" )
   aSize := SetAppWindow():setMode()
   StopSound()
   PlayWaveFile( cLookupDir + "" + ConvToAnsiCp( cFilename ) )
   WaitForSound()
   SetMouse( .F. )
   SetColor( "W/N/,W/N" )
   CLS
RETURN

4. En el procedimiento PlayWaveFile(cFilename), modifica la llamada a DllCall para reproducir el archivo WAV. Reemplaza la línea existente por la siguiente:

1
DllCall( "WINMM.DLL", DLL_STDCALL, "PlaySoundA", cFilename, 0, SND_FILENAME + SND_SYNC )

Ahora puedes llamar al procedimiento MAIN con el nombre del archivo WAV que deseas reproducir, y el programa reproducirá ese archivo sin mostrar una lista ni permitir la selección de otros archivos.

Por ejemplo, para reproducir el archivo "sonido.wav", puedes llamar al procedimiento MAIN de la siguiente manera:

1
MAIN( "sonido.wav" )

Recuerda que debes asegurarte de que el archivo WAV esté en la ubicación correcta y especificar el nombre del archivo con su extensión correspondiente al llamar al procedimiento MAIN.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar