Ten envío el "Happy Bday", tuve que desempolvar unos antiguos backups de un viejo sistema de ventas que le "cantaba" a los usuarios el dia de su cumple al loguear. Ahí están las frecuencias que necesitas para agregarlas a tu tabla "Tone.DBF".
Perdón por la forma de programar, pero en ese tiempo era "nuevo" jejeje. Lo probé en DOXBox y corre perfecto, saludos, ojala lo sumes a tu programa.
SET TALK OFF
SET ESCAPE OFF
SET DATE ITALIAN
*
DO WHILE .T.
LL = CANTA('WALTER')
IF LL
LOOP
ENDIF
EXIT
ENDDO
PROCEDURE CANTA
PARAMETERS MNAME, MDATE, MCOLOR
*
PRIVATE ALL
IF SET("TALK") == "ON"
SET TALK OFF
MTALK = "ON"
ELSE
MTALK = "OFF"
ENDIF
MESCAPE = SET("ESCAPE")
SET ESCAPE OFF
MCURSOR = SET("CURSOR")
SET CURSOR OFF
IF TYPE("mdate") == "D" && See if today is the birthday
IF RIGHT(DTOS(MDATE),4) # RIGHT(DTOS(DATE()),4)
DO REST_ENV
RETURN .F.
ENDIF
ENDIF
MCOLOR = IIF(TYPE("mcolor")="N" .AND. BETWEEN(MCOLOR, 1, 24), MCOLOR, 7)
IF TYPE("mname") == "C" .AND. ! EMPTY(MNAME)
MNAME = ALLTRIM(MNAME)+" "
IF "-" $ MNAME
FIRST_SYL = " "+SUBSTR(MNAME, 1, AT("-", MNAME) -1)
SECON_SYL = TRIM(SUBSTR(MNAME, AT("-", MNAME) +1))+"!"
ELSE
FIRST_SYL = " "+TRIM(MNAME)
SECON_SYL = "!"
ENDIF
ELSE
FIRST_SYL = " _____"
SECON_SYL = "____!"
ENDIF
FOR I = 1 TO 3
FOR F = 900 TO 1100 STEP 25
SET BELL TO F,1
?? CHR(7)
ENDFOR
ENDFOR
WAIT WIND 'Pulse cualquier tecla...'
DEFINE WINDOW _YER_BDAY_ ;
FROM (SROWS()/2)-4, (SCOLS()/2)-25 TO (SROWS()/2)+4, ;
(SCOLS()/2)+25 PANEL COLOR SCHEME (MCOLOR) SHADOWS
DUR = 4
=NOWAIT('Felicidades '+ALLT(MNAME)+' en el DIA de t£ Cumplea¤os!')
ACTIVATE WINDOW _YER_BDAY_
SET BELL TO 392, DUR && G4
? " Hap"+CHR(7)
?? "py"+CHR(7)
SET BELL TO 440, DUR*2 && A5
?? " Birth"+CHR(7)
SET BELL TO 392, DUR*2 && G4
?? "day"+CHR(7)
SET BELL TO 523, DUR*2 && C5
?? " to"+CHR(7)
SET BELL TO 494, DUR*4 && B5
?? " You..."+CHR(7)
SET BELL TO 392, DUR && G4
? SPACE(7)+"Hap"+CHR(7)
?? "py"+CHR(7)
SET BELL TO 440, DUR*2 && A5
?? " Birth"+CHR(7)
SET BELL TO 392, DUR*2 && G4
?? "day"+CHR(7)
SET BELL TO 587, DUR*2 && D5
?? " to"+CHR(7)
SET BELL TO 523, DUR*4 && C5
?? " You..."+CHR(7)
SET BELL TO 392, DUR && G4
? SPACE(12)+"Hap"+CHR(7)
?? "py"+CHR(7)
SET BELL TO 784, DUR*2 && G5
?? " Birth"+CHR(7)
SET BELL TO 659, DUR*2 && E5
?? "day,"+CHR(7)
SET BELL TO 523, DUR*2 && C5
? SPACE(17)+"Dear"+CHR(7)
SET BELL TO 494, DUR*2 && B5
?? FIRST_SYL+CHR(7)
SET BELL TO 440, DUR*4 && A5
?? SECON_SYL+CHR(7)
SET BELL TO 699, DUR && F5
? SPACE(22)+"Hap"+CHR(7)
?? "py"+CHR(7)
SET BELL TO 659, DUR*2 && E5
?? " Birth"+CHR(7)
SET BELL TO 523, DUR*2 && C5
?? "day"+CHR(7)
SET BELL TO 587, DUR*2 && D5
?? " to"+CHR(7)
SET BELL TO 523, DUR*4 && C5
?? " You!"+CHR(7)
? ""
=NOWAIT()
CLEAR TYPEAHEAD
SET CURSOR OFF
WAIT WINDOW '¨Quieres que te cante de nuevo '+MNAME+'? S/N' TO RESP
_RET = .F.
IF UPPER(RESP) # 'N'
_RET = .T.
ENDIF
SET CURSOR ON
RELEASE WINDOW _YER_BDAY_
SET BELL TO
RETURN _RET
FUNCTION NOWAIT
PARAMETERS STRING
PRIVATE ALL
IF TYPE("string") = "L"
IF WEXIST("_no_wait_")
RELEASE WINDOW _NO_WAIT_
ENDIF
RETURN ""
ENDIF
WAS_OUTPUT = WOUTPUT()
STRING = LEFT(STRING, SCOLS()-8)
DEFINE WINDOW _NO_WAIT_ ;
FROM 1, SCOLS()-7-LEN(STRING) TO 3, SCOLS()-4;
COLOR SCHEME 5 SHADOWS
ACTIVATE WINDOW _NO_WAIT_
?? " "+STRING
IF EMPTY(WAS_OUTPUT)
ACTIVATE SCREEN
ELSE
ACTIVATE WINDOW &WAS_OUTPUT
ENDIF
RETURN ""
PROCEDURE REST_ENV
IF MESCAPE == "ON"
SET ESCAPE ON
ENDIF
IF MTALK == "ON"
SET TALK ON
ENDIF
IF MCURSOR == "ON"
SET CURSOR ON
ENDIF