FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
KGF et fonctions Midi Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
KGF et fonctions Midi Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
KGF et fonctions Midi Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
KGF et fonctions Midi Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
KGF et fonctions Midi Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
KGF et fonctions Midi Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
KGF et fonctions Midi Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
KGF et fonctions Midi Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
KGF et fonctions Midi Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
KGF et fonctions Midi Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
KGF et fonctions Midi Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
KGF et fonctions Midi Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
KGF et fonctions Midi Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
KGF et fonctions Midi Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
KGF et fonctions Midi Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
-28%
Le deal à ne pas rater :
-28% Machine à café avec broyeur à grain MELITTA Purista
229.99 € 318.99 €
Voir le deal

 

 KGF et fonctions Midi

Aller en bas 
3 participants
AuteurMessage
bignono

bignono


Nombre de messages : 1127
Age : 67
Localisation : Val de Marne
Date d'inscription : 13/11/2011

KGF et fonctions Midi Empty
MessageSujet: KGF et fonctions Midi   KGF et fonctions Midi EmptyMer 31 Jan 2018 - 9:58

Bonjour à tous,

A Klaus,
Voici un programme qui utilise quelques fonctions midi de KGF. Avec ce programme, on peut jouer une note et rester appuyé sur la touche du clavier, et ainsi, le son est continu jusqu'à ce qu'on relâche la touche.
Code:
' ==============================================================================
' ============= SECTION label et dim du programme ==============================
' ==============================================================================
label appui,relache,touche,selection_instrument,octave,quit

dim i,j,k,tc,note,cl,nci,oct,inst$,res%,t(32)
color 0,15,30,45:caption 0,"Piano Synth Virtuel"

' ********** OBJETS LIBRES DE 1 A 41 **********

' ==============================================================================
' ============= SECTION CHANGEMENT OCTAVE ======================================
' ==============================================================================
alpha 42:left 42,3:top 42,-1:font_name 42,"Lucida Console":font_size 42,10
font_underline 42:font_color 42,220,220,220:caption 42," OCTAVES "
alpha 43:left 43,10:top 43,12:color 43,120,120,120:font_name 43,"Lucida Console"
font_size 43,8:font_color 43,0,0,0:caption 43," -2 "
alpha 44:left 44,10:top 44,24:color 44,120,120,120:font_name 44,"Lucida Console"
font_size 44,8:font_color 44,0,0,0:caption 44," -1 "
alpha 45:left 45,15:top 45,36:color 45,000,200,200:font_name 45,"Lucida Console"
font_size 45,8:font_color 45,0,0,0:caption 45,"Normal"
alpha 46:left 46,39:top 46,12:color 46,120,120,120:font_name 46,"Lucida Console"
font_size 46,8:font_color 46,0,0,0:caption 46," +1 "
alpha 47:left 47,39:top 47,24:color 47,120,120,120:font_name 47,"Lucida Console"
font_size 47,8:font_color 47,0,0,0:caption 47," +2 "
for i=43 to 47:on_click i,octave:next i:oct=0

' ==============================================================================
' ============= SECTION CONSTRUCION DU CLAVIER =================================
' ==============================================================================
j=80:for k=0 to 2:for i=48 to 59
        if i<>49 and i<>51 and i<>54 and i<>56 and i<>58
           picture i+k*12:width i+k*12,14:height i+k*12,50
           left i+k*12,j:on_click i+k*12,touche:j=j+15
        end_if
     next i:next k
j=75:for k=0 to 2:for i=48 to 59
        if i=49 or i=51 or i=54 or i=56 or i=58
           if i=49 or i=54 then j=j+15
           picture i+k*12:width i+k*12,10:height i+k*12,30
           left i+k*12,j:color i+k*12,0,0,0:on_click i+k*12,touche:j=j+15
        end_if
     next i:next k
for i=80 to 83:delete i:next i

' ********** OBJETS LIBRES DE 80 A 99 **********

' ==============================================================================
' ============= SECTION AFFICHAGE DES INSTRUMENTS ==============================
' ==============================================================================
k=15:j=120
while i<>127
   read i:read inst$:alpha i+100:left i+100,k:top i+100,j
   on_click i+100,selection_instrument
   font_name i+100,"Lucida Console":font_color i+100,0,200,0:font_size i+100,7
   caption i+100,str$(i)+" "+inst$:j=j+10
   if i=0 then font_color 100,220,220,0
   if i=31 or i=63 or i=95 then j=120:k=k+145
end_while
nci=100
' ==============================================================================
' ============= SECTION TRACÉ DES LIGNES =======================================
' ==============================================================================
2d_pen_color 130,60,90:2d_line 0,52,width_client(0),52
for i=119 to 439 step 10:2d_line 10,i,width_client(0)-10,i:next i
for i=10 to 445 step 145:2d_line i,119,i,439:next i
2d_line width_client(0)-10,119,width_client(0)-10,439

' ********** OBJETS LIBRES DE 228 A ... **********

' midi_on
for i=1 to 32:t(i)=0:next i
dll_on "c:\TEST\KGF830.dll"
res%=dll_call0("MIDI_Initialize")
on_key_down 0,appui
on_key_up 0,relache
on_close 0,quit
end

octave:
   color 45+(oct/12),120,120,120:color number_click,0,200,200
   oct=(number_click-45)*12:set_focus 0
return

selection_instrument:
   font_color nci,0,200,0:nci=number_click:if nci=100 then nci=101
   res%=dll_call2("MIDI_SetInstrument",1,nci-100)
   font_color nci,220,220,0
return

touche:
   note=number_click:cl=color_pixel_red(note,1,1)
   color note,0,200,200
   allume()
'   color note,cl,cl,cl
return
                                                                  
sub allume()
   color note,0,200,200
   res%=dll_call3("MIDI_NoteOn",1,note+oct,100)
end_sub

sub eteint()
   color note,cl,cl,cl
   res%=dll_call3("MIDI_NoteOff",1,note+oct,100)
end_sub

quit:
   res%=dll_call0("MIDI_Stop")
   dll_off
   terminate
return

' ==============================================================================
' ============= bibliothèque touches ============ APPUIE SUR LA NOTE============
' ==============================================================================
appui:
if key_down_code = 87 and t(1)=0 then t(1)=1:note=48:allume()
if key_down_code = 83 and t(2)=0 then t(2)=1:note=49:allume()
if key_down_code = 88 and t(3)=0 then t(3)=1:note=50:allume()
if key_down_code = 68 and t(4)=0 then t(4)=1:note=51:allume()
if key_down_code = 67 and t(5)=0 then t(5)=1:note=52:allume()
if key_down_code = 86 and t(6)=0 then t(6)=1:note=53:allume()
if key_down_code = 71 and t(7)=0 then t(7)=1:note=54:allume()
if key_down_code = 66 and t(8)=0 then t(8)=1:note=55:allume()
if key_down_code = 72 and t(9)=0 then t(9)=1:note=56:allume()
if key_down_code = 78 and t(10)=0 then t(10)=1:note=57:allume()
if key_down_code = 74 and t(11)=0 then t(11)=1:note=58:allume()
if key_down_code = 188 and t(12)=0 then t(12)=1:note=59:allume()
if key_down_code = 190 and t(13)=0 then t(13)=1:note=60:allume()
if key_down_code = 76 and t(14)=0 then t(14)=1:note=61:allume()
if key_down_code = 191 and t(15)=0 then t(15)=1:note=62:allume()
if key_down_code = 77 and t(16)=0 then t(16)=1:note=63:allume()
if key_down_code = 223 and t(17)=0 then t(17)=1:note=64:allume()
if key_down_code = 65 and t(13)=0 then t(13)=1:note=60:allume()
if key_down_code = 50 and t(14)=0 then t(14)=1:note=61:allume()
if key_down_code = 90 and t(15)=0 then t(15)=1:note=62:allume()
if key_down_code = 51 and t(16)=0 then t(16)=1:note=63:allume()
if key_down_code = 69 and t(17)=0 then t(17)=1:note=64:allume()
if key_down_code = 82 and t(18)=0 then t(18)=1:note=65:allume()
if key_down_code = 53 and t(19)=0 then t(19)=1:note=66:allume()
if key_down_code = 84 and t(20)=0 then t(20)=1:note=67:allume()
if key_down_code = 54 and t(21)=0 then t(21)=1:note=68:allume()
if key_down_code = 89 and t(22)=0 then t(22)=1:note=69:allume()
if key_down_code = 55 and t(23)=0 then t(23)=1:note=70:allume()
if key_down_code = 85 and t(24)=0 then t(24)=1:note=71:allume()
if key_down_code = 73 and t(25)=0 then t(25)=1:note=72:allume()
if key_down_code = 57 and t(26)=0 then t(26)=1:note=73:allume()
if key_down_code = 79 and t(27)=0 then t(27)=1:note=74:allume()
if key_down_code = 48 and t(28)=0 then t(28)=1:note=75:allume()
if key_down_code = 80 and t(29)=0 then t(29)=1:note=76:allume()
if key_down_code = 221 and t(30)=0 then t(30)=1:note=77:allume()
if key_down_code = 187 and t(31)=0 then t(31)=1:note=78:allume()
if key_down_code = 186 and t(32)=0 then t(32)=1:note=79:allume()
return

' ==============================================================================
' ============= bibliothèque touches ============ RELACHER LA NOTE==============
' ==============================================================================
relache:
if key_up_code = 87 and t(1)=1 then t(1)=0:note=48:cl=255:eteint()
if key_up_code = 83 and t(2)=1 then t(2)=0:note=49:cl=0:eteint()
if key_up_code = 88 and t(3)=1 then t(3)=0:note=50:cl=255:eteint()
if key_up_code = 68 and t(4)=1 then t(4)=0:note=51:cl=0:eteint()
if key_up_code = 67 and t(5)=1 then t(5)=0:note=52:cl=255:eteint()
if key_up_code = 86 and t(6)=1 then t(6)=0:note=53:cl=255:eteint()
if key_up_code = 71 and t(7)=1 then t(7)=0:note=54:cl=0:eteint()
if key_up_code = 66 and t(8)=1 then t(8)=0:note=55:cl=255:eteint()
if key_up_code = 72 and t(9)=1 then t(9)=0:note=56:cl=0:eteint()
if key_up_code = 78 and t(10)=1 then t(10)=0:note=57:cl=255:eteint()
if key_up_code = 74 and t(11)=1 then t(11)=0:note=58:cl=0:eteint()
if key_up_code = 188 and t(12)=1 then t(12)=0:note=59:cl=255:eteint()
if key_up_code = 190 and t(13)=1 then t(13)=0:note=60:cl=255:eteint()
if key_up_code = 76 and t(14)=1 then t(14)=0:note=61:cl=0:eteint()
if key_up_code = 191 and t(15)=1 then t(15)=0:note=62:cl=255:eteint()
if key_up_code = 77 and t(16)=1 then t(16)=0:note=63:cl=0:eteint()
if key_up_code = 223 and t(17)=1 then t(17)=0:note=64:cl=255:eteint()
if key_up_code = 65 and t(13)=1 then t(13)=0:note=60:cl=255:eteint()
if key_up_code = 50 and t(14)=1 then t(14)=0:note=61:cl=0:eteint()
if key_up_code = 90 and t(15)=1 then t(15)=0:note=62:cl=255:eteint()
if key_up_code = 51 and t(16)=1 then t(16)=0:note=63:cl=0:eteint()
if key_up_code = 69 and t(17)=1 then t(17)=0:note=64:cl=255:eteint()
if key_up_code = 82 and t(18)=1 then t(18)=0:note=65:cl=255:eteint()
if key_up_code = 53 and t(19)=1 then t(19)=0:note=66:cl=0:eteint()
if key_up_code = 84 and t(20)=1 then t(20)=0:note=67:cl=255:eteint()
if key_up_code = 54 and t(21)=1 then t(21)=0:note=68:cl=0:eteint()
if key_up_code = 89 and t(22)=1 then t(22)=0:note=69:cl=255:eteint()
if key_up_code = 55 and t(23)=1 then t(23)=0:note=70:cl=0:eteint()
if key_up_code = 85 and t(24)=1 then t(24)=0:note=71:cl=255:eteint()
if key_up_code = 73 and t(25)=1 then t(25)=0:note=72:cl=255:eteint()
if key_up_code = 57 and t(26)=1 then t(26)=0:note=73:cl=0:eteint()
if key_up_code = 79 and t(27)=1 then t(27)=0:note=74:cl=255:eteint()
if key_up_code = 48 and t(28)=1 then t(28)=0:note=75:cl=0:eteint()
if key_up_code = 80 and t(29)=1 then t(29)=0:note=76:cl=255:eteint()
if key_up_code = 221 and t(30)=1 then t(30)=0:note=77:cl=255:eteint()
if key_up_code = 187 and t(31)=1 then t(31)=0:note=78:cl=0:eteint()
if key_up_code = 186 and t(32)=1 then t(32)=0:note=79:cl=255:eteint()
return

' ==============================================================================
' ============= Datas des instruments midis ====================================
' ==============================================================================
data 0,"Acoustic Grand Piano",1,"Bright Acoustic Piano",2,"Electric grand Piano",3,"Honky Tonk Piano",4,"Electric Piano 1",5,"Electric Piano 2",6,"Harpsicord",7,"Clavinet"
data 8,"Celesta",9,"Glockenspiel",10,"Music Box",11,"Vibraphone",12,"Marimba",13,"Xylophone",14,"Tubular bells",15,"Dulcimer"
data 16,"Drawbar Organ",17,"Percussive Organ",18,"Rock Organ",19,"Church Organ",20,"Reed Organ",21,"Accordion",22,"Harmonica",23,"Tango Accordion"
data 24,"Nylon Acoustic Guitar",25,"Steel Acoustic Guitar",26,"Jazz Electric Guitar",27,"Clean Electric Guitar",28,"Muted Electric Guitar",29,"Overdrive Guitar",30,"Distorted Guitar",31,"Guitar Harmonics"
data 32,"Acoustic Bass",33,"Electric Fingered Bass",34,"Electric Picked Bass",35,"Fretless Bass",36,"Slap Bass 1",37,"Slap Bass 2",38,"Syn Bass 2",39,"Syn Bass 1"
data 40,"Violin",41,"Viola",42,"Cello",43,"Contrabass",44,"Tremolo Strings",45,"Pizzicato Strings",46,"Orchestral Harp",47,"Timpani"
data 48,"String Ensemble 1",49,"String Ensemble 2",50,"Syn Strings 1",51,"Syn Strings 2",52,"Choir Aahs",53,"Voice Oohs",54,"Syn Choir",55,"Orchestral Hit"
data 56,"Trumpet",57,"Trombone",58,"Tuba",59,"Muted Trumpet",60,"French Horn",61,"Brass Section",62,"Syn Brass 1",63,"Syn Brass 2"
data 64,"Soprano Sax",65,"Alto Sax",66,"Tenor Sax",67,"Baritone Sax",68,"Oboe",69,"English Horn",70,"Bassoon",71,"Clarinet"
data 72,"Piccolo",73,"Flute",74,"Recorder",75,"Pan Flute",76,"Bottle Blow",77,"Shakuhachi",78,"Whistle",79,"Ocarina"
data 80,"Syn Square Wave",81,"Syn Sawtooth Wave",82,"Syn Calliope",83,"Syn Chiff",84,"Syn Charang",85,"Syn Voice",86,"Syn Fifths Sawtooth Wave",87,"Syn Brass & Lead"
data 88,"New Age Syn Pad",89,"Warm Syn Pad",90,"Polysynth Syn Pad",91,"Choir Syn Pad",92,"Bowed Syn Pad",93,"Metal Syn Pad",94,"Halo Syn Pad",95,"Sweep Syn Pad"
data 96,"SFX Rain",97,"SFX Soundtrack",98,"SFX Crystal",99,"SFX Atmosphere",100,"SFX Brightness",101,"SFX Goblins",102,"SFX Echoes",103,"SFX Sci-Fi"
data 104,"Sitar",105,"Banjo",106,"Shamisen",107,"Koto",108,"Kalimba",109,"Bag Pipe",110,"Fiddle",111,"Shanai"
data 112,"Tinkle Bell",113,"Agogo",114,"Steel Drums",115,"Woodblock",116,"Taiko Drum",117,"Melodic Tom",118,"Syn Drum",119,"Reverse Cymbal"
data 120,"Guitar Fret Noise",121,"Breath Noise",122,"Seashore",123,"Bird Tweet",124,"Telephone Ring",125,"Helicopter",126,"Applause",127,"Gun Shot"

Sur l'image ci-dessous, on voit quelles notes sont associées au clavier de l'ordi. (C'est la même disposition que dans le logiciel Fl Studio que j'utilise très souvent.)
KGF et fonctions Midi Clavie10
Ce programme n'est qu'une ébauche pour voir si il est possible de réaliser certaines choses avec panoramic. Il y a plein de place disponible sur le form, comme on peut le constater, ce qui est prévu pour rajouter des fonctions supplémentaires à venir.

Là où ça se complique, c'est quand je veux jouer 2 ou 3 ou plusieurs notes ensembles. Faites l'essai. Parfois on entend toutes les notes, parfois une seule, et quand on relâche les touches, on peut encore entendre jouer une ou plusieurs notes. Donc il faut ré-appuyer dessus et relâcher à nouveau pour faire cesser le son. J'ai essayé d'utiliser à la place de key_down_code et key_up_code la fonction de KGF : "SetSpecialKeyboardHook" mais si elle capte bien le code de la touche, quand on reste appuyée le code de la touche devient négatif et signifie que la touche est relâchée, alors qu'on appuie toujours dessus. Voir l'exemple ci-dessous:
Code:
dll_on "c:\TEST\KGF830.dll"
label touche
dim res%,key%
edit 10 : on_change 10,touche
res% = DLL_call4("SetSpecialKeyboardHook",1,handle(0),adr(key%),handle(10))
end

touche:
  print_locate 100,100:print key%;" "
return

D'autre part, j'ai un clavier maître que je connecte sur une prise USB de l'ordinateur (Axiom air mini 32 de M-Audio).
KGF et fonctions Midi Maudio10
Chaque note jouée sur le clavier M-Audio envoie des informations à l'ordinateur par la prise usb. Est-il possible de récupérer ces informations dans KGF et de les utiliser avec les fonctions midi?

Pour le moment, je suis bloqué dans ce que je voulais faire. Mais si tu ne peux rien faire, ne te casse pas la tête pour moi, tu as déjà de quoi faire avec ce que tu développes en ce moment.
Merci à toi Klaus Wink  Wink  Wink
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

KGF et fonctions Midi Empty
MessageSujet: Re: KGF et fonctions Midi   KGF et fonctions Midi EmptyMer 31 Jan 2018 - 10:55

En ce qui concerne le problème de SetSpecialKeyboardHook avec la détection incorrecte du relâchement de la touche, c'est corrigé dans la version que je viens de mettre en ligne. Pour le moment, seul le WebDav est à jour - mes sites suivront ce soir. J'ai fait cette petite correction rapidement, mais pour la grosse intendance, je n'ai pas le temps maintenant.

En ce qui concerne la reconnaissance des données arrivant sur un port USB, c'est une toute autre histoire. Déjà: as-tu un driver pour ce clavier ? Y a-t-il uune API spéciale pour ce clavier ? En général, lorsqu'il y a une interface USB, il y a les logiciels qui vont avec...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
bignono

bignono


Nombre de messages : 1127
Age : 67
Localisation : Val de Marne
Date d'inscription : 13/11/2011

KGF et fonctions Midi Empty
MessageSujet: Re: KGF et fonctions Midi   KGF et fonctions Midi EmptyMer 31 Jan 2018 - 12:18

Merci de me m'avoir répondu Klaus,
Mais je dois m'absenter cet après midi. Je regarderais ce soir pour la fonction SetSpecialKeyboardHook.

Pour le driver de mon clavier maître:
Aller sur le site de M-AUDIO.com
sélectionner support, drivers and updates
- dans Series, sélectionner Keyboard Controllers,
- dans Products, sélectionner Axiom Air Mini 32
- dans OS, sélectionner Windows 7 (32 bit)
puis cliquer sur show Results
cliquer sur Axiom AIR Mini 32 Windows Driver v1.0.1 à droite en dessous de FILE
Une autre page s'ouvre, et cliquez en bas sur le bouton Download Now
pour télécharger le fichier Install_M-Audio_Axiom_AIR_Mini_32_Windows_1_0_1.zip

Une fois dézipé, lancer l'installation et voici ce qui s'installe dans
c:\programmes files x86\M-Audio\Axiom AIR Mini 32
- AudioDevMon.exe
- DriverReplacer.exe
- ReadMe.txt
- 1 sous dossier "Streaming" qui contient 3 fichiers :
                                            - MAudioAxiomAIRMini32.cat
                                            - MAudioAxiomAIRMini32.inf
                                            - MAudioAxiomAIRMini32.sys

A bientôt, et merci. Wink Wink Wink
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

KGF et fonctions Midi Empty
MessageSujet: Re: KGF et fonctions Midi   KGF et fonctions Midi EmptyMer 31 Jan 2018 - 15:59

J'ai installé le driver (version Windows 10 64 bits) sans problème. Je trouve des fichiers du genre ue ceux que tu indiques. J'ai également téléchargé les deux manuels PDF disponibles sur le site, pour ce modèle de clavier. Mais dans tout cela, il n'y a aucune documentation concernant la programmation de l'interface USB, ce qu'on appelle l'API de ce driver. Si tu as d'autres informations, même concernant l'utilisation en C, cela pourrait aider...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
bignono

bignono


Nombre de messages : 1127
Age : 67
Localisation : Val de Marne
Date d'inscription : 13/11/2011

KGF et fonctions Midi Empty
MessageSujet: Re: KGF et fonctions Midi   KGF et fonctions Midi EmptyMer 31 Jan 2018 - 19:47

Bonsoir Klaus,
le problème de SetSpecialKeyboardHook est corrigé, ça marche. Merci Klaus.

Pour le clavier AXIOM M-Audio, il n'y a rien d'autre. Quand tu connectes la prise usb à l'ordi la première fois, le clavier est reconnu automatiquement par Windows.
Ça doit être une api windows qui gère le clavier par l'usb.
Il apparait en tant que périphérique quand je sélectionne dans le menu Windows périphériques et imprimantes

KGF et fonctions Midi Pyriph10
KGF et fonctions Midi Pyriph11
KGF et fonctions Midi Pyriph13
C'est tout ce que je peux t'apporter comme précision. Mais si c'est trop compliqué, laisse tomber.
Bon, je te laisse, j'ai de la famille qui vient d'arriver à l'improviste. Bonne soirée, A + Wink Wink Wink
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

KGF et fonctions Midi Empty
MessageSujet: Re: KGF et fonctions Midi   KGF et fonctions Midi EmptyMer 31 Jan 2018 - 20:25

C'est bien ça - un driver spécifique qui est utilisé directement par le programme application.

J'ai longuement cherché un "sniffer" USB,, mais je n'ai rien trouvé de gratuit et d'exploitable sous Windows. Je voulais analyser ce qui se passe sur la ligne pour reproduire ces séquences par programme, mais là, je n'ai pas les outils pour ça, ni la doc. Désole.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
bignono

bignono


Nombre de messages : 1127
Age : 67
Localisation : Val de Marne
Date d'inscription : 13/11/2011

KGF et fonctions Midi Empty
MessageSujet: Re: KGF et fonctions Midi   KGF et fonctions Midi EmptyJeu 1 Fév 2018 - 9:02

Bonjour Klaus, Smile
Bon, je ne sais pas si tu connais le site Torry.net, (je pense que oui), il y a plein de sources en libre accès en delphi, pascal, etc...
Certains sont Open source, freeware, d'autres shareware ou payant.
Sur ce site, je suis tombé sur un freeware incluant le source pour les plateformes Delphi, 2005, 2006 et 7.
C'est PianoEx v.1.1 . Je l'ai installé sur mon ordi, j'ai branché mon clavier Axiom sur la prise usb, j'ai lancé PianoEx.exe, et là, miracle, je pouvais jouer avec mon Axiom du piano!

Voilà, tu peux télécharger PianoEx v.1.1 sur mon web dav: MyDrive, identifiant bignono@panoramic et mot de passe panoramic123.

Moi, ce qui m'intéresse, c'est de pouvoir jouer plusieurs notes ensembles et qu'elles soient toutes détectées en même temps sur le clavier de mon ordi, et de pouvoir aussi me servir de mon clavier maître midi.

Si c'est difficile pour toi, ne te casse pas la tête.
A +  Wink  Wink  Wink
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

KGF et fonctions Midi Empty
MessageSujet: Re: KGF et fonctions Midi   KGF et fonctions Midi EmptyJeu 1 Fév 2018 - 21:32

J'ai téléchargé le logiciel. Réalisation intéressante. Mais je ne vois pas le lien avec une entrée USB...

Avec les fonctions MIDI actuelles, tu peux jouer des sons en polyphonie, jusqu'à 16 notes (canaux) simulténement. Tout est une question de codage. Regarde ceci:
Code:
dim res%, note1$, note2$

note1$ = "[i001+0do100] [i001+0re100] [i001+0mi100] [i001+0mi100] [i001+0fa100] [i001+0sol100] [i001+0sol100] [-]"                   : ' avec piano
note2$ = "[i001+asol100] [i001+asi100] [i001+0do100][i001+0do100] [i001+0re100] [i001+0mi100] [i001+0mi100] [-]"                   : ' avec piano
' note2$ = "[i040+0mi100-] [+0fa100-]"      : ' avec violon

dll_on "KGF.dll"

res% = DLL_call0("MIDI_Initialize")
'  maintenant, le système midi est utilisable

' placer un Do de 2x64è sur canal 1, sur le piano
res% = DLL_call3("MIDI_Compile",1,7,adr(note1$))
' placer un Mi suivi d'un Fa sur canal 2, au violon
res% = DLL_call3("MIDI_Compile",2,7,adr(note2$))
' jouer les deux pistes en polyphonie, métronome 120
res% = DLL_call1("MIDI_Play",10)
' rejouer les deux pistes plus lentement
' res% = DLL_call1("MIDI_Play",96)

res% = DLL_call0("MIDI_Stop")
' ici, le système MIDI est désactivé

end
On prépare une suite de 7 notes sur deux canaux, jouant, sur le premier canal, les notes do, re, mi, mi, fa, sol, sol de l'octave 0, et sur le second canal, les notes sol et si de l'octave a, puis do, do, re, mi, mi de l'octave 0, ce qui revient  jouer en gros une tierce des 5 premières notes de la gamme en Do majeur.

L'idée, c'est de préparer autant de pistes que de notes jouées simultanément, coder chaque note avec ses dièses ou b-mols éventuels et son volume ainsi que son instrument (ici, piano sur les deux canaux).

Tu crois que tu peux en faire quelque chose ? Si tu as besoin d'adaptation, je suis ouvert à des suggestions. Mais tu as accès à tous les iinstruments du système midi, et de 1 à 16 canaux simultanés. Les séquences sont prévues pour des divisions de 1/64ème de mésure (quintuple croche).  On peut "allumer" une note et la laisser, puis 'l'éteindre". Mais la complexité de l'opération et les contraintes de temps d'exécution sont telles que l'ai choisi de faire cela en deux phases: une phase de "compilation" qui génère un trame interne, puis une phase de "play" qui joue la trame générée.

EDIT

Tu peux aussi jouer "Frère Jaques...", comme ceci, avec 3 canaux:
Code:
dim res%, note1$, note2$, note3$

' note1$ = "[i001+0do100] [i001+0re100]": ' [i001+0mi100] [i001+0mi100] [i001+0fa100] [i001+0sol100] [i001+0sol100] [-]"                  : ' avec piano
' note2$ = "[i001+asol100] [i001+asi100] [i001+0do100] [i001+0do100] [i001+0re100] [i001+0mi100] [i001+0mi100] [-]"                  : ' avec piano
  note1$ = "[i001+0do100] [+0re100] [+0mi100] [+0do100] [] [] [+0mi100] [+0fa100] [+0sol100] [] [-]"
  note2$ = "[i001+asol80] []        []        []        [] [] [+ala80]  []        [+asi80]  [] [-]"
  note3$ = "[i001+ami60]  []        []        []        [] [] [+afa60]  []        [+asol80]  [] [-]"
dll_on "KGF.dll"

res% = DLL_call0("MIDI_Initialize")
'  maintenant, le système midi est utilisable

res% = DLL_call3("MIDI_Compile",1,11,adr(note1$))
res% = DLL_call3("MIDI_Compile",2,11,adr(note2$))
 res% = DLL_call3("MIDI_Compile",3,11,adr(note3$))

res% = DLL_call1("MIDI_Play",10)

res% = DLL_call0("MIDI_Stop")
' ici, le système MIDI est désactivé

end

En faisant cela, je me suis rendu compte qu'il y a un bug avec le modificateur "-" qui arrête une note. Je vais corriger cele.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

KGF et fonctions Midi Empty
MessageSujet: Re: KGF et fonctions Midi   KGF et fonctions Midi EmptyJeu 1 Fév 2018 - 22:52

Ca y est - une nouvelle version est en ligne et elle corrige ce bug, bien caché, d'ailleurs !
Maintenant, on peut faire ceci, sans bug:
Code:
dim res%, note1$, note2$, note3$

note1$ = "[i001+0do100-] [+0re100-] [+0mi100-] [+0do100] [] [-] [+0mi100-] [+0fa100-] [+0sol100] [] [-]"
note2$ = "[i040+asol80]  []        []        []        [] [-] [+ala80]  [-]        [+asi80]  [] [-]"
note3$ = "[i040+ami60]  []        []        []        [] [-] [+afa60]  [-]        [+asol80]  [] [-]"
dll_on "KGF.dll"                   

res% = DLL_call0("MIDI_Initialize")
'  maintenant, le système midi est utilisable

res% = DLL_call3("MIDI_Compile",1,11,adr(note1$))
res% = DLL_call3("MIDI_Compile",2,11,adr(note2$))
res% = DLL_call3("MIDI_Compile",3,11,adr(note3$))

res% = DLL_call1("MIDI_Play",10)

res% = DLL_call0("MIDI_Stop")
' ici, le système MIDI est désactivé

end
Cela joue le début de "Frère Jacques..." sur 3 canaux. La mélodie est jouée sur le canal 1, par un piano. L'accompagnement se fait par des accords sur les canaux 2 et 3, joué par des violons.

Alors, c'est pas beau, la polyphonie ?
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Minibug

Minibug


Nombre de messages : 4570
Age : 58
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

KGF et fonctions Midi Empty
MessageSujet: Re: KGF et fonctions Midi   KGF et fonctions Midi EmptyJeu 1 Fév 2018 - 23:27

Bonsoir Klaus !

Tu attises ma curiosité avec les fonctions MIDI... Wink
Je suis mélomane à mes heures bien que je joue maintenant très rarement.

Ça serai sympa de réaliser un séquenceur complet en Panoramic.
J'en avait réalisé un sur mon ATARI ST520 à l'époque c'était génial !!! Laughing Laughing
Je sais que Bignono avait commencé quelque chose du genre...
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

KGF et fonctions Midi Empty
MessageSujet: Re: KGF et fonctions Midi   KGF et fonctions Midi EmptyVen 2 Fév 2018 - 0:23

Pourquoi pas... les outils de base sont là.

J'ai imaginé une façon de faire, avec MIDI_Compile et MIDI_Play, mais on peut concevoir la chose autrement. De façon interne, j'ai plusieurs listes pour chaque canal (16 canaux maxi). Ces listes sont:
Code:
 instruments:    instrument à installer en début de période
  notes:   note à jouer
  volumes:   volume de la note
  flag_note_on:    flag "activer la note" en début de période
  flag_note_off:   flag "désactiver la note" en fin de période
La fonction MIDI_Compile ne fait rien d'autre que remplir ces tableaux. Mais on peut imaginer de les remplir autrement. Par exemple, en plaçant toutes ces valeurs dans des MEMOs (cachés) et en imaginant une fonction recehant les handles de ces 4 mémos, on pourrait générer ces tableaux internes très facilement, sans passer la la syntaxe lourde et pénalisante de la commande MIDI_Compile. Je suis très ouvert à toute suggestion dans ce genre.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
bignono

bignono


Nombre de messages : 1127
Age : 67
Localisation : Val de Marne
Date d'inscription : 13/11/2011

KGF et fonctions Midi Empty
MessageSujet: Re: KGF et fonctions Midi   KGF et fonctions Midi EmptyVen 2 Fév 2018 - 7:40

Bonjour Klaus, Very Happy
Merci d'avoir essayé, mais j'ai oublié de préciser qu'avec le programme PianoEx v1.1, il fallait sélectionner mon clavier Axiom dans le combo "Midi In".
Bon, pour en revenir aux fonctions midi de KGF, j'ai bien vu midi_compile, mais je ne l'ai pas encore essayé parce qu'à première vue, elle sert plutôt à programmer un morceau complet et le faire jouer. Un peu comme si on charge un fichier et qu'on appuie sur la touche play pour faire jouer le morceau de musique. Elle servirait aussi à programmer un séquenceur en pas à pas.
Moi ce que je cherche, c'est de pouvoir jouer directement en temps réel une ou plusieurs notes d'un instrument choisi dans la liste des instruments midi soit en me servant du clavier de l'ordi, soit en me servant d'un clavier midi. Je dois pouvoir me servir de mes 2 mains, par exemple plaquer ou jouer de manière syncopée des accords ou un accompagnement à la main gauche et une mélodie à la main droite.
C'est à partir de là, que je pourrais éventuellement faire un séquenceur pour enregistrer en direct la musique jouée, puis aller plus loin en réalisant un séquenceur en pas à pas.
Mais ton idée de tableau caché dans des mémos me parait intéressante et à creuser.
Bon, mais merci quand même du temps que tu as passé à chercher, mais ne te casse pas trop la tête pour moi.
Voilà, A plus Wink Wink Wink
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

KGF et fonctions Midi Empty
MessageSujet: Re: KGF et fonctions Midi   KGF et fonctions Midi EmptyVen 2 Fév 2018 - 16:48

J'ai fait une nouvelle fonction, complémentaire à MIDI-Compile: c'est la fonction MIDI_LoadNote. MIDI_Compile charge une suite de notes avec leurs attributs, pour un seul canal. MIDI_LoadNote charge les notes pour tous les canaux, mais pour une seule unité de temps. Ls deux méthodes finissent par charger le même tableau interne, et le résultat est joué par MIDI_Play dans les deux cas.

Voici une démo des deux méthodes, jouant le début de "Frère Jaques...", sur 3 canaux (mélodie sur canal 1 au piano, accompagnement sur canaux 2 et 3 au violon):
Code:
' FrereJaques.bas

label ModeCompile, ModeLoad

dim res%

' pour ModeCompile:
dim note1$, note2$, note3$

' pour ModeLoad:
dim note$

note1$ = "[i001+0do100-] [+0re100-] [+0mi100-] [+0do100] [] [-] [+0mi100-] [+0fa100-] [+0sol100] [] [-]"
note2$ = "[i040+asol80]  []        []        []        [] [-] [+ala80]  [-]        [+asi80]  [] [-]"
note3$ = "[i040+ami60]  []        []        []        [] [-] [+afa60]  [-]        [+asol80]  [] [-]"

dll_on "KGF.dll"

button 1 : top 1,10 : left 1,10 : caption 1,"Avec Compile" : on_click 1,ModeCompile
button 2 : top 2,10 : left 2,110 : caption 2,"Avec Load" : on_click 2,ModeLoad

end 


             

ModeCompile:
res% = DLL_call0("MIDI_Initialize")

res% = DLL_call3("MIDI_Compile",1,11,adr(note1$))
res% = DLL_call3("MIDI_Compile",2,11,adr(note2$))
res% = DLL_call3("MIDI_Compile",3,11,adr(note3$))

res% = DLL_call1("MIDI_Play",10)

res% = DLL_call0("MIDI_Stop")
return




ModeLoad:
res% = DLL_call0("MIDI_Initialize")
res% = DLL_call1("MIDI_Reset",3)

'    INST=n:OCT:o:NOTE=n:MOD=x:VOL=n:START=n:STOP=n,...,INST=n:OCT=o:NOTE=n:MOD=x:VOL=n:START=n:STOP=n
note$ = "INST=1:OCT=0:NOTE=do:VOL=100:START=*:STOP=*, INST=40:OCT=a:NOTE=sol:VOL=80:START=*, INST=40:OCT=a:NOTE=mi:VOL=60:START=*" 
res% = dll_call3("MIDI_LoadNote",3,1,adr(note$))

note$ = "OCT=0:NOTE=re:VOL=100:START=*:STOP=*,* *, " 
res% = dll_call3("MIDI_LoadNote",3,2,adr(note$))

note$ = "OCT=0:NOTE=mi:VOL=100:START=*:STOP=*,* ,* " 
res% = dll_call3("MIDI_LoadNote",3,3,adr(note$))

note$ = "OCT=0:NOTE=do:VOL=100:START=*:STOP=*,* ,* " 
res% = dll_call3("MIDI_LoadNote",3,4,adr(note$))

note$ = "*, *, *" 
res% = dll_call3("MIDI_LoadNote",3,5,adr(note$))

note$ = "STOP=*, STOP=*, STOP=*" 
res% = dll_call3("MIDI_LoadNote",3,6,adr(note$))

note$ = "INST=1:OCT=0:NOTE=mi:VOL=100:START=*:STOP=*, INST=40:OCT=a:NOTE=la:VOL=80:START=*, INST=40:OCT=a:NOTE=fa:VOL=60:START=*" 
res% = dll_call3("MIDI_LoadNote",3,7,adr(note$))

note$ = "INST=1:OCT=0:NOTE=fa:VOL=100:START=*, STOP=*, STOP=*" 
res% = dll_call3("MIDI_LoadNote",3,8,adr(note$))

note$ = "INST=1:OCT=0:NOTE=sol:VOL=100:START=*:STOP=*, INST=40:OCT=a:NOTE=si:VOL=80:START=*, INST=40:OCT=a:NOTE=sol:VOL=60:START=*" 
res% = dll_call3("MIDI_LoadNote",3,9,adr(note$))

note$ = ", , " 
res% = dll_call3("MIDI_LoadNote",3,10,adr(note$))

note$ = "STOP=*, STOP=*, STOP=*" 
res% = dll_call3("MIDI_LoadNote",3,11,adr(note$))

res% = DLL_call1("MIDI_Play",10)

res% = DLL_call0("MIDI_Stop")
return
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





KGF et fonctions Midi Empty
MessageSujet: Re: KGF et fonctions Midi   KGF et fonctions Midi Empty

Revenir en haut Aller en bas
 
KGF et fonctions Midi
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Fréquence MIDI
» Nouveauté dans KGF.dll : les fonctions MIDI polyphoniques
» fichier midi
» proposition de commandes midi
» Recherche Hardware MIDI

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: Activité des sites créés par les Panoramiciens. :: Le site de Klaus-
Sauter vers: