Page 1 sur 1

Editer un fichier midi (boucle batterie)

Publié : lun. 23/mars/2009 11:45
par Stefou
Salut à tous ! 8)

J'aimerais avoir des boucles de batterie en midi pour jouer de la basse ou de la guitare dessus et puis faire des compos...
J'ai cherché sur le net mais je n'ai rien trouvé ou très peu...

Alors voilà, le but du projet est de pouvoir découper des morceaux midi qui eux sont facile à trouver.

1 _ éditer le fichier midi
2 _ extraire le canal 10 (canal batterie)
3 _ découper la piste par mesure
4_ faire le trie des mêmes mesures et ne garder que les différentes.
....
Bref une fois l'édition faite du fichier midi, le reste est un jeux d'enfant 8)

Merci d'avance

(J'ai comme une intuition qui me dit que Dobro va me répondre...)

Publié : lun. 23/mars/2009 12:05
par Backup
bah a une epoque j'avais fait ça :

Code : Tout sélectionner

;Code par Dobro
; Purebasic 4.00

Declare MIDIOpen()
Declare SendMIDIMessage(nStatus.l,nCanal.l,nData1.l,nData2.l)
Declare PlayNoteMIDI(Canal.b,Note.b,VelociteDown.b,VelociteUp.b)
Declare ChargeInstrument(Canal.b,Instrument.b)

Global m_hMidiOut,m_MIDIOpen.b

Enumeration 35
    #Kick_Drum_2
    #Kick_Drum_1
    #Side_Stick
    #Snare_Drum_1
    #Hand_clap
    #Snare_Drum_2
    #Low_Tom_2
    #Closed_Hi_Hat
    #Low_Tom_1
    #Pedal_Hi_Hat
    #Mid_Tom_2
    #Open_Hi_Hat
    #Mid_Tom_1
    #High_Tom_2
    #Crash_Cymbal_1
    #High_Tom_1
    #Ride_Cymbal_1
    #Chinese_Cymbal
    #Ride_Bell
    #Tambourine
    #Splash_Cymbal
    #Cow_Bell
    #Crash_Cymbal_2
    #Vibra_Slap
    #Ride_Cymbal_2
    #High_Bongo
    #Low_Bongo
    #Mute_High_Conga
    #Open_High_Conga
    #Low_Conga
    #High_Timbale
    #Low_Timbale
    #High_Agogo
    #Low_Agogo
    #Cabasa
    #Maracas
    #Short_Hi_Whistle
    #Low_Hi_Whistle
    #Short_Guiro
    #Long_Guiro
    #Claves
    #High_Wood_Block
    #Low_Wood_Block
    #Mute_Cuica
    #Open_Cuica
    #Mute_Triangle
    #Open_Triangle
EndEnumeration

OpenConsole()

MIDIOpen()
ChargeInstrument(9,0)
bpm=60 ; bpm1 = beat par minute !!

bpm=(1000*60)/bpm

  
Repeat 
    
    For Cases=1 To 32
        ; ************************************ 
        Note$=StringField("1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Kick_Drum_1,127,127)    
        EndIf  
        ; ************************************ 
        Note$=StringField("0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Snare_Drum_1,127,127)  
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Hand_clap,127,127)   
        EndIf  
        ; ************************************
        Note$=StringField("1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Closed_Hi_Hat,127,127)   
        EndIf  
        ; ************************************ 
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Low_Tom_1,127,127)  
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Pedal_Hi_Hat,127,127) 
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Open_Hi_Hat,127,127)  
        EndIf  
        ; ************************************ 
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Mid_Tom_1,127,127)  
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Crash_Cymbal_1,127,127)   
        EndIf  
        ; ************************************ 
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #High_Tom_1,127,127)   
        EndIf  
        ; ************************************ 
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Ride_Cymbal_1,127,127)   
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Chinese_Cymbal,127,127)   
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Ride_Bell,127,127)   
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Tambourine,127,127)   
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Splash_Cymbal,127,127)   
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Cow_Bell,127,127)   
        EndIf  
        ; ************************************ 
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Vibra_Slap,127,127)   
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #High_Bongo,127,127)   
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Low_Bongo,127,127)   
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #High_Timbale,127,127)   
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Low_Timbale,127,127)   
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #High_Agogo,127,127)   
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Low_Agogo,127,127)   
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Cabasa,127,127)   
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Maracas,127,127)   
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Short_Hi_Whistle,127,127)   
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Low_Hi_Whistle,127,127)   
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Short_Guiro,127,127)   
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Long_Guiro,127,127)   
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Mute_Cuica,127,127)   
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Mute_Triangle,127,127)   
        EndIf  
        ; ************************************
        Note$=StringField("0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", Cases, ",")   
        If Note$="1"
            PlayNoteMIDI(9, #Open_Triangle,127,127)   
        EndIf  
        ; ************************************
        
        Delay( bpm/32)
    Next Cases  
ForEver




;  ********************** Procedures ****************************************
Procedure SendMIDIMessage(nStatus.l,nCanal.l,nData1.l,nData2.l)
    dwFlags.l = nStatus | nCanal | (nData1 << 8) | (nData2 << 16)
    temp.l = midiOutShortMsg_(m_hMidiOut,dwFlags);
    If temp<>0
        MessageRequester("Problème", "Erreur dans l'envoi du message MIDI",0)
    EndIf
EndProcedure

Procedure MIDIOpen()
    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

Procedure PlayNoteMIDI(Canal.b,Note.b,VelociteDown.b,VelociteUp.b)
    If m_MIDIOpen
        SendMIDIMessage($80 | Canal,0,Note,VelociteDown)
        SendMIDIMessage($90 | Canal,0,Note,VelociteUp)
    EndIf         
EndProcedure
Procedure ChargeInstrument(Canal.b,Instrument.b)
    If m_MIDIOpen
        SendMIDIMessage($C0 | Canal,0,Instrument,0)
    EndIf         
EndProcedure


Publié : lun. 23/mars/2009 13:37
par Stefou
Hihihi je savais que Dobro allait me répondre :D

Mais ce n'est pas cela que je cherche :?

Je cherche vraiment à éditer un fichier midi, a retrouver tous les événements inscrit à l'intérieur du fichier.

Je continue mes recherche....

Publié : lun. 23/mars/2009 13:52
par Backup
Stefou a écrit :
Je cherche vraiment à éditer un fichier midi, a retrouver tous les événements inscrit à l'intérieur du fichier..
ici :
http://www.purebasic.fr/french/viewtopi ... rseur+midi

Publié : lun. 23/mars/2009 14:06
par Stefou
Merci Dobro, j'étais justement dessus...enfin le post anglais et faut bien le dire en français c'est plus clair.....

Reste à enregistrer le fichier mais cela ne devrait pas être trop compliqué.

a+ et encore merci de l'aide pour la recherche.