Hello, yes, how say infratec, no midi now, but play videos better
I have this code, but to be honest, I don't remember if it's mine or if I got it from the Internet. It's old, but it works well.
To play music from Windows, I use the API directly. Maybe this will help you.
Tested on Windows 7, 8, 10 and 11. In one zx spectrum too...
Code: Select all
;------------PLAY MP3 WINDOWS API
DeclareModule MP3
Enumeration 0
#MP3_Error
#MP3_Stopped
#MP3_Playing
#MP3_Paused
EndEnumeration
Declare GetStatus(ID)
Declare Load(ID,file.s)
Declare Play(ID)
Declare PlayBegin(ID)
Declare PlayFromTo(ID,Start,endPos)
Declare Pause(ID)
Declare Resume(ID)
Declare Stop(ID)
Declare Free(ID)
Declare SetVolume(ID,volume)
Declare GetVolume(ID)
Declare SetSpeed(ID,Tempo)
Declare GetSpeed(ID)
Declare GetLength(ID)
Declare GetPosition(ID)
Declare Seek(ID,pos=0)
Declare.s TimeToString(Time)
EndDeclareModule
Module MP3
Procedure GetStatus(ID)
Result=#MP3_Error
Protected.s a=Space(#MAX_PATH)
Protected rID=mciSendString_("status MP3_"+Str(ID)+" mode",@a,#MAX_PATH,0)
If rID=0
Select a
Case "stopped":Result=#MP3_Stopped
Case "playing":Result=#MP3_Playing
Case "paused":Result=#MP3_Paused
EndSelect
EndIf
ProcedureReturn Result
EndProcedure
Procedure Load(ID,file.s)
Protected rID=mciSendString_("OPEN "+Chr(34)+file+Chr(34)+" Type MPEGVIDEO ALIAS MP3_"+Str(ID),0,0,0)
If rID=0
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure Play(ID)
Protected rID=mciSendString_("play MP3_"+Str(ID),0,0,0)
ProcedureReturn rID
EndProcedure
Procedure PlayBegin(ID)
Protected rID=mciSendString_("play MP3_"+Str(ID)+" from "+Str(0),0,0,0)
ProcedureReturn rID
EndProcedure
Procedure PlayFromTo(ID,Start,endPos)
Protected rID=mciSendString_("play MP3_"+Str(ID)+" from "+Str(Start)+" to "+Str(endPos),0,0,0)
ProcedureReturn rID
EndProcedure
Procedure Pause(ID)
Protected rID=mciSendString_("pause MP3_"+Str(ID),0,0,0)
ProcedureReturn rID
EndProcedure
Procedure Resume(ID)
Protected rID=mciSendString_("resume MP3_"+Str(ID),0,0,0)
ProcedureReturn rID
EndProcedure
Procedure Stop(ID)
Protected rID=mciSendString_("stop MP3_"+Str(ID),0,0,0)
ProcedureReturn rID
EndProcedure
Procedure Free(ID)
Protected rID=mciSendString_("close MP3_"+Str(ID),0,0,0)
ProcedureReturn rID
EndProcedure
Procedure SetVolume(ID,volume)
;volumen 0 a 1000
Protected rID=mciSendString_("SetAudio MP3_"+Str(ID)+" volume to "+Str(volume),0,0,0)
ProcedureReturn rID
EndProcedure
Procedure GetVolume(ID)
;volumen 0 a 1000
Protected.s a=Space(#MAX_PATH)
Protected rID=mciSendString_("status MP3_"+Str(ID)+" volume",@a,#MAX_PATH,0)
ProcedureReturn Val(a)
EndProcedure
Procedure SetSpeed(ID,Tempo)
Protected rID=mciSendString_("set MP3_"+Str(ID)+" Speed "+Str(Tempo),0,0,0)
ProcedureReturn rID
EndProcedure
Procedure GetSpeed(ID)
Protected.s a=Space(#MAX_PATH)
Protected rID=mciSendString_("status MP3_"+Str(ID)+" Speed",@a,#MAX_PATH,0)
ProcedureReturn Val(a)
EndProcedure
Procedure GetLength(ID)
Protected.s a=Space(#MAX_PATH)
Protected rID=mciSendString_("status MP3_"+Str(ID)+" length",@a,#MAX_PATH,0)
ProcedureReturn Val(a)
EndProcedure
Procedure GetPosition(ID)
Protected.s a=Space(#MAX_PATH)
Protected rID=mciSendString_("status MP3_"+Str(ID)+" position",@a,#MAX_PATH,0)
ProcedureReturn Val(a)
EndProcedure
Procedure Seek(ID,pos=0)
Protected rID=mciSendString_("Seek MP3_"+Str(ID)+" to "+Str(pos), 0,0,0)
ProcedureReturn rID
EndProcedure
Procedure.s TimeToString(Time)
Protected seg,min
Time * 0.001
seg=Time%60:Time/60
min=Time%60:Time/60
ProcedureReturn RSet(Str(Time),2,"0")+":"+RSet(Str(min),2,"0")+":"+RSet(Str(seg),2,"0")
EndProcedure
EndModule
CompilerIf #PB_Compiler_IsMainFile
MP3::Load(0,"melodia4.mp3")
MP3::Play(0)
MP3::SetVolume(0,65535)
Delay(5000)
CompilerEndIf