This program is a simple media player, which will play a wide range of audio and video file formats such as WAV, MP3, WMA, MID, AVI, MPG and WMV (the exact list will depend on the codecs installed on your PC). It displays a small window containing buttons for Open, Stop, Play and Pause operations. Whilst playing the elapsed time is displayed.
Download PLAYER.BBC | Run PLAYER.EXE |
---|
REM Simple media player in BBC BASIC for Windows, RTR 02-Nov-2004, 01-May-2007
REM!Exefile C:\www\bbcwin\examples\player.exe
INSTALL @lib$+"WINLIB"
INSTALL @lib$+"WINLIB3"
MCI_OPEN = &803
MCI_CLOSE = &804
MCI_PLAY = &806
MCI_SEEK = &807
MCI_STOP = &808
MCI_SET = &80D
MCI_STATUS = &814
MCI_ALL_DEVICE_ID = -1
MCI_WAIT = 2
MCI_FROM = 4
MCI_TO = 8
MCI_STATUS_POSITION = 2
MCI_STATUS_ITEM = &100
MCI_OPEN_ELEMENT = &200
MCI_SET_TIME_FORMAT = &400
VDU 23,22,154;72;19,36,16,0
SYS "SetWindowPos",@hwnd%,-1,0,0,0,0,3
COLOUR 7,20,255,50
DeviceID% = 0
nbuttons% = 6
DIM bu%(nbuttons%-1), id%(nbuttons%-1), bu$(nbuttons%-1)
bu%() = 0,0,7,-1,-1,-1
id%() = 0,0,900,901,902,-903
bu$() = "","","Open","Stop","Play","Pause"
toolbar% = FN_createtoolbar(nbuttons%, bu%(), id%())
PROC_addtooltips(toolbar%, nbuttons%, bu$(), id%())
id%() = 901,902,903,904,905
IF FN_custombuttons(toolbar%, @dir$+"CDPLAYER.BMP", 5, id%()) = 0 THEN
SYS "MessageBox", @hwnd%, "Cannot load CDPLAYER.BMP", 0, 48
QUIT
ENDIF
DIM Ofn{lStructSize%, hwndOwner%, hInstance%, lpstrFilter%, \
\ lpstrCustomFilter%, nMaxCustFilter%, nFilterIndex%, \
\ lpstrFile%, nMaxFile%, lpstrFileTitle%, \
\ nMaxFileTitle%, lpstrInitialDir%, lpstrTitle%, \
\ flags%, nFileOffset{l&,h&}, nFileExtension{l&,h&}, \
\ lpstrDefExt%, lCustData%, lpfnHook%, lpTemplateName%}
DIM FileName% 255
filter$ = "Media files"+CHR$0+"*.MP3;*.WMA;*.MID;*.MIDI;*.RMI;*.WAV;*.AVI;*.MPG;*.MP2;*.WMV;*.MOV;*.MPEG"+CHR$0+"All files"+CHR$0+"*.*"+CHR$0+CHR$0
Ofn.lStructSize% = DIM(Ofn{})
Ofn.hwndOwner% = @hwnd%
Ofn.lpstrFilter% = !^filter$
Ofn.lpstrFile% = FileName%
Ofn.nMaxFile% = 256
Ofn.flags% = 6 : REM OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY
DIM mciOpenParms{dwCallback%, wDeviceID%, lpstrDeviceType%, lpstrElementName%, lpstrAlias%}
DIM mciPlayParms{dwCallback%, dwFrom%, dwTo%}
DIM mciSetParms{dwCallback%, dwTimeFormat%, dwAudio%}
DIM mciStatusParms{dwCallback%, dwReturn%, dwItem%, dwTrack%}
DIM mciSeekParms{dwCallback%, dwTo%}
ON CLOSE PROCstop:PROCclose:PROC_removetoolbar:QUIT
ON ERROR SYS "MessageBox", @hwnd%, REPORT$, 0, 48
ON SYS Click% = @wparam%:RETURN
Click% = -1
Pause% = FALSE
REPEAT
temp% = INKEY(1)
IF temp% = -1 SWAP Click%,temp%
CASE temp% OF
WHEN 900: PROCstop:Pause% = FALSE:PROCclose:PROCopen:PROCplay(0)
WHEN 901: PROCstop:Pause% = FALSE:PROCseek(0)
WHEN 902: PROCstop:Pause% = FALSE:PROCplay(0)
WHEN 903: PROCstop:Pause% = NOT Pause%:IF NOT Pause% PROCplay(mciStatusParms.dwReturn%)
ENDCASE
IF DeviceID% THEN
mciStatusParms.dwItem% = MCI_STATUS_POSITION
SYS "mciSendCommand", DeviceID%, MCI_STATUS, MCI_STATUS_ITEM, mciStatusParms{}
PROCreport(mciStatusParms.dwReturn%)
ENDIF
SYS "SendMessage", toolbar%, 1041, 903, 4 OR (Pause% AND 1)
UNTIL FALSE
DEF PROCreport(N%):LOCAL @%
@% = &1020205
VDU 30
PRINT 'LEFT$(RIGHT$(" "+STR$(N%DIV60000),5),2)":"RIGHT$("0"+STR$((N%MOD60000)/1000),5);
ENDPROC
DEF PROCopen:LOCAL F%, R%
SYS "GetOpenFileName", Ofn{} TO R%
IF R% = 0 ENDPROC
mciOpenParms.wDeviceID% = 0
mciOpenParms.lpstrDeviceType% = MCI_ALL_DEVICE_ID
mciOpenParms.lpstrElementName% = FileName%
SYS "mciSendCommand", 0, MCI_OPEN, MCI_OPEN_ELEMENT, mciOpenParms{} TO R%
IF R% ERROR 100, "No codec for file format"
DeviceID% = mciOpenParms.wDeviceID%
SYS "mciSendCommand", DeviceID%, MCI_SET, MCI_SET_TIME_FORMAT, mciSetParms{}
SYS "GetFullPathName", FileName%, 256, FileName%, ^F%
SYS "SetWindowText", @hwnd%, F%
ENDPROC
DEF PROCplay(mciPlayParms.dwFrom%)
IF DeviceID% = 0 ENDPROC
SYS "mciSendCommand", DeviceID%, MCI_PLAY, MCI_FROM, mciPlayParms{}
ENDPROC
DEF PROCseek(mciSeekParms.dwTo%)
IF DeviceID% = 0 ENDPROC
SYS "mciSendCommand", DeviceID%, MCI_SEEK, MCI_TO, mciSeekParms{}
ENDPROC
DEF PROCstop
IF DeviceID% = 0 ENDPROC
SYS "mciSendCommand", DeviceID%, MCI_STOP, MCI_WAIT, 0
ENDPROC
DEF PROCclose
IF DeviceID% = 0 ENDPROC
SYS "mciSendCommand", DeviceID%, MCI_CLOSE, MCI_WAIT, 0
DeviceID% = 0
ENDPROC