Page 1 sur 1

[RESOLU] problème PROPSYS.dll

Publié : mer. 26/mars/2014 9:29
par microdevweb
Bonjour à tous,

Je développe un programme qui décode un fichier midi et doit jouer des notes (midi ou autres). Je me suis inspirer de certains code trouvé sur le forum pour jouer les note midi (code de 2004) si je lance ces code avec PB 3.91 cela fonctionne, mais avec ma version PB 5.22
j'ai le message suivant c:\users\Microdev\AppData\Local\Temp\PROPSYS.dll n'est pas conçu pour s'exécuter sous WINDOWS ou il contient une erreur.Installe à nouveau le programme à l'aide du support d'installation d'origine, ou bien contacter votre administrateur ...ect

Voici le code qui bloque

Code : Tout sélectionner

   If m_MIDIOpen = 0
        If midiOutOpen_(@m_hMidiOut,MIDIMAPPER,0,0,0) <> 0
            MessageRequester("Problème", "Impossible d'ouvrir le périphérique MIDI",0)
        Else
            SendMIDIMessage($C0,0,0,0)
            m_MIDIOpen = 1
        EndIf
    EndIf
EndProcedure
Merci d'avance pour votre aide

Re: PROPSYS.dll

Publié : mer. 26/mars/2014 11:49
par Backup
un lien vers le code d'origine ?

voici un code qui fonctionne , tu choisis un fichier midi , il le lit ..

il y a tout ce qu'il faut pour lire, mettre en pause, relancer , stopper ....


Code : Tout sélectionner

; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=2786&highlight=
; Author: GPI
; Date: 09. November 2003


;info:Play Midis direct (with mci) 
Procedure GetMidiLength(Nb) 
	a$=Space(#MAX_PATH) 
	i=mciSendString_("status mid"+Str(Nb)+" length",@a$,#MAX_PATH,0) 
	ProcedureReturn Val(a$) 
EndProcedure 
Procedure SetMidiTimeFormatToMS(Nb) 
	ProcedureReturn mciSendString_("set mid"+Str(Nb)+" time format milliseconds",0,0,0) 
EndProcedure 
Procedure SetMidiTimeFormatToTick(Nb) 
	ProcedureReturn mciSendString_("set mid"+Str(Nb)+" time format song pointer",0,0,0) 
EndProcedure 
Procedure LoadMidi(Nb,file.s) 
	;i=mciSendString_("open Sequencer!"+Chr(34)+file+Chr(34)+" alias mid"+Str(Nb),0,0,0) 
	i=mciSendString_("OPEN "+Chr(34)+file+Chr(34)+" Type SEQUENCER ALIAS mid"+Str(Nb),0,0,0) 
	If i=0 
		ProcedureReturn #True 
		Else 
		ProcedureReturn #False 
	EndIf 
EndProcedure 
Procedure PlayMidi(Nb) 
	i=mciSendString_("play mid"+Str(Nb)+" from "+Str(0),0,0,0) 
	ProcedureReturn i 
EndProcedure 
Procedure PlayMidiFrom(Nb,Start,endPos) 
	i=mciSendString_("play mid"+Str(Nb)+" from "+Str(Start)+" to "+Str(endPos),0,0,0) 
	ProcedureReturn i 
EndProcedure 
Procedure PauseMidi(Nb) 
	i=mciSendString_("pause mid"+Str(Nb),0,0,0) 
	ProcedureReturn i 
EndProcedure 
Procedure ResumeMidi(Nb) 
	i=mciSendString_("resume mid"+Str(Nb),0,0,0) 
	ProcedureReturn i 
EndProcedure 
Procedure StopMidi(Nb) 
	i=mciSendString_("stop mid"+Str(Nb),0,0,0) 
	ProcedureReturn i 
EndProcedure 
Procedure FreeMidi(Nb) 
	i=mciSendString_("close mid"+Str(Nb),0,0,0) 
	ProcedureReturn i 
EndProcedure 
Procedure SetMidiTempo(Nb,Tempo) 
	i=mciSendString_("set mid"+Str(Nb)+" tempo "+Str(Tempo),0,0,0) 
	ProcedureReturn i 
EndProcedure 
Procedure GetMidiPosition(Nb) 
	a$=Space(#MAX_PATH) 
	i=mciSendString_("status mid"+Str(Nb)+" position",@a$,#MAX_PATH,0) 
	ProcedureReturn Val(a$) 
EndProcedure 
Procedure GetMidiTempo(Nb) 
	a$=Space(#MAX_PATH) 
	i=mciSendString_("status mid"+Str(Nb)+" Tempo",@a$,#MAX_PATH,0) 
	ProcedureReturn Val(a$) 
EndProcedure 
Procedure IsMidiPlaying(Nb) 
	a$=Space(#MAX_PATH) 
	i=mciSendString_("status mid"+Str(Nb)+" mode",@a$,#MAX_PATH,0) 
	If a$="playing" 
		ProcedureReturn #True 
		Else 
		ProcedureReturn #False 
	EndIf 
EndProcedure 
Procedure IsMidiPaused(Nb) 
	a$=Space(#MAX_PATH) 
	i=mciSendString_("status mid"+Str(Nb)+" mode",@a$,#MAX_PATH,0) 
	If a$="paused" 
		ProcedureReturn #True 
		Else 
		ProcedureReturn #False 
	EndIf 
EndProcedure 
Procedure IsMidiReady(Nb) 
	a$=Space(#MAX_PATH) 
	i=mciSendString_("status mid"+Str(Nb)+" mode",@a$,#MAX_PATH,0) 
	Debug a$ 
	If a$="not ready" 
		ProcedureReturn #False 
		Else 
		ProcedureReturn #True 
	EndIf 
EndProcedure 


;- Example
OpenWindow(1,0,200,10,10,"Midi-Test",#PB_Window_SystemMenu) 
file$=OpenfileRequester( "Midi player","c:\","*.mid;*.MID",0)
LoadMidi(1,file$) 
Debug GetMidiLength(1) 
SetMidiTimeFormatToMS(1) 
Debug GetMidiLength(1) 

PlayMidi(1) 

old=-1 
Repeat 
	If IsMidiPlaying(1) 
		event=WindowEvent() 
		x=GetMidiPosition(1)/100 
		If old<>x 
			Debug "+"+Str(x) 
			old=x 
		EndIf 
		Else 
		event=WaitWindowEvent() 
	EndIf 
Until event=#PB_Event_CloseWindow 
StopMidi(1) 
FreeMidi(1)



; ExecutableFormat=Windows
; EOF
; Epb


Re: PROPSYS.dll

Publié : mer. 26/mars/2014 12:17
par microdevweb
Merci Dobro,
Voici le lien su code
http://www.purebasic.fr/french/viewtopic.php?p=3444

Merci pour l'exemple, mais je voulais jouer des note bien spécifique en vériter. Mais je vais regarder comment exploiter ce code

Re: PROPSYS.dll

Publié : mer. 26/mars/2014 15:03
par microdevweb
Problème résolu si le code est appelé après l'ouverture d'une fenêtre

Merci