Midi player wpf vb 2008

Soyez le premier à donner votre avis sur cette source.

Vue 10 092 fois - Téléchargée 777 fois

Description

Un lecteur de Midifile en Visual Basic 2008 et WPF.
La structure de donnée est revue.
NET 3.5 obligatoire.

L'exemple est un lecteur de Midifile, mais la classe MidiData permet de manipuler les données Midi comme bon vous semble.

La conso de ressource processeur reste trés faible (entre 1 et 2 %).

Ne gère pas (encore ...) les changement de signature dynamique.

Par défault, le programme boucle sur les 4 premières mesures.

Si vous trouvez des bugs, n'hésitez pas à reporter.

Quelques contrôles pour gèrer les mesures et le tempo ... en cadeau !

Merci

Afyn - Navedac - Le savoir faire des cancres

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
608
Date d'inscription
samedi 3 août 2002
Statut
Membre
Dernière intervention
22 décembre 2016

Pour plus de clarté :

Les MidiEvents Notes OFF n'existent pas dans la structure objet.
Ils vont être créés lors de l'envoie d'un Msg Note_On dans une Track temporaire et positionné sur le Tick qui correspont au Tick de la Note_On + la durée de la Note_On.

C'est un mécanisme à la vollée !

Voilà

Afyn - Navedac
Messages postés
3
Date d'inscription
vendredi 7 mars 2003
Statut
Membre
Dernière intervention
10 novembre 2008

merci pour ton envoi :).

Je vois que tu gères maintenant un piste NoteOffTrack :), qui te sert à stopper les NOTE ON en cours.
Si l'on commente les lignes suivantes, les sons ne s'arrêtent pas, je pense que tu peux enlever le MidiOutReset qui se trouve un peu avant dans ton code. le MidiOutReset n'a pas vraiment l'air de fonctionner sous vista. sinon bien vu ;).

' Reset le MIDI
For Each Tck As Tick In NoteOffTrack.Ticks
For Each Evt As MidiEvent In Tck.MidiEvents
Call WinMM.midiOutShortMsg(hMidiOut, Evt.Msg)
Next
Next
NoteOffTrack.Clear()

Pour tes class Track and co, dès que j'ai un peu de temps, je regarde de plus près, mais je pense pas avoir grand chose à dire de plus que les autres :). Je m'en était déja bien inspiré suite à tes précédentes publications :).
Messages postés
608
Date d'inscription
samedi 3 août 2002
Statut
Membre
Dernière intervention
22 décembre 2016

Ricomat ->
Je t'ai envoyé la dernière version.
Elle est un peu plus complexe au niveau structure de données Midi.

Pour les All Notes OFF, je ne me suis pas penché dessus.

Peut tu me dire ce que tu penses de la structure des classes
Track(s)-> Tick(s)-> MidiEvent(s) ?

Merci d'avance pour ta coop

Afyn - Navedac
Messages postés
3
Date d'inscription
vendredi 7 mars 2003
Statut
Membre
Dernière intervention
10 novembre 2008

Merci^^ mon adresse est eric.matras@free.fr
mon site http://www.rickforce.fr

J'ai ce matin remplacé dans mon appli les midiOutReset par :

Public Function StopMidiOut(Optional ByVal Canal As Integer = Nothing) As Integer
If Canal = Nothing Then
For i As Integer = 0 To 15
StopMidiMess(i)
Next
Else
StopMidiMess(Canal)
End If
End Function

Private Function StopMidiMess(ByVal Canal As Integer) As Integer
WMM.midiOutShortMsg(hMidiOut, ControlChange.All_Note_Canal_off Or Canal) '&7BB0
WMM.midiOutShortMsg(hMidiOut, ControlChange.Control_off Or Canal) '&H79B0
End Function

et ca marche sous vista pour ma part :).
Messages postés
608
Date d'inscription
samedi 3 août 2002
Statut
Membre
Dernière intervention
22 décembre 2016

Ricomat j'ai une version un peu plus avancée si tu l'as veux ?

Pm moi une adresse maile je te l'envoie

Afyn - Navedac
Afficher les 21 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.