Générer du son sans charger un wav/mp3

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Générer du son sans charger un wav/mp3

Message par TazNormand »

Salut question surement bête mais comment peut-on générer du son avec PureBasic à la manière de ce qui se faisait sur Amstrad CPC : Sound a,b,c,d ?

Les cartes/chipset sonores de nos PC en sont capables, mais comment faire avec PB ?

merci d'avance pour vos éclaircissements
Image
Image
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Générer du son sans charger un wav/mp3

Message par GallyHC »

Bonjour,

Si c'est pour les "bip" utilise "Beep_() uniquement Windows" (ex: Beep_(1500, 400)). explication voir http://pbfrance.com/?url=libview&cmd=windows&val=1.

Sinon un truc sympa sur le forum anglais c'est http://purebasic.fr/english/viewtopic.p ... nerate+wav

Bon sinon j’espère ne pas être hors-sujet.

GallyHC

PS: il y a pas mal d'exemple en faisant de "beep_" une recherche sur ce forum.
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Générer du son sans charger un wav/mp3

Message par Backup »

avec ma lib Midi , tu peux faire ça

sinon , je supose que tu parles de son ADSR
A=Attaque
D=Decay
S=Sustain
R=release :)

ce qui se raproche le plus de ça a été fait par HuitBit ici
http://www.purebasic.fr/french/viewtopi ... DSR#p93603
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Générer du son sans charger un wav/mp3

Message par TazNormand »

Merci à tous les deux.

Je regarderai le code de HuitBit demain, en attendant, le Beep_ semble correspondre à ce que je cherche.
Image
Image
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Générer du son sans charger un wav/mp3

Message par Backup »

si c'est pour faire de la musique , oublie le Beep_()
car il est monophonique et il fait office de Delay().. il bloque le prg pendant son utilisation


je viens de mettre a jour en PB 5.22 , le code de huitBit :)
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Générer du son sans charger un wav/mp3

Message par TazNormand »

Bon, pour un purepunch, c'est mort vu la taille des codes
Image
Image
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Générer du son sans charger un wav/mp3

Message par SPH »

Peut etre que le midi pourrait te convenir. Tiens, voila une boite a rythme :

Code : Tout sélectionner

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()
PrintN("Boite a Rythme Midi (Base sur ce auquel j'ai tjr cru : 2^x)")
PrintN("SPH(2006)")


MIDIOpen()
ChargeInstrument(9,0) 

PrintN("")
ry=43+Random(12)*2
PrintN("Rythme : "+Str(ry))

Dim canal.l(47,4)
; (instrument,0) = pause avant de voir si on peux le jouer
; (instrument,1) = temps a attendre pour le jouer (voir (instrument,2))
; (instrument,2) = incrementation puis comparatif avec (instrument,1)
; 3 = frequence
; 4 = volume
cmb=0
For i=1 To 47
Read lourd
canal(i,4)=100+Random(27)
If i<=4
canal(i,4)-40
EndIf
canal(i,0)=(Random(cmb/1.7+3))*20
If Random(16)>10
If Random(lourd)=3
lourd-Random(lourd/3)
EndIf
canal(i,1)=Pow(2,lourd)
canal(i,3)=127+Random(60)+Random(60)
EndIf
If canal(i,1)>0
cmb+1
EndIf
Next

For i=1 To 180
la=1+Random(46)
canal(la,1)*2
If canal(la,1)>8000
u=1+Random(3)
While u>0
canal(la,1)/2
u-1
Wend
EndIf
Next


PrintN("Nombre d'instruments : "+Str(cmb))
PrintN("")
PrintN("ZzzZZzzz")
PrintN("")
PrintN("")

;00031261616977979991819991103355121059181115618

cmb2=0

Repeat
For zik = 1 To 47

If canal(zik,1)<>0 ; alors on joue de cette instrument
If canal(zik,0)>0 ; alors ce n'est pas encore le moment pour demarrer l'instrument
canal(zik,0)-1
Else
canal(zik,2)+1
If canal(zik,2)=canal(zik,1)
PlayNoteMIDI(9,34+zik,canal(zik,3),canal(zik,4))
canal(zik,2)=0
If canal(zik,0)=0
cmb2+1
Print(Str(zik)+"..")
canal(zik,0)=-1
If cmb=cmb2
PrintN("Ok")
EndIf
EndIf
EndIf
EndIf
EndIf

Next
Delay(ry)
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 


DataSection
;Data.l 1,1,1,2,2,2,4,2,4,2,4,5,5,5,5,4,4,4,4,1,4,2,5,5,5,2,2,1,3,3,4,4,2,3,2,1,4,5,2,4,2,2,2,4,4,2,4
Data.l 1,1,1,3,2,3,5,2,5,2,5,7,6,6,7,6,5,5,5,2,6,3,7,7,7,2,2,1,4,4,5,5,2,3,2,2,5,7,3,6,2,2,2,5,6,2,6
;Data.l 0,0,0,3,1,2,6,1,6,1,6,9,7,7,9,7,9,9,9,1,8,1,9,9,9,1,1,0,3,3,5,5,1,2,1,0,5,9,1,8,1,1,1,5,6,1,8
EndDataSection



!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Générer du son sans charger un wav/mp3

Message par SPH »

Erreur ligne 67 avec pb5.30b5

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Répondre