Page 1 sur 1

Petit tuto: v2 synth de Kb adapté par WolfgangS pour PB

Publié : dim. 28/oct./2007 21:15
par Buckethead
Image

Voici un petit tuto pour mettre de la musique dans vos prods via
le "softsynth" ou instrument virtuel de Kb (Tammo Hinrichs) / FarbRausch

Le code fourni par Kb à été porté en PB par WolfgangS. Merci à lui



V2m PureBasic lib par WolfgangS:
http://stanz05.free.fr/Libv2Purebasic.zip
Dezipper l'archive dans le repertoire de PureBasic, relancez l'editeur ..




Une petite demo ;)
http://stanz05.free.fr/v2PB.zip
J'essaye de faire de l'openGL depuis 15 jours (bien lente à mon avis) et je me suis fait cette "musique"
sous Cubase SX. Le truc c'est qu'il n'y a pas vraiment d'option pour faire une loop. Dans le VSTi on doit utiliser les
"program change" pour selectionner un instrument. Bref, on paye le prix de cette optimisation.
Il est possible de faire chanter le pc avec les CC#4 etc (pas utilisé dans ma demo) à coup de pitch bend ou autre controlleur.



Source de la demo avec le fichier v2m:
http://stanz05.free.fr/SourcesPBv2.zip



V2 synthesizer. Le VSTi & libv2 par Kb:
http://www.1337haxorz.de/products.html





J'ai du (mal) bidouiller le code de WolfgangS, qui ne fonctionnait pas avec ma version de PB.

Code : Tout sélectionner

DataSection 
  music1: IncludeBinary "mon_fichier.v2m"
EndDataSection  

IncludeFile "OpenGl.Pb"


Procedure.l LoadMusic(name.s)
  If OpenFile(0,name.s)
    size.l=Lof(0)
    If size.l
      *mem=AllocateMemory(size)
      If *mem
        If ReadData(0,*mem,size.l)<>size.l
          ;load error
           EndIf
      EndIf
    EndIf
    CloseFile(0)
    ProcedureReturn *mem.l
  EndIf
EndProcedure 

*F1 sur une instruction v2 pour l'aide.

Publié : lun. 29/oct./2007 21:26
par KarLKoX
Le code fourni par Kb à été porté en PB par WolfgangS. Merci à lui
Pas vraiment, il ne s'agit que d'une userlib de la lib statique (et donc plus vraiment nécéssaire ...) v2m et non d'un port EN PB, la nuance est de taille ;)
Dans tous les cas, sympas la démo :)

Publié : mar. 30/oct./2007 22:40
par Buckethead
Merci de m'avoir corrigé, sur le coup je voulais dire "utilisable en PB" puis j'ai écrit n'importe quoi... Si j'ai bien compris WolfgangS aurait pu modifier la source assez basique "libv2.h" (l'en-tête pour utiliser la "lib statique" libv2.lib si j'ai bon) écrite en C++ (non ?) en C ou bien en ASM voir en PB et passer le truc sous "tailbite". L'interet d'une userlib serait de ne pas avoir une grosse DLL, d'intègrer directement à PB de nouvelles instructions et d'avoir dans l'executable que le code necessaire plutot que toute la lib.
)
http://www.purebasic.fr/french/viewtopi ... a066ca129f

Je me dis que WolfgangS a bidouillé libv2.h en C avec libv2.lib quelque part.(un peu comme on le fait pour PB et v2 synth avec le repertoire "PureLibraries" ?) Pas taper. :] J'aimerais comprendre le principe.

Publié : jeu. 01/nov./2007 15:55
par KarLKoX
On peut maintenant utiliser directement les libs statiques via Import/ImportC, il suffit de déclarer les prototypes des fonctions exportées mais à l'époque, PB ne proposait pas cela, d'où cette lib de WolfgangS.
A noter que comme tout bon compilateur, PB n'importe que les fonctions utilisées dans la lib lors de la compilation.

Publié : jeu. 01/nov./2007 17:57
par Buckethead
Merci KarLKoX. 8)
Je trouve ça génial que l'on puisse en Basic aborder aussi "simplement" ce genre de code.

Code : Tout sélectionner

; Inclure dans l'executable et jouer un fichier v2m (dans le répertoire de la source) avec la lib statique "libv2.lib" dans C:
; (libv2.h inutile)

DataSection 
  musique: IncludeBinary "ma_musique.v2m"
EndDataSection  

; # La lib statique de Kb
Import "C:\libv2.lib"
EndImport

; # Et hop! :)
ssInit(?musique,GetForegroundWindow_())
ssPlay()

; Pour le reste des fonctions, elles sont dans le help en .chm de WolfgangS: "Libv2Purebasic.chm"


Publié : ven. 02/nov./2007 20:27
par Buckethead
J'ai essayé de faire de même avec une autre lib pour le son, "O(ld)S(kool)M(usaxxs)Engine v0.92" qui joue des fichiers Atari ST/Amiga (Fichier zip:http://www.vectronixhq.de/wp-content/pl ... d.php?id=2)
Il y a dans le répertoire [static_libs] le fichier "osme-library.lib" très comparable à v2m synth mais avec un code similaire à celui plus haut en déclarant les prototypes des fonctions exportées , du style
Import "C:\libv2.lib" : EndImport : playOSMEMusicFile("musique.ym",1)
ça ne fonctionne pas, pourquoi ? :oops:


playOSMEMusicFile() is not a function, array,macro or linked list
L'import tout de fois me semble bien fonctionner.

Code : Tout sélectionner

DataSection 
  musique: IncludeBinary "Gloomy.sndh" 
EndDataSection  

Import "C:\osme-library.lib"  
EndImport 
playOSMEMusicMem(?musique,7101,1) 
;ou playOSMEMusicFile(?musique,7101,1)
;ou playOSMEMusicFile("C:\Gloomy.sndh",7101,1)


Publié : sam. 03/nov./2007 0:43
par KarLKoX
Salut :)
J'ai testé rapido et effectivement, ça ne fonctionne pas, j'ai réussi à avancer en déclarant la fonction sans succès :

ImportC "osme-library.lib"
playOSMEMusicMem.l(pMusic.l, length.l, trackId.l) As "_playOSMEMusicMem"
EndImport

J'ai ensuite essayé d'utiliser la lib produite par gcc (mingw), idem mais elle m'a permis de déduire que ces libs ont quelques choses de bizarres : pspad (mon éditeur de texte) n'arrive pas à tout afficher + PB me dit qu'elle a été compilé pour une architecture différente.
Cela peut donc signifier qu'elles ont peut être fait l'objet de bidouilles lors de la compilation (optimisations agressives) rendant ces les linkers un peu à l'ouest. (mais pas celui de Freebasic apparamment)
Dommage que le code source n'est pas dispo (il est dans l'illégalité, cf la licence GNU), il y a d'ailleurs quelque chose qui me gene avec cette lib : il remercie l'auteur de la lib SC68 sur laquelle repose celle ci mais pas Lenorard (StSound) qu'il utilise et pas qu'un peu car il dit avoir utilisé DirectSound pour le son mais la aussi il n'a fait qu'utiliser le code source de Leonard ... j'ai comme l'impression qu'il tente de tirer la gloire d'un travail tres minime en arborant l'aspect technique de l'émulation utilisé par les core (sur son site).
Bref, sans code source, pas façile de reproduire une lib statique.
Ce n'est la qu'une hypothèse parmis tant d'autre.

Publié : sam. 03/nov./2007 8:52
par zorg
KarLKoX a écrit : Dommage que le code source n'est pas dispo
Ben pourtant il est bien sur le site... : http://www.vectronixhq.de/wp-content/pl ... d.php?id=3

Publié : sam. 03/nov./2007 15:32
par KarLKoX
Ah oui, j'ai bien dit que j'avais regardé rapido :lol:
Bon, j'ai fait une recompile de la lib statique ici en stdcall (donc foo@4 ) mais lors de la compilation en PB, le linker (de PB) rame et ... rame pour ne jamais finir.
Je verrais ça tout à l'heure car la j'ai un truc à faire ^_^

Publié : lun. 05/nov./2007 19:30
par Buckethead
Je vois, merci beaucoup d'avoir essayé KarLKoX, c'est surtout le fait que je n'y comprenais plus rien avec la lib static ;) Apparement il vaut mieux passer par la DLL. Sinon on peut toujour envoyer un mail à l'auteur car il a donner une source PB pour une autre DLL audio.

Publié : jeu. 20/déc./2007 16:01
par Buckethead
Bien, en fait ca ne marche pas du tout avec mon ancien code.

Code : Tout sélectionner

Import "C:\libv2.lib" 
EndImport 
Si ca a marché c'est que j'ai été à l'époque buggé par la lib de WolfgangS qui résidait encore dans mon répertoire.

Il faut en plus mettre les instructions avec leur type de variable dans le style fonctionTruc.l(*bla, bidule.l) As "fonctionTruc" ce qui n'est pas toujours évident.


Edit: La lib n'est pas compatible avec vista. Vous trouverez cependant MagicV2m par dAWN qui marche très bien.

Merci...