Page 1 sur 2

Fmodex et Effets Graphiques

Publié : jeu. 14/nov./2013 17:56
par Ar-S
Yop,

Je rebosse sur un petit lecteur radio utilisant fmod. Si je n'ai pas de soucis pour lire mes stations, j'aimerai maintenant faire un petit visualisateur graphique suivant les bmp ou autre fréquences afin de donner un peu de vie à mon lecteur. (En fait une simple barre de chargement min 0 max 100 qui oscillerait.)

il me semble que Dobro avait fait un truc du genre mais je ne le trouve pas. Si quelqu'un à les commandes à utiliser. l'aide de Fmod est trop velue.

il y a probablement à utiliser FMOD_Channel_GetSpectrum mais je ne vois pas trop comment.

Merci

Re: Fmodex et Effets Graphiques

Publié : jeu. 14/nov./2013 21:08
par Backup
je te repond demain ;)

Re: Fmodex et Effets Graphiques

Publié : ven. 15/nov./2013 13:25
par Ar-S
:mrgreen: :mrgreen: :mrgreen: Cool on est demain :mrgreen: :mrgreen: :mrgreen:

Re: Fmodex et Effets Graphiques

Publié : ven. 15/nov./2013 13:51
par Backup
tout d'abords , il n'est pas possible de faire un Spectrum
sur les Streamings avec Fmodex !!

ça ne marche que pour la lecture des MP3 ....

ça t’intéresse toujours ?

Re: Fmodex et Effets Graphiques

Publié : ven. 15/nov./2013 14:14
par Backup
bon voila pour la lecture des mp3

tu lances, ça te demande de charger un mp3 (choisi un mp3 qui envoie d'entré... )

lance ce code en mode debugger ON , car je n'ai pas prevu de sorti de code (c'est un exemple :mrgreen: )

le principe tu creer 512 Sprites
et c'est FModex qui te renvoi le niveau de chacun d'eux ...
lis j'ai mis des commentaire ...

ça marche grace au buffer son , n'ayant jamais reussi a lui faire lire le buffer son du Streaming live a l'epoque
j'ai laissé tombé .....

mais pour les Mp3 ça marche nickel :)

le code :

Code : Tout sélectionner


;***********************************************
;Titre  :*test_fmodex
;Auteur  : Dobro
;Date  :24/10/2013
;Heure  :17:22:14
;Version Purebasic :  PureBasic 5.20 LTS (Windows - x86)
;Version de l'editeur :EPB V2.50
; Libairies necessaire : Fmodex.pbi 
;***********************************************


Enumeration
	#window
	#image
EndEnumeration


IncludePath "E:\Dobro\Purebasic_5_20\x86\Include\"
XIncludeFile "fmodex.pbi"


Declare    Oscillo(sound)


; **************** initialisation Sprite des 512 niveaux************
Global Dim Arr.F(512) ; tableau pour les 512 niveaux
If InitSprite() = 0
	MessageRequester("Erreur", "Impossible d'ouvrir l'écran & l'environnement nécessaire aux sprites !", 0)
	End
EndIf
Structure sprite
	x.l
	y.l
EndStructure
Global Dim sprite.sprite(512)
; creation de la fenetre d'affichage des niveau

If OpenWindow(#window, pos_x, pos_y, 300, 170, "Pure Radio", #PB_Window_SystemMenu)
	
	If OpenWindowedScreen(WindowID(#window), 4, 4,290,50,0,0,0 )
		ClearScreen(RGB($0,$0,$0))
		FlipBuffers()
		
		For i=1 To 512 Step 4
			CreateSprite(i,2,32):CreateImage(#image,2,32,32)
			sprite(i)\x=i
			sprite(i)\y=50
			StartDrawing ( ImageOutput (#image))
				DrawingMode ( #PB_2DDrawing_Gradient )
				;
				BackColor($0000FF)
				GradientColor(0.4, $00FFFF)
				GradientColor(0.6, $FFFF00)
				FrontColor($FF0000)
				LinearGradient(0, 0, 2, 32)
				
				Box(0, 0, 2, 32)
			StopDrawing ()
			StartDrawing ( SpriteOutput (i))
				DrawImage(ImageID(#image),0,0)
			StopDrawing()
		Next i
		
	EndIf
Endif
; *******************************************





;;; url$="http://mp3.live.tv-radio.com/rfo/all/rfo_polynesie-128k.mp3" ; Radio Polynesie ;)

; ************init Fmodex ****************************
FMOD_System_Create(@fmodsystem)
FMOD_System_Init(fmodsystem, 32, 0, 0)
; ***************************************

;;;; ***** pas de stream reseau dans cet exemple **********
;;;;FMOD_System_CreateStream(fmodsystem, @url$, #FMOD_CREATESTREAM, 0, @sound)

;;;;;FMOD_System_PlaySound(fmodsystem, 0, sound, 0, @channel) ; joue l'url
;;; *************************************************



str.s = OpenFileRequester("Choose a soundfile", "c:", "*.*|*.*", 0)
If str<>"" ; on charge le fichier
	FMOD_System_CreateStream(fmodsystem, @str, #FMOD_SOFTWARE, 0, @sound) ; creer le stream
	FMOD_Sound_GetLength(sound, @longueur, #FMOD_TIMEUNIT_MS) ; recupe la taille du son dans longueur (sert pour un scrollBar eventuel )
	FMOD_System_PlaySound(fmodsystem, 0, sound, 0, @channel) ; joue
Endif

Repeat
	Evenement.l= WaitWindowEvent(2)
	
	
	FMOD_Channel_GetSpectrum(channel, Arr(), 512, 0, 0 ) ; recuperere les 512 niveaux des frequences
	Oscillo(sound) ; le graph au centre ecran graphique
	
	
	
	Select EventWindow()
		;-evenement window
		
		
	EndSelect
	
	FlipBuffers()
	ClearScreen(0)
ForEver

Procedure Oscillo(sound)
	Static compteur.F,compteur2.F
	compteur.F=compteur.F+1
	compteur2.F=compteur2.F+10
	largeur=290 :hauteur=50
	
	
	If state=0 And play=1
		For spr=1 To 512 Step 4
			variation=25* Sin(compteur2*#PI/180)
			sprite(spr)\x=spr
			sprite(spr)\y= variation* Sin(spr*#PI/180)
			DisplaySprite(spr,sprite(spr)\x+compteur.F,sprite(spr)\y)
			sprite(spr)\y=50 ; remet le sprite en bas
			If sprite(spr)\x+compteur.F>512
				compteur.F=0
				sprite(spr)\x=0
			EndIf
			
		Next spr
		
		Else
		For spr=1 To 512 Step 4
			sprite(spr)\y=sprite(spr)\y-Arr(spr)*32*spr
			DisplaySprite(spr,sprite(spr)\x,sprite(spr)\y)
			sprite(spr)\y=50 ; remet le sprite en bas
		Next spr
	EndIf
	
EndProcedure


; 



; 

; EPB

Re: Fmodex et Effets Graphiques

Publié : ven. 15/nov./2013 14:24
par Backup
..........

Re: Fmodex et Effets Graphiques

Publié : ven. 15/nov./2013 15:03
par Ar-S
Excellent merci.
Content d'avoir pu t'aider à trouver ton erreur (gag ! :mrgreen: :mrgreen:)

Re: Fmodex et Effets Graphiques

Publié : ven. 15/nov./2013 15:13
par Backup
Ar-S a écrit :Excellent merci.
Content d'avoir pu t'aider à trouver ton erreur (gag ! :mrgreen: :mrgreen:)
non non , c'est pas un gag !! Merci :D

Re: Fmodex et Effets Graphiques

Publié : ven. 15/nov./2013 16:56
par falsam
Sympa ce code Dobro. Merci :)

Re: Fmodex et Effets Graphiques

Publié : ven. 15/nov./2013 18:18
par falsam
Petite contribution. J'ai repris les éléments de ton code pour en faire un Spectrum Meter.

Image

Le code met en oeuvre le gadget MeterGadget() et l'instruction associé SetMeterState() pour mettre à jour le vumètre.
L'include MeterGadget.pbi permettant de créer ce gadget se trouve sur ce lien http://www.purebasic.fr/english/viewtop ... 12&t=54117

le code complet

Code : Tout sélectionner

EnableExplicit

IncludeFile "fmodex.pbi"
IncludeFile "MeterGadget.pbi"

Enumeration
  #Mainform
EndEnumeration

Define.l Event, GEvent, TiEvent

Global WindowStyle.i=#PB_Window_SystemMenu|#PB_Window_ScreenCentered
Global VuMeter.i

Global fmodsystem.i, Channel.i, Sound.i
Global Dim Arr.F(512), N.i ; Tableau pour les 512 niveaux
Global Url.s

Procedure VueMeterUpdate()
  Protected Sum.f
  
  FMOD_Channel_GetSpectrum(channel, Arr(), 512, 0, 0 ) ; recuperere les 512 niveaux des frequences
  For N=0 To 512 
    Sum + Arr(N)
  Next
  SetMeterState(VuMeter, Sum*10)
EndProcedure

Procedure Open_MainForm()
  OpenWindow(#Mainform, 0, 0, 190, 200, "Spectrum Meter", WindowStyle)
  SetWindowColor(#Mainform, $300000)
  VuMeter= MeterGadget(#PB_Any, 20, 50, 100, "Spectrum")
  AddWindowTimer(#Mainform, 100, 100) 
EndProcedure

Procedure Start()
  Open_MainForm()
  Url ="http://50.7.98.106:8719"
  
  FMOD_System_Create(@fmodsystem)
  FMOD_System_Init(fmodsystem, 32, 0, 0)

  FMOD_System_CreateStream(fmodsystem, @Url, #FMOD_CREATESTREAM, 0, @sound)
  FMOD_System_PlaySound(fmodsystem, 0, sound, 0, @channel) ; joue l'url
  
  FMOD_Channel_SetVolume(Channel, 0.5)
EndProcedure

start()

Repeat
  Event   = WaitWindowEvent(100)    
  GEvent  = EventGadget()
  TiEvent = EventTimer()
  
  Select Event
    Case #PB_Event_Timer
      Select TIEvent
          Case 100
            VueMeterUpdate() 
        EndSelect
            
    Case #PB_Event_Gadget
      Select GEvent
      EndSelect
        
    Case #PB_Event_CloseWindow
      FMOD_Channel_Stop(Channel)
      FMOD_System_Release(fmodsystem)
      End
  EndSelect
ForEver
Encore une fois, merci Dobro pour ton aide:)

Re: Fmodex et Effets Graphiques

Publié : sam. 16/nov./2013 10:05
par Micoute
Bonjour à tous et merci pour ce partage, mais j'ai un problème d'erreur de lecture à l'adresse 0.

Auriez-vous une solution à me proposer ?

Merci beaucoup d'avance !

Re: Fmodex et Effets Graphiques

Publié : sam. 16/nov./2013 11:05
par Ar-S
Avec quel code ?

Re: Fmodex et Effets Graphiques

Publié : sam. 16/nov./2013 12:16
par falsam
Micoute a écrit :j'ai un problème d'erreur de lecture à l'adresse 0.Auriez-vous une solution à me proposer ?
Tu pourras surement confirmer que cette erreur se produit au niveau de cette ligne

Code : Tout sélectionner

  FMOD_System_Create(@fmodsystem)
et que tu n'as pas le fichier fmodex.dll dans le même dossier que ton code.

■ Un fichier compressé qui contient :
fmodex.dll et fmodex.pbi nécessaires au fonctionnement des codes suivants.
Demo - Graph Sprite.pb correspondant au code de Dobro.
Demo - Meter Gadget.pb et MeterGadget.pbi pour le code que j'ai proposé plus haut:)

:arrow: fmodex.zip

Re: Fmodex et Effets Graphiques

Publié : sam. 16/nov./2013 18:26
par Micoute
Ar-S a écrit :Avec quel code ?
Avec les deux !

Re: Fmodex et Effets Graphiques

Publié : sam. 16/nov./2013 18:27
par falsam
Micoute a écrit :
Ar-S a écrit :Avec quel code ?
Avec les deux !
N'oublies pas de regarder ma réponse et le lien que je te propose :)