Page 1 sur 4

Le midi avec Purebasic

Publié : mar. 12/sept./2006 23:00
par bombseb
Bonsoir, est-ce possible d'utiliser les fonctions midi de la carte son avec PB ?

J'aimerais pouvoir jouer des notes, en lui indiquant une fréquence, ou encore mieux en lui indiquant la note....

Publié : mer. 13/sept./2006 0:49
par Backup
..........

Publié : mer. 13/sept./2006 4:18
par SPH
Aucune note ne sort chez moi....

Publié : mer. 13/sept./2006 10:53
par Backup
il sufisait d'ajouter un delay a la fin
car une fois envoyer il faut attendre que le son soit joué avant de quitter le prg :lol:

reesaye la ! :D

Publié : mer. 13/sept./2006 11:45
par comtois
voir aussi ce code qui est excellent

http://purebasic.hmt-forum.com/viewtopic.php?t=5335

Publié : mer. 13/sept./2006 13:05
par bombseb
merci votre aide, j'essayerais tout ca ce week end...

Dobro : en faisant une recherche sur le forum, j'ai vu que tu a développé une lib pour faire parler l'ordi... tu peut me dire a quel endroit je le télécharge stp ? (je vais surement en avoir besoin pour ce que je fait)

Publié : mer. 13/sept./2006 13:47
par Backup
va sur ce topic !! http://purebasic.forum-gratuit.com/view ... ight=sapi5

il suffit de telecharger des voix au format sapi4, ou sapi5
(je te ferai une archive si tu veux )

sur ce topic on y parle d'une librairie qui gere le sapi4,5 !!
j'ai mis un exemple d'utilisation (un lecteur de press-papier) !!

j'ai arreté Nono ma lib synthevocal ! :?

Publié : mer. 13/sept./2006 16:52
par bombseb
coool !!

merci beaucoup !

Publié : jeu. 14/sept./2006 3:32
par SPH
MIDIOpen()
ChargeInstrument(0,0) ; canal , instrument

PlayNoteMIDI(0,50,127,127) ; note de 15 a 108
Delay (2000)
C'est possible de jouer sur plusieurs pistes ???

Publié : jeu. 14/sept./2006 7:59
par Backup
.........

Publié : jeu. 14/sept./2006 8:27
par SPH
Ha okkkk
nan parce que j'ai ete troublé par ton commentaire : "note de 15 a 108 la NOTE NUMERO 2 !! "
Tu dis 15 a 108 alors que tu n'etais pas dans la fourchette alors j'ai tout melangé...

EDIT :

J'ai un bug. Regardez ce code, moi, chez moi, je n'ai pas que du piano. Ca se transforme vite en zik d'horreur...

Code : Tout sélectionner


Global m_hMidiOut,m_MIDIOpen.b 


; *************************************************************************** 

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 

; *************************************************************************** 

MIDIOpen() 

ChargeInstrument(0,0) ; canal , instrument Piano 

xx=80+Random(100)

Repeat
PlayNoteMIDI(Random(10),40+Random(50),127,127) ; note de 15 a 108 La NOTE NUMERO 1 
Delay(xx+Random(5)*xx)
ForEver


Publié : jeu. 14/sept./2006 10:15
par Backup
.............

Publié : jeu. 14/sept./2006 10:36
par bombseb
le canal 10 dans la norme General midi est réservé a la batterie !!
ah c'est bon a savoir ca !

Publié : jeu. 14/sept./2006 10:48
par Backup
j'ai reedité mon post au dessus :D
note de 15 a 108
j'avais noté cela parceque cela correspond au son minimum et maximum que l'on peut entendre sur ma carte son
ce ne doit pas etre difficile de retrouver les correspondances notes--->chiffres
sur internet :D

Publié : jeu. 14/sept./2006 11:14
par bombseb
pour les correspondance c'est super simple...

(de tête, donc je peux me tromper)

...
48 = C
49 = C#
50 = D
...

etc...